포팅과 플랫폼 지원¶
Python 인터프리터는 기반 플랫폼 위에서 실행됩니다. 플랫폼이란 운영 체제(예: Linux, Windows, macOS), 프로세서(Intel/AMD, ARM 등), C 컴파일러와 라이브러리, 그 밖의 “저수준” 세부 사항을 말합니다.
CPython은 여러 플랫폼에서 공식적으로 지원됩니다. 이러한 플랫폼에 대해서는 코어 팀이 릴리스를 테스트하고 버그를 수정할 수 있는 충분한 지식과 자원을 갖추고 있습니다. 자세한 내용은 PEP 11을 참조하십시오.
그 밖의 플랫폼은 코어 팀에서는 지원하지 않지만, 다른 이들이 지원할 수도 있습니다. 자원봉사 프로젝트로 지원하기도 하고, “자사” 시스템에서 Python을 쓰려는 회사가 지원하기도 하며, 단순히 일회성 실험으로 지원하기도 합니다. 지원되지 않는 플랫폼용 코드를 메인 CPython 저장소에 병합하는 정책은 PEP 11을 참조하십시오.
포트와 연락처¶
아래 표에는 관련 서드파티 프로젝트와 그 메인테이너, 그리고 플랫폼별 이슈를 트리아지할 때 참고할 정보의 링크가 나와 있습니다. 공식 지원 플랫폼도 (PEP 11 외에) 관련 정보가 있거나 비슷한 플랫폼끼리 묶어야 하는 경우에는 표에 포함됩니다.
메인테이너의 주의를 끌거나 플랫폼별 이슈에 대한 의견을 구하려면 표에 나온 GitHub 사용자 이름을 @멘션해도 됩니다. 메인테이너는 본인의 허락을 받은 경우에만 표에 올릴 수 있으며, 메인테이너는 언제든지 목록에서 자신을 뺄 수 있습니다.
서드파티 프로젝트는 메인테이너 자신들보다 훨씬 많은 사람에게 도움이 되는 경우에만 표에 올려야 합니다.
링크는 플랫폼 자체가 아니라 해당 포트에 관한 것이어야 하며, 포팅 작업과 플랫폼별 이슈 수정에 관련된 것이어야 합니다(홈페이지나 마케팅 링크는 올리지 마십시오).
새 플랫폼으로 포팅하기¶
CPython을 완전히 새로운 플랫폼으로 이식하는 일은 하나의 모험입니다. 이식을 시도한다면 기록을 남기는 것을 고려하십시오. 그리고 다른 사람에게 도움이 될 만한 내용을 발견하면 이 안내서도 갱신하십시오. 플랫폼마다 사정이 다르므로 이 안내서에서는 대략적인 조언 몇 가지만 드릴 수 있습니다.
첫 단계는 해당 플랫폼의 개발 도구 체인, 특히 C 컴파일러에 익숙해지는 것입니다. 대상 컴파일러로 hello-world 프로그램을 컴파일하고 실행할 수 있는지 확인하십시오.
다음으로, Python이 이미 이식된 플랫폼에서 Python 인터프리터를 컴파일하고 실행하는 방법을 익히십시오. Unix가 바람직하지만 Windows도 괜찮습니다. Python의 빌드 과정, 특히 소스 배포판에 있는 Makefile을 보면 Python을 위해 어떤 파일을 컴파일해야 하는지 알 수 있습니다. 모든 소스 파일이 필요하지는 않습니다. 일부는 특정 플랫폼 전용이고, 일부는 비상시에만 사용됩니다(예: Python/getopt.c).
대상 플랫폼에 대해 최소한 중간 수준의 이해, 즉 그 플랫폼이 일반적으로 어떻게 사용되는지, 플랫폼별 앱을 어떻게 작성하는지 등에 대한 이해 없이 Python 이식을 시작하는 것은 권장하지 않습니다. 또한 Python에 대한 지식도 어느 정도 필요합니다. 그렇지 않으면 이식한 결과가 올바르게 동작하는지 확인할 수 없습니다.
UNIX 셸이 있는 시스템에서는 포함된 configure 스크립트를 실행하십시오. 그러면 Makefile 파일을 비롯해 필요한 모든 파일이 생성될 것입니다. 그렇지 않다면 스크립트를 디버깅하거나 다시 구현해야 합니다. 이 스크립트는 GNU Autotools를 사용해 configure.ac 파일에서 생성된다는 점에 유의하십시오. (CPython은 재현성을 위해 특정 버전을 고정해 두지만, 다른 버전으로도 잘 동작할 수 있습니다.)
configure가 생성하는 주요 파일, 즉 확인해 볼 만한 파일은 다음과 같습니다:
해당 플랫폼에 맞춘
pyconfig.h파일입니다. 이 파일을 직접 만들어야 한다면 pyconfig.h.in 파일에서 시작하여 주석을 읽고, 해당 플랫폼에 적용되는 정의를 활성화하십시오.지원하는 내장 모듈의 목록이 담긴
config.c파일입니다. 확장 모듈의 동적 로딩이 동작하기 전까지는 임포트해야 하는 컴파일된 모듈을 모두 여기에 나열해야 합니다. 이 파일은 Modules/config.c.in 파일에서 생성됩니다.모든 것을 하나로 묶는 방법이 담긴
Makefile파일입니다. 이 파일이 생성되지 않았다면 모든*.c파일을 컴파일해 보고 오류를 고치십시오. 또는 중요해 보이지 않는 파일은 빼십시오. 예를 들어 처음에는posix모듈(Modules/posixmodule.c)은 신경 쓰지 마십시오. 컴파일하지 말고config.c파일에서 주석 처리하십시오.
>>> 프롬프트가 나타날 때까지 작업을 계속하십시오. -S 옵션을 넘겨 site.py 임포트를 비활성화해야 할 수도 있습니다. 프롬프트가 나타나면 아주 간단한 Python 문장을 실행할 수 있을 때까지 계속 두드려 보십시오.
언젠가는 os 모듈을 사용하고 싶어질 것입니다. 그때가 posix 모듈을 어떻게 처리할지 고민하기 시작할 시점입니다. posix 모듈에서 문제를 일으키는 함수는 그냥 주석 처리해도 괜찮습니다. 나머지 함수만으로도 꽤 쓸모가 있을 것입니다. 물론 다른 모듈에도 같은 방법을 쓸 수 있습니다.
작업을 마치기 전에 테스트 실행과 작성에 설명된 대로 Python 회귀 테스트 스위트를 실행할 것을 강력히 권장합니다. 해당 플랫폼에 맞지 않는 테스트는 건너뛰어야 할 것입니다. 참고가 필요하다면 WASI 플랫폼에서는 이를 어떻게 처리하는지 살펴보십시오.