Tags:
Node Thumbnail

กูเกิลไม่ปล่อยให้ 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

Get latest news from Blognone

Comments

By: sugree
FounderWriterAndroidBlackberry
on 10 December 2008 - 08:30 #75112

เอาไว้รันข้างนอกเบราเซอร์ก็ได้นะ โอ้ มันร้าย แต่โหลดที่บ้านแล้วหลุด.. 78 MB ใหญ่ไปนิด

By: lew
FounderJusci's WriterMEconomicsAndroid
on 10 December 2008 - 16:58 #75184 Reply to:75112
lew's picture

มันยัด GCC เข้ามาทั้งดุ้นมังครับ เลยใหญ่

LewCPE


lewcpe.com, @wasonliw

By: Thaina
Windows
on 11 December 2008 - 10:51 #75321

นี่มันดอทเน็ต....

By: lew
FounderJusci's WriterMEconomicsAndroid
on 11 December 2008 - 11:05 #75327 Reply to:75321
lew's picture

คนละเรื่องกับ .NET นะครับ เพราะ .NET เองก็เป็น VM แบบ Java

ตัวนี้ผมว่ามันลูกผสมระหว่าง ActiveX กับ Virtualization ครับ

LewCPE


lewcpe.com, @wasonliw

By: Thaina
Windows
on 11 December 2008 - 11:15 #75329 Reply to:75327

เห็นฟีเจอร์หลายอย่างคล้ายๆกันนะครับ

อย่างเช่น CLR จะคอมไพล์ตัวโปรแกรมให้เป็นภาษาเครื่องอีกที และทำงานที่ความเร็วเครื่อง ไม่ได้ทำงานบน Virtual Machine (มีการไปยุ่งกับ FrameWork เล็กน้อย) ในเฟรมเวิร์คมีอินเตอร์เฟซ ไม่ค่อยให้ใช้ System Call โดยตรง และอื่นๆ

ดูๆไปแล้ว NativeClient vs Alchemy ก็คล้ายๆ .Net vs Java นะครับ?

By: lew
FounderJusci's WriterMEconomicsAndroid
on 11 December 2008 - 11:36 #75333 Reply to:75329
lew's picture

Virtual Machine เป็นคนละเรื่องกับ Native Code ครับ แม้จะคล้ายๆ กันแต่ไม่เหมือน

  • Byte Code ที่ทำงานบน VM จะย้ายไปทำงานบนเครื่องอื่นได้ native นี่ถ้าไม่ได้คอมไพล์เตรียมไว้ก่อนก็เอาไปใช้แพลตฟอร์มอื่นไม่ได้ครับ
  • กรณีของ .NET/Java เรียกว่า Just-In-Time Compiler เอา Byte Code ที่ไม่ใช่ Native มาแปลงอีกที แม้จะเร็วขึ้น แต่ไม่เท่า native ตรงๆ เพราะทำอะไรหลายๆ อย่างไม่ได้ เช่น Pointer ที่พวก managed code ยังไงก็ต้องใช้ reference

NaCl/Alchemy นี่คล้ายกันในแง่ของกลุ่มเป้าหมาย (ย้าย C/C++ ลงเว็บ) แต่ในแง่เทคนิคแล้วผมว่าต่างกันคนละโลกเลยครับ ส่วน .NET/Java นี่ผมว่าในเชิงเทคนิคแล้วต่างกันไม่มากนัก

LewCPE


lewcpe.com, @wasonliw

By: Thaina
Windows
on 11 December 2008 - 11:49 #75335 Reply to:75333

ผมเข้าใจว่า

NativeClient จะเป็นเ้ฟรมเวิร์คบนกูเกิล ที่จะคอมไพล์โค้ดที่มีคนเขียนไว้เป็นโปรแกรม แล้วโยนกลัีบไปทำงานบนที่เครื่องที่เปิดมัน และมันน่าจะคอยดักด้วยว่าคนที่เปิดมันใช้เครื่อง x86 รึเปล่า ถ้าเป็น x86 มันก็จะคอมไพล์เป็นโปรแกรม x86

โดยลักษณะแล้วผมว่ามันคล้ายๆกับว่ามี .Net อยู่บนกูเกิลอีกทีน่ะครับ เหมือนแปลงกูเกิลให้เป็น .Net FrameWork ตัวนึงเลย แล้วเครื่องผู้ใช้ก็รอรับโปรแกรมที่มันคอมไพล์เสร็จเป็นโค้ดที่เครื่องตัวเองเปิดได้

หรือผมเข้าใจผิดครับ?

By: orpheous
AndroidWindowsIn Love
on 3 March 2009 - 17:28 #88323
orpheous's picture

มองผ่านๆนึกว่า Sodium Chloride (NaCl)

By: tomyum
ContributorAndroidWindows
on 4 March 2009 - 15:59 #88634 Reply to:88323
tomyum's picture

เอา 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

By: obiconbig
iPhoneIn Love
on 6 March 2009 - 10:33 #89056

จากที่ผมอ่านไม่รู้ว่าเข้าใจหรือเปล่านะครับ

แต่จาก 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 ที่เปรียบเทียบกัน ซึ่งอาจจะมีโครงสร้างที่ต่างกันบ้าง

ผิดถูกยังไงบอกด้วยนะครับ