Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
限界環境CPython rev. seccamp2025
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
らすぴー
August 14, 2025
Technology
53
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 らすぴー
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
590
高校のChromebookでも自由なネット環境を!
raspython3
0
190
kernel-vm-ittekita-yuukousai
raspython3
0
110
kernelvm-brain-net
raspython3
0
1.1k
pyconjp2024-wince
raspython3
0
61
seccamp2024-edictionary-python-TLS
raspython3
0
52
Other Decks in Technology
See All in Technology
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3k
Chainlitで作るお手軽チャットUI
ynt0485
0
280
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
0
210
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
生成 AI 実践ガイド (概略版) AIガバナンス編
asei
0
120
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
250
【2026年版】 ベクトル検索とEmbedding最前線
mocobeta
16
4.4k
AIはどのように 組織のアジリティを変えるのか?
junki
4
1k
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
230
Agile and AI Redmine Japan 2026
hiranabe
3
290
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
エンジニアに許された特別な時間の終わり
watany
107
250k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
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