1P by GN⁺ | ★ favorite | 댓글 1개
  • PumpkinOS는 x86, ARM 등 현대 아키텍처에서 실행되는 PalmOS 재구현체이며, PalmOS ROM 없이 m68K PalmOS 애플리케이션을 실행할 수 있음
  • 기본 실행 앱은 Launcher이며, Preferences는 설정 옵션을 담을 예정이고 Command는 아직 실험적인 명령 셸로 제공됨
  • 이번 릴리스에는 PalmOS의 PIM 앱 4종인 AddressBook, MemoPad, ToDoList, DateBook이 포함되며, PalmOS SDK에 배포됐던 소스 코드를 PumpkinOS에서 컴파일되도록 수정함
  • AddressBook과 MemoPad의 레코드는 PalmOS 대응 앱과 호환될 것으로 보이나, word size와 endianness 차이 때문에 ToDoList와 DateBook 레코드는 호환되지 않음
  • 전체 프로젝트는 아직 실험 단계이며, 일부 기능은 전혀 테스트되지 않았고 Emscripten 빌드도 소프트웨어 렌더링, 높은 CPU 사용량, 브라우저 잠김 같은 문제가 있을 수 있음

PumpkinOS의 목표와 범위

  • PumpkinOS는 PalmOS를 현대 아키텍처에서 다시 구현한 프로젝트임
    • 대상 아키텍처는 x86, ARM 등임
    • 일반적인 PalmOS 에뮬레이터와 달리 PalmOS ROM이 필요 없음
    • m68K PalmOS 애플리케이션을 실행할 수 있음
  • PumpkinOS의 여러 측면을 다룬 글 모음은 WordPress PalmOS 카테고리에서 볼 수 있음

기본 애플리케이션과 현재 상태

  • Launcher는 PumpkinOS가 시작될 때 처음 실행되는 앱임
    • 다른 애플리케이션을 시작할 수 있는 패널을 보여줌
  • Preferences는 장기적으로 PumpkinOS 설정 옵션을 담을 예정임
  • Command는 명령 셸이며 아직 실험적임

포함된 PalmOS PIM 앱

  • 이번 릴리스에는 PalmOS의 PIM 앱 4종이 포함됨
    • AddressBook
    • MemoPad
    • ToDoList
    • DateBook
  • 이 앱들의 소스 코드는 하나 이상의 PalmOS SDK에 배포됐던 것이며, PumpkinOS에서 올바르게 컴파일되도록 수정됨
  • 레코드 호환성은 앱별로 다름
    • AddressBook과 MemoPad에서 만든 레코드는 PalmOS 대응 앱과 호환될 것으로 보임
    • ToDoList와 DateBook에서 만든 레코드는 word size와 endianness 차이 때문에 호환되지 않음
  • 테스트 범위는 제한적임
    • 몇 개의 레코드를 만들고 편집할 수 있는 수준까지만 테스트됨
    • 아직 일부 동작 이상이 있음
    • 일부 기능은 전혀 테스트되지 않음
  • 현재 목표는 PumpkinOS의 향후 모습을 미리 보여주는 데 있음

라이선스

  • PumpkinOS는 GPL v3로 라이선스됨
  • license 디렉터리에는 PumpkinOS에서 사용하는 여러 구성 요소의 개별 라이선스 정보가 들어 있음
  • 누락되었거나 잘못된 라이선스 정보가 있으면 알려 달라고 안내함

빌드 방법

  • PumpkinOS는 소스에서 빌드해야 함
    • IDE는 필요 없음
    • 명령줄에서 빌드할 수 있음
  • Windows, Linux, WSL2

    • 64비트 Windows에서는 MSYS2를 사용할 수 있음
    • MINGW64 터미널에서 추가 패키지를 설치함
    pacman -S gcc binutils make git
    
    • 64비트 Linux 기반 OS에서는 gcc, binutils, make, git이 필요함
    • Linux에서는 SDL2 개발 패키지도 설치해야 함
    • Debian 계열에서는 다음 명령을 사용함
    sudo apt install gcc binutils make git libsdl2-dev
    
    • Windows 11과 최신 Windows 10에서는 WSL2에서도 빌드할 수 있음
    • WSL2 터미널에서 Linux 빌드 지침을 따르면 됨
  • 공통 빌드 절차

    • 저장소를 클론함
    git clone https://github.com/migueletto/PumpkinOS.git
    
    • 소스 디렉터리로 이동해 make를 실행함
    cd PumpkinOS/src
    make
    
    • 빌드가 성공하면 다음 결과물이 생성됨
    • 루트 디렉터리의 pumpkin 실행 파일
    • bin 디렉터리의 동적 라이브러리들
    • vfs/app_install 디렉터리의 PRC 파일들

Emscripten 빌드와 웹 실행

  • 실험적으로 Emscripten을 사용해 빌드할 수 있음
    • Emscripten 설치 방법은 README 범위 밖임
cd PumpkinOS/src
make OSNAME=Emscripten
  • 이 명령은 src/emscripten 폴더 안에 pumpkin.zip을 생성함
    • 이 zip 파일에는 웹 서버에 PumpkinOS를 배포하는 데 필요한 파일이 들어 있음
  • Linux의 표준 apache2 웹 서버를 사용하는 경우 예시 절차는 다음과 같음
    • /var/www/html/pumpkin 폴더를 만듦
    • zip 파일을 해당 폴더에 풀어 넣음
    • 로컬 서버에서 /pumpkin/pumpkin.html로 브라우저를 열면 PumpkinOS가 표시될 수 있음
  • Emscripten 소스 디렉터리에서 Python 웹 서버를 실행하는 방법도 있음
cd PumpkinOS/src/emscripten
python3 -m http.server 8080
  • 이 빌드는 아직 매우 실험적이며 몇 가지 제약이 있음
    • OS, 브라우저, GPU 통합 상태에 따라 소프트웨어 렌더링으로 예기치 않게 fallback될 수 있음
    • 높은 CPU 사용량과 브라우저 잠김이 발생할 수 있음
    • 브라우저를 private mode로 실행하면 애플리케이션이 실행되지 않음
    • localhost가 아닌 서버에서 HTTPS 대신 HTTP로 접근하면 로드되지 않음

실행, 설치, 디버깅

  • 64비트 Windows에서는 pumpkin.bat을 실행함
  • Linux 또는 WSL2에서는 pumpkin.sh를 실행함
  • 실행하면 PumpkinOS가 새 창으로 열림
  • 실행 시 vfs/app_install 안의 모든 PRC가 제거되고 vfs/app_storage 안의 폴더로 확장됨
  • 현재 단계는 전반적으로 실험적이므로 여러 문제가 있을 수 있음
  • 실행 성공 여부와 관계없이 루트 디렉터리에 pumpkin.log 파일이 생성됨
    • 문제가 생기면 이 파일의 세 번째 열에 "E"로 표시된 줄을 확인함
    • 질문과 로그 파일 전달을 받을 수 있다고 안내함
  • PumpkinOS는 Drag & Drop을 지원함
    • PalmOS PRC 파일을 창 위로 끌어다 놓으면 설치되고 Launcher에 표시됨
    • PRC를 vfs/app_install 디렉터리에 직접 복사한 뒤 PumpkinOS를 다시 시작해도 됨
  • 원하는 경우 Windows, Linux, WSL2에서 gdb로 디버깅할 수 있음
    • Windows에서는 pumpkin.bat 마지막 줄을 다음처럼 바꿈
gdb.exe --args .\pumpkin.exe -d 1 -f pumpkin.log -s libscriptlua .\script\pumpkin.lua
  • Linux와 WSL2에서는 pumpkin.sh 마지막 줄을 다음처럼 바꿈
gdb --args ./pumpkin -d 1 -f pumpkin.log -s libscriptlua ./script/pumpkin.lua

댓글과 토론

Hacker News 의견들
  • Mountain View의 Computer History Museum에 갔다가 전시 케이스 안의 Palm Pilot을 보고 나이 든 느낌이 확 왔음
    겨우 30년 전쯤 내 삶의 중요한 일부였던 물건을 고대 문명 유적에서 발굴한 것처럼 전시하는 건 불법이어야 함. 너무 불공평함

    • 아직도 다락방 상자에 원래 쓰던 PalmPilot이 있음. 그 존재 자체가 큰 인생 교훈이었음
      당시 상사에게 사달라고 했고 실제로 사줬는데, 상사가 “지금 네 삶과 프로젝트를 정리하는 데 뭔가 쓰고 있나? 안 쓰고 있다면 PalmPilot도 도움이 안 될 것 같다”고 했음
      정말 맞는 말이었음
    • 몇 달 전 Reddit에서 누군가 할아버지의 낡은 Game Boy를 찾았다는 글을 봤음
    • Computer History Museum에는 Dreamcast도 전시돼 있는데, 그게 훨씬 더 거슬렸음
      십대 시절 Dreamcast가 크게 부활하길 아직도 기다리는, 해결되지 않은 트라우마 같은 뇌 한구석이 남아 있음
    • London의 Science Museum에는 휴대폰, 컴퓨터, 콘솔을 모아둔 전시실이 있음
      파트너와 함께 그동안 우리가 소유했던 기기들을 하나씩 가리키는 재미가 크고, 다시 보는 게 정말 즐거움
    • 아직도 VisorPhone 모듈이 달린 Visor를 갖고 있음. iPhone보다 5년 앞선 최초의 터치 전용 스마트폰이라고 볼 수 있음 :)
      크고 투박하고 꽤 비실용적이었지만, Palm Desktop과 완전히 통합되는 경험은 아주 매끄러웠음. 나중에는 Linux에서 jPilot을 썼음
  • PumpkinOS 프로젝트는 정말 대단함. 보통 Palm 앱이 기대하는 모든 시스템 호출과 호환되게 만들려면 얼마나 많은 노력이 필요했을지 상상이 안 됨
    Palm은 메모리 처리에서 꽤 이상한 일을 했던 기억이 남. 조금만 큰 데이터는 운영체제가 마음대로 재배치할 수 있는 특수 메모리 블록에 넣어야 했고, 접근하는 동안 안정적으로 유지하려면 그 블록의 핸들을 잠가야 했음
    그런 것들을 PumpkinOS에 구현하는 건 어렵고도 재미있었을 것 같음. 예전에 Palm OS용 작은 게임들을 만들었고, 당시 새로 나온 Palm OS Development Suite로 프로그램을 만들 수 있게 해줄 다음 OS 버전을 정말 기대했음
    앱에 중앙 이벤트 루프가 있던 마지막 OS이기도 했음. 요즘은 UI 프레임워크가 전부 대신 처리해 줌. 지금이 더 쉽긴 하지만 그래도 그 방식이 그립다

    • Win32 API를 직접 쓰면 Windows도 여전히 그런 방식임
      지금까지 만들어진 모든 GUI 툴킷은 결국 그런 구조지만, 현대적인 대부분의 툴킷에서는 이 큐와 루프가 내부에 숨어 있어서 디버거 스택을 보거나 뭔가 충돌할 때나 존재를 짐작할 수 있음
    • 그런 방식은 16비트 Windows나 classic Mac OS도 비슷하지 않았나 싶음
      MMU가 없는 시스템에서 멀티태스킹을 하려면, 실행 중인 힙 조각 모음을 거의 필수로 해야 했을 것 같음
    • 현대 하드웨어에는 기가바이트 단위 RAM이 있으니 그런 구현은 Palm Pilot III의 2MB와 비교하면 아주 쉬움
      그냥 malloc을 쓰고, 메모리는 옮기지 않으며, 그런 블록의 잠금과 해제를 아무 일도 안 하는 동작으로 만들면 됨
      잠금 상태를 확인하는 OS 호출이 있다면 어딘가에 저장해야겠지만 그것도 어렵지 않음. 당시 방식 그대로 구현하는 것도 어렵다기보다는, 사용하는 쪽을 복잡하게 만들 뿐임
    • 현대 하드웨어의 장점은 메모리에 크게 제약받지 않는다는 것임
      원하는 만큼 큰 메모리 덩어리로 복잡한 API를 구현할 수 있고, 128MB RAM 같은 용량은 지금 기준으로는 아주 작음
    • Palm 게임들을 정말 좋아했음. 그때의 모바일 게임이 최고였고, 현대 게임은 전혀 비교가 안 됨
  • 함께 볼 만한 프로젝트로 rePalm도 있음. RP2040 같은 ARM 마이크로컨트롤러에서 PalmOS를 실행하는 프로젝트임: http://dmitry.gr/?r=05.Projects&proj=27.%20rePalm

  • Space Trader 하느라 몇 시간 날릴 생각에 벌써 기대됨
    중학교 때 Palm Vx가 있었고, 수업 시간에 책상 밑에서 그 게임을 하던 좋은 기억이 있음

    • Peter Spronck와 함께 일하면서 Space Trader의 마지막 추가 콘텐츠와 몇몇 퀘스트를 만들었음. 예를 들면 The Scarab 같은 것들임
      그 시절이 그립다
    • 차고에 Palm Vx가 두 대 있음. 그 게임 나도 정말 좋아함
  • 이 제목을 읽고 심장이 빨리 뛰었음. Android에서 돌아가게 만들어서 주력 폰을 “대체”하고 더 좋았던 시절로 돌아가고 싶음

    • 아직도 Palm의 캘린더와 연락처 앱이 그리움
      Centro까지 Palm을 계속 썼고, 그 뒤로 Palm 버전만큼 마음에 드는 연락처/캘린더 앱을 찾지 못했음. 단순하고 기본적인 기능이 빠져 있거나, UI가 쓸데없이 복잡함
    • 전체를 Wasm으로 돌리면 Palm 앱을 어디서나 실행할 수 있음
      사람들이 진지하게 웹페이지 안에서 DOS 앱을 돌리는 것과 비슷한 일이 될 것임
    • Graffiti를 쓸 수 있음
      https://play.google.com/store/apps/details?id=com.access_com...
    • SDL을 쓰니 이식은 쉬울 것 같음
  • 예전에 Palm이 결국 iPhone 같은 물건을 만들 거라고 생각하고 투자했었음
    아쉽게도 Palm은 그러지 못했고, Apple이 해냈을 때 Palm은 끝났음

    • Palm에는 Treo 라인이 있었음
      결국 Palm을 무너뜨린 건 초기 성공과 거대한 셰어웨어/프리웨어 도구 생태계였다고도 볼 수 있음
      Palm OS는 단일 스레드, RAM 상주, 가상 메모리 없는 OS로 나이가 드러나고 있었기 때문에 뭔가 새로 시도해야 했지만, 그러면 기존 소프트웨어 라이브러리를 쓰던 오래된 팬들을 소외시킬 수밖에 없었음
      그 닭과 달걀 문제를 끝내 해결하지 못했고, OS와 하드웨어 분리, Handspring 같은 분사, 재합병도 도움이 안 됨. Cobalt OS는 실제 기기에 탑재되지 못했고, Pre는 야심 찬 새 출발이었지만 더 일찍 나왔더라도 iPhone과 싸우기 어려웠을 것임
    • 큰 문제 중 하나는 Palm이 소프트웨어 회사인 PalmSource와 하드웨어 회사인 Palm One으로 쪼개진 일이었음
      PalmSource는 Linux 기반 OS를 설계하다가 인수되고 사라졌고, Palm One은 다시 Palm으로 이름을 바꾼 뒤 PalmOS 기반 초기 스마트폰을 만들었음
      하지만 그때 PalmOS는 이미 꽤 낡았고, 32비트 OS 위에서 16비트 앱을 돌리는 상태였음
      이후 Palm은 webOS를 만들었지만, 이상한 하드웨어 결정을 했고 iPhone 및 Android와 경쟁하지 못함. 그래도 정전식 화면 전환에 실패한 Blackberry나 Nokia보다는 경쟁자가 될 수 있었음
      Palm의 문제는 너무 늦었다는 데 있었지만, 분리되지 않고 PalmOS 후속작을 만들었다면 정전식 스마트폰의 흐름은 놓쳤을 것 같음
    • 통신사 책임도 일부 있었다고 들었음. 통신사들은 초기에 Handspring이 Treo로 할 수 있는 일에 제한을 두지 않으면 Treo 라인을 취급하는 것조차 꺼렸음
      Apple에는 iPod이 있었고, 더 중요하게는 고객이 있었음. Apple은 이 고객들을 통신사에 데려갈 수 있었기 때문에 더 많은 것을 지시할 수 있었음
      https://www.youtube.com/watch?v=b9_Vh9h3Ohw에서 내가 말하는 부분은 약 20분 지점임
    • Handspring/Palm 스마트폰 라인을 전부 썼음: Visor + Visor Phone, Treo 270, Treo 600, Treo 650, 마지막으로 Palm Pré까지
      iPhone은 아니었지만, 업무 도구로는 극도로 효율적이었음
    • 여기서 GPL 라이선스를 보고 웃음이 났음. 상업화 위험이 있다고 보기는 어렵지 않나 싶음
  • 이걸 현대 폰 하드웨어, 아니면 한 세대 전 폰 하드웨어에 올리려면 무엇이 필요할까?
    엄청난 단순함과 말도 안 되는 배터리 수명으로 우리가 원하는 대부분을 할 수 있을 것 같음. 아마 PinePhone도 Rolls Royce처럼 느껴지게 만들 수 있을 듯함

    • README에 따르면 ARM에서 네이티브로 실행되지만, OS라기보다는 프로그램에 더 가까워 보임
      GUI 코드를 각 플랫폼 프레임워크로 다시 쓰면 Android나 iOS에서 돌아가게 업데이트할 수 있을 것 같지만, 부팅 가능한 OS로 만드는 건 더 어려워 보임
      작성자가 작년에 최소한의 x86 커널과 QEMU를 사용해 부팅 가능한 OS로 만드는 글을 썼으니, ARM 기기용으로도 재활용할 수 있을 것 같음 [1]
      https://pmig96.wordpress.com/2023/02/24/pumpkinos-busybox-an...
    • 현대 모바일 운영체제에는 최적화와 안정화 노력이 더 많이 들어가면 좋겠음
  • 함께 볼 만한 것으로 브라우저 안에서 돌아가는 Palm 에뮬레이터 CloudpilotEmu가 있음
    https://cloudpilot-emu.github.io/
    설치해서 Vexed를 다시 플레이할 수 있었을 때 정말 행복했음

    • Cloudpilot은 놀라움. 내가 아는 것 중 가장 정교한 PWA 중 하나임
      Vexed는 들어보지 못했지만, 내 경우 Space Trader가 돌아온 게 정말 기뻤음
  • Palm 폰 시대가 시작될 때부터 Sprint 고객이었음
    2년 전까지도 컬러 Treo를 전화기로 썼고, 그 물리 키보드가 정말 쓰기 좋았음. 손가락이 약간 변형돼 있어서 터치스크린이 어렵기 때문임
    T-Mobile과의 합병으로 무선 통신 부분이 막혔고, 사라지는 게 너무 아쉬움

    • 예전에 같이 일했던 사람 같음
      iPhone이 나온 지 6개월쯤 지나고 Android 폰도 등장했을 때, Pre가 “iPhone 킬러”라고 했었음
      부서의 첫 iPhone 사용자에게 Pre가 비교해서 별로 대단하지 않은 기능들을 보여준 뒤, Palm의 수백만 사용자가 나를 보여줄 거라고 했음
      실제로 제대로 보여줬음
  • 이 프로젝트가 존재해서 다시는 실행될 기회가 없었을 소프트웨어들의 수명을 연장해 주는 건 좋음
    하지만 이건 향수 때문인지, 아니면 그 소프트웨어에 대한 실제 필요나 욕구 때문인지 궁금함
    Palm, Blackberry, Psion을 그리워하는 이야기는 많지만, 특수한 용도 밖에서도 정말 예전으로 돌아가고 싶은 걸까? IMAX가 스택 일부를 돌리기 위해 Palm 에뮬레이터가 필요하다는 건 알고 있음
    “현대적인” Psion 5를 찾아보다가, 관련 팀 일부가 Android 기반의 Gemini PDA를 만든 걸 봤음. 일부 리뷰어는 이 점을 확실히 단점으로 봄
    현대 연결성을 지원하는 새 EPOC 운영체제가 있다면 이들에게는 확실한 성공처럼 보이지만, 막상 생각해 보니 나는 그 위에서 주로 Linux를 돌릴 것 같았음. 영국 키보드가 달린 새 제품을 재고로 찾을 수 있다면 말임
    그런데 우리가 정말 그걸 원하는 걸까? 지난 20년 넘게 많은 발전이 있었고, 대부분의 사람에게 일상용으로 Android나 iOS 대신 PalmOS를 주면 일주일 안에 답답해서 돌려줄 것 같음
    이 판단을 틀리게 만드는 결정적 기능은 무엇일까?

    • 몇 주씩 가는 배터리 수명, 더 단순한 앱 설계, 페이지 위/아래 버튼이 그리움