From Novosibirsk, Russia? Our tiny company is looking for current or future rock-star developers.

February 04, 2009

Совместимость

Название этой операционной системы, созданной маленькой компанией в конце 80-х и установленной сегодня на 8% компьютеров мира, программисты под Mac и iPhone регулярно вспоминают, набирая префикс NS у названий системных классов.

Nextstep 1.0 появилась в 1989 году после трех лет разработки, имела полностью объектно-ориентированное API с архитектурой model-view-controller, имела ядро Mach и была Unix’ом. Теперь она называется Mac OS X. За прошедшие 20 лет дизайн её API, теперь именующимся Cocoa, мало изменился: всё те же NSApplication, NSView, NSDocument успешно лежат в основе сегодняшних красивых анимированных Mac-приложений. Исходники GNUstep, реализующего Nextstep API 1993 года, можно в наши дни читать вместо (недоступных) исходников Cocoa.

Пользовательский интерфейс Nextstep включал богатый drag’n’drop между приложениями, Dock, инспекторы, общесистемные сервисы, позволяющие приложениям пользоваться услугами друг друга, и «бандлы» — директории, выглядящие как файлы для пользователя и содержащие приложение со всеми зависимостями, которое достаточно просто скопировать на жесткий диск для установки. Всё это знают и любят сегодняшие пользователи маков.

Как относятся в Apple к совместимости? Плохо. Первую революцию они сделали в 2001 году с выходом Mac OS X: старые приложения теперь могли запускаться только в приложенной виртуальной машине, эмулирующей Mac OS 9 (при этом, естественно, выглядели неприглядно и медленно работали). В 2005 году эмулятор почил с выходом OS X 10.4 (итого: 4 года на портирование старых приложений).

Для портирования людям был дан Carbon — C API, почти повторяющее API старой Mac OS 9. Carbon-приложения всегда оставались нежеланными гостями на компьютере: look’n’feel интерфейса OS X, как истинно объектно-ориентированной ОС, реализован в коде Cocoa (да, там можно изменить поведение стандартных элементов управления, просто унаследовавшись от них). Carbon представлял собой еще одну реализацию примерно того же самого интерфейса.

Вторую революцию Apple сделала в 2007 году: Carbon объявлен устаревшим и не будет поддерживать 64-битные приложения. Кадр года: Adobe переписывает Photoshop на Objective C. Называется, а вам слабо такое устроить?

Что приобретено взамен совместимости? Общий уровень приложений платформы: они все обновляются и соответствуют современным стандартам. Это работает по спирали: от более высокого качества приложений увеличиваются ожидания пользователей («никто не запустит программу без большой красивой иконки»), от высокого уровня ожиданий растет качество приложений. Apple создала платформу, в которой качество является более значимым (по сравнению с другими платформами) конкурентным преимуществом, и от этого создатели приложений больше инвестируют в качество.

Вернемся к Nextstep и заметим, что Cocoa является примером архитектуры, которая работает настолько хорошо, что её не нужно менять. Совместимость — не препятствие, так что эксперимент довольно чистый.

Зато NeXT/Apple серьезно относятся к преемственности навыков пользователя. Метафора пользовательского интерфейса Nextstep/OS X не меняется уже 20 лет. Внешний вид окон OS X не меняется 8 лет. Интерфейс приложений развивается эволюционно; Photoshop переписали, но выглядит и работает он так же; вышла новая версия iWork, но она только местами отличается от старой.

Что происходило всё это время в параллельном мире? 1989 год — релиз Nextstep 1.0 — вышла Windows 2.0 без перекрывающихся окон. 1995 год — вышла Windows 95, прощай, все старые навыки. 2001 год — вышла Window XP, теперь вы не узнаете свою панель управления. 2002 год — Microsoft выпускает .NET Framework 1.0, Desktop-приложения на котором до сих пор никто не пишет. Кстати, писать Desktop-приложения вообще не на чем: MFC — поганое уродство, всё остальное до жути низкоуровневое (Win32 API отличается от Cocoa как ассемблер от Питона).

2007 год — вышла Windows Vista, прощайте, привычки, теперь всё в новом месте. Зато спиздили еще чуть-чуть гуйни мака, сделали мигающий экраном костыль для безопасности приложений (на маке privilege elevation в приложениях к этому моменту уже много лет как нормально ненавязчиво работало). Вышел Office 2007, его нужно изучать заново. 2009 год — Microsoft в Windows 7 меняет Taskbar на Dock и хвалится этим достижением в блоге. Кстати, Office 2007 Ribbon Bar будет доступна всем приложениям, теперь вам придется заново изучать не только офис.

Зато вы всё еще можете запускать DOS-приложения на Windows Vista. Реймонд Чен в своём блоге высоко воспевает культуру совместимости в Microsoft. Но стоит ли она выпуска инвалидских продуктов? Всё дело в крупно-корпоративном рынке, которому его старые приложения ценнее качества ОС. Возможно, во времена Windows 95 совместимость была необходима и для пользователей: графические интерфейсы стали массовыми именно после Windows 95, и имей она проблемы, этого могло просто не произойти.

Мораль раз: знайте, когда устранять совместимость, иначе она помешает конечному пользователю.

Мораль два: нет так быстро всё меняется в ай-ти; команды под руководством великих людей создают технологии, живущие десятилетиями.

Мораль три: культура качества — ценнейшая штука для любой платформы; без неё корпорации не способны выпускать хорошие продукты, даже если на рынке есть образцы для подражания.

5 comments:

Anonymous said...

Проблема в том, что большинству людей нахер не нужна операционка, им нужны приложения. Помнишь, сколько было недовольства, когда какие-нибудь шашечки переставали работать в Висте?

Пользователи Apple буду обновляться все равно, ибо для них ценна принадлежность к субкультуре. С вендой такая штука не пройдет.

То есть отношения к совместимости - это не следствия разных "культур качества", это следствие разных целевых аудиторий.

Kashnikov Yuri said...

«Apple создала платформу, в которой качество является более значимым (по сравнению с другими платформами) конкурентным преимуществом, и от этого создатели приложений больше инвестируют в качество.»
Некоторые приложения работают стабильнее в GNU/Linux и в Microsoft Windows (например, Mozilla Firefox).

«Microsoft выпускает .NET Framework 1.0, Desktop-приложения на котором до сих пор никто не пишет.»
Tomboy, Banshee, F-Spot используют очень много пользователей GNU/Linux. Впрочем, других я назвать не могу, но и на Java я не могу назвать ни одного popular desktop application кроме IntelliJ Idea и Eclipse. Так что отсутствие desktop приложений для .NET и Java, возможно, лежит в несколько другой плоскости, нежели Вам кажется.

2Maxim Ananyev: Для меня не было интереса в субкультуре при покупке ноутбука. Но тем не менее Apple производит вполне неплохой ноутбук и на нем стоит вполне рабочая операционная система. Хотя в последнее время я и подумываю над тем чтобы поставить туда GNU/Linux, ибо есть места которые меня не устраивают в Mac OS X, и я устал уже собирать и допиливать нормальное программное обеспечение под Mac OS X (например, clisp, gcc, ghc, emacs). Хотя многие приложения через систему портов вполне успешно используются.

Anonymous said...

Привет. Зашел случайно во ВКонтакде и увидел напоминатель о твоём ДР. Прими мои поздравления :)

prokoudine said...

...но и на Java я не могу назвать ни одного popular desktop application кроме IntelliJ Idea и Eclipse.

FreeMind

Unknown said...

Ребята, расслабтесь, речь шла про массовость. Ни на Java, ни на .NET никто desktop-приложения не пишет. Конечно, можно насчитать отдельные экземпляры.

Наверняка даже на Visual SmallTalk'е есть отдельные desktop-приложения, но, тем не менее, можно сказать, что на нём в нашем мире уже давно никто ничего не пишет.

“Некоторые приложения работают стабильнее в GNU/Linux и в Microsoft Windows (например, Mozilla Firefox).” — опять же, речь идет про массовое явление; такое угребище, как Firefox, под маком вообще для лазанья по инету никто не юзает и юзать не будут (вот для веб-разработки, напротив, юзают часто из-за Firebug'а).

Отсутствие desktop-приложений на .NET лежит именно в той плоскости, в какой мне кажется: хуй напишешь шаровару, если к ней нужно прикладывать и заставлять пользователя ставить .NET Framework. Конечно, когда все перейдут на Windows 7 (ибо на висту все не перейдут никогда) и .NET Framework гарантированно будет у всех, рынок сразу вырастет.

Ровно та же проблема и с Java, правда, её можно embed'ить внутрь приложения, так что более крупные тулзы этим успешно пользуются (например, почти все UML-редакторы).