
우리가 켜는 리눅스, 사실 엄청 두꺼운 옷을 입고 있어요
평소에 리눅스 서버나 우분투를 켜면 그냥 '딱' 하고 로그인 화면이 뜨잖아요. 그런데 그 짧은 부팅 사이에 사실 엄청나게 많은 단계가 숨어 있어요. 부트로더(GRUB)가 뜨고, 임시 파일시스템(initramfs)이 올라오고, systemd 같은 거대한 초기화 시스템이 수백 개의 서비스를 줄줄이 띄우고... 이 모든 게 '편하라고' 만들어진 겹겹의 옷이거든요. 이번 글 'Boot Naked Linux(발가벗은 리눅스 부팅하기)'는 그 옷을 다 벗겨내고, 커널과 프로그램 딱 하나만으로 리눅스를 부팅하면 어떻게 되나를 직접 실험해본 이야기예요.
리눅스 부팅, 원래 이런 순서예요
먼저 큰 그림을 그려볼게요. 컴퓨터 전원을 켜면 ① 펌웨어(BIOS나 UEFI)가 깨어나고 → ② 부트로더가 커널을 메모리에 올리고 → ③ 리눅스 커널이 하드웨어를 초기화한 다음 → ④ PID 1이라는 첫 번째 프로세스를 실행해요. 이 PID 1이 보통 systemd나 init이라고 불리는 녀석인데, 얘가 나머지 모든 프로그램의 조상님 역할을 하면서 시스템을 꾸려가요.
여기서 핵심 사실 하나. 커널 입장에서 PID 1은 그냥 자기가 제일 처음 실행하는 프로그램 하나일 뿐이에요. 그게 꼭 systemd일 필요가 전혀 없어요. 커널 부팅 옵션에 init=/내가/원하는/프로그램이라고 적어주면, 커널은 systemd 대신 그 프로그램을 첫 프로세스로 실행해버리거든요.
그래서 '발가벗긴다'는 게 뭐냐면
이 글의 실험이 바로 이거예요. systemd도, init 시스템도, 심지어 셸도 다 빼버리고, 내가 만든 프로그램 하나를 PID 1로 직접 올리는 거죠. 예를 들어 C로 'Hello, world'만 찍고 마는 프로그램을 짜서, 외부 라이브러리 없이 통째로 묶은 정적 링크(static link) 바이너리로 만든 다음, 커널한테 그걸 init으로 지정해주면 됩니다. 그러면 거대한 운영체제 대신 그 작은 프로그램 하나가 리눅스 위에서 유일하게 돌아가는, 말 그대로 발가벗은 시스템이 되는 거예요.
이걸 실제 PC에서 하면 위험하니까 보통 QEMU 같은 가상머신 안에서 실험해요. 이 과정에서 자연스럽게 배우게 되는 것들이 많아요. 왜 PID 1은 함부로 종료되면 안 되는지(끝나버리면 커널이 'init이 죽었다'며 패닉을 일으켜요), 루트 파일시스템은 누가 언제 마운트하는지, 우리가 당연하게 여기던 /proc이나 /dev 같은 건 사실 누군가 일부러 붙여주는 거였다는 사실 같은 것들이요. 평소엔 systemd가 알아서 다 해주던 일을 직접 해보면서, '편의 기능'과 '진짜 꼭 필요한 최소한'의 경계가 선명하게 보이는 거죠.
이 발상, 사실 요즘 기술의 뿌리예요
'최소한의 것만 남긴다'는 이 아이디어는 옛날 취미가 아니라 현대 인프라의 핵심 흐름과 맞닿아 있어요. 우리가 매일 쓰는 컨테이너(도커)가 대표적이에요. 컨테이너는 무거운 OS 전체를 넣지 않고, 앱과 꼭 필요한 파일만 담아 가볍게 돌리잖아요. 정적 바이너리 하나만 든 'scratch 이미지'가 바로 이 발가벗은 발상의 산물이고요. 클라우드의 마이크로VM(예: AWS의 Firecracker)이나 임베디드 리눅스, 유니커널(unikernel)도 다 '군더더기를 얼마나 덜어낼 수 있나'를 파고든 결과예요. 그러니 이 실험은 단순 호기심을 넘어, 가벼운 시스템을 설계하는 사고방식의 기초 체력 훈련인 셈이에요.
한국 개발자에게
실무에서 이게 왜 쓸모 있냐면요. 도커 이미지를 최적화해서 용량을 확 줄이거나, 임베디드 기기에 리눅스를 욱여넣거나, 부팅이 안 될 때 원인을 추적할 때 바로 이 부팅 과정의 이해도가 갈리거든요. '왜 컨테이너 안에서 프로세스가 PID 1로 뜨면 시그널 처리가 이상하지?' 같은 실무 문제의 답도 사실 이 글에 다 들어 있어요(PID 1은 좀비 프로세스를 거둬주는 특수 임무가 있는데, 일반 앱은 그걸 안 하도록 만들어졌거든요). 한 번쯤 QEMU 띄워놓고 직접 따라 해보면, 그동안 마법처럼 느껴지던 부팅 과정이 손에 잡히는 지식이 될 거예요.
한줄 정리: 리눅스는 커널 + 프로그램 하나만으로도 부팅되며, init=으로 그 첫 프로세스를 직접 지정해보면 systemd가 가려놨던 부팅의 본질이 드러난다.
여러분은 리눅스 부팅 과정 중 어디까지 직접 들여다본 적 있나요? initramfs를 손수 만들어봤거나, PID 1 때문에 삽질해본 경험이 있다면 공유해 주세요.
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공