PEP 755 – PyPI의 암시적 네임스페이스 정책
- Author:
- Ofek Lev <ofekmeister at gmail.com>
- Sponsor:
- Barry Warsaw <barry at python.org>
- PEP-Delegate:
- Dustin Ingram <di at python.org>
- Discussions-To:
- Discourse thread
- Status:
- Draft
- Type:
- Process
- Topic:
- Packaging
- Created:
- 05-Sep-2024
- Post-History:
- 07-Sep-2024
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain or CC0-1.0, whichever is more permissive 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
동기
많은 프로젝트와 커뮤니티가 네임스페이스를 예약할 수 있는 기능의 혜택을 받습니다. PyPI는 Python 커뮤니티에 서비스를 제공하기 위해 존재하므로, 모든 사람의 요구가 충족되도록 의견을 수렴하는 것이 중요합니다.
운영 및 정책상의 세부 사항은 각 패키지 저장소가 결정해야 하므로 전용 PEP가 필요합니다.
근거
PyPI는 인력이 부족한 상태였으며, 2024년 7월에 최초의 전담 전문가를 채용했습니다. 자원 부족으로 인해 패키지 이름 요청, 조직 요청, 저장 공간 한도 증액, 심지어 계정 복구에 대한 사용자 지원도 부족했습니다.
네임스페이스를 예약할 때 유료 조직에 더 많은 재량을 부여하는 기본 정책은 다음과 같은 이점을 제공합니다.
- PyPI는 지원 전문가, 인프라 유지 관리, 버그 수정 및 새로운 기능을 위한 자금을 지속적으로 확보할 수 있습니다.
- 각 신청서를 독립적으로 검토해야 하지만, 유료 조직을 승인하는 절차에서 이미 일정 수준의 신뢰를 부여하므로 필요한 인적 피드백은 줄어듭니다.
용어
- 유료/기업 조직
- 기업 조직은 PyPI의 특별 기능에 비용을 지불하는 조직입니다. 이 PEP에서는 간결성을 유지하고 비원어민의 이해를 돕기 위해 대부분의 경우 이들을 유료 조직이라고 지칭합니다.
- 루트 보조금
- 이는 PEP 752 terminology에서 정의한 그랜트입니다.
- 자식 보조금
- 이는 PEP 752 terminology에서 정의한 대로 연결된 네임스페이스가 자식 네임스페이스인 루트 그랜트에서 생성된 그랜트입니다.
구현
보조금 신청
제출
조직 계정(사용자 계정이 아닌 계정)만 보조금 신청 양식에 액세스할 수 있습니다.
유료 조직의 신청서는 검토 대기열에서 우선순위를 부여받습니다. 이는 유료 조직에 의미 있는 혜택을 제공하는 동시에 더 많은 검토자를 포함한 PyPI의 운영 비용을 충당할 자금을 확보하기 위한 것입니다.
승인 기준
- 네임스페이스는
tool이나apps처럼 흔한 것이어서는 안 됩니다. - 네임스페이스는 세 글자를 초과해야 합니다.
- 네임스페이스는 예약 소유자를 적절하고 명확하게 식별해야 합니다.
- 조직은 네임스페이스를 적극적으로 사용해야 합니다.
- 네임스페이스를 예약하지 않는 것이 모호성, 혼란 또는 커뮤니티에 대한 기타 피해를 초래할 수 있다는 증거가 있어야 합니다.
유료 조직이 아닌 조직은 다음 중 하나에 해당해야 합니다.
- 많은 패키지를 보유한 규모가 크고 인기 있는 오픈 소스 프로젝트
- 패키지를 적극적으로 게시하는 대학
- 패키지를 적극적으로 게시하는 정부 기관
- Our World in Data와 같이 패키지를 적극적으로 게시하는 NPO/NGO
일반적으로 검토자는 아직 사용하지 않는 그랜트를 신청하는 유료 조직에 더 관대해야 합니다.
예를 들어 스타트업이나 새로운 제품군을 출시한 기존 회사에 네임스페이스를 부여하는 것은 합리적이지만, 사용자가 많지 않은 커뮤니티 프로젝트에 네임스페이스를 부여하는 것은 그만큼 합리적이지 않습니다.
거부
거부된 신청에는 승인 기준에 근거한 결정의 명확한 사유가 제공됩니다. 네임스페이스가 너무 일반적이라는 이유로 거부된 신청은 향후 검토자가 참고할 수 있도록 내부에 보존되며, 같은 이유로 이전에 거부된 네임스페이스를 예약하려는 새 신청에는 경고가 표시됩니다.
승인
조직 외부의 프로젝트가 사용 중인 네임스페이스에 대한 신청이 승인되면, 해당 프로젝트의 소유자에게 새 그랜트를 알리는 이메일이 전송됩니다. 이메일에는 네임스페이스 페이지에 대한 링크가 포함됩니다.
그랜트 유형
그랜트에는 두 가지 유형이 있습니다.
루트 그랜트
조직은 승인된 각 신청에 대해 루트 그랜트를 받습니다. 이 그랜트에서는 원하는 수만큼 child grants를 생성할 수 있습니다.
하위 그랜트
자식 grant는 루트 grant의 소유자가 언제든지 승인 없이 생성할 수 있습니다. 이러한 그랜트와 연결된 네임스페이스는 루트 그랜트의 네임스페이스에 속하는 하위 네임스페이스여야 합니다.
하위 그랜트에는 자체 하위 그랜트를 둘 수 없습니다.
그랜트 소유권
그랜트 소유자는 다른 조직이 원하는 수만큼 해당 그랜트를 사용하도록 허용할 수 있습니다. 그랜트는 해당 조직이 소유한 것처럼 동작합니다. 즉, 소유자조차 네임스페이스에 패키지를 업로드할 수 없습니다. 소유자는 언제든지 이 권한을 철회할 수 있습니다.
소유자는 PyPI 관리자의 승인 없이 언제든지 다른 조직에 소유권을 이전할 수 있습니다. 조직이 유료 조직인 경우 소유권 이전 대상도 유료 조직이어야 합니다. 허용된 조직에 대한 설정도 함께 이전됩니다.
사용자 인터페이스
네임스페이스 페이지
모든 활성 grant의 네임스페이스에는 해당 open 상태, 현재 소유자, 소유권이 부여된 시점 및 네임스페이스에 일치하는 프로젝트의 총수와 같은 정보가 포함된 전용 페이지가 있습니다.
프로젝트 페이지
활성 네임스페이스 grant에 일치하는 모든 프로젝트의 페이지(example)에는 접두사가 무엇인지 표시되며(NuGet은 현재 이를 지원하지 않음) 필 또는 레이블 형태로 눈에 띄게 표시됩니다. 이 값은 namespace detail API의 prefix 키와 일치합니다.
네임스페이스를 클릭하면 사용자는 해당 페이지로 이동합니다.
시각적 표시
활성 네임스페이스 grant에 일치하는 프로젝트의 경우, 사용자는 다음 시나리오 중 어느 상황에 해당하는지 신속하게 확인할 수 있습니다.
- grant owner와 연결된 프로젝트에는 시각적 표시가 없으며, 사용자는 항상 표시되는 접두사에만 의존해야 합니다.
- grant owner와 연결되지 않았고 일치하는 grant가 open인 프로젝트에는 불신이나 위험을 전달하지 않는 고유한 표시가 나타납니다. Font Awesome의 users 아이콘이나 Google Fonts의 groups 아이콘이 좋은 선택일 수 있습니다.
- grant owner와 연결되지 않았고 일치하는 grant가 제한된 프로젝트에는 고유한 시각적 표시가 나타납니다. 이 상황은 grant가 생성되기 전에 프로젝트가 존재했던 경우에 발생합니다. 이 표시는 진정성이 없거나 신뢰할 수 없음을 전달합니다. 경고 표시(⚠)가 좋은 선택일 수 있습니다.
공개 네임스페이스
child grant가 생성되면 해당 open 상태는 root grant에서 상속됩니다. child grant의 소유자는 언제든지 해당 grant를 공개로 설정할 수 있습니다. grant가 공개된 경우, 해당 grant의 소유자가 네임스페이스에 일치하는 모든 프로젝트의 소유자가 아닌 한 제한된 상태로 변경할 수 없습니다.
Grant 제거
grant를 다른 조직과 공유하는 경우, 소유 조직은 조직을 삭제하기 위한 전제 조건으로 이전을 시작해야 합니다.
grant를 공유하지 않는 경우, 소유자는 다음 상황 중 하나에서 네임스페이스에 대한 소유권 주장을 철회할 수 있습니다.
- 조직이 수동으로 소유자 자격을 철회합니다.
- 조직이 삭제됩니다.
예약된 네임스페이스의 소유권 주장이 철회되면 UI에 이 내용이 반영되어, 일치하는 프로젝트의 페이지에는 더 이상 어떠한 표시도 나타나지 않고 네임스페이스에도 전용 페이지가 없어집니다.
이를 가르치는 방법
조직을 위해 네임스페이스를 예약하는 방법, 그 이점 및 가격을 문서화합니다.
조직이 grant에 일치하는 기존 패키지의 부적절한 사용을 신고하는 주요 메커니즘을 알 수 있도록 동일한 페이지에 PEP 541을 문서화합니다.
거부된 아이디어
모든 활성 Grant를 보는 페이지
출시 예정 제품과 같은 비공개 정보가 유출될 가능성이 있기 때문에 모든 활성 네임스페이스 권한 부여를 볼 수 있는 페이지는 없습니다.
소유 프로젝트의 시각적 표시
특히 이것이 가장 일반적인 시나리오이므로, 주로 복잡함을 줄이기 위해 권한 부여 소유자와 연결된 프로젝트를 나타내는 표시가 없습니다.
표시가 있었다면 패키지 사용에 내재된 관련 보안 보장이 있다는 잘못된 인상을 줄 수 있으므로 NuGet이 선택한 것과 같은 체크 표시나 유사한 표시가 아니었을 것입니다. 또한 일부 소셜 미디어 플랫폼에서는 인증된 사용자에게 체크 표시를 사용하므로 혼동이 발생할 수 있습니다.
참고 자료
Copyright
This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.