Skip to content
Snippets Groups Projects

Master

1 file
+ 37
35
Compare changes
  • Side-by-side
  • Inline
+ 37
35
# The Cathedral and the Bazaar
- # The Cathedral and the Bazaar
Copyright © 2000 Eric S. Raymond
@@ -14,7 +14,6 @@ $Date: 2020/10/08 09:02:14 $
### 문서이력
* 6조 201723272 안창희
* merge version 3.0 from http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html
* KLDP 번역 2011/02/08 버전을 병합함
@@ -254,21 +253,22 @@ Without ever having to discuss it, Carl and I knew we had a common goal of havin
## 일찍, 그리고 자주 발표하라.
(공민정)
Early and frequent releases are a critical part of the Linux development model. Most developers (including me) used to believe this was bad policy for larger than trivial projects, because early versions are almost by definition buggy versions and you don't want to wear out the patience of your users.
일찍, 그리고 자주 발표하는 것은 리눅스 개발 모델의 중요한 부분이다. 대부분의 개발자들은 (필자를 포함하여) 아주 사소한 프로젝트가 아니라면 이런 정책은 나쁜 것이라고 생각했다. 초기버전들은 예외없이 버그가 많고, 개발자라면 사용자들의 인내심을 시험하고 싶지는 않기 때문이다.
일찍, 그리고 자주 발표하는 것은 리눅스 개발 모델의 중요한 부분이다. 대부분의 개발자들은 (필자를 포함하여) 아주 사소한 프로젝트가 아니라면 이런 정책은 나쁜 것이라고 생각했다. 거의 대부분의 초기버전들은 버그가 많고, 개발자라면 사용자들의 인내심을 시험하고 싶지는 않을 것이기 때문이다.
This belief reinforced the general commitment to a cathedral-building style of development. If the overriding objective was for users to see as few bugs as possible, why then you'd only release a version every six months (or less often), and work like a dog on debugging between releases. The Emacs C core was developed this way. The Lisp library, in effect, was not—because there were active Lisp archives outside the FSF's control, where you could go to find new and development code versions independently of Emacs's release cycle [QR].
이런 믿음이 성당건축 스타일의 개발을 더 선호하게 만들었다. 만일 가장 중요한 목표가 사용자들로 하여간 가능한 한 적은 버그를 발견하게 만드는 것이라면 6 개월에 한 번씩 (혹은 그보다 더 늦게) 발표하면서 그동안 죽어라고 일하는 편이 나을 것이다. Emacs C 코어는 이런 식으로 개발되었다. Lisp 라이브러리는 그렇지 않았다. Emacs 의 발표주기와 관계없이 언제든 새로운 개발 코드 버전을 찾을 수 있으며, FSF 의 통제권 밖에 있는 Lisp 라이브러리들이 있었기 때문이다.
이런 믿음이 개발자들로 하여금 성당건축 스타일의 개발을 더 선호하게 만들었다. 만일 사용자들이 가능한 버그를 맞닥뜨리지 않도록 하는 것이 가장 중요한 목표라면, 6개월에 한 번씩 (혹은 그보다 더 늦게) 발표하면서 그동안 죽도록 디버깅 하는 편이 나을 것이다. Emacs C 코어는 이런 식으로 개발되었다. Lisp 라이브러리는 그렇지 않았다. Lisp 라이브러리는 FSF의 통제를 받지않는 Lisp 아카이브가 있었기 때문에, Emacs의 릴리스 주기와 관계없이 새로운 개발 코드 버전을 찾을 수 있다.
The most important of these, the Ohio State Emacs Lisp archive, anticipated the spirit and many of the features of today's big Linux archives. But few of us really thought very hard about what we were doing, or about what the very existence of that archive suggested about problems in the FSF's cathedral-building development model. I made one serious attempt around 1992 to get a lot of the Ohio code formally merged into the official Emacs Lisp library. I ran into political trouble and was largely unsuccessful.
이들 중 가장 중요한 아카이브는 오늘날 대형 리눅스 아카이브들의 정신과 많은 기능들을 이미 가지고 있었던 오하이오 주의 elisp 아카이브였다. 하지만 우리가 하고 있는 일에 대해, FSF 의 성당건축 개발모델의 문제점들에 대해 그 아카이브의 존재가 무엇을 제시하는지에 대해 우리들 중 소수만이 진지하게 생각하고 있었다. 나는 1992년에 오하이오 코드를 공식적인 Emacs Lisp 라이브러리에 정식으로 병합시키려는 시도를 했으나 정치적인 문제에 부딪쳤고, 큰 실패를 겪었다.
이들 중 가장 중요한 아카이브는 오늘날 대형 리눅스 아카이브들의 정신과 많은 기능들을 이미 가지고 있었던 오하이오 주의 elisp 아카이브였다. 하지만 우리들 중 실제로 우리가 하고 있는 일에 대해서나 그 아카이브의 존재가 FSF 의 성당건축 개발모델의 어떤 문제점을 제시하는지에 대해 진지하게 생각해보는 사람은 거의 없었다. 나는 1992년에 오하이오 코드를 공식적인 Emacs Lisp 라이브러리에 정식으로 병합시키려는 시도를 했으나 정치적인 문제에 부딪쳤고, 큰 실패를 겪었다.
But by a year later, as Linux became widely visible, it was clear that something different and much healthier was going on there. Linus's open development policy was the very opposite of cathedral-building. Linux's Internet archives were burgeoning, multiple distributions were being floated. And all of this was driven by an unheard-of frequency of core system releases.
1년 후에, 리눅스가 널리 알려지기 시작했고, 무언가 다르면서도 훨씬 바람직한 일이 일어나고 있다는 것이 확실해 보였다. 리누스의 열린 개발정책은 성당건축과 완전히 반대되는 것이었다. 선사이트와 tsx-11 아카이브가 싹트고 있었고, 다중배포방식이 퍼지기 시작했다. 그리고 이 모든 것이 이전의 어느 소프트웨어보다 자주 릴리즈되는 코어시스템에 의해 주도되고 있었다.
그러나 1년 후에 리눅스가 널리 알려지게 되면서, 거기서 뭔가 다르면서도 훨씬 바람직한 일이 일어나고 있다는 것이 확실해 보였다. 리누스의 열린 개발정책은 성당건축과 완전히 반대되는 것이었다. 선사이트와 tsx-11 아카이브가 싹트고 있었고, 다중배포방식이 퍼지기 시작했다. 그리고 이 모든 것이 이전의 어느 소프트웨어보다 자주 릴리즈되는 코어시스템에 의해 주도되고 있었다.
(김한성)
Linus was treating his users as co-developers in the most effective possible way:
@@ -277,87 +277,89 @@ Linus was treating his users as co-developers in the most effective possible way
7. Release early. Release often. And listen to your customers.
7. 일찍 발표하고 자주 발표하라. 그리고 사용자들의 소리에 귀를 기울이라. (Release early. Release often. And listen to your customers)
   7. 일찍 발표하고 자주 발표하라. 그리고 사용자들의 소리에 귀를 기울이라. (Release early. Release often. And listen to your customers)
Linus's innovation wasn't so much in doing quick-turnaround releases incorporating lots of user feedback (something like this had been Unix-world tradition for a long time), but in scaling it up to a level of intensity that matched the complexity of what he was developing. In those early times (around 1991) it wasn't unknown for him to release a new kernel more than once a day! Because he cultivated his base of co-developers and leveraged the Internet for collaboration harder than anyone else, this worked.
리누스의 혁신은 그가 이렇게 했다는 점 보다는 (그 비슷한 것이 오랫동안 유닉스 세계의 전통이었) 그가 개발하고 있던 리눅스 커널의 복잡성에 비견될만한 수준으로까지 끌어올렸다는 있다. 초기에 (1991년 경에) 그는 하루에 한 번 이상 새로운 커널을 발표하기까지 했다. 리누스가 공동개발자들이라는 자신의 기반을 잘 만들었고, 인터넷이라는 지렛대를 이용하여 누구보다도 열심히 협동작업에 몰두했기 때문에 이 방식은 성공다.
리누스의 혁신은 (오랫동안 유닉스 세계의 전통이었) 많은 사용자들의 피드백을 포함하며 빠르게 전환하는 릴리스를 수행하는 것 보다는 그가 개발하고 있던 리눅스 커널의 복잡성에 비견될만한 수준으로까지 끌어올렸다는 것에 있다. 초기에 (1991년 경에) 그는 하루에 한 번 이상 새로운 커널을 발표하기 했다. 그는 공동개발자들이라는 자신의 기반을 잘 만들었고, 인터넷이라는 지렛대를 이용하여 누구보다도 열심히 협동작업에 몰두했기 때문에 이 방식은 성공할 수 있었다.
But **how** did it work? And was it something I could duplicate, or did it rely on some unique genius of Linus Torvalds?
하지만 어떤 과정을 거쳐 성공할 수 있었을까? 내가 재현할 수 있는 것일까, 아니면 리누스 토발즈만의 천재성이 필요한 것일까?
하지만 **어떤 과정**을 거쳐 성공할 수 있었을까? 내가 재현할 수 있는 것일까, 아니면 리누스 토발즈만의 천재성이 필요한 것일까?
I didn't think so. Granted, Linus is a damn fine hacker. How many of us could engineer an entire production-quality operating system kernel from scratch? But Linux didn't represent any awesome conceptual leap forward. Linus is not (or at least, not yet) an innovative genius of design in the way that, say, Richard Stallman or James Gosling (of NeWS and Java) are. Rather, Linus seems to me to be a genius of engineering and implementation, with a sixth sense for avoiding bugs and development dead-ends and a true knack for finding the minimum-effort path from point A to point B. Indeed, the whole design of Linux breathes this quality and mirrors Linus's essentially conservative and simplifying design approach.
그렇게 생각지는 않았다. 리누스가 매우 뛰어난 해커라는 점은 인정한다. (우리중에 상업용 제품 못지 않은 운영체제의 커널을 만들어낼 수 있는 사람이 몇이나 될까?) 하지만 리스는 놀랄만한 개념적 전진을 이루어내지는 않았다. 리누스는 리차드 스톨먼이나 제임스 고슬링 (NeWS 와 자바를 만든) 과 같은 혁신적인 설계를 이루어내는 천재는 (적어도 지금까지는) 아니었다. 대신 리누스는 공학의 천재인 것으로 보인다. 버그와 개발의 막다른 골목을 피하는 육감, 그리고 A 점에서 B 점까지 가는데 최소노력 경로를 찾아내는 요령을 갖추고 있었다. 실제로 리눅스의 전반적인 설계는 이런 특성을 바탕으로 하고 있으며 리누스의 본질적으로 보수적이고 단순한 설계 방식을 반영하고 있다.
그렇게 생각지는 않았다. 물론, 리누스가 매우 뛰어난 해커다. 우리 중에 상업용 제품 못지 않은 운영체제의 커널을 만들어낼 수 있는 사람이 몇이나 될까? 하지만 리스는 놀랄만한 개념적 전진을 이루어내지는 않았다. (적어도 지금까지) 리누스는 리차드 스톨먼이나 (NeWS 와 자바를 만든) 제임스 고슬링처럼 혁신적인 설계를 이루어내는 천재는 아니었다. 대신 리누스는 버그와 개발의 막다른 골목을 피하는 육감, A 점에서 B 점까지 가는데 최소노력 경로를 찾아내는 요령을 갖춘 공학의 천재인 것으로 보인다. 실제로 리눅스의 전반적인 설계는 이런 특성을 바탕으로 하고 있으며 본질적으로 리누스의 보수적이고 단순한 설계 방식을 반영하고 있다.
So, if rapid releases and leveraging the Internet medium to the hilt were not accidents but integral parts of Linus's engineering-genius insight into the minimum-effort path, what was he maximizing? What was he cranking out of the machinery?
따라서 빠른 릴리즈와 인터넷을 매체로 사용하는 것이 우연히 이루어진 것이 아니라 리누스의 공학적 천재성에 기인한 최소노력 경로에 대한 통찰력의 통합적인 부분이었다면 그가 대화하고 있는 것은 무엇이었을까? 기계에서 무엇을 뽑아내었던 것일까?
따라서, 만약 빠른 릴리즈와 인터넷을 매체로 사용하는 것이 우연이 아닌 최소노력 경로에 대한 리누스의 공학 천재적 통찰력 중 핵심적인 부분이었다면 그가 대화하고 있는 것은 무엇이었을까? 그가 기계에서 무엇을 뽑아내었던 것일까?
Put that way, the question answers itself. Linus was keeping his hacker/users constantly stimulated and rewarded—stimulated by the prospect of having an ego-satisfying piece of the action, rewarded by the sight of constant (even daily) improvement in their work.
해답은 질문 안에 있다. 리누스는 그의 해커/사용자들에게 지속적인 자극과 보답을 제공했다 -- 리눅스 개발에 참여함으로써 자기만족을 얻으리라는 전망에 자극받았고, 그들이 하는 일이 계속해서 (어떤 때는 날마다) 향상되고 있다는 것이 보답이 되었다.
해답은 질문 안에 있다. 리누스는 그의 해커사용자들에게 지속적인 자극과 보답을 제공했다 -- 개발에 참여함으로써 자기만족을 얻을 수 있다는 기대에 자극받았고, 그들의 일이 (어떤 때는 날마다) 계속해서 향상되는 것을 지켜봄으로써 보답을 받았다.
(신승헌)
Linus was directly aiming to maximize the number of person-hours thrown at debugging and development, even at the possible cost of instability in the code and user-base burnout if any serious bug proved intractable. Linus was behaving as though he believed something like this:
리누스는 만일 처리하기 곤란한 심각한 버그가 발견되 사용자들이 떨어져 나갈 위험과 코드가 불안정해질 가능성을 무릅쓰고 디버깅과 개발에 투입되는 공수(the number of person-hours)를 최대화 하는 것에 목표를 두었다. 리누스는 다음과 같은 신념을 가지고 있는 것처럼 행동했다.
리누스는 심각한 버그가 발견되었을 때 사용자들이 떨어져 나가거나 코드가 불안정해질 가능성이 있음에도 불구하고 디버깅과 개발에 최대한 인력을 투입하는데에 목표를 두었다. 리누스는 다음과 같은 신념을 가진듯이 행동했다.
8. Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone.
8. 충분히 많은 베타테스터와 공동개발자가 있으면 거의 모든 문제들은 빨리 파악될 것이고 쉽게 고치는 사람이 있게 마련이다. (Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone)
   8. 충분히 많은 베타 테스터와 협력 개발자가 있으면 대부분의 문제는 빠르게 파악될 것이며 이를 고치는 사람이 분명 존재할 것이다.
Or, less formally, ``Given enough eyeballs, all bugs are shallow.'' I dub this: ``Linus's Law''.
Or, less formally, **Given enough eyeballs, all bugs are shallow.** I dub this: **Linus's Law**.
덜 형식적으로 말하자면, ``보고 있는 눈이 충분히 많으면 찾지 못할 버그는 없다.'' 나는 이것을 ``리누스의 법칙'' 이라고 부른다.
더 유연하게 말하자면, **보는 눈이 많으면, 모든 버그를 찾아낼 수 있다.** 나는 이것을 **리누스의 법칙**라 부른다.
My original formulation was that every problem ``will be transparent to somebody''. Linus demurred that the person who understands and fixes the problem is not necessarily or even usually the person who first characterizes it. ``Somebody finds the problem,'' he says, ``and somebody else understands it. And I'll go on record as saying that finding it is the bigger challenge.'' That correction is important; we'll see how in the next section, when we examine the practice of debugging in more detail. But the key point is that both parts of the process (finding and fixing) tend to happen rapidly.
My original formulation was that every problem **will be transparent to somebody**. Linus demurred that the person who understands and fixes the problem is not necessarily or even usually the person who first characterizes it. **Somebody finds the problem,** he says, **and somebody else understands it. And I'll go on record as saying that finding it is the bigger challenge.** That correction is important; we'll see how in the next section, when we examine the practice of debugging in more detail. But the key point is that both parts of the process (finding and fixing) tend to happen rapidly.
원래의 공식적인 서술은 모든 문제는 ``누군가에게는 간단할 것이다'' 였다. 리누스는 문제를 이해하고 고치는 사람이 그 문제를 처음 파악한 사람과 항상 같은 것이 아니라 오히려 다른 경우가 더 많다고 이의를 제기했다. 리누스의 얘기로는, ``누군가 문제를 발견합니다. 그리고 다른 누군가가 그 문제를 이해하지요. 문제를 발견해 내는 것이 더 중요한 일이라고 분명히 말할 수 있습니다.'' 하지만 가장 중요한 점은 사람이 충분히 많을 경우 이 두 가지가 모두 매우 빨리 일어나는 경향이 있다는 것이다.
원래의 내 입장은 모든 문제는 **누군가가 해결할 것이다.** 였다. 리누스는 문제를 이해하고 해결하는 사람이 그 문제를 처음 파악한 사람과 다른 경우가 대부분이라고 이의를 제기했다. 리누스는 말한다: **누군가 문제를 발견다. 그리고 다른 누군가가 그 문제를 이해한다. 나는 문제를 발견는 것이 더 힘든 일이라고 자부한다.** 이 지적은 아주 중요하다. 다음 섹션에서 디버깅을 진행할 때 어떻게 이 말이 적용되는지 알아볼 것이다. 중요한 점은 두 과정(문제를 찾는 것과 해결하는 것) 모두 빠르게 일어난다는 것이다.
In Linus's Law, I think, lies the core difference underlying the cathedral-builder and bazaar styles. In the cathedral-builder view of programming, bugs and development problems are tricky, insidious, deep phenomena. It takes months of scrutiny by a dedicated few to develop confidence that you've winkled them all out. Thus the long release intervals, and the inevitable disappointment when long-awaited releases are not perfect.
내 생각에는 여기에 성당 건축과 시장 스타일의 핵심적인 차이점이 있다. 프로그래밍의 성당 건축가 점에서 보자면 버그와 개발 문제는 어렵고, 까다로우며 심오한 현상이다. 문제 해결하려면 헌신적인 소수의 사람이 몇 달이고 정밀한 검사를 수행해야 모두 끝났다는 확신을 가질 수 있다. 따라서 발표 사이의 기간이 길어지, 오랫동안 기다린 릴리즈가 완벽하지 않을 때는 필연적으로 실망이 따른다.
리누스의 법칙에는 성당과 시장 방식간에 핵심적인 차이점이 있다고 생각한다. 프로그래밍에서의 성당 건축가 점에서, 버그와 개발 관련 문제들은 까다롭고 교활하며 심오한 현상이다. 문제들을 모두 해결하려면 소수의 개발자가 열정을 가지고 몇 달 동안 정밀한 검사를 수행해야 한다. 따라서 릴리즈 간격이 길어지, 긴 기다림 끝의 릴리즈가 완벽하지 않다면 실망감을 가질수 밖에 없다.
In the bazaar view, on the other hand, you assume that bugs are generally shallow phenomena—or, at least, that they turn shallow pretty quickly when exposed to a thousand eager co-developers pounding on every single new release. Accordingly you release often in order to get more corrections, and as a beneficial side effect you have less to lose if an occasional botch gets out the door.
반면, 시장의 점에서는 버그가 보통 쉽게 해결 수 있는 것이라고 다 -- 최소한 새로운 릴리즈가 나올때마다 그것과 씨름하는 수천의 열정적인 공동개발자들에게 알려진다면 금방 쉽게 해결할 수 있는 문제로 바뀐다. 따라서 더 많이 교정을 받고 싶다면 자주 발표해야 하며 덤으로 서투 부분이 드러나더라도 잃을 것이 적다는 이점이 있다.
반면, 시장의 점에서는 버그가 보통 쉽게 해결 수 있는 것이라고 생각한다 -- 아니면 적어도 새로운 릴리즈가 나올 때마다 수천의 열정적인 협력 개발자가 참여한다면 금방 쉽게 해결할 수 있다. 따라서 더 많이 고치고 싶다면 자주 릴리즈를 해야하고, 가끔 서투 부분이 생기더라도 잃을 것이 적다는 이점이 있다.
And that's it. That's enough. If ``Linus's Law'' is false, then any system as complex as the Linux kernel, being hacked over by as many hands as the that kernel was, should at some point have collapsed under the weight of unforseen bad interactions and undiscovered ``deep'' bugs. If it's true, on the other hand, it is sufficient to explain Linux's relative lack of bugginess and its continuous uptimes spanning months or even years.
(이상민)
And that's it. That's enough. If **Linus's Law** is false, then any system as complex as the Linux kernel, being hacked over by as many hands as the that kernel was, should at some point have collapsed under the weight of unforeseen bad interactions and undiscovered **deep** bugs. If it's true, on the other hand, it is sufficient to explain Linux's relative lack of bugginess and its continuous uptimes spanning months or even years.
그게 다. 것으로 충분하다. ``리누스의 법칙'' 이 틀렸다면 리눅스 커널과 같이 복잡한 시스템은 어떤 것이라도 수많은 들에 의해 해킹되면서 일찍이 볼 수 없었던 나쁜 상호작용과 발견되지 못한 ``심오한'' 버그들에 의해 어느 시점에선가 붕괴되고 말았을 것이다. 반면에, 만일 그 법칙이 옳다면 그 법칙만으로도 리눅스의 상대적으로 적은 버그를 설명할 수 있다.
그게 전부다. 것으로 충분하다. **리누스의 법칙** 이 틀렸다면 리눅스 커널만큼 복잡한 시스템은 수많은 사람들에 의해 해킹되면서 뜻밖의 나쁜 상호작용과 발견되지 못한 **심오한** 버그들에 의해 어느 시점에 붕괴됬어야만했다. 반면에, 만일 그 법칙이 옳다면 리눅스의 상대적으로 적은 버그와 수개월 혹은 심지어 수년에 걸친 지속적인 업타임(업그레이드)를 설명하기에 충분하다.
Maybe it shouldn't have been such a surprise, at that. Sociologists years ago discovered that the averaged opinion of a mass of equally expert (or equally ignorant) observers is quite a bit more reliable a predictor than the opinion of a single randomly-chosen one of the observers. They called this the Delphi effect. It appears that what Linus has shown is that this applies even to debugging an operating system—that the Delphi effect can tame development complexity even at the complexity level of an OS kernel. [CV]
그리고 이 법칙이 옳다는 것에 대해서 너무 놀라지 말아야할 것이다. 수년 전, 사회학자들은 비슷하게 전문적인 (혹은 비슷하게 무지한) 관찰자들로 이루어진 대중의 평균적인 의견이 그 관찰자 중 무작위로 뽑은 한 명의 의견보다 더 신뢰할 만하다는 점을 발견했다. 사회학자들은 이것을 ``델파이 효과'' 라고 부른다. 리누스가 보여준 것은 이 효과가 운영체제를 디버깅하는 데에도 적용될 수 있다는 점이다. 델파이 효과는 OS 커널만큼 복잡한 개발까지도 다룰 수 있는 것이다.
Maybe it shouldn't have been such a surprise, at that. Sociologists years ago discovered that the averaged opinion of a mass of equally expert (or equally ignorant) observers is quite a bit more reliable a predictor than the opinion of a single randomly-chosen one of the observers. They called this **the Delphi effect**. It appears that what Linus has shown is that this applies even to debugging an operating system—that the Delphi effect can tame development complexity even at the complexity level of an OS kernel. [CV]
어쩌면 이 법칙이 옳다는 것은 그다지 놀랄 일이 아닐지도 모른다. 수년 전, 사회학자들은 비슷하게 전문적인 (혹은 비슷하게 무지한) 관찰자들로 이루어진 대중의 평균적인 의견이 그 관찰자 중 무작위로 뽑은 한 명의 의견보다 더 신뢰할 만한 예측임을 발견했다. 사회학자들은 이것을 **델파이 효과** 라고 부른다. 이는 이것이 운영체제의 디버깅에도 적용된다는 것이라고 리누스가 제시한 바를 암시한다. - 즉, 델파이 효과가 OS 커널의 복잡성 수준에서도 개발 복잡성을 줄일 수 있다는 것이다. [CV]
One special feature of the Linux situation that clearly helps along the Delphi effect is the fact that the contributors for any given project are self-selected. An early respondent pointed out that contributions are received not from a random sample, but from people who are interested enough to use the software, learn about how it works, attempt to find solutions to problems they encounter, and actually produce an apparently reasonable fix. Anyone who passes all these filters is highly likely to have something useful to contribute.
Linus's Law can be rephrased as ``Debugging is parallelizable''. Although debugging requires debuggers to communicate with some coordinating developer, it doesn't require significant coordination between debuggers. Thus it doesn't fall prey to the same quadratic complexity and management costs that make adding developers problematic.
델파이 효과를 따라 분명하게 도움이 되는 리눅스 상황의 한 가지 특별한 특징은 주어진 프로젝트의 기여자들이 스스로 선택된다는 점이다. 한 초기 응답자는 기여는 무작위 샘플이 아니라 소프트웨어를 사용하고, 어떻게 작동하는지 배우고, 그들이 직면하는 문제에 대한 해결책을 찾으려고 시도하고, 실제로 명백하게 합리적인 해결책을 도출해 낼만큼 충분한 관심이 있는 사람들로부터 받는 것이라고 지적했다. 앞서말한 이런한 필터들을 통과하면 누구나 뭔가 유용한 기여를 할 가능성이 높다.
고맙게도 제프 덧키(Jeff Dutky) <dutky@wam.umd.edu> 는 리누스의 법칙을 ``디버깅은 병렬처리가 가능하다'' 는 말로 표현할 수 있음을 지적해 주었다. 제프는 디버거들이 디버깅을 하려면 의사소통을 조정해주는 개발자가 필요하지만 디버거들 사이에는 그다지 조정이 필요하지 않다고 진술한다. 따라서 개발자를 추가하는데서 생기는 기하급수적인 복잡성과 관리의 어려움이 디버깅에는 짐이 되지 않는다.
Linus's Law can be rephrased as **Debugging is parallelizable**. Although debugging requires debuggers to communicate with some coordinating developer, it doesn't require significant coordination between debuggers. Thus it doesn't fall prey to the same quadratic complexity and management costs that make adding developers problematic.
In practice, the theoretical loss of efficiency due to duplication of work by debuggers almost never seems to be an issue in the Linux world. One effect of a ``release early and often'' policy is to minimize such duplication by propagating fed-back fixes quickly [JH].
리누스의 법칙을 **디버깅은 병렬처리가 가능하다** 는 말로 바꾸어 표현할 수 있다. 비록 디버깅이 디버거로 하여금 몇몇의 조정 개발자들과 통신할 것을 요구하지만 디버거들 사이에 중요한 조정이 필요하지는 않다. 따라서 디버깅은 개발자를 추가하는데서 생기는 기하급수적인 복잡성과 관리비용의 희생양이 되지 않는다.
실제로 리눅스 세계에서는 디버거의 작업이 중복됨으로써 생기는 이론적인 효율 저하가 거의 문제되었던 적이 없는 것으로 보인다. ``빨리, 그리고 자주 발표하는 정책'' 의 효과 중 하나는 피드백되어 오는 수정사항을 빨리 전파함으로써 중복이 최소화된다는 것이다.
(전성주)
Brooks (the author of The Mythical Man-Month) even made an off-hand observation related to this: ``The total cost of maintaining a widely used program is typically 40 percent or more of the cost of developing it. Surprisingly this cost is strongly affected by the number of users. More users find more bugs.'' [emphasis added].
Brooks (the author of The Mythical Man-Month) even made an off-hand observation related to this: **The total cost of maintaining a widely used program is typically 40 percent or more of the cost of developing it. Surprisingly this cost is strongly affected by the number of users. More users find more bugs.** [emphasis added].
브룩스(Brooks)는 제프의 진술과 관련하여 즉석에서 다음과 같은 말을 했다. ``널리 사용되는 프로그램의 유지보수에 들어가는 비용은 보통 개발시 드는 비용의 40 퍼센트나 그 이상입니다. 놀랍게도 이 비용은 사용자의 수에 영향을 받습니다. 더 많은 사용자들이 더 많은 버그를 찾아냅니다.''
브룩스(The Mythical Man-Month의 저자)는 제프의 지적과 관련하여 그 자리에서 다음과 같은 말을 했다. **널리 사용되는 프로그램의 유지보수에 들어가는 비용은 보통 개발시 드는 비용의 40 퍼센트나 그 이상입니다. 놀랍게도 이 비용은 사용자의 수에 강하게 영향을 받습니다. 더 많은 사용자들이 더 많은 버그를 찾아냅니다.**
More users find more bugs because adding more users adds more different ways of stressing the program. This effect is amplified when the users are co-developers. Each one approaches the task of bug characterization with a slightly different perceptual set and analytical toolkit, a different angle on the problem. The ``Delphi effect'' seems to work precisely because of this variation. In the specific context of debugging, the variation also tends to reduce duplication of effort.
More users find more bugs because adding more users adds more different ways of stressing the program. This effect is amplified when the users are co-developers. Each one approaches the task of bug characterization with a slightly different perceptual set and analytical toolkit, a different angle on the problem. The **Delphi effect** seems to work precisely because of this variation. In the specific context of debugging, the variation also tends to reduce duplication of effort.
사용자들이 많아지면 프로그램을 시험해보는 방법이 더 늘어나기 때문에 버그를 더 많이 잡아낼 수 있다. 이 효과는 사용자들이 공동개발자들일 때 더욱 커진다. 각 사람들이 버그를 찾아낼 때 조금씩 다른 개념의 집합과 분석 도구들을 사용하여 문제각도에서 접근하기 때문이다. ``델파이 효과'' 는 바로 이런 편차에서 비롯되는 것으로 보인다. 또한 디버깅이라는 특정한 환경에서 이 편차는 노력의 중복을 줄여주는 경향이 있다.
사용자들이 많아지면 프로그램을 다양한 방법으로 시험하는 것이 더 늘어나기 때문에 버그를 더 많이 찾아낸다. 이 효과는 사용자들이 공동개발자들일 때 더욱 커진다. 각각의 사람들이 버그를 찾아낼 때 조금씩 다른 개념의 집합과 분석 도구들을 사용하여 문제 다각도에서 접근하기 때문이다. **델파이 효과** 는 이러한 편차로 인해 정확하게 작동하는 것으로 보인다. 또한 디버깅이라는 특정한 맥락에서 이 편차는 노력의 중복을 줄여주는 경향이 있다.
So adding more beta-testers may not reduce the complexity of the current ``deepest'' bug from the developer's point of view, but it increases the probability that someone's toolkit will be matched to the problem in such a way that the bug is shallow to that person.
So adding more beta-testers may not reduce the complexity of the current **deepest** bug from the developer's point of view, but it increases the probability that someone's toolkit will be matched to the problem in such a way that the bug is shallow to that person.
따라서 더 많은 베타테스터를 가지는 것은 개발자의 관점에서 현재의 ``가장 심오한'' 버그의 복잡성을 줄여주지는 않을 테지만, 누군가의 도구가 문제에 딱 들어맞아 그 버그가 그 사람에게는 쉽게 잡을 수 있는 것이 될 가능성을 높여준다.
따라서 더 많은 베타테스터를 가지는 것은 개발자의 관점에서 현재의 **가장 심오한** 버그의 복잡성을 줄여주지는 않을 테지만, 그 버그가 누군가의 도구에 딱 들어맞아 그 사람에게는 쉽게 잡을 수 있는 것이 될 가능성을 높여준다.
Linus coppers his bets, too. In case there are serious bugs, Linux kernel version are numbered in such a way that potential users can make a choice either to run the last version designated ``stable'' or to ride the cutting edge and risk bugs in order to get new features. This tactic is not yet systematically imitated by most Linux hackers, but perhaps it should be; the fact that either choice is available makes both more attractive. [HBS]
Linus coppers his bets, too. In case there are serious bugs, Linux kernel version are numbered in such a way that potential users can make a choice either to run the last version designated **stable** or to ride the cutting edge and risk bugs in order to get new features. This tactic is not yet systematically imitated by most Linux hackers, but perhaps it should be; the fact that either choice is available makes both more attractive. [HBS]
리누스도 물론 할 일이 있었다. 심각한 버그가 있을 경우에 대비해 리눅스 커널 버전은 잠재 사용자들이 최종적으로 ``안정된'' 버전을 사용할 수도 있고 새로운 기능을 사용하기 위해 최신의 버그가 있을 수 있는 버전을 사용할 수 있게 번호가 붙여졌다. 이 전술은 아직까지 대부분의 리눅스 해커들이 따라하지 않고 있지만 아마도 따라하게 될 것이다. 두 가지 선택이 가능하다는 사실 양쪽 모두를 더 매력적으로 보이게 한다.
리누스도 물론 할 일이 있었다. 심각한 버그가 있을 경우에 대비해 리눅스 커널 버전은 잠재적인 사용자들이 최종적으로 **안정된** 버전을 사용하거나 새로운 기능을 사용하기 위해 최첨단 및 위험한 버그를 사용하는 것을 선택할 수 있게 번호가 붙여졌다. 이 전술은 아직까지 대부분의 리눅스 해커들이 체계적으로 따라하지 않고 있지만 아마도 따라해야 할 것이다. 두 가지 선택이 가능하다는 사실 양쪽 모두를 더 매력적으로 보이게 한다.
## How Many Eyeballs Tame Complexity
Loading