8P by GN⁺ 3일전 | ★ favorite | 댓글 10개

"리눅스 배포판을 윈도우처럼 만들어야 합니다."

  • 이 글은 기존 리눅스의 이식성과 배포 방식의 문제를 해결하기 위해 기본적으로 Wine을 통해 윈도우 실행 파일을 구동할 수 있는 리눅스 배포판을 만들자는 제안임
  • 이를 통해 윈도우 사용자들이 거의 훈련 없이 리눅스로 쉽게 전환할 수 있으며, 리눅스의 오랜 호환성 문제도 함께 해결 가능함

리눅스 환경의 불안정성

  • 윈도우에서는 20년 된 .exe 파일도 실행이 가능한 반면, 리눅스에서는 1년 전 바이너리도 실행되지 않을 수 있음
  • 이는 리눅스의 라이브러리 버전 차이와 업데이트로 인해 동일한 실행 파일이 다양한 배포판에서 동작하지 않게 되는 문제 때문임
  • 리눅스의 시스템 콜은 안정적이지만, 그 위에 얹힌 C 라이브러리(libc)는 불안정하며 사용자 영역 대부분이 이에 의존함

리눅스에서의 바이너리 배포 문제

  • 리눅스에서는 실행 파일을 배포하는 주요 방법이 무려 네 가지나 존재하며 각각 문제를 안고 있음
    • 생 바이너리: 대부분의 환경에서 동작하지 않음
    • AppImage: 모든 의존성을 포함하지만, 완벽한 보존성은 미지수
    • Flatpak: 앱마다 샌드박스를 제공함
    • Snap: 또 다른 샌드박스 기반 패키지 관리자
  • 이들 모두 설치, 업데이트, 삭제 방식이 서로 다르고 동시에 공존 가능함
  • 장기적인 앱 보존 및 재실행에는 대부분 적합하지 않으며, 20년 후 실행 가능성은 거의 없음

Win32가 해결책인 이유

  • 윈도우의 Win32 API는 리눅스에서 유일하게 안정적인 ABI(Application Binary Interface)라고 평가됨
  • 윈도우는 직접 시스템 콜을 하지 않고 동적 라이브러리를 통해 호출함으로써 API의 안정성을 유지함
  • 이 구조 덕분에 마이크로소프트는 내부적으로 커널을 변경하면서도 사용자에겐 동일한 인터페이스를 제공 가능함
  • 반면 리눅스는 시스템 콜을 직접 호출하고, 라이브러리가 불안정하여 호환성 문제가 지속됨
  • Wine은 이러한 Win32 구조를 구현하여 1990년대 윈도우 95 시절의 앱까지 실행 가능하게 함
  • 특히 Win32 기반 앱만을 사용하면 Wine과 윈도우 간의 호환성 차이는 거의 없음

새로운 리눅스 배포판 구상

  • 윈도우와 유사한 데스크탑 환경을 가진 리눅스 배포판을 만들자는 제안
  • 이 배포판은 기본적으로 Wine이 설치되어 있으며, 작은 커널 패치를 통해 윈도우 실행 파일을 자동 인식 및 실행 가능하게 함
  • 사용자당 Wine 환경(prefix)을 설정하고, 윈도우 스타일의 파일 시스템 및 GUI를 제공함
  • 기존의 리눅스 환경도 백그라운드에 유지되며 고급 사용자가 접근 가능함

진정한 멀티플랫폼 지원

  • Wine은 리눅스뿐만 아니라 FreeBSD, macOS, Android 등 다양한 OS에서 실행 가능함
  • 모든 앱을 Win32 앱으로만 배포하면 별도 포팅 없이 여러 플랫폼에서 실행 가능함
  • 하나의 앱으로 여러 운영체제 호환성을 확보할 수 있는 구조임

미래의 위협

  • macOS와 Windows는 점점 더 폐쇄적인 방향으로 발전 중이며, 사용자의 통제권을 박탈하고 있음
    • Windows는 자동 스크린샷과 AI 분석 기능을 추가 중
    • macOS는 Gatekeeper를 통해 승인된 앱만 실행 가능하도록 제한
  • 두 OS 모두 사용자의 활동을 감시하고 불법 파일 탐색 및 신고 기능까지 준비 중
  • Microsoft는 온라인 계정 없이 Windows 사용을 점점 더 어렵게 만들고 있음
  • 이로 인해 계정 정지 시 컴퓨터 자체를 사용할 수 없는 상황이 올 수 있음

이러한 흐름은 악의적이라기보다는 경제적, 정치적 압력에 의해 발생하는 문제로 해석함

리눅스를 윈도우로 포장하는 이유

  • 새로운 리눅스 배포판은 이식성 문제를 해결하고, 윈도우 사용자에게 친숙한 전환 환경을 제공함
  • Windows 11 업그레이드가 강제되는 시점에서, 쉽게 전환 가능한 대안을 제공할 수 있음
  • 지금이야말로 사용자의 주권을 회복할 수 있는 리눅스 배포판을 구상할 적기라는 주장임

20년을 버티는 에코시스템에는 끄덕이게 되는데 그 끝에 왜 wine이..

맥 OS는 더 못쓸듯

비판적으로 보고 싶은건 아닌데 여러 운영체제를 사용해본 사람로서 공감이 잘 안되네요. 지금 웬만한 GUI도구는 웹으로 가능하고 좋은 데스크탑이 필요하면 UI가 아름다운 윈도우에서 하는게 나을 것이고 드라이버 지원도 윈도우즈가 훨씬 좋은데

윈도우 11 이상 PC 없이 게임이 가능한 시대가 오면 좋겠습니다 ㅜㅜ

Steam이 되어야 하는데 말이죠...

티맥스 윈도우... Lindows/Linspire... 리액트OS... 으윽 머리가...
밸브 Proton이 정말 큰 일 하는거 같네요

뭔가 신박한 제안이네요

그냥 Top-tier 게임 / 소프트웨어를 잘 구동되게끔 트윅해주는게 더 낫지 않나

...라고 생각하면 안되겠지요? ㅋㅋ

Hacker News 의견
  • Linux 배포판에서 기본적으로 Windows 바이너리를 실행하는 Wine을 사용하는 배포판을 만들자는 의견이 있음

    • Debian에서는 sudo apt install wine-binfmt 명령어로 쉽게 설치 가능함
    • 다른 방법으로도 설정 파일을 수정하여 사용할 수 있음
  • Windows에서는 20년 된 exe 파일도 여전히 실행 가능하지만, Linux에서는 1년 된 바이너리도 업데이트로 인해 실행이 불가능할 수 있음

    • Windows는 앱 설치 시 모든 동적 의존성을 함께 패키징하는 반면, Linux는 앱 간에 동적 의존성을 공유함
    • 의존성을 변경하면 앱이 작동하지 않을 수 있음
    • 이를 해결하기 위해 Windows처럼 배포하거나 정적으로 링크하는 방법이 있음
  • 새로운 배포판이 필요하다고 생각하지 않음

    • 대부분의 Windows 앱은 Wine을 통해 작동 가능하지만, 한 앱을 작동시키기 위한 해킹이 다른 앱을 망가뜨릴 수 있음
    • 각 사용자가 개별적으로 설정을 조정해야 하며, 한 사람의 컴퓨터에서 작동하는 것이 다른 사람의 컴퓨터에서는 작동하지 않을 수 있음
    • 가장 간단한 해결책은 Wine이 포함된 컨테이너를 배포하여 모든 사용자가 동일한 아티팩트를 받고 항상 작동하도록 하는 것임
    • 공간 비효율적이지만, 컨테이너 사용을 위해 Wine을 슬림화하는 방법이 필요함
    • 라이선스와 소프트웨어 안티 패턴이 이 시스템의 유일한 장벽임
  • Zorin OS는 .exe 파일에 대한 Wine 지원을 거의 기본적으로 제공하며, Steam OS/Proton은 새로운 게임의 Linux 포트를 만들지 말고 Proton에 최적화하라는 공식 지침이 있음

  • Linux 배포판은 일반적으로 실행 파일을 동적으로 링크하고 이전 버전의 라이브러리를 유지하지 않음

    • Windows는 패키지 관리자가 없기 때문에 이전 버전의 실행 파일을 유지함
    • Windows Store와 최근 CLI 도구가 있지만, 전통적으로 Windows 애플리케이션 설치는 수동 다운로드와 설치를 통해 이루어짐
    • Linux에서도 동일한 방식으로 할 수 있지만, Linux 배포판의 패키지 관리자가 일반적으로 매우 우수함
  • Linux 시스템 호출은 매우 안정적이지만, 그 위의 C 라이브러리는 그렇지 않음

    • Windows도 동일한 문제가 있으며, Visual C++ 런타임의 일부로 libc를 배포함
    • Windows는 Visual Studio의 새로운 버전을 출시할 때까지 libc의 하위 호환성을 유지함
  • Lindows/Linspire를 원하는 사람처럼 들림

  • Windows ABI가 매우 안정적이라면, 왜 Win95나 NT를 사용하는 컴퓨터가 특정 소프트웨어가 작동을 멈출까봐 아무도 건드리지 않는지 궁금함

    • 산업 환경, 공공 도서관, 기업 데이터베이스 등에서 이러한 컴퓨터를 많이 볼 수 있음
  • exe 파일 실행을 위한 커널 패치가 필요하지 않으며, binfmt_misc가 이를 처리할 수 있음

    • wine-binfmt는 PE 파일을 자동으로 Wine을 통해 실행함