Apakah Java gratis / open source atau tidak?

33

Pada 13 November 2006, Sun merilis sebagian besar Jawa sebagai perangkat lunak bebas dan sumber terbuka, (FOSS), di bawah ketentuan GNU General Public License (GPL). Pada 8 Mei 2007, Sun menyelesaikan prosesnya, membuat semua kode inti Java tersedia di bawah persyaratan distribusi perangkat lunak / sumber terbuka gratis , selain dari sebagian kecil kode yang tidak dimiliki hak cipta Sun.

OpenJDK (Open Java Development Kit) adalah implementasi gratis dan open source dari bahasa pemrograman Java. Ini adalah hasil dari upaya Sun Microsystems dimulai pada tahun 2006. Implementasinya dilisensikan di bawah GNU General Public License (GNU GPL) dengan pengecualian yang menghubungkan.

  • Mengapa masih ada orang yang mengatakan bahwa Java bukan open source atau gratis seperti dalam kebebasan berbicara?
  • Apakah saya melewatkan sesuatu?
  • Apakah Java masih berpemilik?
Tulains Córdova
sumber
Saya tidak tahu persis apakah hanya implementasi JVM Sun atau bahkan teknologi (bytecode) dilindungi, tetapi semua lib inti (java.xy) gratis. Jadi, jika ada yang membuat spesifikasi bytecode dan VM yang berbeda, harus menggunakan lib yang ada secara gratis. Ups, Google melakukannya dengan Dalvik!
ern0

Jawaban:

37

Masalahnya adalah bahwa untuk memanggil sesuatu "Java" Anda harus membuatnya disertifikasi sebagai sesuai dengan spesifikasi Java.

Salah satu prasyarat untuk mendapatkan sertifikasi ini adalah menjalankan JVM Anda melalui test suite - Java Technology Compatibility Kit (TCK) . Test suite ini TIDAK bersumber terbuka.

Jadi Anda dapat membangun JVM yang berperilaku sangat seperti Java dan sepenuhnya open source, tetapi, jika Anda ingin menyebutnya "Java JVM", Anda perlu membeli rangkaian sertifikasi di bawah lisensi non-sumber terbuka. Bagi banyak advokat open source, ini sama sekali bukan starter.

James Anderson
sumber
7
Itulah salah satu alasan mengapa Apache Harmony (yang merupakan implementasi JVM independen yang cukup lengkap) dihentikan . Sayang sekali bahwa Sun / Oracle bertindak seperti ini (dan masih bertindak seperti ini). Apa yang dilakukan Google ("hampir menyalin" Java) mungkin merupakan akibat langsung dari ini juga.
Joachim Sauer
1
Juga, test suite adalah Java Platform TCK (ada TCK lain untuk teknologi terkait Java juga).
Joachim Sauer
4
Juga, jika Anda membangun JVM yang sukses, Oracle mungkin menuntut Anda karena pelanggaran hak cipta dan pelanggaran paten . Seperti mereka menggugat Google melalui Android.
MarkJ
2
Apakah hukum penamaan relevan untuk memanggil sesuatu opensource? Saya tidak dapat membuat browser saya sendiri dan menyebutnya firefox. Saya pikir untuk pertanyaan, hal pertama adalah memahaminya ... apa yang dimaksud dengan istilah "Java" spesifikasi bahasa, implementasi jvm, ... dan siapa yang menyebutnya tidak terbuka ...
johannes
@johannes - selamat datang di rumah sumber terbuka pedant dan nitpicker! Bagi banyak orang di komunitas open source perbedaan ini penting. Saksi Menyelidiki meninggalkan proyek Harmony. Bagi orang lain yang lebih praktis memiliki lingkungan Java Like yang berfungsi adalah "cukup baik" seperti VM Dalvik di jantung semua perangkat Android.
James Anderson
15

Anda seharusnya sudah membaca jawaban ini sebelum dihapus tentang yang mana untuk digunakan. Jawaban utama menyatakan:

Tentang Java 7, perhatikan bahwa JDK7 dan OpenJDK7 akan memiliki ( hampir ) basis kode yang identik.

Perhatikan hal yang hampir saya soroti.

Dari artikel yang ditautkan dari jawaban itu:

[…] Tetapi ada beberapa kode di mana ada penggantian open source di mana kami masih menggunakan kode sumber tertutup lama. Ini terutama dalam rasterisasi font dan grafik. Kode rasterisasi sumber tertutup lama, sementara dibebani, telah memiliki 10+ tahun perbaikan bug dan fine tuning dll dan, untuk setiap penggantian open source untuk menggantikan kode dalam JDK build yang diproduksi, itu harus dapat dibuktikan secepat, stabil dan stabil. kualitas bagus sebagai kode tertutup yang ada.

Juga, dari FAQ Java :

Java Development Kit (JDK) gratis untuk diunduh dan digunakan untuk pemrograman komersial, tetapi tidak untuk didistribusikan ulang .

Jadi, bukan open source . Hampir saja.

Juga, bahkan jika itu sepenuhnya open source, model dan tata kelola pembangunan tidak akan. Itu bukan masalah lisensi.

Gallaecio
sumber
1
"bebas untuk mengunduh dan menggunakan tetapi tidak mendistribusikan" berarti perangkat lunak itu "bukan perangkat lunak bebas", tetapi masih bisa "open source". Open source menyiratkan bahwa Anda memiliki akses ke kode sumber. Perangkat lunak bebas (seperti yang didefinisikan oleh FSF dan lainnya) memerlukan hak untuk mendistribusikan kembali juga.
CVn
6
@ MichaelKjörling Definisi OSI tentu membutuhkan hak redestribusi.
Luiscubal
1

Pada tahun 1997, Sun Microsystems mendekati ECMA untuk meresmikan Jawa tetapi segera menarik diri dari proses. Standar Java sebenarnya dikendalikan melalui Java Community Process .

Meskipun pada tahun 2006, sebagian besar Java dirilis oleh Sun Microsystems dengan ketentuan GPL tetapi implementasi resmi saat ini dimiliki oleh Oracle.

Karena Java tidak memiliki standarisasi formal yang diakui oleh ECMA, ISO / IEC, ANSI, atau organisasi standar pihak ketiga lainnya, implementasi Oracle adalah standar defacto. Namun, ada implementasi alternatif seperti GNU Compiler untuk Java, GNU Classpath, IcedTea-Web, dll.

Sajad Deyargaroo
sumber
7
-1: Sejak Java 7, implementasi referensi resmi adalah OpenJDK GPL.
Michael Borgwardt
2
Bicara tentang Java, Anda akan mendapatkan -1 :( OpenJDK adalah open source tetapi implementasi di Java.com adalah BCL, seperti yang disebutkan di atas dan di sini . Pertama, tidak ada perubahan pada kebijakan kami vs Apache Harmony. OCTLA adalah program yang memungkinkan gratis akses ke TCK untuk implementasi yang diturunkan dari OpenJDK yang dilisensikan di bawah GPL dan hanya ditujukan untuk tujuan itu. Kedua, implementasi Oracle (apa yang Anda temukan di java.com atau java.oracle.com) akan tetap berada di bawah lisensi BCL saja. Akhirnya, untuk sepenuhnya jelas, kode sumber OpenJDK tetap di bawah GPL
Sajad Deyargaroo