GNU 소프트웨어 개발은 ​​어떻게 경제적으로 유지됩니까?


10

이 질문이 주제가 아닌 경우 사과하지만 동시에 경제 및 프로그래밍 질문입니다. 다른 SE 공동체에 가야한다면 알려주십시오.

이론적으로 GNU 소프트웨어는 자유 시간 동안 자원 봉사자 또는 자원 봉사자가 프로그래머를 통해 GNU 소프트웨어를 개발할 수있는 회사 (활동의 다른 부문에서 얻은 수입을 사용하여)에 의해 개발되었습니다.

모든 컴퓨터 프로그래밍이 굉장히 재미 있고 보람있는 취미이기 때문에, 비가 오는 주말에 한 명의 개인 (예를 들어 스도쿠 게임)이 수행 할 수있는 소규모 프로젝트에 완벽하게 작동하는 방법을 이해합니다. 자유 시간에 중소 규모의 프로그램을 개발하여 전 세계 사람들과 공유하는 데 아무런 문제가 없습니다.

문제는 다음과 같은 이유로 큰 프로그램의 경우이 크기가 매우 낮다는 것입니다.

  1. 프로그래밍만큼 재미 있지만 구현해야하는 프로젝트가 커질수록 원하는 기능을 구현하는 데 걸리는 시간이 매우 빠르게 증가합니다. 더 큰 규모의 프로그램은 개발하는 데 엄청난 시간이 걸립니다. 예를 들어 개인이 운영 체제를 프로그래밍하는 데 15 년의 자유 시간과 휴가 시간이 쉽게 소요될 수 있으며, 소프트웨어가 출시 될 때까지는 완전히 사용되지 않습니다. .
  2. 다른 사람들은 방법은 당신이 읽고, 그것을했을 것 이해와 다른 사람의 코드를 가지고가는 또 다른 방법으로 프로그램을 작성으로 많은 처음부터 자신의 코드를 작성하는 것만큼 대부분의 경우, 시간을. GNU 철학에서 권장하는 것처럼 다른 사람들의 코드를 수정하고 개선하려고 시도하면 추가하려는 기능을 사용하여 해당 프로그램의 복제본을 개발하는 것만큼이나 시간이 많이 걸립니다.
  3. 더 큰 프로그램을 개발하기 위해 2 명 이상의 사람들이 협력해야하는 즉시 단일 개발자 프로젝트에서는 발생하지 않는 많은 의사 결정 문제가 발생합니다. 그 결과, 예를 들어 2 명의 프로그래머 그룹이 한 사람이 만드는 데 10 년이 걸리는 프로젝트를 위해 협력한다면 5 년이 아니라 8 년이 될 것입니다.
  4. 동일한 프로젝트를 위해 공동 작업을하는 사람들이 인터넷에서만 만나는 경우 프로젝트의 한 구성원이 갑자기 사라지기 쉽습니다 (관심을 잃었거나 더 이상 물리적으로 인터넷에 접속할 수 없기 때문에). 더 힘들다

따라서 GNU 사고 방식으로 간단한 프로그램을 개발하는 방법을 완벽하게 이해하지만이 모델에서 GNU / Linux 또는 gcc와 같은 거대한 프로그램이 어떻게 가능한지 절대 알 수 없습니다. gcc는 약 7 백만 줄의 코드입니다. 프로젝트의 후반 단계에서 더 생산적인 프로그래머가 실제로 코드 줄을 제거하고 (프로젝트 단순화 및 / 또는 최적화), 코드 줄이 그다지 의미가 없다는 것을 알고 있습니다. 프로젝트 gcc는

이론적으로 누구나 자유 시간 동안 gcc를 자유롭게 수정할 수 있지만 실제로는? 그것은 취미가 아닌 직업으로 매우 전문적인 사람들에 의해 개발되었습니다. 컴파일러를 취미로 만드는 사람은 결국 비용 / 이익이 가치가 없기 때문에 포기할 것입니다.

  • 큰 프로그램을 개발하는 것은 장기적으로 큰 프로젝트이므로, 자유 시간을 사용하여 단기적으로 더 보람 있거나 즐거운 다른 활동을하고자합니다
  • 어쨌든 대규모 프로그램을 개발하려는 경우 무료로 제공하는 것보다 비용을 지불하는 회사를 대상으로합니다.

사람들이 장기적으로 GNU / Linux, gcc 또는 Open Office와 같은 프로그램 개발에 관심을 갖기 위해서는 보람이 있어야합니다. 그래서 내 질문은 : 왜 사람들이 급여를받지 못하면 큰 GNU 프로젝트에 기여하는 사람들이 있습니까?


포인트 2, 3 및 4에 대한 증거를 제공 할 수 있습니까? 나는 포인트 2에 가장 동의하지 않지만 3과 4는 오픈 소스 소프트웨어를 개발할 때 실제로 경험하지 못한 흥미로운 관점입니다. 시간이 오면 나만의 경험으로 업데이트하겠습니다.
christopherlovell

Well 2는 프로그래밍 언어와 프로그램 아키텍처의 문서화에 많은 노력을 기울이고 있습니다. 증거에 관해서는, 나는 찾을 수 ,
Bregalad

귀하의 의견에 대한 귀하의 사례 중 두 가지가 9 세 이상입니다. 오픈 소스 소프트웨어는 웹의 발전과 읽기 쉽고 좋은 코드를 훨씬 쉽게 공유하고 개발할 수있는 git과 같은 툴의 대중화로 인해 먼 길을 왔습니다.
christopherlovell

1
SE / Programmers의 다른 예에서 @Bregalad는 거의 모든 높은 등급의 답변이 더 큰 복잡성에 대한 두 번째 이유, 즉 코드를 읽는 것이 작성하는 것보다 반드시 어려운 것은 아니라는 두 번째 이유에 대해 이의를 제기합니다. 이 시점에서 프로젝트를 처음부터 복제하는 것이 프로젝트를 추가하는 것보다 쉬울 수 있다는 마지막 문장은 코드를 읽지 않고도 작동 방식 및 알고리즘을 다시 만드는 방법을 알고 있다고 가정합니다. 문제에 대해 우아하고 성능이 뛰어난 알고리즘을 개발하는 것이 코딩하는 것보다 훨씬 어려운 작업이라는 경험을 통해 알 수 있습니다. :)
christopherlovell

답변:


5

나는 프로그래머가 아니며 오픈 소스 프로젝트에 기여한 적이 없다고 말하면서 시작하고 싶습니다. 그러나 저는 오랫동안 오픈 소스에 관심이 있었고 오픈 소스의 일반적인 개념과 작동 방식을 이해한다고 생각합니다.

우선, 오픈 소스가 소프트웨어로 돈을 벌 수 없다는 의미는 아닙니다. 그것은 코드가 공개적으로 사용 가능해야 함을 의미합니다. Red Hat 및 Canonical과 같은 회사는 소프트웨어를 판매하는 것이 아니라 전문성을 판매하여 돈을 벌고 있습니다. 회사에서 Linux 서버를 운영하고 싶지 않다면 소프트웨어를 무료로받을 수 있습니다. 그러나 누군가 설치하고 설정하고 지원해야합니다. 레드햇의 전문가가 들어와 돈을 버는 곳입니다. 회사의 경우 전문가를 고용하는 것이 훨씬 비쌀 수 있기 때문에 회사에 의미가 있습니다. 또한 이러한 회사는 코드에 기여할 인센티브를 제공합니다. 그들은 사람들이 제품과 서비스를 이용하기 위해 제품이 좋기를 원합니다.

그러나 확장성에 대한 요점에 대해 이야기하겠습니다.

  1. 오픈 소스의 멋진 점은 처음부터 모든 것을 개발할 필요가 없다는 것입니다. Ubuntu와 같은 운영 체제는 한 사람이 구축하지 않았습니다. 대신 많은 사람들이 시스템의 다른 부분에 기여했습니다 (실제로 모든 운영 기술을 만들고 효과적인 운영 체제를 가진 사람을 찾기가 어렵다고 생각합니다). 예를 들어, 우분투 사람들은 리눅스 커널을 개발하지 않습니다. 그들은 단지 다른 사람들이 개발 한 것을 사용합니다. 오픈 소스가 없었던 것은 아마도 다른 사람들의 작업을 기반으로 할 수 있기 때문에 가능할 것입니다.

  2. 다른 사람을 읽고 이해하면 자신의 것을 쓰는 것보다 시간이 많이 걸리지 않습니다. 적어도 많은 경우에는 그렇지 않습니다. 그 외에도 사용하는 모든 코드를 이해할 필요는 없습니다. Linux 용 프로그램을 작성하려면 해당 프로그램의 모든 부분이 어떻게 작동하는지 이해할 필요가 없습니다. 나는 그들이하는 일을 알아야합니다. 그런 다음이 부분을 가져 와서 다른 부분과 함께 만들어 프로그램을 만들 수 있습니다. 또는 기존 프로그램을 가져 와서 필요에 따라 수정할 수 있습니다.

  3. git 및 github와 같은 도구를 사용하면 매우 쉽게 협업 할 수 있습니다. 코드를 얻고 수정하면됩니다. 그런 다음 프로젝트 담당자에게 제출하십시오. 좋으면 받아 들여질 것입니다.

  4. 사람들은 항상 프로젝트에 출입합니다. 그러나 프로젝트가 인기가 있다면 충분할 것입니다.

오픈 소스가 작동하는 이유는 다음과 같습니다.

  1. 오픈 소스 소프트웨어가 좋아진 주된 이유는 프로젝트를 수행하는 많은 사람들이 소규모 개발자 팀에 보관하기 어려운 전문 지식 수준을 보장하기 때문입니다. 이상하게 보일 수도 있지만,이 단일 사실은 오픈 소스에서 발생할 수있는 모든 부정적인 문제를 능가하는 것 같습니다.

  2. 상업 프로그래밍에서 프로젝트는 회사와 함께 죽습니다. 회사가 폐쇄 한 회사의 일부 소프트웨어를 통해이를 알려줄 수 있습니다. 그런 다음 업데이트 및 버그 수정을받지 않으므로 새 소프트웨어를 사용해야합니다. 오픈 소스를 사용하면 소프트웨어를 지원하거나 직접 개발할 다른 회사를 찾을 수 있습니다.

여전히 관심이 있다면 The Cathedral and the Bazaar 를 읽으십시오 .


나는 당신이 한 말에 동의하지 않지만 실제로는 내 질문에 대답하지 않기 때문에 대답을 받아 들일 수 없습니다. 당신은 나에게 GNU가 얼마나 위대한 지 설득하려고 노력하는 것처럼 보이지만, 오래 전에 이미 확신했기 때문에 아무 소용이 없습니다. 또한 다른 사람의 코드를 수정하고 수정하는 것과 소프트웨어 프로젝트를 수행하는 여러 사람을 조정하는 데 따르는 어려움을 심각하게 과소 평가합니다. 내 질문의 문제를 과장했을 수도 있지만 여전히 중요한 문제 일 수 있습니다. 나는 여전히 GNU 소프트웨어가 어떻게 경제적으로 유지 되는지 모른다 .
Bregalad

아마도 stackoverflow에 게시하고 일부 실제 프로그래머로부터 답변을 받아야합니다. 그들은 실제 경험을 바탕으로 당신에게 정답을 줄 수 있습니다.
Rud Faden

1
Red Hat에 대한 당신의 요점은 있지만, 그들의 제안을 살펴본 후, 대부분은 영업, 마케팅 및 기술 지원과 관련이 있으며, 개발 개시는 적은 비율입니다. (이는 수입이 어디서 나오는지와 수입이 어떻게 분배되는지에 대한 좋은 표시를 제공합니다). 또한,이 질문은 아마도 스택 오버플로에서 주제를 벗어난 것으로 표시 될 것입니다 (확실히하기 위해 도움말을 다시 읽어야하지만)
Bregalad

@Bregalad 그러나 다른 사람의 코드를 수정하더라도 마찬가지입니다. 그들에게 무언가가 어떻게 작동하는지 물어볼 수있는 커뮤니티가 있습니다. (이는 커뮤니티 전체를위한 소프트웨어의 개선이 아니라 개인이나 돈에 중점을두기 때문에 독점 소프트웨어 개발자 나 일반 비즈니스에게는 외국 개념 일 수 있습니다). 또한 커뮤니티의 사람들은 소프트웨어를 자체적으로 사용하기 때문에 해당 소프트웨어를 계속 실행하는 데 관심이 있습니다. 그렇지 않으면 왜 기여하고 있습니까? (아마도 명성 일지 모르지만 오픈 소스 프로젝트가 죽은 경우 어떻게 도움이 되겠습니까?)
leeand00

@Bregalad 또한 단일 소프트웨어 개발 회사의 실패 지점이 아닌 여러 회사 (소프트웨어를 사용하고 소프트웨어를 코딩하는 회사)에 대한 프로젝트의 지속성을 통해 변환을 추출하고 다른 시스템에 데이터를로드 할 필요가 줄어 듭니다. 다른 회사가 실패하거나 시장에서 먹었을 때.
leeand00

2

오픈 소스 소프트웨어 개발은 ​​여러 가지 이유로 이루어 지지만, 주로 취미 애호가 나 전문적이지만 부수적 프로젝트로 수행된다는 것은 일반적으로 오해입니다. 나는 GNU 라이센스 소프트웨어가 아닌 일반적인 오픈 소스에 대해이 질문에 대답하고 있습니다. 그러나 내 대답은 포괄적입니다.

저는 소프트웨어 개발자 (저는)이고 복잡한 소프트웨어 프로젝트 (저는)입니다. 좋은 아키텍처는 문제를 독립적 인 부분으로 나눕니다. 그리고 개발이 진행됨에 따라 개발자는 종종 필요한 부분이 많은 문제에 공통적 인 부분임을 인식 할 것입니다. 다음은 일반적인 경로입니다.

  1. 그들은 그 조각 자체를 개발하고 회사의 재산이됩니다. 또는 다른 회사에서 폐쇄 소스 솔루션을 구매합니다.
  2. 그들은이 문제를 해결하는 오픈 소스 프로젝트를 발견하고 완벽하게 적합하며 라이센스가 적합합니다. 라이센스와 사용 방법에 따라 오픈 소스 일 수도 있고 필요하지 않을 수도 있습니다. 그들은 프로젝트에 다시 기여하지 않습니다.
  3. 그들은이 문제를 거의 해결하지만 결함이나 결함이있는 오픈 소스 프로젝트를 찾습니다. 그들은 그것을 개선하고 이러한 개선 사항을 기본 프로젝트에 다시 기여할 수 있습니다.
  4. 그들은 자신이 좋아하는 것을 찾지 못하여 자신의 프로젝트를 시작하고 오픈 소스로 결정합니다.

2-4의 장점은 더 많은 사람들이 프로젝트의 디자인과 코드 모두에 기여하게되고, 강한 아이디어는 (생성하는 경우 출산으로) 생존하고 약한 아이디어는 그렇지 않은 일종의 생태계에 들어간다는 것입니다. 버그 수정 및 기능 추가는 커뮤니티 노력이됩니다. 시나리오 2와 3에서 프로젝트를 채택한 개발자는 건전한 엔지니어링 원칙과 성숙한 코드의 이점을 얻습니다. 3과 4는 서로 관련이 있습니다. 시나리오 # 4에서 개발자는 다른 사람들이 코드를 채택하고 개선하고 환원 할 때 이익을 얻습니다 (# 3). 프로젝트에 다시 기여하면 다른 수정 사항과 개선 사항이 계속해서 향상되어 계속해서 이익을 얻을 수 있으므로 개선 사항이 구체화됩니다. 내 경험상 이러한 모든 시나리오는 평범합니다.

현재 소프트웨어 프로젝트에서 약 12 ​​명의 개발자 중 한 명이며 약 2 년 동안 시스템에서 일했습니다. 약 5,000 개의 오픈 소스 프로젝트를 통합했습니다! 우리는 새로운 FOSS 프로젝트를 몇 개만 만들어 냈으며, 아마도 십여 개에 기여했습니다. 우리는이 경우에 특히 좋은 시민은 아니지만 (다른 회사가 훨씬 더 낫습니다), 이것은이 모든 것이 어떻게 작동 하는지를 보여줍니다. 소규모 프로젝트에서도 오픈 소스의 기여는 수십에서 수백 가지에 달합니다. 오픈 소스 소프트웨어를 사용하지 않으면 개발 비용이 100-10,000 배 증가합니다.

확장 성은 디자인의 모듈 성과 코드가 리팩터링, 분기 등이 될 수있는 이런 종류의 적합한 프로세스를 통해 발생합니다. 코드가 더 이상 유지되지 않더라도 코드가 가치가있는 다른 사람들이 자신의 포크를 유지할 수 있기 때문에 생존 가능성은 일반적으로 독점 대안보다 낫습니다. 회사가왔다 갔다하고 직원이 더 빨리 고용되고 종료됩니다. 소스 코드가 없거나 소규모 사내 팀만 유지할 소프트웨어 종속성을 추가하면 상당한 위험이 발생합니다. Linux 커널, gcc, Android 및 기타 프로젝트와 같은 대규모 프로젝트에는 종종 많은 회사가 적극적으로 기여하고 있습니다.

코드를 읽는 것보다 정확하고 올바른 코드를 작성하는 것이 더 쉽다는 것은 사실이 아닙니다 (대부분의 경우). 또한 수정 작업을 수행하더라도 사용중인 모든 소프트웨어를 읽을 필요는 없습니다. 당신은 그것의 섹션으로 깊이 뛰어 들어 많이 읽지 만 전체를 읽지 않아야합니다. 여기서 단위 테스트에 대해 더 말할 수는 있지만 간결하게하기 위해 생략 할 것입니다.

대부분의 오픈 소스 소프트웨어는 자유 시간에 사람들이 개발하지 않습니다. 이 관행은 엄청나게 유익하여 시장 최적화없이 작동합니다. 나는 개인적으로 어떤 종류의 시장 중심 접근 방식이 큰 도움이 될 것으로 생각하지만, 그 접근 방식이 어떤지 모르겠습니다. 사람들은 명성이 화폐 인 시장이 있다고 주장하지만 이것이 정확한 모델이라고는 생각하지 않습니다. 직장에서 하나의 통화는 새로운 소프트웨어를 채택하는 데 걸리는 시간입니다. 당신은 활동적이고, 단순하고, 좋은 문서를 가지고있는 것을 찾고 사용하기를 원합니다. 따라서 쇼핑객처럼 당신은 최소한의 시간 동안 최고의 품질의 제품을 찾고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.