Client Telegram dành cho macOS đã có một repository mã nguồn mở mới: TelegramMessenger/telegram-macos theo giấy phép GPL-2.0. Repository cũ overtake/TelegramSwift đã không nhận được commit nào kể từ ngày 29 tháng 7 năm 2025, và không thể biên dịch một client cập nhật từ đó. Cùng với đó, engine mạng MTProto được viết bằng Rust cũng đã được mở mã nguồn: mã của nó nằm trong một repository riêng biệt, và phần so sánh với engine cũ cùng với báo cáo kiểm toán (audit) có trong tài liệu của client. Telegram đang chuẩn bị engine này để thay thế thư viện cũ cho cả iOS và macOS. Điều này chủ yếu ảnh hưởng đến các nhà phát triển client bên thứ ba và những người đang sử dụng kênh beta của macOS: trên bản beta, engine này đã có thể được bật thủ công.

Những gì có trong Repository

Liên kết đến repository đã được đăng tải vào lúc 07:18 UTC ngày 23 tháng 10 trong nhóm chat của những người thử nghiệm beta client. Bản thân repository được tạo vào ngày 9 tháng 10 dưới một địa chỉ khác, macosswift/telegram: từ đó GitHub hiện đang chuyển hướng đến địa chỉ mới, và README vẫn tham chiếu đến địa chỉ cũ. Commit «Initial commit» có ngày 20 tháng 10, chỉnh sửa README cuối cùng được thực hiện vào ngày 22 tháng 10. Tổng cộng có 8.605 tệp trong repository, gần như toàn bộ giao diện được sắp xếp thành 156 gói Swift trong thư mục packages/.

Số bản dựng trong Telegram-Mac/Info.plist là 283305. Đây là bản beta 13.0.283305 từ ngày 9 tháng 10, nghĩa là mã nguồn mở chậm hơn hai tuần so với bản beta đã đạt đến 13.1.0.283366 vào tối ngày 23 tháng 10. Module HTMLBubbles, vốn từ ngày 8 tháng 10 đã hiển thị các tin nhắn HTML và JavaScript trong bản beta, không có trong mã nguồn mở.

Hướng dẫn biên dịch yêu cầu Xcode 16 hoặc mới hơn và bộ công cụ Rust. Mã nguồn chung với iOS (TelegramCore, Postbox) được kết nối dưới dạng submodule submodules/telegram-ios. Trong .gitmodules, địa chỉ trên GitLab được chỉ định cho nó, nhưng commit cần thiết 5bb60920e2 từ ngày 9 tháng 10 cũng có trong Telegram-iOS công khai. Các quy tắc cho các bản fork vẫn như cũ: lấy API ID của riêng bạn, không đặt tên bản fork là Telegram, không sử dụng logo thương hiệu và công bố mã nguồn theo yêu cầu của GPL.

Repository được thiết kế cho các AI Agent

Trong thư mục gốc có tệp AGENTS.md, một hướng dẫn "dành cho các agent viết mã trong repository này". Nó mô tả các quy tắc mã, bản đồ module và quy trình phát hành beta: bản dựng bắt đầu khi các thay đổi được gửi đến nhánh beta và số CFBundleVersion được tăng lên. Các bình luận trong mã bị cấm, ngoại trừ các nhãn dịch vụ như //TODOLANG. CLAUDE.md chỉ gồm một dòng với liên kết đến AGENTS.md, và trong thư mục .claude/commands có hai lệnh sẵn sàng cho Claude Code: tạo màn hình và làm việc với các chuỗi bản địa hóa.

Engine MTProto bằng Rust

MTProto là giao thức mà các client Telegram sử dụng để kết nối với máy chủ: mã hóa, phiên, kết nối đến các trung tâm dữ liệu. Trên iOS và macOS, nó vẫn được phục vụ bởi MtProtoKit, một thư viện bằng Objective-C. Để thay thế nó, mtproto-engine đã được viết. Commit đầu tiên trong đó được thực hiện vào ngày 2 tháng 10, commit cuối cùng vào ngày 13 tháng 10, tổng cộng có 16 commit. Mã nguồn gần như hoàn toàn bằng Rust, giấy phép GPL-2.0.

Theo README, engine này kết nối với TelegramCore thông qua một lớp trung gian NetworkEngine và hoạt động trên cả iOS và macOS. MtProtoKit vẫn là engine mặc định. Engine mới được chọn trong cài đặt dành cho nhà phát triển, trong mục «Network Engine», và bắt đầu hoạt động sau khi khởi động lại. Cả hai engine đều ghi cùng một trạng thái đã lưu, vì vậy việc chuyển đổi không đăng xuất tài khoản. Trong Telegram-iOS công khai, engine được kết nối dưới dạng submodule third-party/mtproto-engine đến commit cuối cùng của repository da4b217021.

Điểm khác biệt chính nằm ở các luồng (thread). MtProtoKit thực hiện tất cả các phiên của tất cả các tài khoản, tất cả việc phân tích và tất cả việc mã hóa trong một hàng đợi chung duy nhất. Do đó, việc tải xuống một tệp lớn sẽ làm chậm việc phân phối các bản cập nhật trong phiên chính. Engine mới duy trì từ hai đến bốn luồng làm việc: các phiên chính được gán cho luồng đầu tiên, các tác vụ tải xuống và CDN được phân bổ cho các luồng còn lại, và việc giải mã một phần tệp 512 KB không làm chậm phiên chính.

Trong bản beta macOS, engine này xuất hiện sớm hơn so với việc mã nguồn được mở. Chuỗi «Rust (restart required)» có trong bản dựng 12.10.283246 từ ngày 2 tháng 10. Trong bản dựng tiếp theo, chuỗi «Engine switch to rust refused, the server disabled it» đã xuất hiện, nghĩa là máy chủ Telegram có thể cấm chuyển đổi. Tài liệu của repository gọi cơ chế này là «live kill switch» và gán phiên bản đầu tiên của nó cho các bản beta 283247 và 283248.

Kết quả đo lường

So sánh các engine nằm trong repository macOS, trong tệp mtproto-rust-vs-mtprotokit.md. Phiên bản cuối cùng của nó có ngày 2 tháng 10. Các phép đo được chạy thông qua stack TelegramCore thực tế chống lại một cụm Telegram giả lập phía sau trình giả lập mạng, và một số dòng được lấy trên các máy chủ thực. Đây là những con số nội bộ của nhóm, chưa được ai kiểm tra độc lập.

Thử nghiệmRustMtProtoKit
Tệp lớn, độ trễ 100 ms, 200 Mbit/s22,3 MB/s6,7 MB/s
Tệp lớn qua CDN, cùng mạng13,7 MB/s6,8 MB/s
Thời gian chờ phản hồi thông thường khi mất mạng 6 giây72 ms4,3 s
Phản hồi đầu tiên sau khi kết thúc mất mạng0,07 s1,11 s
10.000 yêu cầu nhỏ, thời gian CPU0,20 s1,05 s

Một bộ gồm 47 kịch bản riêng biệt kiểm tra các engine chống lại một máy chủ thù địch gửi dữ liệu rác, lặp lại phản hồi và ngắt kết nối. Rust đã vượt qua tất cả 47 kịch bản và không bao giờ thực hiện yêu cầu hai lần. MtProtoKit hoàn thành sạch 18 kịch bản. Trong 11 kịch bản, nó bị treo, trong hai kịch bản nó đi vào vòng lặp vô hạn với tải CPU cao, và trong 24 kịch bản nó thực hiện lại các yêu cầu, tổng cộng 49.395 lần.

Kiểm toán và Ví tiền

Trong thư mục docs/security-audit có báo cáo kiểm toán stack mạng macOS từ ngày 2 tháng 10. Theo đó, trong ứng dụng MtProtoKit vẫn thực hiện mọi trao đổi khóa ủy quyền, còn engine mới hoạt động với tham số generate_key = 0, nghĩa là nó không tự tạo khóa. Báo cáo mô tả hai lỗ hổng nghiêm trọng trong MtProtoKit, chung với Telegram cho iOS: client bị treo và đóng băng trước khi tính xác thực của máy chủ được kiểm tra. Cùng ngày, commit c371b688c7 với bản sửa lỗi trao đổi khóa MtProtoKit đã được đưa vào Telegram-iOS công khai.

Ví TON trên Mac cũng dựa trên Rust. Bản port ví thủ công từ packages/Wallet đã bị xóa, và macOS lấy mã ví chung cùng thư viện wallet-engine bằng Rust theo giấy phép Apache-2.0 từ telegram-ios. Nó được kết nối thông qua trình tạo ràng buộc UniFFI, và các chuỗi dịch vụ của nó đã có trong bản beta macOS từ bản dựng 12.10.283234 vào ngày 25 tháng 9.

Trong cùng tổ chức TelegramMessenger, vào ngày 11 tháng 10, một bản fork của engine JavaScript QuickJS-ng đã xuất hiện. Các commit trong đó được thực hiện dưới tên tài khoản macosswift tương tự như trong mtproto-engine. Chúng tăng tốc trình thông dịch và phân bổ bộ nhớ. Mã nguồn mở hiện chưa cho thấy bản fork này được sử dụng ở đâu.