Nghiên cứu và thiết kế bộ gõ tiếng Việt theo giao thức bàn phím gốc đa nền tảng
Sen Việt (VieLotusIM) lấy hệ sinh thái Apple (macOS, iOS, iPadOS) làm kiến trúc tham chiếu trọng tâm bằng ngôn ngữ Pure Swift 6, đồng thời vận hành đồng nhất cùng một lõi ngôn ngữ trên Windows, Linux và Android. Dự án tập trung giải quyết hai bài toán kỹ thuật: (1) thay thế cơ chế bẫy phím ngầm đòi quyền nhạy cảm bằng kênh nhập liệu chính thống của từng hệ điều hành, và (2) xử lý điểm mù từ vựng khi các từ tiếng Anh thông dụng như turn bị biến thành âm vô nghĩa "tủn", hoặc last thành "lát".
Các bộ gõ hiện nay khôi phục được từ sai cấu trúc vần (như window), nhưng với "turn", tổ hợp t-u-n đúng khuôn phụ âm – nguyên âm nên bị biến thành âm vô nghĩa "tủn".
Đối chiếu từ điển âm tiết thực tế thay vì chỉ ghép vần cơ học: nhận diện "tủn" không phải từ tiếng Việt có nghĩa độc lập nên tự trả về ngay "turn".
./Binaries/VieLotusCLI --benchmark
Danh mục nền tảng đã phát hành, dòng máy kiểm chứng & liên kết chính thức
Cùng một lõi trạng thái Pure Swift 6 (VieLotusCore & VieLotusCAPI) đã được biên dịch, đóng gói và xuất bản chính thức trên 5 hệ điều hành máy tính và di động. Bảng dưới đây tổng hợp giao thức hệ thống, phần cứng đã đo kiểm và đường dẫn tải/kho ứng dụng chính thức của từng nền tảng.
| Hệ điều hành & Giao thức | Dòng máy & Kiến trúc CPU đã kiểm thử | Môi trường & Ứng dụng xác thực | Kênh phát hành & URL chính thức |
|---|---|---|---|
|
macOS 13 – 15 InputMethodKit Ventura, Sonoma, Sequoia |
Apple Silicon (M1 / M2 / M3 / M4 — MacBook Air/Pro, Mac mini, iMac, Mac Studio) & Intel (x86_64) | Safari, Notes, Xcode, Office; Chrome, Arc, VS Code, Cursor, Slack, Notion, Zalo; Terminal, iTerm2, Ghostty, Kitty, Alacritty, Warp |
brew install stevedat/tap/vielotus
|
|
Windows 10 / 11 Win32 TSF COM 21H2, 22H2, 23H2, 24H2 |
Intel / AMD (x64) & ARM64 (Snapdragon X Elite/Plus, Surface Pro ARM, Parallels trên Mac M-series) | WinUI 3 / UWP (Windows 11 Notepad, Windows Terminal, Windows Search, Edge) & Win32 (Office 365, Chrome, VS Code, Zalo PC) | |
|
Linux (Debian / Ubuntu) IBus & Fcitx5 Ubuntu 22.04/24.04, Debian 12, Mint, Fedora, Arch |
x86_64 (amd64 PC/Laptop) & ARM64 (aarch64 — Raspberry Pi 4/5, máy trạm ARM) | X11 & Wayland (GNOME, KDE Plasma); Firefox, Chromium, VS Code, LibreOffice, GNOME Terminal, Konsole, Ghostty |
curl -fsSL https://stevedat.github.io/VieLotus-IM/install.sh | sh
|
|
iOS & iPadOS 16 – 18 UIInputViewController 0 Full Access · 100% Offline |
iPhone (XS → 16 Pro Max) & iPad (iPad Air, mini, iPad Pro M1–M4) | Bàn phím cảm ứng 60/120Hz (hỗ trợ gõ lướt Glide Typing) & bàn phím cứng Magic Keyboard / Bluetooth | |
|
Android 8.0 – 15 InputMethodService API 26+ · JNI C-ABI |
arm64-v8a, armeabi-v7a, x86_64 (Samsung Galaxy Phone/Tab/DeX, Google Pixel, Xiaomi, OPPO) | Bàn phím ảo cảm ứng & bàn phím cơ vật lý rời kết nối qua USB / Bluetooth (chế độ điện thoại, tablet & Samsung DeX) |
Kiến trúc giao thức gốc (không bẫy phím ngầm) và ba sự đánh đổi thẳng thắn
Nhiều bộ gõ tiếng Việt truyền thống hoạt động bằng cách cài bẫy sự kiện phím ở tầng hệ thống (đòi quyền Accessibility trên macOS, cài Keyboard Hook trên Windows, hoặc yêu cầu Full Access trên di động). Sen Việt chọn hướng tiếp cận chuẩn mực của từng nền tảng — lấy hệ sinh thái Apple làm chuẩn tham chiếu và áp dụng tương đương trên Windows, Linux, Android.
grep -rn "CGEvent" Sources/ (0 hit)
Ba bài toán cốt lõi trong lõi ngôn ngữ & Ma trận kiểm định đối xứng (9.091 ca)
Bên cạnh ranh giới an toàn với hệ điều hành, lõi ngôn ngữ phải phân xử chính xác sự va chạm giữa các từ tiếng Anh thông dụng và các âm tiết tiếng Việt hợp lệ mà không làm mất từ của bên nào.
Các bộ gõ hiện đại đều khôi phục tốt những từ sai quy tắc ghép vần (như window). Nhưng chúng thất bại ở 3 nhóm: (1) Từ như turn (t-u-r-n) tạo ra "tủn" đúng khuôn phụ âm – nguyên âm nên bị bỏ lọt dù "tủn" không có nghĩa; (2) Từ như last (l-a-s-t), best, cost, list có phím s nằm giữa từ bị biến thành "lát", "bét", "cót", "lít" — trong khi Sen Việt trả thẳng về last (còn gõ tiếng Việt l-a-t-s vẫn ra lát); (3) Từ trùng khít đường gõ duy nhất của tiếng Việt như rest / rét, if / ì, as / á.
Công bố đối xứng hai chiều: Khi có ngữ cảnh tiếng Anh đi trước, Sen Việt đạt 100.00% (9.091 / 9.091 ca, gồm 1.049/1.049 ca lưỡng nghĩa). Khi phát lại chính bộ từ đó ở trạng thái độc lập không có ngữ cảnh tiếng Anh, bộ gõ giữ đúng 97.33% (365 / 375) cho tiếng Việt và bảo toàn tuyệt đối 100.00% (182 / 182 — 0 tổn thất) các âm tiết tiếng Việt chỉ có duy nhất một đường bấm phím.
Khung soạn thảo gốc (AppKit/Win32), trình duyệt (Chromium/Electron) và GPU Terminal (Ghostty, Kitty, Alacritty, Claude Code) xử lý bộ đệm văn bản hoàn toàn khác nhau. Sen Việt tự động phân loại ứng dụng sang 4 chế độ (Direct Replacement, Marked Text, Terminal Direct phát byte DEL \u{7F}, Passthrough) và cho phép cộng đồng tùy chỉnh quy tắc qua tệp cấu hình mở typing-modes.yml mà không cần biên dịch lại.
Toàn bộ máy trạng thái (InputSessionManager), bộ tách âm 5 tầng và trọng tài ngữ cảnh nằm trong thư viện độc lập VieLotusCore, kết nối trực tiếp với macOS/iOS và xuất cầu nối C-ABI không sao chép (vielotus.h) cho Windows TSF, Linux IBus/Fcitx5 và Android JNI. Dữ liệu gợi ý từ ghép cá nhân chỉ lưu trên RAM (tối đa 512 mục, tự rã sau 14 ngày, không ghi ổ cứng).
./Binaries/VieLotusCLI --stress (250.000 keys)
Bảng tổng hợp kết quả kiểm định hồi quy (9.091 ca)
| Nhóm đo kiểm (Metric Bucket) | Điều kiện thực thi & Ý nghĩa thực nghiệm | Kết quả đo |
|---|---|---|
| Bộ kiểm thử chính (5 nhóm có ngữ cảnh) | Biến đổi âm tiết Việt (400), giữ từ tiếng Anh (362), hủy dấu cuối từ (67), khôi phục từ thô (7.213) và phân giải từ lưỡng nghĩa có ngữ cảnh (1.049) | 9.091 / 9.091 (100.00%) |
| Đối xứng hai chiều (ambiguous_both_sides) | 375 từ trùng phím viết thường chạy lặp lại ở cả 2 chiều: đúng tiếng Anh khi có ngữ cảnh VÀ đúng tiếng Việt khi gõ độc lập (vn_survives_collision) | 365 / 375 (97.33%) |
| Đường gõ tiếng Việt duy nhất (whitelist_safe = never) | Các âm tiết tiếng Việt chỉ có duy nhất một chuỗi phím Telex/VNI để tạo thành (0 tổn thất bắt buộc bởi VNCollisionRatchetTests) | 182 / 182 (100.00%) |
| Độ trễ đuôi p99 & Thông lượng (250.000 phím) | Thời gian xử lý 99% số lần gõ phím liên tục qua bài kiểm thử chịu tải (--stress) trên Apple Silicon | < 200 µs (> 40.000 keys/s) |
Sổ cái đóng góp mã nguồn ngược dòng (Upstream PRs) & Đối chiếu học thuật
Nghiên cứu kỹ thuật chỉ bền vững khi có tính kế thừa và đóng góp ngược lại cho cộng đồng. Khi phát hiện các lỗi biên trong quá trình kiểm thử chéo, nhóm phát triển gửi trực tiếp bản vá (Pull Request) kèm bộ unit test về các kho mã nguồn cùng hệ sinh thái để có thể truy vết minh bạch.
A. Danh mục Pull Request & Đặc tả kỹ thuật đóng góp ngược dòng (Traceable PR Ledger)
| Mã PR / Đặc tả | Kho mã nguồn (Repository) | Phân tích căn nguyên (Root-Cause) & Bản vá | Vector kiểm chứng & Trace |
|---|---|---|---|
| PR #133 ↗ |
ptrinh/viettelex Swift · macOS InputMethodKit |
Khắc phục lỗi mất đồng bộ trạng thái âm tiết sau khi đã gán thanh điệu, chuẩn hóa quy tắc tách âm tiết liên tiếp V-C-V và hoàn tác dấu Telex khi gõ vượt quá âm tiết đóng. |
dduowcj + uvieetj + uXem diff & unit tests |
| PR #20 ↗ |
uvie-project/uvie-rs Rust · Core Engine FSM |
Sửa lỗi lệch máy trạng thái hữu hạn (FSM) trong lõi Rust khi nhập tiếp nguyên âm sau âm tiết đã mang dấu nặng/sắc, ngăn hiện tượng nhảy ký tự và rớt dấu thanh. |
dduowcj + uvieetj + uXem diff & unit tests |
| PR #25 ↗ |
uvie-project/uvie-mac Swift · IMKInputController |
Đồng bộ hóa vùng đệm markedText / insertText ở tầng macOS shell với lõi uvie-rs khi chuyển tiếp âm tiết liên hoàn, khắc phục lỗi nuốt ký tự cuối từ. |
IMKInputControllerXem diff & unit tests |
| Open Spec ↗ |
stevedat/VieLotus-IM YAML & Markdown · MIT |
Công bố mở cơ sở dữ liệu phân loại chế độ hiển thị theo Bundle ID (typing-modes.yml) và tài liệu phân tích cơ chế TCC csreq / AXSecureTextField để các bộ gõ dùng chung. |
typing-modes.ymlCOMPATIBILITY.md |
B. Đối chiếu & Tri ân các công trình nền tảng trong hệ sinh thái (Foundational Prior Art)
| Dự án & Tác giả | Giấy phép | Di sản kỹ thuật & Giá trị tham chiếu học thuật |
|---|---|---|
| UniKey Phạm Kim Long |
GNU GPL | Đặt nền móng cho máy trạng thái âm tiết tiếng Việt, quy tắc đặt dấu thanh và chuẩn mã hóa tiếng Việt trên máy tính cá nhân. |
| OpenKey Mai Vũ Tuyên |
GNU GPLv3 | Tham chiếu cấu trúc ánh xạ bảng mã di sản (TCVN3, VNI Windows, Unicode tổ hợp) và ma trận kiểm tra hình vị âm tiết. |
| Bamboo Engine Lương Thanh Lam |
GNU GPLv3 | Tham chiếu các heuristic phân rã cấu trúc âm tiết tiếng Việt trên Linux (IBus) và xử lý xóa ký tự phía trước. |
| VietTelex Phil Trịnh |
MIT License | Tư liệu thực nghiệm về hành vi của Apple InputMethodKit, nhận diện AXSecureTextField và cấu trúc bộ kiểm thử hồi quy 9.091 ca. |
| UVie (uvie-rs / uvie-mac) UVie Project |
MIT License | Kiến trúc tách biệt lõi xử lý ngôn ngữ (Rust) và vỏ giao tiếp InputMethodKit (Swift), cùng hợp tác kiểm thử chéo các ca biên V-C-V. |
| XKey & PHTV xmannv · Phạm Hùng Tiến |
MIT / AGPLv3 | Tham chiếu tư duy chẩn đoán luồng phím thời gian thực và ghi chép tương thích ứng dụng đặc thù (TeXstudio, JetBrains, Claude Code CLI). |
Lộ trình nghiên cứu & phát triển kỹ thuật
Triển khai theo thứ tự ưu tiên: độ chính xác đối xứng của lõi ngôn ngữ, tính chuẩn mực với giao thức hệ điều hành, và khả năng kiểm chứng độc lập trên cả 5 nền tảng.
- Hoàn thiện lõi gõ tự do & phân giải song ngữ đối xứng (9.091 ca có ngữ cảnh đạt 100.00%, đối xứng 97.33% trên 365/375 ca, bảo toàn 182/182 đường gõ duy nhất).
- Phát hành chính thức trên cả 5 nền tảng: macOS (.pkg / Homebrew), Windows 10/11 TSF (x64 & ARM64), Linux (Snap Store & .deb), iOS/iPadOS (App Store) và Android (Google Play).
- Công bố kiến trúc Open-Core kèm công cụ kiểm chứng dòng lệnh độc lập VieLotusCLI.
- Mở rộng cơ sở dữ liệu quy tắc ứng dụng (typing-modes.yml) để cộng đồng bổ sung cấu hình tương thích cho các phần mềm chuyên ngành mà không cần biên dịch lại.
- Tinh chỉnh sâu chế độ nhập liệu cho các GPU Terminal, trình soạn thảo LaTeX và công cụ AI CLI thế hệ mới (Ghostty, Kitty, WezTerm, Claude Code).
- Tiếp tục đóng góp các bản vá lỗi biên âm vị học và bộ ca kiểm thử ngược dòng (Upstream PRs) cho hệ sinh thái bộ gõ mở.
- Hoàn thiện mô hình gợi ý từ ghép thích nghi theo văn phong cá nhân vận hành thuần trên RAM (tối đa 512 mục, tự rã sau 14 ngày, 0 ghi ổ cứng).
- Nâng cấp thuật toán giải mã quỹ đạo gõ lướt (Glide Typing) 120Hz trên màn hình cảm ứng iOS, iPadOS và Android.
- Mở rộng công cụ quan sát sự kiện độc lập (VieLotusLab) phục vụ gỡ lỗi giao thức nhập liệu đa nền tảng.