TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 44 READS

Rust로 루비를 다시 만들던 7년의 도전이 멈췄어요 — Artichoke 종료가 남긴 것

Rust로 루비를 다시 만들던 7년의 도전이 멈췄어요 — Artichoke 종료가 남긴 것
SOURCE IMAGE · HACKER NEWS
Rust로 루비를 다시 만들던 7년의 도전이 멈췄어요 — Artichoke 종료가 남긴 것

한 개발자가 7년 동안 이어온 프로젝트를 공식적으로 마무리한다고 발표했어요. Artichoke Ruby라는 프로젝트인데요. 루비(Ruby) 인터프리터를 러스트(Rust)로 처음부터 다시 구현하는 도전이었어요. 목표 중 하나는 웹어셈블리(Wasm)로 컴파일해서 브라우저 안에서 루비를 돌리는 것이었고요. 성공해서 화려하게 끝난 이야기는 아니지만, 언어를 만든다는 게 어떤 일인지, 그리고 오픈소스 프로젝트를 '잘 끝낸다'는 게 뭔지 생각해볼 거리가 많은 발표라서 소개해요.

왜 루비를 러스트로 다시 만들려고 했을까요

루비의 공식 구현체인 CRuby는 이름처럼 C로 작성돼 있어요. C는 메모리 관리를 개발자가 직접 해야 해서 보안 버그가 생기기 쉽고, 웹어셈블리 같은 새로운 플랫폼으로 옮기기도 까다로워요. 반면 러스트는 메모리 안전성을 컴파일러가 보장해주는 언어거든요. 그래서 '루비를 러스트로 다시 만들면 안전하고, 어디에든 임베드할 수 있고, 브라우저에서도 돌릴 수 있지 않을까'라는 게 출발점이었어요. 전략도 현실적이었어요. 처음부터 전부 새로 만드는 대신, 임베디드용 경량 루비 구현체인 mruby를 코어로 삼아 러스트로 감싸고, 부품을 하나씩 순수 러스트 구현으로 교체해가는 점진적 접근을 택했죠.

그런데 언어 구현은 왜 이렇게 어려울까요

여기서 '언어를 다시 구현한다'는 일의 무게를 짚어볼 필요가 있어요. 루비는 공식 명세 문서보다 'CRuby의 동작 그 자체가 사실상의 스펙'인 언어예요. 그러니까 호환되는 구현체를 만들려면 문자열 인코딩 처리, 정규식 엔진, 수많은 내장 메서드의 미묘한 엣지 케이스까지 전부 CRuby와 똑같이 맞춰야 해요. ruby/spec이라는 방대한 호환성 테스트 모음을 통과해야 하고, 그 위에 표준 라이브러리까지 다시 만들어야 하죠. 이 어마어마한 작업을 대부분 한 사람이 본업 외의 시간에 해온 거예요. 7년이면 정말 오래 버틴 거고, 우선순위가 바뀌고 에너지가 소진되는 건 자연스러운 결말이에요.

'잘 끝내는 것'도 기술이에요

이 발표에서 배울 만한 건 끝내는 방식이에요. 오픈소스 세계에는 조용히 방치돼서 좀비가 된 프로젝트가 정말 많거든요. 커밋은 멈췄는데 아카이브 표시는 없어서, 사용자들이 '이거 살아있는 프로젝트인가?' 하며 시간을 낭비하게 만드는 경우요. Artichoke의 메인테이너는 그러는 대신 공식적으로 종료를 선언하고, 이유를 글로 남기고, 저장소를 정리하는 길을 택했어요. 쓰는 사람들에 대한 책임감이자, 자기 자신에게 마침표를 찍어주는 일이기도 하죠.

비슷한 도전들과 비교해보면요

업계 맥락에서 보면 재미있는 비교가 가능해요. 루비 세계에는 JVM 위에서 도는 JRuby, GraalVM 기반의 TruffleRuby 같은 대체 구현체들이 이미 있어요. 그리고 '기존 언어 생태계를 러스트로'라는 흐름에서 성공한 사례들도 있죠. 자바스크립트 컴파일러 SWC, 파이썬 린터 Ruff, 패키지 매니저 uv 같은 것들이요. 성공작들의 공통점이 뭐냐면, 언어 전체를 재구현한 게 아니라 '기존 도구보다 압도적으로 빠른 특정 도구'라는 좁고 명확한 실용 목표를 잡았다는 거예요. 반면 인터프리터 전체를 호환되게 다시 만드는 건 범위가 사실상 무한한 싸움이에요. 프로젝트의 성패를 가르는 건 기술력만큼이나 범위 설정이라는 걸 보여주는 대비죠.

사이드 프로젝트를 하는 우리에게

한국 개발자에게도 와닿는 지점이 있어요. 첫째, 범위를 좁게 잡는 것의 중요성이에요. '루비 전체'가 아니라 '루비의 정규식 엔진을 러스트로'였다면 완성 가능한 목표였을지도 몰라요. 둘째, 접은 프로젝트는 실패가 아니라는 거예요. Artichoke를 만드는 과정에서 나온 러스트 라이브러리들과 언어 구현 지식은 그대로 남아요. 7년간 인터프리터를 만들어본 경험은 어떤 강의로도 얻을 수 없는 자산이고요. 셋째, 끝낼 때는 명시적으로 끝내기. 아카이브 버튼을 누르고 이유를 적어두는 것만으로 미래의 사용자와 자신에게 큰 선물이 돼요.

정리하면, 이 이야기는 실패담이 아니라 '거대한 도전을 시작하는 법과 끝내는 법'에 대한 기록이에요. 여러분이 접었던 사이드 프로젝트 중에 가장 많이 배운 건 뭐였나요? 그 프로젝트에는 명시적으로 마침표를 찍어주셨나요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://hyperbo.la/w/winding-down-artichoke-ruby/
SHARE
처리 중...