И, видимо, часы на Palm OS найдут своего покупателя:
Palm OS — операционная система для карманных компьютеров, бывшая на пике популярности с 1998 года по первую половину 2000-х. Она очень простая и не требовательная к ресурсам, бережно расходует заряд аккумулятора и замечательно спроектирована для использования в карманных компьютерах. Но в 2004–2005 годах устройства на Palm OS уступили место устройствам на Windows Mobile:
Это произошло по разным причинам, частично — из за ошибок менеджмента, отчасти — из за особенностей самой операционной системы: в 2004 году Palm OS тащила за собой длинный хвост обратной совместимости, который мешал ей развиваться и двигаться вперёд. Чего стоило, например, отсутствие защиты памяти: ошибка в приложении могла привести к зависанию или падению операционной системы целиком, как во времена Windows 9x или Mac OS 9. Или реализация файловой системы: файлы хранились в виде записей в базе данных, и размер одной записи не мог превышать 64 килобайта. Наверное, в 1996 году это было неплохим решением, но такая система хранения данных оказалась не приспособленной под большие мультимедиа файлы и карты памяти, появившиеся позднее.
Ну и нельзя обойти стороной смену архитектуры в Palm OS 5.0 с Motorola 68k на ARM. Тогда для совместимости со старыми приложениями в операционную систему добавили бинарный транслятор, который на лету перекодировал инструкции из M68k в ARM. В принципе, даже с такой прослойкой старые приложения работали на новых процессорах не хуже, чем на родных 68K, поскольку cистемные вызовы Palm OS выполнялись нативно на ARM, а потерю производительности от трансляции нивелировала возросшая в несколько раз частота новых процессоров по сравнению с Motorola Dragonball. Настоящая проблема была в том, что разработчики не получили инструментов для создания нативных ARM приложений. Код для Palm OS 5 по-прежнему компилировался под 68k, и даже стандартные приложения работали через прослойку транслятора.
Тем не менее, несмотря на множество архитектурных особенностей Palm OS, её сильные стороны не перестали быть сильными. Это по-прежнему простая, низкоуровневая, нетребовательная к ресурсам система. В 2015 году я пользовался Palm Pilot с процессором на 16 МГц как ежедневником, и мне было совершенно комфортно! Более того, многие любили эту систему именно за простоту, и многим было достаточно базовых приложений. Читалки, плееры, ежедневники и планировщики, игры — всё это существует под Palm OS в избытке. Найти применение этой операционной системе можно и сегодня.
Поэтому по прошествии стольких лет сохранилось сообщество фанатов этой системы, которое поддерживает сайты с приложениями, ведёт собственный сабреддит и продолжает пользоваться палмами.
Но один из участников сообщества пошёл дальше, решив перенести Palm OS на более современное железо и найти этому проекту полезное применение.
Дмитрий Гринберг, программист из Google, с 2003 года создавал твики и хаки для устройств на Palm OS, среди которых WarpSpeed — программа для “разгона” КПК, и PowerSDHC — драйвер для карт памяти SDHC.
В Google Дмитрий занимался, в основном, встраиваемыми системами. В том числе, он принимал участие в разработке операционной системы для смарт-часов Android Wear, медиаплеера Nexus Q и платформы Android TV.
Уволившись из Google, Дмитрий решил создать платформу для смарт-часов на основе Palm OS 5.x, операционной системы, которая последний раз обновлялась 15 лет назад:
На первый взгляд, план отличный: вряд ли современные платформы для смарт-часов сравнятся с Palm OS по потреблению ресурсов и по времени автономной работы.
Проблема в том, что исходные коды Palm OS никогда не были опубликованы. Да, некоторые кусочки исходников появлялись в открытом доступе в учебниках по разработке приложений, но этого недостаточно. Исходники были у компании PalmSource и у лицензиатов, главным образом, компаний, которые выпускали свои устройства на Palm OS — на условиях NDA, конечно же. Поэтому найти исходный код этой операционной системы спустя столько лет не представляется возможным, да и законность его использования будет под вопросом.
Остаётся сложный и тернистый путь для самых хардкорных энтузиастов с железобетонной силой воли: реверс-инжиниринг. Именно этот путь и выбрал Дмитрий, постепенно, в несколько этапов реализовав задуманное.
Для начала следовало написать инструмент для распаковки ROM образов Palm OS устройств. Затем следовало дизассемблировать основные компоненты операционной системы, полученные из распакованного образа. Затем — самая долгая и монотонная работа — следовало разобраться в логике работы функций системного API и написать собственные реализации этих функций. И, самое сложное — написать ядро операционной системы, поскольку уже существующие (например, linux) не поддерживают некоторые функции ядра Palm OS (приостановка потоков, включение-выключение вытесняющей многозадачности).
Прочитать полную историю переписывания Palm OS с нуля можно в блоге Дмитрия, я лишь вкратце перескажу реализацию основных этапов. Несколько месяцев у Дмитрия ушло на реализацию системных API, которых было бы достаточно для загрузки ОС. Ещё несколько недель — на реверс-инжинеринг графической подсистемы, и два месяца — на написание кода для поддержки рисования. К этому моменту реализованной функциональности было достаточно, чтобы запустить операционную систему поверх ядра linux в QEMU, и загрузить в этом окружении образ какого-нибудь Palm OS устройства.
rePalm’s FIRST boot (с) Dmitry Grinberg
Чтобы перейти от эмулятора к реальному железу, потребовалось решить ещё немало задач: выбрать хорошо документированную и стабильно работающую аппаратную платформу, написать ядро ОС под выбранную архитектуру, написать транслятор ARM в Thumb (выбранный Дмитрием процессор Cortex-M4 поддерживает только двухбайтные Thumb инструкции, в то время как многие компоненты Palm OS используют полноценные 4-байтные инструкции ARM), и написать JIT компилятор (!!!), чтобы двойная трансляция M68k -> ARM -> Thumb работала с адекватной скоростью.
Спустя год активной разработки, rePalm запускается на отладочной плате STM32F429, работает графика, тачскрин и SD-карта, работает синхронизация через HotSync, а так же замечательно работает большинство приложений и игр, написанных под Palm OS 5.x. В планах — поддержка Wi-Fi и Bluetooth, поддержка звука и подключения устройства по USB в режиме запоминающего устройства, и актуализация библиотеки SSL. Дмитрий дополняет свой пост в блоге по мере разработки, а так же регулярно постит обновления проекта в сабреддит r/Palm.
(с) Dmitry Grinberg
Приятно следить за работой увлечённого человека и наблюдать, как развивается интересный и амбициозный проект. Но стоит помнить, что Дмитрий — в первую очередь инженер и программист. Для него решение инженерной задачи (приведение Palm OS в соответствие с современным миром) стоит выше, чем создание коммерческого продукта, будь то смарт часы или что-то ещё. Я уверен, что проекту найдётся множество интересных применений, но что будет дальше, и увидим ли мы современную версию Fossil WristPDA— сказать сложно. Остаётся пожелать Дмитрию удачи и следить за развитием rePalm.
(с) Dmitry Grinberg
P.S. Спасибо Newbilius за мысль перепостить эту статью сюда из блога. О таких крутых проектах должно знать больше людей!