این بایگانی ، GitHub Code Vault ، توسط برنامه بایگانی GitHub تاسیس شد که وظیفه آن حفظ نرم افزار منبع باز برای نسل های آینده است. شما ممکن است یک سال دیگر یا یک هزار نفر این مقاله را بخوانید ، اما به هر ترتیب ، امیدواریم که مطالب آن و شاید مفهوم منبع باز برای شما مفید باشد.
این در درجه اول بایگانی نرم افزار است. نرم افزار مجموعه ای از دستورات است که برای کنترل عملکردهای رایانه استفاده می شود. کامپیوتر وسیله ای است که می تواند به طور خودکار عملکردهای ریاضی را خیلی سریعتر از ذهن انسان انجام دهد و قدرت آن فراتر از ما باشد. رایانه های ما برای کمک به کشف اسرار جهان ، برای اتصال همه بشریت در یک شبکه اطلاعاتی همه جا ، برای دستکاری سیگنال ها به اندازه کافی سریع برای انتقال صدا و نمایش تصاویر متحرک دقیق بر روی صفحه های الکتریکی و کنترل ماشین های بسیار قدرتمند که بیش از ظرفیت و دقت کار انسانی است.
یک کامپیوتر بدون نرم افزار نمی تواند هیچ یک از این کارها را انجام دهد. کامپیوتر یک چیز خارق العاده و شگفت انگیز است ، اما بدون نرم افزار ، تمام قدرت آن بی فایده است. هدف از این بایگانی انتقال آنچه ما در مورد نرم افزار می دانیم به شما منتقل می شود.
نرم افزار به صورت توالی هایی از دستورات پیچیده اما قابل خواندن توسط انسان نوشته می شود که طعم های مختلف آن به عنوان زبان برنامه نویسی شناخته می شوند ، زیرا واحد کاملی از نرم افزار را اغلب برنامه می نامند. سپس این برنامه ها به زبان باینری یک و صفرهای مورد استفاده کامپیوترها تبدیل می شوند. این فرآیند به کامپایل معروف است.
از آنجا که رمزگشایی مجدد نرم افزار کامپایل شده به فرم اصلی خود ، که به عنوان کد منبع نیز شناخته می شود ، بسیار دشوار است ، برای افراد این امکان وجود دارد که آن فرم اصلی را مخفی نگه دارند و ادعا کنند که مالکیت آن را دارند. نرم افزار منبع آزاد نوع متفاوتی از نرم افزار نیست بلکه اخلاق متفاوتی است. اخلاق متن باز ، رازداری و مالکیت را رد می کند. برنامه های نرم افزاری منبع آزاد در دسترس هر کسی که می خواهد از آن استفاده کند و بدون هیچ هزینه ای در دسترس قرار می گیرد ، بنابراین می تواند به نوبه خود آن برنامه ها را بهبود بخشد یا از آنها برای ساختن چیزهای جدید و بهتر استفاده کند.
یک پروژه منبع باز کار جمعی یک جامعه خود سازمان دهنده است که ممکن است هزاران نفر باشد. جمع آوری تمام پروژه های نرم افزار منبع آزاد که در اینجا بایگانی می شوند ، کار یک جامعه میلیونی است. در حالی که افراد خاصی ممکن است در هر پروژه خاصی از جمله توانایی تأیید یا رد تغییرات پیشنهادی در آخرین نسخه رسمی کد منبع خود ، دارای حقوق ویژه ای باشند ، اما هیچ کس مالک آن نیست. هر شخصی حق دارد کپی کامل هر پروژه منبع باز را در هر زمان و بدون هیچ گونه هزینه و جریمه ای از آن استفاده کند و از آن استفاده کند. این به عنوان انشعاب یک پروژه شناخته می شود.
وقتی بسیاری از افراد به طور همزمان روی کد منبع کار می کنند ، پیگیری و یکپارچه سازی تمام تغییرات آنها دشوار است. یک پروژه منبع باز معروف به 'Git' به حل این مشکل اختصاص یافته است. این یک تاریخچه کامل از همه موارد اضافه شده و تغییرات یک پروژه را در موجودی موسوم به مخزن Git ادغام می کند. این بایگانی اساساً بایگانی چنین مخازنی است.
این بایگانی توسط شرکتی به نام 'GitHub' ایجاد شده است ، و خدماتی را ارائه می دهد که به مردم در سراسر جهان امکان می دهد برنامه های نرم افزاری را که نوشته اند ذخیره کنند ، تغییرات این برنامه ها را پیگیری کنند و برای بهبود و گسترش آنها با دیگران همکاری کنند. GitHub خدمات خود را به طور رایگان در اختیار توسعه دهندگان نرم افزارهای منبع باز عمومی قرار می دهد. دهها میلیون کاربر از این دست دارد.
آنچه در زیر می آید ، شرح آنچه ما معتقدیم برای استفاده بهینه از این بایگانی نرم افزار ، باید بدانید و داشته باشید. اگر بعضی یا هر یک از این موارد را نمی دانید یا نمی فهمید ، ناامید نشوید! ما همچنین راهنمای چگونگی تحقق این الزامات را ارائه داده ایم. اگر به هر دلیلی خودتان نتوانستید آنها را به سرانجام برسانید ، پس فرزندان شما می توانند.
در اصل ، تمام آنچه برای دسترسی به مطالب این بایگانی نیاز دارید منبع روشنایی و نوعی ذره بین است. با این حال ، بیشتر (هرچند نه همه) اطلاعات آن بسیار محکم بر روی حلقه های فیلم به صورت رمزگذاری شده و فشرده بسته بندی شده است. خواندن ، رمزگشایی و فشرده سازی نکردن این داده ها به خود محاسبات قابل توجهی نیاز دارد. از لحاظ تئوری این کار بدون کامپیوتر انجام می شود ، اما بسیار خسته کننده و دشوار است.
انتظار ما این است که شما به تعاریف نرم افزار ، رایانه و سایر اصطلاحات ما نیازی نداشته باشید. ما تصور می کنیم که شما رایانه های شخصی خود را دارید ، احتمالاً بسیار پیشرفته تر از ما ، و احتمالاً به طور متفاوت با معماری متفاوت. پس از درک کلی و راهنمای زیر ، به راحتی خواهید توانست به همه داده ها دسترسی پیدا کنید.
با این حال ، ممکن است شما کامپیوترهای فرومایه تری نسبت به ما داشته باشید ، یا حتی اصلاً رایانه نداشته باشید. در صورت بروز چنین اتفاقی ، ما یک حلقه داده فشرده نشده ، بدون کد ، قابل خواندن توسط انسان آماده کرده ایم که آن را درخت Tech می نامیم. Tech Tree شامل اطلاعاتی در مورد فن آوری های اساسی ، رایانه ها و نرم افزارهای ما است ، به این امید که با گذشت زمان ، بتوانید این دانش را برای ایجاد مجدد رایانه هایی که می توانند از نرم افزار منبع آزاد موجود در این بایگانی استفاده کنند ، مشاهده کنید.
بایگانی بسیار بزرگ است - تقریباً 21 تریلیون بایت (توضیح داده شده در زیر) - زیرا بسیار فراگیر و دموکراتیک است. میلیون ها نفر از مردم نرم افزاری را که می نویسند در دسترس همه قرار می دهند. این بایگانی شامل یک عکس فوری - یعنی یک نسخه واحد ، در یک لحظه از زمان - از کل نرم افزارهای عمومی است که کاربران GitHub به طور فعال در حال توسعه آن هستند. این بدان معناست که میلیون ها مخزن جداگانه را شامل می شود. امید ما این است که این رویکرد گسترده و دموکراتیک مورد توجه مورخان آینده باشد.
مخازن گنجانده شده در این بایگانی صرفاً براساس آخرین زمان انجام کار ، یعنی آخرین باری که به روز شده اند و تعداد ستاره آنها تعیین شده است. (کاربران GitHub همه می توانند مخازن عمومی را "ستاره دار" کنند ، تا نشان دهند که آنها برای آنها مورد توجه یا اهمیت هستند.) عکس فوری در 02/02/2020 ، یعنی در روز دوم ماه فوریه ، در سال 2020 تقویم میلادی ، همانطور که ما زمان را حساب می کنیم. مخازن گنجانده شده در آن عبارتند از: تمام مخازن با هرگونه تعهد در 80 روز گذشته ؛ تمام مخازن دارای حداقل یک ستاره با هرگونه تعهد در 365 روز گذشته ؛ و همه مخازن با حداقل 250 ستاره ، صرف نظر از آخرین به روزرسانی آنها.
البته همه این مخازن از نظر تأثیر و وابستگی از اهمیت یکسانی برخوردار نیستند. Tech Tree شامل فهرست و شرح مختصری از مهمترین مخازن موجود در بایگانی و لیستهایی است که هر کدام را می توان در آن یافت ، به طوری که بدون نیاز به مرور همه این میلیونها مخزن برای دستیابی به آنها می توان تعیین کرد که عملی ترین آنها است. مفید
بایگانی شامل 188 حلقه فیلم است: یکی "حلقه راهنما" از اطلاعات و راهنمایی های قابل خواندن توسط انسان ، که ما آن را درخت Tech می نامیم و 187 حلقه نرم افزار بایگانی شده. هر حلقه شامل 65000 فریم جداگانه است. فریم های ابتدای هر حلقه و فریم های حلقه راهنما شامل متن و تصاویر قابل خواندن توسط انسان است. تمام فریم های دیگر فیلم شامل داده های دیجیتالی است که به صورت تصویری معروف به کدهای QR ذخیره می شوند.
داده های دیجیتال به معنای داده هایی است که در نهایت در قالب باینری ذخیره می شوند ، یعنی به صورت 0 و 1 ، زیرا رایانه ها خود باینری هستند - توسط سیگنال های الکتریکی کنترل می شوند که "روشن" یا "خاموش" هستند ، مطابق با 1 یا 0 - و بنابراین داده های باینری درک آن برای کامپیوترها بسیار راحت تر از دیگران است.
فراداده های قابل خواندن توسط انسان ذخیره شده در ابتدای هر حلقه شامل اطلاعات مربوط به خود فیلم ، راهنمای رمزگذاری QR مورد استفاده ، یک برنامه نرم افزاری برای رمزگشایی آن و یک فهرست است. فهرست برای هر پرونده ذخیره شده در آن حلقه ، عنوان ، شماره قاب ابتدایی و مجمع کنترل را لیست می کند.
یک پرونده یک موجود واحد منسجم داده است. جمع کنترلی یک مقدار منحصر به فرد از محاسبه است که به عنوان تابع هش شناخته می شود و کل محتوای یک فایل را اجرا می کند تا اطمینان حاصل شود که محتوای آن آسیب ندیده یا خراب نشده است. عملکرد هش مورد استفاده در بایگانی به عنوان "SHA-1" شناخته می شود.
هر کد QR از یک میدان مربع کوچک یا سفید یا سیاه تشکیل شده است که تقریباً تمام قاب فیلم را اشغال می کند. ما از کدهای QR استفاده می کنیم زیرا بسیار فشرده و مقاوم تر از متن قابل خواندن توسط انسان هستند. کد QR به داده های باینری رمزگشایی می شود ، یعنی یک سری عدد و صفر.
این رمزگشایی تنها اولین قدم در تبدیل آن داده های باینری به اطلاعات معنی دار است. این داده های فشرده است ، به این معنی که برای صرفه جویی در فضا ، فشرده شده است ، شبیه نحوه نوشتن "128xA" به جای نوشتن نامه A 128 بار. پس از رمزگشایی ، باید از حالت فشرده خارج شود.
نتیجه پس از رفع فشار به عنوان یک پرونده بایگانی شناخته می شود: یک فایل منفرد حاوی تمام محتوای مخزن یک پروژه نرم افزاری منفرد. بیشتر مخازن دارای پرونده های زیادی هستند ، بنابراین این پرونده بایگانی مانند کتابی است که شامل بسیاری از فصل های جداگانه است ، یا یک جعبه است که شامل بسیاری از جعبه های دیگر است. بسته بندی فایل بایگانی در پرونده های م componentلفه آن قبل از دسترسی ، به طور کلی سودمند است ، اگرچه کاملاً ضروری نیست.
سرانجام ، هر پرونده م componentلفه مجموعه داده های باینری خاص خود است ، یعنی یک و صفر. اگر قالب را بدانید ، می توانید داده ها را معنا کنید. به عنوان مثال ، در قالب معروف به 'UTF-8' ، رایج ترین قالب در بایگانی ، صفرها و صفرها به گروههای هشت تایی تقسیم می شوند ، معروف به بایت ، بایت 01000001 حرف A را نشان می دهد. سه بایت 01101001 01101110 01110100 کلمه int را نشان می دهد. و دو بایت 11000011 10000011 حرف Ã را نشان می دهد (A با لهجه tilde در بالا.)
این فرایند بایگانی داده ها ، پرونده های باینری بسته بندی شده در پرونده های بایگانی که ابتدا فشرده شده و سپس با کد QR رمزگذاری شده اند ، در مقایسه با نوشتن متن قابل خواندن توسط انسان ، بدیهی است که پیچیده است. روند بایگانی بایستی انجام دهید - QR به باینری فشرده. فشرده به فشرده نشده بایگانی فایل در چندین پرونده. فایل های متنی به متن قابل خواندن توسط انسان - به همین ترتیب پیچیده است. به این دلیل که این پیچیدگی اجازه می دهداین فرایند بایگانی داده ها ، پرونده های باینری بسته بندی شده در پرونده های بایگانی که ابتدا فشرده شده و سپس با کد QR رمزگذاری شده اند ، در مقایسه با نوشتن متن قابل خواندن توسط انسان ، بدیهی است که پیچیده است. روند بایگانی بایستی انجام دهید - QR به باینری فشرده. فشرده به فشرده نشده بایگانی فایل در چندین پرونده. فایل های متنی به متن قابل خواندن توسط انسان - به همین ترتیب پیچیده است. به این دلیل که این پیچیدگی اجازه می دهدما می توانیم داده های بسیار بیشتری را از آنچه در غیر این صورت ممکن است ذخیره کنیم ، به روشی که به راحتی قابل خواندن توسط کامپیوتر است.
اگر این پیچیدگی برای شما دشوار و پرهزینه است ، از شما عذرخواهی می کنیم ، اما انتظار ما این است که در این صورت ، این راهنما و Tech Tree که توسط انسان قابل خواندن است ، این پیچیدگی را برطرف می کند و شاید برای شما مفیدتر از بایگانی باشد حداقل تا زمانی که رایانه های شما به اندازه کافی پیشرفته نباشند که با پیچیدگی داده های بایگانی به راحتی کار شود.
بحث در مورد چگونگی تقسیم منطقی بایگانی ممکن است آموزنده باشد. به طور خاص ، بحث در مورد پرونده ها ، دایرکتوری ها و قالب های داده احتمالاً مفید خواهد بود.
یک پرونده مجموعه ای از داده ها است که در یک موجودیت منسجم با یک اسم واحد قرار گرفته اند: داده ها را شن و ماسه بدانید ، و یک پرونده نوعی کیسه است که می تواند شن را در خود جای دهد و فقط شن و ماسه است. دایرکتوری مجموعه ای از پرونده هاست: آن را نوعی کیسه بدانید که فقط کیف های دیگر را در خود جای می دهد. به دنبال این استعاره ، هر مخزن متشکل از یک دایرکتوری خارجی است که به عنوان دایرکتوری ریشه شناخته می شود و شامل تعدادی پرونده و / یا تعدادی دایرکتوری است. هر دایرکتوری می تواند به نوبه خود شامل هر دو پرونده و خود دایرکتوری ها باشد.
این ساختار ترجیح داده می شود زیرا کار با پرونده هایی که در گروه ها سازمان یافته اند بسیار آسان تر از یک مجموعه از پرونده ها است. شناسه یک پرونده خاص در فهرست خارجی از نام همه فهرست های محصور آن تشکیل شده است ، که از ریشه شروع می شود و به دنبال آن نام شخصی خود قرار دارد و بین هر نام یک کاراکتر / وجود دارد. به عنوان مثال ، پرونده ای به نام README.md در دایرکتوری ریشه به عنوان /README.md و پرونده ای با عنوان /public/www/index.html شناسایی می شود پرونده index.html در پوشه "www" درون " فهرست عمومی 'در داخل دایرکتوری ریشه.
هر مخزن به نوبه خود دارای دو نام است که توسط یک تقسیم کننده از هم جدا شده اند ، که در بایگانی یک شخصیت _ یا خط زیر است. (از لحاظ تاریخی یک / یا بریده بریده بوده است ، اما از این برای نشان دادن فهرست استفاده می شود ، بنابراین برای وضوح از _ استفاده می کنیم.) نام اول حساب GitHub است که آن مخزن را در اختیار دارد. دوم نام مخزن جداگانه است. از ترکیب مخزن و شناسه های پرونده می توان برای شناسایی منحصر به فرد یک پرونده جداگانه در بایگانی استفاده کرد. به عنوان مثال ، پرونده "package.json" در دایرکتوری "web" در مخزن "ykarma" در حساب GitHub "rezendi" می تواند به صورت منحصر به فرد به عنوان /web/package.json در rezendi_ykarma در بایگانی شناسایی شود.
انواع مختلف پرونده ها اهداف مختلفی دارند. بایگانی GitHub عمدتا از پرونده های متنی تشکیل شده است ، به معنای پرونده هایی که داده های آنها برای نشان دادن زبان نوشتاری است. بیشتر نرم افزارها در پرونده های متنی حاوی متن بسیار ساختاری معروف به کد منبع نوشته می شوند. برنامه ویژه ای که به عنوان کامپایلر شناخته می شود ، آن کد منبع قابل خواندن توسط انسان را به دستورالعمل های قابل خواندن توسط کامپیوتر تبدیل می کند که به عنوان کد کامپایل شده یا کد ماشین شناخته می شود.
پرونده هایی که فایل متنی نیستند ، مانند پرونده هایی که تصاویر بصری را نشان می دهند یا حاوی کد کامپایل شده هستند ، اغلب به عنوان پرونده های باینری شناخته می شوند. متأسفانه این یک اصطلاح گمراه کننده است ، زیرا پرونده های متنی در نهایت 1s و 0s نیز هستند. ما به پرونده هایی که فایل متنی نیستند ، به عنوان پرونده های غیر متنی اشاره خواهیم کرد.
روش های زیادی برای نمایش زبان نوشتاری انسان با استفاده از 1 و 0 وجود دارد. به دلایل تاریخی ، بیشتر کد منبع در اصل با آنچه به خط لاتین معروف است نوشته شده است. خط لاتین دارای 26 نویسه اصلی است که برای نشان دادن کلمات قابل گفتار استفاده می شود ، که هر یک از آنها دارای دو شکل بزرگ و کوچک است. همچنین 10 رقم برای نمایش اعداد دارد. خط لاتین ، همراه با سایر نمادهای مرتبط دیگر که برای نشان دادن ساختار و سایر مفاهیم استفاده می شود ، در قالب های 1s و 0s با فرمت معروف به 'ASCII' رمزگذاری می شود ، که می تواند 128 کاراکتر مختلف را نشان دهد و به دلایل تاریخی سالها در اکثر نرم افزارها غالب بود .
با این حال ، خط لاتین فقط زیرمجموعه کوچکی از بسیاری از شیوه های بیان انسان به زبان نوشتاری است. برای پشتیبانی از اسکریپت های دیگر ، در عین حال که به تمام نرم افزارهایی که برای استفاده از ASCII نوشته شده بودند ، امکان ادامه کار بدون تغییر (مفهومی که به عنوان سازگاری رو به عقب شناخته می شود) ، قالب داده دیگری با نام "UTF-8" معرفی شد.
ASCII رایج ترین قالب کد منبع باقی مانده است. هر حلقه این بایگانی شامل راهنمایی برای نویسه های ASCII است. ASCII زیرمجموعه ای از UTF-8 است ، به عبارت دیگر ، همه رمزگذاری های ASCII نیز رمزگذاری UTF-8 هستند. حلقه راهنما علاوه بر این شامل مشخصات تمام نویسه های UTF-8 است. تقریباً تمام پرونده های متنی موجود در این بایگانی باید به صورت UTF-8 رمزگذاری شوند.
پرونده های غیر متنی شامل پرونده هایی هستند که به منظور نمایش تصاویر و اسناد قالب بندی شده اند. قراردادی که به طور گسترده مورد استفاده قرار می گیرد این است که نام پرونده ها با "" به پایان برسند. حرف و پسوندی نشان داده می شود که نوع پرونده را نشان می دهد. به عنوان مثال ، نام پرونده ای که با .jpg به پایان می رسد احتمالاً یک پرونده تصویری JPEG است. یکی که با .PNG به پایان می رسد احتمالاً یک پرونده تصویر گرافیکی قابل حمل در شبکه است. و یکی که با .pdf یک فایل قالب قابل حمل سند به پایان می رسد.
پسوند واحدی وجود نداردکه پرونده های متنی را نشان می دهد. در عوض ، برای کد منبع ، پسوند به احتمال زیاد نشان می دهد کد در کدام زبان برنامه نویسی یا نشانه گذاری نوشته شده است. زبانهای برنامه نویسی و نشانه گذاری با جزئیات بیشتر در زیر شرح داده می شوند.
در اینجا ما یک نمای کلی از چگونگی بسته بندی یک مخزن بایگانی شده خاص در پرونده های مختلف سازنده آن ارائه خواهیم داد. باز هم ، این روند شامل موارد زیر است:
-
شناسایی حلقه و فریم های خاصی که اطلاعات مخزن بر روی آنها بایگانی می شود.
-
رمزگشایی از کدهای QR ، قسمت های پیکسل های سیاه ، سفید و خاکستری روی آن فریم ها ، به یک فایل باینری ، دنباله ای (حداقل هزاران و اغلب میلیون ها) 1s و 0s.
-
باز کردن فایل باینری از یک پرونده بایگانی طولانی تر و فشرده نشده.
-
باز کردن فایل بایگانی در زیر پرونده های جداگانه ای که شامل آن است. با این حال توجه داشته باشید که داده های بایگانی به طور کلی قابل درک هستند ، اگرچه کثیف هستند ، حتی اگر این مرحله حذف شود.
5- سرانجام ، تبدیل هر یک از آن زیرفایل ها - خود توالی های 1s و 0s که ممکن است از بسیار کوتاه تا خیلی طولانی باشد - به کاراکترهای نوشته شده ، اگر پرونده های متنی باشند.
هر حلقه فیلم با یک رهبر فیلم خالی آغاز می شود ، و سپس فریم مرجع صفر ، که از یک مستطیل سیاه و سفید جامد در گوشه ای از یک قاب غیر خالی تشکیل شده است. قاب بعدی که توسط انسان قابل خواندن است ، Frame Control با اطلاعاتی در مورد حلقه است. در زیر آن فهرست مطالب آمده است که به نوبه خود لیستی از پرونده های داده کاربر را شامل می شود.
هر مخزن موجود در این حلقه یکی از آن پرونده های داده کاربر است. این لیست شامل یک شناسه منحصر به فرد ، یک شناسه پرونده و یک نام برای هر یک از آن پرونده ها است. به عنوان مثال ، در مخزن CPython حساب پایتون ممکن است شناسه پرونده با نام 12345 ذکر شده و نام با عنوان python_cpython.tar ذکر شده باشد.
در زیر لیست User Data Files لیستی از مکان های داده های دیجیتال وجود دارد. این لیست شامل شناسه پرونده ، یک قاب شروع ، یک بایت شروع ، یک قاب پایان و یک بایت پایان است. بنابراین ، با استفاده از مثال فرضی CPython ، ممکن است مورد موجود در این لیست با شناسه 12345 دارای قاب شروع 054321 ، بایت شروع 03210321 ، قاب انتهایی 054545 و بایت پایان 12321232 باشد.
این بدین معنی است که برای دریافت داده های CPython: به قاب 54321 این حلقه فیلم بروید. تمام فریم ها را از قاب آغازین ، 54321 ، تا قاب انتهایی ، 54545 ، به مقادیر باینری رمزگشایی کنید ، با این روش که در زیر توضیح داده شده است. با این کار 225 قطعه داده با شماره 54321 تا 54545 به شما ارائه می شود که با مجموعه ای از قطعات خالی بدون داده آغاز می شود. 3210320 بایت اول را در اولین داده غیر خالی کنار بگذارید. به ترتیب همه داده های "میانی" را اضافه کنید. سرانجام ، 12321232 بایت را از آخرین داده 54545 اضافه کنید. اکنون مخزن کامل CPython را به عنوان یک فایل بایگانی فشرده جمع کرده اید.
جزئیات نحوه رمزگشایی فریم های فیلم به داده های دودویی در اطلاعات نمایشی قابل خواندن توسط انسان یافت می شود که در زیر فهرست مطالب در ابتدای هر حلقه فیلم موجود در بایگانی یافت می شود. این اطلاعات در هر حلقه یافت می شود تا حتی اگر یک حلقه جداگانه از بایگانی جدا شود ، رمزگشایی از محتوای آن همچنان امکان پذیر است. این اطلاعات نمایندگی به ترتیب شامل:
-
راهنمای برنامه بایگانی GitHub (این سند)
-
فهرست توصیفی GitHub ، یک لیست و شرح مختصر از تمام مخازن موجود در این حلقه
-
نمایندگی شرح اطلاعات
-
حفظ دیجیتال و نحوه بازیابی اطلاعات ، مروری بر جزئیات بازیابی داده ها
-
ذخیره سازی توضیحات متوسط
-
فناوری بازیابی اطلاعات
-
ساختار محافظ عمومی (حلقه قالب)
-
عمومی توضیحات قالب 4K Frame
-
جعبه گشایی شرح کتابخانه (برای کدهای QR)
-
جعبه گشودن کد منبع کتابخانه
-
مشخصات قالب داده ASCII
-
مشخصات زبان برنامه نویسی C
-
کد منبع فایل بایگانی TAR
-
کد منبع PDF
-
مشخصات قالب فایل XZ (برای فشرده سازی / رفع فشار ، شرح داده شده در زیر)
ششم این موارد ، سند فناوری بازیابی داده ها ، الزامات و فرایندهای استفاده از اسکنر را برای گرفتن داده ها در یک قاب فیلم دیجیتالی رمزگذاری شده و تبدیل آنها به یک فرم قابل تجزیه و تحلیل رایانه توصیف می کند. در مورد هشتم آنها ، توضیحات قالب فرمت 4K Frame Generic ، اطلاعات فنی از جمله کد منبع مورد نیاز برای رایانه برای تهیه چنین تصویری اسکن شده و تبدیل آن به داده های باینری فراهم می شود.
در اصل ، از نظر تئوری ، تبدیل مخزن از داده های کد شده با QR به داده های باینری بدون استفاده از رایانه امکان پذیر است. با این وجود ، این کار بسیار دشوار است و احتمالاً به تلاش قابل توجهی از یک جامعه کاملاً سازمان یافته در طی هفته ها ، اگر نه ماه ها یا سال ها ، نیاز داشته باشد. از آنجا که محتوای مخازن نرم افزاری است که برای اجرا در رایانه در نظر گرفته شده است ، در بهترین حالت استفاده از آنها در غیاب رایانه حداقل خواهد بود.
در صورتی که وارثان این بایگانی این کار را نکنندرایانه دارند ، آنها باید بایگانی را کامل و ایمن نگه دارند تا زمانی که این کار را انجام دهند. یکی از اهداف Tech Tree که توسط انسان قابل خواندن است ، کمک به تسریع در توسعه فناوری ها و رایانه ها در صورت بروز این شرایط است. (هدف دیگر آن رمزگذاری فناوری و توسعه آن برای مورخان آینده است).
فایل باینری برای هر مخزن در فرمت معروف به TAR برای Tape Archive است. یک فایل TAR اساساً با گروه بندی تعدادی از پرونده ها با اتصال انتهای یکی به ابتدای بعدی ، مانند چسباندن تکه های کاغذ به هم در یک پیمایش واحد ، تشکیل می شود. یک فایل TAR می تواند شامل هر تعداد پرونده ، از هر اندازه ، به هر تعداد دایرکتوری و زیر شاخه تقسیم شود.
هر زیرفایل درون یک فایل TAR با یک رکورد هدر 512 بایت مقدمه می شود ، که مانند نوار در استعاره پیمایش عمل می کند. این رکورد هدر شامل اطلاعات مربوط به پرونده ، مانند نام و اندازه آن است. انتهای بایگانی حداقل با دو بلوک 512 بایت پشت سر هم نشان داده می شود.
از آنجا که پرونده های TAR در واقع فقط مجموعه ای از پرونده ها هستند که پرونده های متنی بین آنها وجود دارد ، اگر یک فایل TAR شامل همه پرونده های متنی باشد ، می توان به عنوان یک فایل متنی با آن رفتار کرد. اگر حاوی ترکیبی باشد ، می توان آن را به عنوان یک پرونده متنی که حاوی ترکیبی از متن ساختارمند ، معنی دار (پرونده های متنی تشکیل دهنده) و برهم زدن نامفهوم (پرونده های غیر متنی تشکیل دهنده) است ، تلقی کرد.
امکان قرار دادن پرونده های TAR در داخل پرونده های TAR ، یک ظرف در داخل ظرف دیگر وجود دارد و به این ترتیب بیشتر داده های بایگانی شده ما ذخیره می شوند. برای هر مخزن داده شده ، فایل TAR خارجی حداقل شامل:
- یک پرونده فراداده ای تک فشرده نشده به نام META ، که شامل نام مخزن ، نام حساب ، توضیحات ، زبان ، تعداد ستاره و تعداد چنگال است
- یک فایل فشرده (زیر را ببینید) به نام COMMITS ، که شامل گزارش تغییرات ایجاد شده در مخزن با گذشت زمان است
- فایلی به نام repo.tar.xz ، یک فایل TAR فشرده شده که حاوی محتوای واقعی مخزن است
فراداده های دیگر ، مانند ویکی ها ، صفحات gh ، مشکلات و درخواست های کشش ، همچنین ممکن است به عنوان پرونده های فشرده جداگانه باشند.
جزئیات خاص پرونده های TAR و نرم افزار رمزگذاری و رمزگشایی آنها را می توان در اطلاعات نمایندگی در هر حلقه بایگانی یافت.
به منظور گنجاندن هرچه بیشتر مخازن و هرچه بیشتر داده ها ، بیشتر داده ها فشرده شده اند. فشرده سازی به معنای استفاده از مقدار کمی از داده برای نشان دادن مقدار بیشتری است ، با استفاده از الگوها و تکرار در آن مقدار بیشتر. به عنوان مثال ، به جای اینکه شخصیت را 9 بار پشت سر هم بنویسید ، می توانید متن فشرده 9a را بنویسید ، اگر کسی اطمینان داشت خواننده می فهمد که منظور 9a متن فشرده نیست aaaaaaaaaa.
الگوریتم های فشرده سازی موثر بسیار پیچیده تر از آن هستند ، اما همین اصل اعمال می شود. این بایگانی از یک برنامه فشرده سازی معروف به 'XZ' استفاده می کند ، که به نوبه خود از الگوریتمی موسوم به 'LZMA' استفاده می کند. پرونده دوم داده ها در هر حلقه شامل کد منبع و مستندات XZ در یک فایل بایگانی TAR فشرده نشده است که در زیر توضیح داده شده است. (اولین پرونده داده شامل اعلامیه جهانی حقوق بشر در هر زبان مکتوب انسانی موجود است.)
LZMA ترکیبی از مواردی است که به عنوان الگوریتم 'LZ77' و "کدگذاری دامنه" شناخته می شوند. LZ77 با مراجعه به ظواهر قبلی آن داده ها ، داده های مكرر را جایگزین می كند. به عنوان مثال ، برای ساده سازی بیش از حد ، اگر یک عبارت 80 بایت دو بار ، 400 بایت از هم جدا شود ، بار دوم ، الگوریتم اساساً داده ها را با گفتن "تکرار 80 بایت از 400 بایت قبل" فشرده می کند. رمزگذاری محدوده اساساً کل پیام را به یک عدد بسیار طولانی تبدیل می کند که به نوبه خود می تواند رمزگذاری شود.
مراحل خاص الگوریتم مورد استفاده برای فشرده سازی داده ها توسط کد منبع XZ موجود در فایل داده دوم در هر حلقه توصیف می شود. گرچه از نظر تئوری می توان با فشار از حالت فشرده خارج شد ، اما این یک فرایند فوق العاده وقت گیر و کارگر است. در عمل ، یک کامپیوتر در حال کار فراخوانی می شود.
بشریت در طول هزاره ها از شخصیت های نوشتاری بسیاری استفاده کرده است. رمزگذاری مورد استفاده برای نشان دادن این نویسه ها به عنوان 1 و 0 در این بایگانی به عنوان "UTF-8" شناخته می شود. یک کاراکتر UTF-8 ، یعنی یک نماد منفرد نوشته شده ، می تواند از 1 تا 4 بایت داده باینری را اشغال کند.
به دلایل تاریخی ، از آنجا که آنها بیشترین کاربرد را در زمان و منطقه ای داشتند که در آن و زمانی که تولید نرم افزار آغاز شده است ، گروهی از شخصیت ها (و مفاهیم) معروف به "ASCII" با حداکثر 1 بایت برای هر کاراکتر رمزگذاری می شوند. هر چیزی که ASCII نباشد به عنوان 2 بایت یا بیشتر برای هر کاراکتر رمزگذاری می شود. بیشتر پرونده های متنی در این بایگانی ASCII هستند ، اما تعداد قابل توجهی از آنها نیستند. موارد دیگر بیشتر ASCII با نویسه های گاه به گاه غیر ASCII خواهند بود.
مشخصات دقیق ASCII را می توان در اطلاعات نمایندگی در هر حلقه بایگانی یافت.مشخصات دقیق UTF-8 را می توان در حلقه راهنما یافت. اولین پرونده داده در هر حلقه بایگانی حاوی متن اعلامیه حقوق بشر به هر زبان نوشتاری موجود است. این هم به عنوان یک ابزار ترجمه و هم به عنوان نمونه ای از ASCII و UTF-8 عمل می کند.
انواع متنوعی از پرونده های متنی وجود دارد که به دلایل مختلف ایجاد شده اند. نوع اصلی در اینجا ، دلیل وجود این بایگانی ، کد منبع است. کد منبع متنی بسیار متراکم و کاملاً ساختار یافته است که در آن نمادهایی مانند '{' و '؛' اهمیت زیادی دارند
نکته اصلی در مورد کد منبع این است که برای نوشتن توسط کامپایلرها نوشته شده است. از آنجا که کامپایلرها نرم افزاری هستند ، روش دیگر عبارت سازی این است که کد منبع برای خواندن توسط رایانه ها نوشته شده است. کد خوب نیز نوشته شده است تا سایر انسانها ، اگر در زمینه نرم افزار ماهر و تحصیل کرده باشند ، بتوانند آن را درک کنند. اما فقط در صورتی درست است که یک کامپایلر بتواند آن را درک کند.
این کامپایلر به نوبه خود ، از طریق توالی های پیچیده ای که در Tech Tree شرح داده شده ، کد منبع را به توالی های یک و صفر تبدیل می کند که باعث می شود رایانه عملکردها و فعالیتهای توصیف شده توسط کد را انجام دهد. برای مثال بسیار ساده ، خط کد
_ برای (int i = 0؛ i <5؛ i ++) {} _
توسط کامپایلر به یک سری دستورالعمل های دودویی به کامپیوتر تبدیل می شود ، که باعث می شود قسمت کوچکی از رایانه ، به نام رجیستر ، مقدار آن را روی 0 تنظیم کند و متعاقباً آن مقدار را به 1 ، 2 ، 3 ، و سپس 4. (این به عنوان نمونه ای از کد مفید در نظر گرفته نشده است ؛ بلکه فقط تصویری از مراحل چند لایه تبدیل کد منبع به نرم افزار در حال اجرا است.)
انواع دیگری از پرونده های متنی مانند JSON ، XML و HTML برای ذخیره داده ها (در مقابل دستورات) برای رایانه استفاده می شود. به طور کلی برای انسان قابل خواندن است ، اگرچه قالب های ساختاری آن خواندن را از متن داستان نویسی با ساختار کمتر مانند این پرونده دشوارتر می کند.
بیشتر انواع دیگر پرونده های متنی در نظر گرفته شده اند تا در نهایت توسط انسان خوانده شوند. برخی از آنها متن ساده ، عمدتا بدون ساختار هستند ، مانند این پرونده ای که در حال حاضر می خوانید. نوعی که به طور گسترده در بایگانی با آن روبرو خواهید شد ، Markdown است که با پسوند .md به یک فایل نشان داده می شود ، که نوعی فرم متوسط است که به منظور خواندن توسط انسان به صورت خام و همچنین در عین حال ، به گونه ای ساختار یافته است که رایانه ها می توانند آنها را به چیدمان های جذاب تر از نظر بصری و مفید تبدیل کنند. بیشتر مخازن موجود در این بایگانی دارای یک پرونده README.md Markdown است که به طور کلی به عنوان معرفی اولیه مخزن توصیف می شود ، اینکه چیست ، چرا وجود دارد و چگونه از آن استفاده کنید.
مروری کوتاه بر رایج ترین اشکال پرونده های غیر متنی نیز ممکن است مفید باشد. کد وارد شده غیرمتنی است. فایل های JPG و PNG تصاویر را در قالب دیجیتال و MP3 و WAV را رمزگذاری صدا می کنند. فایل های PDF اسناد را با قالب بندی دقیق و کامل رمزگذاری می کنند. و فایل های ZIP و TAR ، همانطور که قبلاً ذکر شد ، پرونده های کانتینری هستند که ممکن است به نوبه خود شامل یک یا چند پرونده دیگر باشند.
هزاران زبان نوشتاری که امروزه بشریت از آنها استفاده می کند و حتی زبانهای گفتاری بیشتر وجود دارد. بیشتر آنها فقط توسط جمعیت نسبتاً کم استفاده می شود ، اما حداقل بیست زبان وجود دارد که حداقل 60 میلیون نفر به عنوان زبان اول یا دوم استفاده می کنند.
زبان های پرکاربرد در جهان انگلیسی و چینی است. به دلایل تاریخی ، سالها بیشتر توسعه نرم افزار در کشور های انگلیسی زبان اتفاق افتاده بود ، بنابراین برای مدتی انگلیسی زبان پیش فرض نرم افزار شد. بیشتر زبان های برنامه نویسی از کلمات انگلیسی در نحو خود استفاده می کنند. این زبانی است که این راهنمای بایگانی برای اولین بار با آن نوشته شده است.
تضمین شده نیست که وراث این بایگانی انگلیسی را بدانند ، اگرچه به نظر می رسد که یک زبان بخصوص تا بی نهایت دوام داشته باشد. در صورت مفید بودن برخی از راهنمایی ها به زبان های دیگر ، ما بیش از 500 ترجمه موجود در اعلامیه جهانی حقوق بشر را به عنوان یک پرونده UTF-8 فشرده نشده در ابتدای هر حلقه و همچنین در Tech Tree آورده ایم. این اعلامیه لیستی از حقوق و آزادی های هر انسانی در عصر ما است که هرگز نباید سلب شود.
زبان های برنامه نویسی به زبان هایی گفته می شود که بشر برای برقراری ارتباط با رایانه از آنها استفاده می کند. آنها زبانهایی هستند که نرم افزار در آنها بیان می شود. سایر انسانهای (آموزش دیده) نیز باید بتوانند نرم افزار نوشته شده به زبانهای برنامه نویسی را بخوانند ، اما این یک هدف ثانویه است.
زبان برنامه نویسی مجموعه ای از عناصر از پیش تعریف شده است که اکثر آنها کلمات هستند و می توان آنها را به صورت ساختاری مرتب کرد تا به کامپیوتر دستور دهد عمل مشخص شده را به روش مشخص انجام دهد. مجموعه ای از این دستورالعمل ها به عنوان یک برنامه یا کد منبع شناخته می شوند. کد منبع در اصل یک نرم افزار به صورت منجمد و نوشته شده است.
برنامه ها عموماً به مراحل گسسته ، معروف به دستورات تقسیم می شوند که به نوبه خود با هم در Col قرار می گیرندانتخاب هایی که به عنوان توابع شناخته می شوند. یک برنامه کامل ممکن است در یک پرونده باشد یا در هزاران مورد پخش شود.
صدها زبان برنامه نویسی مختلف وجود دارد که در اشکال ، روش ها و فلسفه های مختلف گسترش یافته است. برخی از آنها در پرونده های باینری جداگانه ای گردآوری شده و سپس اجرا می شوند. برخی از آنها ، به عنوان زبانهای "تفسیر شده" شناخته می شوند ، بطور م compثر و بدون مرحله موقت ، یکجا جمع می شوند و اجرا می شوند. اکثر زبان های برنامه نویسی مدرن شامل کتابخانه هایی از توابع از پیش نوشته شده هستند و چنین کتابخانه هایی می توانند بسیار حجیم و مفصل باشند. برخی از محبوب ترین زبان های برنامه نویسی امروزی عبارتند از:
-
C ، یکی از قدیمی ترین و سریع ترین ، جهانی ترین و قدرتمندترین زبان ها ، از بعضی جهات ساده اما از بعضی موارد کاملاً محدود ، و همیشه بصری ، خواندن آسان یا یادگیری آسان نیست.
-
C ++ ، تکامل پیچیده تر ، انتزاعی و قدرتمندتر C
-
C # ، یک تکامل بیشتر که نه در کد ماشین باینری بلکه در "زمان اجرا" تفسیر شده است.
-
جاوا ، که شبیه C # (اما قبل از آن) است ، شاید پرکاربردترین زبان امروزی باشد.
-
جاوا اسکریپت ، برخلاف جاوا علی رغم شباهت نام ، و همچنین به عنوان "ECMAScript" نیز شناخته می شود ، زبانی است که در ابتدا به طور کامل در یک مرورگر وب استفاده می شود ، یعنی برنامه ای که از یک کامپیوتر از راه دور معروف به اینترنت داده می شود ، تفسیر و نمایش داده می شود سرور امروزه ، به طور گسترده ای در آن سرورها نیز استفاده می شود.
-
TypeScript ، نوعی جاوا اسکریپت با قوانین سختگیرانه تر ، به طوری که خطاهایی که به آنها باگ نیز می گویند ، کمتر به برنامه ها راه پیدا می کنند.
-
پایتون ، زبانی ظریف و محبوب بین دانشمندان ، هم قدرتمند و هم زبان اول خوب.
-
روبی ، زبانی بصری که اغلب جملات آن تقریباً شبیه انگلیسی نوشته شده است.
-
Go ، یک زبان ساده و قدرتمند که به ویژه در برنامه های موازی ، از جمله برنامه هایی که به گونه ای نوشته شده اند که چندین توابع همزمان به طور مستقل اجرا می شوند ، بسیار عالی است.
-
سوئیفت ، زبان جدیدی است که برای تلفن و سایر دستگاه های مورد استفاده یک میلیارد نفر استفاده می شود.
-
Rust ، به عنوان جایگزینی برای C در نظر گرفته شده است ، اشکالی که خطرناک تر است و احتمال آن بسیار کم است.
-
PHP ، یک زبان ساده است که برای سرورهای اینترنتی استفاده می شود.
-
Lisp ، یک زبان بسیار قدیمی با رویکرد کاملاً متفاوت ، اولین عملکرد برنامه نویسی.
-
SQL ، نوع بسیار متفاوتی از زبان است که برای واکشی داده ها از ذخیره سازی ساختار یافته و بسیار کارآمد داده ها که به عنوان پایگاه داده شناخته می شوند ، استفاده می شود.
-
اسمبلر (یا مونتاژ) ، خانواده ای بسیار رمزآلود ، محدود ، اما سریع و قدرتمند که در آن بین ساختارهای زبان و کد ماشین رایانه موردنظر رابطه مستقیمی وجود دارد. ممکن است کد نیمه کامپایل شده در نظر گرفته شود.
روند گرفتن یک فایل کد منبع ساده و ساده و تبدیل آن به تکانه های الکتریکی در کامپیوتر بسیار پیچیده است. ما با استفاده از لایه های انتزاع با این پیچیدگی مقابله می کنیم. انتزاعی که به عنوان مجموعه دستورالعمل شناخته می شود این امکان را می دهد که کد ماشین خروجی از یک کامپایلر در انواع مختلف رایانه مورد استفاده قرار گیرد. نویسنده کد منبع معمولاً نیازی به دانستن یا مراقبت از اینکه از چه نوع رایانه ای یا حتی مجموعه دستورالعمل هایی برای اجرای آن کد استفاده می شود ، ندارد. این توسط کامپایلر چکیده شده است.
نرم افزار مدرن به نوبه خود بسیار پیچیده تر از یک نویسنده است که روی یک برنامه واحد برای یک رایانه کار می کند. این متشکل از بسیاری از نویسندگان است که روی بسیاری از پرونده ها در یک پروژه کار می کنند ، به طور همزمان ، اغلب از چندین زبان برنامه نویسی استفاده می کنند. بعلاوه ، هر پروژه ای به عنوان ابزار و / یا م componentsلفه های دیگر به پروژه های جداگانه و خودكار بستگی دارد ، در حالی كه این پروژه ها به طور فعال در حال كار هستند و به نوبه خود به پروژه های دیگری نیز وابسته هستند. چالش توسعه نرم افزار مدرن ساختن همه این قطعات متحرک با زیبایی و کارآیی در کنار یکدیگر است.
وقتی چندین نویسنده کد منبع ، که به عنوان توسعه دهندگان نرم افزار نیز شناخته می شوند ، روی یک پروژه کار می کنند ، هرکدام رایانه خود را دارند و یک نسخه از کل پروژه را در رایانه خود دارند. اگر هرکدام تغییراتی ایجاد کنند ، هر یک نسخه متفاوتی از یک پروژه دارند. روند سازگاری چندین نسخه از یک پروژه به عنوان کنترل نسخه شناخته می شود. توسط نرم افزار کنترل نسخه مدیریت می شود. در این بایگانی ، توسط نرم افزاری به نام Git ، که پس از آن GitHub نامگذاری شده است. هر مخزنی در این بایگانی یک مخزن Git است.
Git می تواند به طور خودکار نسخه های مختلف نرم افزار را با هم در یک شکل منسجم و با حداقل دخالت انسان در آن ادغام کند. Git همچنین یک تاریخچه کامل را نگهداری می کند که به شما امکان می دهد در هر زمان که لازم بود به نسخه قبلی برگردید. با این حال ، به منظور صرفه جویی در فضا ، مخازن این بایگانی معمولاً شامل تاریخچه های Git نیستند.
وقتی چندین توسعه دهنده پروژه را به طور همزمان در چندین مسیر مختلف طی می کنند ، این به عنوان انشعاب یک پروژه شناخته می شود و این مسیرها به عنوان شاخه شناخته می شوند. شاخه اصلی مورد توافق یک پروژه به عنوان تنه یا شاخه اصلی شناخته می شود. Git فراهم می کند که سازندگان می توانند از آن برای جمع بندی تفاوت بین آنها استفاده کننددو شاخه را پیشنهاد می دهند و آنها را به شاخه دیگر بپیوندید. این به عنوان درخواست جلب شناخته می شود. توسعه نرم افزار مدرن عمدتاً شامل انشعاب دادن به یک پروژه ، نوشتن یا ویرایش نرم افزار بر روی شاخه شما و ، پس از اتمام ، ارسال درخواست جلب درخواست برای کار مجدداً در شاخه اصلی است.
اساساً هر زبان برنامه نویسی از ساختن کار دیگران پشتیبانی می کند. بدون استفاده مجدد از کار دیگران ، هر پروژه بسیار دشوارتر ، و بسیار کندتر ، و به طرزی ناچیز تعداد کمی از پروژه ها شاهد استفاده واقعی در دنیای واقعی هستند.
اگر پروژه A برای انجام کار A نیاز به شامل پروژه B داشته باشد ، A به عنوان وابسته به پروژه B شناخته می شود ، و B به عنوان وابستگی به پروژه A شناخته می شود. A می تواند وابستگی های زیادی داشته باشد ، که هر یک از آنها می تواند بسیاری داشته باشد وابستگی خودشان ، و غیره. بعلاوه ، هر وابستگی مربوط به یک نسخه خاص یا طیف وسیعی از نسخه های یک پروژه معین است. تقسیم بندی کامل تمام لایه های متعدد وابستگی پروژه به عنوان درخت وابستگی آن شناخته می شود.
به طور کلی ، وابستگی ها در داخل فایل های کد منبع ، معمولاً در بالا قرار می گیرند و هر بار که کامپایلر یا مفسر وابستگی پیدا می کند ، آن را در مجموعه ای از فهرست های از پیش تعریف شده جستجو می کند. از آنجا که درخت وابستگی برای یک پروژه می تواند بسیار پیچیده باشد ، گاهی اوقات به طور کامل در یک پرونده در یک پروژه مشخص می شود که به عنوان یک لیست بسته شناخته می شود. به عنوان مثال ، پروژه های Ruby ممکن است دارای یک Gemfile برای این منظور باشند و پروژه های JavaScript ممکن است دارای یک فایل package.json باشند. این اجازه می دهد تا نوعی از ابزار معروف به نرم افزار مدیریت بسته ، همه وابستگی های یک پروژه را از یک یا چند سرور اینترنتی به یکباره واکشی کند.
در مورد این بایگانی ، احتمالاً وابستگی برای هر پروژه مشخص در جای دیگری از بایگانی وجود دارد. برای یافتن وابستگی در بایگانی ، ابتدا باید نام وابستگی را در کد منبع یا لیست بسته کشف کنید ، جزئیات دقیق آن بر اساس زبان و چارچوب متفاوت است و سپس از شاخص اصلی در حلقه راهنما استفاده کنید ، یا در غیاب آن ، نمایه های جلوی هر قرقره تعیین می شود که مخزن مورد نظر در کدام حلقه ها و قاب ها یافت می شود.
از آنجا که اجرای یک برنامه در رایانه فقط به کد ماشین کامپایل شده نیاز دارد ، می توان ضمن مخفی نگه داشتن کد منبع ، آن را توزیع کرد. این به عنوان مدل منبع بسته شناخته می شود. در روزهای ابتدایی محاسبات ، کد منبع معمولاً همراه با کد ماشین خود توزیع می شد ، اما متعاقباً ، با تبدیل شدن نرم افزار به یک صنعت سودآور ، مدل منبع بسته رایج شد.
از آن زمان آموخته شده است که عمومی ساختن کد منبع ، برای کپی کردن ، انشعاب و بهبود هر کسی ، رویکرد بسیار م moreثرتری برای توسعه نرم افزار است. افراد بیشتری که می توانند کد منبع یک پروژه را بخوانند ، به معنای افراد بیشتر برای شناسایی نیازهای احتمالی و ویژگی های مفید جدید ، تعداد بیشتری از افراد است که پروژه را به اندازه کافی برای کمک به آن درک می کنند ، افراد بیشتری که ممکن است اشکالات را مشاهده کنند و رفع مشکلات را ارائه دهند ، و افراد بیشتری برای آزمایش و تأیید وجود دارند کد جدید کار می کند
به طور کلی ، منبع بسته منجر به جوامع پراکنده ، جزیره ای و کوچکتر می شود که برای یافتن و اتخاذ ایده های جدید و بهتر تلاش می کنند. منبع آزاد منجر به ایجاد اجتماعات بزرگ و بهم پیوسته ای می شود که هر یک از آنها به رشد و شکوفایی و موفقیت پروژه های یکدیگر کمک می کنند ، از کار یکدیگر به عنوان وابستگی و / یا استفاده مجدد از کد خود استفاده می کنند و از یکدیگر یاد می گیرند. نرم افزار منبع آزاد یک ابزار برای استفاده جمعی از کل بشریت است و هرچه ابزارهای بیشتر و بهتری داشته باشیم ، می توانیم به عنوان یک گونه ، سریعتر و بهتر پیشرفت کنیم.