종속성 지옥: 휴대용 앱을 만들지 않는 이유 [닫기]

종속성 지옥: 휴대용 앱을 만들지 않는 이유 [닫기]

Windows 시절에는 응용 프로그램이 독립형 방식으로 설치되었습니다. 이를 통해 최종 사용자/시스템 관리자는 다른 응용 프로그램을 방해하지 않고 무엇을 업그레이드할지, 어디를 업그레이드할지, 무엇을 패치할지, 언제 패치할지 결정할 수 있는 자유를 갖게 됩니다.

*NIX에서는 복잡한 종속성이 골치 아픈 일입니다. PC-BSD는 이 문제를 극복하려고 시도합니다.폴리페닐렌 에테르, 독립형 애플리케이션을 생성하여. AFAIK, 이것은 이제 더 이상 사용되지 않는 것 같습니다. 패키지 관리 방식으로 돌아가고(PBI는 이제 포트 래퍼입니다) 모든 Linux 배포판은 동일한 방향으로 실행됩니다. 끝까지 수백 개의 종속성, 심지어데스크탑 환경은 시스템 관리 데몬에 의존할 것으로 예상됩니다..

수백 개의 종속성을 기반으로 애플리케이션을 구축하면 프로그래머의 삶이 더 쉬워지지만 최종 사용자와 시스템 관리자에게는 놀라운 문제가 발생합니다. 예를 들어 Debian Jessie에서는 더 이상 고대 Debian Etch 버전의 애플리케이션을 실행할 수 없습니다. 많은 사람들이 보안, 패치, 최신 시스템에 대한 이야기를 가지고 오는 것을 알고 있습니다. 하지만 오픈 소스는 무엇을 업데이트할지, 언제, 어디서 업데이트할지 자유롭게 결정할 수 있다는 것을 의미합니다. 시스템이나 그 일부를 업데이트하지 않거나 적어도 일반적인 *NIX 패키지 관리자가 사용자에게 안내하는 방식(예: 오프라인으로 작동하는 시스템, 오래된 하드웨어, 업데이트해야 하는 기존 데이터와의 호환성)을 업데이트하지 않는 데에는 매우 좋은 이유가 있습니다. . 규정 준수를 보장하기 위해 예약되었습니다...). 어떤 경우에는 시스템 관리자가 보안상의 이유로 여러 단계를 진행하는 것을 선호합니다.

개인적으로 무엇을 업데이트할지, 언제 업데이트할지 결정하고 위험을 감수하는 것이 시스템 관리자로서 내 역할이라고 생각합니다. 현재 상황으로는 이것은 불가능합니다. (즉, 데비안에는 모든 곳에 종속성이 있는 새 버전의 libc6이 있습니다). 이 문제를 해결하기 위해 두 개 이상의 저장소를 유지하기로 결정했다면 또 다른 악몽을 겪게 될 것입니다.

특정 종속성(예: MySQL 설치)은 주요 종속성이므로 허용될 수 있다는 것을 알고 있지만 라이브러리와 같은 작은 종속성이 단순히 코드에 포함되지 않는 이유를 이해할 수 없습니다. 접시는 매우 저렴합니다. Windows로 포팅된 많은 Linux 애플리케이션이 이를 구현합니다.

편집: 단지 의견에 기반한 것이 아닌지 확인하세요.

*NIX(간단히 Debian/FreeBSD라고 부르겠습니다)에 소프트웨어를 설치하기 위한 옵션은 무엇입니까?

  • 업그레이드 없이 소프트웨어의 단일 특정 버전을 수년 동안 실행하고, 후속 기본 운영 체제 및 라이브러리 업그레이드 등에 관계없이 변경되지 않은 상태로 유지되도록 합니다.유지 관리가 용이함하지만 결코.

  • 다른 소프트웨어/라이브러리와 충돌하지 않고 업그레이드/다운그레이드하기로 결정합니다.

  • 두 개 이상의 소프트웨어 버전을 설치합니다.

Jails/chroot/VM은 확실한 해결 방법이지만 옵션은 아닙니다. 반품,

  • PBI가 포트/패킷 관리 독립성을 반환하려는 목표를 달성하지 못하는 원인은 무엇입니까?

답변1

PBI가 성공하지 못한 이유에 대해서는 답할 수 없지만 Linux에서 공유 라이브러리가 선호되는 이유에 대해서는 답할 수 있습니다.

주요 주장보안, 일반적으로 사용되는 라이브러리에 취약점이 있는 경우 해당 라이브러리를 사용하는 모든 애플리케이션이 아닌 해당 라이브러리만 업데이트하면 됩니다(ABI 호환성으로 인해). 이는 또한 (주로 기본 저장소와 PPA(Ubuntu용)를 고수하는 경우) 애플리케이션이 해당 버전(예: Windows)에 대해 컴파일되었기 때문에 4가지 다른 버전의 라이브러리를 설치할 필요가 없다는 것을 의미합니다. .NET 라이브러리가 설치되어 있거나 다른 버전의 Visual C++ 런타임이 설치되어 있음).

그럼에도 불구하고 어떤 경우에는 애플리케이션이 라이브러리의 시스템 버전을 강제로 사용하지 않고 대신 자체 버전을 사용할 수도 있습니다. 예를 들어 Chromium은 대부분의 배포 저장소에 있는 많은 라이브러리에 의존합니다. 일반적인 상황에서는 애플리케이션이 사용하는 라이브러리가 배포판에서 컴파일된 라이브러리가 되도록 애플리케이션이 컴파일됩니다. 그러나 우분투에서는 (적어도) Chromium은 다음과 같은 이유로 자체 버전의 라이브러리로 컴파일됩니다.

  • 라이브러리의 시스템 버전을 사용한다는 것은 Chromium을 모든 Ubuntu 버전에 대해 테스트해야 함을 의미합니다.
  • Chromium은 이미 대부분의 경우 최신 버전의 라이브러리를 사용하므로 취약점이 발생할 가능성이 훨씬 낮습니다.

디스크 공간에 관해서는 debootstrapDebian Jessie의 ed 버전을 설치하는 데 1GB 미만의 디스크 공간이 필요하며 이는 더 작은 SD 카드에 적합하다고 주장할 수 있습니다. 반면에 Windows에는 다음이 필요합니다.적어도수 기가바이트의 디스크 공간.

이전 소프트웨어의 경우 애플리케이션을 정적으로 컴파일하고 대부분의 종속성을 독립적으로 만들 수 있습니다. 그러나 배포판에는 사용 가능한 정적 버전의 라이브러리가 없을 수 있으므로(Debian 및 Ubuntu에는 대부분의 경우가 없음) 이러한 라이브러리의 정적 버전을 얻으려면 이러한 라이브러리를 직접 컴파일해야 합니다.

마지막으로 Unix의 원칙 중 하나는 모든 애플리케이션이 한 가지 일을 하고 그 일을 잘한다는 것입니다. 애플리케이션과 라이브러리가 정적으로 링크되어 있으면 (간접적으로) 많은 일을 하는 것으로 생각할 수 있습니다.

관련 정보