{"id":3237,"date":"2015-11-22T23:43:28","date_gmt":"2015-11-22T21:43:28","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3237"},"modified":"2015-11-22T23:43:28","modified_gmt":"2015-11-22T21:43:28","slug":"inselraus-details-zur-openjdk-geschichte","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2015\/11\/inselraus-details-zur-openjdk-geschichte\/","title":{"rendered":"Inselraus: Details zur OpenJDK-Geschichte"},"content":{"rendered":"<p>Obwohl OpenJDK unter der GPL stand, enthielt es doch Teile wie den Font-Renderer, Sound-Unterst\u00fctzung, Farbmanagement oder SNMP-Code, die als bin\u00e4re Pakete beigelegt wurden, weil etwa die Rechte zur Ver\u00f6ffentlichung fehlten. Sun nennt diese Teile, die etwa 4\u00a0% vom JDK 6 ausmachen, belasteten Code (engl. encumbered code)<a href=\"#_ftn1\" name=\"_ftnref1\">[1]<\/a>. Das hinderte puristische Linux-Distributoren daran, OpenJDK auszuliefern. RedHat startete im Juni 2007 das Projekt IcedTea, um diese bin\u00e4ren Teile auf der Basis des OpenJDK durch GPL-Software zu ersetzen. So basiert der Font-Renderer zum Beispiel auf FreeType<a href=\"#_ftn2\" name=\"_ftnref2\">[2]<\/a> und das Farbmanagement auf little CMS<a href=\"#_ftn3\" name=\"_ftnref3\">[3]<\/a>. Mit diesen Ersetzungen erf\u00fcllte das OpenJDK mit IcedTea im Juni 2008 die Anforderungen des Technology Compatibility Kit (TCK) von Sun und ist in der \u00d6ffentlichkeit seither unter dem Namen OpenJDK 6 bekannt. Daraufhin floss das OpenJDK 6 plus der Ersetzungen unter der GPLv2 in Linux-Distributionen wie Fedora und Debian ein.<\/p>\n<p>Das OpenJDK bildet die Basis von Java 8, und jeder Entwickler kann sein eigenes Java zusammenstellen und beliebige Erweiterungen ver\u00f6ffentlichen. Damit ist der Schritt vollzogen, dass auch Java auf Linux-Distributionen Platz finden darf, die Java vorher aus Lizenzgr\u00fcnden nicht integrieren wollten.<\/p>\n<p>Auch wenn es sich so anh\u00f6rt, als ob das Oracle JDK bzw. OpenJDK das Gleiche sei, ist das nicht ganz richtig: Zwar basieren Oracle JDK und OpenJDK auf den gleichen Quellen (bei der Version 7 etwa zu 95\u00a0%), doch sind beim Oracle JDK immer noch propriet\u00e4re Dinge enthalten, und nicht alles ist hundertprozentig quelloffen und GPL. Das gilt f\u00fcr die Version 7 wie f\u00fcr die Version 6. Das Oracle JDK steht unter der Binary Code License; genau die muss jeder abnicken, der das JDK von der Webseite laden m\u00f6chte.<\/p>\n<p>Bei der 6er-Reihe kommt noch eine Besonderheit dazu, wie es die Versionsnummern<a href=\"#_ftn4\" name=\"_ftnref4\">[4]<\/a> ganz gut zeigen. W\u00e4hrend das Oracle JDK zum Beispiel im Juni 2011 bei Versionsnummer 1.6.0_26-b03 steht, ist das OpenJDK bei Version 6 b22. Die Versionsnummern sind deshalb v\u00f6llig unabh\u00e4ngig, weil beide Projekte auch unabh\u00e4ngig voneinander laufen. Das hat mit der Geschichte zu tun. Nach der Entwicklung des JDK 6, das nicht unter der GPL steht, ging es mit dem JDK 7 logisch weiter. Aus dem JDK 7 (Build 10) entstand dann OpenJDK, das heute mit der Versionsnummer OpenJDK 7 genannt wird. OpenJDK 7 und JDK 7 entwickeln sich Hand in Hand, und Code-\u00c4nderungen gehen mal in die eine Richtung und mal in die andere.<\/p>\n<p>Jetzt kommt die Besonderheit: Das OpenJDK 6 entstand nicht, wie vermutet werden k\u00f6nnte, aus dem Oracle JDK 1.6, sondern aus dem OpenJDK 7 (Build 20). Es wurden nur Java 7-Eigenschaften entfernt. So l\u00e4uft das auch bis heute: Die meisten \u00c4nderungen am OpenJDK 6 sind Backports von OpenJDK 7. \u00c4nderungen am OpenJDK 7 stammen \u00fcberwiegend von Oracle, und h\u00e4ufig ist es die Firma RedHat, die diese \u00c4nderungen in OpenJDK 6 portiert. Zwischen dem OpenJDK 6 und dem JDK 1.6 gibt es einen Quellcodeaustausch bei Bug-Fixes, doch die Codebasis ist unterschiedlich. Oracle JDK 6 ist im Wartungsmodus, und gro\u00dfartige Ver\u00e4nderungen passieren bis auf Fehlerbereinigungen nicht.<\/p>\n<p>Oracle JDK 8 ist die Version, die die Download-Seite von Oracle anbietet; das OpenJDK 8 liegt auf einem eigenen Server http:\/\/openjdk.java.net\/projects\/jdk8\/. Das OpenJDK bildet die Referenzimplementierung f\u00fcr Java SE, nicht das Oracle JDK.<\/p>\n<p><a href=\"#_ftnref1\" name=\"_ftn1\"><sup><\/sup><sup>[1]<\/sup><\/a>\u00a0 http:\/\/www.sun.com\/software\/opensource\/java\/faq.jsp#h<\/p>\n<p><a href=\"#_ftnref2\" name=\"_ftn2\"><sup><\/sup><sup>[2]<\/sup><\/a>\u00a0 http:\/\/www.freetype.org\/<\/p>\n<p><a href=\"#_ftnref3\" name=\"_ftn3\"><sup><\/sup><sup>[3]<\/sup><\/a>\u00a0 http:\/\/www.littlecms.com\/<\/p>\n<p><a href=\"#_ftnref4\" name=\"_ftn4\"><sup><\/sup><sup>[4]<\/sup><\/a>\u00a0 http:\/\/gist.github.com\/925323<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Obwohl OpenJDK unter der GPL stand, enthielt es doch Teile wie den Font-Renderer, Sound-Unterst\u00fctzung, Farbmanagement oder SNMP-Code, die als bin\u00e4re Pakete beigelegt wurden, weil etwa die Rechte zur Ver\u00f6ffentlichung fehlten. Sun nennt diese Teile, die etwa 4\u00a0% vom JDK 6 ausmachen, belasteten Code (engl. encumbered code)[1]. Das hinderte puristische Linux-Distributoren daran, OpenJDK auszuliefern. RedHat startete [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-3237","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3237"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3237\/revisions"}],"predecessor-version":[{"id":3238,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3237\/revisions\/3238"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}