여덟 가지 리눅스 환경에서 매번 확인하는 이유
"제 기계에서는 되는데요"라는 말을 하지 않으려고 실험실을 만들었어요. 우분투 버전·세션·입력기·설치 양식을 조합한 가상 머신을 띄우고, 같은 검사를 돌려 표 하나로 봐요.

리눅스에서 “된다”는 말은 충분하지 않아요.
같은 우분투도 버전에 따라 시스템 라이브러리와 툴킷이 달라요. 화면을 띄우는 방식은 X11과 Wayland로 나뉘고, 한글 입력기는 ibus나 fcitx5를 써요. 설치 방식까지 더하면 확인해야 할 조합은 빠르게 늘어나죠.
개발자 컴퓨터 한 대에서 실행됐다는 건, 수많은 조합 중 하나만 확인했다는 뜻이에요.
그래서 저장소 안에 작은 실험실을 만들었어요. 환경별로 실제 가상 머신을 띄우고 같은 검사를 반복해요. 결과는 표 하나에 모아요.
표가 확인하는 건 단순해요.
앱이 켜지는가. 한글이 입력되는가.
사용자가 앱을 설치하고 겪을 첫 삼십 초를 우리가 먼저 겪어 보는 거예요.
환경 하나를 파일 하나로 만들었어요
실험실은 컨테이너 대신 KVM 가상 머신을 써요. 컨테이너로는 실제 데스크톱 세션과 입력기 데몬을 제대로 재현하기 어렵기 때문이에요.
배포판의 클라우드 이미지를 받아 cloud-init으로 준비해요. 디스크는 원본 이미지 위에 오버레이로 만들어요. 문제가 생기면 버리고 다시 시작할 수 있어요.
환경 하나는 파일 하나로 선언해요. 파일에는 배포판, 이미지, 세션, 입력기, 설치할 패키지가 들어 있어요. 새 조합을 확인하고 싶다면 파일 하나만 추가하면 돼요.
입력 방식은 세션에 따라 달라져요. X11에서는 xdotool, Wayland에서는 ydotool을 써요. Wayland에는 창 목록이 없어서 앱을 키오스크 컴포지터에 전체 화면으로 띄워요. 그래야 매번 같은 위치에 입력할 수 있어요.

lab/envs 아래의 환경 파일 여덟 개와 그중 하나를 펼친 내용. 배포판·릴리스·클라우드 이미지 주소·세션·입력기·설치 양식이 여섯 줄로 적혀 있어요.앱은 호스트에서 한 번만 빌드해요. 그 바이너리를 모든 가상 머신에 그대로 복사하죠.
환경마다 다시 빌드하면 서로 다른 컴파일러와 라이브러리가 결과에 섞여요. 실패했을 때 원인을 찾기 어려워져요. 무엇보다 사용자가 받는 파일과 실험실이 검사하는 파일은 같아야 해요.
가상 머신은 검사하고, 호스트는 기록해요
가상 머신 안에서는 세 가지를 확인해요.
바이너리가 실행되는지, 창이 뜨는지, dkssud를 입력했을 때 안녕이 나타나는지 봐요.
각 검사는 JSON 한 줄을 남겨요. 호스트는 결과를 모아 파일로 저장하고 표로 만들어요. 측정한 결과는 저장소에 남겨 다음 검사와 비교해요.
한글 입력은 빌드에 따라 확인 방법이 달라요. 개발용 빌드에서는 조합 중인 글자를 바로 확인할 수 있어요. 실제 배포용 빌드에는 그 기능이 없어요. 대신 Enter를 누르고 파일을 저장한 뒤, 디스크에 기록된 내용을 읽어요.
이 과정에서 한 가지를 배웠어요. 검사 방법을 결정하는 건 설치 방식이 아니라 앱의 빌드 유형이었어요.
첫 번째 표가 두 가지를 알려 줬어요
우분투 22.04에서는 시스템 툴킷으로 빌드한 앱이 열리지 않았어요. 최신 libadwaita에만 있는 심볼을 찾지 못했기 때문이에요.
반대로 Wayland와 ibus 조합에서는 한글이 정상적으로 입력된다는 것도 처음 확인했어요.
이 결과를 바탕으로 모든 설치 방식에 같은 툴킷을 포함하기로 했어요. 지금의 여덟 줄짜리 표는 그 결정이 다시 깨지지 않았는지 확인하는 안전장치예요.
실제 환경에서만 보이는 문제도 있었어요. 클라우드 이미지에는 데스크톱 우분투와 달리 GTK4 입력 모듈이나 시작 입력 모드가 없었어요. 프로비저닝 과정에서 따로 설치해야 했죠.
ibus 모듈은 배포판에 설치된 데몬 버전과 맞아야 했어요. 배포판마다 입력 도구 사용법도 달랐고요. 검사 스크립트를 환경에 맞게 나눠야 했어요.
호스트의 메모리를 아끼기 위해 가상 머신은 두 대까지만 동시에 실행해요. 결과를 받은 가상 머신은 바로 종료해요.
모두 코드만 읽어서는 찾기 어려운 문제였어요. 같은 코드도 환경에 따라 다른 결과를 냈으니까요. 그래서 표가 필요했어요.
표는 성능을 약속하지 않아요
표에 첫 화면이 뜨기까지 걸린 시간과 메모리 사용량도 남아요. 하지만 성능 지표로 쓰지는 않아요.
가상 머신은 GPU 없이 소프트웨어로 화면을 그리고, 부팅 직후 한 번만 측정해요. 실행할 때마다 값이 달라질 수 있어요. 성능 기준은 실제 GPU가 있는 호스트에서 세 번 측정한 중앙값으로 정해요.
이 표에서 봐야 할 건 밀리초가 아니라 체크 표시예요.
확인하지 못한 환경은 빈칸으로 남겨요. 페도라와 데비안, 실제 GNOME 세션, 파일 선택 같은 포털 대화상자는 아직 표에 없어요.
확인하지 않은 칸을 “아마 될 것”이라고 채우지 않아요.
사용자가 어떤 환경을 선택할지는 우리가 정할 수 없어요. 우리가 할 수 있는 건 그 환경에 먼저 들어가 앱을 켜 보는 일이에요.