커널에 대한 저의 지식은 다소 제한적이므로 이 질문이 잘못된 출발점에서 나온 경우에는 양해해 주시기 바랍니다.
내 노트북과 같은 x86 기반 컴퓨터에서는 원하는 모든 Linux 배포판을 설치할 수 있습니다. WLAN 카드나 그래픽 카드에 약간의 사소한 문제가 있을 수 있지만 대체로 모든 버전의 Linux 커널을 설치할 수 있습니다.
ARM 프로세서를 탑재한 Android 휴대폰이나 Raspberry Pi와 같은 시스템은 실제로 이 작업을 수행할 수 없으며 특수 코어를 장착해야 합니다. 그리고 칩 제조업체는 특정 버전의 Linux 커널과 함께 컴파일된 버전의 드라이버만 제공하는 것으로 보입니다. 안드로이드 휴대폰은 업데이트를 거의 받지 않으며, 소프트웨어는 자동차 엔터테인먼트 시스템만큼 하드웨어에 붙어 있는 것처럼 보입니다.
제조업체에서는 다양한 버전의 커널에 대한 드라이버를 유지 관리하는 것이 너무 많은 작업이며 새 버전으로 이식하는 것도 너무 어렵다고 말합니다. 그런데 왜 안드로이드 사용자가 합당한 노력을 기울여도 업데이트를 받을 수 없을 정도로 특정 버전에 너무 밀접하게 묶여 있어야 할까요? x86에서 실행되겠죠?
드라이버가 커널에 너무 긴밀하게 통합되어 있는지 궁금합니다. 독립적인 모듈로 분리하는 것이 도움이 될 수 있습니다. 그런 다음 장치 제조업체는 여전히 컴파일된 코드를 출시할 수 있지만(경쟁업체가 해당 장치의 디자인을 추론할 수 없도록), 다른 Linux 버전에 대해 사용할 수 있습니다. Android 및 데스크톱 Linux 배포판은 최신 커널을 사용하여 최신 버전을 출시하므로 해당 커널 버전용 드라이버 없이는 전체 시스템을 업그레이드할 수 없습니다.
Android 기기가 여전히 이전 버전에 머물고 있는 근본 이유는 무엇입니까?
답변1
저작권, 특허 및 기타 지적재산권 문제가 실제로 근본 원인입니다. 하드웨어 제조업체는 전체 세부 정보를 공개하지 않지만 바이너리 Blob을 제공합니다. 불행하게도 커널의 내부 작동은 완전히 안정적이지 않으므로 릴리스할 때마다 바이너리 blob을 업데이트해야 합니다. 업데이트를 제공한다고 해서 제조업체에 추가 수익이 발생하지 않는데 왜 소프트웨어 엔지니어에게 항상 변경 작업을 수행하도록 비용을 지불합니까? 이전 VMWare 커널 모듈(적어도 열려 있고 패치가 가능함)과 NVidia에서 그래픽 카드용으로 제공한 드라이버에도 동일한 문제가 있습니다.
Linus는 안정적인 내부 인터페이스에는 관심이 없다고 말했습니다. 하드웨어 제조업체가 자신의 제품이 항상 작동하기를 원한다면 코드를 열고 이를 기본 커널 트리에 통합해야 합니다... 다음은 Greg Kroah-Hartman kroah.com /log/linux /stable_api_nonsense.html의 멋진 (오래된) 게시물입니다.