قطع شدن اینترنت من را در وضعیت غیر منتظرهای قرار داد. من حقیقتا هیچ وقت به این فکر نکرده بودم که اگر اینترنت قطع شود چه وضعیتی به وجود میآید ( و این برایم عجیب بود، چون مثلا به این که اگر دولت آب را قطع کند فکر کرده بودم ) و به نظرم تجربه جالبی بود ( دیگه داره از جالب تبدیل به ناراحت کننده می شه :( وصلش کنید! ) در این زمان که خیلی از کار های روزمرهام متوقف شده بود، مدتی از وقتم را به فکر کردن درباره شرایط موجود و مشابه گذراندم.
یکی از سایت هایی که من به شدت از آن استفاده می کردم، سایت گیتهاب بود و این موضوع که دسترسی من به آن بسته شد، من را به این فکر فرو برد که اگر روزی گیتهاب تصمیم بگیرد که دسترسی من به آن را محدود کند، همان گونه که قبل تر این کار را برای مخازن خصوصی انجام داده است و خیلی دور از ذهن نیست ، یا اصلا کل سرور هایش را ببندد و از جهان خداحافظی کند، چه بلایی سر این حجم عظیم از داده آزاد میآید؟ چرا باید یکی از بزرگترین پایگاههای داده آزاد جهان یک شرکت انحصاری باشد؟ این موضوع باعث شد که به جایگزینی برای گیتهاب فکر کنم و نتیجه این افکار این نوشته است.
نام این جایگزین DGit است. DGit که مخفف Distributed Git یا Decentralized Git است، یک شبکه غیر متمرکز است ( مثل شبکه تورنت ). کار این شبکه این است که یک رپوزیتوری گیت را نگهداری کند که تمامی پروژه های جهان درون این مخزن که یک درختی ( یا گرافی ) از کامیت هاست نگهداری می شود. ( در ادامه به این درخت درخت جهانی میگوییم ). هر کسی می تواند به این درخت جهانی راس اضافه کند ( کامیت جدیدی در آن ایجاد کند ). مثلا برای ایجاد یک پروژه جدید می توان از راس خالی ( یا یک راس تمپلیت ) شروع کرد و فایل های جدید را به آن اضافه کرد. چون درخت جهانی خود یک مخزن گیت است هر پروژه تمامی قابلیت های گیت ( مثل ایجاد کامیت یا برنچ ) به علاوه عمده افزونه های آن ( مثل ایجاد فورک ) را دارا است.
برای ساخت یا ویرایش یک پروژه، رئوسی ( کامیت هایی ) به درخت جهانی اضافه می کنیم سپس تغییرات مان در درخت جهانی را در یکی از سید ( سید یا بذر کامپیوتری است که بخشی از ترافیک خود را صرف آپلود داده های شبکه می کند ) های شبکه DGit ( مثلا کامپیوتر خودمان ) اعمال می کنیم. حال برای این که کسی بتواند پروژه را در جای دیگری از جهان کلون کند، باید هش کامیتی که متناظر با شاخه مستر پروژه ماست را در اختیار داشته باشد ( مثلا می توان این هش را به عنوان یک لینک در سایت شخصی، شبکه های اجتماعی یا ... گذاشت ). سپس از یکی از سید هایی که کامیت های متناظر با این هش تا ریشه ( راس خالی ) را در اختیار دارد کامیت ها را دریافت می کند. سپس هش آنها را چک کند تا درست باشد ( ممکن است کامپیوتر سید شیاد باشد ) و اگر کامیت ها معتبر بود به وسیله آن ها فایل ها را تولید کند. بعد از این کار خود او میتواند از این به بعد به عنوان سید این داده ها را در اختیار دیگران بگذارد.
اگر طول هش را به اندازه کافی بلند ( مثلا ۵۱۲ بیت ) بگیریم احتمال این اتفاق در طول عمر بشر تقریبا ۰ است ( دقیقا نزدیک به دو به توان منفی صد است ).
برای پاک کردن یک پروژه یا یک راس یا هر چیز دیگر از درخت جهانی، باید آن را از تمام کامپیوتر های عضو شبکه پاک کنید که این کار عملا ناممکن است. توجه کنید که این موضوع یک مزیت است. ساختار غیر قابل تغییر درخت جهانی باعث می شود تا این درخت قابل اعتماد باشد. مثلا اگر یک مخزن یک کتابخانه که جز وابستگی های پروژه شماست روی DGit باشد شما می توانید مطمئن باشید که هیچ کس اعم از نویسنده کتابخانه، یک کمپانی سوم شخص مثل گیتهاب یا حتی دولت ها نمی توانند آن کتابخانه را پاک کرده یا تغییر دهند.
هر کسی می تواند به پروژه شما رئوس جدیدی اضافه کند اما این به معنی تغییر پروژه شما نیست. در نهایت این شما هستید که تعیین می کنید پروژه شما متناظر با کدام راس و کدام مسیر از درخت است، چون شما هش کامیت متناظر را در سایت پروژه یا جایی شبیه به این می گذارید. رئوسی که دیگران از روی پروژه شما ایجاد می کنند مانند فورک در گیتهاب هستند. شما می توانید آنها را ببینید و در صورت تمایل با پروژه خود ترکیب کنید. همچنین آن ها میتوانند خود به پروژه های جدایی تبدیل شوند.
این سوالیست که من هم خیلی کنجکاوم جوابش را بدانم اما متاسفانه اینترنت قطع است :(
نظر شما در این مورد چیست؟ آیا DGit یا چیزی مشابه آن میتواند جایگزین گیتهاب شود؟ سوالی درباره عملکرد یا پیشنهادی برای بهبود آن دارید؟