กูเกิลไม่ปล่อยให้ Adobe สร้างความตื่นเต้นให้กับนักพัฒนาภาษา C/C++ ด้วย Alchemy ไปล่วงหน้านานนัก ด้วยการปล่อย Native Client ปลั๊กอินสำหรับการพัฒนาซอฟต์แวร์แบบ native code หรือการปล่อยชุดคำสั่งให้ลงไปยังซีพียูตรงๆ แต่ยังได้ความปลอดภัยแบบเดียวกับการใช้ปลั๊กอินตามปรกติ โดยสรุปเป็นดังนี้
- ซอฟต์แวร์ทั้งหมดจะถูกคอมไพล์เป็นไฟล์คำสั่ง x86 (ภาษาเครื่อง) ตรงๆ
- โค้ดที่จะถูกปล่อยลงซีพียูจะถูกตรวจสอบล่วงหน้า ด้วยคำสั่ง inner-sandbox เพื่อป้องกันไม่ให้ไปแก้ไขสิ่งที่ไม่ได้รับอนุญาต รวมถึงการแก้ไขโค้ดของตัวเองด้วย
-
หลังจากนั้นจะมีการตรวจสอบอีกชั้น ไม่ให้มีการเรียก system-call ของระบบปฏิบัติการโดยตรง แต่ต้องเรียกผ่าน Native Client ทั้งหมด
ทั้งสองเทคโนโลยีมีข้อต่างกันอยู่หลายประการ ผมสรุปๆ มาคร่าว
-
Native Client นั้นในตอนนี้ผูกติดกับเครื่องที่เป็น x86 เท่านั้น กูเกิลระบุว่ากำลังพัฒนาส่วน ARM และ PPC อยู่ ส่วน Alchemy นั้นทำงานได้ทุกแพลตฟอร์มที่มี Flash 10 ซึ่งตอนนี้เหมือนจะยังมีเฉพาะ x86 เหมือนกัน
- หลังจากโค้ดได้รับการตรวจสอบแล้ว Native Client จะทำงานที่ความเร็วเครื่อง ส่วน Alchemy นั้นทำงานบน Virtual Machine ตลอดเวลา
- Native Client เป็นโอเพนซอร์สใช้สัญญาอนุญาตแบบ New BSD (แทบไม่มีเงื่อนไขอะไรเลย)
- Flash นั้นรันเป็นโปรเซสดียวกันทุกหน้าต่าง ทุกช่อง แต่ Native Client นั้นทุก instance เป็นโปรเซสแยกกันทั้งหมด เนื่องจากข้อจำกัดเวลาเกิด Exception จากฮาร์ดแวร์ที่ไม่สามารถดักเอาไว้ได้
- ในรายงานการวิจัย (PDF) ของ Native Client ระบุว่าแม้ว่าขนาดไฟล์ที่คอมไพล์แล้วจะใหญ่กว่ามาก แต่ความเร็วนั้นตกลงไปไม่เกิน 10% ใน SPEC2000
- ทีมงานลองพอร์ตโค้ด H.264 ความยาว 11,000 บรรทัดมาบน Native Client พบว่าต้องแก้โค้ดทั้งหมดประมาณ 20 บรรทัด กว่าครึ่งเป็นปัญหาคอมไพล์ไม่ผ่าน อันนี้ชนกับ Alchemy แน่นอนเพราะตัวนั้นใช้ Ogg Theora มาเดโมว่าพอร์ตได้
- ทั้งสองอันเดโมด้วย Quake เหมือนกัน ท่าทางจะพยายามชิงตลาดจาก ActiveX ให้ได้ในเร็ววัน
เท่าที่อ่านดูแล้ว Native Client ยังห่างไกลจากระดับใช้งานจริงอยุ่มาก การเปิดตัวครั้งนี้คงเป็นการดึงนักพัฒนาเอาไว้ไม่ให้เทใจไปให้ Alchemy หมด โดยการบอกว่า "กู(เกิล)ก็มีเหมือนกัน"
ที่มา - Google Code Blog, Google Security Blog, Native Client
Comments
เอาไว้รันข้างนอกเบราเซอร์ก็ได้นะ โอ้ มันร้าย แต่โหลดที่บ้านแล้วหลุด.. 78 MB ใหญ่ไปนิด
มันยัด GCC เข้ามาทั้งดุ้นมังครับ เลยใหญ่
LewCPE
lewcpe.com, @wasonliw
นี่มันดอทเน็ต....
คนละเรื่องกับ .NET นะครับ เพราะ .NET เองก็เป็น VM แบบ Java
ตัวนี้ผมว่ามันลูกผสมระหว่าง ActiveX กับ Virtualization ครับ
LewCPE
lewcpe.com, @wasonliw
เห็นฟีเจอร์หลายอย่างคล้ายๆกันนะครับ
อย่างเช่น CLR จะคอมไพล์ตัวโปรแกรมให้เป็นภาษาเครื่องอีกที และทำงานที่ความเร็วเครื่อง ไม่ได้ทำงานบน Virtual Machine (มีการไปยุ่งกับ FrameWork เล็กน้อย) ในเฟรมเวิร์คมีอินเตอร์เฟซ ไม่ค่อยให้ใช้ System Call โดยตรง และอื่นๆ
ดูๆไปแล้ว NativeClient vs Alchemy ก็คล้ายๆ .Net vs Java นะครับ?
Virtual Machine เป็นคนละเรื่องกับ Native Code ครับ แม้จะคล้ายๆ กันแต่ไม่เหมือน
NaCl/Alchemy นี่คล้ายกันในแง่ของกลุ่มเป้าหมาย (ย้าย C/C++ ลงเว็บ) แต่ในแง่เทคนิคแล้วผมว่าต่างกันคนละโลกเลยครับ ส่วน .NET/Java นี่ผมว่าในเชิงเทคนิคแล้วต่างกันไม่มากนัก
LewCPE
lewcpe.com, @wasonliw
ผมเข้าใจว่า
NativeClient จะเป็นเ้ฟรมเวิร์คบนกูเกิล ที่จะคอมไพล์โค้ดที่มีคนเขียนไว้เป็นโปรแกรม แล้วโยนกลัีบไปทำงานบนที่เครื่องที่เปิดมัน และมันน่าจะคอยดักด้วยว่าคนที่เปิดมันใช้เครื่อง x86 รึเปล่า ถ้าเป็น x86 มันก็จะคอมไพล์เป็นโปรแกรม x86
โดยลักษณะแล้วผมว่ามันคล้ายๆกับว่ามี .Net อยู่บนกูเกิลอีกทีน่ะครับ เหมือนแปลงกูเกิลให้เป็น .Net FrameWork ตัวนึงเลย แล้วเครื่องผู้ใช้ก็รอรับโปรแกรมที่มันคอมไพล์เสร็จเป็นโค้ดที่เครื่องตัวเองเปิดได้
หรือผมเข้าใจผิดครับ?
มองผ่านๆนึกว่า Sodium Chloride (NaCl)
เอา NaCl ไว้ทำปฏิกิรยากับ Cr (โครเมี่ยม) กระมังครับ http://th.wikipedia.org/wiki/%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B9%80%E0%B8%A1%E0%B8%B5%E0%B8%A2%E0%B8%A1 เอ แล้วจะได้อะไรออกมาหว่า...ตกเคมี \(@^_^@)/ M R T O M Y U M
จากที่ผมอ่านไม่รู้ว่าเข้าใจหรือเปล่านะครับ
แต่จาก Alchemy แล้วมี quote ล่าสุดนะครับ
What is Alchemy?
"Alchemy" is the code name for a research project from Adobe that allows users to compile C and C++ code that is targeted to run on the open source ActionScript virtual machine (AVM2). The C/C++ code is compiled to ActionScript 3.0 as a SWF or SWC that runs on Adobe Flash Player 10 or Adobe AIR 1.5. The generated content is within the security constraints of the AVM2, and cannot bypass Flash Player security protections.
ผมเจอตรงนี้แหละครับ and cannot bypass Flash Player security protections.
สรุปก็คือ เขียน C/C++ ลงไปได้ แต่ก็อยู่ในชอบเขตของ Flash Player เหมือนกับ มี Flash Player เป็น virtual machine หรือเปล่าครับ แล้วเราก็เขียน code เอาไปรันบน Flash Playe
Google Native Client ก็คงจะทำมาในรูปแบบคล้ายๆ กันเพราะ เป็น product ที่เปรียบเทียบกัน ซึ่งอาจจะมีโครงสร้างที่ต่างกันบ้าง
ผิดถูกยังไงบอกด้วยนะครับ