DEV Community

Gophernment
Gophernment

Posted on

Ken Thompson — คนที่เขียนระบบปฏิบัติการใน 3 สัปดาห์

Ken Thompson — คนที่เขียนระบบปฏิบัติการใน 3 สัปดาห์

ปี 1969 เคน ทอมป์สัน อายุ 26 เป็นวิศวกรที่ Bell Labs

เขากับทีมเพิ่งเสียโปรเจกต์ Multics ซึ่งเป็นระบบปฏิบัติการที่ซับซ้อนเกินไปจนถูกยกเลิก Bell Labs ถอนตัว ทีมแตก โปรเจกต์ตาย

เคนมีเวลาเหลือเฟือ และมี PDP-7 ซึ่งเป็นคอมพิวเตอร์เก่าที่แทบไม่มีใครใช้

ใน 3 สัปดาห์ เขาเขียน Unix kernel, shell, editor, และ assembler ขึ้นมาบน PDP-7 — ทั้งหมดเป็น assembly — ภาษา B ยังไม่เกิดตอนนั้น

B ถูกสร้างขึ้นหลังจากนั้น — เพื่อใช้เขียน utility ต่าง ๆ แทน assembly — และนี่คือจุดเริ่มต้นของสายภาษา B → C → Go


ภาษา B — เกิดหลัง Unix เวอร์ชันแรก

Unix เวอร์ชันแรกสุด — สิงหาคม 1969 — เป็น assembly ล้วน

หลังจากนั้นไม่นาน Ken ก็เริ่มสร้าง B — โดยตัดทอนมาจาก BCPL — เพื่อให้มีภาษาระดับสูงไว้เขียน tools โดยไม่ต้องใช้ assembly ทั้งหมด

B มาจาก BCPL (Basic Combined Programming Language) ซึ่งพัฒนาโดย Martin Richards ที่ Cambridge ในปี 1966 BCPL เป็นภาษาที่ไม่มี type — ทุกอย่างคือ word — และออกแบบมาให้ compiler พกพาง่าย

Ken เอา BCPL มาตัดทุกอย่างที่ไม่จำเป็นออก — จนเหลือภาษาเล็กมากที่ทำงานได้บน PDP-7 ซึ่งมี RAM แค่ 4K words

PDP-7 Assembly → Unix v1 (1969, 3 สัปดาห์)
                    ↓
BCPL (Richards, 1966)
    ↓ ตัด feature, ลดขนาด
B (Thompson, 1969-1970)
    ↓ ใช้ rewrite Unix utilities (ไม่ใช่ kernel)
    ↓
    ↓ เพิ่ม type system, struct, portability
C (Ritchie, 1972)
    ↓ Unix v4 rewrite ด้วย C (1973)
Enter fullscreen mode Exit fullscreen mode

B ไม่มี type system ไม่มีโครงสร้างข้อมูล มีแค่ word — เหมือนกับว่าเป็น BCPL เวอร์ชัน minimal

B ถูกใช้เขียน shell, utilities, และ tools ต่าง ๆ ของ Unix — แต่ kernel ยังเป็น assembly อยู่ จนกระทั่ง Dennis Ritchie สร้าง C ขึ้นมาในปี 1972


ทำไมต้อง B

PDP-7 มี assembly แต่นั่นไม่ใช่เหตุผลที่ดีพอที่จะใช้มัน

Ken ไม่เชื่อในการเขียน OS ด้วย assembly ทั้งระบบ — assembly เร็วแต่เขียนช้า แก้ยาก พกพาไม่ได้

การใช้ภาษาระดับสูง (แม้จะสูงนิดเดียวแบบ B) ทำให้:

  • เขียน shell, utilities เร็วขึ้นมาก
  • แก้ไขง่าย — ไม่ต้องเขียนใหม่เวลาย้ายเครื่อง
  • ใช้คนน้อยลง — Unix version แรกเขียนโดย 2 คน

จาก B → C → Unix → ทุกอย่าง

เมื่อทีมได้ PDP-11 ซึ่งเป็นเครื่องที่ใหญ่กว่า — B เริ่มมีปัญหา PDP-11 มี byte-addressing แต่ B ออกแบบมาเพื่อ word-addressing — ทำให้ใช้ความสามารถของเครื่องใหม่ได้ไม่เต็มที่

Dennis Ritchie จึงเริ่มเพิ่ม type system ลงใน B — int, char, struct, pointer — และ C ก็เกิดในปี 1972

Unix ถูก rewrite ด้วย C — และกลายเป็นระบบปฏิบัติการที่พกพาได้ — ครั้งแรกที่ OS ถูกเขียนด้วยภาษาระดับสูงที่ไม่ใช่ assembly

จาก Unix → BSD → Linux → macOS → iOS → Android — ทุกสิ่งที่เราใช้อยู่ทุกวันนี้ เริ่มจาก Ken Thompson — คนที่เขียน OS ใน 3 สัปดาห์เพราะเขาเบื่อ


สิ่งที่ Ken ทำหลังจากนั้น

UTF-8 — Ken Thompson และ Rob Pike ร่างมันระหว่างกินข้าวเย็นที่นิวเจอร์ซีย์ บนกระดาษรองจาน

Go — Ken Thompson, Rob Pike, Robert Griesemer สร้างขึ้นในปี 2007 ภาษาของ cloud-native era

Turing Award 1983 — ร่วมกับ Dennis Ritchie สำหรับการสร้าง Unix และ National Medal of Technology 1998 จากประธานาธิบดี Clinton


นิสัยการทำงานของ Ken

Ken เป็นคนที่ไม่ชอบประชุม ไม่เขียนเอกสาร ไม่ทำแผน — เขาแค่เขียนโค้ด

เวลามีคนถามว่าทำไม Unix ถึงดี — เขาตอบว่า:

"I can't tell you why Unix is good without sounding like I'm bragging."

Rob Pike เคยเล่าว่า:

"Ken สามารถถือโค้ดของระบบปฏิบัติการทั้งระบบไว้ในหัวได้ — และรู้ว่าบรรทัดไหนทำอะไร — โดยไม่ต้องเปิดไฟล์"


ทำไมเรื่องนี้ถึงสำคัญ

ปี 1969 — มนุษย์ไปดวงจันทร์ครั้งแรก — ปีเดียวกับที่ Ken Thompson เขียน OS ใน 3 สัปดาห์

56 ปีผ่านไป — เรายังใช้สิ่งที่เขาสร้าง

Shell ที่คุณเปิด terminal อยู่ตอนนี้ — ใช้ cd, ls, grep — ทั้งหมดมาจาก Unix

ภาษา Go ที่เราเขียน — ออกแบบโดย Ken Thompson ในวัย 64

UTF-8 ที่เว็บทั้งโลกใช้ — ออกแบบโดย Ken Thompson และ Rob Pike บนกระดาษรองจาน


นี่คือ Ken Thompson — คนที่เบื่อ Multics — แล้วเขียน Unix ขึ้นมาแทน

📚 อ่านต่อ:

Top comments (0)