توسعه-نرم افزار-متن باز

### نرم افزار متن باز
**نرم‌افزار متن‌باز** (به انگلیسی: *Open-source software* یا به‌اختصار OSS)، به نرم‌افزاری اطلاق می‌شود، که کد منبع آن به‌صورت عمومی در دسترس است و هر کسی می‌تواند آن را مشاهده، استفاده، اصلاح و توزیع کند. این نوع نرم‌افزار بر پایه‌ی همکاری، شفافیت، شمول‌پذیری و به‌روزرسانی‌های عمومی و مشارکتی توسعه می‌یابد.نرم‌افزار متن‌باز برخلاف نرم‌افزارهای مالکیتی یا بسته‌ای عمل می‌کند که دسترسی به کد منبع آن‌ها محدود است و کاربران مجاز به تغییر یا بازتوزیع آن نیستند، مگر با اجازه‌ی صریح صاحب‌امتیاز.

### تاریخچه
تا دهه ۱۹۷۰، نرم‌افزارها معمولاً همراه با سخت‌افزار و بدون محدودیت حق‌نشر ارائه می‌شدند و اشتراک‌گذاری کد امری رایج بود. اما در سال ۱۹۷۴، کمیسیونی در ایالات متحده اعلام کرد که کد نرم‌افزار نیز می‌تواند مشمول قوانین حق‌نشر شود. این تصمیم، زمینه‌ساز گسترش صنعت نرم‌افزارهای مالکیتی شد.در واکنش به محدودیت‌های نوظهور، «ریچارد استالمن» در سال ۱۹۸۳ بنیاد نرم‌افزار آزاد (FSF) را بنیان نهاد و پروژه‌ی گنو را برای ارائه‌ی جایگزین آزاد به سیستم‌عامل یونیکس آغاز کرد. او همچنین مجوز عمومی گنو (GPL) را معرفی کرد که انتشار و تغییر نرم‌افزار را تنها در صورت حفظ آزادی کاربران مجاز می‌دانست.

در سال ۱۹۹۷، «اریک اس. ریموند» با انتشار مقاله‌ی معروف *[[کلیسای جامع و بازار|کلیسا و بازار]]* تفاوت‌های بنیادین میان توسعه‌ی بسته و متن‌باز را تبیین کرد. این مقاله الهام‌بخش شرکت‌هایی مانند Netscape بود تا بخشی از کدهای خود را به‌صورت متن‌باز عرضه کنند. به‌دلیل سوءبرداشت عمومی از عبارت «نرم‌افزار آزاد» (که گاهی به‌اشتباه رایگان تعبیر می‌شد)، اصطلاح «متن‌باز» (Open-source) در سال ۱۹۹۹ توسط سازمان *Open Source Initiative* معرفی و ترویج شد.

### مدل توسعه نرم‌افزار متن‌باز
در توسعه‌ی متن‌باز، مدل فرایند–داده با ساختاری مشارکتی و تکرارشونده تعریف می‌شود. برخلاف مدل‌های سنتی مانند مدل آبشاری که فرایندی خطی دارند، در متن‌باز نیازمندی‌ها اغلب از طریق نسخه‌های اولیه مشخص می‌شوند و بازخورد جامعه، توسعه‌ی نرم‌افزار را شکل می‌دهد.

اریک ریموند توسعه‌ی سنتی را به ساخت کلیسا و توسعه‌ی متن‌باز را به بازار پرهیاهو تشبیه می‌کند. در مدل اول، برنامه‌ریزی و مدیریت مرکزی غالب است، درحالی‌که در مدل دوم، هماهنگی از دل مشارکت داوطلبان پدید می‌آید.

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

### آغاز یک پروژه متن‌باز
روش‌های مختلفی برای شروع یک پروژه متن‌باز وجود دارد:

* اعلام عمومی نیاز به توسعه‌ی یک نرم‌افزار
* انتشار نسخه‌ی اولیه‌ی یک نرم‌افزار کارا
* عمومی‌سازی کد منبع یک پروژه بالغ
* منشعب کردن (Fork) پروژه‌ای موجود و شناخته‌شده

مطالعات نشان می‌دهد که پروژه‌هایی که با نمونه‌ی اولیه‌ی قابل استفاده آغاز می‌شوند، شانس بیشتری برای جذب مشارکت‌کنندگان دارند. همچنین توصیه می‌شود قبل از آغاز پروژه‌ای جدید، گزینه‌های موجود بررسی شوند تا از پدیده‌ی «نه از اینجا» (NIH) پرهیز شود.

#### انواع پروژه‌های متن‌باز
پروژه‌های متن‌باز در چند دسته‌ی اصلی طبقه‌بندی می‌شوند:

* **برنامه‌ها     و کتابخانه‌های نرم‌افزاری**: مانند هسته‌ی لینوکس، مرورگر فایرفاکس، و LibreOffice.
* **توزیع‌ها**:     مانند Debian، Ubuntu، و Fedora.
* **پروژه‌های     سیستم‌عامل کامل**: همچون مشتقات BSD.
* **پروژه‌های     مستندسازی و کتاب‌های فنی**: مانند پروژه‌های موجود در Documentation Project لینوکس.

###### روش‌ها و متدولوژی‌ها
در توسعه‌ی متن‌باز، متدولوژی‌های انعطاف‌پذیر مانند نمونه‌سازی سریع، توسعه‌ی تدریجی، چرخه مارپیچ، برنامه‌نویسی مفرط (XP) و روش‌های چابک کاربرد گسترده‌ای دارند. این روش‌ها با ماهیت تکرارشونده‌ی توسعه‌ی متن‌باز هم‌راستا هستند.

عبارت «توسعه با سرعت اینترنت» نشان می‌دهد که تیم‌های توزیع‌شده در سراسر جهان می‌توانند با استفاده از ابزارهای ارتباطی، پروژه را به‌صورت همزمان و پیوسته توسعه دهند.

### ابزارهای متن‌باز

### ارتباط و هماهنگی

* ایمیل و فهرست‌های پستی
* پیام‌رسان‌هایی مانند IRC
* انجمن‌های کاربران و ویکی‌ها برای مستندسازی

### کنترل نسخه

* **CVS** در دهه ۲۰۰۰
* **SVN** در میانه همان دهه
* **Git** و **Mercurial** امروزه

### ردیاب‌های باگ و وظایف

* برای پیگیری مشکلات و ویژگی‌ها در پروژه‌های بزرگ

### ابزارهای تست و اشکال‌زدایی

* **Tinderbox**، **GDB**، ابزارهای نشت حافظه و تحلیل کد مانند     Splint

### مدیریت بسته‌ها

* **RPM** در توزیع‌های Red Hat
* **APT** در توزیع‌های مبتنی بر دبیان

### تفاوت با نرم‌افزار مالکیتی
در نرم‌افزار مالکیتی، دسترسی به کد منبع محدود و استفاده از آن تابع مجوز سازنده است. در مقابل، نرم‌افزار متن‌باز بر آزادی استفاده، بررسی، تغییر و بازتوزیع توسط عموم تأکید دارد. با این حال، نرم‌افزار متن‌باز نیز ممکن است هزینه‌هایی نظیر پشتیبانی، آموزش و یکپارچه‌سازی داشته باشد.

### کاربرد در صنعت
امروزه نرم‌افزار متن‌باز ستون فقرات توسعه‌ی مدرن به‌شمار می‌رود. بین ۷۰ تا ۹۰ درصد کدهای نرم‌افزارهای امروزی از اجزای متن‌باز تشکیل شده‌اند. در مدل DevOps(دواپس)سازمانی، ابزارهای متن‌باز برای خودکارسازی وظایف و تسریع چرخه‌ی توسعه استفاده می‌شوند.

بسیاری از شرکت‌ها از نرم‌افزارهای متن‌باز در زیرساخت خود بهره می‌برند—از جمله Salesforce و HubSpot. حتی اپل نیز از کتابخانه‌های متن‌باز در اکوسیستم iOS استفاده می‌کند. همچنین رشد سریع مدل‌های زبانی مولد (مانند LLMها) در سال‌های اخیر با مشارکت فعال جامعه‌ی متن‌باز همراه بوده است.

###### تفاوت با استانداردهای باز
هرچند نرم‌افزار متن‌باز ممکن است از **[[استاندارد باز|استانداردهای باز]]** (Open Standards) استفاده کند، این دو مفهوم یکی نیستند. استاندارد باز به مجموعه‌ای از مشخصات عمومی گفته می‌شود که تعامل‌پذیری بین فناوری‌ها را تضمین می‌کند (مانند HTTP). در حالی‌که متن‌باز به خود نرم‌افزار و دسترسی به کد منبع آن اشاره دارد.
رده:نرم‌افزار آزاد و متن‌باز