ข้อเท็จจริงของความแตกต่างระหว่างCarbonกับCocoa

ตั้งแต่ระบบปฏิบัติการณ์ osX ของแอปเปิ้ลถือกำเนิดเป็นต้นมา คุณจะพบอยู่บ่อยครั้งว่ามีการประกาศเปิดตัว
โปรแกรมใหม่ๆ ที่เป็น Native สำหรับ osX เกิดขึ้นไม่เว้นแต่ละวัน โปรแกรมบางตัวก็ระบุว่าเป็น Cocoa-Based
และบางตัวก็ระบุว่าเป็น Carbon-Based แต่ก็มีผู้พัฒนาซอพท์แวร์บางรายก็ฉลาดพอที่จะไม่เอ่ยถึงสิ่งที่ว่านี้แต่
ประการใดเพราะรู้ว่าผู้ใช้แมคส่วนใหญ่ไม่รู้หรือไม่ค่อยสนใจกับทั้งสองสิ่งที่กล่าวมาเลยก็ว่าได้ ตลอดเวลาทาง
แอปเปิ้ลหมั่นบอกกล่าวกับบรรดาผู้พัฒนาซอพท์แวร์เกี่ยวกับประโยชน์ที่จะได้รับจาก Cocoa อยู่เสมอ ดังนั้นจึง
ทำให้เหล่าผู้ใช้แมคหลงคิดไปว่าโปรแกรมที่เป็น Cocoa-Based นั้นเหนือกว่าโปรแกรมที่เป็น Carbon-Based
โดยไม่ทราบข้อเท็จจริงเท่าที่ควร ทั้งๆ ที่การเลือก API หรือ Framework ซึ่งก็คือ Carbon และ Cocoa นั้น
จะให้ผลดีผลเสียต่อผู้พัฒนาโปรแกรมมากกว่าผู้ใช้เป็นอย่างมาก สำหรับบทความชิ้นนี้ ซึ่งต้องขอขอบคุณ
REAL Software อันเป็นที่มาของข้อมูล ซึ่งจะได้อธิบายถึง Carbon และ Cocoa ว่ามันคืออะไรกันแน่ มีความ
แตกต่างกันอย่างไร และมีผลกระทบอะไรกับผู้ใช้บ้าง

มารำลึกถึงประวัติศาสตร์กันเล็กน้อย
เมื่อระบบปฏิบัติการแมคได้ถือกำเนิดขึ้นมาในปี ค.ศ 1984 มันก็ได้นำมาซึ่งการเขียนโปรแกรมในรูปแบบใหม่
อันน่าพิศวงด้วยเช่นกัน ในปีต่อๆ มาระบบปฏิบัติการสำหรับคอมพิวเตอร์แพลทฟอร์มอื่นๆ ต่างก็ได้พัฒนาขีด
ความสามารถใหม่ๆ เรื่อยๆ อย่างเช่น Protected Memory หรือ Preemptive Multi-Tasking โดยคุณสมบัติ
ดังกล่าวทำให้ระบบปฏิบัติการเหล่านี้มีการทำงานที่น่าเชื่อถือกว่าเดิมมาก แต่ทว่าทางแอปเปิ้ลเองกลับมิได้บรรจุ
ความสามารถดังกล่าวใส่ในระบบปฏิบัติการของตนเลย โดยแอปเปิ้ลให้เหตุผลง่ายๆ ว่า ตัวโปรเซสเซอร์ในสมัย
นั้นยังมิได้มีพัฒนาการให้มีความเร็วอย่างเพียงพอ ดังนั้นการบรรจุคุณสมบัติที่ว่านี้ลงใน Mac OS จึงเป็นงาน
ใหญ่และยากลำบากอย่างสาหัสพอสมควร เนื่องจากต้องรื้อออกมาแก้ไขที่แกนของตัวระบบปฏิบัติการโดยตรง
ซึ่งทางแอปเปิ้ลเองก็ได้พยายามลองมาหลายครั้งแล้วเช่นกัน แต่ก็ไม่ประสพผลสำเร็จ ในท้ายที่สุดแอปเปิ้ลจึงคิด
ได้ว่า บริษัทควรจะซื้อระบบปฏิบัติการตัวใหม่แล้วนำมาประยุกต์ใช้บนแมคโดยตรงเลยจะเป็นวิธีง่ายกว่า

ในตอนแรกนั้นแอปเปิ้ลสนใจ BeOS มาก แต่การเจรจาซื้อไม่บรรลุผลเพราะถูกโก่งราคา แม้กระทั่ง Solaris
ของ Sun ก็เคยเป็นทางเลือกหนึ่งของแอปเปิ้ล สุดท้ายก็ต้องมาลงเอยที่ระบบปฏิบัตการ NEXTSTEP จาก NeXT
อันเป็นบริษัทที่ สตีพ จอปส์ ก่อตั้งขึ้นเมื่อครั้งถูกอัปเปหิออกจากแอปเปิ้ล จึงส่งผลให้ จอปส์ ได้กลับคืนสู่บ้าน
หลังเก่าอีกครั้ง ระบบปฏิบัติการ NEXTSTEP นั้นมีคุณสมบัติต่างๆ เพียงพอตามที่แอปเปิ้ลต้องการ แต่ GUI หรือ
หน้าตาของมันแตกต่างจาก Mac OS อย่างสิ้นเชิง ดังนั้นทางแอปเปิ้ลจึงได้จัดการดัดแปลงแต่งหน้าเสียใหม่
ให้มันมีหน้าตาเหมือน Mac OS ที่เราคุ้นเคยกันมากยิ่งขึ้น แอปเปิ้ลเรียกผลลัพท์ที่ออกนี้ว่า Rhapsody ตั้งแต่นั้น
เป็นต้นมา Rhapsody ก็ได้กลายเป็นระบบปฏิบัติการใหม่เอี่ยมอ่องของชาวแมคที่มีหน้าตาใกล้เคียงกับ MacOS
แต่ซอพท์แวร์ต่างๆ ที่มีอยู่แล้วอย่าง Photoshop หรือ MS Office ไม่สามารถรันบน Rhapsody ได้ ซึ่งแอปเปิ้ล
จำเป็นต้องทำให้ซอพท์แวร์เหล่านี้ใช้กับ Rhapsody ให้ได้ เพื่อหวังจะให้ชาวแมคเปลี่ยนมาใช้ระบบปฏิบัติการใหม่
ตามที่แอปเปิ้ลต้องการ

แต่โชคไม่ค่อยดีนัก เนื่องจากระบบปฏิบัตการที่แตกต่างกันนั้น จะว่าไปก็เปรียบเสมือนภาษาพูดที่นำมาพูดกัน
คนละภาษา ระบบปฏิบัติการทั้งสองนี้สามารถทำงานชิ้นเดียวกันให้บรรลุผลได้แต่จะทำในวิถีที่ต่างกัน ดังนั้นการ
ที่จะนำเอาแอพพลิเคชั่นสำหรับ Mac OS มารันบน Rhapsody ให้ได้นั้น เราจำเป็นต้องเปลี่ยนโค้ดทุกบรรทัดของ
แอพพลิเคชั่นนั้นๆ เป็นภาษาใหม่ทั้งหมดเพื่อให้ Rhapsody สามารถเข้าใจได้ แต่ปัญหาติดอยู่ที่ว่า แอพพลิเคชั่น
เดิมส่วนใหญ่ของแมคนั้นเขียนมักจะขึ้นมาด้วยภาษา Pascal, C และ C++ ในขณะเดียวกันถ้าคุณต้องสื่อสารกับ
Rhapsody ภาษาเดียวที่คุณจะใช้ได้ก็คือ Objective-C เท่านั้น อันภาษา Objective-C นี้เป็นภาษาใหม่ที่ NeXT
พัฒนาขึ้นมาใช้เอง บรรดาผู้พัฒนาทั้งหลายที่ต้องการพัฒนาซอพท์แวร์ของตนให้สามารถรันบน Rhapsody นั้น
นอกจากจะต้องเรียนรู้ภาษาใหม่แล้ว ยังต้องเขียนโปรแกรมขึ้นมาใหม่ทั้งหมดด้วยภาษานี้อีกด้วย แอพพลิเคชั่น
แต่ละตัวมีโค้ดตั้งแต่หลายพันบรรทัดไปจนถึงหลายล้านบรรทัด จึงไม่แปลกที่บรรดาผู้พัฒนาซอพท์แวร์ทั้งหลาย
ต่างก็รีรอไม่มีการตอบรับระบบปฏิบัติการตัวนี้ ดังนั้นจึงเป็นเรื่องเร่งด่วนสำหรับแอปเปิ้ล ที่จะทำให้ผู้พัฒนาเหล่า
นี้สามารถโยกย้ายผ่องถ่ายซอพท์แวร์ของตนไปยัง Rhapsody ได้ง่ายขึ้น ก่อนที่ทุกอย่างจะสายไป

API คืออะไร
เวลาที่แอพพลิเคชั่นใดๆ ก็ตามต้องการสื่อสารกับระบบปฏิบัติการ มันจะต้องติดต่อผ่านทาง APIs ซึ่งย่อจาก
Application Programming Interface นั่นเอง โดย API จะเป็นตัวบอกระบบปฏิบัติการให้ทำงานชนิดต่างๆ
ตั้งแต่งานง่ายๆ อย่างเช่น ให้ส่งเสียง Beep ไปจนถึงงานที่ซับซ้อนขึ้น เช่น การ Drag & Drop เป็นต้น ขอยก
ตัวอย่าง เช่น ถ้าเราสั่งให้ Mac OS ส่งเสียง Beep ตัวแอพพลิเคชั่นก็ต้องเรียกใช้ฟังค์ชั่นจาก API ของ Mac OS
ที่ชื่อว่า SysBeep() แต่ถ้าเป็น Rhapsody ต้องเรียกฟังค์ชั่น NSBeep ซึ่งฟังค์ชั่นทั้งสองจะให้ผลการทำงานที่
เหมือนกัน เพียงแต่จะมีรูปแบบการเขียนที่ต่างกันเท่านั้น

Cocoa คืออะไรกันแน่
Cocoa ก็คือ ชื่อที่แอปเปิ้ลใช้เรียกแทนชุด APIs ต่างๆ ที่มีแต่เดิมอยู่แล้วใน Rhapsody บรรดาแอพพลิเคชั่น
ต่างๆ ที่เขียนบนระบบปฏิบัติการ NEXTSTEP นั้น มักจะเขียนด้วยภาษา Objective-C ซึ่งใช้ฟังค์ชั่นจาก Cocoa
APIs เป็นหลัก คุณจะเห็นได้ว่า มีแอพพลิเคชั่นบางตัวที่ติดมากับ Mac OS X เช่น Mail และ Chess ได้ถูกพัฒนา
มาก่อนอยู่แล้วบน NEXTSTEP ดังนั้นมันจึงเป็น Cocoa-Based นั่นเอง นอกจากนี้แล้วยังมีแอพพลิเคชั่นจากค่าย
อื่นๆ อีกหลายตัวที่เดิมเขียนขึ้นสำหรับระบบปฏิบัติการ NEXTSTEP แต่ต่อมาถูกอัพเดทให้รันบน Mac OS X ได้
แอพพลิเคชั่นเหล่านี้ก็ใช้ Cocoa APIs หรือเป็น Cocoa-Based เช่นกัน

Carbon คืออะไร
เมื่อ Rhapsody ถูกเปลี่ยนชื่อมาเป็น Mac OS X แอปเปิ้ลก็ได้เสนอทางแก้ในการแปลงแอพพลิเคชั่นต่างๆ ของ
Mac OS ให้กลายเป็น Native OS X โดยการเพิ่ม APIs ชุดใหม่เข้าไปอีกชุดหนึ่ง อันมีนามว่า "Carbon" โดยที่
APIs ชุดนี้ จะมีชื่อฟังค์ชั่นและพารามิเตอร์ส่วนใหญ่เหมือนกับ APIs ของ Mac OS ซึ่งเป็นชุด APIs ที่บรรดานัก
พัฒนาซอพท์แวร์แมคคุ้นเคยกันอยู่แล้ว ดังนั้นการแปลงแอพพลิเคชั่น จึงต้องการเพียงแค่การแก้ไขโค้ดหรือ
อัพเดทโค้ดเพียงบางส่วนเท่านั้น ก็จะได้แอพพลิเคชั่นที่เป็น Native OS X อย่างสมบูรณ์แบบ กระนั้นถึงแม้ว่าจะ
เป็นการแก้ไขโค้ดบางส่วนก็ตาม แต่มันก็ยังเป็นงานที่หนักหนาอยู่พอสมควรอย่างไรก็ดี วิธีนี้ถ้าเปรียบแล้วก็ยัง
สบายกว่าการเขียนแอพพลิเคชั่นขึ้นมาใหม่ทั้งหมดอย่างแน่นอน

Cocoa ดีกว่า Carbon จริงหรือเปล่า
คำตอบสั้นๆ คือ ไม่จริง เพราะทั้ง Cocoa และ Carbon APIs ต่างก็เรียกฟังค์ชั่นใน Application Services
และ Core Services Layers ของ OS X ซึ่งตรงกันข้ามกับที่คนทั่วไปคิด เนื่องจาก Carbon APIs มิได้เรียก
ฟังค์ชั่นผ่าน Cocoa APIs อีกทอดหนึ่ง จึงไม่มีการเสียเวลาใดๆ มากไปกว่า Cocoa APIs เมื่อใช้ Carbon APIs
สรุปว่า ถ้าคุณต้องการเขียนแอพพลิเคชั่นขึ้นมาใหม่ซักตัวหนึ่ง ซึ่งรันบน OS X เท่านั้น คุณควรจะเลือกเรียนรู้
Cocoa APIs จะเหมาะสมกว่า เนื่องจากเป็น APIs ระดับสูงกว่า Carbon APIs แต่เท่าที่ทราบนักเขียนโปรแกรม
บนแมครุ่นดั้งเดิมส่วนใหญ่ มักจะเขียนโค้ดที่มีอัลกอริทึ่มดีๆ เก็บสะสมใน Library มาเป็นระยะเวลาหลายปี เพราะ
สามารถหยิบมาใช้ได้ตามที่ต้องการ บวกกับความรู้ที่ฝังรากลึกในภาษา C หรือ C++ จึงทำให้พวกเขาเลือกที่จะ
ใช้ Carbon มากกว่าการที่จะต้องมาเริ่มต้นเรียนรู้ภาษา Objective-C อีกหนึ่งภาษา มิหนำซ้ำยังต้องเขียนโค้ด
สำหรับซอพท์แวร์ที่ตนเคยเขียนมาแล้วอีกครั้งหนึ่ง

จริงหรือที่แอพพลิเคชั่นที่เป็น Cocoa สามารถทำสิ่งต่างๆ ได้มากกว่าแอพพลิเคชั่นที่เป็น Carbon
คำตอบสั้นๆ ก็คือ ไม่จริงอีกนั่นแหละ เพราะทั้ง Cocoa และ Carbon APIs ต่างก็เรียกสั่งงานไปยังส่วนเดียว
กันใน OS X อย่างไรก็ตามยังมีฟังค์ชั่นชุดย่อยๆ บางชุด ที่ทางแอปเปิ้ลเปิ้ลยังมิได้บรรจุลงไปใน Carbon ด้วย
เหตุผลง่ายๆ เพียงเพราะว่า มันไม่มีจำเป็นใดๆ สำหรับแอพพลิเคชั่นที่ต้องถูกสร้างให้เป็น Native OS X แต่ใน
ทางกลับกัน Carbon เองก็มีชุดฟังค์ชั่นย่อยซึ่งแอพพลิเคชั่นที่ใช้ Cocoa ไม่มีเช่นกัน ด้วยเหตุผลอย่างเดียวกัน
นั่นก็คือ แอพพลิเคชั่นที่ใช้ Cocoa นั้น ไม่มีความจำเป็นต้องใช้ฟังค์ชั่นชุดนี้แต่ประการใด ซึ่งทางแอปเปิ้ลเองก็
ได้ทำงานเพื่อลดความแตกต่างของ APIs ทั้งสองให้เหลือน้อยที่สุดอยู่แล้ว

แอพพลิเคชั่นที่เป็น Carbon-Based ที่ความเป็น Native OS X น้อยกว่า Cocoa-Based หรือเปล่า
ดังที่ได้กล่่าวมาข้างต้น ทั้ง Cocoa APIs และ Carbon APIs ต่างก็เรียกสั่งงานไปยังส่วนเดียวกันใน OS X
ดังนั้น แอพพลิเคชั่นที่เป็น Cocoa-Based จึงมีความเป็น Native OS X ไม่มากไม่น้อยไปกว่าแอพพลิเคชั่นที่เป็น
Carbon-Based แต่อย่างไร จะมีปัญหาก็ตรงที่ Carbon APIs นั้นใหม่กว่า Cocoa APIs เพราะเพิ่งพัฒนาขึ้นมา
ทีหลัง จึงอาจส่งผลให้มีบั้กต่างๆ บ้างในระยะแรกๆ แต่ปัญหาดังกล่าวจะค่อยๆ ถูกแก้ไขจากแอปเปิ้ลในอนาคต
อย่างแน่นอน

Cocoa จะเป็นอนาคตของ Mac OS X หรือเปล่า แล้ว Carbon จะถูกหมางเมินหรือไม่
ถ้าคุณมิได้ลงทุนศึกษาหรือมีรากฐานมาจาก C/C++ และ Carbon APIs โดยสิ่งที่คุณสนใจก็คือ การเขียน
แอพพลิเคชั่นสำหรับ OS X เท่านั้น Cocoa และ Objective-C อาจจะเป็นทางเลือกที่ถูกต้องสำหรับคุณ การเขียน
โปรแกรมโดยใช้ Cocoa และ Objective-C อาจจะใช้โค้ดในการเขียนน้อยกว่า C/C++ และ Carbon APIs
ในงานชิ้นเดียวกันก็จริง แต่บรรดานักพัฒนาซอพท์แวร์ที่มีอยู่ในขณะนี้ ดูเหมือนว่าจะเลือกใช้ C/C++ และ
Carbon APIs อย่างนี้ไปต่อไปเรื่อยๆ อาจจะเป็นเพราะว่าพวกเขาได้ลงทุนไปกับซอพท์แวร์ที่เขียนด้วย C/C++
และ Carbon APIs ไปมากแล้ว อีกทั้งยังสะดวกในการแปลงโค้ดไปยังแพลทฟอร์มอื่นๆ ได้คล่องตัวกว่า ส่วน
แอพพลิเคชั่นที่เขียนขึ้นมาด้วยภาษา Objective-C และ Cocoa APIs นั้นไม่สามารถแปลงไปยังแพลทฟอร์ม
อื่นๆ ได้ และบรรดานักพัฒนาซอพท์แวร์ทั้งหลายก็ต้องการขายซอพท์แวร์ของตนในหลายๆ แพลทฟอร์มอยู่
แล้ว ซึ่งแอปเปิ้ลตระหนักดีในข้อนี้ ดังนั้นแอปเปิ้ลจะยังคงดำเนินการปรับปรุงทั้ง Cocoa และ Carbon APIs อีก
ต่อไปอย่างแน่นอน เพราะว่าแอพพลิเคชั่นตัวหลักๆ อย่าง Photoshop และ MS Office นั้น ถูกเขียนขึ้นมาด้วย
Carbon APIs ถ้าแอปเปิ้ลต้องการให้แอพพลิเคชั่นเหล่านี้ใช้เทคโนโลยี่ใหม่ๆ จาก OS X แล้วละก็ ทางบริษัทต้อง
ทำให้เทคโนโลยี่ดังกล่าวสามารถถูกเรียกใช้ได้ผ่านทาง Carbon อย่างแน่นอน


+++++++++++++++++++++++++