임베디드 소프트웨어용 프로그래밍 언어 Toit가 4년이 넘는 알파 개발 기간을 마치고 v2.0.0 정식 버전을 공개했다. 그동안 누적된 커밋은 2,000건이 넘고 변경된 코드는 50만 줄을 넘어섰으며, 알파 릴리스만 200차례 이상 이어졌다. 숫자만 보면 신생 프로젝트가 성숙 단계에 접어들었음을 보여주지만, 정작 주목할 부분은 이 언어가 '정식 1.0'을 건너뛰고 곧바로 2.0으로 이름을 올린 배경과, 오랜 기간 '알파' 딱지를 떼지 못했던 이유다.
상용 소프트웨어에서 자원봉사 프로젝트로
Toit는 원래 Toitware라는 회사가 개발하던 비공개(closed-source) 소프트웨어였다. 이후 오픈소스로 전환됐고, 2024년 Toitware가 사업을 접은 뒤에도 자원봉사자들의 손으로 개선 작업이 계속됐다. 상용 회사가 만들던 기술이 회사 청산 이후에도 커뮤니티 주도로 살아남아 메이저 버전을 찍었다는 점은, 기업 의존적인 개발 도구를 실무에 도입할 때 늘 따라붙는 '회사가 사라지면 어떻게 되나'라는 질문에 하나의 사례를 제공한다. 공개된 라이선스와 활동하는 기여자 풀이 있으면 조직이 없어진 뒤에도 유지보수가 이어질 수 있다는 점을 보여주기 때문이다.
흥미로운 대목은 '알파'라는 표기가 실제 안정성과는 거리가 있었다는 점이다. 개발팀의 설명에 따르면 Toit는 이미 오래전부터 안정적으로 동작해왔고, 정식 버전을 선언하지 못하게 막은 요인은 두 가지뿐이었다. 하나는 아직 반영하지 못한 호환성 깨짐(breaking change) 작업이 남아 있었다는 것이고, 다른 하나는 '이번에도 꼭 넣고 싶은 중요한 기능'이 계속 생겼다는 점이다.
마지막 호환성 변경: 핀 번호를 직접 받는 API
버전 확정을 가로막던 첫 번째 요인은 최근 완료됐다. 주변장치(peripheral) API가 이제 gpio.Pin 객체를 요구하는 대신 핀 번호를 직접 받을 수 있도록 리팩터링이 이뤄졌고, 이것이 v2.0.0을 위해 계획했던 마지막 주요 호환성 변경이었다. 겉보기에는 사소한 변경처럼 보이지만 임베디드 개발 현장에서는 의미가 작지 않다. 센서나 통신 모듈 같은 주변장치를 다룰 때마다 별도 객체를 먼저 만들어 넘겨야 했던 번거로움이 줄어들어 코드가 간결해지기 때문이다. 다만 이런 변경은 기존 코드와의 호환을 깨뜨리므로, 알파 단계에서 작성한 코드를 2.0으로 올리려는 사용자는 핀을 다루는 부분을 손봐야 한다는 뜻이기도 하다.
두 번째 요인에 대해 개발팀이 내린 결론은 더 현실적이다. '모든 중요한 기능이 완성되는 순간'은 영원히 오지 않는다는 사실을 받아들였다는 것이다. 지금 이 시점에도 코드 포매터, 컴파일러의 심볼 해석(resolution) 개선, 더 많은 아키텍처 지원 등 굵직한 기능들이 아직 열린 PR 상태로 남아 있다. 이들은 2.0.0에 포함되지 않고 이후 릴리스에서 순차적으로 반영될 예정이다.
실무자가 읽어낼 지점
이번 발표에서 배울 점은 버전 번호를 붙이는 판단 기준이다. 많은 팀이 '완벽해지면 1.0을 붙이겠다'는 생각에 사실상 안정된 소프트웨어를 수년간 알파나 베타로 묶어두곤 한다. 그러나 완성의 기준을 기능 목록의 완결로 잡으면 그 시점은 계속 미뤄진다. Toit 팀은 '깨뜨릴 호환성 변경을 모두 끝냈는가'를 기준으로 삼아 정식 버전을 끊었고, 나머지 기능은 정식 버전 이후에 점진적으로 추가하기로 했다. 유의미한 호환성 경계를 먼저 확정하고 기능은 그 위에 쌓는 방식은, 사용자가 안심하고 의존할 수 있는 안정된 토대를 더 빨리 제공한다는 점에서 참고할 만하다.
물론 한계도 분명하다. Toit는 현재 회사가 아니라 자원봉사자들이 유지하는 프로젝트이며, 포매터나 추가 아키텍처 지원처럼 실무 도입에 영향을 줄 수 있는 기능들이 아직 미완성 상태다. 지원 범위나 로드맵의 진행 속도가 커뮤니티의 참여도에 좌우될 수밖에 없다는 뜻이다. 따라서 Toit를 실제 제품에 채택하려는 팀이라면 정식 버전이라는 표기보다, 자신이 쓰려는 주변장치와 아키텍처가 현재 어느 수준까지 지원되는지, 그리고 호환성 변경 이후의 마이그레이션 비용이 얼마나 되는지를 직접 확인하는 편이 안전하다. 메이저 버전 선언은 끝이 아니라, 안정된 기반 위에서 기능을 쌓아가는 새로운 출발점에 가깝다.