Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
限界環境CPython rev. seccamp2025
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
らすぴー
August 14, 2025
Technology
77
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
限界環境CPython rev. seccamp2025
らすぴー
August 14, 2025
More Decks by らすぴー
See All by らすぴー
typoなんかねぇよ
raspython3
0
700
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
740
高校のChromebookでも自由なネット環境を!
raspython3
0
230
kernel-vm-ittekita-yuukousai
raspython3
0
130
kernelvm-brain-net
raspython3
0
1.2k
pyconjp2024-wince
raspython3
0
83
seccamp2024-edictionary-python-TLS
raspython3
0
66
Other Decks in Technology
See All in Technology
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
600
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.3k
range over func 2年間の軌跡 Issue #56413 はGoのエコシステムをどう変えたか
ryujicre8ive
0
190
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
310
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
2
1.6k
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
3
2.9k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
500
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
730
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
110
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.2k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Evolving SEO for Evolving Search Engines
ryanjones
0
290
Crafting Experiences
bethany
1
340
Agile that works and the tools we love
rasmusluckow
331
22k
Odyssey Design
rkendrick25
PRO
2
810
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
A Soul's Torment
seathinner
8
3.6k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
How STYLIGHT went responsive
nonsquared
100
6.3k
Transcript
限界環境CPython rev. seccamp2025 らすぴー / RasPython3 (@RasPython3) 1
注意事項 • これは2024年夏のPyCon JP 2024で行った野良発表 「Python3をWindows CEに移植した話」 の二番煎じrev. seccamp2025となっています •
時間の都合で当時のスライドを流用しており、大変読みにくく なっているかと思われます • そもそも説明が雑です 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
自己紹介 活動名 RasPython3 / らすぴー X: @raspython3 普段やってること 各種ウェブツールづくり Discordのボットづくり
Linuxいじり 電子辞書いじり ネットワーク関連 etc. 4
電子辞書で動くPython • 電子辞書Brainについて • SHARPの電子辞書シリーズ • Windows CE(WinCE)が動作 • 2021年以降のモデルは別OS
• 2chなどで自作アプリやハックが 盛んだった • 今年5月頃にインターネット接続に ついに成功 • Kernel/VM@関西11回目で発表したよ 5 SHARP Brain PW-SH7-W 自分が持ってる機体の色違い
電子辞書で動くPython • 2007年頃まで開発されていた、WinCEで動く 「PythonCE」が存在 • v2.3.4 ~ v2.5 まで対応 •
独自コンソールにより対話モードが使用可能 • numarrayなど一部の追加モジュールも https://sourceforge.net/projects/pythonce/ 6 CPythonのWinCE移植版 「PythonCE」のアイコン
事の発端 電子辞書でPythonをいじりたかったが、動作するPythonの バージョンが2.5と古かった → Python3はないのかと調べてみたが無さそう ...じゃあ移植しちゃえばいいのでは? 7
事の発端 電子辞書でPythonをいじりたかったが、動作するPythonの バージョンが2.5と古かった → Python3はないのかと調べてみたが無さそう ...じゃあ移植しちゃえばいいのでは? 8 EOLを迎え需要もない 環境に無茶苦茶アプロ ーチで移植して専門家
を怖がらせましょう!
Pythonのバージョン選定 移植開始時期 ... 2023年4月頃 → v3.10.10 stable stable rc alpha
stable beta rc stable 3.9 3.10 3.11 3.12 9 ココ→
パッチ適用 Python2.5から時が流れ、WinCE用の記述はほぼ消えている そのため、2.5当時の記述を引っ張ってくる必要があった 手がかり • PythonCEのreadme • WinCE用のマクロ等 ... _WIN32_WCE
や MS_WINCE • 3.6の時に適用された、WinCE対応の名残を削除するコミット 10
パッチ適用 https://github.com/python/cpython/commit/10108a7b9affa61719a1dc1863 edb2bdb3402fd1 Windows CEのサポートを削除した。 それは完了することはなく、Windows CEは もはやPythonに関連するプラットフォームで はない。 11
ビルドツールの選定 Pythonで使えるビルドツール: • Makefile + gcc ... LinuxとMac • Visual
Studio + Visual C++ ... Windows • SCons + eVC4 ... Windows CE (PythonCE) 12
ビルドツールの選定 当時使用できた環境 • Raspberry Pi 3B & ZeroW • Chromebook
→ Windows系のビルドツールの使用が困難 → WinCE向けのgcc「cegcc」を使うしかない 13
ビルドツールの選定 そういえば... 1. Windows用の追加のソースはPC以下にまとまっている 2. Linuxで使うソースファイルの多くはWindowsでも使っている → Linuxのビルドスクリプトに手を加えたらどうにかなるのでは 14
configure.acの改造 まずは何も手を加えずに ./configure --host=mingw32ce --target=mingw32ce → mingw32ceは非対応とエラー • WinCE用の記述を追加 15
Makefile.pre.inの改造 WinCEで使うソースファイルのリストを記述 • Windowsで使うソースファイル • PythonCEに存在したWinCE用のソースファイル • PC/wince_compatibility.* • PC/WinCE/_tkinter/*
• 今回の移植で新たに作成したファイル • WinCE/* • Modules/_io/winceconsoleio.c 16
WinCEに無いAPIの実装 主にPC/wince_compatibility.*で対応 • strerr • wcsnlen • dup • CommandLineToArgvW
• CreateSymbolicLink • GetFileType • *_s 17
コンソール問題 コンソールがない場合(電子辞書など)、Pythonの標準入出力を扱 えない PythonCEでは独自のコンソールを用意していたが、 Pythonスクリプトによる疑似コンソールだった → Win32APIで窓を作り、readline や WriteConsole を独自実装
18
コンソール問題 問題発生 ... 電子辞書で stdin や stdout が使えない stdin, stdout,
stderrのファイル記述子は本来は 0, 1, 2 そのすべてが無効になっていた(-1) → fileno や isatty を別に実装して偽装 19
同名DLL問題 WinCEでは、ロードを試みるDLLと同名のDLLをほかのプログラム がすでにロードしていた場合、ロード済みのDLLを使いまわす →複数のPythonが入っていると挙動がおかしくなる 例 • Python3の_tkinter.pydを読み込もうとしてPythonCEの _tkinter.pydを使おうとしてしまう • Python3.10.14のpython310.dllを使おうとしてpython3.10.0の
それを使ってしまう 20
同名DLL問題 解決策 • *.pyd → *.cp310-wince_arm.pydに変更 • python310.dll と python3.10.exe
双方にハッシュ値を 埋め込み、実行時に検証する 21
その他の問題 • 環境変数がない environ.iniという設定ファイルを作成、また --env-set オプションや --env-path オプションを追加することで対応 • pyファイルを直接実行できない
レジストリにpyファイルが登録されないため、pyファイルをダブルク リックしても実行できない → PYTHONASSOCIATEREG という環境変数を追加、起動時にレジストリ設 定をできるように 22
その他の問題 • ModuleNotFoundError: No module named ‘os’ なぜかosがインポートできない(!?) 原因: “os.py”
が “OS.PY” になっていた!(ファイルシステムの問題) → PYTHONCASEOK を設定することにより対応 • python310._pthを使った時の挙動がなんか変 なんかドキュメントに書いてある通りの挙動じゃない... → ドキュメントの日本語訳が間違っていた!(現在は修正済み) 23
追加モジュールについて 現在(2025/08/14)、以下の追加モジュールが移植されている • cffi • cryptography • 現行バージョンはRust使用のため古いバージョンのみ • PyCryptoDome
• Numpy • OpenSSL • PIL (Pillow) • Pyftpdlib • requests 24
追加モジュールについて cryptographyや標準のsslモジュールを動作させるためには OpenSSLが必要 海外の方で、OpenSSLをWinCEに移植している人がいた が、電子辞書では動作せず... さらに、そのビルドにはVisual Studioを使っていた https://www.hpcfactor.com/forums/forums/thread-view.asp?tid=20731&start=1 25
追加モジュールについて そこで、cegccでOpenSSLをビルドすることを試みた ところが、OpenSSLもerrnoや環境変数を使うためビルドに失敗 これらも独自に実装すると、かなり面倒なことになる → Pythonで使うことを前提に、python310.dllに依存させたら いいのでは 26
追加モジュールについて 結果...うまくいった! これがうまくいかなかった場合、別途フル装備のcoredllを 使わなければならず、ライセンスの問題で配布が困難だった 最終的に、Pythonのビルド途中でOpenSSLもビルドして、Python のDLLに変更があっても問題なく動作できるようにした 27
#rev. seccamp2025 追加移植: tqdm • プログレスバーを簡単に表示できる 便利ライブラリ • ピュアPythonライブラリなので、 何も考えずにプログラムのコピペで
インストールできる • pip等が使えない(!)ので... 28
#rev. seccamp2025 追加移植: tqdm よーし早速動かしてみよう... 29 まあ想定内...
#rev. seccamp2025 追加移植: tqdm ...(範囲選択により真の姿をあらわにする) 30 崩壊★
#rev. seccamp2025 追加移植: tqdm Q. なぜ崩壊したのか? A. 疑似コンソールの実装が雑&中途半端だから。 • キャリッジリターンが未実装
• というか制御文字きちんと処理してない • だって面倒臭かったんだもん... 31
#rev. seccamp2025 追加移植: tqdm キャリッジリターンを雑に実装した結果... 32 成功!!! (豆腐は許して)
最後に • 皆さんも限界・異常環境にお好みの言語を移植しましょう! • 使えるAPIが少なかったりする制限あり環境がおすすめ • 標準APIの内部挙動を学べるよ • インタプリタやコンパイラの内部挙動も学べるよ •名刺が大量に(400枚以上)余っているので
ぜひ交換しましょう!!!!! 33