- libghostty đang được phát triển như một thư viện giả lập terminal nhúng có thể dùng trong bất kỳ ứng dụng nào
- Thành phần đầu tiên, libghostty-vt, là API không có phụ thuộc nào, được tối ưu cho việc phân tích cú pháp và duy trì trạng thái
- Dự án ra đời כדי giải quyết độ phức tạp của giả lập terminal và vấn đề phải triển khai lặp đi lặp lại, hướng tới đa nền tảng và tính di động cao
- Trong tương lai, dự kiến sẽ mở rộng thêm các thư viện cho xử lý đầu vào bàn phím, kết xuất GPU, tích hợp nhiều framework
- Hiện tại Zig API đã có thể thử nghiệm, và C API cũng sẽ sớm được công bố; dự án đang tích cực lắng nghe phản hồi từ người dùng
Giới thiệu và bối cảnh phát triển libghostty
- libghostty là một dự án thư viện được thiết kế để nhúng khả năng giả lập terminal hiện đại, nhanh và đầy đủ vào mọi ứng dụng
- Hiện nay, rất nhiều chương trình либо tự triển khai terminal emulator theo cách riêng, либо chỉ xây dựng riêng những chức năng terminal rất hạn chế
- Những triển khai giả lập terminal được phát triển riêng lẻ như vậy thường là các codebase ad-hoc, dùng một lần, không xử lý đầy đủ ngoại lệ và độ phức tạp, nên hay gặp các vấn đề về thiếu hoàn chỉnh, lỗi và suy giảm hiệu năng
- Với đa số lập trình viên, việc triển khai giả lập terminal không phải là nghiệp vụ cốt lõi, nên tồn tại nhu cầu về một giải pháp chung có khả năng tái sử dụng cao
- libghostty cung cấp C API đa nền tảng được thiết kế với số phụ thuộc tối thiểu, qua đó cho phép nhiều ứng dụng tận dụng khả năng giả lập terminal ổn định và nhanh chóng
libghostty-vt: khởi đầu của thư viện đầu tiên
libghostty-vt là thư viện hoàn toàn không có phụ thuộc (thậm chí không cần cả libc), cung cấp API cho việc phân tích terminal sequence và duy trì trạng thái terminal như vị trí con trỏ, kiểu dáng, xuống dòng
- Việc phân tích các terminal sequence này không chỉ là chức năng cốt lõi của terminal emulator, mà còn là thành phần bắt buộc cho các trang chỉ cần đầu ra có định dạng đơn giản như GitHub Actions, log build của Vercel, v.v.
- Việc phân tích cú pháp terminal protocol nhìn bề ngoài có vẻ đơn giản, nhưng độ khó triển khai thực tế rất cao; trên thực tế đã có trường hợp nhiều implementation như Jediterm gặp vấn đề trong xử lý một số sequence
- Một số lập trình viên chỉ dừng ở cách phân tích đơn giản các ANSI sequence, nhưng do nhu cầu xử lý kiểu dáng phức tạp (như nhiều cách biểu diễn RGB khác nhau) và yêu cầu tương thích đầy đủ, một parser tinh vi là điều bắt buộc
- libghostty-vt được tách ra từ phần lõi đã được kiểm chứng của Ghostty, sở hữu phân tích cú pháp tối ưu bằng SIMD, hỗ trợ Unicode xuất sắc, cấu trúc bộ nhớ nâng cao, khả năng tương thích giao thức rộng (Kitty Graphics, Tmux Control Mode, v.v.)
- Thư viện được cung cấp dưới dạng C API zero-dependency trong một tệp duy nhất, nên có thể dễ dàng nhúng vào mọi ngôn ngữ và môi trường phổ thông; ưu tiên hỗ trợ macOS, Linux (x86_64, aarch64) và sẽ dần mở rộng sang Windows, hệ nhúng, WASM, v.v.
- Mức độ hỗ trợ mục tiêu còn có thể toàn diện hơn cả Ghostty GUI
libghostty sẽ mở rộng về dài hạn
- Sau libghostty-vt, dự kiến sẽ lần lượt ra mắt thêm các nhóm thư viện cung cấp chức năng như xử lý đầu vào (mã hóa bàn phím, v.v.), kết xuất GPU (OpenGL, Metal), GTK widget và Swift framework
- Các phần mở rộng chức năng này sẽ được tổ chức theo từng mô-đun để giảm thiểu phụ thuộc, kích thước mã nguồn và độ phức tạp bảo trì
Tình hình phát triển libghostty-vt
- Một PR (pull request) gần đây để đưa
libghostty-vt ra bên ngoài dưới dạng mô-đun Zig đã được merge, nên lập trình viên Zig có thể dùng ngay
- C API hiện đang trong quá trình định nghĩa và sẽ sớm được cung cấp để thử nghiệm (logic lõi vốn đã là mã nguồn được kiểm chứng, được dùng trong Ghostty suốt nhiều năm)
- Ứng dụng Ghostty trên macOS cũng sử dụng C API nội bộ, nhưng phần header nội bộ hiện tại không phù hợp để công khai ra bên ngoài và sử dụng phổ thông, nên một C API hoàn toàn mới đang được thiết kế
- libghostty được quản lý phiên bản tách biệt với ứng dụng Ghostty, hiện ở giai đoạn alpha và kỳ vọng sớm được đón nhận cũng như có sự tham gia của các nhà phát triển language binding
- Mục tiêu là phát hành bản release đầu tiên có gắn tag trong vòng 6 tháng tới
Kêu gọi phản hồi từ người dùng
- Vì hiện tại đang ở giai đoạn thiết kế API, đây là thời điểm mà ý kiến và phản hồi từ người dùng thực tế đặc biệt quan trọng
- Ngoài Ghostty, nhiều thành viên cộng đồng khác cũng đang phát triển các dự án dựa trên libghostty, và dự án mong muốn có thêm nhiều người tham gia
- Nếu có ý tưởng ứng dụng hay nhu cầu nào với dự án, người dùng có thể trao đổi trực tiếp với nhà phát triển qua Discord của Ghostty hoặc email
- libghostty hiện là phiên bản alpha nên API vẫn chưa ổn định, nhưng logic lõi đã được kiểm chứng thực tế và có độ ổn định cao
Triển vọng và tác động trong tương lai
- Dựa trên việc ứng dụng Ghostty đã đạt được độ ổn định, giờ đây dự án có thể tiến tới mục tiêu lớn hơn là libghostty
- Nếu libghostty được sử dụng rộng rãi trong nhiều ứng dụng khác nhau, nó có thể tạo ra tác động và sức lan tỏa hệ sinh thái lớn hơn nhiều so với chỉ một ứng dụng Ghostty đơn lẻ
- Khi việc sử dụng libghostty tăng lên, bản thân Ghostty cũng sẽ có thêm nhiều tính năng phong phú hơn và độ ổn định cao hơn
- Ghostty và libghostty sẽ phát triển theo hướng bổ trợ lẫn nhau, mang lại lợi ích cho cả nhà phát triển lẫn người dùng
3 bình luận
Tôi đã dùng từ 1.0, và ngoài việc không có cuộn và tìm kiếm thì nhìn chung tôi khá hài lòng haha. Trước đây tôi dùng iTerm, nhưng giờ đã ổn định với nó rồi.
libghostty sắp ra mắt
Ghostty 1.0 phát hành - Trình giả lập terminal tốc độ cao, đa nền tảng
Ý kiến trên Hacker News
Thật huyền thoại khi thấy người này sau khi đã khởi nghiệp, đưa công ty lên sàn, rồi bán với giá hàng tỷ đô vẫn quay lại thế giới lập trình
Theo tôi, Hashimoto không chỉ là thiên tài mà còn có năng lực trừu tượng hóa phi thường: mô-đun hóa hệ thống và giao diện đến mức tối đa, giảm thiểu sự ràng buộc lẫn nhau đến cực điểm. Cảm giác như anh ấy là người thực hành đúng tinh thần Simple Made Easy mà Rich Hickey từng nói tới. Phần mềm của anh ấy cho cảm giác được thiết kế theo cách gần như buộc phải hoạt động đúng. Và tôi vừa thử Ghostty lần đầu, trước đây với iTerm2 và theme Zsh/Powerlevel10k tôi luôn thấy hơi trễ khi render, còn trên ghostty thì phản hồi gần như tức thì
Vừa thật sự ngưỡng mộ, vừa thấy như một cuộc đời trong mơ. Có được của cải rồi tiếp tục sáng tạo chỉ vì bản thân dự án, ở trong hoàn cảnh không phải thỏa hiệp về chất lượng vì tiền. Điều đó làm tôi nhớ tới một câu nói cũ của Knuth
Rõ ràng những dự án được làm bằng tình yêu đang ngày càng đạt thành công lớn hơn. Điều đó cho thấy nếu không bị ám ảnh bởi tiền bạc thì có thể tạo ra kết quả tốt hơn. Mặt khác, điều này cũng khiến ta phải nhìn lại cấu trúc xã hội và toàn bộ nền kinh tế, vì để tận hưởng kiểu cuộc sống này thì trước hết vẫn cần có một mức vốn nào đó. Như Knuth nói, nếu chỉ có thêm chút thời gian thôi, có lẽ ai cũng có thể tạo ra kết quả tốt hơn, nhưng vì lúc nào cũng gấp gáp nên ta phải hy sinh quá nhiều. Và giống như một câu nói khác của ông
Đến đây tôi bắt đầu tự hỏi: liệu chúng ta có thực sự đang trả công xứng đáng cho những người giải quyết vấn đề tốt và làm cho cuộc sống dễ dàng hơn không, hay chỉ đang tăng điểm số trong một trò chơi vô nghĩa? Làm thế nào để tạo ra nhiều huyền thoại hơn? Làm sao để xây dựng một xã hội nơi người ta có thể sống theo đam mê như Mitchell mà không phải mang gánh nặng đi giải thích giá trị của chất lượng với hội đồng quản trị?
Tôi đã từng gặp anh ấy ngoài đời, đúng là một người rất ấm áp và tử tế. Tôi đã ăn trưa cùng anh ấy ở một hội nghị khi còn ở Kiip trước thời Hashicorp. Mitchell đúng là một hacker thực thụ. Có thể cảm nhận được anh ấy thật lòng yêu mọi thứ liên quan đến máy tính. Đặc biệt ở các hội nghị về hệ thống phân tán, anh ấy cực kỳ tập trung. Tôi có cảm giác anh ấy làm gì rồi cũng sẽ thành công. Từ khi biết đến và dùng Ghostty, tôi vẫn đang rất hài lòng và tiếp tục sử dụng
Và giờ người này còn đang đắm mình vào cả việc phát triển phần mềm tty, một mảng thực sự rất “fan cuồng” trong cả stack công nghệ Unix
Tôi dùng ghostty mỗi ngày mà đến giờ mới biết người tạo ra nó là Mitchell Hashimoto, đúng là một trải nghiệm rất tuyệt
Ghostty thật sự rất tuyệt, tôi rất mong chờ một terminal emulator omni-platform thực thụ có thể mở rộng sang cả di động. Việc Ghostty được viết bằng Zig cũng rất thú vị. Đây là chương trình viết bằng Zig đầu tiên mà tôi dùng thường xuyên, và cấu trúc repository của nó làm tôi thấy vui vì giống hệt phong cách Golang https://github.com/ghostty-org/ghostty
Tôi rất muốn thật sự thích Ghostty nhưng vẫn có vài điểm đáng tiếc
font-thicken-strengthnhưng vẫn chưa thể giống 100%. Có vẻ do đặc tính render của Metal nên hoặc là không thể, hoặc là rất khó. Với người nhìn văn bản cả ngày thì đây là điểm cực kỳ quan trọngSự nhiệt huyết và mức độ chú ý đến chi tiết mà Mitchell dành cho trải nghiệm lập trình viên thật sự đáng kinh ngạc. Tôi vẫn còn nhớ rõ cảm giác ấn tượng khi lần đầu dùng Vagrant ở Santa Monica năm 2011. Tôi chưa từng nghĩ mình sẽ thay iTerm2, nhưng gặp Ghostty là mê ngay
Dạo này tôi dùng ghostty hằng ngày. Mới chuyển sang gần đây. Trên macOS, tôi map caps lock thành cmd nên cmd+c cũng hoạt động tốt. Mặc định của nó được thiết lập rất thông minh, và ngoài việc tùy biến không quá dễ thì tôi đều hài lòng. Theme Gruvbox light cũng rất đẹp. Bản thân việc nó được viết bằng Zig đã quá ngầu rồi, nên nếu ai thắc mắc Zig đã đủ sẵn sàng cho sử dụng thực tế chưa thì ghostty chính là câu trả lời. Có vẻ tôi sẽ không quay lại terminal khác nữa, trải nghiệm thật sự rất hài lòng. Tham khảo thêm: kết hợp ghostty với aerospace thì trên Mac gần như có thể tạo ra một môi trường hoàn hảo chỉ với bàn phím
Tôi đang dùng ghostty trên chiếc AirMac, là máy Mac anh trai để lại khi trước còn lập trình. Tôi thật sự biết ơn vì ghostty quá tốt. Có thể chỉ là chuyện nhỏ, nhưng việc không phụ thuộc vào libc bằng cách nào đó lại khiến tôi thấy khá đáng quý
Biểu đồ histogram phân tích tần suất của visidata không render đúng, một số ô hiện ra thành hình vuông, còn phần còn lại hiện thành dấu hỏi trong hình thoi, nên vì vấn đề này mà tôi vẫn chưa thể rời iTerm. Tôi cũng không biết nên tìm bằng từ khóa nào để giải quyết nên càng khó xử
Tôi vẫn đang theo dõi Ghostty với hy vọng text reflow của nó (đặc biệt là cả phần scrollback) có thể được giải quyết cả trong terminal dựa trên Neovim. Tôi rất mừng khi Ghostty mang thêm đổi mới vào môi trường terminal https://github.com/neovim/neovim/issues/33155
Tôi thật sự muốn dùng ghostty nhưng vì chưa có hỗ trợ cmd+f nên vẫn chưa thử, tuy vậy tôi rất mong chờ dự án này tiếp tục phát triển
https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
https://github.com/ghostty-org/ghostty/issues/189