<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF131%3Ajava</id>
		<title>LXF131:java - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF131%3Ajava"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF131:java&amp;action=history"/>
		<updated>2026-05-13T02:53:33Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF131:java&amp;diff=12020&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF131:java&amp;diff=12020&amp;oldid=prev"/>
				<updated>2011-05-10T11:38:18Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Ядро на Java==&lt;br /&gt;
&lt;br /&gt;
: Думаете, такой высокоуровневый язык, как ''Java'', не подходит для системного программирования? '''Роман Ярыженко''' уверит вас в обратном!&lt;br /&gt;
&lt;br /&gt;
Если вы хотя бы изредка следите за событиями в мире ИТ, то наверняка слышали о Singularity – исследовательском проекте, являющим собой попытку Microsoft создать полноценную операционную систему на платформе ''.NET'' (а если нет, см. http://research.microsoft.com/en-us/projects/singularity/). Сама концепция ОС на управляемом коде породила в сообществе множество жарких споров. Мы не будем занимать в них ни ту, ни другую сторону – а просто расскажем вам еще об одном аналогичном проекте. На сей раз он будет свободным (лицензия LGPL) и ориентированным на извечного конкурента ''.NET'' (или правильнее будет сказать наоборот?) – платформу ''Java''. Имя ему – ''JNode'', что, в свою очередь, является сокращением от английского «Java New Operating System Design Effort» – «Новая попытка спроектировать операционную систему на Java». Но почему новая?&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF131_42_1.jpg|300px]] Понимая внутреннее устройство ''JNode'', вы сможете расшифровать эти сообщения, если сумеете прочесть их с экрана.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
===Сначала было...===&lt;br /&gt;
&lt;br /&gt;
Когда появились первые кракеры со своими инструментами, эксплуатирующими уязвимости вроде переполнения буфера, ИТ-общественности пришлось начать думать о том, как защититься от них. К сожалению, язык ''C'', который и по сей день является самым распространенным средством системного программирования, имеет с точки зрения безопасности фундаментальные (конструктивные) недостатки, связанные с использованием указателей. В те далекие времена, конечно, думали в первую очередь о производительности, и конструкция вроде &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 char buf[256];&lt;br /&gt;
 scanf(“ %s», buf);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
мало кого смущала. Впрочем, и когда взломщики стали неизбежным злом, разработчики средств защиты не отказались от ''C'' совсем, а лишь попытались сделать его надежнее. Это, безусловно, смягчило проблему, но не решило ее до конца.&lt;br /&gt;
&lt;br /&gt;
В середине 90‑х годов теперь уже прошлого столетия теперь уже бывшая компания Sun Microsystems представила платформу ''Java'' с одноименным языком программирования. Последний позиционировался Sun как кросс-платформенный, легкий (думаю, вы можете с этим поспорить) и безопасный. Справедливости ради надо отметить, что Sun не была здесь пионером – языки со схожими чертами предлагались и до нее. Но они, по причине ли плохого маркетинга, либо покакой-то другой, не получили широкого распространения. С самого момента создания ''Java'' предпринимались попытки перенести на нее все необходимые приложения, чтобы создать операционную среду. Сначала это была ''JavaOS'', потом – ''JBS'', и, наконец, появился ''JNode''.&lt;br /&gt;
&lt;br /&gt;
Цель разработчиков ''JNode'', заявленная на сайте проекта (http://www.jnode.org) – это «создание на базе Java простой в применении и установке операционной системы для личного использования. Любое ''Java''-приложение должно запускаться быстро и безопасно».&lt;br /&gt;
&lt;br /&gt;
Первая публичная версия ''JNode'' была выпущена в середине 2003 года. На момент написания статьи, последний официальный релиз имел номер 0.2.8 и датировался январем 2009 года. За прошедшие полтора года в системе, несомненно, произошли некоторые изменения, поэтому мы будем ориентироваться на «ночные сборки», на самом деле представляющие собой ежесуточные снимки ''Subversion''-репозитория ''JNode''.&lt;br /&gt;
&lt;br /&gt;
===Действительно просто===&lt;br /&gt;
&lt;br /&gt;
Поскольку история проекта (пока еще!) не очень длинна и не изобилует интересными подробностями, останавливаться на ее деталях мы не будем, и перейдем непосредственно к сборке ''JNode''. Можно, конечно, взять готовый образ, но гораздо интереснее скомпилировать все самостоятельно из исходных текстов. Для этих целей нам понадобятся:&lt;br /&gt;
* Собственно исходные коды (их можно загрузить с сайта http://www.jnode.eu/releases/nightly-builds/jnode_svn_sources.tbz или взять LXFDVD).&lt;br /&gt;
* ''JVM'' и ''JDK'' 1.6 (подойдет и ''OpenJDK'', и официальная сборка от Sun – как минимум одна из них должна присутствовать в репозиториях вашего дистрибутива).&lt;br /&gt;
* Ассемблер ''nasm'' (http://www.nasm.us).&lt;br /&gt;
&lt;br /&gt;
«Но постойте! Разве ''GCC'' не нужен?» – вероятно, спросит грамотный читатель. Как это ни странно, нет. ''JNode'' почти полностью написан на ''Java'' – исключение составляют порядка тридцати файлов на ассемблере. Как же у разработчиков получается увязать между собой низкоуровневый язык и ''Java''? Все дело в том, что после компиляции с помощью ''javac'' часть байт-кода, которая, собственно, и есть ядро (если его можно так назвать), преобразуется в родной код для процессоров x86 или x64. Все это, конечно, сродни «черной магии», в основе которой лежит специальный ''JIT''-компилятор байт-кода, созданный разработчиками ''JNode'' – ''L1A'' (Level 1A). Чтобы отличить, вызывается ли он во время сборки или же во время выполнения, используется специальная переменная. Поскольку код, составляющий загрузочный образ, не задействует динамическую составляющую языка ''Java'', компиляция выполняется не сложнее, чем в случае того же ''GCC ''(ведь фундаментальные отличия между ''C'' и ''Java'' кроются не в синтаксисе, а в управляемой природе последней). Правда, с оптимизацией у ''L1A'' пока еще не очень хорошо, но для проекта версии 0.2 это, в общем, простительно.&lt;br /&gt;
&lt;br /&gt;
Предположим, вы скачали и распаковали исходный код, а также установили необходимые пакеты. Что теперь? Находясь в каталоге с исходными кодами, скомандуйте:&lt;br /&gt;
&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
Пока идет сборка, давайте рассмотрим особенности ОС.&lt;br /&gt;
&lt;br /&gt;
===''JNode'' изнутри===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF131_43_1.jpg|300px]] Файловый менеджер ''CC'' понравится пользователям ''MC''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF131_43_2.jpg|300px]] В ''JNode'' нет ни офисного пакета, ни базы данных, зато есть ИГРЫ! Это практически идеальная система для офиса.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Это может показаться странным, но у ''JNode'' нет ядра в привычном понимании этого слова. Операционная система имеет трех уровневую структуру. В самом низу расположены виртуальная машина ''Java'' (ВМ) и ее базовые компоненты: например, сборщик мусора. Часть ВМ, написанная на ассемблере, по каким-то причинам называется «наноядром». Это не вполне точно, так как «наноядро» не может работать в отрыве от ВМ (в частности, ассемблерный код вызывает методы, которые на нем не реализованы), но, в конце концов, это вопрос терминологии. Выше расположены библиотека классов, драйверы, файловые системы и (по желанию) GUI. Как можно писать на ''Java'' драйверы, требующие низкоуровневого взаимодействия с оборудованием – например, реакции на прерывания? Все просто. Драйвер регистрирует в ассемблерном коде обработчик '''IRQHandler''', а при возникновении прерывания увеличивается их счетчик, после чего планировщик распределяет каждое прерывание на соответствующие потоки с обработчиком. Еще выше находятся пользовательские приложения.&lt;br /&gt;
&lt;br /&gt;
Это может показаться странным, но ''JNode'' не пользуется аппаратными кольцами x86, выполняя весь код в привилегированном режиме '''ring 0'''. Безопасность обеспечивается средствами платформы ''Java'', производящей проверку байт-кода как при загрузке, так и при выполнении. Следовательно, прямой доступ к памяти пользовательских приложений и ВМ получить затруднительно. Также в ''JNode'' нет понятия «процесс», поскольку в ''Java'' они не поддерживаются. Но зато есть потоки и так называемые «'''Isolates'''»; последние можно считать аналогом процессов. Из дисковых файловых систем в ''JNode'' в данный момент поддерживаются (в разной степени) FAT, ext2, HFS+, NTFS, ISO9660, из сетевых – NFS и CIFS. Есть еще несколько псевдофайловых систем, таких как, например, JIFS (аналогичен '''proc''' в Linux).&lt;br /&gt;
&lt;br /&gt;
===Для пользователя===&lt;br /&gt;
&lt;br /&gt;
Но что это? ''JNode'' уже скомпилировался! ISO-образ системы можно найти в каталоге '''путь_к_JNode/all/build/cdroms/''', но желая попробовать его в виртуальной машине, имейте в виду, что в ''VirtualBox'' он работает очень медленно, а в ''Qemu'' не поддерживается графика. Увы, разработчики ориентируются на ''VMware''. &lt;br /&gt;
&lt;br /&gt;
В качестве загрузчика в ''JNode'' используется ''Grub''. Рекомендую выбрать пункт «'''JNode (all plugins)'''», с ним можно запустить больше приложений. Старт системы можно видеть на рисунке: все, что появляется после строки «'''before start_vm'''», выводится откомпилированным кодом ''Java''.&lt;br /&gt;
&lt;br /&gt;
Увидев стандартное приглашение, можно нажать '''Tab''' для получения списка доступных команд. Для некоторых из них доступно даже автодополнение ключей. Команды достаточно знакомые (''grep, find, tar'' и пр.), но поклонников ''Norton Commander'' ждет приятный сюрприз – файловый менеджер ''cc'' (нет, это не компилятор ''C'').&lt;br /&gt;
&lt;br /&gt;
Графический интерфейс, хоть и в зачаточном состоянии, в ''JNode'' тоже имеется. Подсистема рассчитана на ''VMware''; имеются драйверы для старых видеокарт ATI и Nvidia. Прежде чем активировать GUI, наберите ''gc'' (принудительная сборка мусора, может занять секунд пять), а после этого – ''startawt''. Потребуется некоторое время, чтобы графическая подсистема запустилась; возможно, надо будет пошевелить мышью. Интерфейс... в нем нет ничего особенного, разве что он аскетичен и иногда «притормаживает». Зато в меню есть пара простеньких игр.&lt;br /&gt;
&lt;br /&gt;
===Что же дальше?===&lt;br /&gt;
&lt;br /&gt;
На данный момент (после семи лет разработки), ''JNode'' находится примерно на уровне ранних версий ядра Linux. Нет многих драйверов устройств, не реализованы утилиты командной строки, графическая и сетевая подсистема находятся в зачаточном состоянии... Все это говорит, во-первых, о малочисленности разработчиков, а во-вторых... ''JNode'', в общем-то, нельзя назвать ОС – это скорее концепция.&lt;br /&gt;
&lt;br /&gt;
Вычислительные мощности современных компьютеров позволяют выполнять управляемый код практически без проблем с производительностью. Разработчики ''JNode'' пошли еще дальше и решили, что на ''Java'' можно писать не только приложения, но и саму ОС. Это значит, что такая система, если она когда-нибудь достигнет промышленного уровня, будет надежнее и безопаснее, нежели ее «неуправляемые» аналоги.&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>