GN⁺: 닌텐도 스위치로의 SBCL 포팅
(reader.tymoon.eu)현재 상태
- 현재 SBCL 런타임과 컴파일러를 Nintendo Switch에서 실행할 수 있도록 포팅 완료
- 공유 라이브러리와의 인터페이스도 가능하며, 다양한 운영 체제 이식성 라이브러리도 포팅 완료
- 그러나 SBCL의 가비지 컬렉터가 작동할 때 충돌 발생
- 오디오 출력 불가, C 콜백 메커니즘 문제
- 성능 관련 문제도 예상됨
개요
- Switch는 ARM64 Cortex-A57 칩과 4GB RAM을 사용하며, 독점 마이크로커널 운영 체제에서 실행됨
- SBCL은 이미 ARM64 Linux 포트를 가지고 있어 코드 생성 문제는 해결됨
- Switch는 OpenGL 그래픽 라이브러리를 지원하는 유일한 콘솔로, Trial의 그래픽 라이브러리 포팅이 용이함
- 개발을 시작하기 위해 Nintendo of Europe에서 개발 키트를 구입하고 SDK를 설치함
SBCL 빌드 과정
-
build-config
: 빌드 구성 옵션을 수집하여 읽을 수 있는 형식으로 출력 -
make-host-1
: 호스트 Lisp 컴파일러로 크로스 컴파일러 빌드 -
make-target-1
: 타겟 C 컴파일러로 C 런타임 생성 -
make-host-2
: 타겟 Lisp 시스템 빌드 -
make-target-2
: 타겟 런타임에서 콜드 코어를 로드하고 부트스트랩 완료
Switch용 빌드
- Switch는 PC 환경이 아니며, 셸, 명령줄, 컴파일러가 없음
- 실행 가능한 페이지를 생성할 수 없으므로 런타임 컴파일 불가
- 대부분의 코드는 플랫폼 독립적이며 ARM64로 컴파일 가능
-
fasteval
을 사용하여 런타임 컴파일을 대체
가비지 컬렉터
- SBCL의 표준 GC는 "gencgc"로, 세대별 가비지 컬렉터임
- 멀티스레딩 환경에서 객체 이동 문제 발생
- Unix 시스템에서는 신호 메커니즘을 사용하여 스레드를 주차하지만, Switch에서는 불가능
- "safepoints" 전략을 사용하여 스레드가 자체적으로 주차하도록 함
향후 작업
- CLOS를 가능한 한 많이 고정하고 사전 컴파일 탐색
- Switch의 저성능 프로세서로 인해 추가 최적화 필요
- 가비지 컬렉터 완전 작동 필요
- C 콜백 문제 해결 필요
결론
- NDA로 인해 작업 내용을 공개할 수 없지만, 가능한 부분은 공개 중
- Patreon, GitHub, Ko-Fi를 통해 지원 요청
GN⁺의 정리
- 이 글은 Common Lisp 런타임을 Nintendo Switch에 포팅하는 과정과 도전 과제를 다룸
- Switch의 독점 운영 체제와 하드웨어 제약으로 인해 많은 기술적 어려움이 발생함
- 가비지 컬렉터와 멀티스레딩 문제, 런타임 컴파일 문제 등이 주요 도전 과제임
- 이 프로젝트는 Common Lisp 개발자와 게임 개발자에게 유용한 정보를 제공함
Hacker News 의견
-
몇 주 동안 Trial을 사용하여 Common Lisp로 게임 개발을 테스트해보았고, 매우 즐거운 경험이었음
- 게임이 실행 중일 때 거의 모든 부분을 수정할 수 있는 점이 큰 장점임
- 이 포트가 성공하기를 바람
-
SBCL은 훌륭한 언어 구현이며, "진짜" 게임 콘솔을 위해 CL 개발을 해보고 싶었음
- Shinmera가 이 작업을 하고 있다는 사실에 놀랐음
- SBCL의 내부를 잠깐 봤을 때 겁이 났었는데, 그에게 찬사를 보냄
- SBCL(+스레딩/SDL2)이 Raspberry Pi에서 작동하는지 궁금함
-
저자에게 흥미롭고 자세한 글을 써줘서 감사함
- 이런 수준의 세부 사항은 보통 콘솔 수명이 끝난 후에야 공개됨
- 이런 깊이 있는 작업을 읽을 때마다 내가 하루 종일 쓰는 단조로운 소프트웨어가 부러워짐
-
공식 SDK를 사용한 이유가 궁금함
- Nintendo가 3rd 파티 SDK로 만든 게임을 공식적으로 출판하지 못하게 하는 것일 수도 있음
-
Kandria를 구매했음
- 게임을 많이 하지 않지만, Shinmera가 Lisp 세계의 경계를 넓히고 있는 것은 지지할 만한 일임
-
SBCL - "Steel Bank Common Lisp"
- SBCL은 고성능 Common Lisp 컴파일러이며, 오픈 소스/무료 소프트웨어임
- ANSI Common Lisp를 위한 컴파일러와 런타임 시스템 외에도 디버거, 통계 프로파일러, 코드 커버리지 도구 등 다양한 확장을 제공함
-
그녀의 작업은 놀라움
- CL을 여기저기 쓰는 것을 좋아하는 나에게 큰 기쁨을 줌
-
Nintendo와 Sony가 이런 노력을 지원했으면 좋겠음
- Github Accelerator와 같은 프로그램을 시작하는 것이 콘솔을 위한 게임(IP)을 만드는 또 다른 방법임
-
약간 주제에서 벗어나지만, Yuzu를 Nintendo Switch로 포팅하는 것이 놀라울 것임
-
HN에 오는 이유가 바로 이런 것임
- OP와 그의 동료에게 찬사를 보냄
- Nintendo가 시스템에 대해 조금 더 개방적일 수 있다면 큰 축복일 것임