Upgrade to Pro — share decks privately, control downloads, hide ads and more …

限界環境CPython rev. seccamp2025

限界環境CPython rev. seccamp2025

Avatar for らすぴー

らすぴー

August 14, 2025
Tweet

More Decks by らすぴー

Other Decks in Technology

Transcript

  1. 注意事項 • これは2024年夏のPyCon JP 2024で行った野良発表 「Python3をWindows CEに移植した話」 の二番煎じrev. seccamp2025となっています •

    時間の都合で当時のスライドを流用しており、大変読みにくく なっているかと思われます • そもそも説明が雑です 2
  2. 目次 1. 自己紹介 2. 電子辞書で動くPython 3. 事の発端 4. Pythonのバージョン選定 5.

    パッチ適用 6. ビルドツールの選定 7. configure.acの改造 8. Makefile.pre.inの改造 9. WinCEに無いAPIの実装 10.コンソール問題 11.同名DLL問題 12.その他の問題 13.追加モジュールについて #rev. seccamp2025 14.追加移植: tqdm 3
  3. 電子辞書で動くPython • 電子辞書Brainについて • SHARPの電子辞書シリーズ • Windows CE(WinCE)が動作 • 2021年以降のモデルは別OS

    • 2chなどで自作アプリやハックが 盛んだった • 今年5月頃にインターネット接続に ついに成功 • Kernel/VM@関西11回目で発表したよ 5 SHARP Brain PW-SH7-W 自分が持ってる機体の色違い
  4. 電子辞書で動くPython • 2007年頃まで開発されていた、WinCEで動く 「PythonCE」が存在 • v2.3.4 ~ v2.5 まで対応 •

    独自コンソールにより対話モードが使用可能 • numarrayなど一部の追加モジュールも https://sourceforge.net/projects/pythonce/ 6 CPythonのWinCE移植版 「PythonCE」のアイコン
  5. ビルドツールの選定 Pythonで使えるビルドツール: • Makefile + gcc ... LinuxとMac • Visual

    Studio + Visual C++ ... Windows • SCons + eVC4 ... Windows CE (PythonCE) 12
  6. ビルドツールの選定 当時使用できた環境 • Raspberry Pi 3B & ZeroW • Chromebook

    → Windows系のビルドツールの使用が困難 → WinCE向けのgcc「cegcc」を使うしかない 13
  7. コンソール問題 問題発生 ... 電子辞書で stdin や stdout が使えない stdin, stdout,

    stderrのファイル記述子は本来は 0, 1, 2 そのすべてが無効になっていた(-1) → fileno や isatty を別に実装して偽装 19
  8. 同名DLL問題 解決策 • *.pyd → *.cp310-wince_arm.pydに変更 • python310.dll と python3.10.exe

    双方にハッシュ値を 埋め込み、実行時に検証する 21
  9. その他の問題 • 環境変数がない environ.iniという設定ファイルを作成、また --env-set オプションや --env-path オプションを追加することで対応 • pyファイルを直接実行できない

    レジストリにpyファイルが登録されないため、pyファイルをダブルク リックしても実行できない → PYTHONASSOCIATEREG という環境変数を追加、起動時にレジストリ設 定をできるように 22
  10. その他の問題 • ModuleNotFoundError: No module named ‘os’ なぜかosがインポートできない(!?) 原因: “os.py”

    が “OS.PY” になっていた!(ファイルシステムの問題) → PYTHONCASEOK を設定することにより対応 • python310._pthを使った時の挙動がなんか変 なんかドキュメントに書いてある通りの挙動じゃない... → ドキュメントの日本語訳が間違っていた!(現在は修正済み) 23