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