Split View: 버스 팩터는 아는 사람의 수가 아니라 결정할 수 있는 사람의 수다
버스 팩터는 아는 사람의 수가 아니라 결정할 수 있는 사람의 수다
- 들어가며 — 저장소는 그대로인데 리더십이 사라졌다
- 버스 팩터는 지식이 아니라 권한의 수다
- 발표문이 실제로 말하는 것
- 위임이 이름만 남을 때 무엇이 무너지나
- 10개월간의 성과 목록이 곧 사라진 기능 목록이다
- 사용자 입장에서 이것이 뜻하는 것
- 의존성의 거버넌스를 실제로 측정하는 법
- 소진은 성격이 아니라 프로세스의 산출물이다
- 참고 자료
들어가며 — 저장소는 그대로인데 리더십이 사라졌다
2026년 8월 7일, NixOS Discourse에 Nixpkgs 코어 팀이 해산한다는 글이 올라왔습니다. qyliss가 @alyssais와 @emilazy를 대신해 작성했고, 같은 날 NixOS/org 저장소의 PR #277이 병합되면서 @NixOS/nixpkgs-core 팀 정의 자체가 삭제되었습니다.
Nixpkgs는 10만 개가 넘는 패키지를 담은 저장소입니다. 제가 2026년 8월 9일 GitHub API로 직접 세어 보니 최근 2주 남짓(2026년 7월 24일 이후) 병합된 PR이 4,468건이었습니다.
curl -s "https://api.github.com/search/issues?q=repo:NixOS/nixpkgs+is:pr+is:merged+merged:>=2026-07-24&per_page=1" \
| python3 -c "import sys,json;print(json.load(sys.stdin)['total_count'])"
# 4468
그런데 이 저장소의 위임된 기술 리더십을 맡고 있던 팀의 인원은 두 명이었습니다. 그 두 명이 물러나면서 발표문은 이렇게 씁니다. "우리 관할에 속했던 사안들은 현재 직접적인 주인이 없는 상태로 남는다."
이 글은 Nix를 쓰라거나 쓰지 말라는 이야기가 아닙니다. 여러분이 의존하는 프로젝트의 위험을 어디서 재야 하는가에 대한 이야기입니다.
버스 팩터는 지식이 아니라 권한의 수다
버스 팩터를 보통 이렇게 설명합니다. "핵심 인력 몇 명이 버스에 치이면 프로젝트가 멈추는가." 그리고 대개 지식의 문제로 해석합니다. 문서가 부족하다, 특정 모듈을 한 사람만 안다.
Nixpkgs 사례가 보여 주는 것은 다른 축입니다. Nixpkgs는 지식이 집중된 프로젝트가 아닙니다. 기여자가 수천 명이고 커미터도 계속 늘고 있습니다. 코어 팀이 10개월 동안 한 일 중 하나가 바로 커미터 위임 절차를 개혁하고 신규 커미터 19명을 온보딩한 것이었습니다.
그럼에도 팀 두 명이 빠지자 공백이 생겼습니다. 왜냐하면 그 두 명이 갖고 있던 것은 코드 지식이 아니라 결정 권한이었기 때문입니다. 발표문이 인용하는 헌법상 위임 사항은 "Nixpkgs와 관련되는 한에서의 프로젝트 방향, 의사결정, NixOS 재단 이사회와의 조율, 팀의 생성과 관리"입니다.
코드를 짤 사람은 많습니다. "이 방향으로 간다"고 말할 자격이 있는 사람은 두 명이었습니다. 이 둘은 전혀 다른 수이고, 우리는 보통 앞의 수만 셉니다.
발표문이 실제로 말하는 것
해석을 얹기 전에 원문의 사실 관계부터 정확히 옮기겠습니다.
- 팀은 10개월간 활동했습니다.
- 성과로 커미터 위임 절차 개혁과 신규 커미터 19명 온보딩, 병합 봇 확장을 통한 메인테이너 권한 강화, GitHub과의 관계 재정립 및 Enterprise Cloud 후원 확보, 보안 권고 GHSA-67f2-674w-6g63 분류 지원, 초기 자동화/AI 정책 수립을 듭니다.
- 물러나는 직접적 이유는 건강입니다. 원문은 "적극적인 기술 기여와 병행할 수 있는 가벼운 역할로 밝혀지지 않았고, 2주 전 물러나는 것이 우리 건강을 위해 필요하다는 결론에 이르렀다"고 씁니다.
- 신규 인원 모집에 "실제로 지원한 사람은 한 명"이었고 아웃리치에 대한 반응도 엇갈렸다고 밝힙니다.
- 운영 위원회에 대해서는 "헌법이 상정한 위임에 대한 본능이 제도적으로 결여되어 있으면서, 그 수준의 개별 결정을 스스로 처리할 만큼 관여하거나 응집되어 있지도 않다"고 진단합니다. 그 결과가 하위 팀에 대한 불필요한 마이크로매니지먼트와 만성적인 소통 부실이라는 것입니다.
- 마지막으로 "이 결정은 어떤 하나의 사건 때문이 아니라 오래된 패턴의 귀결"이라고 명시합니다.
여기까지가 원문입니다. Nixpkgs 자체가 멈춘다거나 개발이 중단된다는 이야기는 어디에도 없습니다. 저장소는 그대로 돌아가고 있습니다.
위임이 이름만 남을 때 무엇이 무너지나
발표문에서 가장 일반화 가능한 부분은 위임에 대한 진단입니다.
거버넌스 구조를 설계할 때 흔히 이렇게 만듭니다. 최상위에 대의 기구를 두고, 그 아래에 영역별 팀을 두고, 헌법이나 규정에 "이 영역은 저 팀에 위임한다"고 적습니다. 문서상으로는 완결됩니다.
문제는 위임이 행위라는 점입니다. 문서에 적는다고 위임되는 것이 아니라, 상위 기구가 실제로 손을 떼야 위임됩니다. 발표문이 나열하는 실패 양상이 정확히 그 지점입니다.
- 운영 위원회 구성원이 개인 의견을 말하는지 공동 입장을 대변하는지 불분명함
- 사안이 원하는 결론이 이미 붙은 채로 전달됨
- 위임 영역에 전적으로 속하는 사안을 관련 팀 없이 위원회가 직접 처리함
- 우려 제기에 대한 응답이 불충분하고 지연됨
마지막 문장이 결정적입니다. "우리가 우리 권한 범위 안에서 자율적으로 결정할 수 있다고 신뢰받고 있는지에 대한 전반적인 불확실성."
권한 없는 책임이 이렇게 생깁니다. 위임된 팀은 결과에 대한 책임을 지지만 결정의 확정성은 갖지 못합니다. 이 상태는 사람을 빠르게 소진시킵니다. 사내 플랫폼 팀이나 아키텍처 리뷰 그룹을 운영해 본 적이 있다면 낯설지 않은 구조일 것입니다.
10개월간의 성과 목록이 곧 사라진 기능 목록이다
발표문의 성과 목록을 자랑으로 읽으면 절반만 읽은 것입니다. 다르게 읽으면 지금 주인이 없어진 기능의 목록입니다.
커미터 온보딩, 병합 봇을 통한 메인테이너 권한 위임, GitHub 조직 소유권 개혁, 보안 권고 분류, 자동화/AI 정책, 에스컬레이션된 분쟁 조정.
이 중 상당수는 "평소에는 아무도 필요를 느끼지 않다가 필요해지는 순간에는 즉시 필요한" 종류의 일입니다. 보안 권고 분류가 특히 그렇습니다. 커미터 온보딩이 멈추면 몇 달 뒤 처리량으로 나타나고, 분쟁 조정이 멈추면 갈등이 스레드 길이로 나타납니다. 즉시 장애가 나지 않기 때문에 위험이 조용히 누적됩니다.
발표문 자체도 이 점을 인정합니다. 코어 팀에 조정을 요청할 수 있다는 사실이 긴장을 완화하고 합의 가능한 결론으로 이끈 사례가 많았다고 씁니다. 그 통로가 지금은 없습니다.
사용자 입장에서 이것이 뜻하는 것
그렇다면 Nixpkgs를 쓰는 팀은 무엇을 해야 할까요. 과장도 축소도 없이 정리하면 이렇습니다.
지금 당장 바뀌는 것은 없습니다. 패키지는 계속 갱신되고 채널도 계속 나옵니다.
바뀐 것은 에스컬레이션 경로입니다. 이전에는 정책 수준의 사안(예를 들어 LLM이 생성한 기여를 어떻게 다룰 것인가, 조직 소유권을 누가 갖는가)에 대해 물어볼 곳이 있었습니다. 지금은 발표문 표현대로 운영 위원회가 "언제나처럼 최종 백스톱"으로 남아 있을 뿐입니다. 백스톱은 통로가 아닙니다.
그리고 발표문에 따르면 두 사람 모두 Nixpkgs 관여를 줄일 계획이며 운영 위원회에 출마할 의사가 없습니다. 즉 이 공백은 그 자리에 다른 사람이 들어오기 전까지 유지됩니다.
실무적으로는 이렇게 대응합니다. 정책 변화에 민감한 의존성이 있다면 채널 고정과 자체 오버레이 비중을 다시 점검하고, 보안 권고를 상류 조율에만 의존하지 말고 자체 취약점 스캔 경로를 확인하고, 마이그레이션 비용을 지금 계산해서 문서에 남겨 둡니다. 지금 옮기라는 뜻이 아니라 옮겨야 할 때의 비용을 알고 있으라는 뜻입니다.
의존성의 거버넌스를 실제로 측정하는 법
스타 수는 인기 지표이지 위험 지표가 아닙니다. 대신 셀 수 있는 것들이 있습니다. 아래 명령은 실제로 동작하는 형태이고, GitHub 검색 API는 인증 없이 쓰면 분당 요청 제한이 낮으니 토큰을 붙이는 편이 낫습니다.
# 최근 90일간 병합된 PR 수 — 처리량
OWNER_REPO="NixOS/nixpkgs"
SINCE="2026-05-11"
curl -s -H "Authorization: Bearer ${GITHUB_TOKEN}" \
"https://api.github.com/search/issues?q=repo:${OWNER_REPO}+is:pr+is:merged+merged:>=${SINCE}&per_page=1" \
| python3 -c "import sys,json;print(json.load(sys.stdin)['total_count'])"
# 최근 100개 병합 PR을 실제로 병합한 사람의 분포 — 권한의 집중도
curl -s -H "Authorization: Bearer ${GITHUB_TOKEN}" \
"https://api.github.com/repos/${OWNER_REPO}/pulls?state=closed&per_page=100" \
| python3 -c "
import sys, json, collections
prs = json.load(sys.stdin)
c = collections.Counter(p['merged_by']['login'] for p in prs if p.get('merged_by'))
for who, n in c.most_common(15):
print(f'{n:4d} {who}')
print('distinct mergers:', len(c))
"
두 번째 명령이 핵심입니다. 기여자는 많은데 병합자가 소수에 집중되어 있다면, 그 소수가 곧 버스 팩터입니다. 반대로 병합자가 넓게 퍼져 있다면 개인 이탈에 대한 내성이 높습니다.
숫자로 재지 못하는 것은 문서로 확인합니다. 의사결정 기구가 문서화되어 있는가, 위임 영역이 명시되어 있는가, 분쟁을 어디에 올리는지 적혀 있는가, 그리고 최근에 실제로 그 경로가 작동한 사례가 있는가. 마지막 항목이 가장 중요한데 자동화할 수 없습니다. 이슈 트래커와 포럼을 직접 읽어야 합니다.
소진은 성격이 아니라 프로세스의 산출물이다
마지막으로 발표문에서 개인적으로 가장 인상 깊었던 대목을 옮깁니다.
발표문은 커뮤니티에 거버넌스에 대한 전반적인 불신이 있다는 점을 인정하고, 그 불신이 대립적이고 제로섬적인 갈등 방식을 부추겼다고 씁니다. 그리고 이렇게 이어집니다. 그런 방식은 리더십 공백 상태나 무응답 거버넌스를 상대로는 효과가 있을지 몰라도, 선의로 참여하려는 리더십 팀을 상대로는 소진을 만들어 낸다는 것입니다.
그 결과 "듣지 않는 쪽"이 보상받고, 거버넌스에 참여할 시간과 의지가 있는 경험 많은 기여자 풀이 더 줄어들며, 교착과 이탈에 의한 의사결정이라는 역사적 현상이 고착될 위험이 있다고 진단합니다.
이 진단은 오픈소스에 한정되지 않습니다. 사내 아키텍처 리뷰, 코드 오너 제도, 플랫폼 팀에도 그대로 적용됩니다. 위임된 팀에 결정 권한이 실제로 없고, 갈등을 해소하는 정식 경로가 없으면, 갈등은 가장 지친 사람이 먼저 나가는 방식으로 해소됩니다. 그리고 그렇게 해소된 갈등은 기록에 남지 않기 때문에 다음에 또 같은 방식으로 해소됩니다.
버스 팩터를 낮추는 일은 문서를 더 쓰는 것으로만 되지 않습니다. 누가 무엇을 확정할 수 있는지를 명확히 하고, 그 확정을 실제로 존중하는 것이 절반입니다.
참고 자료
- The Nixpkgs core team has disbanded — NixOS Discourse, 2026-08-07 (본문 인용은 전부 여기서 옮긴 것입니다)
- nixpkgs-core: disband team — NixOS/org PR #277
- NixOS Constitution
- Hacker News 토론 스레드
병합 PR 4,468건은 2026년 8월 9일에 GitHub 검색 API로 직접 조회한 값이며, 검색 API 결과는 시점에 따라 달라집니다.
Bus Factor Is Not the Number of People Who Know the Code but the Number of People Who Can Decide
- Introduction — the repository is unchanged but the leadership is gone
- Bus factor is a count of authority, not of knowledge
- What the announcement actually says
- What collapses when delegation is only a name
- The list of ten months of accomplishments is also the list of functions now gone
- What this means from a user standpoint
- How to actually measure the governance of a dependency
- Burnout is an output of process, not of personality
- References
Introduction — the repository is unchanged but the leadership is gone
On 7 August 2026, a post announcing that the Nixpkgs core team has disbanded went up on NixOS Discourse. qyliss wrote it on behalf of @alyssais and @emilazy, and on the same day PR #277 in the NixOS/org repository was merged, deleting the @NixOS/nixpkgs-core team definition itself.
Nixpkgs is a repository holding more than 100,000 packages. When I counted directly with the GitHub API on 9 August 2026, merged PRs over the previous two weeks or so (since 24 July 2026) came to 4,468.
curl -s "https://api.github.com/search/issues?q=repo:NixOS/nixpkgs+is:pr+is:merged+merged:>=2026-07-24&per_page=1" \
| python3 -c "import sys,json;print(json.load(sys.stdin)['total_count'])"
# 4468
And yet the team carrying the delegated technical leadership of this repository numbered two people. As those two stepped down, the announcement puts it this way: the matters that fell under our jurisdiction are now left without a direct owner.
This post is not an argument for or against using Nix. It is about where you should be measuring the risk of the projects you depend on.
Bus factor is a count of authority, not of knowledge
Bus factor is usually explained like this: how many key people have to be hit by a bus for the project to stop? And it is mostly interpreted as a knowledge problem. Documentation is thin; only one person understands a particular module.
What the Nixpkgs case shows is a different axis. Nixpkgs is not a project with concentrated knowledge. It has thousands of contributors and its committer count keeps growing. One of the things the core team did over ten months was exactly reforming the committer delegation process and onboarding 19 new committers.
Even so, two people leaving the team created a vacuum. Because what those two held was not code knowledge but decision-making authority. The constitutional delegation the announcement quotes is project direction, decision-making, coordination with the NixOS Foundation board, and the creation and management of teams, insofar as these relate to Nixpkgs.
There are plenty of people to write code. The people entitled to say "we are going in this direction" numbered two. These are entirely different counts, and we usually count only the first one.
What the announcement actually says
Before layering on interpretation, let me carry over the facts of the original precisely.
- The team was active for ten months.
- As accomplishments it lists reform of the committer delegation process and onboarding of 19 new committers, strengthening maintainer authority by extending the merge bot, resetting the relationship with GitHub and securing Enterprise Cloud sponsorship, supporting triage of the security advisory GHSA-67f2-674w-6g63, and establishing initial automation and AI policy.
- The direct reason for stepping down is health. The original writes that it did not turn out to be a light role compatible with active technical contribution, and that two weeks ago they reached the conclusion that stepping down was necessary for their health.
- On recruiting new members, they disclose that only one person actually applied and that responses to outreach were mixed.
- Of the steering committee, they diagnose that it institutionally lacks the instinct for delegation that the constitution assumes, while also being neither engaged nor cohesive enough to handle individual decisions at that level itself. The result, they say, is unnecessary micromanagement of subordinate teams and chronically poor communication.
- Finally, they state explicitly that this decision is not because of any single event but the culmination of a long-standing pattern.
That is the original. Nowhere is there any suggestion that Nixpkgs itself is stopping or that development is halting. The repository keeps turning as before.
What collapses when delegation is only a name
The most generalizable part of the announcement is its diagnosis of delegation.
When designing governance structures, this is a common shape. Put a representative body at the top, put per-area teams beneath it, and write in the constitution or the rules that "this area is delegated to that team." On paper it is complete.
The problem is that delegation is an act. It is not delegated by writing it in a document; it is delegated when the higher body actually takes its hands off. The failure patterns the announcement enumerates are exactly that point.
- Unclear whether a steering committee member is stating a personal opinion or representing a collective position
- Matters delivered with the desired conclusion already attached
- The committee handling directly, without the relevant team, matters that fall entirely within a delegated area
- Responses to raised concerns being insufficient and delayed
The last sentence is decisive: a general uncertainty about whether we are trusted to decide autonomously within the scope of our own authority.
This is how responsibility without authority comes about. The delegated team bears responsibility for outcomes but does not hold finality over decisions. That state burns people out quickly. If you have ever run an internal platform team or an architecture review group, the structure will not feel unfamiliar.
The list of ten months of accomplishments is also the list of functions now gone
Reading the accomplishments list in the announcement as a boast is reading only half of it. Read differently, it is the list of functions that now have no owner.
Committer onboarding, delegation of maintainer authority through the merge bot, reform of GitHub organization ownership, security advisory triage, automation and AI policy, and mediation of escalated disputes.
A good number of these are the kind of work that nobody feels a need for on ordinary days but that is needed immediately the moment it is needed. Security advisory triage especially so. If committer onboarding stops, it shows up as throughput a few months later; if dispute mediation stops, it shows up as thread length. Because nothing fails immediately, risk accumulates quietly.
The announcement itself acknowledges this point. It writes that in many cases the mere fact that the core team could be asked to mediate defused tension and led to conclusions everyone could agree on. That channel does not exist right now.
What this means from a user standpoint
So what should a team using Nixpkgs do? Laid out without exaggeration or minimization, it is this.
Nothing changes right now. Packages keep getting updated and channels keep shipping.
What has changed is the escalation path. Previously there was somewhere to ask about policy-level matters — for example, how to handle LLM-generated contributions, or who holds organization ownership. Now, in the announcement wording, the steering committee remains only as the final backstop, as always. A backstop is not a channel.
And according to the announcement, both people plan to reduce their involvement in Nixpkgs and have no intention of standing for the steering committee. That is, this vacuum persists until someone else takes that seat.
Practically, respond like this. If you have dependencies sensitive to policy change, re-examine channel pinning and the share of your own overlays; do not rely on upstream coordination alone for security advisories but confirm your own vulnerability scanning path; and calculate migration cost now and write it into a document. This does not mean move now. It means know what it would cost when you have to move.
How to actually measure the governance of a dependency
Star count is a popularity metric, not a risk metric. There are, however, things you can count. The commands below are in working form, and since the GitHub search API has a low per-minute request limit when used unauthenticated, attaching a token is advisable.
# merged PRs over the last 90 days — throughput
OWNER_REPO="NixOS/nixpkgs"
SINCE="2026-05-11"
curl -s -H "Authorization: Bearer ${GITHUB_TOKEN}" \
"https://api.github.com/search/issues?q=repo:${OWNER_REPO}+is:pr+is:merged+merged:>=${SINCE}&per_page=1" \
| python3 -c "import sys,json;print(json.load(sys.stdin)['total_count'])"
# distribution of who actually merged the last 100 merged PRs — concentration of authority
curl -s -H "Authorization: Bearer ${GITHUB_TOKEN}" \
"https://api.github.com/repos/${OWNER_REPO}/pulls?state=closed&per_page=100" \
| python3 -c "
import sys, json, collections
prs = json.load(sys.stdin)
c = collections.Counter(p['merged_by']['login'] for p in prs if p.get('merged_by'))
for who, n in c.most_common(15):
print(f'{n:4d} {who}')
print('distinct mergers:', len(c))
"
The second command is the crucial one. If contributors are many but merging is concentrated in a few hands, those few are the bus factor. Conversely, if merging is spread wide, tolerance for individual departures is high.
What cannot be measured in numbers, check in documents. Is the decision-making body documented? Are the delegated areas specified? Is it written down where disputes are escalated? And is there a recent case where that path actually worked? The last item matters most and cannot be automated. You have to read the issue tracker and the forum yourself.
Burnout is an output of process, not of personality
Finally, let me carry over the passage from the announcement that struck me most personally.
The announcement acknowledges that there is a general distrust of governance in the community, and writes that this distrust encouraged an adversarial, zero-sum mode of conflict. It then continues: that mode may be effective against a leadership vacuum or unresponsive governance, but against a leadership team trying to engage in good faith it manufactures burnout.
The consequence, it diagnoses, is that the side that does not listen is rewarded, that the pool of experienced contributors with the time and will to participate in governance shrinks further, and that there is a risk of entrenching the historical phenomenon of decision-making by deadlock and attrition.
This diagnosis is not limited to open source. It applies just as directly to internal architecture review, code owner schemes, and platform teams. When a delegated team does not actually hold decision authority, and there is no formal path for resolving conflict, conflict gets resolved by the most exhausted person leaving first. And because conflict resolved that way leaves no record, the next one gets resolved the same way.
Lowering bus factor is not achieved by writing more documentation alone. Making clear who is allowed to finalize what, and then actually respecting that finality, is half of it.
References
- The Nixpkgs core team has disbanded — NixOS Discourse, 2026-08-07 (all quotations in the body were carried over from here)
- nixpkgs-core: disband team — NixOS/org PR #277
- NixOS Constitution
- Hacker News discussion thread
The figure of 4,468 merged PRs is a value queried directly through the GitHub search API on 9 August 2026, and search API results vary depending on when they are run.