คำสั่ง Unix ทั้งหมดถูกเขียนขึ้นใหม่ใน Linux หรือไม่


44

ฉันต้องการที่จะรู้ว่าคำสั่งใดถูกเขียนขึ้นใหม่สำหรับ Linux และถูกเก็บรักษาไว้จาก Unix?


นี่เป็นแผนภูมิต้นไม้ครอบครัวที่ดีupload.wikimedia.org/wikipedia/commons/thumb/7/77/…
Mark Stewart

คำตอบ:


93

ดูเหมือนว่าคุณสับสนสองส่วนที่ต่างกันของระบบปฏิบัติการ เป็นที่เข้าใจได้เพราะมักถูกเรียกว่า interchangably แต่ก็ไม่ถูกต้องทางเทคนิคดังนั้นคำถามของคุณจะขึ้นอยู่กับหลักฐานที่ผิดพลาด เพื่อที่จะสำรวจอย่างเต็มที่และหวังว่าจะตอบคำถามที่คุณต้องการถามจำเป็นต้องมีบทเรียนประวัติย่อ

อย่างแรกคือ UNIX โดยพื้นฐานแล้วในสมัยนั้น UNIX หมายถึงระบบAT&T UNIXซึ่งมาก่อน แต่ AT & T UNIX กลายเป็นไม่ใช่ฟรีเพื่อให้ริชาร์ดสตอลแมนเริ่มต้นโครงการ GNU จะเขียนระบบ Unix ซึ่งเป็นฟรี ดังนั้นชื่อGnu ไม่ใช่ Unixย่อ GNU แผนสำหรับ GNU ถูกทำให้ประชาชนในปี 1983 และเริ่มพัฒนาในปี 1984

ในช่วงต้นทศวรรษ 1990 GNU ได้นำยูทิลิตี้ UNIX ส่วนใหญ่กลับมาใช้ใหม่ตั้งแต่ต้น Wikipedia แสดงส่วนประกอบบางส่วนของระบบโดยรวมที่ไม่ได้เขียนใหม่ (TeX, X Window System และ Mach microkernel ถูกกล่าวถึงเป็นตัวอย่างของส่วนประกอบที่ไม่ได้เขียนใหม่) แต่ส่วนใหญ่เครื่องมือ userland ถูกเขียนใหม่ตั้งแต่ต้นเพื่อตอบสนอง เป้าหมายของการหลีกเลี่ยงการนำรหัส AT&T ใด ๆ (หรือมากกว่านั้น) มาใช้ซ้ำรวมถึงการขยายขีดความสามารถด้วยการเพิ่มตัวเลือกบรรทัดคำสั่ง ผลที่ได้คืออรรถประโยชน์ของ GNU นั้นมีประสิทธิภาพมากกว่าเครื่องมือที่ใช้ในการสร้างแรงบันดาลใจ

ณ จุดที่ GNU ยังคงหายไปองค์ประกอบสำคัญที่หนึ่ง: เคอร์เนลระบบปฏิบัติการซึ่งจะช่วยให้ทุกอย่างที่จะร่วมกันทำงานบนคอมพิวเตอร์ที่เกิดขึ้นจริงไม่ได้ทำงานบาง OS อื่น ๆ ในปี 1991 Linus Torvalds เริ่มทำงานในโครงการของเล่นซึ่งต่อมาได้กลายเป็นที่รู้จักในนาม Linux โดยพื้นฐานแล้วมันเป็นโครงการของโรงเรียนที่จะเรียนรู้เกี่ยวกับCPU 80386รุ่น 32 บิตใหม่ของIntelและเริ่มต้นง่ายมาก แต่ในที่สุดก็เริ่มแปรเปลี่ยนเป็นเคอร์เนลระบบปฏิบัติการที่ใช้งานได้จริง แต่มันไม่มีซอฟต์แวร์ userland ใด ๆ ลินุกซ์ในตัวของมันเองไม่มีเชลล์, ไม่มีระบบอำนวยความสะดวกในการเริ่มต้นนอกเหนือจากการเริ่มต้นเคอร์เนล, ไม่มีโปรแกรมแก้ไขข้อความ, ไม่มีส่วนต่อประสานกราฟิก, ไม่มีอะไรเลย. เคอร์เนลเปรียบเสมือนเครื่องยนต์ของรถยนต์ จำเป็นต่อการสร้างรถยนต์ที่มีประโยชน์ แต่ไม่มีประโยชน์สำหรับตัวเอง (สำหรับรถยนต์ที่มีประโยชน์คุณต้องมีสิ่งต่าง ๆ เช่นล้อเกียร์พวงมาลัยพวงมาลัยที่ให้คนขับนั่งถังน้ำมันหรือพลังงานอื่น ๆ ) ลินุกซ์เคอร์เนลในที่สุดก็มีการกระจายภายใต้ใบอนุญาตสาธารณะทั่วไปเช่นเดียวกับซอฟแวร์ GNU

ดังนั้นผู้คนจึงเริ่มจับคู่ทั้งสอง คุณจะได้ userland ที่เหมือน Unix รวมถึงเคอร์เนลที่มีแนวคิดจาก Unix (รวมถึง resemblence ที่ใกล้เคียงกับPOSIX ) พร้อมด้วยซอร์สโค้ดที่คุณสามารถแฮ็คได้ตามที่คุณต้องการและไม่เสียค่าใช้จ่ายใด ๆ . โดยเฉพาะอย่างยิ่งก่อนที่การแจกแจงของ Linuxจะกลายเป็นเรื่องปกติมันใช้เวลาเล็กน้อยในการแก้ไขเพื่อให้ได้งาน แต่มันก็เสร็จสิ้นมากพอที่จะใช้งานได้โดยผู้ที่เต็มใจใช้เวลาอยู่กับมัน

ทุกวันนี้ GNU ให้เคอร์เนลของตัวเอง คุณอาจจะไม่เคยได้ยินมัน แต่ก็เรียกว่าGNU Hurd แต่ฮูลด์ไม่ได้อยู่ในช่วงต้นทศวรรษ 1990 เมื่อลีนุกซ์เริ่มได้รับความสนใจในหมู่นักอดิเรกและคนจรจัดดังนั้นมันจึงเป็นการรวมกันของเคอร์เนลลินุกซ์และผู้ใช้ส่วนใหญ่ของ GNU ที่ได้รับความสนใจจากนักพัฒนามากที่สุด

นอกจากนี้ในปัจจุบันมีการติดตั้งระบบ Unix จำนวนมากหรืออนุญาตให้ผู้ดูแลระบบติดตั้งได้อย่างง่ายดายส่วนต่างๆของ GNU userland คุณอาจเห็นสิ่งต่าง ๆ เช่น GNU bash, GNU Compiler Collection, ไลบรารี GNU C (วานิลลาหรือแพทช์) และอื่น ๆ ในระบบที่ไม่ใช่ GNU

เพื่อทำให้เรื่องแย่ลงระบบบางระบบใช้เคอร์เนล Linux แต่ไม่มี userU ของ GNU เลย สำหรับตัวอย่างที่ใช้กันอย่างแพร่หลายให้พิจารณาAndroid OSซึ่งโดยทั่วไปจะเป็นเคอร์เนล Linux ควบคู่กับ userland แบบกำหนดเอง

สิ่งนี้มีความสำคัญเพราะมันพร่าเลือนเส้นแบ่งระหว่าง GNU, Linux และ Unixes ต่าง ๆ ( มีเพียง UNIX เดียวแต่มี Unixes จำนวนมากและยังเหมือน OS Unixมากกว่า) เมื่อคุณถามเกี่ยวกับ Linux คุณมักถามเกี่ยวกับระบบ GNU / Linux บ่อยครั้ง แต่พิจารณาDebian GNU / kFreeBSDซึ่งรันuserU ของ GNU ด้านบนของเคอร์เนล FreeBSD ไม่ใช่ใช้ Linux เลย หรือตัวอย่างเช่นโซลาริสที่คุณสามารถติดตั้งแพคเกจต่าง ๆ รวมทั้ง GNU เช่น coreutils ฉันคิดว่า Mac OS X มาพร้อมกับชิ้นส่วนของ GNU userland ด้วย หรือพิจารณา Android ที่กล่าวถึงข้างต้น

ในที่สุดระบบ GNU ที่ใช้งานได้อาจเรียกใช้โค้ดที่ไม่ใช่ GNU และระบบที่ไม่ใช่ GNU อาจเรียกใช้โค้ด GNU ได้ แต่ยูทิลิตี GNUนั้นไม่มีโค้ดที่ไม่ใช่ GNU


1
ครั้งล่าสุดที่ฉันใช้ FreeBSD (หลายปีที่ผ่านมา) มันไม่ได้ใช้เครื่องมือ GNU หลายตัว แต่เป็นชุดของมันเอง - เช่น BSD ทำแทน GNU
reinierpost

5
@reinierpost OSX คล้ายกันมาก - การติดตั้งแบบธรรมดาประกอบด้วยสิ่งต่าง ๆ ส่วนใหญ่เป็นรุ่น BSD แต่ coreutils ของ GNU และสิ่งที่คล้ายกันนั้นสามารถใช้งานได้ง่ายผ่านMacPortsและอื่น ๆ XCode ใช้ LLVM แต่ยัง gcc มันซับซ้อน :)
MattDMo

1
@reierierpost ทำไม่ได้เลวร้ายที่จะแทนที่ เรียบเรียง Cคือมีส่วนร่วมน้อยมาก อย่างน้อยFreeBSD 8.0 ใช้ GCC เป็นคอมไพเลอร์เริ่มต้น ; รุ่นเฉพาะ 4.2.1 "ปัญหาเกี่ยวกับสิทธิ์ใช้งาน" ที่อ้างถึงเพื่อป้องกันการรวมรุ่นที่ใหม่กว่าเข้าสู่ระบบพื้นฐานอาจเกี่ยวกับการเปลี่ยนจาก GPL2 + เป็น GPL3 + แต่ฉันไม่แน่ใจ
CVn

3
@ hunter2 ดูเหมือนว่ามันไม่ต้องการโดยขึ้นอยู่กับการนับคะแนนในตอนนี้ ;) ฉันไม่ได้ตั้งใจเขียนประวัติเต็มเช่นกัน Minix มีบทบาทสำคัญในฐานะการพัฒนาระบบ Linux และ bootstrap ก่อนที่ Linux จะกลายเป็นโฮสติ้งด้วยตนเอง แต่มีอิทธิพลเพียงเล็กน้อยต่อความสัมพันธ์ระหว่าง Linux, GNU และ UNIX ดั้งเดิมซึ่งมีความสอดคล้องกับสิ่งที่เป็นปัญหามากขึ้น
CVn

3
@ hunter2 ถ้าเราต้องลงไปทางนั้นมันเป็นความจริงที่แน่นอนว่า UNIX ไม่ได้มาก่อนเหมือนกัน แต่สำหรับจุดประสงค์ในการตอบคำถามดูเหมือนจะเป็นการประมาณที่ดีพอ คำตอบประโยคเดียวอาจเป็นบางสิ่งบางอย่างเช่น "โดยพื้นฐานแล้วทุกอย่าง UNIX ยกเว้น TeX และ X ที่คุณพบในระบบ Linux นั้นถูกเขียนใหม่เป็นส่วนหนึ่งของ GNU" แต่ฉันคิดว่าบริบทเพิ่มเติมจะเพิ่มคุณค่าแม้ว่ามันจะทำให้คำตอบยาวกว่า จำเป็น - และคำตอบก็ยังไม่ครอบคลุมทุกรายละเอียด
CVn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.