Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 816 – WASI 지원

Author:
Brett Cannon <brett at python.org>
Discussions-To:
Discourse thread
Status:
Active
Type:
Informational
Created:
05-Nov-2025
Post-History:
08-Dec-2025
Resolution:
Discourse message

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain or CC0-1.0, whichever is more permissive 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

Note

Python 버전별 WASI 버전 지원에 대해서는 PEP 11을 참조하십시오 버전.

초록

이 PEP는 CPython이 WASI를 어떻게 지원할 것으로 예상되는지 개략적으로 설명합니다. 공식적인 WASI 지원은 PEP 11에 명시되어 있으며, 이 PEP에는 CPython의 각 릴리스에서 어떤 WASI 버전과 WASI SDK 버전을 지원할 것으로 예상되는지 알 수 있을 만큼 충분한 세부 사항이 담겨 있습니다.

동기

CPython은 Python 3.11부터 PEP 11에 따라 WASI를 지원해 왔습니다. 이 지원의 일환으로 CPython은 두 가지를 대상으로 삼아야 합니다. 하나는 WASI 버전이고 다른 하나는 WASI SDK 버전입니다(둘 다 Bytecode Alliance가 개발을 주도합니다). 전자는 WASI 자체의 명세이고, 후자는 특정 버전의 wasi-libc를 sysroot로 사용하는 clang의 한 버전으로, CPython을 WASI용으로 컴파일할 수 있게 해 줍니다. 새 WASI 버전은 대략 1년에 한 번 릴리스되지만, WASI SDK에는 정해진 릴리스 주기가 없습니다.

어떤 WASI 버전과 WASI SDK 버전을 지원할지 합의하면 CPython 코드 베이스가 해당 버전들을 명확하게 대상으로 삼을 수 있습니다. 또한 특정 WASI 또는 WASI SDK 버전에서만 나타나는 문제를 버그로 간주할지(또는 간주하지 않을지)에 대해 커뮤니티가 적절한 기대치를 설정할 수 있습니다. 아울러 라이브러리 같은 다른 소프트웨어를 빌드할 때 특정 Python 버전에 맞는 WASI와 WASI SDK의 전반적인 대상을 커뮤니티에 제시합니다. 이는 중요합니다. wasi-libc의 ABI가 어떠한 호환성도 보장하지 않으므로 WASI SDK는 상위 호환성도 하위 호환성도 없으며, 따라서 코드가 함께 동작하도록 폭넓게 조율하는 것이 중요하기 때문입니다.

버전 대상을 이처럼 조율하고 기록해 두는 일은 어떤 버전을 선택해야 할지 분명하지 않은 상황에서 중요할 수 있습니다. 예를 들어 WASI SDK 26과 27에는 특정 상황(REPL 종료 포함)에서 CPython이 멈추게 하는 버그가 있습니다. 이 버그는 스레드 지원 코드에 있으므로, CPython이 이 버전들을 대상으로 삼지 않을 것이며 따라서 서드파티 코드도 이 버전들을 피해야 한다는 사실이 커뮤니티의 다른 사람들에게 반드시 분명하지는 않을 수 있습니다.

근거

기술적으로는 별개이지만, WASI SDK가 어떤 WASI 버전을 지원하기 전까지는 CPython도 그 버전을 지원할 수 없습니다. WASI 버전들은 서로 하위 호환되는 것으로 간주되지만, wasi-libc가 ABI 호환성을 보장하지 않으므로 WASI SDK는 상위 호환성도 하위 호환성도 없습니다. 그러므로 CPython에서 특정 WASI SDK 버전에 대한 지원 기대치를 설정하는 것이 중요합니다. 지금까지 CPython에서 WASI SDK 버전 간의 지원 차이는 WASI용으로 관리되는 config.site 파일의 설정과 관련되어 왔습니다. WASI SDK 자체의 버그 때문에 지원 문제가 생긴 적도 있습니다. 마지막으로, WASI SDK가 새 기능을 지원하면 이전에는 WASI 빌드에서 사용되지 않던 코드가 갑자기 실행될 수도 있으며, 그러면 테스트를 통과하도록 코드를 수정해야 할 수 있습니다.

WASI 버전 지원은 대개 WASI 빌드에서 어떤 표준 라이브러리 모듈을 (잠재적으로) 사용할 수 있는지로 이어집니다. 예를 들어 WASI 0.2에서는 소켓 지원이 추가되었고, WASI 0.3.1에는 어떤 형태로든 스레딩 지원이 포함될 예정입니다. 어떤 WASI 버전이 지원되는지 알면 어떤 표준 라이브러리 모듈이 지원되어야 하는지에 대한 기대치가 설정됩니다.

인터프리터 기능을 사용할 수 있는지는 WASI 버전에 따라 달라질 수 있습니다. 예를 들어, 스레딩 지원이 생기기 전까지는 WASI에서 자유 스레딩을 지원할 수 없습니다. 이 역시 대상 WASI 버전에 따라 무엇이 동작해야 하는지에 대한 기대치를 설정하는 데 도움이 됩니다.

명세

b1 릴리스 시점에 CI 또는 안정(stable) Buildbot 빌더에서 CPython 버전이 지원하는 WASI 및 WASI SDK 버전은 이 PEP가 수락된 이후 해당 Python 버전의 수명 동안 지원될 버전이어야 합니다(MUST). 어떤 이유로 CI와 Buildbot 빌더 사이에 불일치가 있다면, PEP 11에 명시된 WASI 유지 관리자가 어떤 버전 조합을 지원 대상 버전으로 지정할지 선택합니다.

한 Python 버전에서 지원하는 WASI 버전과 WASI SDK 버전은 공식 기록으로서 PEP 11에 기록되어야 합니다(MUST). 이 기록은 PEP 11에 등재된 WASI 유지 관리자가 b1 릴리스 즈음에 수행합니다.

어떤 이유로 기록된 이후에 지원되는 WASI SDK 버전을 변경해야 하는 경우, 언제 그리고 왜 변경했는지를 PEP 11에 메모로 남깁니다. 이러한 변경은 PEP 11에 등재된 WASI 지원 유지 관리자의 재량에 따르며, 운영 위원회의 승인을 필요로 하지 않습니다. 다만, 이러한 변경은 일어나지 않아야 한다(SHOULD NOT)는 것이 기본적인 기대입니다.

기록된 이후에 WASI 버전을 변경하는 일은 운영 위원회가 승인하지 않는 한(UNLESS) 일어나서는 안 됩니다(MUST NOT). 이는 새로운 WASI 버전에 대한 지원 부담이 늘어나고, 지원에 대한 기대치가 이미 설정된 상태에서 CPython이 무엇을 지원할지에 대한 기대가 바뀌기 때문입니다.

main 브랜치의 타깃 트리플(target triple)에 맞는 적절한 WASI 버전을 반영하기 위한 PEP 11 업데이트는 필요에 따라 이루어져야 하지만(MUST), 이 업데이트에는 운영 위원회의 승인이 필요하지 않습니다(NOT). 이러한 업데이트는 새로운 플랫폼에 해당하지 않으며, 현재 운영 위원회의 승인이 필요하지 않은 새 OS 릴리스에 더 가깝기 때문에 운영 위원회는 이를 승인할 필요가 없습니다.

지정된 지원

WASI SDK가 일부 위치에서 메이저 버전과 마이너 버전을 모두 표기하지만, 실제로 마이너 버전은 0 이외의 값으로 설정된 적이 없으며 모든 마이너 버전은 전체 메이저 버전과 ABI 호환될 것으로 기대된다는 점에 유의하십시오. 또한 마이너 릴리스가 한 번도 없었기 때문에 WASI 커뮤니티는 WASI SDK 버전을 메이저 버전으로만 지칭합니다. 따라서 이 PEP는 마이너 버전을 기록할 필요가 생기기 전까지 WASI SDK의 메이저 버전만 기록합니다.

Python WASI WASI SDK
3.14 0.1 24
3.13 0.1 24
3.12 0.1 21
3.11 0.1 21

참고 사항

Python 3.15 이전의 모든 버전은 이 PEP보다 먼저 나왔습니다. 해당 버전들의 지원 여부는 이 PEP를 작성할 당시 지원되던 내용을 기준으로 합니다.

PEP 11에 따르면 WASI는 Python 3.11과 3.12에서 티어 3 플랫폼이었습니다. WASI는 Python 3.13부터 티어 2 플랫폼이 되었습니다.

WASI 0.2 지원은 시간이 부족해 건너뛰었으며, 차라리 WASI 0.3으로 곧바로 넘어가는 편이 낫다고 판단할 정도였습니다. 이는 Bytecode Alliance의 권고에 따른 것입니다.

WASI SDK 26과 27에는 특정 상황에서 CPython이 멈추는 버그가 있어서 건너뛰었습니다.

감사의 글

이 PEP의 명세를 함께 논의해 주신 Bytecode Alliance의 게스트 언어 SIG 산하 Python 하위 그룹의 Joel Dice와 Ben Brandt에게 감사드립니다.

각주