저는 Debian 기반 배포판(Debian, Ubuntu, Linux Mint)을 사용하고 있습니다. 최신 버전의 소프트웨어는 일반적으로 리포지토리에 없기 때문에 소스에서 직접 다운로드하여 설치하는 경우가 많습니다.
그러나 소프트웨어가 업데이트에 대해 알려주는 경우가 거의 없다는 것을 알았습니다. 또한 실제로 스스로 업데이트하고 설치 권한을 요청하는 경우도 본 적이 없습니다.
프로그래머들은 일반적으로 Linux 버전이 패키지 관리자를 통해 업데이트될 것이라고 믿기 때문입니까?
답변1
이러한 유형의 기능을 구현하는 것은 "홈 호출"(업데이트가 가능한지 확인) 및 "제자리에서 업데이트" 측면에서 매우 어렵습니다.
- 사용자 시스템에서 실행되는 소프트웨어는 최신 버전이 사용 가능한지 확인하는 방법을 알아야 합니다(이는 애플리케이션에 네트워킹 코드를 추가하는 것을 의미하며, 다른 이유로는 네트워크를 사용하지 않을 가능성이 높습니다).
- 소프트웨어는 네트워크 상태에 관계없이 제대로 작동해야 합니다(분명히 완전히 오프라인일 때; 그러나 부분적으로 연결되어 있는 경우에도 이상한 오류로 인해 실패해서는 안 됩니다).
- 최신 버전이 사용 가능한지 결정할 수 있는 방법이 필요합니다(사용자가 소스 저장소에서 빌드할 때 버전을 어떻게 비교합니까?).
- 서버 측 기능을 갖춘 서버가 있어야 하며, 이를 개발해야 할 수도 있습니다.
- 서버나 중간자 공격을 통해 업데이트가 손상되지 않았는지 확인해야 합니다(따라서 TLS 및/또는 일종의 강력한 서명을 사용해야 함).
- 사용자가 사용할 수 있는 형식으로 업데이트를 제공해야 합니다. 사용자가 원래 소스에서 빌드했을 수도 있지만 소프트웨어를 실행하는 시스템에 소스에서 업데이트된 버전을 다시 빌드하는 데 필요한 모든 것이 있다는 보장은 없습니다. 바이너리를 제공합니다(모든 가능성의 대상 플랫폼에 대해?).
(이것은 완전한 목록이 아닙니다.)
이는 distro가 이미 처리하고 있는 문제이므로 distro가 문제를 처리하도록 하는 것이 더 쉽습니다. 게다가 만약에선행은 이루기가 어렵다이미 설명했듯이 최신 버전의 소프트웨어를 실행하는 데 관심이 있는 사용자는 최소한 공지 메일링 목록을 팔로우할 만큼 관심을 가질 수 있으므로 그런 방식으로 알림을 받게 됩니다.
고려해야 할 또 다른 측면은 상당수의 사람들이 어떤 방식으로든 전화에 응답하는 데 사용하는 소프트웨어를 원하지 않는다는 것입니다. 일부 배포판은 상당한 기간 동안 배포됩니다.제거하다배포하는 소프트웨어 또는 사용량을 추적하는 데 사용할 수 있는 소프트웨어의 다른 부분에서 이를 수행하는 코드(예를 들어웹에서 이미지, 글꼴 또는 CSS를 로드하는 문서). 모든 "개인정보 침해" 태그 보기데비안의 Lin Tian예를 들어.
이 모든 것은 자체적으로 업데이트 정보를 제공하는 데 필요한 메커니즘을 포함하는 소프트웨어가 거의 없고 자체 업그레이드가 가능한 소프트웨어가 훨씬 적은 이유를 설명합니다.
"문제"를 해결하는 다른 방법이 있습니다. CI 시스템을 사용하는 소프트웨어 개발자는 일반적으로 해당 시스템을 확장하여 일부 소비 가능한 형태(패키지)로 "야간" 빌드를 제공할 수 있습니다. 관심 있는 사용자는 자신의 빌드 시스템을 설정할 수 있습니다. 관심 있는 소프트웨어의 업데이트된 소스(이는 기업 환경에서 매우 일반적임) 또는 최신 소스 코드로 구축된 AUR 스타일 패키지를 설정할 수 있습니다.
답변2
소프트웨어 자체에 일부 브라우저 등과 같이 업데이트를 확인하기 위해 "집에 전화"하는 기능이 없는 경우사물을 동기화가능해 보이지만 일반적으로 사용자/관리자에게 최신 버전의 소프트웨어를 사용할 수 있음을 자동으로 알리는 메커니즘이 없습니다.
패키지 관리자를 사용하여 설치하는 패키지는 최신 상태를 유지하고 관심 있는 운영 체제에서 제대로 실행하는 데 관심이 있는 사용자가 만듭니다.
예를 들어 포장하는 사람들.안시푸르, 또는GNU 핵심 도구, 또는야쉬 쉘, 또는CMake또는 특정 Unix 시스템을 대상으로 하는 수천 개의 소프트웨어 프로젝트 중 다른 프로젝트는 해당 프로젝트의 관련 메일링 리스트에 가입되어 있거나(반드시 그런 것은 아님) 소스 코드 저장소 또는 소스 배포 파일을 정기적으로 보기 위한 특수 도구를 갖고 있을 가능성이 높습니다. 새 버전에 대해 알게 되면 Unix의 패키저에 따라 관련 방식으로 소프트웨어를 다운로드, 컴파일, 테스트, 패치(등) 및 패키징합니다. 여기에는 빌드/패키징 프로세스 중에 발생하는 비호환성 또는 기타 문제에 대한 업스트림(소프트웨어 개발자 포함) 및 다운스트림(소프트웨어 사용자 포함) 통신이 포함될 수 있습니다.
그런 다음 사용 중인 Unix와 타사 패키지 배포 방식에 따라 특정 방식으로 패키지를 등록, 업로드 또는 제출하므로 나와 같은 사용자는 패키지 관리자를 사용하여 시스템을 업데이트할 수 있습니다.
예를 들어, 내가 관심을 갖고 있는 것은GNU 스토우OpenBSD의 경우(저는 이 소프트웨어의 "포트 관리자"입니다). 나는 때때로 GNU 웹사이트에서 Stow의 현재 상태를 확인하고(자주 업데이트되지 않음) 새 버전을 찾으면 이를 설치하여 작동하는지 확인하고 내 개인 컴퓨터의 OpenBSD 포트를 업데이트합니다. 그런 다음 해당 포트에 대한 패치가 포함된 OpenBSD 포트 목록을 이메일로 보냅니다(포트는 OpenBSD에서 Makefile 세트로 배포됩니다). 커밋 권한이 있는 사람은 OpenBSD 포트 CVS 트리에 커밋하기 전에 내 패치가 완전히 적용되었는지, 포트가 올바른지 확인합니다.
다음에 사용자가 CVS 트리를 업데이트하고 포트를 다시 빌드하거나 결과 바이너리 포트를 다운로드할 때 GNU Stow 설치가 업데이트됩니다.그러나 GNU Stow 자체는 새 버전이 사용 가능한지 여부를 알지 못합니다.이는 단순히 GNU Stow가 수행해야 하는 작업이 아닙니다. 별도의 디렉터리 계층 구조에 타사 소프트웨어를 설치하기 위한 도구입니다.정말 이상해요사용될 때마다 "집에 전화"를 시도한다면 이상할 것입니다(예: ls
기능을 수행하려면 갑자기 네트워크 액세스가 필요했던 것처럼).
대부분의 경우 시스템의 여러 구성 요소를 함께 테스트해야 하기 때문에 소프트웨어 업데이트를 개별적으로 수행하는 것은 바람직하지 않을 수 있습니다. 필요한 인프라는 더 작은 소프트웨어 패키지를 심각하게 부풀리게 하며, 전문 지식이나 리소스가 부족한 개인이 자동으로 최신 상태를 유지하는 소프트웨어를 개발하기 위해 일종의 고가용성 업데이트 서버를 실행하는 것은 불가능합니다.
답변3
과거에는 필요에 따라 새로운 소프트웨어를 설치하는 전문가가 컴퓨터를 관리했습니다.
시간이 지나면서 다양한 운영 체제에서는 수동으로 소프트웨어를 최신 상태로 유지해야 하는 부담을 완화하기 위해 두 가지 서로 다른 전통을 발전시켜 왔습니다.
- Linux 및 대부분의 기타 최신 Unix 변형에서 운영 체제는 다음과 함께 제공됩니다.패키지 관리자. 대부분의 소프트웨어는 새 버전이 나올 때 소프트웨어를 업데이트하는 이 패키지 관리자를 통해 설치됩니다.
- Windows에는 최근까지 패키지 관리자가 제공되지 않았기 때문에 Windows 소프트웨어 공급업체는 자체 코드를 사용하여 업데이트를 설치하는 습관을 들였습니다.
패키지 관리자 접근 방식은 특히 오픈 소스 세계에 적합합니다. 오픈 소스 소프트웨어는 독립적으로 개발되고 함께 조립되는 수천 개의 패키지로 구성되기 때문입니다. 패키지를 조립할 때 많은 일이 잘못될 수 있으므로 대부분의 Linux 배포판은풀어 주다. 일부 배포판에는 유일한 일관성 검사가 소프트웨어 컴파일인 "롤링 릴리스"가 있습니다. 다른 곳에서는 더 많은 테스트를 수행하고 1년에 한두 번, 심지어 몇 년에 한 번씩만 새 버전을 제공합니다.
Windows 접근 방식에 비해 Linux 접근 방식의 한 가지 장점은 소프트웨어 패키지가 서로 협력할 수 있다는 것입니다. 이는 Windows 접근 방식에서는 어렵습니다. 소프트웨어 A와 소프트웨어 B가 함께 작업을 수행하려는 경우 파트너가 설치되었는지 여부를 모니터링하고, 업그레이드를 처리하고, 제거 시 조각을 남기지 않도록 주의해야 하기 때문입니다. 이는 특히 중요한 이유입니다. Windows 소프트웨어 사용하는 모든 라이브러리는 번들로 제공되어야 합니다. 즉, 라이브러리에서 버그가 발견되면 해당 라이브러리를 사용하는 모든 소프트웨어를 업데이트해야 합니다. 반면, Linux에서는 라이브러리를 사용하는 프로그램 수에 관계없이 라이브러리가 포함된 패키지만 업데이트하면 됩니다.
운영 체제는 소프트웨어 업데이트 메커니즘을 제공하므로 Linux 소프트웨어 작성자는 처음부터 다시 개발할 필요가 없습니다.
배포판에서 제공하는 것보다 최신 버전의 소프트웨어를 설치할 필요가 거의 없습니다. 일반적으로 최신 소프트웨어에는 버그도 많습니다. 배포판에서는 심각한 버그(특히 보안 버그)가 발견되면 업데이트를 제공합니다. 일부 소프트웨어의 최신 버전은 해당 버전에 필요한 새로운 기능이 있는 경우에만 유용합니다.
필요하지 않더라도 최신 버전의 소프트웨어를 갖고 싶다면 Debian stable 또는 Arch Linux와 같은 롤링 배포판을 설치해야 합니다. 일관된 버전(예: Ubuntu, Mint 또는 Debian stable)을 갖춘 배포판은 매주 시스템을 중단하고 싶지 않은 사용자에게 적합합니다.
답변4
다른 답변은 모두 좋지만 그 중 어느 것도 눈에 띄게 해결되지 않은 보안 문제를 추가하고 싶습니다.
소프트웨어를 설치하려면(적어도 시스템 전체에 걸쳐) 일반적으로 루트 액세스가 필요합니다. 이 권한을 올바르게 사용하기 위해 배포판의 패키지 관리자와 소프트웨어를 패키징하는 사람들을 신뢰하지만, 이를 올바르게 수행하기 위해 설치하는 모든 임의의 소프트웨어를 반드시 신뢰하는 것은 아닙니다.