Azure 리눅스 데스크톱
출처: Hacker News
뭔가 만들었어요…
![]()
Microsoft Build 2026에서 발표된 멋진 기능들을 직접 써보고 싶었습니다.
Azure Linux “Desktop” 은 전체 Linux 데스크톱을 윈도우 창 안에서 부팅하는 작은 윈도우 앱입니다. 실행하면 내장된 Linux 컨테이너를 시작하고, 몇 초 뒤에는 Azure Linux 4.0 위에서 동작하는 테마가 적용된 XFCE 데스크톱을 볼 수 있습니다. 오디오, GPU 가속, 복사·붙여넣기 기능이 동작하고, 창 크기에 맞춰 디스플레이가 자동으로 조절됩니다. 버튼도, 설치 마법사도, 터미널도 없습니다. 앱을 실행하면 바로 Linux 데스크톱이 나타납니다.
부분적으로는 Craig Loewen님의 Herbert 데모에서 영감을 받았습니다. 하지만 제게는 해결해야 할 문제가 있었기에 좀 더 확장해 보았습니다.
먼저 말씀드리자면, 이것은 장난감 수준의 프로젝트입니다. 빌드 과정에서는 컨테이너 런타임을 일찍 사용하기 위해 메인 브랜치에서 불안정한 WSL을 컴파일해야 하고, 서버용 배포판에 원래 포함되지 않아야 할 Fedora 데스크톱 패키지를 강제로 넣으며, 초기 소스 빌드 단계의 WinUI 실험에 의존합니다.
[
GitHub - sirredbeard/azurelinux-desktop: Azure Linux. In a container. On WSL. In a .NET app. With some whimsical desktop goodness.
Azure Linux. In a container. On WSL. In a .NET app. With some whimsical desktop goodness. - sirredbeard/azurelinux-desktop
GitHub sirredbeard
](https://github.com/sirredbeard/azurelinux-desktop)
네 가지 구성 요소
Build 2026에서 발표된 네 가지 기술이 여기서 각각 역할을 합니다. 각각도 흥미롭지만, 함께 모이면 시연이 완성됩니다.
wslc 컨테이너 API
wslc는 Windows용 새로운 Linux 컨테이너 런타임입니다. 별도로 글을 썼지만, 요약하면 Windows에서 OCI 컨테이너를 네이티브하게 실행하고 CLI와 API를 제공합니다. 이 앱은 API를 직접 사용해 세션을 만들고, 이미지를 로드하고, 포트 매핑을 지정한 컨테이너를 생성한 뒤 시작합니다.
wslc는 아직 WSL에 포함되지 않았습니다. 몇 주 안에 wsl.exe --update --pre-release 명령으로 프리릴리즈를 받을 수 있게 되고, 이후 정식 릴리즈가 될 예정입니다. 코드는 이미 WSL에 포함돼 있으니 메인 브랜치에서 직접 빌드해 일찍 사용할 수도 있습니다. (결과는 사용자마다 다를 수 있습니다.)
WinUI Reactor, XAML은 없다
앱은 Microsoft UI Reactor 기반입니다. Reactor는 WinUI 3 인터페이스를 코드‑퍼스트 방식으로 만들 수 있게 해 줍니다. 즉, React처럼 C#에서 컴포저블 함수와 상태 훅을 사용해 UI를 작성하고, XAML이나 코드‑비하인드 파일을 전혀 만들 필요가 없습니다. 이 프로젝트에도 .xaml 파일은 하나도 없습니다. 다행이죠.
전체 UI는 App.cs 안에서 Reactor 팩토리를 이용해 구성됩니다. 타이틀 바, 부팅 화면, 데스크톱 영역이 상태에 따라 전환됩니다. 부팅 화면과 내장된 데스크톱 모두 Reactor 요소입니다.
Azure Linux 4.0
Azure Linux 4.0은 기본 이미지입니다. 마이크로소프트가 만든 Linux 배포판이며, 4.0 버전은 Fedora Linux 43 스냅샷을 기반으로 빌드되었습니다. 이 점이 프로젝트에 중요합니다. Azure Linux는 기본적으로 데스크톱이나 GUI 패키지를 제공하지 않는 일반 서버·컨테이너 배포판이기 때문입니다.
하지만 Fedora 43 스냅샷을 기반으로 하므로 Fedora 43 저장소를 가리켜 XFCE를 설치하면 대부분 동작합니다. 이는 권장되는 방법은 아니지만, 공유 패키지 라인업이 가져다 주는 장점을 보여주는 좋은 예시입니다. 다시 한 번 오픈소스에 박수를!
.NET 10
앱은 .NET 10과 WinUI 3을 타깃으로 하며, Windows App SDK를 통해 패키징됩니다. dotnet run 명령으로 패키지 아이덴티티와 ReadyToRun 사전 컴파일을 사용해 빠른 콜드 스타트를 제공하고, 단일 dotnet publish 명령으로 x64 또는 ARM64 빌드를 만들 수 있습니다. 전체 프로젝트는 하나의 .slnx 파일이며, dotnet build 로 빌드합니다.
작동 원리
흐름은 매우 간단합니다. 앱을 실행하면 Azure Linux 로고와 스피너가 표시되는 부팅 화면이 나타납니다. 이 화면 뒤에서 데스크톱 이미지가 존재하는지 확인하고, 처음 실행 시 이미지를 빌드한 뒤 wslc에 컨테이너 시작을 요청합니다. 컨테이너는 XRDP 서버 위에서 XFCE를 실행합니다. 앱은 루프백(loopback) 주소를 통해 해당 서버에 연결하고, Windows RDP 클라이언트를 창 위에 배치합니다. 세션이 화면