2P by GN⁺ | ★ favorite | 댓글 1개
  • Debian의 독특한 관행은 30년 된 대규모 범용 운영체제가 품질, 보안, 자유 소프트웨어 원칙을 오래 유지하기 위해 쌓아온 선택에서 나옴
  • 특정 용도 배포판이 아니라 대부분의 사람과 목적에 맞는 범용 배포판을 지향하며, 패키지 포함 여부는 자유 소프트웨어성과 유지 품질이 핵심 기준임
  • 헌법, 사회계약, DFSG는 초기의 느슨한 운영이 한계를 드러낸 뒤 생긴 장치로, 민주적 의사결정과 제한된 리더 권한을 제도화함
  • 자체 포함 빌드와 번들 라이브러리 회피는 외부 저장소나 중복 의존성에 휘둘리지 않고 긴급 보안 수정, 재빌드, 새 아키텍처 이식을 가능하게 하는 유지보수 전략
  • 회원 심사, 릴리스 코드명, 느린 변화 속도는 수천 개 패키지와 수천만 대 설치 기반을 가진 프로젝트가 신뢰, 미러링 비용, 합의 비용을 관리하는 방식임

Debian이 지향하는 운영체제

  • Debian은 고품질, 보안, 범용성을 갖춘 운영체제를 지향하며, 활발히 쓰이는 대부분의 컴퓨터에서 동작하는 자유·오픈소스 소프트웨어만으로 구성되기를 원함
  • 범용 운영체제라는 목표는 Debian이 대부분의 사람에게 대부분의 목적에서 적합해야 한다는 뜻임
    • 모든 상황에 맞을 수는 없지만, 지향점으로 삼을 만한 목표임
    • 데스크톱, 서버, 게임, 과학 연구처럼 특정 목적에 집중하는 배포판과는 다른 결정을 낳음
  • 패키징 여부는 소프트웨어의 용도보다 다음 기준에 더 크게 좌우됨
    • 소프트웨어가 자유 소프트웨어인지
    • Debian이 고품질 패키지로 유지할 수 있는지

헌법과 거버넌스

  • Debian은 명시적으로 민주적인 오픈소스 조직에 가까움
    • 의사결정 절차가 잘 정의돼 있음
    • 매년 Debian Project Leader를 선출함
    • 프로젝트 리더 권한은 엄격히 제한되며, 일반적으로 리더십과 연결되는 많은 권한이 다른 사람에게 명시적으로 위임됨
  • 초기 Debian Project Leader들은 스스로 물러나기 전까지 사실상 전권을 가진 독재자에 가까웠음
  • 한 프로젝트 리더가 선을 넘은 뒤 반발로 물러났고, 그 결과 민주주의가 도입됨
  • Debian은 공식 헌법으로 프로젝트 규칙을 정의함
  • 현재의 규칙 체계는 역사 초기에 더 적은 규칙더 적은 관료제가 Debian에서 잘 작동하지 않았던 경험에서 비롯됨

사회계약과 Debian Free Software Guidelines

  • 1990년대 중반에는 “open source”라는 용어가 도입되기 전이었고, “free software”는 Free Software Foundation이 정의했지만 해석 여지가 많았음
  • Debian은 더 명확한 규칙을 원해 Debian Free Software Guidelines(DFSG) 를 만들었고, 이를 사회계약의 일부로 삼음
  • 사회계약은 Debian이 스스로와 세계에 대해 무엇이고 무엇을 하는지 약속하는 기반 문서임
    • DFSG는 그 일부임
    • Debian 헌법은 사회계약을 의도적으로 바꾸기 어렵게 만듦
  • 더 세부적인 규칙은 Debian이 무엇을 받아들일지 명확하게 만들고 관련 논의를 단순화함
  • DFSG는 나중에 Open Source Definition의 기반이 됨

자체 포함 빌드 원칙

  • Debian은 자체 포함(self-contained) 원칙을 고집함
    • Debian이 패키징한 모든 것은 Debian 안의 의존성만 사용해 빌드돼야 함
    • Debian 안의 모든 것은 Debian이 직접 빌드해야 함
  • 이 원칙은 추가 작업을 많이 만들 수 있음
    • 현재의 프로그래밍 언어 도구들은 빌드 시점에 온라인 저장소에서 의존성을 내려받는 방식을 가정하는 경우가 많음
    • Debian에서는 그런 방식이 허용되지 않음
  • 핵심 이유는 외부 의존성이 나중에 사라질 수 있기 때문임
    • Debian은 서드파티 패키지 저장소를 통제하지 않음
    • 패키지나 저장소 전체가 사라지면 Debian이 해당 패키지를 다시 빌드하지 못할 수 있음
  • 새 컴파일러 업그레이드, 보안 문제 수정, 새 아키텍처 이식, 버그 수정 반영에는 재빌드가 필요함
  • 자체 포함이 아니면 긴급 보안 수정 시점에 수만 개 패키지와 그 의존성이 모두 사용 가능해야 하므로, Debian은 모든 의존성을 패키징하는 쪽을 선택함

번들 라이브러리를 피하는 이유

  • Debian은 패키징 대상 소프트웨어에 포함된 라이브러리 복사본이나 기타 의존성 복사본 사용을 피함
  • 많은 업스트림 프로젝트는 의존성을 함께 묶거나 vendor 처리하는 편을 더 쉽게 여김
  • Debian 입장에서는 인기 라이브러리의 복사본이 여러 개 생길 수 있음
    • 해당 라이브러리에 보안 문제나 심각한 문제가 생기면 모든 복사본을 찾아 고쳐야 함
    • 긴급 보안 문제에서는 이 작업이 귀중한 시간을 낭비하게 만듦
  • zlib 사례에서 Debian은 아카이브 안에 번들된 zlib 복사본 수십 개를 발견했고, Debian 패키지들이 Debian에 패키징된 zlib 버전만 쓰게 만드는 데 상당한 노력을 들임
  • 그래서 Debian은 긴급 상황이 오기 전에 패키징 단계에서 미리 작업해, Debian 안의 패키지가 Debian에 패키징된 라이브러리 버전을 쓰게 함
  • 업스트림 개발자는 자신들이 검증한 번들 버전만 다루고 싶어하는 경우가 있어, 이 방식은 때때로 Debian과 마찰을 낳음

회원 심사 과정

  • Debian은 운영체제로서 규모와 복잡성이 크고 널리 사용되기 때문에 구성원을 신뢰해야 함
  • 특히 새 패키지를 업로드하는 사람에 대한 신뢰가 중요함
  • 1990년대 Linux의 기술적 한계 때문에 모든 Debian 패키지는 설치 과정에서 전체 root 접근 권한을 가짐
    • 모든 Debian 개발자는 잠재적으로 Debian이 실행되는 어떤 머신에서든 root 사용자가 될 수 있음
    • Debian이 수천만 대의 머신에서 실행된다는 점에서 이는 큰 권한임
  • 새 구성원은 여러 방식으로 검증됨
    • 이상적으로는 Debian 개발 커뮤니티에 충분히 오래 참여해 다른 사람들에게 알려져 있어야 함
    • 커뮤니티 안에서 신뢰를 쌓아야 함
  • 이 과정은 Debian에 참여하려는 사람, 특히 더 작은 오픈소스 프로젝트에 익숙한 사람에게 꽤 답답할 수 있음

릴리스 코드명

  • Debian은 각 주요 릴리스에 코드명을 붙임
  • 이 관행은 원래 Debian 패키지 아카이브 미러링 비용을 낮추기 위해 생김
  • 1990년대 중반 Debian 1.0 릴리스를 준비할 때는 코드명을 쓰지 않고 버전명으로 디렉터리를 만들었음
    • 새 릴리스 개발에는 시간이 걸리므로 “1.0” 디렉터리가 미리 만들어짐
    • 한 CD-ROM 출판사가 Debian 1.0이 완성되기 전에 “1.0”이라고 표시한 디스크를 조기 대량 생산함
    • 그 결과 Debian 1.0 CD-ROM을 받은 사람들은 실제 1.0이 아닌 것을 받게 됨
  • 단순한 해결책은 “1.0-not-released” 같은 디렉터리에서 준비한 뒤 릴리스 완료 후 “1.0”으로 이름을 바꾸는 것이었음
  • 하지만 디렉터리 이름이 바뀌면 모든 미러가 릴리스를 다시 내려받아야 했고, 당시 Debian 규모에서는 비용이 컸음
    • 당시 규모는 “수백 개 패키지”와 “수십 MB” 수준이었음
  • 이후 Debian 아카이브에는 pool 구조가 추가됨
    • 모든 릴리스의 파일이 같은 디렉터리 트리에 있고, 메타데이터 파일이 각 릴리스에 속한 파일을 지정함
    • 이 구조는 미러링을 더 쉽게 만듦
  • 현재는 코드명을 버리고 버전만 쓰는 것도 가능할 수 있지만, Debian이 관심을 가질지는 알 수 없음

Debian이 천천히 변하는 이유

  • Debian은 매우 큰 프로젝트이며, 큰 프로젝트는 천천히 변함
  • 많은 패키지에 영향을 주는 변화는 수백 명의 자원봉사자가 작업해야 할 수 있어 빠르게 진행되기 어려움
  • 일부 작업은 소수의 사람이 처리할 수 있고, Debian에는 이를 가능하게 하는 절차가 있음
    • 예로 GNU C compiler의 새 버전이 업로드되면, 다른 패키지에서 필요한 수정 사항을 찾는 작업은 보통 소수의 사람이 할 수 있음
  • 변화가 오래 걸리는 이유는 합의 형성이 필요하기 때문이기도 함
    • 합의에는 광범위한 논의가 필요함
    • 이런 논의는 시간이 걸리고, 드물게만 단축될 수 있음
  • Debian 개발자들은 기술적 결정에서 보수적인 편임
    • 대규모 변경을 요구하지 않는 해법을 선호하는 경우가 많음

댓글과 토론

Hacker News 의견들
  • Self-contained번들 라이브러리 없음은 생태계 일부가 너무 번거롭다고 외면한 중요한 개념임
    그 결과 생기는 문제들을 다시 겪고 나서야 “소프트웨어 공급망” 같은 용어를 붙였고, Debian은 애초부터 이런 문제를 피하는 방식으로 해왔기 때문에 같은 고통을 덜 겪음

    • 목표에 따라 두 접근 모두 말이 됨
      여러 배포판과 운영체제에 걸쳐 소프트웨어를 배포하려면 의존성 번들링이 합리적이고, 배포판을 유지보수하는 입장에서는 보안 패치를 한 번만 적용하면 되는 공유 라이브러리가 분명 더 좋음
    • Debian도 전혀 고통받지 않는 건 아니고, 현재 구조에서 인력 부족과 근본적인 확장 한계에 부딪힌 게 분명해 보임
      운영체제 수준에서는 Nix와 Silverblue, 애플리케이션 수준에서는 Snaps와 Flatpak 같은 흐름이 나오고 있고, 해결책은 모르겠지만 Debian도 곧 뭔가 해야 할 듯함
    • 보통 애플리케이션 개발자는 특정 라이브러리 버전으로만 테스트함
      다른 버전을 쓰려면 신중히 테스트하고 발견된 버그를 고쳐야 하는데 Debian에 그럴 자원이 있는지 모르겠고, 결국 검증되지 않은 라이브러리 조합을 쓰며 잘 되길 바라는 셈인데 그렇게 되진 않을 것 같음
    • self-contained라는 점도 항상 맞지는 않음
      오래전부터 linux-firmware 저장소에서 가져온 공개 펌웨어는 소스에서 빌드하지 않고 바이너리만 배포했고, 아카이브 안에도 비슷한 사례가 더 있을 것임
      Debian이 모든 tarball에서 생성 파일을 체계적으로 제거하고 재생성하는 것도 아니며, 특히 AI/ML 쪽은 학습 데이터조차 못 얻을 가능성이 크고 학습 비용도 감당하기 어려움
    • Debian에도 상위 프로젝트들이 Windows/macOS 등을 위해 라이브러리를 번들하거나 포크하면서 생긴 임베디드 코드 복사본이 많음
      https://wiki.debian.org/EmbeddedCopies
  • 몇몇 오픈소스 소프트웨어 조직은 단순히 조금 대단한 정도가 아니라, 전형적인 기업 모델보다 사람들이 협업하는 방식으로 훨씬 우월할 수 있음을 보여줄 만큼 놀라움
    Debian을 아주 오래 써왔지만 조직에 대해서는 잘 몰랐고, 이 글이 좋은 소개였음
    IETF도 인터넷을 거의 만들어낸 조직인데 회원도 없고 그냥 굴러가며, 이런 조직이 잘 알려져 있지 않다는 점이 놀라움
    기업 세계가 인터넷 동작 방식을 장악하려고 IETF와 경쟁했던 프로토콜 전쟁도 흥미로움: https://en.wikipedia.org/wiki/Protocol_Wars
    OSI가 TCP 같은 인터넷의 일부를 X.프로토콜로 대체하겠다는 프로젝트를 매달 발표하던 시절이 있었지만, 살아남아 번성한 건 X.509 정도였음
    이런 민주적 협업 조직이 전통적 기업 모델보다 실제로 훨씬 우월한지 궁금함
    경제 규모로 보면 IETF나 Debian의 수입은 기업에 비할 수 없지만, 기여자와 창작자 입장에서는 “누가 이득을 보는가?”를 묻게 되고, 기여자들은 근근이 버팀
    IETF나 Debian식 모델이 기업 모델과 경쟁할 수 있는지 실험해볼 가치가 있어 보이고, 프로토콜 전쟁에서는 한 번 실제로 먹혔음

    • 이를 “기업 세계가 IETF와 경쟁했다”고 보기보다는 정부가 권력을 강제하려 했다고 보는 편이 맞음
      IETF 작업반에는 상호운용성을 위해 협업하려는 기업 벤더 엔지니어가 많은 반면, ISO는 전통적인 하향식 정부 주도 조직에 가까움
  • Ubuntu를 13년쯤 쓰다가 올해 Debian으로 옮겼고 꽤 마음에 듦
    예전에는 전역 업데이트 방식의 패키징 모델이 무슨 일이 일어나는지 알기 어렵고 가끔 버전 충돌도 생겨서 기술적으로 가장 탄탄한 방식은 아니라고 봤음
    하지만 시간이 지나며 Debian의 안정성과 프로젝트의 선의를 높이 평가하게 됨
    때로는 기술적 우수성보다 프로젝트의 목적과 목표가 더 중요함

    • 다른 배포판을 한동안 써보다가도 결국 Debian으로 돌아오게 됨
      설치 후 데몬이 자동 시작되는 방식 같은 기술적 선택에는 불만이 있지만, 패키지와 업그레이드 전반의 일관성이 주는 이점이 더 큼
      Apt도 정말 훌륭한 패키지 관리자임
      기본 상태에서도 빠르고, 시스템은 stable로 두면서 Nginx만 backports에서 새 버전으로 쓰는 식의 꽤 까다로운 시나리오도 지원함
      신경 쓰는 한두 패키지만 새 기능을 받고, 나머지는 안정적이고 지루하게 유지할 수 있다는 느낌이 좋음
    • 서버 운영체제를 Ubuntu에서 Debian으로 바꿨음
      주된 이유는 지루하고 오래됐지만 잘 동작하는 기술을 쓰기 때문이고, netplan, snapd, systemd-resolver를 더 이상 안 봐도 됨
    • 어떤 버전 충돌을 겪는지 궁금함
      Sid에서 가져오거나 libc6 업그레이드 같은 재미있는 일을 하지 않는 한, 전부 apt로 설치했다면 버전 충돌은 보통 보이지 않아야 함
  • LIW가 큰 부분 하나를 빠뜨렸음: Debian은 자원봉사 조직이라서, 자원봉사자가 하기 싫은 일을 누구도 강제로 시킬 수 없음

    • 설명만 보면 Debian 조직은 아나키스트적 조직에 가까워 보임
      강요받지 않은 사람들이 느슨하게 순환하는 민주주의 구조를 만들어 의사결정을 하고, 신중한 자원 사용에서 나오는 자급성이 조직의 핵심으로 보임
    • 또 다른 큰 부분도 빠졌음: 결국 systemd 채택을 둘러싸고 벌어진 갈등임
      내게는 그 갈등이 “Debian이란 무엇인가”라는 개념을 영구적으로 바꿨고, 그게 좋았는지 나빴는지는 누구 말을 듣느냐에 따라 달라짐
    • 자원봉사자에게 큰 자유가 있는 것처럼 들리지만 실제로는 그렇지 않음
      이런 조직에서도 다른 사람들이 하라는 대로 하지 않으면 당연히 문밖으로 나가게 됨
  • 가끔 돈 걱정이 전혀 없을 만큼 큰돈을 갖게 되는 상상을 함
    그럴 때 어떤 오픈소스 프로젝트에 기부할지 늘 계획해보는데, Debian은 항상 첫 후보 몇 곳에 들어감
    이제 돈만 있으면 됨, 물론 그동안에도 Debian에는 기부하고 있음

  • Debian은 훌륭할 수 있지만 드라이버 지원 문제가 있고, 이를 소극적으로만 인정하는 듯함
    https://www.reddit.com/r/debian/comments/paxj85/why_debian_w...
    “일부 사용자가 Debian Free Software Guidelines에 맞지 않는 프로그램을 필요로 한다는 점을 인정한다. 이런 소프트웨어를 위해 FTP 아카이브에 contrib와 non-free 영역을 만들었다.”
    1~2년 전 몇 대의 머신에서 Debian을 돌렸는데 WiFi 업데이트가 들어오면서 먹통이 됐고, 롤백 등을 살펴보다가 그냥 Ubuntu, 실제로는 Kubuntu로 바꿨더니 잘 동작하고 문제가 없었음

    • “소극적으로만” 인정한다기엔 이미 꽤 구체적인 해결책을 마련해 둔 것처럼 보임
      Debian 12는 자유 소프트웨어 순수주의자들이 하드웨어 사용을 위해 비자유 드라이버만큼은 양보할 수 있도록 전용 non-free-firmware 저장소까지 만들었음
    • 이제는 그 멍청한 정책을 완화해서 기본 ISO에 비자유 드라이버가 포함됨
      이미 설치된 시스템이라면 non-free 저장소를 켜고 linux-firmware, 또는 하드웨어에 맞는 더 구체적인 firmware-* 패키지를 설치하면 해결될 것임
  • 최초 릴리스 시절 Purdue에서 Ian Murdock과 함께 일했음
    그는 시스템 관리자이자 개발자였고, 나는 도서관 웹 디자이너였음
    그는 GNU/Linux 방식과 “말할 자유로서의 자유” 소프트웨어를 진심으로 믿었음
    초기 동력은 패키징과 패키지 관리의 어려움에서 나왔고, 아마 이것이 그의 가장 큰 기여일 것임
    Network-of-Workstations, 즉 NOW라는 P2P 인프라 비슷한 구상에도 열정을 가졌지만 제대로 자리 잡히진 못했음
    그가 넘겨준 Bruce Perens가 글에서 말하는 권위주의적 리더임
    나는 그를 좋아하고, Linus Torvalds 같은 올드가드식 관리 스타일인데, 자원봉사자가 많은 크고 복잡한 프로젝트에서는 그런 스타일이 먹힘
    예전 Linux와 Debian 시절은 정말 즐거웠고, 나는 다른 사람들만큼 깊게 빠지진 않았지만 그 시절이 그리움
    요즘은 돈 냄새 나는 사람들이 너무 많이 들어왔고, 뭐 그런 법임
    Ian의 선언문이 모든 걸 설명함: https://www.debian.org/doc/manuals/project-history/manifesto...

    • Bruce Perens를 둘러싼 논란이 무엇인지 설명해줄 수 있으면 좋겠음
      이야기를 들어본 적이 없고 Google도 도움이 안 됨
    • Debian 이후 Murdock에게 무슨 일이 있었던 건지 궁금함
      물러난 뒤 사망할 때까지의 행보가 꽤 불안정해 보임
    • copyleft가 아닌 대안들이 많이 자리 잡고, ChromeOS와 Android처럼 Linux 커널만 쓰고 사용자 공간은 완전히 다른 시스템들이 있는 상황이라, 우리 세대가 지나가면 현재 형태의 Linux는 오래 남지 않을 거라고 굳게 믿음
    • 1994년에 인터넷에 올라온 글을 읽는 건 드문 일임
      나보다도 오래된 글임
  • Debian은 Toyota 같음
    믿을 만하지만 지루하고, 게다가 자원봉사자들이 만듦

  • Debian 정책 때문에 실제 버전이 아니라 많이 제한된 RetroArch 버전이 제공되기도 함
    RetroArch에는 “Core Updater”라는 자체 패키지 관리 기능이 있어서 에뮬레이터를 라이브러리 파일 형태로 다운로드하고 설치하는데, Debian은 이것이 전체 패키지 관리자 시스템을 우회한다는 이유로 금지함
    다만 Debian 소스 패키지의 의존성을 설치한 뒤 원본 소스 코드를 빌드하면 전체 기능이 있는 RetroArch를 직접 빌드할 수 있음

    • Debian은 미디어 센터 PC에는 다소 맞지 않음
      Kodi와 RetroArch를 돌리려다 어렵게 배웠지만, 그 외에는 훌륭한 운영체제임
    • Debian에서 KDE Discover와 snapd는 기본적으로 제3자 “스토어”에서 이것저것 잘 설치하는데, RetroArch만 문제가 됐다는 건 이상함
    • RetroArch가 Flatpak을 제공하므로 대부분은 큰 문제가 아님
  • 개인적으로 Debian의 원칙과 안정성 때문에 좋아하고 사용함
    다른 배포판 사용자나 몇몇 상위 프로젝트에서 Debian이 패키지를 “수정한다”고 불평하는 걸 들었음
    정말 그런지, 그렇다면 분명 좋은 이유가 있을 텐데 설명을 듣고 싶음

    • 패치에는 주로 세 종류가 있음
      첫째, 소프트웨어가 Debian이 원하는 방식으로 동작하게 만드는 패치임: 설정은 /etc/에 저장하고, 실행 중 추가 다운로드를 하지 않으며, 번들 라이브러리 대신 시스템 라이브러리를 쓰는 식임
      둘째, 보안 백포트
      Debian은 릴리스 시 기능을 고정하고 보안 업데이트만 제공하는데, 요즘 많은 소프트웨어는 보안 수정도 새 기능과 함께 새 릴리스에 묶어냄
      이 두 종류가 합쳐지면 Debian의 1.2와 “진짜” 1.2 사이 차이가 커지고, 버그 보고 처리가 어려워짐
      예를 들어 1.2-Debian의 버그 보고를 받지만 상위 프로젝트는 갱신된 라이브러리 묶음과 함께 “진짜” 1.4만 지원하는 식임
      셋째는 요즘은 많이 사라진 방식인데, Debian이 소프트웨어를 개선할 수 있다고 판단해 패치하는 경우임
      이로 인해 SSH 키에서 난수성이 제거되는 같은 문제가 생기기도 했음: https://github.com/g0tmi1k/debian-ssh
    • 소프트웨어 개발 방식은 크게 두 가지임
      하나는 Chrome처럼 버그 수정 릴리스가 따로 없다시피 하고 새 버전에 버그 수정이 포함되는 점진적 버전 방식임
      다른 하나는 주 버전 중심 방식으로, 의미적 버전 관리처럼 버전 1과 2가 있고, 버전 2 이후에도 버전 1에 버그 수정만 적용한 1.1이 나오는 식임
      Debian은 기본적으로 두 번째 방식에서만 잘 동작함
      API 안정성을 유지하기 때문에 첫 번째 방식으로 개발된 소프트웨어와는 맞지 않음
      이를 우회하려고 Debian은 버전 3의 “수정”을 버전 1로 백포트해 자체 1.debian-2를 만듦
      문제는 이제 상위 프로젝트가 한 번도 릴리스한 적 없는 동작에 대한 버그를 받게 된다는 점임
      Debian이 그렇게 할 자유는 있지만, 상위 프로젝트도 Debian이 떠안기는 추가 작업량에 불만을 가질 자유가 있음
    • Debian은 사용자 우선 철학과 패키지 간 통합을 중시함
      필요하면 그 기대에 맞지 않는 상위 프로젝트를 패치하고, 바로 그렇게 할 수 있다는 점이 자유 소프트웨어의 핵심임
    • 항상 좋은 건 아님
      https://www.debian.org/security/2008/dsa-1571를 보면 됨
    • 패치를 적용하면 변경을 만드는 비용이 커짐