أصبح لعميل Telegram على macOS مستودع مفتوح جديد: TelegramMessenger/telegram-macos تحت ترخيص GPL-2.0. المستودع السابق overtake/TelegramSwift لم يتلق أي تحديثات (commits) منذ 29 يوليو 2025، ولم يكن بالإمكان بناء عميل محدّث منه. بالتزامن مع ذلك، تم الكشف عن محرك شبكة MTProto المكتوب بلغة Rust؛ يوجد رمزه البرمجي في مستودع منفصل، بينما يمكن العثور على مقارنة بالمحرك القديم ومراجعة أمنية في وثائق العميل. يُعد Telegram هذا المحرك ليحل محل المكتبة السابقة لكل من iOS و macOS. وهذا يهم بشكل خاص مطوري العملاء الخارجيين ومن يستخدمون قناة بيتا (beta channel) لنظام macOS: ففي إصدار البيتا، يمكن تفعيل المحرك يدويًا بالفعل.
ماذا يوجد في المستودع
تم نشر رابط المستودع في دردشة مختبري إصدار البيتا للعميل في 23 أكتوبر الساعة 07:18 بالتوقيت العالمي المنسق (UTC). تم إنشاء المستودع نفسه في 9 أكتوبر تحت عنوان آخر، macosswift/telegram؛ ومنذ ذلك الحين، يقوم GitHub بإعادة التوجيه إلى العنوان الجديد، ولا يزال ملف README يشير إلى العنوان القديم. يعود تاريخ التحديث (commit) الأول "Initial commit" إلى 20 أكتوبر، وتم إجراء آخر تعديل على README في 22 أكتوبر. يحتوي المستودع على 8605 ملفًا إجمالاً، ومعظم الواجهة مقسمة إلى 156 حزمة Swift في مجلد packages/.
رقم البناء في Telegram-Mac/Info.plist هو 283305. هذا هو إصدار بيتا 13.0.283305 بتاريخ 9 أكتوبر، مما يعني أن الكود المفتوح متأخر بأسبوعين عن إصدار البيتا الذي وصل إلى 13.1.0.283366 بحلول مساء 23 أكتوبر. لا يتوفر في الكود المفتوح وحدة HTMLBubbles، التي تعرض رسائل HTML و JavaScript في إصدار البيتا منذ 8 أكتوبر.
تتطلب تعليمات البناء Xcode 16 أو أحدث ومجموعة أدوات Rust. يتم ربط الكود المشترك مع iOS (TelegramCore, Postbox) كوحدة فرعية submodules/telegram-ios. في ملف .gitmodules، يتم تحديد عنوان GitLab له، ولكن التحديث (commit) المطلوب 5bb60920e2 بتاريخ 9 أكتوبر موجود أيضًا في مستودع Telegram-iOS العام. قواعد التفرعات (forks) هي نفسها: الحصول على API ID الخاص بك، عدم تسمية التفرع Telegram، عدم استخدام الشعار التجاري، ونشر الكود كما يتطلب ترخيص GPL.
المستودع مصمم لوكلاء الذكاء الاصطناعي
يوجد في الجذر ملف AGENTS.md، وهو دليل "للوكلاء الذين يكتبون الكود في هذا المستودع". يصف هذا الدليل قواعد الكود، وخريطة الوحدات، وترتيب إصدار البيتا: يبدأ البناء عندما يتم إرسال التغييرات إلى فرع beta وزيادة رقم CFBundleVersion. يُحظر التعليق في الكود، باستثناء العلامات الخدمية مثل //TODOLANG. يتكون ملف CLAUDE.md من سطر واحد يحتوي على رابط إلى AGENTS.md، وفي مجلد .claude/commands توجد أمران جاهزان لـ Claude Code: إنشاء شاشة والتعامل مع سلاسل الترجمة.
محرك MTProto المكتوب بلغة Rust
MTProto هو البروتوكول الذي تتواصل من خلاله عملاء Telegram مع الخوادم: التشفير، الجلسات، الاتصالات بمراكز البيانات. في iOS و macOS، لا يزال MtProtoKit، وهي مكتبة مكتوبة بلغة Objective-C، تخدم هذا الغرض. وقد تم كتابة mtproto-engine ليحل محلها. تم إجراء التحديث (commit) الأول فيه في 2 أكتوبر، والأخير في 13 أكتوبر، بإجمالي 16 تحديثًا. الكود مكتوب بالكامل تقريبًا بلغة Rust، ويحمل ترخيص GPL-2.0.
وفقًا لملف README، يتصل المحرك بـ TelegramCore عبر طبقة NetworkEngine ويعمل على كل من iOS و macOS. يظل MtProtoKit هو المحرك الافتراضي. يتم اختيار المحرك الجديد في إعدادات المطورين، ضمن بند "Network Engine"، ويبدأ العمل بعد إعادة التشغيل. يكتب كلا المحركين نفس الحالة المحفوظة، لذا فإن التبديل لا يؤدي إلى تسجيل الخروج من الحساب. في مستودع Telegram-iOS العام، يتم ربط المحرك كوحدة فرعية third-party/mtproto-engine بأحدث تحديث (commit) للمستودع da4b217021.
الفرق الرئيسي يكمن في الخيوط (threads). يقوم MtProtoKit بتنفيذ جميع جلسات جميع الحسابات، وجميع عمليات التحليل، وجميع عمليات التشفير في قائمة انتظار مشتركة واحدة. لذلك، يؤدي تحميل ملف كبير إلى تأخير تسليم التحديثات في الجلسة الرئيسية. يحافظ المحرك الجديد على ما بين خيطين إلى أربعة خيوط عمل: يتم تخصيص الجلسات الرئيسية للخيط الأول، ويتم توزيع التنزيلات و CDN على الخيوط الأخرى، ولا يؤدي فك تشفير جزء من الملف بحجم 512 كيلوبايت إلى إبطاء الجلسة الرئيسية.
ظهر المحرك في إصدار بيتا macOS قبل فتح الكود. توجد العبارة "Rust (restart required)" في البناء 12.10.283246 بتاريخ 2 أكتوبر. في البناء التالي، ظهرت العبارة "Engine switch to rust refused, the server disabled it"، مما يعني أن خادم Telegram يمكنه منع التبديل. تشير وثائق المستودع إلى هذه الآلية باسم "live kill switch" وتنسب نسختها الأولى إلى إصدارات بيتا 283247 و 283248.
ما تظهره القياسات
توجد مقارنة المحركات في مستودع macOS، في ملف mtproto-rust-vs-mtprotokit.md. يعود تاريخ نسخته النهائية إلى 2 أكتوبر. تم إجراء القياسات عبر مكدس TelegramCore حقيقي مقابل مجموعة Telegram وهمية خلف محاكي شبكة، وتم أخذ جزء من البيانات على خوادم حقيقية. هذه هي أرقام الفريق الخاصة، ولم يتم التحقق منها بشكل مستقل.
| الاختبار | Rust | MtProtoKit |
|---|---|---|
| ملف كبير، تأخير 100 مللي ثانية، 200 ميجابت/ثانية | 22.3 ميجابايت/ثانية | 6.7 ميجابايت/ثانية |
| ملف كبير عبر CDN، نفس الشبكة | 13.7 ميجابايت/ثانية | 6.8 ميجابايت/ثانية |
| انتظار استجابة عادي عند انقطاع الشبكة لمدة 6 ثوانٍ | 72 مللي ثانية | 4.3 ثانية |
| أول استجابة بعد نهاية الانقطاع | 0.07 ثانية | 1.11 ثانية |
| 10,000 طلب صغير، وقت المعالج | 0.20 ثانية | 1.05 ثانية |
تتحقق مجموعة منفصلة من 47 سيناريو من المحركات ضد خادم معادٍ يرسل بيانات غير مرغوب فيها، ويكرر الاستجابات، ويقطع الاتصالات. اجتاز Rust جميع السيناريوهات الـ 47 ولم ينفذ طلبًا مرتين أبدًا. أكمل MtProtoKit 18 سيناريو بنجاح. في 11 سيناريو، توقف، وفي اثنين دخل في حلقة لا نهائية مع تحميل على المعالج، وفي 24 سيناريو نفذ الطلبات بشكل متكرر، بإجمالي 49,395 مرة.
المراجعة الأمنية والمحفظة
في مجلد docs/security-audit، يوجد تقرير مراجعة أمنية لمكدس شبكة macOS بتاريخ 2 أكتوبر. وفقًا للتقرير، لا يزال MtProtoKit في التطبيق ينفذ كل تبادل لمفاتيح المصادقة، بينما يعمل المحرك الجديد بمعامل generate_key = 0، أي أنه لا ينشئ مفاتيح بنفسه. يصف التقرير نقطتي ضعف عاليتي الخطورة في MtProtoKit، مشتركتين مع Telegram لنظام iOS: تعطل العميل وتجمده قبل التحقق من صحة الخادم. في نفس اليوم، تم دمج التحديث (commit) c371b688c7 في مستودع Telegram-iOS العام مع إصلاح لتبادل مفاتيح MtProtoKit.
تعتمد محفظة TON على Mac أيضًا على Rust. تم حذف المنفذ اليدوي للمحفظة من packages/Wallet، ويستخدم macOS الكود المشترك للمحفظة من telegram-ios ومكتبة wallet-engine المكتوبة بلغة Rust تحت ترخيص Apache-2.0. يتم ربطها عبر مولد الربط UniFFI، وتوجد سلاسل الخدمة الخاصة به في إصدار بيتا macOS بالفعل في البناء 12.10.283234 بتاريخ 25 سبتمبر.
في نفس منظمة TelegramMessenger، ظهر تفرع لمحرك JavaScript QuickJS-ng في 11 أكتوبر. تم إجراء التحديثات (commits) فيه باسم نفس حساب macosswift المستخدم في mtproto-engine. تسرع هذه التحديثات المترجم وتوزيع الذاكرة. لا يظهر الكود المفتوح حاليًا أين يتم استخدام هذا التفرع.




