--- title: باگ سیزده ساله تعمیر شد tags: gtk gnome باگ همکاری پیگیری uuid: 4b4fa077-5001-41b2-bdb3-f9f9638efdb2 category: یادداشت --- در مطلب قبلی در مورد باگ GTK و تلاشم برای مرج کردن آن نوشته بودم. الان قصد دارم نتیجهی چند ماه دوندگی و همکاری آنلاین را بنویسم. ماجرا به طور خلاصه این بود که من از مدتها پیش موقع تایپ فارسی در `gedit` و `zim` متوجه شده بودم که اگر کلید کنترل را نگه دارم و به چپ و راست حرکت کنم، نشانگر تایپ در جهت عکس حرکت میکند. مثل خیلی از آدمها من هم منتظر شدم تا باگ توسط کس دیگری رفع بشود ولی نشد. در مرحله بعدی سعی کردم مشکل را پیدا و گزارش کنم که به [این باگ](https://bugzilla.gnome.org/show_bug.cgi?id=136059) رسیدم. تاریخ باگ را نگاه کنید، سال ۲۰۰۴ ثبت شده است. آن موقع (سال ۲۰۱۵ یا ۱۳۹۴) کل همت من به نوشتن [یک کامنت](https://bugzilla.gnome.org/show_bug.cgi?id=136059#c31) خلاصه شد. اینکه بگویم من هم این مشکل را دارم، بلکه کسی دلش به حالم بسوزد و از وقت خودش بزند و بیاید مشکل من را حل بکند! خب، ولی کسی دلش نسوخت. اگر باگ را دنبال کنید مراحل بعدی را خودتان میبینید. بعد از گذشت یکسال دوباره همتم را جمع کردم و اینبار تصمیم گرفتم خودم باگ را درست کنم. با صرف چند روز وقت و سرو کله زدن با GTK و C پچی درست کردم و باگ را با حل کردم که شرحش را در مطلب قبلی آوردم. ولی مهمترین قسمت کار دنبال کردن باگ است. اگر به کامنتها نگاه کنید و به کسانی که باگهای مشابه را ثبت کردهاند یا این باگ را دنبال کردهاند، متوجه میشوید که بیشتر افراد آن را دنبال نمیکنند و فیدبک نمیدهند. کامنتهای حاوی اطلاعات روشن و مورد نیاز هم کم است. یعنی افراد (مثل خود من قبلا) کامنت میگذارند ولی کامنتشان کم ارزش است چون حاوی اطلاعات به درد بخور نیست و کاری هم برای آن انجام نشده است. ولی اگر کسی برنامه را تست بکند و فیدبک بدهد یا پچ را امتحان بکند و خلاصه به طریقی به پیشرفت پروسهی رفع باگ کمک بکند کارش با ارزش است، در غیر اینصورت کسی توجهی به کامنتش نمیکند. و احتمالا جوابی هم دریافت نمیکند. در این مورد خواندن مقالهی اریک ریموند بسیار سودمند است. اینکه [چطور از هکرها هوشمندانه سوال بپرسیم](http://www.catb.org/esr/faqs/smart-questions.html). جان کلام اینست که پیام باید نشانگر تلاش سوال کننده در جهت حل مشکل باشد (باید مشق شب خودت را انجام داده باشی)، گویا باشد، طلبکارانه نباشد و برای وقت پاسخدهندگان ارزش قائل باشد. در ضمن باید گفتگو را دنبال کرد و در صورت نیاز با اطلاعات دوباره آن را بروزرسانی کرد. اگر پرسشی پرسیده شده باید به سرعت و دقت پاسخ داده بشود و مانند اینها. در نهایت بعد از گذشت چند ماه و پیگیری دائمی و رد و بدل کردن چندین و چند پچ و مشارکت عدهای از برنامهنویسان GTK بالاخره [پچ نهایی](https://git.gnome.org/browse/gtk+/commit/?id=0128b8d33f47c9387ee342a1158f3038e02eff49) در مخزن اصلی مرج شد و باگ مورد بحث بعد از گذشت ۱۳ سال فیکس شد. در این مدت دوستم آیدین غریبنواز به عنوان کاربر RTL با تست پچ صحت آن را تایید کرد و کامنت گذاشت و دو نفر از برنامهنویسان GTK بنام Daniel Bolse و Nelson Benítez León همکاری زیادی برای تولید پچ نهایی کردند. به این صورت بعد از مدتی اندک اندک با ریلیزهای بعدی گنوم و GTK این پچ منتشر میشود و دیستروها هم در نسخههای بعدیشان آنرا دریافت خواهند کرد. نکته مهمی که طی فرآیند تعمیر این باگ فهمیدیم این بود که از سیزده سال پیش تا به امروز GTK تغییرات زیادی کرده است و این باگ به تنهایی مشکل gedit را حل نمیکند چرا که امروز gedit دیگر از GtkTextView (که تعمیرش کردیم) برای نمایش متن استفاده نمیکند و بجای آن از یک ویجت دیگر بنام GtkSourceView استفاده میکند. بنابراین در تاریخ ۱۹ فوریه ۲۰۱۷ (اوایل اسفند ۹۵) [باگ جدیدی](https://bugzilla.gnome.org/show_bug.cgi?id=778928) ثبت کردم و کار را روی آن شروع کردیم. با کسب تجربه از پیچیدگیهای باگ قبلی و فرآیند حل آن اینبار با سرعت وارد عمل شدیم (یعنی یکی دو ماه!). هم من یاد گرفته بودم چطور با بچههای GTK کار کنم و هم آنها با مشکل راست به چپ نویسی آشنا شده بودند. (مثلا دانیل یاد گرفته بود که خودش متن عربی را تست بکند.) اول فکر میکردیم که باید API ویجت GtkTextView را تغییر بدهیم و همان توابع را در GtkSourceView استفاده کنیم که با واکنش منفی یکی دیگر از برنامهنویسان روبرو شد و درخواست کرد که اول تلاش کنیم مشکل را درون GtkSourceView حل کنیم و بار اضافی نگهداری از یک API جدید را به پروژه تحمیل نکنیم. خوشبختانه با مقداری تلاش و همفکری دوستان به [پچ جدیدی](https://bugzilla.gnome.org/attachment.cgi?id=348936&action=diff) رسیدیم، حتی خیلی بهتر از پچی که برای GtkTextView نوشته بودیم! پچ به قدری ساده بود که کارها خیلی زود پیش رفت. طبق معمول دوستان اصلاحاتی پیشنهاد کردند که اعمال کردم. مثلا اینکه متن کامیت باید شامل لینک باگزیلا باشد، خط اول آن باید فیکس را شرح بدهد و در بدنه کامیت هم شرح مشکل آمده باشد و در خط آخر هم لینک باگزیلا. خود کد هم باید قواعد رایج GTK و خود ویجت را رعایت کند. مثل تعریف متغیرها در ابتدای کد و استفاده از آکولاد حتی برای بلاکهای تک خطی و مانند اینها. آزاد کردن اشارهگرهای سی هم فراموش نشود! با این اوصاف باگ دوم بجای سیزده سال در کمتر از دو ماه حل شد. حتما تصدیق میکنید که پیشرفت قابل توجهی است! پچ حلال مشکلات ما را هم میتوانید در مخزن GTK [ببینید](https://git.gnome.org/browse/gtksourceview/commit/?id=494c76dd359351b8a703b6aec328126b0f84828b). من که بی صبرانه منتظرم تا آرچ لینوکسم را آپدیت بکنم و از این به بعد هرچقدر دلم میخواهد در متنهای فارسی با کنترل و کلیدهای جهت کیبورد به چپ و راست بروم! واقعا چه لذتی از این بالاتر؟ :) این هم عیدی من به کامیونتی راست به چپ نویسان گنوم باز ایران!