# 닌텐도 스위치로의 SBCL 포팅

> Clean Markdown view of GeekNews topic #16761. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16761](https://news.hada.io/topic?id=16761)
- GeekNews Markdown: [https://news.hada.io/topic/16761.md](https://news.hada.io/topic/16761.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-09-14T09:56:42+09:00
- Updated: 2024-09-14T09:56:42+09:00
- Original source: [reader.tymoon.eu](https://reader.tymoon.eu/article/437)
- Points: 1
- Comments: 1

## Topic Body

#### 현재 상태

- 현재 SBCL 런타임과 컴파일러를 Nintendo Switch에서 실행할 수 있도록 포팅 완료
- 공유 라이브러리와의 인터페이스도 가능하며, 다양한 운영 체제 이식성 라이브러리도 포팅 완료
- 그러나 SBCL의 가비지 컬렉터가 작동할 때 충돌 발생
- 오디오 출력 불가, C 콜백 메커니즘 문제
- 성능 관련 문제도 예상됨

#### 개요

- Switch는 ARM64 Cortex-A57 칩과 4GB RAM을 사용하며, 독점 마이크로커널 운영 체제에서 실행됨
- SBCL은 이미 ARM64 Linux 포트를 가지고 있어 코드 생성 문제는 해결됨
- Switch는 OpenGL 그래픽 라이브러리를 지원하는 유일한 콘솔로, Trial의 그래픽 라이브러리 포팅이 용이함
- 개발을 시작하기 위해 Nintendo of Europe에서 개발 키트를 구입하고 SDK를 설치함

#### SBCL 빌드 과정

1. `build-config`: 빌드 구성 옵션을 수집하여 읽을 수 있는 형식으로 출력
2. `make-host-1`: 호스트 Lisp 컴파일러로 크로스 컴파일러 빌드
3. `make-target-1`: 타겟 C 컴파일러로 C 런타임 생성
4. `make-host-2`: 타겟 Lisp 시스템 빌드
5. `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 개발자와 게임 개발자에게 유용한 정보를 제공함

## Comments



### Comment 28910

- Author: neo
- Created: 2024-09-14T09:56:42+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41530783) 
- 몇 주 동안 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가 시스템에 대해 조금 더 개방적일 수 있다면 큰 축복일 것임
