OpenJDK ( Open Java Development Kit ) คือชุดพัฒนาซอฟต์แวร์ที่เป็น Open-source ของแพลตฟอร์ม Java SE ( Standard Edition ) ซึ่งถือเป็น “ต้นน้ำ” หรือโปรเจกต์หลักที่เวอร์ชันอื่น ๆ ( เช่น Oracle JDK ) นำไปพัฒนาต่อครับ
ทำไม OpenJDK ถึงสำคัญ ?
เดิมที Java เป็นลิขสิทธิ์ของ Sun Microsystems ( ปัจจุบันคือ Oracle ) แต่เพื่อให้ Java มีความโปร่งใสและชุมชนนักพัฒนาสามารถช่วยกันพัฒนาได้ จึงมีการเปิดตัว OpenJDK ในปี 2007
- Free & Open Source: ใช้งานได้ฟรีภายใต้สัญญาอนุญาต GNU GPLv2
- Standard Implementation: เป็นตัวกำหนดมาตรฐานที่ Java เวอร์ชันอื่น ๆ ต้องเดินตาม
- Community Driven: มีบริษัทยักษ์ใหญ่ร่วมพัฒนามากมาย เช่น Red Hat, IBM, Google, Amazon และ Microsoft
ความแตกต่างระหว่าง OpenJDK และ Oracle JDK
หลายคนมักสงสัยว่าใช้ตัวไหนดี? สรุปสั้น ๆ ได้ดังนี้ครับ
| คุณสมบัติ | OpenJDK | Oracle JDK |
| ใบอนุญาต | Open Source ( GPL v2 ) | Commercial ( OTN License ) |
| ค่าใช้จ่าย | ฟรี ( ทุกกรณี ) | ฟรีสำหรับการพัฒนา / เสียเงินสำหรับใช้ในเชิงพาณิชย์ ( บางเวอร์ชัน ) |
| ประสิทธิภาพ | เกือบเท่ากัน 100% | มีเครื่องมือเฉพาะทาง ( เช่น Flight Recorder ในสมัยก่อน ) |
| การสนับสนุน | ชุมชนและผู้ให้บริการรายอื่น | Oracle Support ( เสียเงิน ) |
Note: ตั้งแต่ Java 11 เป็นต้นมา ในแง่ของ “Code” ทั้งสองแทบจะเหมือนกันทุกประการ ความต่างหลักคือเรื่อง ลิขสิทธิ์ ( Licensing ) และ การซัพพอร์ต เท่านั้นครับ
ตระกูลของ OpenJDK ( Distributions )
เนื่องจาก OpenJDK เป็นแค่ Source Code จึงมีหลายค่ายนำไป Compile และเพิ่มการปรับแต่ง ( Optimization ) ของตัวเองเพื่อให้เหมาะกับระบบ Cloud หรือ Server ของเขา เช่น
- Temurin ( Adoptium ): เน้นความเสถียร เป็นที่นิยมมากที่สุดในหมู่ Developer
- Amazon Corretto: ปรับแต่งมาเพื่อใช้งานบน AWS โดยเฉพาะ
- Microsoft Build of OpenJDK: สำหรับใช้งานบน Azure หรือ Windows
- Azul Zulu: มีความหลากหลายของ OS และสถาปัตยกรรม CPU สูง
สถาปัตยกรรมเบื้องต้น
OpenJDK ทำหน้าที่เปลี่ยน Source Code ( ไฟล์ .java ) ให้กลายเป็นสิ่งที่คอมพิวเตอร์เข้าใจผ่านส่วนประกอบหลัก
- JVM ( Java Virtual Machine ): ตัวขับเคลื่อนหลักที่ทำให้ Java รันได้ทุกที่ ( Write Once, Run Anywhere )
- JIT Compiler ( Just-In-Time ): ช่วยเปลี่ยน Bytecode เป็น Machine Code แบบ Real-time เพื่อเพิ่มความเร็ว
- Garbage Collector ( GC ): ระบบจัดการหน่วยความจำอัตโนมัติ
ข้อควรระวังสำหรับการใช้งาน ( Advice )
- Environment Variables: การลง Java ใหม่มักจะไปทับค่า
JAVA_HOMEเดิม หากคุณมี App เก่าที่รันบน Java 8 แต่ลง OpenJDK 21 ทับไป อาจทำให้ App เดิมรันไม่ได้ - Keystore / Certs: หากคุณมีการลง SSL Certificate ไว้ใน Java Keystore ( cacerts ) ของเวอร์ชันเก่า อย่าลืมสำรองไฟล์นั้นไว้ เพราะการลงใหม่จะทำให้ไฟล์เหล่านี้หายไปครับ
อ่านเพิ่มเติม