فورک در برنامه نویسی به چه معنا است و گیت هاب چگونه مفهوم آن را تغییر داد؟
فورک در برنامهنویسی و دنیای متنباز بهمعنای در اختیار گرفتن یک کپی از برنامهی اصلی و ایجاد تغییرات دلخواه در آن است.
عملکرد دکمهی فورک (Fork) در گیتهاب کمی با مفهوم اصلی آن در دنیای برنامهنویسی تفاوت دارد. درواقع گیتهاب از عبارت فورک استفاده میکند تا فعالیت کاربران را در پلتفرم خود افزایش دهد. آنها با تمرکز روی قابلیت پول ریکوئست پلتفرم خود، کارایی دکمهی فورک را کمی تغییر دادند، اما بههرحال طراحی جدید تنها به نفع گیت هاب میشود و کاربران بهمحض خارج شدن از آن و کار در پروژههای دیگر در دنیای واقعی، به مشکلاتی در مفهومشناسی بر میخورند. در این مطلب زومیت به بررسی مفهوم اصلی فرایند فورک و تفاوت آن با دکمهی مشهور گیتهاب میپردازیم. با درک همین تفاوتها، به مفهوم اصلی توزیعشدهبودن سیستم گیت هم پی خواهیم برد.
در گیتهاب، فورک بهمعنای یک کپی از مخزن کد خواهد بود که یک مشارکتکننده، تغییرات مورد نظر را پیش از انتشار عمومی در آن اعمال میکند. پیش از گیتهاب، مخزن کپیشده با این روش را یک شاخهی شخصی از مخزن مینامیدند. شاخهی شخصی لزوما برای کاربردی بودن نیاز به انتشار عمومی ندارد. با استفاده از دستورهای گیت میتوان شاخهی شخصی را بهصورت محلی و بدون نیاز به انتشار عمومی ایجاد کرد.
کاربران سیستم گیت (و نه گیتهاب) با استفاده از ایمیل میتوانند تغییرات اعمالشده در مخزن شخصی و خصوصی خود را برای بررسی اعمال در کدهای اصلی به توسعهدهندهها ارسال کنند. درواقع در خارج از اکوسیستم گیتهاب و سرویسهای مشابه، اکثر مشارکتکنندهها در یک پروژه نیازی به ارائهی آنلاین و عمومی نسخهی مخزن کد خود ندارند. آنها از این مرحله عبور میکنند و زمان قابلتوجهی هم در روند توسعهی پروژه صرفهجویی میشود.
در برخی مواقع، انتشار آنلاین شاخهی خصوصی کد مفید خواهد بود. چنین رویکردی، اغلب، مواقعی اجرا میشود که گروهی از افراد روی شاخهای با عمر بالا کار میکنند تا بعدا بهعنوان پروژهی اصلی منتشر شود. بهعنوان نمونهای از این رویکرد میتوان به شاخههای لینوکس توسعهیافته توسط گِرگ کورا هارتمن اشاره کرد که برای بررسی تغییرات آتی کرنل لینوکس از سوی کاربران عمومی در دسترس هستند. بهجز کرنلهای گرگ، صدها شاخهی لینوکسی دیگر نیز طبق همین روند بهصورت آنلاین منتشر میشوند.
شاخههای لینوکسی که بهصورت عمومی منتشر میشوند، عموما فرصتهای پیادهسازی تغییرات را فراهم میکنند که برای کارهای طولانیمدت استفاده میشود. بهعلاوه مسئولان نگهداری زیرسیستمهای کرنل نیز از آنها استفاده میکنند. تغییرات در مخازن مذکور، پس از اعمال به سمت مخزن اصلی یعنی torvalds/linux میروند. بهبیان سادهتر، روند تغییرات در شاخههای شخصی بهصورت مستقل انجام میشود، اما میتوان از آنها برای همکاری بیشتر با هدف توسعهی پروژهی اصلی نیز استفاده کرد.
فورک در دنیای خارج از گیت هاب با هدف همکاری هرچه بیشتر جامعه طراحی شد
با نگاهی به تعریف بالا، به مفهوم اصلی توزیعشدهبودن گیت پی میبریم. مفهومی که براساس فعالیتهای همهجانبه انجام میشود و همکاری را بهعنوان ماهیت اصلی خود نشان میدهد. در مفهوم اصلی گیت، هر شاخه اهمیت خاص خود را دارد و هیچ جریانی، اولویت آنها را تأیید یا رد نمیکند. درواقع مخازن خصوصی همگی در تلاش برای رفع مشکلات مخزن اصلی عمل میکنند و در مجموع، به بهبود پروژه کمک خواهند کرد.
کلیسای جامع و بازار
دو اصطلاح «کلیسای جامع» (Cathedral) و «بازار» (Bazaar) برای اشاره به دو مدل کاملا متفاوت توسعهی پروژههای متن باز، اولینبار در سال ۱۹۹۹ توسط اریک ریموند، در کتاب «کلیسای جامع و بازار» معرفی شدند.
بنا به تعریف ریموند، کلیسای جامع مدلی مرکزگرا است که در آن گروه مشخصی از توسعهدهندهها (یا حتی یک توسعهدهنده) نرمافزاری را بدون کمک خارجی توسعه میدهند. در این مدل ایدهها، پیشنهادها و پچهای ارائهشده از خارج گروه مرکزی نادیده گرفته میشود. اگرچه معمولا نرمافزارهای تجاری از این مدل توسعه استفاده میکنند؛ اما میتوان نمونههایی از پروژههای متن باز غیر تجاری که با مدل کلیسای جامع توسعه داده شده و میشوند را نیز یافت.
از سوی دیگر در مدل بازار فرایند توسعه کاملا باز است و افراد متعددی آزادانه و بدون دخالت قدرتی مرکزی، کد منبع را تغییر میدهند. در عمل در بسیاری از پروژههای متن باز از ترکیبی از این دو مدل توسعه استفاده میشود و نمیتوان آنها را بهصورت کامل در یکی از این دو دستهبندی قرار داد.
مدل گیتهاب
مفهوم فورک در دنیای خارج از گیتهاب، منجر به توسعهی بزرگترین پروژههای جهان شده است. گیت نیز با تمرکز روی همین رویکرد و ایده شکل گرفت. برخی افراد، مدل مذکور را به «بازار» تشریح میکنند، درحالیکه مدل گیتهاب بیشتر به سازمانی با کنترل روی همهی زیرمجموعهها شباهت پیدا میکند. در مدل گیتهاب، هر پروژه یک مرکز اصلی با مدیریت متمرکز دارد که توسط چند نفر اداره میشود. مرکز اصلی هیچ نیاز یا وابستگی به مفاهیم فورک و پول ریکوئست در گیتهاب ندارد. درواقع میتوان مخزن اصلی را با روش ایمیلی یا هر روش دیگری بدون دخالت دیگران ساخت و توسعه داد. درنتیجه میتوان گفت که مفهوم مشارکی بازار در گیتهاب وجود ندارد. مدل گیتهاب را بیشتر میتوان به کلیسای جامع تشبیه کرد.
برای درک بهتر مفهوم فورک در گیتهاب، مثالی با درنظرگرفتن سیستم کلیسای جامع در مدیریت پروژهها بررسی میکنیم. در پروژهای که به این صورت مدیریت میشود، برخی مشارکتکنندهها میتوانند کد را کپی کرده و شعبهای جدید در جای دیگر تأسیس کنند. آنها پرچم جدیدی برای شعبهی خود نصب میکنند و نام آن را نیز تغییر میدهند. در ادامه توسعهدهندههای قدیمی و جدید به مشارکت در شعبهی جدید تشویق شده و از پروژهی اولیه خارج میشوند.
در مثال بالا پروژهای کاملا مستقل ایجاد میشود و در اصطلاح گیتهاب، فورک رخ میدهد. چنین روندی یک رخداد فاجعهبار برای پروژه محسوب میشود و عواقب آن شاید تا سالها ادامه داشته باشد. بههرحال گیتهاب با هدف متمرکزتر کردن قدرت، معنای فورک را تغییر داد. گیتهاب سرویسی با اهداف درآمدزایی محسوب میشود و قطعا هدف نهایی آنها، کسب سود حداکثری است.
ساختار مدل فورک و پول ریکوئست در گیتهاب، بیشتر شبیه به مدل کلیسای جامعی است که کاربران را در پلتفرم نگهمیدارد؛ کاری که گیتهاب با استفاده از مدل بازار قادر به انجام آن نبود. اما ازطرفی سیستم غیر متمرکزی همچون گیت که روی پروتکلهای غیرمتمرکزی چون ایمیل ساختهشده است را نمیتوان با سرویسی متمرکز و مدل کلیسای جامع مدیریت کرد؛ بنابراین گیتهاب مجبور شد مدل خاص خودش را (که نه میتوان آن را به مدل کلیسای جامع تشبیه کرد و نه به مدل بازار شباهت دارد) طراحی کند.
هدف از آنچه در این مقاله گفتهشد محکوم کردن سرویسی خاص و ستایش از سرویس دیگر نیست؛ چرا که گیتهاب نقش بسیار مهمی در بهشهرت رساندن پروژههای متنباز داشتهاست. هدف اصلی این مقاله آشنایی با ساختار و ماهیت گیتهاب و دستیافتن به درکی بهتر از انگیزههای اصلی پشت این سرویس تجاری است.