Заметки о кросс-платформенности

Конечно, будет неправильным сказать, что каждое приложение обязано быть совместимо с большим количеством различных платформ. Тем не менее, кросс-платформенные программы есть и продолжают появляться. Уже одно это говорит о том, что рынок нуждается в подобном ПО. Давайте попробуем разобраться подробнее в некоторых особенностях, связанных с его проектированием (конечно же, не во всех - эта статья не претендует на исчерпывающую полноту), а также в принципиальном вопросе, имеет ли вообще смысл страдать над кросс-платформеностью вашей разработки.

Итак, каковы преимущества кросс-платформенных приложений перед теми, которые могут запускаться только на одной платформе? В принципе, они очевидны. Во-первых, программы, которые обладают таким полезным свойством, как кросс-платформенность, более устойчивы на рынке программного обеспечения, таком сложном и нестабильном в наши нелёгкие времена. В самых разных категориях сейчас набирают популярность приложения, которые умеют работать под основными "китами" мира операционных систем: Windows, Linux, FreeBSD и MacOS. Среди программ для конечных пользователей на вершинах хит-парадов софта стоят Mozilla Firefox, OpenOffice.org, Opera... Список велик, и каждый день он пополняется новыми участниками. В свете этих фактов разработчикам, которые смотрят в будущее и не видят его без своих, несомненно, очень нужных и качественных продуктов, стоит подумать о кросс-платформенности. Правда, как вы, может быть, заметили, большая часть этого списка - программы бесплатные или даже вовсе open-source. Собственно говоря, для программ, предназначенных для Desktop-систем, кросс-платформенность не так уж и прибыльна в денежном эквиваленте. Однако стоит заметить, что высказанное выше правило о стабильности более чем актуально для того, кто разрабатывает программное обеспечение для станций-серверов или корпоративных пользователей. Для серверов - потому что платформа POSIX (UNIX-подобные системы типа Solaris, MacOS, FreeBSD, Linux) сдаёт свои позиции под яростным натиском неугомонных "мелкомягких". А задачи у обеих платформ довольно похожи, несмотря на фундаментальные различия в архитектуре. Что касается корпоративной сферы, тут очень популярны два слова: Java и .NET. Как известно, это архитектуры, которые по своей природе опираются на понятие кросс-платформенности. Конечно, никто не запрещает создавать корпоративные приложения под одну платформу, но стоимость их, как правило, обоснованно ниже.

В общем-то, чтобы узнать, имеет ли смысл делать ту или иную разработку кросс-платформенной, проще всего посмотреть на конкурентов. У них есть кросс-платформенная версия программы - значит, вам тоже есть о чём задуматься. Если же конкурентов у вас нет (и вы при этом всё же умудряетесь как-то зарабатывать деньги), то нужно оценить предполагаемое количество пользователей вашей программы для каждой из платформ - это называется маркетинговыми исследованиями. Если среди платформ нет явного лидера по количеству пользователей, то имеет смысл делать программу кросс-платформенной.

Итак, решение принято. Если оно отрицательное (то есть, программа будет только для одной платформы), то дальше можно не читать. Иначе... О чём стоит подумать дальше?

Едва ли не самым важным моментом является выбор языка программирования и, соответственно, совместимых с ним технологий и стандартов. На текущий момент основных предложений в этом секторе три: старичок C++; ещё молодой, но уже взрослый язык Java и новомодный C#. Есть, конечно, и более экзотичные варианты: например, очень даже кросс-платформенные Ada, Python, Free Pascal или даже PHP. Они имеют множество недостатков. Например, Ада, несмотря на отличные языковые возможности и богатый выбор очень хорошо отлаженных библиотек, имеет более чем дорогие средства для разработки программ (компиляторы и IDE). Free Pascal довольно сыр и содержит много ошибок, однако потенциал у этой системы программирования есть. PHP - скриптовый язык, поэтому скорость разработанных с его помощью решений зачастую не позволяет использовать его повсеместно. Это касается и Python, который, конечно, в этом плане намного лучше PHP или Perl'a, зато имеет своеобразный синтаксис и поэтому не очень популярен у программистов.

Так что обратимся лучше к тройке лидеров. Каждый из них, естественно, имеет преимущества и недостатки, и сейчас мы немного о них поговорим. C++ позволяет создавать очень компактные и быстрые решения, однако требует наибольших затрат на разработку, поскольку решение для каждой платформы придётся писать отдельно. Наличие огромного числа библиотек и высокопроизводительных компиляторов (в том числе и бесплатных) - конечно, плюс, но вряд ли он перевешивает минусы. Java в этом плане проигрывает по скорости работы программ за счёт своей виртуальной машины, зато имеет огромную фору в том, что для обеспечения совместимости с разными платформами со стороны разработчика конечного продукта нужны минимальные телодвижения. Количество различных библиотек для этого языка уже плавно приблизилось к числу аналогичных для C++, так что в этом вопросе они практически на одном уровне. Плохо только то, что рынок испытывает дефицит в хороших Java-разработчиках, и это одна из многих причин того, что разработка программ на этом языке может стать более дорогостоящей, чем на C++. C#, в принципе, тоже похож на Java - для работы программ, написанных на этом языке, также нужна виртуальная машина. Однако поскольку язык разработан корпорацией Microsoft, то и виртуальная машина .NET Framework от этих разработчиков работает только под управлением Windows. К счастью, есть ещё и Mono, которая совместима с программами для .NET, и при этом умеет работать как под Win32, так и под POSIX-платформами. В целом, Mono имеет очень хорошую совместимость с .NET Framework, но некоторые возможности C# в ней поддерживаются не полностью. Это одно из "скользких мест" C#. Вторая загвоздка заключается в сравнительной новизне этого языка, которая является причиной малого количества готовых решений для этого языка и некоторого (хотя и не такого острого, как для Java) дефицита специалистов по этому языку. Зато синтаксис C# и его рантайм-библиотека проще, чем аналогичные в Java, и изучить его проще.

В принципе, как видите, явного лидера нет, поэтому при выборе языка нужно учитывать, что вам важнее - скорость разработки или скорость работы готового приложения. И если критичнее первое, нужно подумать, какой язык вы или ваши программисты знают лучше или освоят быстрее. Можно, конечно, сделать и многоязычный проект, но совмещать такие языки, как Java, C++ и C# - технически не самая простая задача. Хотя в некоторых программах она и решена, стоит принять во внимание, что такой подход увеличивает затраты на разработку.

Ещё один немаловажный фактор - количество поддерживаемых платформ. Это особенно актуально, если в предыдущем списке вы выбрали C++. Потому что для Java и C# это не особо критично, как я уже говорил, а вот на C++ весь платформно-зависимый код нужно будет писать отдельно для каждой ОС. Соответственно, чем меньше поддерживаемых ОС, тем меньше код. Для пользователей операционных систем вроде OS/2 или QNX стараться вряд ли имеет смысл, поскольку их мало. Аналогично, если ваш продукт имеет чисто серверную направленность, очевидно, вряд ли стоит его портировать под настольные системы семейства Windows.

Третий пункт в списке задач, решаемых на этапе проектирования кросс-платформенного приложения, это выбор различных стандартов, которые оно будет поддерживать. В принципе, это не так уж и отличается от принципа создания приложений, работающих только на одной платформе, но по существу весь вопрос заключается в кросс-платформенности самих стандартов и технологий. Например, если под Windows для распределённых приложений вы могли бы обойтись DCOM'ом, то кросс-платформенное приложение уже должно использовать CORBA, архитектуру значительно более дорогую и ресурсоёмкую. Аналогично и с другими технологиями, например, COM, на которой, кстати, DCOM и базируется. Под POSIX-системами эта технология работать не будет, поэтому стоит посмотреть в сторону XPCOM - кросс-платформенного аналога этой технологии, который используется в таких продуктах, как OpenOffice.org и Mozilla. Как правило, технологии, обеспечивающие кросс-платформенность, более дороги как при разработке, так и при эксплуатации. Это касается даже GUI-библиотек (речь о C++): если под Win32 за MFC можно было не платить, то кросс-платформенная библиотека Qt уже отнюдь не бесплатна... Кто не верит - посмотрите здесь: www.trolltech.com/products/qt/licenses/pricing. Хотя, конечно, можно найти и бесплатные решения, они, как правило, обладают гораздо менее впечатляющей функциональностью.

Довольно серьёзной ошибкой бывает перенос технологии, работающей под одной системой, на другую при помощи эмуляторов. Технологически такое решение, пусть и не самое красивое, имеет право на жизнь. Однако следует помнить, что пользователями кросс-платформенных приложений обычно являются люди, имеющие неплохие познания в информационных технологиях, а в их глазах такая излишняя простота не прибавляет приложению бонусов в рейтинге. Даже наоборот - это свидетельствует о недостаточном профессионализме разработчика, и, как понимаете, отрицательно сказывается на продажах. Поэтому в таком деле самый простой путь далеко не всегда самый выгодный финансово.

Очень важно при использовании готовых библиотек обращать внимание на текст лицензионного соглашения. Многие лицензии для библиотек с открытым исходным кодом не позволяют использовать их в коммерческом программном обеспечении. Другие, менее радикальные, требуют в этом случае плату за использование. А коммерческие библиотеки для кросс-платформенного программирования (как, кстати, и среды разработки) стоят достаточно дорого, и один пример я уже приводил - Qt. Кроме того, программисты, разрабатывающие приложения для разных платформ, должны разбираться в них, а, как известно, чем квалифицированнее рабочая сила, тем большую требует себе зарплату. Если же вы задумали в одиночку создавать приложение, умеющее работать на разных платформах, то вспомните о том, что время - это тоже деньги. Поэтому морально приготовьтесь к тому, что кросс-платформенность - довольно дорогое удовольствие.

Что ж, пожалуй, закончим пока на этом. Некоторые "подводные камни", возникающие при постановке задачи о создании кросс-платформенного приложения, мы с вами рассмотрели. Конечно, их неизмеримо больше, и существует множество специальных ресурсов и изданий, посвящённых этим вопросам. Надеюсь, мы ещё вернёмся к этой теме на страницах "Компьютерных Вестей".

Вадим СТАНКЕВИЧ

Версия для печатиВерсия для печати

Номер: 

41 за 2006 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Страницы

Аватар пользователя M/R
> Это касается и Python, который,

> конечно, в этом плане намного лучше

> PHP или Perl'a, зато имеет

> своеобразный синтаксис и поэтому

> не очень популярен у программистов.

Зря вы так. Питон -- он как Лукашенко -- или очень нравится, или очень не нравится. Так что незнакомых с ним настоятельно рекомендую попробовать, дабы определиться, к какой группе вы относитесь.

Аватар пользователя Вадим Станкевич
Я пробовал, но остался равнодушен.
Аватар пользователя Инкогнито
>Лукашенко -- или очень нравится, или очень не нравится.

Вы явно не программист. Программер должен мыслить аналитически, как Вадим: плюсы и минусы продукта. А логика "исключающее ИЛИ" - для политиков.

Аватар пользователя Дмитрий Бородаенко
> программы бесплатные или даже вовсе open-source

Ну сколько можно тянуть всюду этот высосанный из пальца английский термин! Свободные программы -- по-русски и сразу понятно о чём речь, почему так сложно усвоить это незамысловатое словосочетание?

Аватар пользователя Вадим Станкевич
Спасибо, Дмитрий. Принято к сведению.

А вообще-то open-source, по-моему, звучит понятнее, чем "свободные программы". Свободные от кого, чего? В компьютерной терминологии и так много иностранных слов. Вы же не пишете вместо OLE "ПИВО" (Подключение И Внедрение Объектов). Есть устоявшиеся обороты.

К тому же, русский язык, в отличие от белорусского, не настолько красив и благозвучен, чтобы освобождать его от иностранных вкраплений.

Аватар пользователя Savely
Вадим, не давай Дмитрию сбить себя.

1. Свободные - FreeWare, т.е. бесплатные.

2. Оpen Source - с открытым исходным кодом.

Это НЕ РАВНО.

2 Дмитрий

> программы бесплатные или даже вовсе open-source

Здесь мне все понятно

> Свободные программы

Здесь - непонятно.

Аватар пользователя Дмитрий Бородаенко
Open-source даже по-английски звучит более чем двусмысленно и порождает массу недоразумений, в русском тексте эта конструкция вообще смотрится как трёхногая корова. Если вы даже в слове "свободный" ищете дополнительные смыслы, что уж говорить о слове "open", на которое словарь WordNet даёт 28 (!) определений?

Open-source, равно как и свободные программы, -- концепции, а не имена собственные, так что сравнение с OLE неуместно.

То, что в компьютерном сленге много английских слов -- ещё не повод добавлять новые заимствования, не задумываясь о последствиях. Я имею в виду не красоту языка, это вопрос вкусов, меня гораздо больше беспокоит ясность понимания и изложения.

С этой точки зрения "open-source" как термин никуда не годится ни по-русски, ни по-английски. По-английски он заставляет думать, что главное -- чтобы можно было посмотреть на исходники, что неверно даже с точки зрения канонического определения этого термина в Open Source Definition. Те, кто английского не понимают, и вовсе воспринимают этот термин как имя собственное, не требующее разумения.

"Свобода от" -- это очень и очень узкое понимание свободы. Перечислять все возможные способы ограничения свободы -- занятие неблагодарное, список постоянно растёт.

Определение свободных программ Free Software Definition говорит о свободе пользователя компьютера вообще, и определяет четыре основные свободы, которые все вместе и обеспечивают пользователю полную свободу действий по отношению к собственному компьютеру. Все четыре основные свободы -- позитивные, они определяют, что пользователь _может_ делать, а не перечисляют, что именно запрещается запрещать.

Таким образом, словосочетание "свободные программы" отражает главную цель движения, а "open-source" -- всего одну из четырёх принципиальных свобод, служащих этой цели. Я конечно понимаю, что в нашей стране слово "свобода" -- опасное, тем более в одном предложении со словом "движение", но всё таки мне кажется, что ещё не поздно работать над тем, чтобы устоялся оборот, отражающий внутреннюю сущность этого феномена, а не слово, выдуманное исключительно для успокоения нервов американских капиталистов.

P.S. Пожалуйста, не обижайтесь на мою резкость -- это не личный наезд, это лишь мой скверный характер ;-) Раз ругаю -- значит, надеюсь, что поймёте.

Аватар пользователя Дмитрий Бородаенко
> 1. Свободные - FreeWare, т.е. бесплатные.

Ну что вы как дети, тянете в рот всё что видите! Зачем следом за английскими терминами тянуть в русский язык путаницу, которой в нём отродясь не было? Во всех известных мне хотя бы по наслышке языках мира "свободный" и "бесплатный" -- разные слова, и только в английском оба понятия обозначаются одним словом "free". И даже в английском есть слово "gratis" для отдельного определения дармовщины.

Freeware -- это бесплатные, к свободным программам (Free Software, оба слова с большой буквы) имеет примерно такое же отношение, как и open-source: обеспечивает только одну свободу из четырёх.

> > Свободные программы

> Здесь - непонятно.

Надеюсь, из моего предыдущего поста стало понятнее. Если совсем коротко -- open-source свободнее, чем freeware (поскольку можно не только пользоваться, но и в исходники смотреть), а free software (свободные программы) -- ещё свободнее, потому как можно не только смотреть, но и трогать, и делиться со всеми своими переделками.

Впрочем, если смотреть не в слово open-source, а в определение Open Source Definition, то заметно, что свободные программы и программы с открытыми исходниками пересекаются процентов на 90 (потому как наличие исходников в большинстве случаев (хотя и не всегда) позволяет обеспечить все остальные свободы). Что имхо есть ещё один повод писать "свободные программы" вместо терминов, устоявшихся в английском исключительно из-за вышеперечисленных причин.

Аватар пользователя Вадим Станкевич
Это всё здорово... Но если я хочу сказать не "свободные программы", а именно "программное обеспечение с открытым исходным кодом"? По-моему, "open-source" читабельнее и короче...
Аватар пользователя Дмитрий Бородаенко
> Но если я хочу сказать не "свободные программы", а именно "программное обеспечение с открытым исходным кодом"?

А зачем? Тоже боитесь напугать капиталистов?

Страницы