تلگرام یک ریپازیتوری عمومی جدید برای کلاینت macOS خود منتشر کرده است: TelegramMessenger/telegram-macos تحت لایسنس GPL-2.0. ریپازیتوری قبلی، overtake/TelegramSwift، از ۲۹ ژوئیه ۲۰۲۵ هیچ کامیت جدیدی دریافت نکرده بود و ساخت یک کلاینت به‌روز از آن امکان‌پذیر نبود. همراه با این ریپازیتوری، موتور شبکه MTProto که با Rust نوشته شده نیز منتشر شده است. کد این موتور در یک ریپازیتوری جداگانه قرار دارد و مقایسه آن با موتور قدیمی و همچنین گزارش ممیزی (audit) آن در مستندات کلاینت موجود است. تلگرام این موتور را برای جایگزینی کتابخانه قبلی هم برای iOS و هم برای macOS آماده می‌کند. این موضوع عمدتاً توسعه‌دهندگان کلاینت‌های شخص ثالث و کاربرانی را که در کانال بتا macOS هستند، در بر می‌گیرد: در نسخه بتا، این موتور را می‌توان به صورت دستی فعال کرد.

محتویات ریپازیتوری

لینک این ریپازیتوری در تاریخ ۲۳ اکتبر ساعت ۰۷:۱۸ UTC در چت بتا-تسترهای کلاینت منتشر شد. خود ریپازیتوری در ۹ اکتبر تحت آدرس دیگری به نام macosswift/telegram ایجاد شده بود؛ از آن زمان، GitHub اکنون به آدرس جدید هدایت می‌کند، اما README همچنان به آدرس قدیمی ارجاع می‌دهد. کامیت «Initial commit» مربوط به ۲۰ اکتبر است و آخرین ویرایش README در ۲۲ اکتبر انجام شده است. در مجموع، این ریپازیتوری شامل ۸۶۰۵ فایل است و تقریباً تمام رابط کاربری در ۱۵۶ پکیج Swift در پوشه packages/ سازماندهی شده است.

شماره بیلد در Telegram-Mac/Info.plist برابر با 283305 است. این نسخه بتا 13.0.283305 از ۹ اکتبر است، به این معنی که کد منتشر شده دو هفته از نسخه بتا عقب‌تر است؛ نسخه بتا تا عصر ۲۳ اکتبر به 13.1.0.283366 رسیده بود. ماژول HTMLBubbles، که از ۸ اکتبر پیام‌های HTML و JavaScript را در نسخه بتا نمایش می‌دهد، در کد منتشر شده موجود نیست.

دستورالعمل‌های بیلد به Xcode 16 یا جدیدتر و Rust toolchain نیاز دارند. کد مشترک با iOS (TelegramCore, Postbox) به عنوان یک ساب‌ماژول submodules/telegram-ios متصل می‌شود. در .gitmodules آدرس GitLab برای آن مشخص شده است، اما کامیت مورد نیاز 5bb60920e2 از ۹ اکتبر در Telegram-iOS عمومی نیز موجود است. قوانین مربوط به فورک‌ها همانند گذشته است: دریافت API ID خود، عدم نام‌گذاری فورک به Telegram، عدم استفاده از لوگوی تجاری و انتشار کد طبق الزامات GPL.

ریپازیتوری برای عامل‌های هوش مصنوعی (AI Agents) طراحی شده است

در ریشه ریپازیتوری، فایل AGENTS.md قرار دارد که راهنمایی «برای عامل‌هایی که در این ریپازیتوری کد می‌نویسند» است. این فایل شامل قوانین کدنویسی، نقشه ماژول‌ها و ترتیب انتشار نسخه‌های بتا است: بیلد زمانی آغاز می‌شود که تغییرات به شاخه beta ارسال شده و شماره CFBundleVersion افزایش یابد. کامنت‌ها در کد ممنوع هستند، به جز برچسب‌های خدماتی مانند //TODOLANG. فایل CLAUDE.md شامل یک خط با لینک به AGENTS.md است و در پوشه .claude/commands دو دستور آماده برای Claude Code وجود دارد: ایجاد یک صفحه و کار با رشته‌های محلی‌سازی.

موتور MTProto مبتنی بر Rust

MTProto پروتکلی است که کلاینت‌های تلگرام از طریق آن با سرورها ارتباط برقرار می‌کنند: رمزنگاری، سشن‌ها، و اتصالات به دیتاسنترها. در iOS و macOS، این پروتکل تا کنون توسط MtProtoKit، یک کتابخانه Objective-C، مدیریت می‌شد. برای جایگزینی آن، mtproto-engine نوشته شده است. اولین کامیت در آن در ۲ اکتبر و آخرین آن در ۱۳ اکتبر انجام شده است که در مجموع ۱۶ کامیت دارد. کد تقریباً به طور کامل با Rust نوشته شده و تحت لایسنس GPL-2.0 است.

طبق README، این موتور از طریق یک لایه واسط NetworkEngine به TelegramCore متصل می‌شود و هم در iOS و هم در macOS کار می‌کند. MtProtoKit به عنوان موتور پیش‌فرض باقی می‌ماند. موتور جدید را می‌توان در تنظیمات توسعه‌دهندگان، در بخش «Network Engine»، انتخاب کرد و پس از راه‌اندازی مجدد فعال می‌شود. هر دو موتور وضعیت ذخیره‌شده یکسانی را می‌نویسند، بنابراین تغییر موتور باعث خروج از حساب کاربری نمی‌شود. در Telegram-iOS عمومی، این موتور به عنوان یک ساب‌ماژول third-party/mtproto-engine به آخرین کامیت ریپازیتوری da4b217021 متصل شده است.

تفاوت اصلی در تردها (threads) است. MtProtoKit تمام سشن‌های همه حساب‌ها، تمام تجزیه و تمام رمزنگاری را در یک صف مشترک انجام می‌دهد. بنابراین، آپلود یک فایل بزرگ، تحویل به‌روزرسانی‌ها را در سشن اصلی به تأخیر می‌اندازد. موتور جدید دو تا چهار ترد کاری را حفظ می‌کند: سشن‌های اصلی به ترد اول اختصاص داده شده‌اند، آپلودها و CDN بین بقیه توزیع می‌شوند، و رمزگشایی بخش‌های ۵۱۲ کیلوبایتی فایل، سشن اصلی را کند نمی‌کند.

در نسخه بتا macOS، این موتور زودتر از انتشار کد عمومی ظاهر شد. رشته «Rust (restart required)» در بیلد 12.10.283246 از ۲ اکتبر موجود است. در بیلد بعدی، رشته «Engine switch to rust refused, the server disabled it» ظاهر شد، به این معنی که سرور تلگرام می‌تواند تغییر موتور را ممنوع کند. مستندات ریپازیتوری این مکانیسم را «live kill switch» می‌نامد و اولین نسخه آن را به بیلدهای بتا 283247 و 283248 نسبت می‌دهد.

نتایج اندازه‌گیری‌ها

مقایسه موتورها در ریپازیتوری macOS، در فایل mtproto-rust-vs-mtprotokit.md قرار دارد. نسخه نهایی آن مربوط به ۲ اکتبر است. اندازه‌گیری‌ها از طریق پشته واقعی TelegramCore در برابر یک کلاستر جعلی تلگرام پشت یک شبیه‌ساز شبکه انجام شده‌اند، و بخشی از داده‌ها بر روی سرورهای واقعی جمع‌آوری شده‌اند. این‌ها ارقام داخلی تیم هستند و به طور مستقل توسط هیچ کس تأیید نشده‌اند.

تستRustMtProtoKit
فایل بزرگ، تأخیر ۱۰۰ میلی‌ثانیه، ۲۰۰ مگابیت بر ثانیه۲۲.۳ مگابایت بر ثانیه۶.۷ مگابایت بر ثانیه
فایل بزرگ از طریق CDN، همان شبکه۱۳.۷ مگابایت بر ثانیه۶.۸ مگابایت بر ثانیه
انتظار پاسخ عادی در صورت قطع شبکه به مدت ۶ ثانیه۷۲ میلی‌ثانیه۴.۳ ثانیه
اولین پاسخ پس از پایان قطعی۰.۰۷ ثانیه۱.۱۱ ثانیه
۱۰,۰۰۰ درخواست کوچک، زمان پردازنده۰.۲۰ ثانیه۱.۰۵ ثانیه

مجموعه‌ای جداگانه از ۴۷ سناریو، موتورها را در برابر یک سرور خصمانه که داده‌های بی‌معنی ارسال می‌کند، پاسخ‌ها را تکرار می‌کند و اتصالات را قطع می‌کند، آزمایش می‌کند. Rust هر ۴۷ سناریو را با موفقیت پشت سر گذاشت و هرگز درخواستی را دو بار اجرا نکرد. MtProtoKit ۱۸ سناریو را به طور کامل به پایان رساند. در ۱۱ سناریو، متوقف شد، در دو سناریو وارد یک حلقه بی‌نهایت با بار پردازشی بالا شد، و در ۲۴ سناریو درخواست‌ها را تکرار کرد که در مجموع ۴۹۳۹۵ بار بود.

ممیزی و کیف پول

در پوشه docs/security-audit گزارش ممیزی پشته شبکه macOS از ۲ اکتبر قرار دارد. طبق این گزارش، در برنامه، MtProtoKit همچنان هر تبادل کلید احراز هویت را انجام می‌دهد، در حالی که موتور جدید با پارامتر generate_key = 0 کار می‌کند، به این معنی که خودش کلید تولید نمی‌کند. این گزارش دو آسیب‌پذیری با اهمیت بالا در MtProtoKit را توصیف می‌کند که با تلگرام برای iOS مشترک هستند: کرش و فریز شدن کلاینت قبل از تأیید اعتبار سرور. در همان روز، کامیت c371b688c7 با اصلاح تبادل کلید MtProtoKit وارد Telegram-iOS عمومی شد.

کیف پول TON در Mac نیز بر پایه Rust است. پورت دستی کیف پول از packages/Wallet حذف شده است، و macOS از telegram-ios کد مشترک کیف پول و کتابخانه wallet-engine مبتنی بر Rust تحت لایسنس Apache-2.0 را استفاده می‌کند. این کتابخانه از طریق UniFFI generator متصل می‌شود، و رشته‌های خدماتی آن در بیلد 12.10.283234 از ۲۵ سپتامبر در نسخه بتا macOS موجود است.

در همان سازمان TelegramMessenger، در ۱۱ اکتبر، یک فورک از موتور JavaScript QuickJS-ng ظاهر شد. کامیت‌های آن با نام همان حساب کاربری macosswift که در mtproto-engine نیز استفاده شده، انجام شده‌اند. این کامیت‌ها سرعت مفسر و تخصیص حافظه را افزایش می‌دهند. کد منتشر شده هنوز نشان نمی‌دهد که این فورک در کجا استفاده می‌شود.