Введение

Реализация стандартной библиотеки классов Java

GNU Classpath – это свободная реализация стандартной библиотеки классов для языка программирования Java. Реализованы большинство классов J2SE 1.4 и 5.0. Таким образом, Classpath можно использовать для запуска Java-приложений. GNU Classpath является частью проекта GNU. Изначально он разрабатывался параллельно с libgcj из-за несовместимости лицензий, но впоследствии эти два проекта были объединены. Фонд свободного программного обеспечения признал GNU Classpath проектом высокого приоритета. Когда проект Classpath был начат, лицензия на официальную реализацию Java от Sun Microsystems не разрешала распространение каких-либо изменений. С момента запуска проекта Classpath OpenJDK был выпущен под лицензией GPL и теперь является официальной эталонной реализацией платформы Java.

Лицензия

GNU Classpath распространяется по лицензии GNU General Public License с исключением для компоновки. Это лицензия на свободное программное обеспечение. Формальным владельцем всего кода является Фонд Свободного Программного Обеспечения, который, в свою очередь, несёт договорные обязательства перед разработчиками.

История

Разработка GNU Classpath началась в 1998 году с участием пяти разработчиков. За время своего существования проект несколько раз объединялся с другими проектами, преследующими схожие цели (Kaffe, libgcj). Ранее GNU Classpath поставлялся со своей собственной виртуальной машиной (Japhar). По мере того как Classpath становился базовой библиотекой, используемой во многих различных проектах, эта виртуальная машина получала всё меньше внимания и в настоящее время больше не поддерживается. После реализации большей части официального API Java 1.4 работа над проектом сместилась в сторону исправления ошибок, а не расширения API. 24 октября 2006 года был добавлен последний недостающий класс Java 1.4 – HTMLWriter. Скорость разработки (вычисляемая математически как среднее количество новых строк кода в день) достигла пика в 2006 году. Изначально название GNU Classpath было предложено Брэдли М. Куном одному из первых разработчиков, Полу Фишеру. В то время в сообществе разработчиков свободного программного обеспечения Java существовала обеспокоенность по поводу защиты товарного знака Java компанией Sun Microsystems в отношении свободных реализаций. Кун предложил название $CLASSPATH, представляющее собой переменную окружения, используемую большинством Java-систем для указания расположения библиотек Java на компьютере. Поскольку $CLASSPATH часто расширялся до пути, включающего слово java (например, /usr/lib/java), это был способ намекнуть на Java, не называя его напрямую. Фишеру и другим разработчикам не понравилось неэстетичное использование символа $ и заглавных букв, и они остановились на названии Classpath.

Команда разработчиков

Ведущий проекта отвечает за юридические аспекты, готовит регулярные релизы и осуществляет контроль качества. Ведущий проекта также предоставляет права доступа к CVS. GNU Classpath не имеет формальной иерархии. Работа выполняется наиболее компетентными специалистами, и строгого разделения обязанностей нет. Все изменения кода сначала публикуются в виде патчей в рассылке для обсуждения, где при необходимости их можно оспорить. Проект обычно получает от пяти до восьми патчей ежедневно. Прогресс покрытия кода библиотеки GNU Classpath можно отслеживать по отношению к OpenJDK6 и OpenJDK7.

Интеграция виртуальных машин

GNU Classpath содержит классы из официального пространства имен Java API. В тех случаях, когда необходимы или крайне желательны вызовы нативного кода, это осуществляется из небольшого числа классов "VM". Имя такого VM-класса соответствует имени класса, требующего нативных методов, с добавлением префикса VM: VMObject, VMString и так далее. VM-классы, хранящиеся отдельно от остального кода, имеют пакетный доступ и являются финальными. Методы этих классов содержат ключевое слово native, указывающее на необходимость соответствующей нативной библиотеки. Такие библиотеки предоставляются разработчиками виртуальной машины Java, поэтому GNU Classpath можно подключить практически к любой виртуальной машине Java, если исходный код этой виртуальной машины доступен и может быть изменен.

Поддержка новых языковых функций в Java 1.5

До версии 0.95 каждый релиз GNU Classpath состоял из двух отдельных архивов tar; один представлял состояние основной ветви разработки, а другой содержал содержимое более экспериментальной ветви, поддерживающей нововведения, такие как обобщения, перечисления и аннотации, представленные в Java 1.5. Начиная с версии 0.95, нововведения Java 1.5, такие как обобщения, были полностью интегрированы в основную ветвь. Эту ветвь можно собрать, используя компилятор Eclipse, ecj, для компиляции исходного кода Java 1.5 в байт-код. В случае GCJ он использует ecj для выполнения этого начального этапа, а затем преобразует байт-код в машинный код. Начиная с версии 0.95, GNU Classpath также поддерживает компиляцию и запуск компилятора javac с открытым исходным кодом, распространяемого под лицензией GPL, с использованием GNU Classpath, а также позволяет компилировать библиотеку классов, инструменты и примеры GNU Classpath с помощью самого javac.

Классы из домена omg.org

GNU Classpath не принимает код, распространяемый по несвободной лицензии, или автоматически сгенерированный из кода, распространяемого по несвободной лицензии. Стандартный Java API содержит множество классов из домена omg.org, которые обычно генерируются из IDL-файлов, выпускаемых Объектной Группой Управления (Object Management Group). Лицензия "использовать, но не изменять" этих файлов считается несвободной. По этой причине соответствующие классы в проекте GNU Classpath были написаны с нуля, основываясь исключительно на официальных печатных спецификациях OMG. Таким образом, эта часть GNU Classpath столь же свободна, как и любой другой код в проекте.