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)
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 ขึ้นมาแทน
📚 อ่านต่อ:
- The Evolution of the Unix Time-sharing System — Dennis Ritchie, 1979
- Ken Thompson — Turing Award Lecture — 1984
- UTF-8 history — Rob Pike, 2003
Top comments (0)