На домашней странице WWW Consortium Java была внесена в список так называемых Мобильных Кодов - одного из перспективных направлений развития технологии World Wide Web. В конце 1995 года начался бум Java, который к моменту проведения выставки Unix-Expo'96 докатился и до нашей страны.

Согласно официальной версии, технология Java родилась из проекта Oak, основной целью которого была разработка объектно-ориентированных средств описания и коммуникации различного рода электронных устройств. Из-за неудачи этого проекта в 1994 году накопленный опыт было решено применить к продуктам, ориентированным на Internet. В апреле 1995 года по сети начал свободно распространяться HotJava - интерфейс просмотра страниц Web для платформ Sun. Буквально через месяц Netscape Communications, законодатель мод в разработке интерфейсов Internet, приобрела лицензию на Java. Сегодня HotJava реализована не только для Solaris, но и для Unix-платформ и NT. Кроме HotJava мобильный код Java может интерпретироваться и второй версией программы Netscape Navigator для всех систем, кроме Windows 3.x. Такова короткая история Java-технологии. На фоне каких событий разворачивается внедрение новой технологии?

Прошедший год был отмечен бурным расширением применения Internet для целей бизнеса, чему способствовало появление хороших интерфейсных программ типа Netscape Navigator и наличие в западных странах развитой системы телекоммуникаций, обеспечивающей доступ в Internet потенциальным потребителям информации и услуг. Но Internet имеет несколько слабых мест, тормозящих его применение в серьезных коммерческих приложениях. Во-первых, это безопасность. Сама технология TCP/IP не имеет встроенных механизмов обеспечения безопасности, поэтому для организации виртуальных защищенных сетей на основе Internet необходимы дополнительные программные средства. Во-вторых, это целый букет проблем, связанных с технологией WWW: отсутствие возможности организации виртуального канала связи (работа с базами данных, для удаленных и распределенных вычислений), отсутствие поддержки мультимедиа (реклама с использованием Internet), большая нагрузка на сеть при реализации интерактивных приложений типа "каждый с каждым". Именно на решение некоторых из этих задач и была ориентирована Java-технология.

Что в имени..?

Прежде всего, что я понимаю под словами "Java-технология"? Это среда, состоящая, по меньшей мере, из трех основных компонентов: системы программирования на объектно-ориентированном языке Java, системы разработки мобильных байт-кодов и системы программирования JavaScript. Первые два компонента предложены компанией Sun, JavaScript - творение Netscape.

Система программирования Java позволяет компилировать программы для конкретной компьютерной платформы. В этом случае главным отличием Java-программ, является использование библиотеки Java-классов, которые обеспечивают разработку безопасных распределенных систем. Утверждается, что язык позволяет делать гораздо меньше ошибок при разработке программ: главным при этом является тот факт, что в Java напрочь отсутствует адресная арифметика. Анализировать возможности "проколов" в компиляторе Java пока представляется крайне затруднительно, - язык не получил широкого распространения и хакеры еще не "взялись" за него как следует, в отличие от других компонентов Java-технологии. А вот по поводу отсутствия адресной арифметики можно сказать, что у дедушки современных языков, Фортрана, ее тоже сначала не было, но вскоре она появилась и стала чрезвычайно мощным средством повышения эффективности программ. Естественно, что ни о какой мобильности приложений уже говорить не приходится, для его переноса требуется соответствующий компилятор и библиотеки. По сравнению с механизмом RPC Java - это большой шаг вперед, но многие ли разработчики страниц Web готовы (или способны) воспользоваться этой возможностью?

Новое - забытое старое

Третьей составляющей Java-технологии является язык сценариев управления просмотром гипертекстовых страниц JavaScript, в девичестве LiveWare. Этот язык разрабатывался компанией Netscape Communication задолго до анонсирования Java. Для специалистов в области гипертекстовых систем его появление было давно ожидаемым событием: практически любая локальная система имеет средство описания сценариев просмотра своих информационных страниц. Теория и практика реализации такого языка были давно хорошо изучены, начиная от демонстраций Дуга Энжельбарда и кончая системами типа Hyper Card, Hyper Note, KMS и т.п. Появление фреймов, многооконность, динамическая загрузка страниц и ряд других расширений, предложенных Netscape, явно указывали направление развития Navigator. Надо сказать, что технология LiveWare по своей архитектуре очень напоминает новые решения Java (та же возможность разработки приложений для сервера HTTP, мобильный код, исполняемый Navigator), но, кроме того, в HTML-страницы можно встраивать еще и исходные тексты программ. Последняя возможность превращает Navigator в полноценную среду программирования, которую можно использовать не только при путешествиях по Internet, но и в локальных системах. Используя JavaScript, можно организовать многооконный интерфейс с локальной контекстной справочной системой и встроенной графикой, при этом многие вопросы проверки вводимых пользователем данных реально возложить на JavaScript. Можно организовать открытие нового окна, прокрутку текста, запрограммировать калькулятор, которых на сети уже около двух десятков, проверку ввода, но не более того.

Стоит ли овчинка выделки?

Отдельная тема - объектно-ориентированный характер JavaScript. Если в Java есть декларация объектов, наследование свойств и т.п., то с JavaScript все несколько иначе. Весь язык базируется на использовании встроенных объектов Netscape Navigator: окна, формы, поля форм, элементы рабочих областей Navigator и т.п. Это сильно облегчает обучение и позволяет писать интересные и полезные программы. Но вот с наследованием свойств объектов и обменом данными между различными объектами, например двумя окнами Navigator, дело обстоит из рук вон плохо. Эти возможности вообще никак не реализованы. Имеются намеки на то, что в будущем появится что-то типа подкласса parent класса window, но пока JavaScript - это просто обычный язык сценариев просмотра HTML-страниц.

Правда, надо сказать, что из-за JavaScript Navigator стал довольно тяжелой программой для ПК. При организации HTML-страниц со встроенной графикой и функциями на JavaScript открытия/закрытия окон и проверкой ввода ресурсов 486-го компьютера с 8 Мбайт памяти и Windows 3.x хватает едва-едва. Аналогичная ситуация происходит и при использовании Windows NT c

16 Мбайт оперативной памяти. Вообще говоря, пользоваться JavaScript следует очень аккуратно, постоянно думая о потенциальных пользователях. Так, размещение бегущей строки при переходе к другой странице довольно сильно мешает пользователям, которые используют медленные линии для подключения к сети - именно в этом поле отображается статистика переданных байтов с сервера клиенту. К тому же бегущая строка для пользователей Windows 3.x хороша только в том случае, если на ней не задерживаться. Функция setTimeout, которая выполняет отложенный вызов прокрутки текста, приводит к захвату ресурсов системы, что может привести к зависанию машины, если оставить страницу с бегущей рекламой на некоторое время. Из разъяснений, полученных в телеконференции comp.lang.javascript списка javascropt@oberon.org, следовало, что отложенное выполнение порождает новый поток, если речь идет о многопоточных ОС, а так как оболочка Windows 3.x таковой не является, то функция реализуется путем рекурсии, что и приводит к "проеданию" ресурсов. Наиболее логичным выходом в этой ситуации является установка 32-разрядной Windows 95 или NT. Однако и переход на NT этой проблемы не снимает - сама ОС требует гораздо больше ресурсов. Кроме того, довольно часто и при использовании HotJava под NT появляется сообщение "protection violation", что приводит к аварийному завершению программы.

Всему свое место

Попробуем предположить, где место Java-технологии в рамках Web, где ей и прочат прорыв к новым высотам. При помощи Java можно разрабатывать обычные CGI-скрипты, мобильные апплеты и сценарии просмотра гипертекстовых страниц.

CGI-скрипты на Java ничем не отличаются от обычных.

Апплеты могут служить для нескольких целей; самое простое - это мультимедийные страницы. Более интересно их применение для распределенной обработки данных. Однако, как назло, именно здесь и находится наименее защищенное место новой технологии. Уже есть примеры, когда такой апплет становится "троянским конем", которого пользователь загружает в сеть, защищенную брандмауэром.

У каждого способа использования Java есть четко ограниченная область применения. И если использовать распределенные вычисления, то в рамках одной организации или проекта, а не в общественной сети. Апплеты можно использовать и для написания сценариев просмотра страниц Web, но лучше это обсуждать в контексте JavaScript.

Скрипты JavaScript специально предназначены для создания сценариев просмотра гипертекстовых баз данных. Они не столь мощны, как апплеты Java, но для построения многооконных интерфейсов вполне достаточны. JavaScript - это расширение HTML в части повышения гибкости языка разметки документов. По сути оно позволяет выйти за пределы одного документа.

Технология Java безусловно является логичным продолжением общей стратегии развития Web. Но эта технология еще слишком "сырая", и использовать ее при создании своих страниц нужно чрезвычайно осторожно.


Павел Храмцов - руководитель группы РНЦ "Курчатовский Институт". С ним можно связаться по телефону (095) 196-9124 или по электронной почте dobr@kiae.su.

Доверяй, но проверяй

Разработка мобильных байт-кодов Java, которые в терминах Java-технологии называются "апплеты" (applets) - чрезвычайно интересное занятие. Эта концепция специально разработана для использования в Web, чтобы "оживить" ее. Типичным примером такого применения является приветствующий пользователя симпатичный человечек из документации по программе HotJava. Для использования апплетов в языке гипертекстовой разметки HTML был введен специальный тег APP, в котором указывается имя апплета и параметры его вызова. Обработка HTML-документа аналогична обработке встроенной в документ графики: запрашивается документ, анализируется его содержание, и, если имеются теги APP, подгружаются и выполняются апплеты. Интерфейсная программа является одновременно и интерпретатором байт-кода Java.

Используя библиотеку классов Java, можно разработать мультимедийные страницы с движущейся графикой и звуком. Применение байт-кода позволяет организовать распределенные процедуры с использованием различных серверов, с которыми можно взаимодействовать по разным протоколам. Сама возможность подключения новых протоколов обмена также преподносится как одно из достоинств Java. Но насколько может быть защищена машина, на которой запускается приложение? Как обезопасить себя при копировании любого программного обеспечения? Не надо быть семи пядей во лбу, чтобы видеть: используя HotJava или Navigator, пользователь вольно или невольно запускает на своей машине чужие программы, которые могут не только "оживить" HTML-страницы, но и одновременно несколько "встряхнуть" владельца компьютера. Ведь в принципе апплеты могут выполняться незаметно для пользователя, в фоновом режиме. Решение выглядит так: при разработке апплетов используется компилятор, снабженный встроенной системой безопасности, а сама программа просмотра анализирует получаемый байт-код на наличие в нем запрещенных операций. Если отбросить детали механизмов защиты HotJava и Navigator, все сводится к запретам записи информации на диск и по адресам оперативной памяти с использованием адресной арифметики. Совершенно очевидно, что этого явно недостаточно для построения надежно защищенной системы. Есть масса способов внедрения в систему и без перечисленных действий, не говоря просто о непроизводительном использовании ресурсов компьютера.

CERT уже успел сообщить о возможности разработки апплетов, который использует брешь в системе DNS и подменяет IP-адреса. Правда, эта "дырочка" обнаружена в Navigator, а не HotJava, но и популярность первой программы не идет в сравнение с популярностью Java. Netscape объявила, что в систему защиты будут внесены изменения и программа будет проверять IP-адреса, с которыми работает апплет на идентичность с IP-адресом HTTP-сервера, где получен данный апплет. Но естественен вопрос: как в этом случае быть с распределенными вычислениями, которые обязаны, по мнению разработчиков, произвести революцию на Internet? Пока есть два способа защиты: запрет выполнения Java байт-кода программой интерфейсом и использование проверенных страниц. Запретить выполнение можно, включив специальный режим настройки программ HotJava и Navigator. В телеконференции comp.lang.java энтузиасты новой технологии комментируют эту проблему примерно так: "Мы честные люди и не собираемся писать всякие пакости". Для полноценной же защиты в программу-интерфейс придется вставить брандмауэр с возможностями конфигурирования портов TCP/UDP и анализом содержания пакетов, однако, как показывает практика, это еще не дает стопроцентной безопасности.