GNU Classpath
| GNU Classpath | |
|---|---|
Демонстрационное приложение GNU Classpath с интерфейсомSwing | |
| Тип | Библиотека |
| Разработчики | Проект GNU (formally held byFSF) |
| Написана на | C иJava |
| Операционная система | Cross-platform |
| Дата выпуска | 1998 |
| Аппаратная платформа | Java Virtual Machine |
| Последняя версия | 0.99[1] (7 марта2012) |
| Репозиторий | git.savannah.gnu.org/cgi… |
| Состояние | Active |
| Лицензия | GNU GPL+GNU linking exception |
| Сайт | classpath.org |
GNU Classpath представляет собой проект, направленный на созданиесвободной реализации стандартнойбиблиотеки классов дляязыка программирования Java. Несмотря на большой размер библиотеки, большая часть задачи уже выполнена, включаяSwing,CORBA, и другие основные элементы. Разработчики Classpath реализовали почти все классыJ2SE 1.4 и 5.0. Таким образом, Classpath можно использовать для запуска популярных Java-программ, таких, какVuze иEclipse.
GNU Classpath является одним из самых приоритетных направлений проектаGNU. Хотяисходный код «официальной» реализации отSun Microsystems доступен, лицензия не допускает распространения каких-либо изменений. Это было серьёзным препятствием для многих инновационных проектов, которые не могли развиваться, не изменяя этот код. Сообщество разработчиков GNU Classpath включает в себя учреждения, ориентированные на исследования в области виртуальных машин Java, а также компании, заинтересованные в предоставлении альтернативных сред выполнения Java.
GNU Classpath входит в составFree Software Foundation. Первоначально он был разработан параллельно сlibgcj из-за несовместимости лицензий, но позднее проекты были объединены.
Лицензия
[править |править код]GNU Classpath выпускается под лицензиейGNU General Public License сlinking exception. Этолицензия на свободное ПО. Весь код формально принадлежитFree Software Foundation, и этот владелец обязан соблюдать свои договорные обязательства перед разработчиками.
Применения
[править |править код]GNU Classpath используется многимисвободными средами выполнения Java (такими, какKaffe,SableVM,JamVM,CACAO,Jikes RVM), потому что каждая полнофункциональнаявиртуальная машина Java должна обеспечить реализацию стандартных библиотек классов.
Другие области применения включают:
- GNU-компилятор для Java, способный компилировать Java-код в родные самостоятельные приложения.
- GCJAppletViewer для запускаJava апплетов из командной строки, если они не поддерживаются используемым браузером.
- ПроектIcedTea использует GNU Classpath как замену отсутствующейJava Class Library, остающейся проприетарной/закрытой вOpenJDK.
- IKVM.NET, интегрирующий Java с.NET Framework
- JNode, операционная система для запуска Java-приложений. Эта система написана только на языке Java иязыке ассемблера.
- Специализированные виртуальные машины, такие, какJaos, для интеграции с языком программированияOberon иJamaicaVM для встраиваемых систем реального времени.
- Виртуальные машины для распределенных вычислений в кластерах, имеющих до 128 процессоров наMyrinet ([1]).
История
[править |править код]Разработка GNU Classpath началась в 1998 году с 5 разработчиками. За всю свою историю он несколько раз объединялся с другими проектами, имеющими сходные цели (Kaffe, libgcj). В прошлом GNU Classpath поставлял свою собственную виртуальную машину (Japhar). Когда Classpath стал базовой библиотекой, использующейся совместно во многих проектах, виртуальной машине уделялось всё меньше и меньше внимания, и в настоящее время она не поддерживается.
После реализации большинства официальных Java 1.4API работа в рамках проекта стала больше ориентированной на поиск и устранение ошибок, чем на охват API. В 24 октября 2006 была завершена реализация последнего отсутствующего Java 1.4 класса,HTMLWriter. Скорость разработки (вычисляется математически как среднее число новых строк кода в день) достигла рекордного уровня в 2006 году.
Название GNU Classpath было предложеноБрэдли М. Куном одному из первых разработчиков, Полу Фишеру. В то время былаглубокая озабоченность в сообществе свободных реализаций Java о применении торговой марки Sun на Java против свободных реализаций. Кун предложил название$CLASSPATH, являющеесяenvironment variable, используемой большинством Java-систем для указания расположения на компьютере Java-библиотек. Так как$CLASSPATH часто раскрывается впуть, включающий словоjava (напр.,/usr/lib/java), это был способ назватьJava без называния. Фишеру и другим разработчикам не понравилось неприглядное использование$ и всех букв в верхнем регистре, поэтому остановились наClasspath.
Команда разработчиков
[править |править код]Команда проекта состоит из около 70 разработчиков (из них в настоящее время активны только 20) и одного активного сопровождающего (мейнтейнера). Сопровождающий берет на себя юридическую сторону проекта, готовит очередные релизы проекта и управляет качеством. Сопровождающий также предоставляет доступ кCVS.
В отличие от некоторых проектов, у GNU Classpath отсутствует строгая иерархия. Работа выполняется наиболее технически способными, и отсутствует строгое разделение работы. Все изменения кода сначала отправляются в виде патчей в список обсуждения, где они могут быть при необходимости отклонены. Проект получает от пяти до восьми патчей в сутки.
Проект имеет свой собственный инструмент тестирования (Mauve), содержащий около 175 000 тестов, и осуществляет ежедневную проверку, чтобы убедиться, что классы проекта совместимы с классами официального Sun API.
Прогресспокрытия кода библиотеки GNU Classpath можно отслеживать с J2SE 1.4[2] и Java SE 5.0[3].
Интеграция с виртуальной машиной
[править |править код]GNU Classpath содержит классы из официального пространства имён Java API. Там, где нужны или очень желательны вызовымашинного кода, это делается из малого количества специально для этого построенных «VM»-классов (VM — виртуальная машина). Название такого класса совпадает с именем класса, требуемого нативного метода плюс дополнительный префиксVM: VMObject, VMString и так далее. Классы VM хранятся отдельно от остальной части кода, имеют атрибуты package private или final. Методы этих классов содержат ключевое словоnative, указывающее на необходимость поддерживающей библиотеки. Такие библиотеки предоставляется авторами виртуальной машины Java. Поэтому GNU Classpath может быть подключен к практически любой виртуальной машине Java, если исходный код такой машины доступен и может быть изменён.
Поддержка новых возможностей языка в 1.5
[править |править код]До версии 0,95 каждый релиз GNU Classpath состоял из двух отдельных архивов: одного, представляющего состояние главной ветки разработки, и другого, содержащего более экспериментальную ветку, поддерживающую дополнения, такие, как generics, перечисления и аннотации, присутствующие в Java 1.5.
Начиная с версии 0.95 дополнения Java 1.5, такие, как generics, были полностью интегрированы в главную ветку. Ветка позволяет GCJ использоватькомпилятор Eclipse, ecj, чтобы скомпилировать исходный код Java 1.5 вбайт-код, который затем преобразовывается в машинный код с помощью GCJ[1].
Взаимодействие со свободным компилятором Sun
[править |править код]Начиная с версии 0,95 GNU Classpath поддерживает компиляцию и запуск свободногоGPLjavacкомпилятора с использованием Classpathruntime (GIJ) и компилятора (GCJ), а также позволяет компилировать библиотеку классов GNU Classpath, инструменты и примеры самимjavac.
Классы из домена omg.org
[править |править код]GNU Classpath не принимает код под несвободной лицензией или автоматически сгенерированный из кода под несвободной лицензией. Стандартный Java API содержит множество классов из домена omg.org, обычно генерирующихся изIDL-файлов, выпущенныхObject Management Group. Лицензия, которая позволяет только использовать, но не изменять эти файлы, считается несвободной. Именно по этой причине упомянутые классы в проекте GNU Classpath были заново переписаны на основе только официальных печатных спецификаций OMG. Следовательно, эта часть GNU Classpath так же свободна, как и любой другой код в проекте.
См. также
[править |править код]- Apache Harmony
- GCJ
- IKVM.NET
- JamVM
- JamaicaVM
- JikesRVM
- Kaffe
- IcedTea
- Свободные реализации Java
- Java Class Library
Примечания
[править |править код]- ↑12The release of GNU Classpath 0.98 «Better Late Than Never» . Дата обращения: 9 июля 2010. Архивировано 8 июля 2010 года.
- ↑GNU Classpath Library Coverage against J2SE 1.4Архивировано 12 июля 2006 года.
- ↑GNU Classpath Library Coverage against Java SE 5.0Архивировано 19 июля 2006 года.