- Phông chữ mã nguồn mở này bao gồm glyph (hình dạng chữ) cho tất cả ký tự Unicode trên toàn cầu, được duy trì như một phần của dự án GNU.
- Từ phiên bản 15.1.01, nhờ đóng góp của Minseo Lee và Ho-seok Ee, đã được đưa vào mã hóa tổ hợp mới (kiểu 6/3/1), áp dụng hệ thống glyph Hangul đã cải tiến.
- Ở phiên bản mới nhất 17.0.03, nhiều glyph tiếng Trung, tiếng Nhật, chữ Ả Rập, ký hiệu âm nhạc... đã được sửa đổi và bổ sung.
- Hỗ trợ toàn bộ 65.536 code point của BMP (Basic Multilingual Plane), đồng thời đang tiếp tục mở rộng sang SMP (Supplementary Multilingual Plane) và khu vực CSUR (ConScript Unicode Registry).
- Được phát hành theo GNU GPLv2+ kèm ngoại lệ nhúng phông chữ và SIL Open Font License 1.1, vì vậy có thể sử dụng tự do kể cả trong phần mềm thương mại.
- Dự án phông chữ Unicode mã nguồn mở tiêu biểu với mục tiêu bao phủ đầy đủ hệ chữ viết toàn cầu.
Tổng quan GNU Unifont
- GNU Unifont là phông chữ gồm glyph cho mọi code point có thể in được của Unicode, được duy trì trong Dự án GNU.
- Hỗ trợ đầy đủ Basic Multilingual Plane (BMP, U+0000~U+FFFF).
- Mặt phẳng SMP (U+010000~U+01FFFF) và khu vực CSUR/Under-CSUR cũng đang mở rộng dần.
- Có thể dùng trong phần mềm thương mại, đồng thời phông dẫn xuất phải được công bố cùng giấy phép.
- Giấy phép: GNU GPLv2+ (kèm ngoại lệ nhúng phông chữ) và SIL Open Font License 1.1.
- Việc công khai phông dẫn xuất nhằm bảo đảm lợi ích công cộng.
Bản quyền và giấy phép
- Hàng nghìn glyph là tác phẩm của các đóng góp viên riêng lẻ và đều được bảo vệ theo luật bản quyền của từng quốc gia.
- Một số là hình dáng chữ có sẵn, một số là thiết kế icon/buộc biểu tượng nên mức bảo hộ quốc tế cao hơn.
- Một ghi chú về luật bản quyền Đức đã được công bố.
- Từ phiên bản Unifont 13.0.04 trở đi, dự án phân phối theo giấy phép kép GPL 2+ / SIL OFL 1.1.
- Việc nhúng phông chữ (embed) vào tài liệu không vi phạm GPL.
Tải phông chữ và định dạng
- Cung cấp bản build chuẩn và bản có glyph PUA cho CSUR/Under-CSUR.
- Hỗ trợ nhiều định dạng: OpenType(.otf), PCF, BDF, PSF, HEX.
- Có thể cài trên Windows và macOS; trên Terminal macOS phải bật Antialias để đọc tốt hơn.
- Một số engine render bỏ qua thông tin khoảng cách glyph, vì vậy có thể có lỗi hiển thị trên engine mono-space chuyên dụng.
Hạn chế của Unifont
- Lưu trữ một glyph cho mỗi code point in được.
- Các chữ của các ngôn ngữ Ấn Độ (Devanagari, Bengali, Tamil...) hoặc chữ biến đổi hình dạng theo vị trí (như tiếng Ả Rập) không render chính xác.
- Với script phức tạp, khuyến nghị dùng phông OpenType chuyên dụng.
Đóng góp glyph mới
- Muốn bổ sung glyph mới cần liên hệ trước qua email.
- Có thể tham gia sau khi phối hợp để tránh làm trùng công việc.
- Các glyph Kanji 15×16 pixel (Plane 2, 3) thuộc quyền sở hữu bản quyền của chính phủ Trung Quốc không thể đưa vào phông chữ tự do.
Bản phát hành mới nhất — Unifont 17.0
- Ngày 1/11/2025, phiên bản 17.0.03
- Sửa hơn 100 chữ Hán có bộ 馬 (ngựa), 鳥 (chim).
- Phản ánh danh sách chuẩn chữ Hán giản thể của Trung Quốc từ 1935–2013.
- Bao gồm chuẩn bộ thủ thương mại hiện đại công bố năm 2009.
- Ngày 18/10/2025, phiên bản 17.0.02
- Nhiều đóng góp trên Plane 0–3 từ Paul Hardy, David Corbett, 晓晓Akatsuki, Boris Zhang.
- Sửa đổi nhiều mục cho tiếng Ả Rập, ký hiệu cờ vua, CJK extensions...
- Ngày 9/9/2025, phiên bản 17.0.01
- Thêm Arabic Extension-B, ký hiệu tiền tệ, chữ Telugu và Kannada.
- Trên Plane 1–3 thêm nhiều script như Arabic Extension-C, Sidetic, Tolong Siki, Beria Erfe, Adlam.
Các phiên bản quan trọng trước đây
- Unifont 16.0 (nửa đầu 2025)
- Sửa nhiều mục cho tiếng Ả Rập, Hy Lạp, Hangul, ký hiệu âm nhạc.
- Thêm các script CSUR như Sitelen Pona, Zbalermorna.
- Unifont 15.1 (2024)
- Tích hợp mã hóa Hangul Johab 6/3/1 của Ho-seok Ee.
- Chuyển sang bản build mặc định OpenType thay vì TrueType.
- Cải tiến lớn đối với Hangul, mở rộng CJK extensions và glyph Wen Quan Yi.
Phạm vi bao phủ glyph
- Hỗ trợ rộng rãi Plane 0–3, Plane 14 và Plane 15.
- Plane 0: Basic Multilingual Plane (phủ hầu hết các ký tự chính).
- Plane 1: Supplementary Multilingual Plane (ký hiệu âm nhạc, tượng hình, chữ cổ...).
- Plane 2–3: Kanji Hán mở rộng CJK.
- Plane 14: Tag và trình chọn biến thể.
- Plane 15: Khu vực riêng tư CSUR/Under-CSUR.
Script CSUR và UCSUR
- Tengwar, Cirth, Aurebesh, Klingon, Sitelen Pona, Sadalian...
- Bao gồm nhiều script cho ngôn ngữ giả tưởng.
- Một số được đánh dấu là chưa hoàn thiện.
Biến thể tiếng Nhật và tiếng Trung
- Phiên bản unifont_jp cung cấp và hỗ trợ đầy đủ chuẩn JIS X 0213.
- Ban đầu sử dụng glyph công khai Jiskan16, sau đó thay bằng Izumi16.
- Phiên bản tiếng Trung bao phủ toàn bộ thước đo quy phạm chữ Hán thông dụng.
- Dựa trên glyph công khai từ dự án Wen Quan Yi(文泉驛).
Chi tiết kỹ thuật
- Chuyển sang TrueType dựa trên script của Luis Alejandro González Miranda.
- Tự động hóa chuyển đổi
.hex → .sfd → .ttf.
- Mặc định dùng lưới 16×16 pixel, và dự kiến hỗ trợ glyph 32×32 pixel trong tương lai.
Kế hoạch tương lai
- 16×16 pixel glyph của SMP đã hoàn thiện toàn bộ.
- Các script phức tạp như Tangut sẽ được thực hiện ở kích thước 32×32 pixel trong giai đoạn tới.
- Công việc thêm mới các script CSUR vẫn đang tiếp tục.
- Mọi đóng góp mới đều phải công bố theo điều kiện GPL 2+ / SIL OFL 1.1.
Ý nghĩa của dự án
- GNU Unifont là phông chữ điển hình nhằm bảo đảm khả năng tiếp cận kỹ thuật số cho hệ chữ viết toàn cầu.
- Vai trò hạ tầng cốt lõi trong hệ sinh thái mã nguồn mở, i18n, kỹ thuật phông chữ.
- Nhờ đóng góp cộng đồng liên tục, đây là một dự án nâng cao mức hoàn thiện trực quan của chuẩn Unicode.
Nguồn gốc và cấu trúc của Hangul
- Hangul được vua Sejong sáng tạo trong giai đoạn 1443–1446 và ban hành năm 1446 trong Hunminjeongeum Haerye.
- Mục tiêu sáng chế được ghi rõ là “để dân chúng dễ học và tiện dụng hàng ngày”.
- Haerye là sách chú giải giải thích nguyên lý tạo chữ; một bản duy nhất được bảo tồn đã được tìm thấy trong Chiến tranh thế giới thứ hai.
- Hangul gồm cấu trúc khối âm tiết với ba phần: choseong (âm đầu), jungseong (âm giữa), jongseong (âm cuối).
- Ví dụ: “Hangul” gồm
h+a+n, g+eu+l.
- Nguyên âm và bán nguyên âm (y, w) đặt ở bên phải hoặc phía dưới âm đầu.
Nguyên lý tạo phụ âm
- Phụ âm bắt đầu từ năm phụ âm cơ bản mô phỏng hình dạng cơ quan phát âm.
- Thêm thêm nét để tạo 17 phụ âm ban đầu.
- Một số phụ âm được tăng cường bằng dạng chữ đôi để biểu thị âm mạnh.
- Jamo kết hợp (Compatibility Jamo) cũng có trong Unicode; một số jamo cổ không còn sử dụng ngày nay.
Nguyên lý tạo nguyên âm
- Nguyên âm xuất phát từ khái niệm Trời (yang), Người (jung), Đất (yin) của tam tài.
- Các thành phần cơ bản là dấu chấm, đường ngang, đường dọc.
- Ban đầu có 11 nguyên âm; arae-a đã biến mất trong tiếng Hàn chuẩn hiện đại nhưng còn tồn tại trong phương ngữ Jeju.
- Kết hợp nguyên âm tạo ra diphthong, một số không còn dùng trong tiếng Hàn hiện đại.
- Bộ Unifont Hangul Jamo hỗ trợ tất cả nguyên âm và diphthong của cả thời cổ lẫn hiện đại.
Vùng Hangul trong Unicode
- Hangul nằm trong các khoảng Unicode sau:
- 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
- Điều chỉnh vị trí ghép choseong, jungseong, jongseong là trọng tâm thiết kế phông, và có thể thể hiện âm tiết ghép ngay cả trong phông bitmap.
Phông Johab ghép và Unifont
- Phông mã hóa Johab tạo glyph âm tiết bằng cách ghép choseong, jungseong, jongseong.
- Dùng trong terminal Hanterm của môi trường Unix X11.
- Vì phông chữ miễn phí cho Hanterm không tương thích GPL, nên Unifont đã tự thiết kế trực tiếp glyph âm tiết Hangul mới.
- Quy trình chuyển đổi: script Perl
johab2ucs2.pl → .hex → .bdf.
- Các phông chữ cũ (iyagi16, johabg16...) bị giới hạn bởi giấy phép riêng cho Hanterm.
- Sau đó, Unifont đã tạo mới bộ Hangul Syllables trong vài năm để đưa vào phiên bản chính.
Đóng góp mới và cải tiến mã hóa gần đây
- Minseo Lee (2023): cung cấp bản sửa glyph hiện đại và cổ theo thứ tự Hanterm.
- Cải thiện script Perl và đồng bộ hóa jamo trong phạm vi Unicode.
- Ho-seok Ee: đề xuất mã hóa Johab 6/3/1.
- Cấu trúc kết hợp 6 âm đầu, 3 âm giữa, 1 âm cuối giúp tạo glyph đơn giản hơn so với trước.
- Đề xuất chuyển code point sang Private Use Area(U+E000–U+E8FF).
- Phiên bản Unifont 15.1.01 bắt đầu áp dụng cách mã hóa này.
Khối âm tiết Hangul Unicode (U+AC00–U+D7A3)
- Gồm tổng cộng 11.172 glyph âm tiết.
- 19 choseong (hoặc glyph đệm 1), 21 jungseong và 27 jongseong (hoặc không có).
- Công thức ghép: (19×21)×28 = 11.172.
- Từ bắt đầu bằng nguyên âm dùng choseong ieung làm ký tự đệm.
- Từ phiên bản Unifont 5.1 trở đi, quy trình tạo khối âm tiết mới được mô tả chi tiết trong tài liệu riêng Generating Hangul Syllables.
2 bình luận
Hóa ra đó là nguyên nhân của kiểu phông chữ tiếng Hàn xấu xí trong Minecraft...
Ý kiến trên Hacker News
Nó rất hữu ích vì được nhúng trực tiếp vào tệp thực thi. Một số người dùng có các thiết kế chứa ký tự CJK và nó hoạt động tốt trên mọi nền tảng
Khi xem ghi chú lỗ của CAD, tôi rất ngạc nhiên khi thấy các ký hiệu counter-bore và counter-sink đã có sẵn trong Unifont
Phiên bản web thử nghiệm có thể xem tại đây
Khi hình học đơn giản, cảm giác sử dụng cực kỳ thoải mái
Mong một ngày nào đó được chui vào mã để thay thế hộp thoại modal “không thể tạo ràng buộc”
Nó cung cấp glyph cố định cho tất cả codepoint của BMP và cả một số codepoint ở các plane khác
Hữu ích cho các trình chỉnh sửa có thể chỉnh sửa văn bản Unicode mà không cần kiến thức render cho từng ngôn ngữ
Tuy nhiên với những script phức tạp như Devanagari, không có shaping nên không trông như văn bản thật
dùng để hiển thị ký tự khi không tìm thấy glyph trong font khác
thay vào đó tôi dùng Jigmo font vì glyph CJK trong đó đầy đủ nhất
The Mostly Complete Unicode Spiral
Toàn bộ nhìn như thiên hà, và việc các emoji sắp ở mép ngoài rất ấn tượng. Tìm thấy emoji trái đất cũng rất thú vị
nên các script phức tạp (Indic, Arabic, v.v.) không được render đúng
các trường hợp này nên dùng font OpenType, và Unifont chỉ thích hợp làm fallback font
Tôi cũng tắt luôn việc tải web font; trong CSUR (ConScript Unicode Registry) cũng có ký tự do tôi tự tạo
Với Qt, cài đặt DPI khá khó nhưng
QT_FONT_DPI=128đã khắc phục được. Tôi muốn ở các game như RimWorld cũng chỉ dùng Unifontvì font fallback của nó kỳ lạ khi ưu tiên chọn Unifont trước tiên
không thì không đoán trước được font nào sẽ được chọn
Với Noto Color Emoji cũng từng có hiện tượng tương tự. Font thật sự là một thế giới rất tinh vi
https://github.com/remysucre/cuniform