1P by GN⁺ 13시간전 | ★ favorite | 댓글 2개
  • 전 세계 유니코드 문자에 대한 글리프(문자 도형) 를 포함한 자유 폰트로, GNU 프로젝트의 일부로 유지되는 공개 폰트임
  • 15.1.01 버전부터는 이민서와 이호석의 기여로 새로운 조합 인코딩(6/3/1 방식) 이 도입되어 개선된 한글 글리프 체계 적용
  • 최신 17.0.03버전에서는 중국어·일본어 한자와 아랍어·음악 기호 등 다수의 글리프가 수정·추가됨
  • BMP(기본 다국어 평면) 전체 65,536 코드포인트를 지원하며, SMP(보조 다국어 평면)CSUR(ConScript Unicode Registry) 영역도 점차 확장 중임
  • GNU GPLv2+ 폰트 임베딩 예외SIL Open Font License 1.1이중 라이선스로 배포되어, 상용 소프트웨어에서도 자유롭게 사용 가능함
  • 전 세계 문자 체계의 완전한 커버리지를 목표로 하는 대표적인 오픈소스 유니코드 폰트 프로젝트

GNU Unifont 개요

  • GNU Unifont은 모든 인쇄 가능한 유니코드 코드포인트에 대한 글리프를 포함하는 폰트로, GNU 프로젝트의 일부로 유지됨
    • 기본 다국어 평면(BMP, U+0000~U+FFFF)을 완전 지원
    • 보조 다국어 평면(SMP, U+010000~U+01FFFF) 및 CSUR/Under-CSUR 영역도 지속 확장 중
  • 상용 소프트웨어에서도 사용 가능하며, 파생 폰트는 동일한 라이선스로 공개해야 함
    • 라이선스는 GNU GPLv2+ (폰트 임베딩 예외 포함)SIL Open Font License 1.1
    • 파생 폰트의 공개를 통해 공공 이익을 보장함

저작권 및 라이선스

  • 수천 개의 글리프는 개별 기여자들의 창작물로, 각국 저작권법의 보호를 받음
    • 일부는 기존 문자 형태, 일부는 아이콘·상징 디자인으로 국제 보호 수준이 더 높음
  • 독일 저작권법 관련 메모랜덤이 공개되어 있음
  • Unifont 13.0.04 이후 버전부터 GPL 2+ / SIL OFL 1.1 이중 라이선스로 배포됨
    • 문서에 폰트를 포함(embed)하는 것은 GPL 위반이 아님

폰트 다운로드 및 형식

  • 표준 빌드와 CSUR/Under-CSUR PUA 글리프 포함 버전 제공
    • OpenType(.otf) , PCF, BDF, PSF, HEX 등 다양한 형식 지원
    • Windows, macOS에서 설치 가능하며, macOS 터미널에서는 Antialias 옵션을 켜야 가독성 확보
  • 일부 렌더링 엔진은 글리프 간격 정보를 무시하므로, 모노스페이스 전용 엔진에서는 표시 오류 가능

Unifont의 한계

  • 각 인쇄 가능한 코드포인트당 하나의 글리프만 저장
    • 인도계 문자(데바나가리, 벵골어, 타밀어 등)나 위치에 따라 형태가 변하는 문자(아랍어 등) 는 정확히 렌더링되지 않음
    • 복잡한 스크립트는 전문 OpenType 폰트 사용이 권장됨

새 글리프 기여

  • 새로운 글리프를 추가하려면 사전 이메일 연락 필요
    • 중복 작업 방지를 위해 협의 후 참여 가능
  • 중국 정부가 저작권을 보유한 15×16 픽셀 한자 글리프(Plane 2, 3) 는 자유 폰트에 포함 불가

최신 릴리스 — Unifont 17.0

  • 2025년 11월 1일 버전 17.0.03
    • 중국어 ‘馬(말)’·‘鳥(새)’ 부수 포함 한자 100여 개 이상 수정
    • 1935~2013년 간의 중국 간체자 표준 목록 반영
    • 2009년 발표된 현대 상용자 부수 규격 포함
  • 2025년 10월 18일 버전 17.0.02
    • Plane 0~3 전반에서 Paul Hardy, David Corbett, 晓晓Akatsuki, Boris Zhang 등 다수 기여
    • 아랍어, 체스 기호, CJK 확장자 등 다수 수정
  • 2025년 9월 9일 버전 17.0.01
    • 아랍어 확장-B, 통화 기호, 텔루구·칸나다 문자 등 추가
    • Plane 1~3에서 새로운 아랍어 확장-C, Sidetic, Tolong Siki, Beria Erfe, Adlam 등 다수 스크립트 추가

이전 주요 버전

  • Unifont 16.0 (2025년 상반기)
    • 아랍어, 그리스어, 한글, 음악 기호 등 다수 수정
    • Sitelen Pona, Zbalermorna 등 CSUR 스크립트 추가
  • Unifont 15.1 (2024년)
    • 이호석(Ho-seok Ee)조합형 한글 6/3/1 Johab 인코딩 도입
    • TrueType 대신 OpenType 기본 빌드로 전환
    • 한글, CJK 확장자, Wen Quan Yi 글리프 대규모 개선

글리프 커버리지

  • Plane 0~3, Plane 14, Plane 15까지 광범위한 유니코드 평면 지원
    • Plane 0: 기본 다국어 평면 (모든 주요 문자 완전 커버)
    • Plane 1: 보조 다국어 평면 (음악 기호, 상형문자, 고대 문자 등)
    • Plane 2~3: CJK 확장 한자
    • Plane 14: 태그 및 변형 선택자
    • Plane 15: CSUR/Under-CSUR 사설 영역

CSUR 및 UCSUR 스크립트

  • Tengwar, Cirth, Aurebesh, Klingon, Sitelen Pona, Sadalian
    • 다양한 인공 문자(conlang script) 포함
    • 일부는 아직 미완성 상태로 표시

일본어 및 중국어 변형

  • JIS X 0213 표준을 완전 지원하는 unifont_jp 버전 제공
    • 초기에는 Jiskan16, 이후 Izumi16 공개 글리프로 교체
  • 중국어 버전은 통용규범한자표 완전 커버
    • Wen Quan Yi(文泉驛) 프로젝트의 공개 글리프를 기반으로 함

기술적 세부사항

  • TrueType 변환Luis Alejandro González Miranda의 스크립트를 기반으로 함
    • .hex.sfd.ttf 변환 자동화
  • 16×16 픽셀 그리드를 기본으로 하며, 향후 32×32 픽셀 글리프 지원 예정

향후 계획

  • SMP 평면의 16×16 픽셀 글리프는 모두 완성됨
  • 탕구트(Tangut) 등 복잡한 스크립트는 32×32 픽셀로 향후 제작 예정
  • CSUR 스크립트 추가 작업 지속 중
  • 모든 신규 기여는 GPL 2+ / SIL OFL 1.1 조건으로 공개해야 함

프로젝트 의의

  • GNU Unifont은 전 세계 문자 체계의 디지털 접근성 확보를 목표로 하는 대표적 자유 폰트
  • 오픈소스 생태계, 국제화(i18n), 폰트 엔지니어링 분야에서 핵심 인프라 역할 수행
  • 지속적인 커뮤니티 기여를 통해 유니코드 표준의 시각적 완성도를 높이는 프로젝트임

Unifont의 한글 폰트 페이지 - Hangul(Hangeul) Font

한글의 기원과 구조

  • 한글은 세종대왕이 1443~1446년 사이에 창제하여 1446년 훈민정음 해례본으로 반포
    • 창제 목적은 “백성이 쉽게 배우고 매일 편리하게 쓰게 하려 함”으로 명시
    • 해례본은 제자 원리를 설명한 주석서로, 2차 세계대전 중 발견된 유일본이 보존되어 있음
  • 한글은 초성(자음)·중성(모음)·종성(받침) 세 요소로 이루어진 음절 블록 구조
    • 예시: “한글”은 ‘ㅎ+ㅏ+ㄴ’, ‘ㄱ+ㅡ+ㄹ’의 조합으로 구성
    • 모음과 반모음(y, w)은 초성 오른쪽 또는 아래쪽에 배치

자음의 구성 원리

  • 자음은 발음 기관의 형태를 본뜬 다섯 기본 자음(ㄱ, ㄴ, ㅁ, ㅅ, ㅇ)에서 출발
    • 여기에 획을 더해 17개의 원래 자음이 만들어짐
    • 일부 자음은 쌍자음 형태로 강세를 표시
  • 조합형 자모(Compatibility Jamo) 도 Unicode에 포함되어 있으며, 일부 옛 자모는 현재 사용되지 않음

모음의 구성 원리

  • 모음은 하늘(양), 사람(중), 땅(음) 의 삼재 개념에서 유래
    • 기본 요소: 점(ㆍ), 수평선(ㅡ), 수직선(ㅣ)
  • 원래 11개의 모음이 존재했으며, ㆍ(아래아) 는 현대 표준어에서는 사라졌으나 제주 방언에 남아 있음
  • 모음 결합으로 이중모음(diphthong) 이 형성되며, 일부는 현대 한글에서 사용되지 않음
  • Unifont Hangul 자모 세트는 고대와 현대의 모든 모음·이중모음을 지원

Unicode 내 한글 영역

  • 한글은 다음 Unicode 범위에 포함
    • U+1100–U+11FF: Hangul Jamo
    • U+3130–U+318F: Hangul Compatibility Jamo
    • U+A960–U+A97F: Hangul Jamo Extended–A
    • U+AC00–U+D7A3: Hangul Syllables
    • U+D7B0–U+D7FF: Hangul Jamo Extended–B
    • U+FFA0–U+FFDF: Half-width Compatibility Jamo
  • 초성·중성·종성의 조합 위치 조정이 폰트 디자인의 핵심이며, 비트맵 폰트에서도 조합형 음절 표현 가능

X11 조합형(Johab) 폰트와 Unifont

  • Johab 인코딩 폰트는 초성·중성·종성을 결합해 음절 글리프를 생성
    • Unix X11 환경의 Hanterm 터미널에서 사용
  • Hanterm용 무료 폰트는 GPL 호환이 아니었기 때문에, Unifont에서는 새로운 한글 음절 글리프를 직접 제작
    • 변환 과정: Perl 스크립트 johab2ucs2.pl → .hex → .bdf 변환
    • 기존 폰트(iyagi16, johabg16 등)는 한터미널 전용 라이선스로 제한
  • 이후 새로운 Hangul Syllables 세트를 수년간 제작하여 Unifont에 포함

최근 기여와 인코딩 개선

  • 이민서(Minseo Lee) : 2023년, Hanterm 순서 기반의 현대 글리프와 고대 글리프 수정본 제공
    • Perl 스크립트 개선 및 Unicode 범위 내 자모 일관성 수정
  • 이호석(Ho-Seok Ee) : Johab 6/3/1 인코딩 제안
    • 초성 6, 중성 3, 종성 1의 조합 구조로, 기존보다 글리프 생성이 단순화
    • Private Use Area(U+E000–U+E8FF) 로 코드 포인트 이동 제안
    • Unifont 15.1.01 버전부터 이 인코딩 방식 채택

Unicode 한글 음절 블록 (U+AC00–U+D7A3)

  • 11,172개 음절 글리프로 구성
    • 초성 19개(또는 채움자 1개), 중성 21개, 종성 27개(또는 없음)
    • 조합식: (19×21)×28 = 11,172
  • 모음으로 시작하는 단어는 초성 ‘ㅇ(이응)’ 을 채움자로 사용
  • Unifont 5.1 이후 버전에서는 새로운 음절 블록 생성 과정이 별도 문서 Generating Hangul Syllables 에 상세히 기술됨

마인크래프트의 못생긴 한글폰트의 정체가 얘죠...

Hacker News 의견들
  • 우리는 Solvespace의 텍스트 창과 속성 브라우저에 GNU Unifont을 사용함
    실행 파일에 바로 내장되어 있어서 매우 유용했음. 일부 사용자는 설계에 CJK 문자를 포함하는데, 모든 플랫폼에서 그냥 잘 작동함
    CAD의 홀 주석을 살펴보던 중, 카운터보어(counter-bore)카운터싱크(counter-sink) 기호가 이미 Unifont에 포함되어 있어 놀라웠음
    실험용 웹 버전은 여기서 볼 수 있음
    • 웹 버전의 단순함이 정말 멋짐. Solvespace는 내가 가장 좋아하는 MCAD 프로그램으로, 빠르게 PCB 테스트용 지그를 만들 때 항상 먼저 찾는 도구임
      기하가 단순할 때는 사용감이 매우 쾌적함
    • 단지 폰트 선택만으로 이런 멋진 효과가 나오는 게 신기함. 물론 Unifont와 Unicode 전체에는 수많은 인류의 시간이 들어갔겠지만, 청동기 시대 CAD 엔지니어가 Linear A로 이름을 써도 문제없다는 발상이 마음에 듦
    • 웹 버전이 정말 깔끔함. Solvespace는 기능은 제한적이지만 제약 조건을 표현할 때의 유연함과 즐거움이 압도적임
      언젠가 코드에 들어가서 “제약을 생성할 수 없습니다”라는 모달 대화창을 대체해보고 싶음
  • 다른 사람들을 위해 정리하자면, GNU Unifont은 비트맵 폰트
    BMP의 모든 코드 포인트에 고정된 글리프를 제공하고, 일부 다른 평면의 코드 포인트도 포함함
    언어별 렌더링 지식 없이도 Unicode 텍스트를 편집할 수 있는 에디터에 유용함
    다만 데바나가리 같은 복잡한 스크립트를 쓸 때는 형태 조합(shaping) 이 없어 실제 텍스트처럼 보이지 않음
    • 여기서 BMP는 BitMap이 아니라 Unicode Basic Multilingual Plane을 의미함. 즉, 처음 65,536개의 코드 포인트 영역임
    • 그럼 포인트 크기마다 별도의 파일이 있는 것인지 궁금함. 폰트에 대해 내가 아는 게 거의 없다는 걸 새삼 느낌
  • 그 웹사이트의 첫 문장은 GNU Unifont이 무엇인지 설명해야 하지 않나 싶음. 아마 거의 모든 Unicode 코드 포인트를 포함한 단일 copyleft 폰트인 듯함
    • 사실 두 번째와 세 번째 문장이 이미 정확히 설명하고 있음. BMP의 모든 인쇄 가능한 코드 포인트에 대한 글리프를 포함하고, 마지막 수단용 폰트로 적합함
      다른 폰트에서 글리프를 찾지 못했을 때 문자를 표시해주는 역할임
    • “거의 모든”이 “모든”은 아님. 나는 희귀한 CJK 문자를 렌더링해야 하는 프로젝트가 있는데, Unifont에서는 제대로 표시되지 않음
      대신 Jigmo 폰트를 사용했는데, CJK 글리프가 가장 완전했음
    • 나도 처음엔 헷갈렸는데, “Home”을 눌러보니 링크가 랜딩 페이지가 아니라는 걸 깨달음
    • 이런 식으로 첫 문장에서 설명이 부족한 오픈소스 프로젝트가 정말 많음
    • “GNU Unifont은 GNU 프로젝트의 일부이며 BMP의 모든 인쇄 가능한 코드 포인트에 대한 글리프를 포함한다”는 문장이 이미 충분히 명확하다고 생각함
  • 출력했을 때도 정말 아름다움. 나는 그것을 나선형 포스터로 만들어 벽에 걸어두었음
    The Mostly Complete Unicode Spiral
    • 멋짐! 어떤 크기로 출력했는지 궁금함. 주요 나선 주변의 드문드문한 한자들은 Unicode의 자연스러운 배치인지, 아니면 연출인지?
      전체가 은하처럼 보이고, 이모지가 바깥쪽 가장자리에 정렬된 게 인상적이었음. 지구 이모지를 찾는 재미도 있었음
  • Unifont은 각 코드 포인트당 하나의 글리프만 저장함
    그래서 복잡한 스크립트(Indic, Arabic 등) 는 제대로 렌더링되지 않음
    이런 경우에는 OpenType 폰트를 사용해야 하며, Unifont은 어디까지나 fallback용 폰트로 적합함
  • 폰트 사이트에는 종종 “Hello World” 같은 type specimen 미리보기 이미지가 있음. Unifont 페이지에도 그런 걸 추가하면 좋겠음
  • GNU라는 이름을 보면, 모든 면에서 최고는 아니더라도 사용자 존중 면에서는 거의 최고라고 느껴짐
  • 나는 Unifont을 시스템 전체에 적용하고, Firefox에서는 유일한 폰트로 강제 사용함
    웹 폰트 다운로드도 비활성화했고, CSUR(ConScript Unicode Registry)에 내가 만든 문자도 있음
    Qt에서는 DPI 설정이 까다롭지만 QT_FONT_DPI=128로 해결됨. RimWorld 같은 게임에서도 Unifont만 쓰게 하고 싶음
    • 왜 그렇게 사용하는지 궁금함
    • 나도 설치해봤는데, HN을 200% 확대해야 읽을 수 있었음. XFCE에서는 그럭저럭 괜찮았음
  • 나는 Firefox에서 예쁜 CJK 폰트를 쓰려면 Unifont을 제거해야 했음
    폰트 폴백이 이상하게 Unifont을 우선 선택했기 때문임
    • 해결하려면 Firefox 설정의 Language and Appearance → Fonts → Advanced로 들어가 각 스크립트별 폰트를 지정해야 함
      그렇지 않으면 어떤 폰트가 선택될지 예측 불가함
    • 나도 Firefox와 Chrome에서 Unifont 글리프가 보이지 않는 문제를 겪었음. nixpkgs 이슈 트래커에도 관련 보고가 있음
      Noto Color Emoji에서도 비슷한 현상이 있었음. 폰트는 정말 미묘한 세계임
  • 나는 Unifont을 기반으로 Playdate용 폰트를 만들었음
    https://github.com/remysucre/cuniform