จากข่าว Oracle จัดหนัก! ฟ้องกินรวบหัวรวบหาง Android มีบางคนก็งงว่า Android กับ Oracle มันเกี่ยวข้องอะไร และเพื่อนๆก็ skype มาถามผมทำไม Oracle ถึงไล่ฟ้อง Android แบบไม่ลดละ จึงเกิดบทความนี้ขึ้น แน่นอนว่าบทความนี้ยาวและเนื้อหาเกี่ยวข้องกับนักพัฒนาไม่ค่อยจะเกี่ยวข้องกับผู้ใช้ซักเท่าไร ถ้าอ่านแล้วงงคงไม่แปลก เช่นเคยผมจะสรุปให้อ่านง่ายๆ ลงไปอ่านใน 3-4 บันทัดล่าง

หลายคนคงรู้จักว่า Oracle นั้นเป็นผู้ขายซอร์ฟแวร์เกี่ยวกับฐานข้อมูลรายใหญ่ของโลก ตอนแรกก็ไม่เกี่ยวข้องกับ Android หรอก แต่ Oracle กับ Android มีความสัมพันธ์กันอย่างไรเรามาเริ่มดูกันในความสัมพันธ์เริ่มต้นของ Android และ Java กันก่อนว่าเริ่มมาจากอะไร

Android

เป็น OS บนมือถือที่มีพื้นฐานจาก Linux โดยใช้ภาษา Java เป็น ภาษาที่ไว้ใช้พัฒนา application บน Android แต่จะบอกว่าใช้ Java ตรงๆก็ไม่ถูกนัก เพราะ android มันใช้ Java เพียงแค่ interface (syntax) เท่านั้น เพราะว่า VM (Virtual Machine) ที่ใช้นั้นเป็น VM (Dalvik) ที่ถูกสร้างขึ้นมาโดยเฉพาะ โดย Dalvik นั้นก็เป็น VM คล้าย java ทำหน้าที่ compile source code java และรัน java เช่นเดียวกัน แต่ Dalvik ได้พัฒนาต่อยอดมาจาก Project ของ Apache Harmony โดย Apache Harmony นั้นเป็น JVM ของ java ที่เป็น open source แต่ JVM ตัวนี้ความสามารถยังไม่เทียบเท่ากับ JVM official ของ Oracle ดังนั้นจึงต้องมาพัฒนาต่อจนกลายเป็น Dalvik นั่นเอง

Dalvik VM

แต่เมืออ่านถึงตรงนี้คงจะมีคำถามว่าทำไมไม่ใช้ JVM ของ Oracle เลยหละ มันมีเหตุผลอยู่เพราะว่าการ interpreter ของแต่ละอันนั้นต่างกัน โดยของ JVM นั้นจะเป็น stack machines และของ Dalvik นั้นเป็น register-based ซึ่งการทำงานทั้งสองต่างกัน โดย stack machines นั้นจะอ่าน byte code (class) ของ java แล้วแปล byte code เหล่านั้นเป็น instructions (คำสั่งต่างๆ) แล้วโหลดไปกองไว้ในหน่วยความจำแบบ stack ส่วน register-based นั้นก็มีการทำงานคล้ายๆกันเพียงแต่จะโหลด instructions เข้าไปในหน่วยความจำแบบ register แทน ซึ่งทั้งสองตัวนี้ดูเหมือนคล้ายๆกันเพียงแต่ว่า stack machines นั้นจะสร้าง instructions ออกมามากกว่า register-based ถึงแม้จะเป็น byte code ตัวเดียว ทำให้ไม่เหมาะกับการนำไปใช้ในอุปกรณ์มือถือที่มี CPU และ RAM น้อยกว่า computer มาก

อีกเหตุผลหนึ่งที่ไม่สามารถนำ JVM ไปใช้ได้เพราะ JVM ของ Oracle นั้นไม่ใช่ open source ดังนั้นการไปปรับแต่งหรือการแก้ไขนั้นทำไม่ได้จึงต้องหันไปใช้ Dalvik แทน โดย Android นั้นถูกผลักดันโดยกลุ่มๆหนึ่งที่มีชื่อว่า Open Handset Alliance โดยที่กลุ่มๆนั้นจะคล้ายกับ JCP (Java Community Process) ของ java มาก เป็นกลุ่มที่คอยสนับสนุน วางแผน ออกแบบ และทิศทางของ Android ซึ่งสามารถเข้าไปดูกลุ่มผู้สนับสนุนได้ตาม link นี้ ถ้าใครลองเข้าไปดูจะพบว่า นอกจากจะมีกลุ่มของผู้ผลิตมือถือแล้วยังมีกลุ่มของผู้ผลิต processor ของมือถือด้วย โดยเริ่มแรกกลุ่มของผู้ผลิต processor เป็นผู้วางสถาปัตยกรรมต่างๆของ Android ให้

Android กับ Java

Android กับ java นั้นใช้ VM คนละตัวกันทำให้เราจำเป็นที่จะต้องใช้ SDK ที่เป็นของ Android โดยเฉพาะเท่านั้น ทำให้เราไม่สามารถใช้ library (jar) ที่มีอยู่มากมายใน java มาใช้ในการพัฒนา android ไม่ได้ เพราะว่าเราใช้ SDK กันคนละตัวทำให้ bytecode ที่ได้มาจาก SDK ย่อมแตกต่างกัน ดังนั้น library ต่างๆจากภายนอกจึงไม่สามารถนำเข้ามาใช้ใน Android ได้ ยกตัวอย่าง เช่น jFreeChart หากคิดจะเอามาใช้ทำ chart ใน Android หมดสิทธิครับ ถึงแม้ว่า Dalvik จะมี tool ที่ชื่อว่า dx ทำหน้าที่ในการ compress class java ให้กลายเป็น .dex แต่ว่ามันไม่สามารถทำได้ทุก class ทำให้จึงไม่สามารถนำ class java มาใช้ได้

โดย Android SDK นั้นมี package ให้ใช้ดังนี้ (อ้างอิงจาก Android SDK 1.5)

596x254

จะสังเกตว่า package java นั้นมีติดมาด้วย ที่มีติดมาด้วยเพราะ Dalvik นั้นพัฒนาต่อยอดมาจาก Apache Harmony ทำให้ package พื้นฐานของ java ติดมา นอกจากนั้น android ยังรองรับกราฟฟิก 2D และ 3D ผ่าน OpenGL library ที่ติดมากับ kernel ของ Linux ส่วน database ที่รองรับคือ SQLLite

Oracle กับ Java

ก่อนที่ Android นำ Java มาใช้นั้นก็ได้ปรึกษาหารือกับ Sun Microsystem (อดีตเจ้าของ Java) ไว้แล้วว่าจะมีถ้าหาก Android จะเอา Java ไปใช้ Sun จะว่าไงบ้าง ซึ่ง Sun ก็พูดออกมาว่าไม่สนับสนุนเพราะดูแนวโน้มแล้วจะเกิด Fragmentation ขึ้น (ซึ่งก็เกิดจริงๆ) แต่ก็ไม่ได้ว่าอะไร Android ถ้าหากจะเอา Java ไปใช้ใน Android ไปอ่านรายละเอียดได้ที่นี่ http://www.blognone.com/news/18063

ต่อมาไม่นานนักเนื่องด้วยสภาพเศรษฐกิจที่ไม่ดี ทำให้รายได้ของ Sun ลดลง Sun เริ่มปลดพนักงานตัวเองออก ทำให้มีนักวิเคราะห์ทางธุรกิจหลายเจ้าเลยมองว่า ซันอาจถูกบริษัทที่ใหญ่กว่าควบกิจการก็เป็นได้ ซึ่งก็เป็นจริงๆ ถูก Oracle ซื้อไป เมื่อ Java เปลี่ยนมือเจ้าของ ทำให้เจ้าของใหม่อย่าง Oracle ทำการฟ้องร้องด้วยสิทธิที่ตัวเองพึงมี

สรุปภาษาละคร เธอกับเขาและรักของเรา

“นายเปา” และ “แป้งร่ำ” เมื่อสมัยเด็กๆเคยรู้จักกัน จนมีความสัมพันธ์แนบเน้นซึ่งใครๆก็มองว่าต้องไปด้วยกันได้ดีแน่นอน ต่อมา “พ่อแม่” ของแป้งร่ำเกิดวิกฤตเศรษฐกิจ จนต้องขายกิจการให้กับ “คุณใหญ่”

เนื่องจาก “คุณใหญ่” ถูกใจใน “แป้งร่ำ” จึงไม่ต้องการให้ “นายเปา” มาเกาะแกะ “แป้งร่ำ” จึงได้ส่งทนายไปฟ้องศาลเพื่อไม่ให้ “นายเปา” มาเกาะแกะ “แป้งร่ำ” ถ้าหากต้องการ “แป้งร่ำ” จริงๆ จะต้องจ่ายเงินมหาศาลเพื่อซื้อ “แป้งร่ำ” จาก “คุณใหญ่”

เหตุการณ์จะเป็นยังไงต่อไป เรามาตามติดกันเถอะว่าเรื่องราวของ เธอกับเขาและรักของเรา จะลงเอยยังไง รับรองละครเรื่องนี้สนุกแน่

ปล. ไม่ต้องบอกเนาะใครคือ “คุณใหญ่” ใครคือ “แป้งร่ำ” ใครคือ “นายเปา” คิดว่าคงจะรู้กันอยู่แล้ว