กลับไปหน้าบทความ

อ่าน 5 นาที

Fork (การพัฒนาซอฟต์แวร์)

ใน การพัฒนาซอฟต์แวร์ ฟอร์ก ( fork ) คือ โค้ดเบส ที่สร้างขึ้นโดยการคัดลอกโค้ดเบสที่มีอยู่แล้ว และโดยทั่วไปจะถูกแก้ไขในภายหลังโดยอิสระจาก โค้ดต้นฉบับ ซอฟต์แวร์ ที่สร้าง...

Fork (การพัฒนาซอฟต์แวร์)

แผนภูมิแสดงลำดับเวลาของการวิวัฒนาการของระบบปฏิบัติการลินุกซ์โดยแต่ละส่วนที่แยกออกมาในแผนภูมิเรียกว่า "ฟอร์ก"

ในการพัฒนาซอฟต์แวร์ ฟอร์ก ( fork )คือโค้ดเบสที่สร้างขึ้นโดยการคัดลอกโค้ดเบสที่มีอยู่แล้ว และโดยทั่วไปจะถูกแก้ไขในภายหลังโดยอิสระจาก โค้ดต้นฉบับ ซอฟต์แวร์ที่สร้างจากฟอร์กในตอนแรกจะมีพฤติกรรมเหมือนกับซอฟต์แวร์ที่สร้างจากโค้ดต้นฉบับ แต่เมื่อ มีการแก้ไข ซอร์สโค้ดมากขึ้น ซอฟต์แวร์ที่ได้จะมีพฤติกรรมที่แตกต่างจากต้นฉบับมากขึ้นเรื่อยๆ ฟอร์กเป็นรูปแบบหนึ่งของการแตกสาขาแต่โดยทั่วไปจะเกี่ยวข้องกับการจัดเก็บไฟล์ที่ฟอร์กแยกต่างหากจากไฟล์ต้นฉบับ – ไม่ใช่ใน ที่เก็บ ข้อมูลเหตุผลในการฟอร์กโค้ดเบส ได้แก่ ความต้องการของผู้ใช้ การพัฒนาซอฟต์แวร์ต้นฉบับหยุดชะงักหรือยุติลง หรือความแตกแยกในชุมชนนักพัฒนา[ 1 ]การฟอร์กซอฟต์แวร์ที่เป็นกรรมสิทธิ์ (เช่นUnix ) เป็นสิ่งต้องห้ามตาม กฎหมาย ลิขสิทธิ์หากไม่ได้รับอนุญาตอย่างชัดแจ้ง แต่ซอฟต์แวร์ฟรีและโอเพนซอร์สตามคำจำกัดความแล้ว สามารถฟอร์กได้โดยไม่ต้องขออนุญาต

นิรุกติศาสตร์

คำว่าforkถูกใช้ในความหมายว่า "แยกออกเป็นกิ่งก้าน แยกทางกัน" มาตั้งแต่ศตวรรษที่ 14 [ 2 ]

ในบริบทของการพัฒนาซอฟต์แวร์ คำว่าforkถูกใช้ในความหมายของการสร้างสาขา ควบคุมการแก้ไข โดยEric Allmanตั้งแต่ปี 1980 ในบริบทของระบบควบคุมซอร์สโค้ด : [ 3 ]

การสร้าง branch คือการ "แยก" เวอร์ชันของโปรแกรมออกมา

คำนี้ถูกนำมาใช้ในUsenetตั้งแต่ปี 1983 สำหรับกระบวนการสร้างกลุ่มย่อยเพื่อย้ายหัวข้อการสนทนาไป[ 4 ]

แม้ว่าคำว่า "fork"จะไม่ปรากฏว่าถูกใช้ในความหมายของการแตกแยกในชุมชนในช่วงกำเนิดของ Lucid Emacs (ปัจจุบันคือ XEmacs ) (1991) หรือBerkeley Software Distributions (BSDs) (1993–1994) แต่Russ Nelsonได้ใช้คำว่า"shattering"ในความหมายนี้ในปี 1993 (โดยอ้างอิงถึงJohn Gilmore ) [ 5 ]ในปี 1995 คำว่า "fork"ถูกใช้เพื่ออธิบายการแตกแยกของ XEmacs [ 6 ]และเป็นการใช้งานที่เข้าใจได้ในโครงการGNU ในปี 1996 [ 7 ]

คำนี้ใช้ในทำนองเดียวกันสำหรับการเรียกใช้ระบบ fork()ซึ่งทำให้กระบวนการ ที่กำลังทำงาน แยกออกเป็นสองส่วน โดยทั่วไป เพื่อให้สามารถทำงานที่แตกต่างกันได้พร้อมกัน[ 8 ]

การแตกสาขาของซอฟต์แวร์โอเพนซอร์สและฟรี

ซอฟต์แวร์ ฟรีและโอเพนซอร์สสามารถแยกสาขาได้อย่างถูกกฎหมายโดยไม่ต้องขออนุมัติล่วงหน้าจากผู้ที่กำลังพัฒนา จัดการ หรือเผยแพร่ซอฟต์แวร์นั้น ตามทั้งคำจำกัดความของซอฟต์แวร์ฟรีและคำจำกัดความของโอเพนซอร์ส : [ 9 ]

เสรีภาพในการแจกจ่ายสำเนาเวอร์ชันที่แก้ไขแล้วของคุณให้ผู้อื่น (เสรีภาพข้อที่ 3) การทำเช่นนี้จะทำให้ชุมชนทั้งหมดมีโอกาสได้รับประโยชน์จากการเปลี่ยนแปลงของคุณ การเข้าถึงซอร์สโค้ดเป็นเงื่อนไขเบื้องต้นสำหรับเรื่องนี้

3. ผลงานดัดแปลง: สัญญาอนุญาตต้องอนุญาตให้มีการแก้ไขและสร้างผลงานดัดแปลง และต้องอนุญาตให้เผยแพร่ผลงานเหล่านั้นภายใต้เงื่อนไขเดียวกันกับสัญญาอนุญาตของซอฟต์แวร์ต้นฉบับ

ในซอฟต์แวร์เสรี การแยกสาขามักเกิดจากความแตกแยกเนื่องจากเป้าหมายที่แตกต่างกันหรือความขัดแย้งส่วนตัว ในการแยกสาขา ทั้งสองฝ่ายจะถือว่ามีฐานรหัสที่เกือบจะเหมือนกัน แต่โดยทั่วไปจะมีเพียงกลุ่มที่ใหญ่กว่า หรือผู้ที่ควบคุมเว็บไซต์เท่านั้นที่จะยังคงใช้ชื่อเดิมทั้งหมดและชุมชนผู้ใช้ที่เกี่ยวข้อง ดังนั้น การแยกสาขาจึงส่งผลเสียต่อชื่อเสียง[ 9 ]ความสัมพันธ์ระหว่างทีมต่างๆ อาจเป็นไปอย่างฉันมิตรหรือขมขื่นมาก ในทางกลับกันการแยกสาขาที่เป็นมิตรหรือการแยกสาขาแบบนุ่มนวลคือการแยกสาขาที่ไม่ได้ตั้งใจจะแข่งขัน แต่ต้องการรวมเข้ากับสาขาเดิมในที่สุด

Eric S. RaymondในบทความHomesteading the Noosphere [ 12 ] ระบุว่า "ลักษณะสำคัญที่สุดของการแยกสาขาคือการก่อให้เกิดโครงการที่แข่งขันกันซึ่งไม่สามารถแลกเปลี่ยนโค้ดได้ในภายหลัง ทำให้ชุมชนนักพัฒนาที่มีศักยภาพแตกแยก" เขากล่าวไว้ในJargon Fileว่า: [ 13 ]

การแยกโปรเจกต์ (Forking) ถือเป็นสิ่งที่ไม่ดี ไม่ใช่แค่เพราะมันหมายถึงการเสียเวลาและความพยายามในอนาคต แต่เพราะการแยกโปรเจกต์มักมาพร้อมกับความขัดแย้งและความบาดหมางระหว่างกลุ่มผู้สืบทอดในประเด็นเรื่องความชอบธรรม การสืบทอด และทิศทางการออกแบบ มีแรงกดดันทางสังคมอย่างมากต่อการแยกโปรเจกต์ ส่งผลให้การแยกโปรเจกต์ครั้งใหญ่ๆ (เช่น การแยก Gnu-Emacs / XEmacsการแตก กลุ่ม 386BSDออกเป็นสามโปรเจกต์ย่อย และการแยก GCC/EGCS ที่มีอายุสั้น) เกิดขึ้นน้อยมากจนถูกจดจำในฐานะโปรเจกต์เฉพาะในตำนานของเหล่าแฮกเกอร์เท่านั้น

David A. Wheeler ตั้งข้อสังเกต[ 9 ]ว่าการแยกสาขามีผลลัพธ์ที่เป็นไปได้สี่ประการ พร้อมตัวอย่าง:

  1. การล่มสลายของฟอร์ก นี่คือกรณีที่พบได้บ่อยที่สุด การประกาศฟอร์กนั้นง่าย แต่การพัฒนาและการสนับสนุนอย่างอิสระนั้นต้องใช้ความพยายามอย่างมาก
  2. การรวมสาขาเข้าด้วยกันอีกครั้ง ( เช่น egcs กลายเป็น "เวอร์ชันใหม่" ของGNU Compiler Collection )
  3. การสิ้นสุดของเวอร์ชันดั้งเดิม ( เช่น X.Org Serverประสบความสำเร็จและXFree86ล่มสลาย)
  4. การแตกแขนงที่ประสบความสำเร็จ โดยทั่วไปมักมีการแยกความแตกต่าง ( เช่นOpenBSDและNetBSD )

เครื่องมือ ควบคุมการแก้ไขแบบกระจาย (DVCS) ทำให้คำว่า "fork" เป็นที่นิยมมากขึ้น ซึ่งทำให้ความแตกต่างระหว่าง "fork" กับ "branch" คลุมเครือ[ 14 ]ด้วย DVCS เช่นMercurialหรือGitวิธีปกติในการมีส่วนร่วมในโครงการคือการสร้าง branch ส่วนตัวของ repository ก่อน ซึ่งเป็นอิสระจาก repository หลัก และต่อมาจึงพยายามรวมการเปลี่ยนแปลงของคุณเข้ากับ branch นั้น เว็บไซต์เช่นGitHub , BitbucketและLaunchpadให้บริการโฮสติ้ง DVCS ฟรีที่รองรับ branch อิสระอย่างชัดเจน ทำให้ลดอุปสรรคทางเทคนิค สังคม และการเงินในการ fork repository ซอร์สโค้ดลงอย่างมาก และ GitHub ใช้คำว่า "fork" เป็นคำเรียกวิธีการมีส่วนร่วมในโครงการแบบนี้

โดยทั่วไปแล้ว การแยกสาขาจะเริ่มต้นการกำหนดหมายเลขเวอร์ชันใหม่จากหมายเลขที่ใช้สำหรับเวอร์ชันเริ่มต้นของโปรแกรม เช่น 0.0.1, 0.1 หรือ 1.0 แม้ว่าซอฟต์แวร์ดั้งเดิมจะมีเวอร์ชันอื่น เช่น 3.0, 4.0 หรือ 5.0 ก็ตาม บางครั้งอาจมีข้อยกเว้นเมื่อซอฟต์แวร์ที่แยกสาขานั้นได้รับการออกแบบให้สามารถใช้แทนโครงการดั้งเดิมได้โดยตรง เช่นMariaDBสำหรับMySQL [ 15 ]หรือLibreOfficeสำหรับOpenOffice.org

ใบอนุญาต BSDอนุญาตให้มีการแตกสาขาเพื่อกลายเป็นซอฟต์แวร์กรรมสิทธิ์ และ ผู้สนับสนุน copyleftกล่าวว่าแรงจูงใจทางการค้าทำให้การสร้างกรรมสิทธิ์แทบจะหลีกเลี่ยงไม่ได้ (อย่างไรก็ตาม ใบอนุญาต copyleft สามารถหลีกเลี่ยงได้โดยการออกใบอนุญาตแบบคู่ขนานด้วยการให้สิทธิ์กรรมสิทธิ์ในรูปแบบของข้อตกลงใบอนุญาตผู้มีส่วนร่วม ) ตัวอย่างเช่นmacOS (ซึ่งใช้ NeXTSTEPที่เป็นกรรมสิทธิ์และFreeBSD ที่เป็นโอเพนซอร์ส ) CedegaและCrossOver (สาขาที่เป็นกรรมสิทธิ์ของWineแม้ว่า CrossOver จะติดตาม Wine และมีส่วนร่วมอย่างมาก) EnterpriseDB (สาขาของPostgreSQLโดยเพิ่มคุณสมบัติความเข้ากันได้กับ Oracle [ 16 ] ) Supported PostgreSQL พร้อมระบบจัดเก็บข้อมูล ESM ที่เป็นกรรมสิทธิ์[ 17 ]และ PostgreSQL ที่เป็นกรรมสิทธิ์ของ Netezza [ 18 ]ซึ่งมีความสามารถในการปรับขนาดสูง ผู้จำหน่ายบางรายนำการเปลี่ยนแปลงกลับมายังโครงการชุมชน ในขณะที่บางรายเก็บการเปลี่ยนแปลงของตนไว้เป็นข้อได้เปรียบในการแข่งขันของตนเอง

การแยกซอฟต์แวร์ที่เป็นกรรมสิทธิ์

ในซอฟต์แวร์กรรมสิทธิ์ลิขสิทธิ์มักเป็นของหน่วยงานที่ว่าจ้าง ไม่ใช่ของนักพัฒนาซอฟต์แวร์แต่ละคน ดังนั้นโค้ดกรรมสิทธิ์จึงมักถูกแยกออกเป็นหลายเวอร์ชัน (fork) เมื่อเจ้าของต้องการพัฒนาสองเวอร์ชันขึ้นไป เช่น เวอร์ชัน แบบมีหน้าต่างและ เวอร์ชัน แบบบรรทัดคำสั่งหรือเวอร์ชันสำหรับระบบปฏิบัติการที่แตกต่างกัน เช่น โปรแกรมประมวลผลคำสำหรับ เครื่องคอมพิวเตอร์ที่เข้ากันได้กับ IBM PCและ คอมพิวเตอร์ Macintoshโดยทั่วไป การแยกเวอร์ชันภายในดังกล่าวจะเน้นที่การมีรูปลักษณ์ ความรู้สึก รูปแบบข้อมูล และพฤติกรรมที่เหมือนกันระหว่างแพลตฟอร์ม เพื่อให้ผู้ใช้ที่คุ้นเคยกับแพลตฟอร์มหนึ่งสามารถทำงานหรือแชร์เอกสารที่สร้างขึ้นบนอีกแพลตฟอร์มหนึ่งได้ นี่เป็นเกือบทุกกรณีเป็นการตัดสินใจทางเศรษฐกิจเพื่อสร้างส่วนแบ่งการตลาด ที่มากขึ้น และชดเชยค่าใช้จ่ายในการพัฒนาเพิ่มเติมที่เกิดจากการแยกเวอร์ชันนั้น

การแยกสาขาที่เป็นกรรมสิทธิ์ที่โดดเด่นซึ่งไม่ใช่ประเภทนี้คือ Unixที่เป็นกรรมสิทธิ์หลากหลายรูปแบบซึ่งเกือบทั้งหมดมาจาก AT&T Unix ภายใต้ใบอนุญาตและเรียกทั้งหมดว่า "Unix" แต่เข้ากันไม่ได้มากขึ้นเรื่อยๆ[ 19 ]ดูUnix wars

ดูเพิ่มเติม

  • สิทธิ์ในการใช้ส้อมในมีทบอลวิกิ
  • วิทยานิพนธ์ปริญญาเอกเกี่ยวกับการแยกโค้ด(Nyman, 2015) เก็บ ถาวรเมื่อวันที่ 16 กรกฎาคม 2023 ที่Wayback Machine "การทำความเข้าใจการแยกโค้ดในซอฟต์แวร์โอเพนซอร์ส – การตรวจสอบการแยกโค้ด ผลกระทบต่อซอฟต์แวร์โอเพนซอร์ส และมุมมองและการปฏิบัติของนักพัฒนา"
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Fork_(software_development)&oldid=1356024773 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ Fork (การพัฒนาซอฟต์แวร์)

ใน การพัฒนาซอฟต์แวร์ ฟอร์ก ( fork ) คือ โค้ดเบส ที่สร้างขึ้นโดยการคัดลอกโค้ดเบสที่มีอยู่แล้ว และโดยทั่วไปจะถูกแก้ไขในภายหลังโดยอิสระจาก โค้ดต้นฉบับ ซอฟต์แวร์ ที่สร้าง...

นิรุกติศาสตร์

คำว่า fork ถูกใช้ในความหมายว่า "แยกออกเป็นกิ่งก้าน แยกทางกัน" มาตั้งแต่ศตวรรษที่ 14 [ 2 ]

การแตกสาขาของซอฟต์แวร์โอเพนซอร์สและฟรี

ซอฟต์แวร์ ฟรีและ โอเพนซอร์ส สามารถแยกสาขาได้อย่างถูกกฎหมายโดยไม่ต้องขออนุมัติล่วงหน้าจากผู้ที่กำลังพัฒนา จัดการ หรือเผยแพร่ซอฟต์แวร์นั้น ตามทั้ง คำจำกัดความของซอฟต์แวร์ฟรี และ คำจำกัดความของโอเพนซอร์ส : [ 9 ]

การแยกซอฟต์แวร์ที่เป็นกรรมสิทธิ์

ใน ซอฟต์แวร์กรรมสิทธิ์ ลิขสิทธิ์มักเป็นของหน่วยงานที่ว่าจ้าง ไม่ใช่ของนักพัฒนาซอฟต์แวร์แต่ละคน ดังนั้นโค้ดกรรมสิทธิ์จึงมักถูกแยกออกเป็นหลายเวอร์ชัน (fork) เมื่อเจ้าของต้องการพัฒนาสองเวอร์ชันขึ้นไป เช่น เวอร์ชัน แบบมีหน้าต่าง และ เวอร์ชัน แบบบรรทัดคำสั่ง...