สิ่งที่เป็นองค์ประกอบสำคัญในการพัฒนา UNIX คือภาษา C และการกำหนดมาตรฐานต่างๆ ครับ วันนี้เลยมาพูดถึงเรื่องนี้ให้ฟัง
ความสำคัญของ Compatibility
เคยเล่าไปแล้วในตอนกำเนิดของ UNIX ว่าเวอร์ชั่นแรกนั้นเขียนด้วยภาษา Assembly ซึ่งทำให้ทำงานได้เพียงเครื่องชนิดนั้นๆเท่านั้น หากมีเครื่องใหม่ออกมาที่โครงสร้าง CPU เปลี่ยนไป ก็ต้องเขียนใหม่
Ritchie เข้าร่วมการพัฒนา UNIX กับ Ken Thompson โดยพัฒนาภาษา C ขึ้น และ UNIX ก็เริ่มใช้ภาษา C เป็นมาตรฐานในการเขียน Kernel และ โปรแกรมต่างๆใน OS แต่ภาษา C ในช่วงแรก ไม่ได้กำหนดการทำงานอย่างละเอียด พอ UNIX โตขึ้นก็เริ่มมีปัญหา หนังสือ The C Programming Language ของ Kernighan & Ritchie เล่มแรกออกมาในปี 1978 หลายคนคงเคยอ่านมา จะพบว่าข้อกำหนดภาษาไม่ครอบคลุมทุกด้าน ทำให้การ implement จริงอาจไม่ตรงกันในแต่ละระบบ
จนในปี 1985 ก็เกิด C++ ขึ้นโดย Bjarn Stroustrup จึงเริ่มมีข้อกำหนดที่มีรายละเอียดมากขึ้น ข้อดีคือการเกิดขึ้นของ C++ ซึ่งเป็น Object Oriented Programming ยังคงยึดหลัก compatible กับ C program อยู่ทำให้โปรแกรทที่เขียนมาก่อน ยังคงใช้ได้ แต่อย่างไรก็ตาม ภาษา C มาถึงจุดที่ต้องมีมาตรฐานกำกับ
มาตรฐาน ANSI C
ในปี 1989 หน่วยงาน American National Standard Institute (ANSI) เทียบได้กับ สมอ. (สำนักงานมาตรฐานอุตสาหกรรม) ของเรา ก็ออกข้อกำหนด ANSI C (X3.159-1989) และ revise ใหม่ในปีถัดมา เรียกสั้นๆว่า C89 และ ISO C90 และหนังสือ The C Programming Language ฉบับพิมพ์ครั้งที่ 2 ก็ยึดมาตรฐานนี้ ทำให้ C มีความเสถียรขึ้น
มาตรฐานของภาษา C ที่แพร่หลายที่สุดคือ C99 ที่ออกมาในปี 1999 ในวงการมีความสับสนเล็กน้อย คือคำว่า ANSI C นั้นเริ่มแรกจะหมายถึง C89 ในขณะที่ gcc (GNU C Compiler) ก็ยึดว่า ANSI C คือ C90 แต่ในความหมายที่เข้าใจของคนทั่วไปคือ C99 ดังนั้นหลายคนจึงหลีกเลี่ยงที่จะใช้คำว่า ANSI C แต่ใช้ C89, C90, C99 แทน
กำเนิดของ POSIX
การมีมาตรฐานภาษา C ยังไม่พอที่จะทำให้โปรแกรมที่เขียนขึ้นสำหรับ UNIX และ Linux มี compatibility ได้ จึงมีการตั้งมาตรฐานอีกตัวคือ POSIX (Portable Operating System Interface) ซึ่งตั้งขึ้นโดย IEEE (Institute of Electrical and Electronic Engineers) ตั้งคณะทำงานชื่อ PASC (Portable Application Standards Committee) ซึ่งทำหน้าที่กำหนดมาตรฐานของโปรแกรมที่รันใน UNIX ในระดับ source level นั่นแปลว่าถ้าโปรแกรมเขียนโดยมาตรฐานนี้ จะสามารถนำ source code ไป compile ใน UNIX รุ่นไหนก็ได้
ชื่อ POSIX ถูกเสนอโดย Richard Stallman เจ้าพ่อ GNU ที่เคยเล่าให้ฟัง เพราะ PASC เรียกยาก และอะไรๆใน UNIX ต้องลงท้ายด้วย X ถึงจะขลัง
มาตรฐาน POSIX เป็น source level compatibility นะครับ ไม่เหมือน API ซึ่งเป็น binary level โปรแกรม POSIX ไปรันได้ทุก UNIX (และ Linux) แต่ต้อง compile ใหม่ วิธีนี้ทำให้มาตรฐาน POSIX ไม่ได้จำกัดที่ UNIX หรือ UNIX-liked แต่ OS อะไรก็ตามที่ยึดมาตรฐานนี้ ก็จะสามารถใช้โปรแกรมที่เป็น POSIX compatible ได้หมด ทำให้การเขียนโปรแกรมง่ายขึ้นที่จะนำไปรันในระบบอื่นๆ
POSX.1 ออกมาในปี 1988 และมีแก้ไขเพิ่มเติมออกมาอีกหลายรอบ จนในปี 1992 ก็ออก POSIX.2 ซึ่งกำหนดเพิ่มในส่วนของ shell, UNIX utilities และ Command-line interface สำหรับ C compiler ทำให้คำสั่งของ C compiler ก็มีมาตรฐานไปด้วย
มีอีกมาตรฐานคือ FIPS ที่อิง POSIX แต่มีรายละเอียดมากกว่า รัฐบาลสหรัฐใช้สำหรับจัดซื้อระบบของราชการ แต่ยกเลิกไปในปี 2000
ในส่วนของตัว UNIX แท้ๆ นั้น AT&T เอามาตรฐาน POSIX ไปกำหนดเป็น AT&T System V Interface Definition Issue 3 (คนทั่วไปเรียกว่า Spec 1170) แต่พอ Novel ซื้อ UNIX ไปในปี 1993 นอกจากยุติคดีความต่างๆ ของ UNIX ตามที่เคยเล่าแล้ว ยังโอนเครื่องหมายการค้าของ UNIX ไปที่ X/Open ในปี 1994 และกำหนดมาตรฐานใหม่เป็น Single UNIX Specification (SUSv1) หรือที่เรียกว่า UNIX 95
ในปี 1996 X/Open ก็รวมกับ Open Software Foundation (OSF) เป็น The Open Group เป็นองค์กรกลางที่บริษัทใหญ่ๆเข้าไปเป็นสมาชิก และกำหนดข้อกำหนดของ UNIX ตั้งแต่นั้นมา
แล้วก็มีดราม่าอีก AT&T และ Sun รวมหัวกันไปตั้ง UNIX International Consortium แต่ไม่สำคัญอะไรนัก จบดีกว่า ยาวเกินละ
สรุปว่ามาตรฐาน UNIX ตาม Single UNIX Specification ปัจจุบันมี OS 7 ตัวที่ได้รับมาตรฐานนี้ คือ AIX, FTX, EulerOS, HP-UX, XInuos, z/OS และ MacOS นี่เป็นเหตุว่าทำไม MacOS เป็น UNIX ตามที่เคยเล่าม