TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 29 READS

45년 된 케르밋 프로토콜, 15년 만의 신규 릴리스로 부활하다

1981년의 컴퓨팅 환경은 지금과 사뭇 달랐다. 하드웨어와 소프트웨어 모두 비쌌고, 한 제조사의 기계가 다른 제조사의 기계와 통신할 수 있다는 보장이 없었다. 컬럼비아 대학교 역시 이 문제에 부딪혔고, 프랭크 다 크루즈(Frank da Cruz)와 빌 캐칭스(Bill Catchings)는 그해 케르밋(Kermit)이라는 직렬 통신 프로토콜을 설계했다. DEC-20과 IBM 메인프레임의 온갖 제약을 다뤄야 했던 탓에, 케르밋은 처음부터 극단적으로 적응력이 높게 만들어졌다. 한 번에 96바이트 이상을 처리하지 못하는 시스템을 지원하고, 7비트 링크로 8비트 파일을 전송하며, ASCII와 EBCDIC 같은 문자 집합을 변환하고, 오류가 잦은 직렬 회선을 견뎌냈다.

케르밋은 빠르게 퍼졌다. 1982년에는 이미 MS-DOS와 유닉스로 이식됐고, 이후 C 언어 구현체인 C-Kermit이 대표 구현체로 자리 잡았다. C-Kermit은 TCP 지원, 대화형 CLI, 셸과 Lisp와 expect의 기능을 결합한 강력한 스크립트 언어, 그리고 점보 패킷·슬라이딩 윈도·스트리밍 모드 같은 고속 회선 최적화를 갖춰 나갔다. 이 프로토콜은 국제우주정거장에서 동작했고, 허리케인 중 센서 데이터를 수집했으며, 우편 시스템과 보잉 787 제조 현장에서도 쓰였다. 오늘날에도 임베디드 장비에 펌웨어 업데이트를 전송하거나 빈티지 시스템을 다룰 때 여전히 등장하는 도구다.

30년 만의 오픈소스화, 그리고 방치

케르밋 프로젝트는 역사 대부분의 기간 동안 자체 자금으로 운영됐다. 컬럼비아는 상업적 사용에 요금을 부과했고, 이 라이선스 정책 탓에 리눅스 배포판에 포함되기 어려웠다. 그러다 창립 30년째인 2011년, 컬럼비아는 케르밋 프로젝트를 종료하면서 C-Kermit을 BSD 라이선스의 오픈소스로 공개했다. 프랭크 다 크루즈는 대학을 떠난 뒤에도 자원해서 유지보수를 이어갔고, 2025년 은퇴할 때까지 알파와 베타 릴리스를 계속 냈다. 다만 정식 릴리스는 2011년의 9.0.302 이후 나오지 않았다.

이 공백을 메운 인물이 데비안의 케르밋 패키지 관리자이자 예전에 UMN 고퍼(Gopher)를 되살렸던 존 고어젠(John Goerzen)이다. 그는 데비안 유지보수 과정에서 케르밋이 현대적 기대에 못 미치는 지점들을 발견했다. 하나는 오래된 프로젝트답게 보안이었고, 다른 하나는 문자 집합과 줄바꿈 변환이었다. 오늘날 사용자는 바이트 단위로 동일한 바이너리 전송을 당연하게 여기는데, 기존 기본값은 혼란을 낳았고 드물게는 데이터 손상까지 일으켰다. 그래서 그는 작년부터 몇 가지 패치를 만들기 시작했다.

낡은 C 코드베이스에서 즐거움을 찾다

흥미로운 대목은 작업의 경험담이다. 고어젠은 과거 Varnish 같은 오래된 C 코드베이스를 다뤄봤고 대체로 싫어했다고 밝힌다. 나쁜 관행과 불분명한 메모리 관리가 뒤섞여 있기 때문이다. 그런데 C-Kermit에서는 오히려 즐거움을 느꼈다고 한다. 이 코드는 여전히 VMS, OS/2, ANSI를 모르는 컴파일러 위에서도 빌드되도록 설계돼 있으면서, 동시에 현대적 관행을 요구하는 환경도 지원한다. 그런 이질적 요구를 한데 담아내는 데서 나름의 우아함이 있었다는 것이다.

실제 작업량은 패치 몇 개 수준을 넘어섰다. 그는 메모리 안전성 문제를 손봤고, 몇 년 전 scp에 적용된 패치와 비슷한 방식으로 악의적인 원격 상대로부터 보호하는 장치를 추가했다. IPv6 지원도 넣었는데, IPv6를 전혀 모르는 시스템을 고려해 조건부 컴파일로 처리하고, IPv6 지원은 있으나 연결성이 없는 환경을 위해 런타임 폴백까지 뒀다. 여기에 단위 테스트와 파이썬 기반 종단 간 테스트를 도입해 약 2,000개의 테스트 케이스를 돌렸고, 그 과정에서 수십 년 묵은 버그들을 찾아냈다. macOS에서 FIONREAD가 깨져 있다는 사실, NetBSD의 pty 드라이버 버그, 케르밋 프로토콜 구현 자체의 버그가 그렇게 드러났다.

특히 눈여겨볼 만한 점은 버전 관리의 부재다. C-Kermit은 개발 역사 내내 사실상 VCS를 쓰지 않았다. 케르밋 베테랑 제프리 알트먼(Jeffrey Altman)이 과거 릴리스들을 Git 저장소로 가져왔고, 고어젠은 여기에 릴리스에 반영되지 않았던 패치들까지 합쳤다. 코드 곳곳에는 '#ifdef COMMENT'로 비활성화된 오래된 코드와 그 이유를 적은 주석이 남아 있었는데, Git이 있으니 이제는 그런 코드를 지우고 커밋 메시지로 사연을 남길 수 있게 됐다. 그 결과 C-Kermit은 예전보다 오히려 코드 줄 수가 줄었다.

실무자에게 남는 의미와 한계

이 작업의 결과물이 45주년을 기념하는 C-Kermit 11이며, 15년 만의 첫 신규 릴리스다. 향후 개발을 공개적으로 이어가기 위해 오픈 케르밋(Open Kermit) 프로젝트도 새로 꾸려졌다. 현대적 CI를 통해 리눅스(x86_64·arm64), macOS, FreeBSD, NetBSD, OpenBSD에서 테스트 스위트를 돌리고 각 플랫폼용 바이너리를 빌드하며, musl libc로 정적 링크한 리눅스 바이너리도 제공한다. 새로 추가된 'show interfaces' 명령은 시스템의 로컬 IP를 확인하기 쉽게 해준다. 고어젠 스스로도 여러 겹의 ssh·sudo·su를 거쳐 파일을 옮기는 ssh 래퍼로, BBS 클라이언트로, HP 48GX 계산기와 데이터를 주고받는 용도로 케르밋을 여전히 매일 쓴다고 말한다.

실무적으로 이 소식이 던지는 함의는 분명하다. 모든 운영체제가 TCP/IP를 말하는 오늘날에도 리눅스·윈도·macOS·안드로이드 사이에서 대용량 파일을 옮기는 일은 여전히 성가시며, LAN에 케르밋으로 TCP 연결을 세우는 방식이 뜻밖에 실용적일 수 있다. 다만 한계도 함께 봐야 한다. 케르밋은 대중적 파일 전송 표준이 아니라 직렬·임베디드·빈티지 영역에서 조용히 버티는 도구이며, VMS나 OS/2까지 배려하는 이식성은 그만큼 유지보수 부담과 낡은 기본값을 동반한다. 창립자 프랭크 다 크루즈가 1981년부터 2025년까지 44년간 직접 관여했다는 사실은 오픈소스 지속성의 드문 사례이지만, 동시에 특정 개인에 오래 의존해 온 프로젝트의 취약함도 보여준다. 이번 릴리스와 오픈 케르밋의 출범은 그 의존을 커뮤니티 기반으로 옮기려는 시도라는 점에서 의미가 있다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://changelog.complete.org/archives/44456-celebrating-45...
SHARE
처리 중...