OmniDiff: công cụ so sánh Git mã nguồn mở viết bằng Rust, hiểu nội dung và cực nhanh
OmniDiff là công cụ diff (so sánh thay đổi) mã nguồn mở viết bằng Rust, có khả năng hiểu nội dung nên xử lý được cả mã nguồn 25 ngôn ngữ, tệp cấu hình, hình ảnh, PDF, kho nén và phông chữ. Công cụ đạt tốc độ trung vị khoảng 4,2ms mỗi lần so sánh và hoàn thành 99,95% thay đổi mã nguồn trong bộ thử nghiệm gồm khoảng 7.500 kho mã nguồn mở.

OmniDiff là một công cụ so sánh thay đổi (diff tool) mã nguồn mở, được viết bằng Rust và phát hành theo giấy phép AGPLv3. Tác giả Marko Ivankovic xây dựng công cụ này dựa trên nghiên cứu thực tế từ hàng nghìn kho mã nguồn mở, hướng tới mục tiêu trở thành "công cụ diff lý tưởng" cho lập trình viên.
Điểm khác biệt cốt lõi của OmniDiff là khả năng hiểu nội dung: thay vì chỉ so sánh từng dòng như diff truyền thống, công cụ phân tích cấu trúc mã nguồn, nhận diện hình ảnh theo điểm ảnh, đọc nội dung bên trong kho nén và thậm chí vẽ lại từng glyph của phông chữ để so sánh.
Hiệu năng ấn tượng trên phần cứng phổ thông
Theo tác giả, OmniDiff có thể so sánh các tệp C++ hàng chục nghìn dòng trong dưới 100ms trên một chiếc ThinkPad T14s (Intel Core i7-1370P, 32 GB RAM) ra mắt năm 2023.
Trên bộ 2.302 mẫu thử nghiệm, thời gian xử lý trung vị (p50) chỉ 4,2ms, p90 là 35,1ms và p99 là 177ms — tức 97,6% số mẫu hoàn thành dưới 100ms. Mẫu chậm nhất mất 482ms.
Huy hiệu phiên bản OmniDiff
Một số nội dung đặc biệt có thời gian xử lý riêng:
- Hình ảnh: 96,1% dưới 100ms (trung vị 1,8ms)
- Phông chữ: 95% dưới 100ms (trung vị 6,4ms)
- Kho nén: 88% dưới 100ms, nhưng p99 lên tới gần 2 giây với các kho chứa hàng nghìn thành phần thay đổi
- PDF: chỉ 57% dưới 100ms, do phải vẽ lại từng trang thay đổi
Hỗ trợ 25 ngôn ngữ lập trình và nhiều định dạng phi văn bản
OmniDiff sử dụng tree-sitter grammar để phân tích cú pháp và so sánh theo cấu trúc với 25 ngôn ngữ, bao gồm C, C++, C#, Go, Java, JavaScript, TypeScript, Python, Rust, PHP, Ruby, Swift, Kotlin, Lua, Shell, CSS, HTML, JSON, XML, YAML và nhiều ngôn ngữ khác.
Với tệp không phải văn bản, công cụ nhận diện dựa trên byte nội dung chứ không dựa vào tên tệp, rồi so sánh theo bản chất dữ liệu:
- Hình ảnh (PNG, JPEG, GIF, WebP, BMP, ICO, TIFF): so sánh từng điểm ảnh, hiển thị mức độ và vị trí thay đổi; ảnh động được so sánh theo từng khung hình
- Kho nén (zip, tar, gzip, xz, bzip2): so sánh từng tệp bên trong, kể cả kho lồng kho
- Phông chữ (TrueType, OpenType, WOFF, WOFF2, EOT): so sánh từng glyph và các thông số metric
- Con trỏ chuột (.cur, .ani và định dạng X cursor)
- Tệp danh mục thông điệp (gettext .mo, Qt .qm)
- Tài liệu PDF: so sánh từng trang
Huy hiệu tài liệu OmniDiff
Đáng chú ý, công cụ chỉ mở những thành phần thực sự thay đổi — ví dụ một phông chữ có hai glyph bị sửa sẽ chỉ hiển thị đúng hai glyph đó. Mỗi thay đổi còn được gắn nhãn theo mức độ mà người đọc có thể nhận ra: vô hình, không cảm nhận được, dấu vết nén, đã sửa, vẽ lại hoặc thay thế.
Độ tin cậy dựa trên dữ liệu thực tế
Trước khi xây dựng các pipeline so sánh, tác giả đã khảo sát 7.400 kho mã nguồn trong danh sách gói của Gentoo, lấy mẫu 2.000 thay đổi và tự giải quyết thủ công để hiểu rõ nhu cầu thực tế. Chính bộ dữ liệu này sau đó trở thành nền tảng cho pipeline CI.
Kết quả đo trên 442.530 cặp tệp mã nguồn có thể đọc được (50 commit gần nhất của mỗi kho): 99,95% hoàn thành thành công trong giới hạn 120 giây và 6 GB bộ nhớ mỗi tiến trình. Chỉ 96 cặp vượt thời gian và 112 cặp vượt giới hạn bộ nhớ — phần lớn là tệp sinh tự động, bảng phân tích cú pháp tree-sitter hay bundle đã minify.
Xét toàn bộ 2.018.010 thay đổi tệp trong 7.352 kho, 98,8% được so sánh dưới dạng văn bản hoặc theo nội dung đặc thù.
Về độ chính xác, tác giả thừa nhận mục tiêu 90% trường hợp không lệch byte nào vẫn chưa đạt: hiện ở mức 60% với chế độ --full và 69,6% với --minimal. Tuy nhiên, tỷ lệ byte lệch trên toàn bộ kho dữ liệu chỉ là 0,14% và 0,07%.
Huy hiệu độ phủ kiểm thử
Cài đặt và tích hợp
Người dùng có thể cài OmniDiff từ mã nguồn bằng cargo install --locked omnidiff, hoặc qua các kênh tiện lợi hơn:
- Homebrew trên macOS và Linux:
brew install ivankovic/omnidiff/omnidiff - Debian/Ubuntu: kho apt có ký số, hỗ trợ cả amd64 và arm64
- Nix/NixOS: chạy trực tiếp qua
nix run github:ivankovic/omnidiff - Arch và Gentoo: có recipe trong thư mục
packaging/ - Binary dựng sẵn cho Linux, macOS (Intel và Apple Silicon) và Windows trong mỗi bản phát hành GitHub
Công cụ tích hợp với Git qua lệnh omnidiff git configure (trình hướng dẫn tương tác) hoặc cấu hình thủ công difftool.omnidiff.cmd. Ngoài ra còn có hỗ trợ Jujutsu (jj), chế độ headless/batch cho script và CI, cùng đầu ra JSON có schema rõ ràng.
Về giao diện, OmniDiff cung cấp TUI tương tác hỗ trợ màu 24-bit, hiển thị hình ảnh bằng giao thức kitty, sixel hoặc iTerm2 (hoặc dùng ký tự Unicode nửa khối ở nơi khác). Tiện ích mở rộng có sẵn cho VS Code, VSCodium, Cursor, Windsurf và Neovim.
Về giấy phép và việc sử dụng AI
OmniDiff phát hành theo AGPLv3. Với tổ chức không thể dùng phần mềm AGPL, tác giả cung cấp giấy phép thương mại qua gói đăng ký hàng tháng trên GitHub Sponsors, loại bỏ nghĩa vụ công bố mã nguồn nhưng vẫn cho phép sử dụng nội bộ.
Tác giả công khai minh bạch rằng dự án có sử dụng AI hỗ trợ đáng kể, hiện là Claude Code, và phần lớn commit đều ghi rõ điều này kèm liên kết tới phiên làm việc. Ông nhấn mạnh: "Dự án này không coi việc AI hỗ trợ là cách viết phần mềm kém cỏi hơn."
Hiện tại dự án chưa nhận đóng góp từ bên ngoài để duy trì tốc độ phát triển. OmniDiff đang ở phiên bản v0.3.0, và tác giả cho biết đã dùng nó làm công cụ diff Git hàng ngày trong nhiều tháng qua.
Với các lập trình viên Việt Nam thường xuyên làm việc với kho mã nguồn lớn hoặc cần so sánh tài liệu thiết kế, hình ảnh và tài liệu PDF trong quy trình review, OmniDiff là một lựa chọn đáng thử — đặc biệt khi tốc độ xử lý dưới 100ms giúp giảm đáng kể thời gian chờ đợi so với các công cụ diff truyền thống.

