리눅스에서 BSD로 옮기게 된 개인적 배경과 초기 유닉스 경험, FreeBSD/OpenBSD의 장점(ZFS, pf, jails 등), 그리고 리눅스의 변화(systemd, Wayland 등)에 대한 소회까지 정리한 글.
매주 혹은 격주로 내가 머무는 BSD 관련 서브레딧들(FreeBSD, OpenBSD, NetBSD, 그리고 BSD) 가운데 어딘가에선 왜 사람들이 리눅스 배포판 대신 BSD를 선택하냐라는 글이 꼭 하나씩 올라온다. 같은 질문에 여러 번 대답하다 보니, 이제는 여기 제 "왜"를 적어둘 때가 됐다고 느꼈다.
애플 DOS 3.3과 ProDOS로 자라다가 MS-DOS 4.x 이후로 옮겨 갔다. 그러다 지역 대학의 다이얼업 셸 서버와 유닉스 실습실 덕분에 유닉스를 맛보게 됐다. 유닉스 커맨드라인은 익숙하면서도, 무언가 의도와 설계로 공들여 만들어진 느낌이었다. 조각들이 서로 잘 어울려 돌아갔다. 프로그램들이 상식적인 방식으로 멀티태스킹했다(그리고 그런 건 DOS에선 절대 못 했다). 1200보드 다이얼업으로 밤을 셀 때가 부지기수였다. 완전히 빠져들었다.
수도 없이 많은 3½인치 플로피 디스크를 내려받아 기숙사로 낑낑 들고 왔고, 선배 컴공 동기가 내 컴퓨터에 슬랙웨어 설치를 도와줬다. 그때 내 컴은 486DX/100, RAM 32MB, 512MB 하드디스크 두 개가 달린 괴물 같은 머신이었다(도합 무려 기가바이트!). 지금도 Emacs를 썩 좋아하지 않는데, 아마도 슬랙웨어의 E 시리즈 플로피가 자꾸 깨져서 Emacs 하나 깔자고 연구실에 다시 가서 디스크를 새로 받아 굽던 기억 때문일 것이다.
한편, 내가 가장 좋아하던 캠퍼스 실습실에는 네트워크로 묶인 DEC Ultrix 워크스테이션이 있었고, 내 개인 PC의 800x600 SVGA 그래픽과는 비교도 안 될 해상도와 색심도로 X를 돌리고 있었다. 진짜 유닉스였다.
슬랙웨어가 있는 건 즐거웠지만, 기숙사 방에 인터넷이 없어서 제대로 활용하기가 어려웠다. DOS(원할 때 Windows 3.1)를 쓰면 적어도 워드퍼펙트 5.1로 레포트를 쓰고 파일을 실습실로 가져가 출력할 수 있었다. 그러다 HTML을 발견했다. 워드퍼펙트의 Reveal Codes 기능처럼 문서 속을 훤히 들여다볼 수 있는 느낌이었다. 숨겨진 지저분한 마크업 때문에 이미지가 어긋나거나 간격이 바뀌거나 엉뚱한 데가 굵게/기울임/밑줄 되는 일도 없었다. 일반 텍스트 에디터로도 쓸 수 있어서 DOS든, 윈도든, 슬랙웨어든(줄바꿈만 조심하면) 어디서든 더 유용했다. 덤으로, 실습실에서는 페이지당 0.07달러를 받았는데, 대학 도서관에선 "웹 자료"는 무료로 출력할 수 있다는 걸 알았다. 누가 플로피 드라이브에 있는 자기 레포트를 웹브라우저로 열어 "웹 자료"라 우겨 무료로 출력했을지 맞혀보시라?
대학을 다니면서 리눅스의 다른 맛들을 설치하고 또 재설치해 봤다. Red Hat 8("Psyche")과 Mandrake는 설치 경험이 아주 좋았지만, RPM은 패키지 의존성을 내가 손으로 해결하게 만들었다. .rpm 파일을 내려받아 설치를 시도하면 빠진 의존성이 드러나고, 그 .rpm을 또 내려받아 설치하고, 또 빠진 걸 내려받아 설치하고… 마침내 깔릴 때까지 헹구고 반복했다.
그 시기(아마 2.x 즈음) Walnut Creek CD-ROM으로 FreeBSD 설치도 시도했다. 하지만 설치기를 끝내 못 알아먹었다. 돌이켜보면, 핵심 문제는 DOS와 리눅스에서의 "partition(파티션)"이 FreeBSD에선 다른 뜻이었기 때문이다. FreeBSD에서 말하는 "slice"는 내가 DOS에서 알던 MBR의 "파티션"을 가리키고, FreeBSD가 "partition(파티션)"이라고 부르는 건 그 슬라이스를 다시 쪼갠 BSD 파티션(레이블)이었다. 그때 이 용어 차이를 알았다면 FreeBSD 설치에 성공했을지도 모른다.
대학을 졸업하고 결혼한 뒤, 새 Gateway Solo 1200 노트북을 장만했다. 800MHz 셀러론, RAM 128MB, 디스크 10GB! Windows ME가 깔려 왔는데, OS는 형편없었지만 WinModem 드라이버는 Knoppix나 다른 리눅스 시도들이 인터넷에 연결하지 못하던 곳에서도 잘 먹혔다. 아파트에 DSL이 깔리자 RAM을 320MB까지 올리고 120GB 하드로 교체한 다음 Debian을 설치했고, 많은 해 동안 우리에게 잘 봉사했다.
애플 하드웨어와 운영체제가 궁금해 Apple iBook G4도 들였다. PPC 라인의 마지막 모델로 1.3GHz, RAM 1.5GB까지 올렸고, 30GB 하드가 달려 있었다.
맥은 나를 미치게 만들었다.
애플처럼 생각하는 사람들이 분명 있을 것이고, 그들에게는 OSX가 훌륭하게 작동할 것이다. 나는 그런 사람이 아니다. 새 OS 버전에 대한 지원이 끊기자(PPC 지원이 10.4 또는 10.5에서 끝남) 그 노트북은 순식간에 쓸모없는 벽돌이 되어, 공개 인터넷에서 쓰기에도 불안해졌다.
(이젠 문을 닫은) Fry's에서 레노보 노트북을 좋은 가격에 샀다. 내 것엔 Debian, 배우자 것엔 Ubuntu를 설치했다. 우리는 그걸로 수년 동안 웹 서핑, 이메일, 가벼운 게임, 직장 머신 원격 접속, 그리고 내겐 소프트웨어 개발까지 꽤 잘 했다.
그런데 먹구름이 몰려오기 시작했다. Debian이 내가 시작하던 그 유닉스에서 점점 멀어지는 변화들을 들여오기 시작했고, 그게 마음에 들지 않았다.
사운드 스택이 돌고 도니 좌절만 커졌다. OSS, libao, ESD, aRTS, ALSA, Pulse, Jack, 이제는 Pipewire까지 다 겪었다. 하나같이 이전 표준의 모든 문제를 고치겠다고 약속했다. 방화벽 기술도 마찬가지로 난립했다.
그동안 수년, 수십 년 써오던 프로그램들이 비사용 경고를 뿜기 시작했다. "무선은 ifconfig로 관리하지 말고 iwconfig를 쓰라. 브리지는 brctl을 쓰라. 아니, 둘 다 쓰지 말고 ip를 쓰라." 인기 배포판을 새로 설치하면 기본 시스템에 ed(1)조차 빠져 있어서, 무언가 틀어지면 시스템을 구할 $EDITOR가 없을 수도 있었다.
문서를 읽으려고 man 페이지를 열면, 쓸모없는 자리표시자 스텁이 뜨면서 GNU info 페이지로 가라고만 했다. 그 안에서도 이리저리 파트를 이동해야 하고, 한 번에 통으로 읽을 수가 없었다. 그 뒤로는 info program | less로 info가 전체 문서를 less로 렌더링하게 강제하는 요령을 배웠다.
netstat을 쓰려 하면 이제 ss를 쓰라고 했다. 또는 *nix와 윈도우에서 수년간 써온 nslookup은 그만 쓰고 host나 dig/drill을 쓰라고 했다. 편집: Michael W. Lucas 작가의 노트에 따르면 nslookup의 비사용 선언은 리눅스 배포판 유지자들이 강요한 게 아니라 그 개발자들 스스로가 내린 결정이라고 한다.
그러다 큰 것들이 왔다. systemd와, Xorg를 대체하려는 Wayland의 위협. systemd는 tmux에서 detach가 깨지게 만들었고, 뻔뻔하게도 systemd가 야기한 문제를 tmux 팀이 고치라고 했다. 루트 권한으로(sudo shutdown -r now) 종료/재부팅을 걸어도 systemd가 투덜대며 실제로 종료/재부팅을 하지 않고, 내 통제 밖의 어떤 프로세스 때문에 무기한 멈춰버렸다. 다행히 전원 버튼을 오래 눌러 제대로(?) 끌 수는 있었다. 다른 init 시스템을 선택할 여지도 없었다. 로그 파일은 이젠 grep도 못 했다. systemd가 바이너리 포맷으로 갖고 있으니.
한편, 대부분의 리눅스 배포판에서 Xorg가 Wayland로 대체될 거라는 강한 조짐이 들렸다. 내가 선호하는 윈도 관리자(fluxbox)는 Wayland에서 동작하지 않는다. 내가 쓰는 GUI 앱들 중 상당수도 Wayland에서 동작하지 않는다. 지금도 Wayland에서 _안 되는 것_이 정말 많다. 언젠가 내 필요를 충족할 수도 있겠지만, 적어도 가까운 시일 내에는 아니다.
리눅스 세계의 그런 푸시들 사이에서, FreeBSD와 OpenBSD가 제공하는 것들이 나를 끌어당겼다.
FreeBSD에는 방화벽 선택지가 여럿 있지만, 그중 pf가 포함되어 있고, 금세 내가 가장 좋아하는 방화벽 문법이 되었다. OpenBSD에서 비롯된 pf는 내 모든 머신에서 하나의 합리적인 문법으로 방화벽을 관리하게 해 준다.
ZFS는 특정 파티션 레이아웃에 묶이지 않게 해 준다. 사용 가능한 저장소를 풀로 묶어 모든 데이터셋이 나눠 쓰게 하고, 쓰기 전과 읽기 후에 체크섬을 계산해 데이터가 비트 로트로 망가지지 않았는지 확인한다. 투명한 압축을 제공하고, 즉시 스냅샷을 뗄 수 있다. 데이터셋을 복제하고 send/receive로 다른 머신에 효율적으로 보내 백업할 수 있다. Copy-on-write 덕분에 전원이 갑자기 나가더라도 파일시스템 일관성이 유지되어, 재부팅 후 fsck가 필요 없었다.
FreeBSD는 나에게 jails를 준다. 리눅스 땅의 컨테이너보다 훨씬 이해가 잘 된다. 게다가 FreeBSD의 jails는 리눅스 컨테이너보다 훨씬 이르게 등장(2000년 3월)해서, 더 오래 잘 다듬어졌다.
한편 OpenBSD는 손맛 좋은 시스템을 준다. dhcpd가 pf, unbound, relayd와 잘 대화하듯 애플리케이션과 서비스들이 잘 어울려 논다. 기본 설치만으로 xenodm/xenocara가 포함되어 있고, fvwm(기본), twm(올드스쿨), cwm(셋 중 내가 가장 좋아함) 세 가지 윈도 관리자가 딸려 온다.
결정적 한 방은 Debian 업그레이드였다. systemd가 내 오디오 서브시스템을 완전히 박살 내더니, 부팅도 신뢰할 수 없게 만들기 시작했다.
외장 드라이브에 데이터를 백업하고, 내가 쓰는 주요 소프트웨어 목록과 함께 VPS에도 사본을 올린 뒤, 데일리 드라이버에 FreeBSD를 설치했다. 데이터를 모두 되가져오고, FreeBSD에 주요 소프트웨어를 설치했으며, 이전과 크게 다르지 않은 삶을 이어갔다.
또 다른 고물 노트북들에도 OpenBSD를 깔았다. 이제는 죽어버린 Gateway Solo 1200, 그 iBook G4, 그리고 내 writer-deck인 Dell Mini10 넷북까지. 내 VPS 인스턴스들도 FreeBSD와 OpenBSD를 섞어 돌린다.
모든 게 완벽하냐고? 사소한 문제는 여전하다. 가장 눈에 띄는 건 FreeBSD에서 이어폰을 뽑고 꽂을 때 스피커와 헤드폰으로 자동 전환되지 않는다는 점이다.
하지만 이건 내가 자라며 쓰던 유닉스의 느낌이다.
집 같은 느낌이다.
이런 질문의 예시 글 몇 가지: 여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기, 그리고 여기.