Хабрахабр

Автор проекта rePalm переписал Palm OS с нуля и планирует превратить её в платформу для смарт-часов

И, видимо, часы на Palm OS найдут своего покупателя:

image

Она очень простая и не требовательная к ресурсам, бережно расходует заряд аккумулятора и замечательно спроектирована для использования в карманных компьютерах. Palm OS — операционная система для карманных компьютеров, бывшая на пике популярности с 1998 года по первую половину 2000-х. Но в 2004–2005 годах устройства на Palm OS уступили место устройствам на Windows Mobile:

image
(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 в избытке.

Поэтому по прошествии стольких лет сохранилось сообщество фанатов этой системы, которое поддерживает сайты с приложениями, ведёт собственный сабреддит и продолжает пользоваться палмами.

image

Но один из участников сообщества пошёл дальше, решив перенести Palm OS на более современное железо и найти этому проекту полезное применение.

Дмитрий Гринберг, программист из Google, с 2003 года создавал твики и хаки для устройств на Palm OS, среди которых WarpSpeed — программа для “разгона” КПК, и PowerSDHC — драйвер для карт памяти SDHC.

В том числе, он принимал участие в разработке операционной системы для смарт-часов Android Wear, медиаплеера Nexus Q и платформы Android TV. В Google Дмитрий занимался, в основном, встраиваемыми системами.

Уволившись из Google, Дмитрий решил создать платформу для смарт-часов на основе Palm OS 5.x, операционной системы, которая последний раз обновлялась 15 лет назад:

image

На первый взгляд, план отличный: вряд ли современные платформы для смарт-часов сравнятся с 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
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.

image
(с) Dmitry Grinberg

Но стоит помнить, что Дмитрий — в первую очередь инженер и программист. Приятно следить за работой увлечённого человека и наблюдать, как развивается интересный и амбициозный проект. Я уверен, что проекту найдётся множество интересных применений, но что будет дальше, и увидим ли мы современную версию Fossil WristPDA— сказать сложно. Для него решение инженерной задачи (приведение Palm OS в соответствие с современным миром) стоит выше, чем создание коммерческого продукта, будь то смарт часы или что-то ещё. Остаётся пожелать Дмитрию удачи и следить за развитием rePalm.

image
(с) Dmitry Grinberg

S. P. О таких крутых проектах должно знать больше людей! Спасибо Newbilius за мысль перепостить эту статью сюда из блога.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»