본문 바로가기

IT & AI

이름은 장난스럽지만 설계는 진지한 터미널, Shitty

728x90

이름은 장난스럽지만 설계는 진지한 터미널, Shitty

IT & AI 뉴스 썸네일
IT & AI 뉴스 썸네일

Shitty는 C++23으로 만든 macOS·Linux용 터미널 에뮬레이터예요. 튀는 이름보다 눈여겨볼 부분은 CPU에 터미널 상태를 두고 Metal과 Vulkan으로 셀을 그리는 구조, 5,000개가 넘는 테스트, 보수적인 기본 권한 정책이에요. 1

핵심 요약

구분내용확인할 점
렌더링macOS는 Metal, Linux는 Vulkan 컴퓨트 백엔드를 써요터미널 상태는 CPU에 유지해요
성능저장소의 동일 조건 벤치마크에서 ASCII 118MiB/s를 기록했어요최신 Ghostty 개발판은 같은 표에서 더 빨라요
호환성VT52~VT5xx, xterm 확장, Kitty 키보드 프로토콜을 지원해요양방향 텍스트와 sixel은 아직 없어요
배포Shitty와 이름을 순화한 Pretty 빌드를 함께 제공해요현재 결합 저작물 배포에는 GPL 조건이 남아 있어요

1. 빠른 출력만 노린 프로젝트는 아니에요

프로젝트가 제시한 Apple 실리콘 MacBook 테스트는 100MB 데이터를 GUI로 출력해 처리 시간을 재요. Menlo 12pt, 80×24 그리드, 스크롤백 500줄로 조건을 맞춘 뒤 세 번 가운데 가장 좋은 결과를 택했어요. 현재 저장소 표에서 Shitty는 출력 가능한 ASCII를 0.81초, 약 118MiB/s로 처리해요. Alacritty 0.17.0의 0.96초와 Kitty 0.48.2의 1.28초보다 빠르지만, Ghostty 1.3.2 개발판은 0.56초로 앞서요. 따라서 모든 터미널보다 가장 빠르다고 단정하기보다, 공개 재현 스크립트가 있는 상위권 결과로 보는 편이 정확해요. 2

파서가 다루기 까다로운 무작위 바이트 테스트에서는 1.88초, 약 51MiB/s를 기록했어요. 같은 표의 Alacritty는 3.07초, Ghostty 1.3.2 개발판은 3.37초예요. 이 수치는 일반적인 셸 작업의 체감 지연 시간을 그대로 뜻하지 않아요. 대량 출력 경로와 잘못된 UTF-8 입력을 얼마나 빠르고 안정적으로 처리하는지 비교한 결과예요.

728x90

CPU 상태와 네이티브 컴퓨트 렌더링을 나눴어요

터미널 상태는 CPU가 관리하고, 화면 셀은 macOS의 Metal이나 Linux의 Vulkan으로 그려요. 창 크기를 바꿀 때 경계 변경과 렌더링을 같은 트랜잭션에서 처리해 깜빡임을 줄여요. 바뀐 영역만 갱신하고, 글리프는 필요할 때 래스터화한 뒤 GPU 캐시에 보관해 불필요한 작업도 줄여요.

유니코드 처리는 코드포인트 한 개가 아니라 그래핌 클러스터를 기준으로 해요. 결합 문자, 이모지 시퀀스, 변형 선택자, 폭이 넓은 CJK 문자를 한 화면 셀에서 어떻게 다룰지 고려한 설계예요. 한국어와 이모지를 자주 쓰는 터미널에서는 단순 처리량만큼 중요한 부분이에요.

테스트와 기본 권한 정책도 구체적이에요

저장소는 kitty, xterm vttests, libvterm, Alacritty, Ghostty, Konsole, mosh 등 여러 테스트 묶음에서 5,000개가 넘는 사례를 모았다고 밝혀요. 실제 PTY를 거치는 블랙박스 방식으로 외부에 보이는 동작을 확인해요. 파서 상태 머신에는 퍼징용 입력도 넣어 무작위 데이터가 크래시로 이어지는지 검사해요. 2

애플리케이션이 선택 영역을 읽는 OSC 52 기능과 호스트 창 제어는 기본으로 잠겨 있어요. 신뢰하는 프로그램에만 사용자가 명시적으로 허용할 수 있어요. 터미널 안에서 실행한 프로그램이 클립보드나 창 상태에 접근하는 범위를 줄인 선택이에요.

설치 전에 한계와 라이선스를 봐야 해요

현재 양방향 텍스트 배치와 sixel 같은 인라인 그래픽 프로토콜은 구현되지 않았어요. 빌드도 가볍지만은 않아요. macOS에서는 Homebrew LLVM과 SPIRV-Cross가 필요하고, Linux에서는 Wayland와 Vulkan 환경을 요구해요. Apple 실리콘용 Homebrew 탭과 릴리스 바이너리는 따로 제공해요.

이 프로젝트는 Zutty의 하드 포크이자 대규모 재작성판이에요. 새 기여분은 GPLv3 이상과 MIT로 이중 라이선스하지만, 저장소에는 GPL로 가져온 코드가 남아 있어요. README는 결합 저작물을 배포할 때 아직 GPL 조건을 따라야 한다고 명시해요. MIT 전용 전환은 목표이지 현재 전체 코드에 곧바로 적용되는 상태는 아니에요. 2

이름이 부담스러운 환경을 위해 기능이 같은 Pretty 빌드도 제공해요. 실행 파일과 앱 이름, 설정 경로, 환경 변수 이름만 달라요. 기업 장비나 팀 문서에서 프로젝트 이름이 걸림돌이라면 `pt` 빌드가 현실적인 선택이에요.

왜 중요한가요

터미널 경쟁은 GPU 가속 하나로 끝나지 않아요. 파서 안정성, 유니코드 셀 모델, 리사이즈 처리, 클립보드 권한, 재현 가능한 벤치마크가 함께 맞아야 해요. Shitty는 이 요소를 코드와 테스트, 비교 스크립트로 공개해 다른 터미널 프로젝트와 검토할 수 있게 했어요. 2

다만 대량 ASCII 출력 처리량만으로 일상 사용성을 고르기는 어려워요. 키 입력 지연, 셸 통합, 글꼴 품질, 탭과 분할 화면, 접근성, 운영체제별 안정성은 별도로 확인해야 해요. 지금 쓰는 터미널에서 성능 문제를 느끼지 못한다면 갈아탈 이유도 약해요. 반대로 대량 로그를 자주 출력하거나 터미널 렌더러 구현을 살펴보는 개발자라면 비교해 볼 코드가 많아요.

참고 자료

  1. Shitty - 이상한 이름이지만 진지한 터미널 에뮬레이터 — GeekNews
  2. pg83/shitty: Shitty / Pretty — GitHub
728x90