مفتوح المصدر
حفنة من الأدوات مفتوحة المصدر أصونها على الجانب. TypeScript وRust وGo: أدوات صغيرة خرجت من مشاريع أكبر وثبت أنها مفيدة في غيرها.
عن المشروع.
حفنة من الأدوات مفتوحة المصدر أصونها إلى جانب عمل العملاء. معظمها بدأ كأداة صغيرة داخل مشروع أكبر، ثم تبيّن أنّها مفيدة بما يكفي لنشرها وحدها. المزيج TypeScript وRust وGo، حسب ما تقوم به الأداة. أتعامل معها كأيّ التزام آخر: مشكلات حقيقيّة تأخذ ردًّا، تغييرات كاسرة تأخذ ملاحظات إصدار، ولا أنشر أيّ شيء قبل أن يصبح جيّدًا بما يكفي لاستخدامي الشخصيّ.
ما الذي تغيّر.
حزمة قيد الصيانة
نجمة على GitHub في كامل المستودعات
ما الذي وجدناه.
عدّة أدوات صغيرة سُحبت من مشاريع عملاء أكبر — مفيدة جدًّا للإبقاء عليها خاصّة، صغيرة جدًّا لتُصنَع منتجات قائمة بذاتها.
ما الذي فعلناه.
نشرها على GitHub تحت MIT، مع توثيق جيّد بما يكفي ليستخدمها غريب، وطابور issues يحصل على إجابات حقيقيّة (لا هجر).
ما الذي أصبح.
نجوم متواضعة، مستخدمون حقيقيّون، والانضباط الذي يأتي من نشر كود تحت اسمك.
دوري الفعليّ في هذا المشروع.
مُصين منفرد عبر كلّ المستودعات. لا مُصينون مساعدون، لا شركة راعية. أعامل issues كتذاكر عملاء: ردّ حقيقيّ خلال 48 ساعة، ملاحظات إصدار حقيقيّة، لا تغييرات كاسرة دون قفزة إصدار رئيسيّة.
مُصين (كلّ المستودعات)
فرز issues، مراجعة PRs، إدارة الإصدارات. semantic versioning مفروض؛ CHANGELOG مكتوب يدويًّا، لا مولَّد.
مالك توثيق
README + أمثلة استخدام تعمل بالنسخ-اللصق. كلّ علم موثّق. كلّ تغيير كاسر مُعلَن في MIGRATION.md.
مهندس CI + إصدارات
GitHub Actions للاختبار + lint + الإصدار. نشر حزم مؤتمت على الإصدارات الموسومة.
الأرقام التي تهمّ.
- TS · Rust · Goمزيج المنظوماتلغة لكلّ أداة، مختارة بما تحتاجه الأداة — لا بولاء.
- <48hزمن أوّل ردّ على issueيُعامَل كتذكرة عميل. ردّ حقيقيّ، لا بوت شكر.
- Semverانضباط الإصداراتلا تغييرات كاسرة دون قفزة رئيسيّة. CHANGELOG مكتوب يدويًّا.
- MITترخيص عبر كلّ المستودعاتمتساهل؛ لا شيء مقفل خلف حيل ترخيص مزدوج.
ما الذي كان معطّلاً فعلاً.
العمل على مشاريع عملاء طويلة الأمد ينتج بتات صغيرة قابلة لإعادة الاستخدام — محلّل لصيغة إعداد معيّنة، CLI لخطوة يدويّة مملّة، مساعد Rust يفعل شيئًا واحدًا رخيصًا بسرعة. الاحتفاظ بها خاصّة ضريبة على كلّ مشروع مستقبليّ يحتاجها؛ نشرها كمنتجات مبالغة. الطريق الأوسط هو مفتوح المصدر مع انضباط مُصين — أجب على issues، اشحن الترقيعات، لا تتظاهر بأنّك startup.
المساحة الصعبة من المشروع.
- 01تمييز «أداة مفيدة تستحقّ النشر» عن «اختراق داخليّ يجب أن يبقى داخليًّا».
- 02حفظ انضباط الإصدارات إلى جانب عمل العملاء — صيانة مفتوح المصدر لا تتوقّف لأنّ sprint ساخن.
- 03توثيق يحترم وقت القارئ — README يعرض الأداة فعلاً في 30 ثانية.
انتصارات هندسيّة تستحقّ التسمية.
قول لا لتضخّم النطاق
سيطلب المستخدمون ميزات تحوّل أداة 50 سطرًا إلى إطار 500 سطر. ردود «هذا خارج نطاق هذه الأداة» الصادقة تبقي سطح التطوير صغيرًا.
CI عبر منصّات دون دفع فواتير CI
الطبقة المجّانيّة من GitHub Actions تتعامل مع Linux + macOS + Windows لمصفوفة الاختبار. الإصدارات تُحزَم + تُوقَّع في نفس workflow.
القرارات وراء كلّ اختيار.
TypeScript / Rust / Go (لكلّ أداة)
- TypeScript: CLIs صغيرة وأدوات جانب-Node حيث المنظومة تهمّ أكثر من تكلفة وقت التشغيل.
- Rust: حين تحتاج الأداة أن تكون سريعة وتُشحن كثنائيّ ثابت واحد.
- Go: حين تحتاج الأداة أن تكون سريعة، تُشحن كثنائيّ واحد، وتبقى قابلة للقراءة لمهندسين غير Rust.
MIT عوضًا عن GPL
- ترخيص متساهل يطابق روح «أداة مفيدة» — لا التزامات على المستخدمين أسفل.
- تبنّي شركاتيّ أسهل — لا مراجعة قانونيّة مطلوبة ليسحب أحد تبعيّة 100 سطر.
ما علّمنا إيّاه هذا البناء.
- مفتوح المصدر بلا انضباط أسوأ من لا مفتوح مصدر أصلاً. لو لا تستطيع الردّ على issues، أرشف المستودع وقل ذلك.
- الأدوات الصغيرة تشيخ أفضل من الأطر الكبيرة. الأدوات الواحدة-الشيء التي نشرتها في 2023 لا تحتاج صيانة؛ التجربة الأكبر احتاجت ثلاث إعادات كتابة.