일부 오픈 소스 라이브러리가 바이너리를 제공하지 않는 이유는 무엇입니까?


15

일부 오픈 소스 라이브러리가 바이너리를 제공하지 않는 이유는 무엇입니까? 일부 프로젝트는 특히 Windows 빌드의 경우 현재 소프트웨어 빌드를 유지 관리하는 타사에 의존하는 것으로 나타났습니다.

도서관 입양의 장벽처럼 보이기 때문에 묻습니다. 개발자가 빌드 환경을 설정해야하므로 개발자에게는 더 많은 작업이 필요합니다. 개발자는 또한 라이브러리를 잘못 구축하여 버그를 도입 할 염려가 있습니다.


편집 : 의견과 답변을 해결하기 위해 일부 업데이트. 토론의 중심이 아니기 때문에 예제를 제거했습니다. 또한 "오픈 소스 라이브러리가 제공하는 경향이있는 것"보다는 "일부 오픈 소스 라이브러리가 제공하는 것"으로 사람들이 그에 대한 공격을한다는 사실을 알지 못하는 내 질문을 다시 설명했습니다.


7
"지키다"? 두 가지 예가 경향입니까? 귀하의 주장을 뒷받침 할 더 많은 데이터가 있습니까?
S.Lott

3
Linux 패키지 관리자는 일반적으로 바이너리를 배포하는 데 사용되므로 해당 참조를 이해하지 못합니다.
David Thornley

7
그들은 게으른 냄비 흡연 대학 교육 히피 (최악의 종류의 히피)이기 때문에.
Job

7
네, 전 세계 절반이 사용하는 히피 작성 소프트웨어를 무료로 사용하십시오!
Tamás Szelei

3
@ CodeinChaos : 몇 년 동안 소스에서 빌드하지 않았습니다. Fedora, Mac OS 및 OpenSuSE는이 "tendency"에서 이상한 예외 여야합니다. 어떤 OS를 사용하고 있습니까? 가능하면 피하고 싶습니다.
S.Lott

답변:


11

Windows 바이너리를 만드는 것은 완전히 다른 기술 자료와 도구 세트가 필요한 완전히 다른 작업이기 때문입니다. 사람들은 Linux 개발자에 대해 이것을 이해하기가 어려워 보입니다.

  • 당신은 영원히 보이는 것처럼 Windows를 사용했습니다.
  • 집에는 Windows 만 설치되어 있습니다.
  • Linux를 관리하거나 개발하지 않고 사용자로만 Linux를 사용했습니다.
  • gcc는 Linux에서 가장 일반적으로 사용되는 컴파일러이지만 자신의 컴퓨터에는 설치하지 않은 적이 있습니다.
  • 주로 Windows에서 자신을 위해 소프트웨어 작업을 수행하지만 다른 사람이 호환 가능하고 바이너리를 배포하기 위해 Linux를 사용하는 경우 버그를 수정하지 않아도됩니다.
  • 이미 가지고있는 다른 사람이 빌드를 완벽하게 기꺼이 할 때 다른 OS와 툴체인에 대한 비용을 지불하고 싶지 않습니다.

2
요약하면 일부 프로그래머에게는 다른 플랫폼에 대한 이진 파일을 만들려는 지식, 리소스 또는 동기가 없습니다.
M. Dudley

11

카이로는 응용 프로그램이 아닌 라이브러리입니다. Postgres에는 Windows 바이너리 가있는 것 같습니다 . 소규모 프로젝트는 종종 인프라 / 자원이 없기 때문에 빌드를 제공하지 않습니다.


4
+1 특히 "자원이 없습니다". Windows 용 라이센스가 없거나 Windows 컴파일러 (또는 크로스 컴파일러를 실험 할 시간)가없는 경우 테스트 된 Windows 빌드를 제공하기가 어렵습니다.
Steve314

1
@ Steve314 : 누구나 Windows 컴파일러 (오픈 소스 gcc 또는 무료 Visual Studio Express)가 있습니다.
gbjbaanb

1
라이브러리에는 바이너리, 즉 dll도있을 수 있습니다. 종종 원래 라이브러리를 빌드하기 위해 컴파일러 (설치) 또는 종속성이 없습니다. 라이브러리에서도 바이너리를 얻는 것과 같습니다.
코드 InChaos

4
@CodeInChaos : Linux는 .dll자주 사용하지 않으므로이 바이너리는 우리 중 일부에게는 쓸모가 없습니다. 순수한 소스가 더 좋을 것입니다.
S.Lott

9
@gbjbaanb : 모든 컴파일러가 Windows 설치를하는 것은 아닙니다.
David Thornley

9

그것은 "원하는 일을 원한다면 삽을 가져라"라는 오픈 소스 철학의 일부입니다. 당연히 사용자가 프로그램 자체를 컴파일하면 개발자의 작업 부하가 줄어 듭니다. 모든 아키텍처, OS 등에 대해 걱정할 필요가 없습니다.

그러나 소비자 수준의 제품 (Firefox, Paint.NET, Audacity, Keepass 등)을 만들고 사용자 확보에 관심이 있다면 항상, 항상, 항상! 바이너리를 포함합니다. 아마도 귀하의 웹 사이트를 우연히 본 적이 있고 귀하의 제품에 관심이있는 사람 중 2 %만이 다음을하려고합니다.

  • 적절한 SCM 클라이언트 다운로드
  • 소스 트리의 전체 사본을 확인하십시오.
  • 필요한 IDE 또는 컴파일러 도구 다운로드 (일부 프로젝트의 경우 수백 MB)
  • 필요한 모든 종속성을 다운로드하여 설치하고 환경 변수를 설정하십시오.
  • 새로 컴파일 (일부 프로젝트에서는 10 분 정도 소요)
  • 오류나 문제를 다루거나 발생하는 문제 (작은 프로젝트에서는 문서화되지 않았을 것입니다. "아, 최신은 실제로 트렁크가 아닌 분기 재 작성입니다!")
  • 모든 것을 제거하거나 컴퓨터에 그대로두고 업데이트를 위해 다시 컴파일하십시오.

(반드시 Linux에서는 훨씬 더 안전하지만 대부분의 소비자는 여전히 Windows를 사용합니다.)

새로 온 사람들이 "오, Windows 버전! 다운로드. 실행"이라고 말하는 것이 훨씬 쉽습니다.

그러나 많은 오픈 소스 프로젝트는 소비자 수준 이 아닙니다 . 그들은 이런 종류의 시련에 대해 훨씬 높은 내성을 가진 프로그래머를 목표로하므로 바이너리는 DIY입니다. 내 경험상 프로그래머는 사용자만큼 게으를 수 있으므로 경고하십시오. :)


이것들은 내가 처음에 질문을하게 한 유형의 문제입니다.
M. Dudley

3
IDE가 필요한 프로젝트를 누가 배포 할 것인가? 그리고 사람들은 보통 SCM에 배포하지 않습니다. 그것은 wget, tar xfz, ./configure, make, su -c 'make install'과 비슷합니다.
대안

공정한 포인트, 수학. 또한 최신 SCM 호스트 (예 : GitHub)를 사용하면 최신 버전의 압축 사본을 다운로드 할 수 있습니다.
Phil Cohen

@mathepic : Windows 개발자입니다.
스튜어트 P. 벤틀리

@Stuart VS 프로젝트는 msbuild 파일입니다. IDE가 필요하지 않습니다.
대안

6

Write Once Compile Anywhere 환경 (C, C ++ 등)으로 작성된 응용 프로그램 제작자는 컴파일 단계를 널리 사용되는 아키텍처의 바이너리를 만들고 패키징하는 배포자 (apt, rpm, yum 등)로 푸시 할 수 있습니다. 이를 통해 제작자 측에서 적은 노력으로 최대의 휴대용 응용 프로그램을 구현하고 핵심 역량에 집중하는 데 더 많은 시간을 할애 할 수 있습니다 (응용 프로그램을 개발하고 여러 아키텍처를 위해 호스팅하지 않고 응용 프로그램 개발). 일부 WOCA 응용 프로그램 제작자는 Windows와 같은 특수한 경우 추가 비용을 지불 할 의향이 있습니다. 왜냐하면 아무도 그 누구도 기대하지 않고 시장을 포기하고 싶지 않기 때문입니다.

반면에 Java ( Write Once Run Anywhere) 환경 또는 특정 대상 아키텍처 (예 : OS X 응용 프로그램)로 작성된 응용 프로그램은 단일 바이너리를 제공 할 수 있으며 컴파일 비용 만 지불하면되기 때문에 종종 그렇게합니다 한 번 비용.

마지막으로, 사용자는 일반적으로 소스에서 빌드하거나 OS 패키지 관리자를 사용하는 것이 편하므로이 모델은 더 나은 유용성을 제공합니다. 사용자는 바이너리를 구할 수있는 곳 (패키지 관리자), 일관된 설치 및 패키지 관리 수명주기 경험, 필요한 소스를 얻을 수있는 곳을 알고 있습니다.


2
어디서나 한 번 쓰기 실행의 한 가지 문제점은 가상 머신이 O / S 관점에서 볼 때 자체적으로 프로그램이라는 것입니다. 예를 들어 대부분의 Windows 방화벽을 사용하면 앱별로 네트워크에 대한 액세스 권한을 부여 / 거부 할 수 있습니다. 그러나 대부분의 Java 응용 프로그램은 다른 Java 응용 프로그램에서 JVM에 대한 액세스 권한을 부여 / 거부 할 수 없지만 인터넷 서버 (Azureus 등) 역할을하는 Java 응용 프로그램이 하나 있으면 방화벽은 알 수없는 악성을 차단하지 않습니다. 서버로 작동하는 Java 응용 프로그램 Java 관련 솔루션이 있다면, 그것을 모르는 Java 사용자의 예입니다.
Steve314

1
@Steve 나는 당신에게 그다지 동의하지 않지만 WOCA 또는 WORA의 장단점 이이 질문과 어떻게 관련되어 있는지 실제로는 알지 못합니다.
Rein Henrichs

접선이지만 사실이지만 이미 리눅스와 Windows 등의 종교 전쟁에 관한 질문에서, 아마도 더 적은 범죄 중 하나 일 것입니다. BTW-유용한 답변으로 +1했습니다.
Steve314

예이 종교 전쟁! 나는 타르를 얻을 것이다, 당신은 깃털을 얻는가?
Rein Henrichs

5

어쨌든 내가 제공하는 소스를 빌드하는 대신 빌드 (확실히 매우 클 수 있음)를 제공하는 대역폭을 씹고 싶은 이유는 무엇입니까? 자신의 컴퓨터에 프로젝트를 빌드하면 플랫폼에 맞게 특별히 컴파일 되므로 항상 더 나은 결과를 얻을 수 있습니다.


4
+1- "항상"(어떤 플랫폼을 사용 하느냐에 따라 다름)은 의심스럽고, 이러한 이점은 사용자에게 어느 정도 비용이들 수 있습니다. 컴파일러, 사용 방법, 빌드 방법을 알아야 함 특정 플랫폼 등에서 만 발생하는 이상한 버그를 조사하고보고하는 데 시간을 소비해야하는 특정 프로젝트.
Steve314

1
@ steve314 : +1, 모든 실제 포인트 :)
Demian Brecht

7
이진 파일 몇 개는 보통 그렇게 크지 않습니다. 그리고 사용자에게 걸리는 시간 비용은 일반적으로 매우 큽니다. 모든 의존성을 찾고 특정 프로젝트를 구축하는 방법을 알아내는 데는 시간이 많이 걸립니다. 사용자가 프로그래머 인 경우에도 마찬가지입니다. 사용자가 프로그래머가 아니면 제품을 잊어 버릴 수 있습니다. 그리고 나는 성능 주장이 과대 평가되었다고 생각합니다. 일반적으로 성능의 마지막 퍼센트가 필요하지 않으며, 그렇게하면 소스에서 빌드하는 방법을 여전히 알 수 있습니다.
코드 InChaos

1
@ codeinchaos : 전적으로 프로젝트 (크기)와 관련이 있습니다. 빌드는 단일 바이너리 또는 바이너리 및 컴파일되지 않은 자산 (게임을 생각할 때)에 수백 MB를 포함 할 수 있습니다. 물론, 의존성을 없애는 것은 약간의 고통이 될 수 있지만, 목록을 제공하거나 의존성을 다운로드 / 빌드하는 빌드 타임 메커니즘을 제공하는 것은 패키지 작성자에게 달려 있습니다 (FreeBSD의 포트 수집은 훌륭 합니다) . 프로그래머가 아닌 사람을 대상으로하는 프로젝트는 거의 항상 이진 / 설치자 목록을 유지합니다.
Demian Brecht

많은 오픈 소스 프로젝트가 일반적인 의미에서 "제품"이 아니라는 것입니다. 오픈 소스는 다양한 형태의 기여를 허용하는 것에 관한 것이므로 다른 사람들에게 바이너리를 제공하는 방법을 알고 있고이를 유지할 시간이있는 것은 좋은 생각처럼 보입니다.
phaylon

2

두 가지 이유를 생각할 수 있습니다.

첫째, 여러 유형의 하드웨어에서 여러 운영 체제를 실행하고 있습니다. 빌드해야 할 바이너리 대상의 수는 관리 할 수 ​​없게됩니다. 32 비트 또는 64 비트 하드웨어에서 여전히 일반적으로 사용되는 세 가지 버전의 Windows (XP, Vista, 7)가 있습니다. 그것은 바로 6 개의 이진 목표입니다. 리눅스에서 상황이 더 나 빠지고, 신에서 ​​실행되는 훨씬 더 다양한 배포판이 하드웨어 (x86, PPC, MIPS, SPARC, PA-RISC 등)를 알고 있습니다. 가능한 모든 조합 을 위해 구축 하시겠습니까? 장비 및 / 또는 소프트웨어가 있습니까? PII에서 NT를 계속 실행하고있는 사람이 있다면 (하나님이 우리를 도와주십시오), 바이너리를 만들겠습니까?

둘째, 배송 소스는 사용자가 특정 환경에 맞게 빌드를 최적화 할 수 있음을 의미합니다. 필요한 최적화 기능을 켜거나 필요한 경우 소스 자체를 조정할 수 있습니다.


답은 Sourceforge의 빌드 서버와 같은 것을 사용하는 것입니다. 체크인, 당신에게 바이너리를 많이 만들어 보자. 같은 en.opensuse.org/Build_Service
gbjbaanb

1
이러한 프로그램은 일반적으로 특별한 Vista / Win7 기능을 사용하지 않고 32 비트 프로그램은 64 비트 OS에서 실행되므로 거의 모든 Windows 사용자를 위해 단일 32 비트 WinXP 바이너리를 사용하면 거의 항상 벗어날 수 있습니다.
코드 InChaos

@CodeInChaos-+1-일부 프로젝트는 32 비트 및 64 비트 바이너리를 제공하지만 그보다 더 많은 변형을 제공합니다. 그래도 유효한 포인트입니다.
Steve314

@gbjbaanb - 대답은 분명하지만, 아마 대답.
Steve314

2

일반적으로 응용 프로그램, 시스템, 모듈 또는 라이브러리 인 오픈 소스 프로젝트의 가치는 필요에 따라 연구 및 / 또는 수정할 수 있다는 것입니다. 소스 배포는 게시 모델에 고유합니다.

바이너리를 배포하면 악의적 인 목적으로 어떤 방식 으로든 수정 될 위험이 있습니다. 소스에서 프로젝트를 컴파일하면 해당 위험을 완화 할 수 있습니다.


응용 프로그램의 경우 사용자의 90 % 이상이 소스를 보지 않을 것입니다. 그리고 조작 위험은 대부분의 바이너리 다운로더가 기꺼이 취하는 것입니다. 소스 코드에 악성 코드가 포함되어 있지 않은지 확인할 수 없습니다 (너무 게으른 것일 수도 있음).
코드 InChaos

2
그러나 OP는 오픈 소스 프로젝트가 일반적으로 바이너리로 배포되지 않는 이유를 "사용자로서, 왜이 모든 것을 컴파일해야합니까?" ;-)
Rob Raisch

그러나 사용자는 바이너리가 아닌 소스를 얻는 것이 더 나은 이유에 대해 논쟁 중입니다.
코드 InChaos

1
웃긴, 내 대답이나 원래 질문에 '사용자'라는 단어가 표시되지 않습니다. 아마도 내 자신의 답변을 잘못 읽고 있습니까?
Rob Raisch

1
"바이너리를 제공하지 않는 이유"를 제공하지 않았기 때문에 내 의견을 잘못 해석 한 것에 대해 흥미를 느끼는 것에 흥미가있다. 오픈 소스 프로젝트가 일반적으로 소스 코드로 배포되는 이유에 대한 설명 만 제공했습니다. 연주 해 주셔서 감사합니다. 그러나 이것에 대한 마지막 의견입니다.
Rob Raisch

1

몇 가지 이유가있을 수 있습니다. 많은 오픈 소스 프로젝트가 리눅스에서 시작됩니다. 따라서이 시스템에 대한 초기 프로젝트가 완료되고 팀 구성원이 패키징을 수행합니다.

Windows 설치 프로그램을 작성하는 것은 추가 작업이며 Linux 개발자에게는없는 지식이 필요합니다. 따라서 핵심 팀 외부의 누군가가이 작업을 수행하는 경우 종종 언급됩니다.

OS X 또는 특정 Linux 배포판과 같은 다른 시스템에서도 마찬가지입니다. 그것은 모두 여분의 작업을 수행 할 지식과 시간을 가진 사람에 달려 있습니다.


Windows 설치 프로그램이 거의 필요하지 않습니다. 바이너리가있는 zip 파일도 좋습니다. 그러나 물론 많은 리눅스 기반 개발자는 Windows 버전의 프로그램에 대해 크게 신경 쓰지 않을 것입니다.
코드 InChaos

1
zip 파일은 Windows 세계에서 큰 장애가 될 수 있습니다. '이 파일을 다운로드했습니다. 이제 클릭하면 "알 수없는 파일 형식"이 도움말 포럼에서 자주 발생하는 문제입니다.
thorsten müller

모든 내용을 .zip 파일로 게시했습니다. 이 맥락에서 내가 얻은 유일한 불만은 링크를 만드는 대신 exe 파일을 자신의 바탕 화면에 복사 한 사람에 의한 것이라고 생각합니다. 그러나 어쨌든 소스에서 빌드하는 어려움은 무언가를 압축 해제하는 것보다 훨씬 높습니다.
코드 InChaos

1
사용자 기반에 따라 다릅니다. 프로그래머 만 사용하는 라이브러리를 게시하면 zip 파일에 문제가 없습니다. Zip은 쉽게 사용할 수 있으므로 기본 지식이있는 모든 사용자가이를 수행 할 수 있습니다. 지퍼 문제를 자주 보았지만 ...
thorsten müller

1
XP +에서는 zip 파일이 OS에서 기본적으로 처리되므로 충분한 두 번 클릭하면 압축이 풀린 폴더에 파일이 열립니다.
Phil Cohen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.