Продолжение. Начало см. в PC Week/RE, N 16/2004, /2004, и /2004.
ГЕНЕАЛОГИЯ
Ранее мы обсудили Ядро Mac OS X и основные API этой OC. Теперь поговорим о том, как "десятка" используется в качестве UNIX-системы, и при этом коснемся довольно интересной системы разработки Web-приложений WebObjects, поставляемой в комплекте с Mac OS X.
UNIX, Linux, Mac OS X...
Вероятно, у читателей уже возник законный вопрос: если Mac OS X настолько хороша и так близка UNIX, почему она не популярна в UNIX- и Linux-сообществе?
Один ответ очевиден: для использования Mac OS X вам придется приобрести компьютер производства Apple. Для тех, кто использует UNIX/Linux в попытке сохранить на плаву парк устаревших компьютеров, это сразу исключает "десятку" из числа альтернатив Windows. Правда, современные дистрибутивы Linux, ориентируемые на настольные компьютеры, уже ничуть не уступают Windows в своей жадности до аппаратных ресурсов (см., например, очень неплохую статью на www.osnews.com/story.php?news_id=7324), так что для серьезной работы в качестве полноценного офисного компьютера вам не подойдет ПК не только на базе 486-го, но и какого-нибудь Celeron 266...
Второй ответ может показаться обескураживающим: вы просто несколько отстали от жизни! Несмотря на отдельные выкрики аналитиков типа: "Mac OS X это не UNIX!", сегодня эта ОС все прочнее закрепляет за собой славу одного из самых удачных вариантов UNIX именно в тех кругах, где суть вопроса понимается наиболее четко, а именно среди разработчиков программ. Если вам доведется посетить какую-либо всемирную конференцию разработчиков ПО в открытых кодах, обратите внимание на популярность PowerBook и Mac OS X среди этих вполне осведомленных людей.
Во многом такая популярность определяется не только прочным фундаментом Mac OS X, но и очень последовательной позицией Apple в обеспечении переносимости уже созданных приложений под Mac OS X. После предыдущих статей цикла все вопросы об удобстве "десятки" в качестве платформы для портирования софта с классической Mac OS и для разработки нового ПО, я думаю, исчезли. Но эта система достаточно удобна и для написания UNIX- и даже Linux-программ.
Изначально даже в самых ранних версиях "десятки" был обеспечен очень высокий уровень совместимости для разработанных в BSD-стиле программ (правда, только чисто текстовых прикладных), а также для системных сервисов (демонов). Однако столь привычная для UNIX’оидов графическая подсистема X11 Window System в "десятке" отсутствовала. Разумеется, в ней имелись все необходимые средства работы с командной строкой, так же как и привычные в сообществе ПО с открытым кодом сервисы, средства и стандартные для UNIX инструменты разработки типа компилятора gcc.
Отсутствие X11 было вполне объяснимо ведь "сладкая парочка" Aqua+ Quartz по всем показателям побила убогую графику X11-ориентированных менеджеров окон.
Кроме того, при возникновении задачи переноса X11-приложения на Mac OS X имелся и еще один весьма интересный подход. Именно он был реализован, скажем, при переносе на "десятку" хорошо известной универсальной математической программы Mathematica компании Wolfram Research. Вариант Mathematica для классической Mac OS существовал с незапамятных времен (впрочем, как и для многих вариантов UNIX, Linux и Windows), но при переносе программы компания приняла, казалось бы, парадоксальное решение отказаться от "карбонизации" уже готовой программы и предпочесть портирование с одной из UNIX-платформ. Портирование ядра программы прошло очень гладко, а графическая система и интерфейс пользователя были созданы заново с помощью Cocoa. В результате современная Mathematica для Мака представляет собой комплекс из двух взаимодействующих подсистем (ядро на базе чистого BSD и интерфейс на базе Cocoa). Это позволяет крайне легко вносить изменения в логическое ядро программы, упрощая синхронный выход версий для всех поддерживаемых компьютерных платформ, и при этом использовать все возможности Aqua и Quartz.
Mac OS X и Маки получают все большее признание у сообщества Open Source. Фото с последних конференций разработчиков GNOME и ApacheCon
Однако процедуры установки UNIX-программ под Mac OS X были несравненно сложнее того, к чему давно привыкли пользователи Маков.
Примерно с осени позапрошлого года среди "продвинутых" пользователей Mac OS X началось широкое распространение систем полуавтоматического управления пакетами и портами. Самая известная из них создана в рамках проекта Fink (fink.sourceforge.net), она сделала доступным для широких масс огромный репозиторий перенесенных на Mac OS X UNIX-программ, причем благодаря задействованным в проекте удобным графическим средствам поиска и выбора имеющегося в репозитории ПО, а также инструментам управления пакетами дистрибутива Debian процедуры компиляции, установки и удаления программ стали действительно простыми. Примерно тогда в Mac OS X были добавлены и новые версии библиотек, что еще более улучшило совместимость с приложениями, созданными для других диалектов UNIX.
В середине прошлого года в Mac OS X появилась устанавливаемая дополнительно система X11, созданная на базе хорошо известного проекта XFree86 (что не отменяет использования гибридного подхода UNIX+Cocoa, поскольку Quartz практически по всем параметрам опережает X11 на целую вечность). С появлением прошлой осенью Mac OS X 10.3 "Пантера" подсистема X11 поставляется в составе системы (правда, по умолчанию она не устанавливается). С выходом "Пантеры" связана и еще одна важная для UNIX’оидов новость: в комплект поставки включены многие библиотеки обеспечения совместимости и с Linux-программами.
Про следующую версию системы, Mac OS X 10.4 "Тигр", пока говорить рано (первая официальная демонстрация системы состоится на Apple Worldwide Developer Conference, или WWDC, в конце июня 2004 г.), но, по многим данным, Apple и в дальнейшем будет вести дело к тому, чтобы превратить Mac OS X в лидирующий вариант настольного UNIX, а значит, можно ожидать кардинального повышения степени совместимости новой версии этой ОС с Linux, равно как и простоты переноса созданных для Linux приложений на Mac OS X. Как следствие, к осени Mac OS X захлестнет новая волна свежеперенесенных программ и последующих за ней неофитов. Кстати, одновременно с WWDC в том же комплексе зданий пройдет очередная конференция Java-разработчиков JavaOne.
Подобные неофиты будут поначалу воспринимать Mac OS X прежде всего как один из вариантов UNIX, игнорируя историю, специфику и наработки, пришедшие из мира классической Mac OS. Попытаемся встать на их точку зрения и оценить альтернативу "Mac OS X против Linux", тем более что на Маках есть и то и другое.
Базирующийся на разработках Red Hat (точнее, на дистрибутиве Fedora) дистрибутив Yellow Dog Linux компании Terra Soft Solutions (www.terrasoftsolutions.com) работает на любых Маках с процессорами PowerPC (правда, с самым первым семейством Power Mac придется чуть-чуть повозиться) и использует все возможности встроенной в Мacintosh аппаратуры при минимальном вмешательстве со стороны пользователя. Более того, компания предлагает Y-HPC вариант Linux, специально созданный для построения вычислительных кластеров на базе 64-разрядных процессоров PowerPC 970 (Apple Power Mac G5 и Xserve G5, а также блейд-серверов IBM BladeCenter с установленными "лезвиями" JS20).
Понятно, что фанаты Linux и любители HPC-кластеров на базе привычного им Linux (кстати, кластеры можно строить и на Mac OS X) используют самые что ни на есть новейшие Маки. Но, как и в случае с Linux для PC, многие усматривают в Yellow Dog Linux волшебный способ дать вторую жизнь довольно старым Макам. Если же у вас завалялся совсем уж старинный компьютер на процессоре Motorola 68x00, то и для него можно подыскать дистрибутив Linux, правда, не столь современный.
Закончить раздел UNIX хотелось бы несколькими цитатами людей, никак не связанных с Маками и потому оценивающих лишь UNIX-слой Маковской реальности.
Джеймс Гослинг, создатель Java: "Я предпочитаю думать об OS X как о Linux с гарантией качества и толикой вкуса".
Блейк Стоун, директор по технологиям Borland: "OS X является моим любимым дистрибутивом Linux".
Стивен Войган-Николс, редактор Linux Magazine: "Безусловно, Mac OS X лидирующая ОС семейства UNIX для настольных машин всех времен. Возможно, на первый взгляд она не выглядит как вариант UNIX, но под сияющей внешностью лежит система, базирующаяся на BSD и OSF Mach".
WebObjects Cocoa для Интернета
Завершая разговор об API Mac OS X, нельзя не вспомнить об одном весьма интересном продукте, хотя и не являющемся API, но имеющем к ним непосредственное отношение. Речь идет о WebObjects. Причин для этого у нас несколько. Во-первых, WebObjects поставляется вместе с "десяткой", так что для не пренебрегающих самообразованием пользователей Mac OS этот продукт вполне может стать любимым средством создания Web-приложений. Во-вторых, WebObjects, унаследовав многие черты Mac OS X, доступен на целом ряде различных программно-аппаратных платформ, и потому отлученные от любимых Маков поклонники "религии" Mac OS X и отдельные заинтересовавшиеся лица из "вражеских окопов" могут примерить некоторые "десяточные" подходы на доступном для них оборудовании. Наконец, история развития WebObjects как нельзя лучше подходит для продолжения разговора об API Cocoa и Java под "десяткой", поскольку является логическим продолжением эволюции "античного" объектного API системы NEXTSTEP (он назывался YellowBox) в "новую эру" расцвета Интернета.
Напомним, что до 19941995 гг. далеко не все считали, что именно Интернет окажется той самой "killer technology", которая перевернет все представления о коммуникациях. Можно вспомнить такие мощные общедоступные службы, как Prodigy, CompuServe или AmericaOnline, а затем, перед самым переломом, MSN и eWorld (компаний Microsoft и Apple соответственно), сделавшие ставки на локальные пулы модемов или, при их недоступности в данной местности, на доступ по протоколу X.25.
Когда среди различных технологий информационного обеспечения пользователей выявился явный лидер (им оказался, как вы уже знаете, Интернет), в недрах NeXT возникла очень простая и вполне здравая мысль адаптировать изначально ориентированный на работу в распределенных сетевых средах API YellowBox для применения в Интернете. Результатом такой работы и стал программный продукт WebObjects. Учитывая времена, когда все это произошло (первая демонстрация WebObjects состоялась осенью 1995 г.), можно без особых натяжек присудить WebObjects почетный титул "первого сервера Интернет-приложений" (Internet Application Server).
При помощи Enterprise Object Modeler можно быстро построить реляционную модель базы данных и отобразить ее в иерархию хранимых объектов бизнес-логики
Описанный "адаптивный" подход позволил быстро и эффективно перенести WebObjects на все программно-аппаратные платформы, для которых к этому времени существовала реализация системы OPENSTEP. Существовал и более простой способ переноса WebObjects ведь для его работы требовался лишь API YellowBox, который можно было наложить поверх любого "чужого" (не-OPENSTEP’овского) системного API. Таким образом удалось добиться не только высокой межплатформенной переносимости самого WebObjects, но и создаваемых с его помощью приложений.
После того как компания NeXT была куплена Apple, проект OPENSTEP в целом перестал развиваться он дал лишь отросток в виде операционной системы Mac OS X. А вот WebObjects так и остался многоплатформенным, став одним из популярнейших средств разработки Web-приложений.
В последние годы укреплению позиций WebObjects в маковском мире способствовало его включение в стандартный комплект поставки Mac OS X. К каждому дистрибутиву Mac OS X прилагается версия для разработчиков, а в комплект серверного варианта системы, Mac OS X Server, входят средства развертывания сервера приложений WebObjects и лицензия на его использование. При необходимости применять приложение, созданное на базе WebObjects, на серверах Sun с OS Solaris или на Windows-серверах либо вести разработку под Windows вы можете приобрести соответствующие продукты и лицензии за очень небольшую сумму 761 долл. (в России) за сервер без ограничения числа и типа используемых процессоров.
При разработке интерфейса в WebObject часто можно вообще ограничется указанием соответствия между визуальными объектов бизнес-логики
WebObjects успел принять участие во множестве различных обзоров и тестов, причем отзывы почти всегда оказывались самыми благоприятными. Производительность сервера приложений обычно признавалась самой высокой в тесте, средства разработки были выше всяких похвал, но при этом обязательно подчеркивалось, что работать с WebObjects без серьезной предварительной подготовки практически невозможно. Правда, высказывались и некоторые нарекания к WebObjects с точки зрения создания систем очень высокой готовности, поскольку продукт не позволяет без дополнительного программирования на лету подхватывать сессию, обслуживаемую вышедшим из строя сервером в кластере WebObjects.
Мощь и гибкость WebObjects сделала его "широко известным в узких кругах". В списке организаций, использующих базирующиеся на нем системы, можно найти Deutsche Bank, ВВС, Warner/Chappell Music, Toyota, городской сайт Берлина и службу технического обслуживания кораблей Военно-морского флота США; наконец, на WebObjects создано огромное количество электронных магазинов, включая собственный The Apple Store компании Apple.
Плавное развитие WebObjects прервалось в 2000 г., когда на пике волны повсеместных разговоров о переходе на Java была выпущена принципиально новая, пятая версия продукта.
В предыдущих (вплоть до 4.5) версиях WebObjects при создании серверных частей пользовательских приложений отмечалась строгая ориентация на Objective-C, WebScript (это такой несколько упрощенный интерпретируемый вариант Objective-C) и API YellowBox или Cocoa с возможными небольшими вкраплениями Java. А это означало, что для работы таких "сервлетов" обязательно требовалась как минимум Runtime-версия YellowBox/Cocoa, существующая для всех базовых программно-аппаратных платформ.
Для пятой версии WebObjects главным словом стало "Java". Именно на нем теперь рекомендуется разрабатывать приложения (хотя и последователи Objective-C забыты не совсем), да и сам сервер WebObjects представляет собой очень большое Java-приложение. Как следствие, была создана новая ориентированная на Java иерархия классов, почти точно повторяющая то, что имелось в YellowBox для Objective-C.
Несмотря на солидный возраст, WebObjects до сих пор выделяется среди многих других средств разработки и развертывания Web-серверов некоторыми очень прогрессивными чертами.
Прежде всего он подразумевает последовательное использование стандартного подхода трехзвенных сервисов (клиент бизнес-логика база данных), однако реализация клиента может быть на редкость разнообразна. Допускается применение простых Web-клиентов, Java-аплетов, полноценных скомпилированных клиентских программ... Есть два основных способа создания таких клиентов: их генерация на базе заполнения неких описательных форм (с полностью автоматическим порождением необходимого кода для доступа к базам данных и взаимодействия клиента с сервером) и более сложный вариант с ручным программированием логики работы приложения; впрочем, подходы можно и объединять. Возможен доступ клиентов к внешним Web-сервисам (есть поддержка XML, SOAP и WSDL), а также создание собственных Web-сервисов, так что все модные ныне тенденции на создание "сервисориентированных программных систем" здесь легко реализуемы. В WebObjects входят и мощные средства разработки развитых графических интерфейсов пользователя.
При построении бизнес-логики приложения на WebObjects в относительно простых случаях удается вообще обойтись без написания кода, воспользовавшись графическим механизмом сопоставления визуальных объектов клиентского интерфейса и хранимых объектов бизнес-логики. Правда, при создании большинства реальных приложений приходится все же дописать несколько строк кода, расширяющих функциональность таких автоматически получаемых объектов и тут главным оказывается логичность автоматически выстраивающейся иерархии классов и генерируемые системой описания.
Особенно удобно в WebObjects реализована работа с базами данных. Входящий в него Enterprise Object Modeler позволяет в графическом режиме создать подробную схему взаимодействия объектов бизнес-логики, на основе которой так же автоматически (в отличие от многих других J2EE-систем) генерируется SQL-код для отображения объектов в базах данных. Кстати, приложение полностью независимо от конкретной реализации реляционной базы данных, поскольку реальный SQL-код "зашивается" в модули подключения к конкретной СУБД.
Теоретически приложение, созданное при помощи WebObjects 5, может исполняться везде, где только есть виртуальная машина Java 2 Standard Edition ver. 1.3.1 и JDBC 2.0, однако лучше выбрать одну из сертифицированных платформ на сегодня это Java-машины для Mac OS X Server, Microsoft Windows 2000 и Solaris 8, базы данных Oracle 8.1.7 и 9.2.0, Sybase ASE 12.5, MS SQL Server 2000, MySQL 3.23 и OpenBase 7.0, Web-серверы Sun ONE Web Server 6.0, Apache 1.3.9 или 1.3.26 и MS IIS 5.0. В зависимости от способа развертывания приложение на базе WebObjects может функционировать в качестве независимого сервера приложений с интегрированным J2EE-сервером либо использовать внешний сервер J2EE (рекомендуются Apache Tomcat 3.2.4 или 4.0.5, BEA WebLogic 7.0 и IBM WebSphere 4.0).
Если вы заинтересовались WebObjects, не поленитесь заглянуть на сайт http://developer.apple.com/documentation/WebOdjects/WebOdjects.html
Окончание следует