لینک کوتاه مطلب : https://hsgar.com/?p=3123

داستان اصلی Git | مجله لینوکس

نگاهی به راه‌حل‌های کنترل بازبینی مختلف توسعه‌دهندگان هسته لینوکس در طول سال‌ها، تصمیم لینوس توروالدز برای استفاده از BitKeeper و بحث‌های پس از آن، و نحوه ایجاد Git.

در اصل، لینوس توروالدز اصلاً از کنترل بازبینی استفاده نمی کرد. مشارکت‌کنندگان کرنل وصله‌های خود را به گروه Usenet و بعداً در لیست پستی ارسال می‌کردند و لینوس آنها را در درخت منبع خود اعمال می‌کرد. در نهایت، لینوس یک نسخه جدید از کل درخت را بدون تقسیم بین هیچ یک از تکه‌ها منتشر کرد. تنها راه بررسی تاریخچه روند او به عنوان یک غول بود diff بین دو نسخه کامل

این به این دلیل نبود که هیچ سیستم کنترل بازنگری منبع باز در دسترس نبود. CVS از دهه 1980 وجود داشت و هنوز هم محبوب ترین سیستم در اطراف بود. در هسته خود، به مشارکت کنندگان اجازه می دهد تا وصله ها را به یک مخزن مرکزی ارسال کنند و تاریخچه وصله های وارد شده به آن مخزن را بررسی کنند.

هر چند شکایات زیادی در مورد CVS وجود داشت. یکی این بود که تغییرات را بر اساس هر فایل ردیابی می‌کرد و وصله بزرگ‌تر را به عنوان یک ویرایش واحد تشخیص نمی‌داد، که تفسیر مشارکت‌های گذشته توسعه‌دهندگان دیگر را دشوار می‌کرد. همچنین برخی از اشکالات سخت برای رفع آنها وجود داشت، مانند شرایط مسابقه که دو وصله متناقض به طور همزمان ارسال می شد.

لینوس CVS را دوست نداشت، تا حدی به همان دلایلی که دیگران بیان کردند و تا حدی به دلایل خودش که بعداً مشخص شد. او همچنین Subversion را دوست نداشت، پروژه ای متن باز که در ابتدای دهه 2000 پدیدار شد و هدف خاص آن رسیدگی به اشکالات و ویژگی های نادرست در CVS بود.

بسیاری از توسعه دهندگان هسته لینوکس از عدم کنترل مناسب بازبینی ناراضی بودند، بنابراین همیشه مقدار معینی فشار جامعه برای Linus وجود داشت تا چیزی را از یکی از گزینه های موجود انتخاب کند. سپس در سال 2002 این کار را انجام داد. لینوس در شوک و ناامیدی همه را انتخاب کرد، BitKeeper، یک سیستم تجاری متن بسته که توسط شرکت BitMover که توسط لری مک‌وی اداره می‌شود، توسعه یافته است.

هسته لینوکس مهمترین پروژه منبع باز در تاریخ بود و خود لینوس کسی بود که برای اولین بار تکنیک های توسعه منبع باز را کشف کرد که از پروژه گنو دور مانده بود و برای چندین دهه توسط پروژه های منبع باز تقلید می شد. بیا، درست تا به امروز لینوس به چه چیزی فکر می کرد؟ او چگونه می تواند به جامعه خود و جهان منبع باز این گونه خیانت کند؟ زمانی که لینوس برای اولین بار استفاده از BitKeeper را برای توسعه هسته شروع کرد، این افکار بسیاری بود.

علاوه بر این، BitMover در ازای مجوز عدم پرداخت، محدودیت‌های قابل توجهی را برای جامعه لینوکس اعمال کرد. اولا، توسعه دهندگان لینوکس اجازه ندارند در حین استفاده از BitKeeper روی پروژه های کنترل بازبینی رقیب کار کنند. و دوم، BitMover برخی ابرداده‌های مرتبط با پروژه هسته را کنترل می‌کند تا متوجه هرگونه سوء استفاده از مجوز شود. بدون دسترسی به آن ابرداده، توسعه‌دهندگان هسته قادر به مقایسه نسخه‌های هسته گذشته نخواهند بود – یک ویژگی استاندارد مهم دیگر سیستم‌های کنترل بازبینی.

این جنجال فروکش نکرد، اگرچه لینوس سال ها به BitKeeper تکیه کرد. استدلال اصلی او این بود که او یک متعصب نرم افزار آزاد نیست. او اگر از ابزارهای منبع باز بهتر از همتایان تجاری خود بود استفاده می کرد. اما اگر ابزار تجاری بهتر بود دماغش را بالا نمی آورد.

با این حال، بسیاری از توسعه دهندگان هسته در واقع مشتاق نرم افزار آزاد بودند. خشم و تنش بین لینوس و بقیه توسعه دهندگان شدید بود، اگرچه برای شکستن جامعه و ایجاد فورک واقعی پروژه هسته لینوکس کافی نبود. مطمئناً افرادی مانند آلن کاکس، آل ویرو، دیوید میلر، آندریا آرکانجلی، اندرو مورتون و تعداد قابل توجهی از افراد دیگر مهارت‌های فنی لازم برای رهبری یک پروژه رقیب را داشتند و شاید برخی حتی به اندازه کافی اعتبار خیابانی برای جذب تعداد قابل توجهی از توسعه‌دهندگان هسته داشتند. آنها اما هیچ کدام این کار را نکردند. تنش و خصومت ادامه داشت.

چه چیزی در مورد BitKeeper بسیار عالی بود؟

ادعای اصلی BitKeeper برای شهرت این بود که یک سیستم توزیع شده را ارائه می‌کرد که به موجب آن کل مخازن می‌توانستند فورک شده و به راحتی ادغام شوند. این کلید بود. با آن، گروه‌های فرعی از توسعه‌دهندگان هسته می‌توانند به طور مستقل با مزایای کنترل بازبینی همکاری کنند و سپس تغییرات خود را در زمانی که آماده شدند به لینوس ارسال کنند. به این ترتیب، بخش بزرگی از کارهایی که قبلاً به طور کامل بر روی دوش لینوس انباشته شده بود، می‌توانست بین ستوان‌های مورد اعتماد او یا واقعاً بین هر گروهی که به این روش با هم کار می‌کردند توزیع شود. معماری‌ها، محرک‌ها و زیرسیستم‌ها همگی می‌توانند تا حدودی به‌طور مستقل توسعه داده شوند، و سپس هر یک می‌توانند در یک جرعه بزرگ با درخت هسته اصلی ادغام شوند.

شاید همه اینها خیلی آشنا به نظر برسد، اما در سال 2002، ایده جدیدی بود. پروژه‌های موجود مانند CVS و Subversion می‌توانند فورک‌ها و ادغام‌ها را تنها به‌عنوان عملیات‌های بزرگ و وقت‌گیر انجام دهند که شما را مشتاق مرگ می‌کند. با BitKeeper، این عملیات به یک عملیات پیش پا افتاده تبدیل شد.

تمایل لینوس برای استفاده از یک نرم افزار اختصاصی در قلب زنجیره ابزار توسعه هسته، افراد زیادی را برانگیخت تا برای ایجاد یک جایگزین تلاش بیشتری کنند. پروژه های CVS و Subversion خیلی عقب مانده بودند و خطاهای اساسی زیادی در طراحی مرتکب شده بودند. در مورد سایر پروژه های موجود نیز همینطور بود. اما حالا که همه می‌دانستند – یا فکر می‌کردند می‌دانند – واقعاً لینوس چه می‌خواهد، می‌توانستند به طور جدی شروع به کدنویسی کنند. نتیجه تعدادی از سیستم های کنترل بازنگری بود که توسعه توزیع شده را ارائه می کردند.

از جمله اینها آرک، دارک و یکنواخت بودند. با استفاده از BitKeeper به عنوان مدل رقیب خود، هر کدام نشان دهنده تلاشی برای ارائه Linus با جایگزینی برای BitKeeper بودند.

خیلی ها تلاش کردند، اما هیچ کدام موفق نشدند. این تا حدی به این دلیل بود که لینوس آنچه را که در هیچ یک از آن پروژه‌ها نیاز داشت، به طور کامل بیان نمی‌کرد، همانطور که آنچه را که در CVS و Subversion گم شده بود، به‌طور کامل بیان نکرده بود. و همچنین این حس وجود داشت که لینوس با استفاده از یک ابزار منبع بسته آزار نمی‌دهد – برای اینکه هر جایگزینی برای او قابل قبول باشد، باید یک پیشرفت فنی قابل توجه نسبت به BitKeeper باشد. بنابراین، حتی با وجود اینکه هیچ ابزار منبع باز تا قبل از BitKeeper به اندازه کافی خوب نبود، ورود BitKeeper سطح هر ابزار منبع باز را که ممکن بود پیش بیاید، بیشتر کرد.

پس از سه سال تلاش شدید، هیچ یک از جایگزین های منبع باز به اندازه CVS یا Subversion به نیازهای لینوس نزدیک نبودند. و اگر اندرو تریجل، خالق سامبا، یکی از خالقان rsync و آدم خوش قلب همه جانبه نبود، وضعیت ممکن بود خیلی بیشتر ادامه پیدا کند. در سال 2005، اندرو تلاش کرد تا پروتکل های شبکه BitKeeper را مهندسی معکوس کند تا یک جایگزین نرم افزار رایگان ایجاد کند. اگر او نبود، کس دیگری بود – فقط مسئله زمان بود. لری مک‌وی به توسعه‌دهندگان لینوکس هشدار داده بود که اگر کسی این کار را انجام دهد، آن را قطع خواهد کرد و این دقیقاً همان کاری بود که او انجام داد. ناگهان، BitKeeper دیگر نمی تواند برای توسعه هسته استفاده شود. کل زنجیره ابزار توسعه، و تمام فرهنگ توسعه‌دهنده که پیرامون کنترل نسخه توزیع شده پدید آمده بود، در عدم قطعیت قرار گرفت.

این چه معنی داشت؟ آیا لینوس به سبک قدیمی توسعه خود باز می گردد و خودش همه وصله ها را بررسی می کند؟ اگر نه، آیا او یکی از گزینه های منبع باز BitKeeper را انتخاب می کند؟ و اگر انجام می داد، کدام یک خواهد بود؟

در این مرحله یک اتفاق قابل توجه رخ داد. برای اولین بار از زمان آغاز به کار خود در سال 1991، لینوس کار خود را به طور کامل بر روی هسته لینوکس متوقف کرد. از آنجایی که هیچ یک از ابزارهای موجود نمی‌توانست کارهای مورد نیاز او را انجام دهد، تصمیم گرفت خودش بنویسد.

یکی از نگرانی های اصلی لینوس در واقع سرعت بود. این چیزی بود که او قبلاً هرگز به طور کامل بیان نکرده بود، یا حداقل به گونه ای نبود که پروژه های موجود بتوانند درک کنند. با وجود هزاران توسعه‌دهنده هسته در سراسر جهان، او به چیزی نیاز داشت که بتواند با سرعتی که قبلاً تصور نمی‌شد کار کند. او نمی توانست بیش از چند ثانیه صبر کند تا حتی بزرگترین و پیچیده ترین عملیات تمام شود. نه قوس، نه دارک، نه یکنواخت، و نه هیچ پروژه دیگری، هرگز به این نیاز نزدیک نشده بود.

لینوس برای مدت کوتاهی در انزوا کدنویسی کرد، سپس مفهوم جدید خود را با جهان در میان گذاشت. چند روز پس از شروع پروژه در ژوئن 2005، سیستم کنترل بازنگری گیت لینوس به طور کامل میزبان خود شد. در عرض چند هفته، آماده میزبانی توسعه هسته لینوکس شد. در عرض چند ماه، به عملکرد کامل رسید. در این مرحله، Linus مدیریت پروژه را به مشتاق ترین مشارکت کننده آن، Junio ​​C. Hamano سپرد و بار دیگر به طور تمام وقت به توسعه لینوکس بازگشت.

جامعه حیرت‌زده از توسعه‌دهندگان نرم‌افزار آزاد برای درک این خلقت عجیب و غریب تلاش کردند. این شبیه هیچ تلاش دیگری در نرم افزار کنترل بازنگری نیست. در واقع، بیشتر شبیه یک دسته از عملیات های سیستم فایل سطح پایین به نظر می رسید تا یک سیستم کنترل بازنگری. و به جای اینکه وصله ها را مانند سایر سیستم ها ذخیره کند، نسخه های کامل هر فایل تغییر یافته را ذخیره می کرد. چطور ممکن است این خوب باشد؟ از سوی دیگر، می‌توانست فورک‌ها و ادغام‌ها را با سرعت رعد و برق مدیریت کند و در صورت تقاضا به سرعت تکه‌هایی ایجاد کند.

به تدریج، Junio ​​مجموعه‌ای از دستورات سطح بالاتر را که شباهت بیشتری به ابزارهایی مانند CVS و Subversion داشت، گرد هم آورد. اگر مجموعه اصلی دستورات git “لوله کشی” بود، این مجموعه جدید دستورات “porcelain” بودند. و بنابراین آنها نامیده شدند.

به همان اندازه که در مورد BitKeeper اختلاف نظر و نارضایتی وجود داشت، اشتیاق و مشارکت در توسعه بیشتر git وجود داشت. پورت ها، برنامه های افزودنی و وب سایت ها در همه جا ظاهر شدند. در عرض چند سال، تقریباً همه از git استفاده کردند. مانند لینوکس، جهان را در اختیار گرفته بود.

لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.