ویروس
اولین ویروس
یکی از بر نامه نویسان مارک۱ یک زن بود به نام گریس هاپر . این زن اولین ویروس کامپیوتر به نام باگ را پیدا کرد . یک حشره مرده که در دستگاه افتاده بود و بالهایش مانع خواندن روزنهها میشد .
باگ برای نشان دادن نقصی در سیستم بکار میرود از آن زمان این کلمه سال ۱۹۵۳ گریس هاپر اولین زبان پیشرفته به نام فلو ماتیک را اختراع کرد، شناخته شد .
زبانهای سطح بالا به منظور راحت تر فهمیدن انسانها ساخته شد . چنان که زبان باینری برای کامپیوتر قابل فهم تر بود که بعدها به نام کوبول اما یک زبان برنامه نویسی پیشرفته بدون یک برنامهٔ مترجم ارزشی نداشت . تا زبان سطح بالا را به زبان باینری (یا زبان ماشین ) ترجمه کند که هاپر اولین مترجم یا کامپایلر را هم ساخت . این زن تا سن ۷۹ سالگی در زمینه کامپیوتر و برنامه نویسی فعال بود .
رایانههای نسل اول
در سال ۱۹۳۸٬ جان وینسنت آتاناسف استاد فیزیک و ریاضیات دانشگاه ایالتی آیووا در آمریکا به فکر ساختن اولین رایانه الکترونیکی یک منظوره افتاد. او با همکاری دستیارش و دانشجوی فارغالتحصیلش کلیفرد بری، با استفاده از لامپ خلاء شروع به ساختن رایانهٔ مزبور کرد و آن را کامپیوتر آتاناسفبری یا ABC نامید که میتوانست ۲۹ معادلهٔ چند مجهولی را با ۲۹ مجهول حل کند . این اولین ماشینی بود که توانست دادهها را به عنوان بار الکتریکی در خازن ذخیره کند . کاری که امروزه کامپیوترها برای ذخیره اطلاعاتشان در حافظه اصلی میکنند . اما این دستگاه قابل برنامه ریزی نبود وطراحی انها تنها مناسب برای یک نوع از مشکلات ریاضی (معادلات چند مجهولی ) بود . ولی به خاطر درگیری ارتش آمریکا در جنگ جهانی دوم و لزوم پیوستن آناتاسف به ارتش همکاری او با ارتش آمریکا، ساخت این رایانه عملی نشد و ساخت آن ادامه نیافت.متأسفانه مخترعینش هیچ تلاشی برای نگه داری آن نکردند و سرانجام این دستگاه رها شده و به وسیله کسانی که به داخل اتاق آمده بودند غارت شد .
یکی دیگر از کسانی که در زمینهٔ کامپیوترهای مدرن کار کردکلوسوس بود که در طول جنگ جهانی دوم به کمک دولت بریتانیا به هدف شکستن کدهای پنهانی آلمانیان دستگاهی ساخت .
در حقیقت انگلستان جهان را به سوی ساخت و طراحی ماشینهای الکترونیکی هدایت کرد که برای شکستن رمزها اختصاص یافته بود و معمولاً قادر به خواندن امواج رادیویی کد دارالمانیها بود .کامپیوتر هاروارد مارک ۱ اتانا سوف بری و کلوساس انگلیسی سهم عمدهای در این صنعت دارا بودند ولی پیش گامان آمریکایی و انگلستانی هنوز بر سر اینکه چه کسی اول بود بحث میکردند. اما زود تر از ان زیوس رشته کامپیوترهایی برای اهداف عمومی در نازی آلمان ساخته بود در حقیقت زد ۱ اولین بود چرا که در بین سالهای ۱۹۳۶ و۱۹۳۸ ساخته شده بود.
سومین ماشین زیوس که به زد ۳ معروف است درسال ۱۹۴۱ ساخته شد، که احتمالاً اولین کامپیوتر دیجیتال چند منظوره قابل برنامه ریزی عملی بود . یعنی به وسیله نرمافزار کنترل میشود .زد ۳ به وسیله هجوم بمباران پیوسته خراب شد . زد ۱ و زد۲ هم به همان سر نوشت دچار شدند و تنها زد ۴ باقی ماند زیرا زیوس ان را داخل واگنی گذاشت و روانه کوهستان کرد.
در سال ۱۹۴۳ فیزیکدانی به نام جان ماکلی با همکاری جی پرسیر اکرت که مهندس برق بود، شروع به ساختن اولین رایانه الکترونیکی همه منظوره نمود. این رایانه که در ساخت آن افزون بر اجزاء الکترومکانیکی، از هجده هزار لامپ خلا استفاده شده بود بنام انیاک نامگذاری شد و در سال ۱۹۴۶ میلادی آماده نصب و راهاندازی گردید و در زمان خود پیچیدهترین دستگاه الکترونیکی جهان بود. این رایانه قادر به انجام سیصد عمل ضرب در هر ثانیه بود و به مدت ۹ سال مورد استفاده ارتش آمریکا قرار گرفت.
یکی از موفقیتهای کامپیوتر هاروارد ( مارک ۱ ) بود که به طور شریکی بین هاروارد و ای بی ام در سال ۱۹۴۴ ساخته شد . این اولین کامپیوتر قابل بر نامه ریزی دیجیتال که در آمریکا ساخته شد، بود .ولی آن به طور کامل الکترونیکی نبود . در عوض این دستگاه بدون سوئیج و کلاج و میله و دستگاه تقویت و غیره ساخته شده بود .وزن ماشین ۵ تن بود و در آن ۵۰۰ مایل سیم جا داده شده بود . آن دارای طول ۸ فیت ودرازی ۵۱ فیت بود .مارک ۱ به مدت به مدت ۱۵ سال بدون توقف کار کرد و به شکل یک اتاق بافندگی شبیه بود .
مارک ۱ عملیات را روی اعدادی انجام میداد که ۲۳ رقم عرض داشتند . او میتوانست ۲تا از این اعداد را جمع یا تفریق کند در زمانی برابر سه دهم ثانیه یا انها را ضرب کند در حدود ۴ ثانیه و تقسیم کند در ۱۰ ثانیه ۴۵ سال بعد کامپیوترها میتوانستند عملیات جمع را در یک بیلیونیم ثانیه انجام دهند.
اگر چه مارک ۱ سه بخش مساوی از میلیونها اجزا داشت ولی تنها میتوانست ۷۲ عدد را ذخیره کنند . و ۱۰میلیون عدد دیگر را در هارد دیسک. و سرعت نمایش این اطلاعات بسیار بسیار بالا است . برای همین سرعت بالاست که کامپیوترها ی الکترونیکی قاتل دستگاههای مکانیکی به حساب میایند .هاروارد ایکن یکی از مدیران طراحی مارک ۱ در نامهٔ فکاهی خود نوشت تا سال ۱۹۴۷شش کامپیوتر الکترونیکی برای انجام محاسبات تمام آمریکا کافی است . برای همین ای بی ام شروع به تحقیق کرد که ایا میشود این دستگاه را به یک شکل استا ندارد درآورد چرا که تا آن زمان تنها دولت و ارتش آمریکا توان پرداخت چنین هزینهای را داشتند . البته نظریه ایکن زیاد هم بد نبود جرا که او از انقلاب میکرو کامپیوترها در سال ۱۹۵۹ بی خبر بود .
اپل ۱ که با عنوان «خودتان انجام دهید» بدون ظاهری زیبا فروخته شد . کامپیوترها به صورت شگفت انگیزی گران بودند چرا که در آن نیاز به اسمبلی دستی زیادی بود .
در سال ۱۹۴۵ نابغه ریاضی جان فون نویمان طی مقالهای استفاده از سیستم اعداد دودویی (Binary) در ساختمان رایانه و نظریه انباشت برنامه در حافظه رایانه را مطرح کرد و بر این اساس ساخت رایانه رقمی الکترونیکی همه منظورهای را پیشنهاد نمود و آن را ادواک نامید. این دستگاه رایانهای با توانایی ذخیره داخلی برنامهها و سرعت بالای الکترونیکی بود. فن نویمان را اغلب بهعنوان بنیانگذار ذخیرهسازی برنامهها میشناسند.
ساخت این رایانه در سال ۱۹۴۶ شروع شده بود و تا اواخر سال ۱۹۵۰ به تاخیر افتاد. با نگرش به اینکه در طراحی و ساخت رایانههای مدرن از نظریههای نویمان بهره گرفته میشود، لذا وی را پدر کامپیوتر میخوانند.
در سال ۱۹۴۷ موریس ویلکس استاد دانشگاه کمبریج انگلیس شروع به ساخت اولین رایانه رقمی الکترونیکی حاوی برنامههای ذخیره شده نمود و آن را ادساک نامید. ساخت این رایانه در سال ۱۹۴۹ به پایان رسید و آماده نصب و بهرهبرداری گردید.
در سال ۱۹۵۰ اولین رایانه دارای برنامه ذخیره شده ساخت آمریکا به نام سیک در سازمان ملی استانداردها در واشنگتن نصب گردید و بیش از ده سال مورد استفاده قرار گرفت. در فاصله سالهای ۱۹۵۱ تا ۱۹۵۷ نیز شرکتهای رایانهای آی بی ام و یونیواک رایانههای الکترونیکی گوناگونی ساخته و عرضه کردند.
در رایانههای نسل اول از ویژگی دو حالته بودن لامپ خلا که وسیلهای الکترونیکی است و میتواند خاموش یا روشن باشد بهره گرفته شد و در اغلب آنها لامپ خلا در قسمت محاسبه و منطق بکار رفته بود. رایانههای نسل اول دارای حجم زیادی بودند و میزان حافظه، سرعت و دقت در آنها کم بود و به انگیزه استفاده از لامپ خلا و ایجاد گرمای زیاد، استفاده از آنها به چند ساعت در روز محدود بود.
رایانههای نسل دوم
در رایانههای نسل دوم ترانزیستور جایگزین لامپ خلا گردید. ترانزیستور چند برابر کوچکتر از لامپ خلا بود و تاثیر زیادی بر روی سرعت محاسبات رایانه داشت. ظرفیت حافظه در رایانههای نسل دوم در قیاس با رایانههای نسل اول دارای ظرفیت حافظه بیشتر و سریعتر، کوچکتر و قابل اطمینانتر بودند.
در فاصله زمانی سالهای ۱۹۵۸ تا ۱۹۶۴ توسط شرکتهای کامپیوتری انسیآر٬ ایبیام و سیدیسی رایانههای مختلف الکترونیک ساخته شدند و عرضه شدند و در سال ۱۹۶۳ اولین مینی رایانه بنام پیدیوی ۸ توسط شرکت دک معرفی گردید.
انقلاب میکروالکترونیکها باعث شد مدارهای مجتمع که به اندازهٔ ناخن انگشت شست شما باشند جای آن سیم کشیهای دستی را بگیرد.
اولین سود مدارهای مجتمع ترانزیستورها نیستند بلکه کوچکی آنها هست چرا که ترانزیستورها فایدهٔ تعدادی آنها است و بیشتر از میلیونها ترانزیستور میتواند تولید شود و به فرایندهای ماشینی دستگاه مرتبط شود تمام عناصر بر روی یک مدار مجتمع ساخته شدهاند همزمان در طریق شماره کوچک (شاید ۱۲) از پوشانههای بصری که هندسهٔ هر لایه را تعریف میکند. اینها سرعت پردازش و ساختن کامپیوترها را افزایش میدهد واز این جهت هزینهٔ آنها هم کاسته شد همان گونه که دستگاه چاپ یوهانس گوتنبرگ ساختن کتابهایش را سرعت داد و بدین وسیله آنها را برای عموم قابل خرید کرد
کامپیوتر ای بی ام استرچ سال ۱۹۵۹ درازای ۳۳ فوتی را برای نگاه داشتن ۱۵۰۰۰۰ ترانزیستور داخلش را لازم داشت . این ترانزیستورها به طور شگفت انگیزی کوچک تر از لامپهای خلا هستند . اما آنها عناصر منحصر به فردی بودند که نیاز به اسمبلی منحصر به فردی داشت در اوایل دهه ۱۹۸۰ این ترانزیستورهای زیاد توانست به طور هم زمان بر روی یک مدار مجتمع ساخته شود امروزه کامپیوترهای پنتیوم ۴ شامل ۴۲۰۰۰۰۰۰ ترانزیستور برروی یک مدار مجتمع به اندازهٔ یک ناخن شست است .
رایانههای نسل سوم
برای ساختن کامپیوترهای سریعتر و قویتر کوششها همچنان ادامه داشت تا در اوایل ۱۹۶۰ اولین کامپیوتر نسل سوم (Third Generation) به بازار عرضه شد. این کامپیوتر از سری IBM ۳۶۰ بود که برای ساختن آن ۵ میلیارد دلار سرمایه گذاری شد که بزرگترین پروژه مالی بخش خصوصی تا آن تاریخ به شمار میرفت.این کامپیوتر که مدلهای گوناگونی از نظر ظرفیت و سرعت کار داشت، در هر دو امور تجاری و علمی قابل استفاده بود.
جدیدترین تحول در تکامل کامپیوترها، ساختن وسایل ضبط اطلاعات با قابلیت دسترسی مستقیم (Direct Access Device) در این نسل بود.به این ترتیب کاربران توانستند به هر یک از اجزا اطلاعات ذخیره شده در یک مجموعه عظیم اطلاعاتی، در کسری از ثانیه دسترسی پیدا کنند.علاوه بر آن در این نسل از کامپیوترها، سعی شده که قطعات مدارها را هرچه کوچکتر و با حجم کمتر بسازند و بدین ترتیب مدارهای مجتمع (Integrated Circuits(IC)) به وجود آمدند.ویژگی دیگر رایانههای نسل سوم امکان استفاده همزمان چندین کاربر از یک رایانه بود. این رایانهها بر خلاف نسل قبلی که فقط در یکی از دو حیط علمی و غیرعلمی توانایی کار داشتند، توانایی کار در هر دو محیط را دارا بودند.
سرعت عملیان در رایانههای نسل سوم بسیار افزایش یافت. عملیات حسابی و منطقی در این رایانهها در مایکرو ثانیه(یک میلیونیم ثانیه) و حتی نانو ثانیه (یک بیلیونیم ثانیه) انجام میشد. در ایران، از زمان ارایه کامپیوترهای نسل سوم کاربرد کامپیوتر به سرعت توسعه یافت و مؤسسات مختلف تعدادی از آنها را نصب کردند.
بارزترین ویژگی رایانههای نسل سوم استفاده از مدارهای مجتمع یا آی سی در قسمتهای مختلف ساختمان رایانه بود. این مدارها که از حدود ۱۰۰ عنصر منطقی تشکیل شده بود و در هر عنصر منطقی حدود ۱۰ عنصر الکترونیکی نظیر ترانزیستور و دیود بکار رفته بود، به روش خاصی در سطحی به اندازه یک سانتیمتر مربع تجمع پیدا میکردند و بدین لحاظ اندازه و حجم رایانههای نسل سوم در برابر با رایانههای نسل دوم کاهش یافتند. ظرفیت حافظه در رایانههای نسل سوم به چندین برابر قبل افزایش یافت.
در فاصله زمانی سالهای ۱۹۶۴ تا ۱۹۷۱ شرکتهای از قبیل آیبیام٬ جنرال الکتریک٬ باروز٬ یونیواک٬ آرسیای، انسیآر، سیدیسی٬ هانیول و تعداد زیادی از شرکتهای کوچکتر ارائه گردید. بویژه شرکت دک با تولید مینی رایانههای پیدیپی ۱۰ و پیدیپی ۱۱ راه را برای پیشرفت سریع پدیده مینی رایانهها باز کرد و هزاران مینی رایانه به بازار عرضه کرد.
رایانههای نسل چهارم
در ساختمان رایانههای نسل چهارم از مدارهای مجتمع الکترونیکی با تراکم متوسط و زیاد که حاوی هزارها تا صدها هزار عنصر الکترونیکی بودند و بر روی یک تراشه مربع یا مستطیل شکل از جنس سیلیکان به سطح یک سانتیمتر مربع قرار گرفته بودند استفاده میگردید. سرعت عمل و ظرفیت حافظه رایانههای نسل پنجم به نسبت نسل قبلی افزایش زیادی داشت. توانایی قرار دادن مدارهای مجتمع الکترونیکی زیادی بر روی یک سطح بسیار کوچک سبب پیدایش ریزپردازنده در آغاز این دوره گردید که میتوانست بر روی یک سطح یک تراشه قرار بگیرد. ریز پردازنده دارای کلیه مدارهای مورد نیاز جهت عملیات حسابی، منطقی و کنترلی بود و با افزودن تعدادی تراشه جهت حافظه و سایر مدارهای مکمل به آن یک پردازشگر کامل بوجود آمد و در نتیجه ریز رایانه پا به عرصه وجود گذاشت.
با معرفی اولین ریزپردازنده به نام ۴۰۰۴ در سال ۱۹۷۱ توسط شرکت اینتل و عرضه ریزوردازنده ۸ بیتی ۸۰۸ در اواخر همان سال و ریزپردازنده ۸۰۸۰ در سال ۱۹۷۴ توسط همان شرکت، زمینه کاری جهت ساختن رایانههای شخصی (PC) فراهم گردید. با معرفی ریز رایانه سلب ۸-اینچ در سال ۱۹۷۲ توسط شرکت سلبی و ریز رایانه التایر ۸۸۰ در سال ۱۹۷۵ توسط شرکت میتس و ساخت ریزپردازندههای مختلف توسط شرکتهای اینتل٬ زیلاک٬ موتورولا و اماُاس تکنالوژی، فرایند ساخت و معرفی ریزرایانهها روز به روز گسترش یافت و توسط شرکتهای مختلف از آن جمله اپل(Apple)٬ آتاری(Atari)٬ کامودر(commodore) و آیبیام(IBM) ریز رایانههای گوناگونی عرضه گردید.
در دهه ۸۰ میلادی در زمینه رایانههای بزرگ و مینی رایانهها شرکتهای مختلف از آن جمله آیبیام ٬سیدیسی ٬دک و باروز رایانههای بسیار پیشرفتهای ساختند و به بازار عرضه نمودند.
در همین دهه ابر رایانههای پیشرفتهای توسط شرکتهای مختلف از جمله کری آیبیام، سیدیسی٬ فوجیتسو ٬ هیتاچی و نک ساخته شدند.
رایانههای نسل پنجم
در رایانههای نسل پنجم که از سال ۱۹۹۰ به بعد هستند اندازهٔ تراشهها خیلی کوچکتر شده و از پردازندههای با تراکم خیلی زیاد در آنها استفاده میشود. در این نسل از رایانه بجای معماری ترتیبی از معماری موازی بهره گرفته شده. کشورهای پیشرفتهٔ زیادی مانند آمریکا و ژاپن پژوهشهای زیادی برای ساخت رایانههای بسیار پیشرفته در گذشته و حال انجام دادهاند.
ابر رایانههای در دست ساخت به نام سی ام ۵ که از ۳۲ تا ۱۶۰۰۰ پردازنده بصورت موازی بهره خواهند گرفت سرعت رایانه را تا دو برابر ترافلاپس (تریلیون عملیات اعشاری در ثانیه) خواهند رساند.
نسل پنجم رایانهها که ایده آن اولین بار توسط ژاپنیها در سال ۱۹۸۰ مطرح شد، ساختن کامپیوترهایی را پیشنهاد میکند که بتوانند بیاموزند، استنباط کنند و تصمیم بگیرند و بطور کلی رفتاری داشته باشند که معمولاً در حوزه منطق و استدلال خاص انسان قرار دارد و به عبارت ساده تر هوشمند باشند. در این نسل از مدارهای مجتمع با تراکم فوق العاده بالا استفاده میشود.
بعد از موفقیت کامل بشر در ساخت کامپیوترهای هوشمند، ایده بعدی انسان طراحی کامپیوتری خواهد بود که مدارهای داخلی آن کپی برداری عینی از مغز آدمی است.
با توجه به تحولات در تغییر نسلهای کامپیوتری، در نسل بعد باید منتظر تغییرات زیر باشیم:
کاهش حجم مدارها تا حد مینیاتوری شدن و نیز کاهش توان مصرفی لازم
افزایش پیچیدگی مدارها
افزایش کارایی و بهبود کیفیت عملکرد مدارها
افزایش سرعت عملکرد مدارها
مشخصات کلی
پیشرفتهای سختافزاری
الف)مینیاتوری کردن(تقلیل حجم دستگاهها و اجزای آنها)
ب)افزایش ظرفیت حافظه به چندین برابر قبل
ج)استفاده از دستگاههای واسطه(Media)، با قابلیت دسترسی مستقیم
د)قدرت ارتباط با نقاط دور و متعدد
پیشرفتهای نرمافزاری
الف)هماهنگی بیشتر با سختافزار
ب)هماهنگی بیشتر با سیستمعامل
ج)پیشرفت در زبانهای برنامه نویسی و به کارگیری زبانهای سطح بال
عملیات و بهره برداری
الف)استفاده از روشهای پردازش مستقیم(on-line) و بازده فوری(real time)
ب)اجرای همزمان چند برنامه با یکدیگر
تقسیمبندی و تفکیک نسلهای کامپیوتری تا قبل از نسل چهارم(Forth Generation)، به لحاظ تغییرات عمده در پیشرفت و تکامل کامپیوتر در هر نسل، به سهولت صورت گرفت. دراوایل سال ۱۹۷۰ تکنیکهای جدیدتری در ساخت و بهره گیری از کامپیوترها به کار برده شدکه بسیاری از دست اندرکاران آن را نسل چهارم نامیدند. مهمترین تغییرات در سختافزار کامپیوترهای نسل چهارم، به کارگرفتن مدارهای مجتمع با تراکم زیاد و تراکم خیلی زیاد است.
در نسل سوم از تراکم SSI(Small Scale Integration) و (Scale Integration Medium)MSI یعنی تراکم کم و تراکم متوسط بهره گرفتند. ولی درنسل چهارم از تراکم (Scale Integration Large) LSI،( Scale Integration Very Large) VLSI و (Ultra Large Scale Integration)ULSI یعنی تراکم بالا، خیلی بالا وفوق العاده بالا بهره میگیرند. نسل چهارم همچنین از حافظه نیمه هادی (Semiconductor) ومیکرو پروسسور (Microprocessor)، سیستمهای محاورهای (Interactive System)، پردازش مستقیم و شبکههای کامپیوتری (Computer Network) بهره جستهاست.
توسعه و پیشرفت سختافزار کامپیوترهای فعلی، در مقایسه با نسلهای قبلی با بررسی چند عامل نظیر سرعت، اندازه، هزینه و ظرفیت حافظه روشن میگردد. در کامپیوترهای اولیه از لامپ خلا استفاده میشد و به همین جهت حجم و وزن زیادی داشتند (کامپیوتر انیاک ۳۰ تن وزن داشت) به کار بردن ترانزیستور در نسل دوم به طور قابل ملاحظهای، اندازه کامپیوترها را کاهش داد. در یک فوت مربع از کامپیوترهای نسل اول ۶۰۰۰ مؤلفه وجود داشت که با بکاربردن ترانزیستور۱۰۰۰۰۰ مدار درهمان حجم کار میکرد. در کامپیوترهای فعلی که در آنها میکروالکترونیک و مدارهای مجتمع با تراکم زیاد به کار میرود بیش از ۱۰ میلیون مدار در یک فوت مربع کار میکند.
برنامه
برنامه رایانهای رشته دستورالعملهایی است که توسط رایانه قابل اجرا میباشد. این اصطلاح میتواند به کد اصلی یا نگارش اجرایی آن (زبان ماشین) نیز اطلاق گردد. برنامههای رایانه میتوانند پایانپذیر یا پایان ناپذیر باشند. در برنامههای کامپیوتری هدف اجرای روالی خاص جهت رسیدن به مقصودی خاص میباشد.
نرمافزار
نرمافزار (به انگلیسی: Software) یا برنامه، مجموعهای از دستورالعملهای دقیق و مرحله به مرحله است که هدف خاصی را دنبال میکنند.
ظاهراً، اولین بار جان توکی در سال ۱۹۵۸ این واژه را بهاین معنا بهکار بردهاست. احتمالاً این واژه در مقابل سختافزار (به انگلیسی: Hardware) به کار بردهاند که بسیار پیش از پیدایش رایانه (به معنای اسباب و اشیاء) بهکار میرفتهاست.
دو گروه کلی نرمافزارها
نرمافزارهای رایانه را میتوان به دو دسته بزرگ تقسیم کرد:
نرمافزار سیستم (به انگلیسی: System software)
نرمافزار کاربردی (به انگلیسی: Application software)
میتوان گفت نرمافزارهای کاربردی، برنامههای مورد استفاده کاربرند و نرمافزارهای سیستمی، مدیریت رایانه را برعهده دارند. مهمترین نرمافزار سیستم، سیستمعامل است.
سیستم عامل
وقتی برنامهای را روی رایانه خود نصب میکنید، اجزای سختافزاری آن به فرمان آن برنامه در میآیند. برای نمونه هنگامی که با یک برنامه اجرای موسیقی کار میکنید، کارت صدای رایانه تان با برنامه پخش موسیقی همکاری میکند و یک آهنگ یا پرونده (فایل) صوتی را از طریق بلندگوی رایانه تان پخش میکند.
این ارتباط میان نرمافزار و سختافزار توسط سیستم عامل انجام میشود. این تنها قسمتی از کار سیستم عامل است.
سیستم عامل خود یک برنامه نرم افزاری است با این تفاوت که چون تمام منابع و امکانات سخت افزاری در اختیار وی می باشد دارای ویژگی منحصر به فرد می باشد بنابراین آن را در رده نرم افزارها می خوانیم با این ویژگی که از اهمیت خاصی برخوردار است. به بیان دیگر سیستم عامل یک برنامه جامع است که اجازه در اختیار قراردادن منابع و امکانات سخت افزاری را برای نرم افزارها صادر می کند و این سیستم عامل است که مسئول صحت عملکرد سیستم و منابع آن است.
سیستم عامل شامل 4 بخش مهم است
1- مدیریت پردازش و پردازشگر
2- مدیریت حافظه
3- مدیریت دستگاههای ورودی و خروجی (I/O)
4- مدیریت فایل
سه گروه کلی نرمافزارهای معماری
از دیدگاه ساختاری (معماری) (architecture)، نرمافزارها به دستههای زیر تقسیم میشوند:
کاربر-بنیان یا Client Base
کارگزار-بنیان یا Server Base
کاربر کارگزار بنیان یا Client-Server Base
امروزه واژه نرمافزار را در معناهایی به جز معنی برنامه رایانهای نیز بهکار میبرند. مثلاً در دانش مدیریت برای اشاره به روشها و دانش فنی (در برابر وسایل و تجهیزات و نیروی انسانی). نرمافزارها انواع گوناگونی دارند که مهم ترین دسته بندی آنها دستهٔ تجاری و آزاد است. به ویژه با رویکردهای طرحهای گنو و لینوکس معنای ژرف تری به نرمافزارهای آزاد داده شده تا آنجا که برخی نرمافزارها را نماد فرهنگ می دانند. نرمافزارها را برنامه نویسان تدوین کرده و انتشار میدهند. این برنامه نویسان ممکن است در یک شرکت مشغول کار باشند یا در خانه برنامه نویسی کنند مانند برنامه نویسان برخی نرمافزارهای لینوکس. امروزه بیشتر کاربران تنها با ظاهر گرافیکی این برنامهها کار میکنند و اقدامات بسیاری از آنها از دید کاربر پنهان میماند به عبارتی هر نرمافزار مجموعهای از رمزها است که از الگوریتمی خاص پشتیبانی میکنند این رمزها خود با رمزهای گرافیکی آمیخته شده و بسیاری از اقدامات برنامه به دور از چشم کاربر عادی رخ میدهد. برنامهها با رمزهایی نوشته میشوند که بعداً یک رمزخوان آن را در رایانه کاربر اجرا میکند.
رقابت نرمافزاری
در حال حاضر نرمافزارهای کامپیوتری فراوان را میتوان در بازار یافت که به طور جدی به رقابت خود برای بقا ادامه میدهند. از مسائل قابل ذکر در این مورد میتوان به خرید سهام شرکتهای نرمافزاری کوچک و بزرگ توسط شرکتهای دیگر اشاره نمود. همچنان که شرکت بزرگ گوگل به خرید سهام شرکتهای بزرگ همچنان ادامه میدهد، در مدت کمی توانسته بسیاری از شرکتها را تحت سلطه خود درآورد.
نرمافزار سیستم
نرمافزار سیستم به نرمافزاری در رایانه گفته میشود که به کارکرد سیستم رایانه یا کاربردهای سطح پایین (یا Low Level) رایانه مربوط باشد. این نرمافزارها به ساختار فیزیکی سختافزار رایانه وابسته هستند و در نوشتن آنها از زبانهای سطح پائین مانند زبان اسمبلی استفاده میشود. سیستمعامل و درایورها از نرمافزارهای سیستم هستند. از جمله زبان هایی که برای نگارش نرمافزارهای سیستمی استفاده میشود، زبان برنامه نویسی C میباشد. کار کردن با سی برای برنامه نویسان راحت تر است و آنان این زبان را به اسمبلی ترجیح میدهند. اگر برای نگارش نرمافزار سیستمی مشکل محدودیت فضای سختافزاری داشته باشیم بهتر است با زبان اسمبلی کار کنیم که حجم آن پایین تر است. نرمافزارهای سیستمی به سختافزار وابسته اند.
در برابر نرمافزار سیستم، نرمافزار کاربردی قرار دارد که برای کاربردهای سطح بالا و غیرسیستمی رایانه است و معمولاً به زبانهای سطح بالا نوشته میشود که از جزئیات سختافزاری سیستم مستقل است.
نرمافزار کاربردی
نرمافزار کاربردی (به انگلیسی: Application software) عبارت است از نرمافزاری که با استفادهٔ مستقیم از منابع و قابلیتهای رایانه کاری را مستقیماً برای کاربر انجام میدهد. باید توجه داشت که این عبارت در مقابل عبارت نرمافزار سیستمی معنی پیدا میکند.
نرمافزار سیستمی در مقابل در پسزمینه عمل میکند و خدماتی را فراهم میکند که دیگر نرمافزارها و یا سیستمعامل میتوانند برای انجام کارهای خود از آن استفاده کنند. اما در عوض معمولاً مستقیماً با کاربر عادی در تماس نیست و خدماتی را به او ارایه نمیدهد.
در عمل بیشتر نرمافزارهایی که کاربران با آنها سر و کار دارند از این دسته محسوب میشوند. برای مثال میتوان به نرمافزارهای رومیزی یعنی واژهپردازها، صفحه گستردهها، نرمافزارهای طراحی گرافیکی، بازیهای رایانهای و امثال آنها اشاره کرد.
بسیاری نرمافزارهای کاربردی، برای توسعهدهندگان ابزار رابط برنامهنویسی کاربردی هم فراهم میکنند تا بتوان از قابلیتهای نرمافزار در نرمافزارهای جدید استفاده کرد. برای مثال نرمافزار ادوبی آکروبات هنگام نصب ایپیآی فراهم میکند که برنامهنویس میتواند با استفاده از آن تواناییهای آکروبات را در برنامهٔ خود به کار گیرد.
برای عنوان نمونههای دیگر میتوان به نرمافزارهای پردازش متن، برگههای گسترده (صفحات گسترده) و نرمافزارهای پخش نوا و نما اشاره کرد.
مهندسی نرمافزار
مهندسی نرمافزار (به انگلیسی: Software engineering) یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرمافزاری با کیفیت که قابل اطمینان و با صرفه بوده و برروی ماشینهای واقعی به طور کارآمدی عمل کند.
مهندسی نرمافزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرمافزاری با کیفیت است.
مهندسی نرمافزار اغلب شامل فرایند خطی تحلیل، طراحی، پیادهسازی و آزمون است؛ که با به کارگیری روشهای فنی و علمی از علوم مهندسی موجب تولید نرمافزاری با کیفیت مطلوب در طول یک فرایند انتخابی مناسب پروژه میشود.
کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههایی از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرمافزار اداری، بازیهای رایانهای و اینترنت.
فناوریها و خدمات مهندسی نرمافزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: پایگاه دادهها، زبانها، کتابخانهها، الگوها، فرایندها و ابزار.
مهم ترین شاخص مهندسی نرمافزار
مهم ترین شاخص در مهندسی نرمافزار تولید نرمافزار با کیفیت مناسب در جهت «نیازهای مشتری» است.
پیشینه مهندسی نرمافزار
اصطلاح مهندسی نرمافزار پس از سال ۱۹۶۸ میلادی شناخته شد. این اصطلاح طی نشست «مهندسی نرمافزار ناتو ۱۹۶۸» (که در گارمیش-پارتنکیرشن، آلمان برگزار شد) توسط ریاست نشست فریدریش ال باوئر معرفی شد و از آن پس بهطور گسترده مورد استفاده قرار گرفت.
اصطلاح مهندسینرمافزار عموماً به معانی مختلفی بهکار میرود:
بهعنوان یک اصطلاح غیر رسمی امروزی برای محدوده وسیع فعالیتهایی که پیش از این برنامهنویسی و تحلیل سامانهها نامیده میشد.
بهعنوان یک اصطلاح جامع برای تمامی جنبههای عملی برنامهنویسی رایانه، در مقابل تئوری برنامهنویسی رایانه، که علوم رایانه نامیده میشود.
بهعنوان اصطلاح مجسمکننده طرفداری از یک رویکرد خاص نسبت به برنامهنویسی رایانه که اصرار میکند، مهندسی نرمافزار، بهجای آنکه هنر یا مهارت باشد، باید بهعنوان یک رشته عملی مهندسی تلقی شود و از جمعکردن و تدوین روشهای عملی توصیهشده به شکل متدولوژیهای مهندسی نرمافزار طرفداری میکند.
مهندسی نرمافزار عبارتست از:
کاربرد یک رویکرد سامانهشناسی، انتظامیافته، قابل سنجش نسبت به توسعه، عملکرد و نگهداری نرمافزار، که کاربرد مهندسی در نرمافزار است.
مطالعه روشهای موجود در استاندارد IEEE
محدوده مهندسی نرمافزار و تمرکز آن
مهندسی نرمافزار به مفهوم توسعه و بازبینی یک سامانه نرمافزاری مربوط میباشد. این رشته علمی با شناسایی، تعریف، فهمیدن و بازبینی خصوصیات مورد نیاز نرمافزار حاصل سر و کار دارد. این خصوصیات نرمافزاری ممکن است شامل پاسخگویی به نیازها، اطمینانپذیری، قابلیت نگهداری، در دسترس بودن، آزمونپذیری، استفاده آسان، قابلیت حمل و سایر خصوصیات باشد.
مهندسی نرمافزار ضمن اشاره به خصوصیات فوق، مشخصات معین طراحی و فنی را آماده میکند که اگر بهدرستی پیادهسازی شود، نرمافزاری را تولید خواهد کرد که میتواند بررسی شود که آیا این نیازمندیها را تأمین میکند یا خیر.
مهندسی نرمافزار همچنین با خصوصیات پروسه توسعه نرمافزاری در ارتباط است. در این رابطه، با خصوصیاتی مانند هزینه توسعه نرمافزار، طول مدت توسعه نرمافزار و ریسکهای توسعه نرمافزار درگیر است.
نیاز به مهندسی نرمافزار
نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای نوین قابل مقایسه هستند. بهعنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرمافزارِ هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.
با توجه به گسترش روزافزون دنیای رایانه امروزه بیش از هر زمان دیگری نیاز به متخصصان رایانه احساس میشود. متاسفانه این رشته در ایران بازار کار خوبی ندارد طبق آمارها ۶۳٫۲۷ درصد از فارغالتحصیلان در سال ۹۰ مشغول به کار در سایر مشاغل هستند. اما برای مهندسان سختافزار هم امکان کار در شرکتهای تولیدکننده قطعات و دستگاهها و مراکز صنعتی – تولیدی بسیار فراهم است و از نظر سطح درآمدی هم با توجه به دانش و پشتکار شخصی در حد متوسط قرار دارند. به طور کلی این رشته در ایران با استقبال چندانی رو به رو نیست؛ این نیز حاکی از نبود برخی از زیرساختها در ایران هست.
تکنولوژیها و روشهای عملی
مهندسان نرمافزار طرفدار تکنولوژیها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگار هستند. این بحث در سالهای دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسان نرمافزار از تکنولوژیها و روشهای عملی بسیار متنوعی استفاده میکنند. کسانی که کار عملی میکنند از تکنولوژیهای متنوعی استفاده میکنند: کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی میکنند از روشهای عملی بسیار متنوعی استفاده میکنند تا تلاشهایشان را اجرا و هماهنگ کنند: برنامهنویسی در دستههای دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرمافزار بایستی رسیدن به ایدههای جدید خارج از الگوهای طراحی شده قبلی باشد، که باید شفاف بوده و بهخوبی مستند شده باشد.
با وجود رشد فزاینده اقتصادی و قابلیت تولید فزایندهای که توسط نرمافزار ایجاد شده، هنوز هم بحث و جدلهای ماندگار درباره کیفیت نرمافزار ادامه دارند.
ماهیت مهندسی نرمافزار
دیوید پارناس گفتهاست که مهندسی نرمافزار یک شکل از مهندسی است. استیو مککانل گفتهاست که هنوز اینطور نیست، ولی مهندسی نرمافزار باید یک شکل از مهندسی شود. دونالد کنوت گفتهاست که برنامهنویسی یک هنر است.
دیوان فعالیتهای آماری آمریکا مهندسان نرمافزار را به عنوان زیرگروهی از «متخصصان رایانه»، با فرصتهای شغلیای مانند «دانشمند رایانه»، «برنامه نویس» و «مدیر شبکه» دسته بندی کردهاست. BLS تمام مهندسان دیگر این شاخه علمی، که شامل مهندسان سختافزار رایانه نیز هست، را بهعنوان «مهندسان» دسته بندی میکند.
نرمافزار آزاد
نرمافزار آزاد (به انگلیسی: Free software) نرمافزاری است که بههمراه کد منبع توزیع شده و با قوانینی منتشر میشود که آزادی استفاده، مطالعه، ویرایش و انتشار مجددِ کاربران را تضمین میکند. نرمافزارهای آزاد معمولاً با همکاری برنامهنویسهای داوطلب بهعنوان یک پروژه بهوجود میآیند.
نرمافزارهای آزاد با نرمافزارهای مالکیتی (مانند مایکروسافت ویندوز) که آزادی کاربر در استفاده، مطالعه، ویرایش یا انتشار مجدد را در درجههای مختلف محدود میکنند، متفاوت است. این محدودیتها با در نظر گرفتن مجازاتهایی قانونی برای کاربرانی که قوانین آنها را نقض میکنند، بهوجود میآیند. نرمافزارهای مالکیتی عموماً به صورت بستههای اجراپذیر باینری و بدون دسترسی به کد منبع فروخته میشوند که جلوی ویرایش و وصلهکردن نرمافزار توسط کاربر را میگیرد و او را برای بهروزرسانی و پشتیبانی به شرکت نرمافزاری تولید کننده وابسته میکنند. نرمافزارهای آزاد از نرمافزاریهای رایگان که برای استفاده، از کاربر پولی دریافت نمیکنند، نیز متفاوتاند. این نوع نرمافزارها نیز معمولاً تمامی حقوق نرمافزار را برای تولیدکنندهٔ آن محفوظ داشته و جلوی مهندسی معکوس، ویرایش و یا توزیع مجدد توسط کاربر را میگیرند. بنابراین موضوع اصلی نرمافزار آزاد، موضوع آزادی است و نه قیمت آن: کاربران آزادند که هر چه میخواهند با نرمافزار انجام دهند. این آزادی شامل انتشار مجدد نرمافزار بهصورت رایگان و یا با سود نیز میشود. یعنی نرمافزار آزاد میتواند به صورت رایگان و یا در ازای دریافت مبلغی پول در اختیار کاربر قرار بگیرد.
ریچارد استالمن در سال ۱۹۸۵ در زمانی که در حال آغاز پروژهٔ گنو و بهوجود آوردن بنیاد نرمافزارهای آزاد بود، برای اولین بار از عبارت «نرمافزار آزاد» استفاده کرد. براساس تعریف بنیاد نرمافزارهای آزاد کاربران یک نرمافزارِ آزاد، آزاد هستند؛ چون به اجازه گرفتن نیازی ندارند؛ آنها در انجام کارهای دلخواهشان (مانند حق نشر و کپیبرداری) محدود نیستند؛ نیازی به موافقت با هیچ توافقنامهای ندارند؛ و در همان ابتدا نیز با نداشتن کد منبع محدود نبودهاند.
تعریف
طبق تعریف نرمافزار آزاد توسط بنیاد نرمافزارهای آزاد، هر نرمافزاری که آزادیهای زیر را برای کاربرانش فراهم کند به عنوان یک نرمافزار آزاد شناخته میشود:
کاربران باید اجازه داشته باشند که نرمافزار مورد نظر را برای هر قصد و منظوری اجرا کنند.
کاربران باید اجازه داشته باشند کدهای منبع نرمافزار را مطالعه کرده و آن را مطابق با نیازهای خود تغییر دهند. برای رسیدن به این هدف، کدهای منبع نرمافزار باید در اختیار کاربر قرار گیرد.
کاربران باید اجازه داشته باشند نرمافزار را مجدداً منشتر کرده و در اختیار دیگران قرار دهند. این کار میتواند به صورت رایگان و یا در ازای دریافت مبلغی پول صورت گیرد.
اگر کاربری نرمافزار را تغییر داد، باید اجازه داشته باشد آن را مجدداً منتشر کرده و در اختیار دیگران قرار دهد. برای تغییر دادن نرمافزار، لازم است تا کدهای منبع نرمافزار در اختیار کاربر قرار گیرد.
همچنین موسسه پیشگامان متنباز هم تعریف مشابهی از نرمافزار آزاد ارائه میدهد. طبق تعریف این موسسه، نرمافزار بازمتن تنها به معنی در دسترس ساختن کدمنبع نیست. علاوه بر آن مجوز باید ویژگیهای زیر را هم داشته باشد:
نرمافزار باید قابل توزیع مجدد باشد (چه به صورت رایگان، چه در ازای دریافت مبلغی پول)
نرمافزار باید شامل کد منبع باشد و این کد منبع را باید بتوان تغییر داد و مجدداً منتشر کرد.
مجوز نباید در برابر افراد یا گروه خاصی تبعیض قائل شود.
مجوز نباید کاربر را برای رسیدن به یک هدف خاص محدود کند.
مجوز نباید مختص به یک محصول خاص باشد.
مجوز نباید نرمافزارهای دیگری که به همراه نرمافزار مورد نظر عرضه شدهاند را محدود کرده و تحت تاثیر قرار دهد. برای مثال اگر چند نرمافزار بر روی یک دیسک منتشر شدند، مجوز نباید اصراری بر روی متنبازبودن آنها داشته باشد.
مجوز نباید تکنولوژی خاصی را محدود کند.
تاریخچه
در اوایل، نرمافزارها به صورت آزاد منتشر میشدند و برنامهنویسان و شرکتها آنها را به صورت آزادانه در اختیار یکدیگر قرار میداند. در اوایل، تجارت رایانه بیشتر مبتنی بر سختافزار بود و شرکتها درامد خود را بیشتر از راه تولید سختافزار کسب میکردند و هر شرکت، سختافزاری ناسازگار با دیگر شرکتها تولید میکرد. مشتریان، که بیشتر مهندسان و دانشمندان بودند، تشویق میشدند که نرمافزارهای ارائه شده توسط سختافزار را بهبود بخشیده و حتی آن را در اختیار دیگران هم قرار دهند. از آنجا که در آن زمانها سختافزارهای تولید شده توسط شرکتهای مختلف با یکدیگر ناسازگار بود و سختافزار استانداردی وجود نداشت، و همینطور از آنجا که در آن زمان مفسرها و کامپایلرها هنوز جا نیفتاده بودند (که این برنامهها برنامهها را قابل حملتر میکنند)، شانس کمی وجود داشت که نرمافزار مورد نظر بر روی سختافزار شرکت رقیب هم به خوبی اجرا شود.
رفتهرفته که صنعت رایانه پیشرفت کرد و سختافزارها بیشتر استاندارد شدند و همینطور کامپایلرها و مفسرها پیشرفت کردند، زمینه برای رشد نرمافزارهای انحصاری فراهم شد. با چنین پیشرفتهایی، برنامهها راحتتر از سختافزار یک شرکت به سختافزار شرکت رقیب پورت میشدند و راحت میشد یک نرمافزار را بر روی سختافزارهای مختلفی از شرکتهای مختلف اجرا کرد. بدین ترتیب یک نفر میتوانست نرمافزاری بنویسد که مستقل از سختافزار خاصی عمل کند و بر روی طیف وسیعی از آنها اجرا شود. علاوه بر آن، با استاندارد شدن سختافزارها، تفاوتهای ناچیزی که آنها در کارایی داشتند رفته رفته ناپدید شد. تولید کنندگان به این نتیجه رسیده بودند که باید به نرمافزار هم به چشم یک وسیله فروشی نگاه کنند. شرکتها شروع به فروش نرمافزارهای خود کردند و دست کاربران خود را برای تغییر در نرمافزارها و انتشار مجدد آنها بستند. به گونه ای که در سال ۱۹۶۸ شرکتی به نام ایدیآر (به انگلیسی: ADR) اولین نرمافزار دارای مجوز را عرضه کرد. در سال ۱۹۶۹، شرکت آیبیام به خاطر اینکه به همراه سختافزارهای خود، نرمافزارهای آزاد ارائه میکرد، توسط وزارت دادگستری ایالات متحده آمریکا به از بین بردن کسب و کار و ایجاد یک شرایط ضدرقابتی برای دیگر متهم شد. آیبیام دیگر به همراه سختافزارهای خود نرمافزار ارائه نکرد و بدین ترتیب نرمافزارها و سختافزارها از یکدیگر جدا شدند و فاصله گرفتند.
در سال ۱۹۸۳، ریچارد استالمن از آزمایشگاه هوش مصنوعی و علوم رایانه امآیتی، پروژه گنو را بنیان نهاد. او که از تغییر فرهنگ در صنعت رایانه و کاربرانش ناامید شده بود، قصد داشت سیستمعاملی به نام گنو را به صورت یک نرمافزار آزاد توسعه دهد. در ژانویه ۱۹۸۴ توسعه سیستمعامل گنو آغاز گشت و بنیاد نرمافزارهای آزاد در اکتبر ۱۹۸۵ بنیان نهاده شد. در سال ۱۹۸۹، اولین نسخه از اجازهنامه همگانی گنو منشتر شد. البته جیپیال اولین پروانه نرمافزار آزاد نبود و قبل از آن پروانههای نرمافزار آزاد دیگری مانند پروانه بیاسدی در سال ۱۹۸۸ عرضه شده بودند. تا کنون پروانههای نرمافزار آزاد زیادی توسط افراد و شرکتهای مختلف منتشر شده است که آز این میان میتوان به پروانه امآیتی، پروانه آپاچی، پروانه آیاسسی، پروانه همگانی موزیلا و ... اشاره کرد.
در سال ۱۹۹۷، اریک ریموند مقالهای با نام کلیسای جامع و بازار را منتشر کرد و در آن به بررسی اصول نرمافزارهای آزاد و مزایای آنها پرداخت. این مقاله به شدت مورد توجه قرار گرفت و یکی از دلایلی بود که شرکت ارتباطات نتاسکیپ، کد منبع مرورگر اینترنتی خود را به صورت نرمافزار آزاد منتشر کرد. این کار باعث شد تا شرکتهای دیگری هم به نرمافزارهای آزاد توجه نشان دهند. کدهای منبع نتاسکیپ، بعدها اساس توسعه مرورگر فایرفاکس و برنامه تاندربیرد قرار گرفت.
مسئله نامگذاری
در زبان انگلیسی، کلمه Free معانی متفاوتی همچون آزادی، رایگان بودن و ... دارد. عدهای بر این عقیده بودند که ممکن است این کلمه باعث کژفهمی شده و باعث شود مردم به نرمافزارهای آزاد، به چشم نرمافزارهای رایگان نگاه کنند. این در حالی است که یک نرمافزار آزاد، لزوماً رایگان نیست. آنها در سال ۱۹۹۸ کمپین دیگری به نام «نرمافزارهای متنباز» (به انگلیسی: Open Source) را تشکیل دادند تا با تاکید بیشتر بر روی مدل توسعه و مسائل تکنیکی، به جای مسائل فلسفی و اخلاقی، مردم و شرکتها را هر چه بیشتر به استفاده از نرمافزار آزاد تشویق کنند. تقریباً هر دو مفهوم، اشاره به یک چیز دارند و یک نرمافزار متنباز، نرمافزار آزاد هم هست (و برعکس)، اما طرفداران ایده نرمافزارهای متنباز، آن را روشی برای توسعه نرمافزارهای بهتر معرفی میکنند و تاکید کمتری بر جنبش اجتماعی و فلسفه پشت این گونه نرمافزارها دارند. طبق گفته موسسه پیشگامان متنباز (که توسط طرفداران ایده نرمافزار متنباز بوجود آمده)، عبارت «نرمافزار آزاد» واژه ای قدیمیتر است و به گونهای منعکس کننده نام بنیاد نرمافزارهای آزاد است، سازمانی که در سال ۱۹۸۵ برای محافظت و ترویج نرمافزارهای آزاد بوجود آمد؛ با اینکه بنیانگذاران ایده متنباز هم از توسعه و ترویج نرمافزارهای آزاد حمایت میکنند، اما در مورد چگونگی ترویج آنها با بنیاد نرمافزارهای آزاد موافق نیستند و اعتقاد دارند که آزادی نرمافزار در درجه اول یک امر عملی است تا ایدئولوژیکی.
پروانههای نرمافزار آزاد
نرمافزارهای آزاد به همراه اجازهنامهای عرضه میشوند که این اجازهنامه آزادیهای نام برده شده را برای کاربران تضمین میکند. از جمله پروانههای نرمافزار آزاد میتوان به پروانه نرمافزار جیپیال، بیاسدی، پروانه امآیتی، پروانه آیاسسی و ... نام برد. این اجازه نامهها تفاوتهایی با یکدیگر دارند و هر کدام توسط افراد و شرکتهای خاصی برای اهداف خاصی منتشر شدهاند. یک دستهبندی کلی برای پروانههای نرمافزار آزاد این است که آیا آنها به صورت کپیلفت هستند یا نه. پروانههایی که کپیلفت هستند، مانند پروانه جیپیال، تاکید دارند که نسخههای مشتق شده از نرمافزار هم باید به صورت نرمافزار آزاد منتشر شوند. مجوزهای غیر کپیلفت تاکیدی بر روی این مساله ندارند و نسخههای مشتق شده از این گونه نرمافزارها را میتوان آزادانه به هر شکل دلخواهی، چه به صورت نرمافزار آزاد و چه به صورت نرمافزار انحصاری منتشر کرد. چنین مجوزهایی را اصطلاحاً «سهلگیرانه» (به انگلیسی: permissive) مینامند. از جمله رایجترین پروانههای کپیلفت، پروانه جیپیال و از جمله رایجترین پروانههای غیر کپیلفت، پروانه بیاسدی و پروانه امآیتی است. امروزه هر دو دسته از این پروانهها به صورت گسترده توسط پروژههای مختلف مورد استفاده قرار میگیرند. برای مثال، هسته لینوکس از پروانه جیپیال و پروژه فریبیاسدی از پروانه بیاسدی استفاده میکنند.
مسئله دیگر در مقایسه پروانههای نرمافزار آزاد، مسئله پیوند دادن کتابخانهها در دیگر نرمافزارهایی است که از یک پروانه غیرمشابه با پروانه کتابخانه استفاده میکنند. برخی از پروانههای نرمافزار آزاد، اجازه نمیدهند که کتابخانههای اشتراکی، توسط نرمافزارهایی که از یک پروانه غیر مشابه استفاده میکنند، پیوند زده شوند و مورد استفاده قرار گیرند. برای مثال، اگر کتابخانهای تحت پروانه جیپیال منتشر شده باشد، تنها نرمافزارهایی که تحت پروانه جیپیال منتشر شدهاند میتوانند به این کتابخانه پیوند داده شوند و از آن استفاده کنند. این کار مانع میشود تا نرمافزارهای انحصاری و یا حتی دیگر نرمافزارهای آزاد از یک کتابخانه با مجوز جیپیال استفاده کنند. بنیاد نرمافزارهای آزاد برای رفع این محدودیت جیپیال، پروانه الجیپیال را منتشر کرده است.
مدل تجاری
نرمافزارهای آزاد را میتوان مستقیماً به فروش رساند و به این ترتیب از فروش آنها کسب درامد کرد. اما این مسئله نباید آزادی های بالا را محدود کند. کاربر پس از خرید یک نرمافزار آزاد، میتواند آن را برای هر منظوری استفاده کرده، تغییر داده، و مجدداً منتشر کند (چه به صورت رایگان و چه به صورت تجاری). علاوه بر فروش مستقیم نرمافزار، میتوان با ارائه خدمات و پشتیبانی از نرمافزارهای آزاد، کسب درامد کرد. مثلاً یک شرکت میتواند با اضافه کردن یک قابلیت جدید به یک نرمافزار آزاد یا در قبال برطرف کردن یک ایراد امنیتی، مبلغی پول از مشتریانش دریافت کند. یا همچنین یک شرکت میتواند نحوه استفاده از یک برنامه را به کارمندان و کاربران یک شرکت دیگر آموزش دهد و در قبال آن دستمزد دریافت کند. برخی از پروانههای سهلگیر نرمافزار آزاد، به کاربران اجازه میدهند تا نرمافزار را بدون در اختیار قرار دادن کدهای منبع توزیع کنند. بدین ترتیب دست کاربران تجاری بیشتر باز خواهد بود. برخی از شرکتها، نرمافزارهای خود را با دو مجوز مختلف، هم به صورت آزاد و هم به صورت غیرآزاد عرضه میکنند.
برخی از توسعهدهندگان مستقل نرمافزار آزاد، کمکهای مالی از طرف افراد داوطلب قبول میکنند. به عنوان مثال، سورسفورج امکاناتی دارد که یک کاربر داوطلب میتواند مبلغی پول را به یک پروژه نرمافزار آزاد اهدا کند.
مثالهایی از نرمافزارهای آزاد کاربردی
هستهٔ سیستمعامل گنو/لینوکس، داروین.
تعدادی از سیستمعاملهای خانواده بیاسدی مانند فریبیاسدی, اپنبیاسدی, نتبیاسدی, دراگونفلیبیاسدی.
کامپایلر جیسیسی، کتابخانهٔ زبان برنامهنویسی سی
کامپایلر کلنگ
پایگاهدادههای رابطهای مانند: mysql، پستگر اسکیوال، برکلی دیبی
زبانهای برنامهنویسی مانند تیسیال، روبی، پایتون، پرل و پیاچپی.
مرورگر وب فایرفاکس (Firefox)
اُپن آفیس (Open Office)
میزکار کیدیای (KDE)
میز کار الاکسدیئی (LXDE)
میزکار اکسافسیئی (XFCE)
میزکار گنوم (Gnome)
برنامههای حروف چینی مانند تک، لاتک و فارسی تک
نرمافزارهای مدیریت محتوا مانند جوملا (!Joomla)، پیاچپی-نیوک (PHP-Nuke)، پست نیوک (postnuke) و مامبو (mambo) ,وردپرس (wordpress), دروپال (drupal) , ....
نرمافزارهای ساخت انجمن (Forum) مانند پیاچپیبیبی (phpbb)، اساماف (smf)، یاب (YaBB) و فروم (phorum)
ویرایشگرهای متن ویم و ایمکس
مجموعه اداری لیبرهآفیس
یکی از بر نامه نویسان مارک۱ یک زن بود به نام گریس هاپر . این زن اولین ویروس کامپیوتر به نام باگ را پیدا کرد . یک حشره مرده که در دستگاه افتاده بود و بالهایش مانع خواندن روزنهها میشد .
باگ برای نشان دادن نقصی در سیستم بکار میرود از آن زمان این کلمه سال ۱۹۵۳ گریس هاپر اولین زبان پیشرفته به نام فلو ماتیک را اختراع کرد، شناخته شد .
زبانهای سطح بالا به منظور راحت تر فهمیدن انسانها ساخته شد . چنان که زبان باینری برای کامپیوتر قابل فهم تر بود که بعدها به نام کوبول اما یک زبان برنامه نویسی پیشرفته بدون یک برنامهٔ مترجم ارزشی نداشت . تا زبان سطح بالا را به زبان باینری (یا زبان ماشین ) ترجمه کند که هاپر اولین مترجم یا کامپایلر را هم ساخت . این زن تا سن ۷۹ سالگی در زمینه کامپیوتر و برنامه نویسی فعال بود .
رایانههای نسل اول
در سال ۱۹۳۸٬ جان وینسنت آتاناسف استاد فیزیک و ریاضیات دانشگاه ایالتی آیووا در آمریکا به فکر ساختن اولین رایانه الکترونیکی یک منظوره افتاد. او با همکاری دستیارش و دانشجوی فارغالتحصیلش کلیفرد بری، با استفاده از لامپ خلاء شروع به ساختن رایانهٔ مزبور کرد و آن را کامپیوتر آتاناسفبری یا ABC نامید که میتوانست ۲۹ معادلهٔ چند مجهولی را با ۲۹ مجهول حل کند . این اولین ماشینی بود که توانست دادهها را به عنوان بار الکتریکی در خازن ذخیره کند . کاری که امروزه کامپیوترها برای ذخیره اطلاعاتشان در حافظه اصلی میکنند . اما این دستگاه قابل برنامه ریزی نبود وطراحی انها تنها مناسب برای یک نوع از مشکلات ریاضی (معادلات چند مجهولی ) بود . ولی به خاطر درگیری ارتش آمریکا در جنگ جهانی دوم و لزوم پیوستن آناتاسف به ارتش همکاری او با ارتش آمریکا، ساخت این رایانه عملی نشد و ساخت آن ادامه نیافت.متأسفانه مخترعینش هیچ تلاشی برای نگه داری آن نکردند و سرانجام این دستگاه رها شده و به وسیله کسانی که به داخل اتاق آمده بودند غارت شد .
یکی دیگر از کسانی که در زمینهٔ کامپیوترهای مدرن کار کردکلوسوس بود که در طول جنگ جهانی دوم به کمک دولت بریتانیا به هدف شکستن کدهای پنهانی آلمانیان دستگاهی ساخت .
در حقیقت انگلستان جهان را به سوی ساخت و طراحی ماشینهای الکترونیکی هدایت کرد که برای شکستن رمزها اختصاص یافته بود و معمولاً قادر به خواندن امواج رادیویی کد دارالمانیها بود .کامپیوتر هاروارد مارک ۱ اتانا سوف بری و کلوساس انگلیسی سهم عمدهای در این صنعت دارا بودند ولی پیش گامان آمریکایی و انگلستانی هنوز بر سر اینکه چه کسی اول بود بحث میکردند. اما زود تر از ان زیوس رشته کامپیوترهایی برای اهداف عمومی در نازی آلمان ساخته بود در حقیقت زد ۱ اولین بود چرا که در بین سالهای ۱۹۳۶ و۱۹۳۸ ساخته شده بود.
سومین ماشین زیوس که به زد ۳ معروف است درسال ۱۹۴۱ ساخته شد، که احتمالاً اولین کامپیوتر دیجیتال چند منظوره قابل برنامه ریزی عملی بود . یعنی به وسیله نرمافزار کنترل میشود .زد ۳ به وسیله هجوم بمباران پیوسته خراب شد . زد ۱ و زد۲ هم به همان سر نوشت دچار شدند و تنها زد ۴ باقی ماند زیرا زیوس ان را داخل واگنی گذاشت و روانه کوهستان کرد.
در سال ۱۹۴۳ فیزیکدانی به نام جان ماکلی با همکاری جی پرسیر اکرت که مهندس برق بود، شروع به ساختن اولین رایانه الکترونیکی همه منظوره نمود. این رایانه که در ساخت آن افزون بر اجزاء الکترومکانیکی، از هجده هزار لامپ خلا استفاده شده بود بنام انیاک نامگذاری شد و در سال ۱۹۴۶ میلادی آماده نصب و راهاندازی گردید و در زمان خود پیچیدهترین دستگاه الکترونیکی جهان بود. این رایانه قادر به انجام سیصد عمل ضرب در هر ثانیه بود و به مدت ۹ سال مورد استفاده ارتش آمریکا قرار گرفت.
یکی از موفقیتهای کامپیوتر هاروارد ( مارک ۱ ) بود که به طور شریکی بین هاروارد و ای بی ام در سال ۱۹۴۴ ساخته شد . این اولین کامپیوتر قابل بر نامه ریزی دیجیتال که در آمریکا ساخته شد، بود .ولی آن به طور کامل الکترونیکی نبود . در عوض این دستگاه بدون سوئیج و کلاج و میله و دستگاه تقویت و غیره ساخته شده بود .وزن ماشین ۵ تن بود و در آن ۵۰۰ مایل سیم جا داده شده بود . آن دارای طول ۸ فیت ودرازی ۵۱ فیت بود .مارک ۱ به مدت به مدت ۱۵ سال بدون توقف کار کرد و به شکل یک اتاق بافندگی شبیه بود .
مارک ۱ عملیات را روی اعدادی انجام میداد که ۲۳ رقم عرض داشتند . او میتوانست ۲تا از این اعداد را جمع یا تفریق کند در زمانی برابر سه دهم ثانیه یا انها را ضرب کند در حدود ۴ ثانیه و تقسیم کند در ۱۰ ثانیه ۴۵ سال بعد کامپیوترها میتوانستند عملیات جمع را در یک بیلیونیم ثانیه انجام دهند.
اگر چه مارک ۱ سه بخش مساوی از میلیونها اجزا داشت ولی تنها میتوانست ۷۲ عدد را ذخیره کنند . و ۱۰میلیون عدد دیگر را در هارد دیسک. و سرعت نمایش این اطلاعات بسیار بسیار بالا است . برای همین سرعت بالاست که کامپیوترها ی الکترونیکی قاتل دستگاههای مکانیکی به حساب میایند .هاروارد ایکن یکی از مدیران طراحی مارک ۱ در نامهٔ فکاهی خود نوشت تا سال ۱۹۴۷شش کامپیوتر الکترونیکی برای انجام محاسبات تمام آمریکا کافی است . برای همین ای بی ام شروع به تحقیق کرد که ایا میشود این دستگاه را به یک شکل استا ندارد درآورد چرا که تا آن زمان تنها دولت و ارتش آمریکا توان پرداخت چنین هزینهای را داشتند . البته نظریه ایکن زیاد هم بد نبود جرا که او از انقلاب میکرو کامپیوترها در سال ۱۹۵۹ بی خبر بود .
اپل ۱ که با عنوان «خودتان انجام دهید» بدون ظاهری زیبا فروخته شد . کامپیوترها به صورت شگفت انگیزی گران بودند چرا که در آن نیاز به اسمبلی دستی زیادی بود .
در سال ۱۹۴۵ نابغه ریاضی جان فون نویمان طی مقالهای استفاده از سیستم اعداد دودویی (Binary) در ساختمان رایانه و نظریه انباشت برنامه در حافظه رایانه را مطرح کرد و بر این اساس ساخت رایانه رقمی الکترونیکی همه منظورهای را پیشنهاد نمود و آن را ادواک نامید. این دستگاه رایانهای با توانایی ذخیره داخلی برنامهها و سرعت بالای الکترونیکی بود. فن نویمان را اغلب بهعنوان بنیانگذار ذخیرهسازی برنامهها میشناسند.
ساخت این رایانه در سال ۱۹۴۶ شروع شده بود و تا اواخر سال ۱۹۵۰ به تاخیر افتاد. با نگرش به اینکه در طراحی و ساخت رایانههای مدرن از نظریههای نویمان بهره گرفته میشود، لذا وی را پدر کامپیوتر میخوانند.
در سال ۱۹۴۷ موریس ویلکس استاد دانشگاه کمبریج انگلیس شروع به ساخت اولین رایانه رقمی الکترونیکی حاوی برنامههای ذخیره شده نمود و آن را ادساک نامید. ساخت این رایانه در سال ۱۹۴۹ به پایان رسید و آماده نصب و بهرهبرداری گردید.
در سال ۱۹۵۰ اولین رایانه دارای برنامه ذخیره شده ساخت آمریکا به نام سیک در سازمان ملی استانداردها در واشنگتن نصب گردید و بیش از ده سال مورد استفاده قرار گرفت. در فاصله سالهای ۱۹۵۱ تا ۱۹۵۷ نیز شرکتهای رایانهای آی بی ام و یونیواک رایانههای الکترونیکی گوناگونی ساخته و عرضه کردند.
در رایانههای نسل اول از ویژگی دو حالته بودن لامپ خلا که وسیلهای الکترونیکی است و میتواند خاموش یا روشن باشد بهره گرفته شد و در اغلب آنها لامپ خلا در قسمت محاسبه و منطق بکار رفته بود. رایانههای نسل اول دارای حجم زیادی بودند و میزان حافظه، سرعت و دقت در آنها کم بود و به انگیزه استفاده از لامپ خلا و ایجاد گرمای زیاد، استفاده از آنها به چند ساعت در روز محدود بود.
رایانههای نسل دوم
در رایانههای نسل دوم ترانزیستور جایگزین لامپ خلا گردید. ترانزیستور چند برابر کوچکتر از لامپ خلا بود و تاثیر زیادی بر روی سرعت محاسبات رایانه داشت. ظرفیت حافظه در رایانههای نسل دوم در قیاس با رایانههای نسل اول دارای ظرفیت حافظه بیشتر و سریعتر، کوچکتر و قابل اطمینانتر بودند.
در فاصله زمانی سالهای ۱۹۵۸ تا ۱۹۶۴ توسط شرکتهای کامپیوتری انسیآر٬ ایبیام و سیدیسی رایانههای مختلف الکترونیک ساخته شدند و عرضه شدند و در سال ۱۹۶۳ اولین مینی رایانه بنام پیدیوی ۸ توسط شرکت دک معرفی گردید.
انقلاب میکروالکترونیکها باعث شد مدارهای مجتمع که به اندازهٔ ناخن انگشت شست شما باشند جای آن سیم کشیهای دستی را بگیرد.
اولین سود مدارهای مجتمع ترانزیستورها نیستند بلکه کوچکی آنها هست چرا که ترانزیستورها فایدهٔ تعدادی آنها است و بیشتر از میلیونها ترانزیستور میتواند تولید شود و به فرایندهای ماشینی دستگاه مرتبط شود تمام عناصر بر روی یک مدار مجتمع ساخته شدهاند همزمان در طریق شماره کوچک (شاید ۱۲) از پوشانههای بصری که هندسهٔ هر لایه را تعریف میکند. اینها سرعت پردازش و ساختن کامپیوترها را افزایش میدهد واز این جهت هزینهٔ آنها هم کاسته شد همان گونه که دستگاه چاپ یوهانس گوتنبرگ ساختن کتابهایش را سرعت داد و بدین وسیله آنها را برای عموم قابل خرید کرد
کامپیوتر ای بی ام استرچ سال ۱۹۵۹ درازای ۳۳ فوتی را برای نگاه داشتن ۱۵۰۰۰۰ ترانزیستور داخلش را لازم داشت . این ترانزیستورها به طور شگفت انگیزی کوچک تر از لامپهای خلا هستند . اما آنها عناصر منحصر به فردی بودند که نیاز به اسمبلی منحصر به فردی داشت در اوایل دهه ۱۹۸۰ این ترانزیستورهای زیاد توانست به طور هم زمان بر روی یک مدار مجتمع ساخته شود امروزه کامپیوترهای پنتیوم ۴ شامل ۴۲۰۰۰۰۰۰ ترانزیستور برروی یک مدار مجتمع به اندازهٔ یک ناخن شست است .
رایانههای نسل سوم
برای ساختن کامپیوترهای سریعتر و قویتر کوششها همچنان ادامه داشت تا در اوایل ۱۹۶۰ اولین کامپیوتر نسل سوم (Third Generation) به بازار عرضه شد. این کامپیوتر از سری IBM ۳۶۰ بود که برای ساختن آن ۵ میلیارد دلار سرمایه گذاری شد که بزرگترین پروژه مالی بخش خصوصی تا آن تاریخ به شمار میرفت.این کامپیوتر که مدلهای گوناگونی از نظر ظرفیت و سرعت کار داشت، در هر دو امور تجاری و علمی قابل استفاده بود.
جدیدترین تحول در تکامل کامپیوترها، ساختن وسایل ضبط اطلاعات با قابلیت دسترسی مستقیم (Direct Access Device) در این نسل بود.به این ترتیب کاربران توانستند به هر یک از اجزا اطلاعات ذخیره شده در یک مجموعه عظیم اطلاعاتی، در کسری از ثانیه دسترسی پیدا کنند.علاوه بر آن در این نسل از کامپیوترها، سعی شده که قطعات مدارها را هرچه کوچکتر و با حجم کمتر بسازند و بدین ترتیب مدارهای مجتمع (Integrated Circuits(IC)) به وجود آمدند.ویژگی دیگر رایانههای نسل سوم امکان استفاده همزمان چندین کاربر از یک رایانه بود. این رایانهها بر خلاف نسل قبلی که فقط در یکی از دو حیط علمی و غیرعلمی توانایی کار داشتند، توانایی کار در هر دو محیط را دارا بودند.
سرعت عملیان در رایانههای نسل سوم بسیار افزایش یافت. عملیات حسابی و منطقی در این رایانهها در مایکرو ثانیه(یک میلیونیم ثانیه) و حتی نانو ثانیه (یک بیلیونیم ثانیه) انجام میشد. در ایران، از زمان ارایه کامپیوترهای نسل سوم کاربرد کامپیوتر به سرعت توسعه یافت و مؤسسات مختلف تعدادی از آنها را نصب کردند.
بارزترین ویژگی رایانههای نسل سوم استفاده از مدارهای مجتمع یا آی سی در قسمتهای مختلف ساختمان رایانه بود. این مدارها که از حدود ۱۰۰ عنصر منطقی تشکیل شده بود و در هر عنصر منطقی حدود ۱۰ عنصر الکترونیکی نظیر ترانزیستور و دیود بکار رفته بود، به روش خاصی در سطحی به اندازه یک سانتیمتر مربع تجمع پیدا میکردند و بدین لحاظ اندازه و حجم رایانههای نسل سوم در برابر با رایانههای نسل دوم کاهش یافتند. ظرفیت حافظه در رایانههای نسل سوم به چندین برابر قبل افزایش یافت.
در فاصله زمانی سالهای ۱۹۶۴ تا ۱۹۷۱ شرکتهای از قبیل آیبیام٬ جنرال الکتریک٬ باروز٬ یونیواک٬ آرسیای، انسیآر، سیدیسی٬ هانیول و تعداد زیادی از شرکتهای کوچکتر ارائه گردید. بویژه شرکت دک با تولید مینی رایانههای پیدیپی ۱۰ و پیدیپی ۱۱ راه را برای پیشرفت سریع پدیده مینی رایانهها باز کرد و هزاران مینی رایانه به بازار عرضه کرد.
رایانههای نسل چهارم
در ساختمان رایانههای نسل چهارم از مدارهای مجتمع الکترونیکی با تراکم متوسط و زیاد که حاوی هزارها تا صدها هزار عنصر الکترونیکی بودند و بر روی یک تراشه مربع یا مستطیل شکل از جنس سیلیکان به سطح یک سانتیمتر مربع قرار گرفته بودند استفاده میگردید. سرعت عمل و ظرفیت حافظه رایانههای نسل پنجم به نسبت نسل قبلی افزایش زیادی داشت. توانایی قرار دادن مدارهای مجتمع الکترونیکی زیادی بر روی یک سطح بسیار کوچک سبب پیدایش ریزپردازنده در آغاز این دوره گردید که میتوانست بر روی یک سطح یک تراشه قرار بگیرد. ریز پردازنده دارای کلیه مدارهای مورد نیاز جهت عملیات حسابی، منطقی و کنترلی بود و با افزودن تعدادی تراشه جهت حافظه و سایر مدارهای مکمل به آن یک پردازشگر کامل بوجود آمد و در نتیجه ریز رایانه پا به عرصه وجود گذاشت.
با معرفی اولین ریزپردازنده به نام ۴۰۰۴ در سال ۱۹۷۱ توسط شرکت اینتل و عرضه ریزوردازنده ۸ بیتی ۸۰۸ در اواخر همان سال و ریزپردازنده ۸۰۸۰ در سال ۱۹۷۴ توسط همان شرکت، زمینه کاری جهت ساختن رایانههای شخصی (PC) فراهم گردید. با معرفی ریز رایانه سلب ۸-اینچ در سال ۱۹۷۲ توسط شرکت سلبی و ریز رایانه التایر ۸۸۰ در سال ۱۹۷۵ توسط شرکت میتس و ساخت ریزپردازندههای مختلف توسط شرکتهای اینتل٬ زیلاک٬ موتورولا و اماُاس تکنالوژی، فرایند ساخت و معرفی ریزرایانهها روز به روز گسترش یافت و توسط شرکتهای مختلف از آن جمله اپل(Apple)٬ آتاری(Atari)٬ کامودر(commodore) و آیبیام(IBM) ریز رایانههای گوناگونی عرضه گردید.
در دهه ۸۰ میلادی در زمینه رایانههای بزرگ و مینی رایانهها شرکتهای مختلف از آن جمله آیبیام ٬سیدیسی ٬دک و باروز رایانههای بسیار پیشرفتهای ساختند و به بازار عرضه نمودند.
در همین دهه ابر رایانههای پیشرفتهای توسط شرکتهای مختلف از جمله کری آیبیام، سیدیسی٬ فوجیتسو ٬ هیتاچی و نک ساخته شدند.
رایانههای نسل پنجم
در رایانههای نسل پنجم که از سال ۱۹۹۰ به بعد هستند اندازهٔ تراشهها خیلی کوچکتر شده و از پردازندههای با تراکم خیلی زیاد در آنها استفاده میشود. در این نسل از رایانه بجای معماری ترتیبی از معماری موازی بهره گرفته شده. کشورهای پیشرفتهٔ زیادی مانند آمریکا و ژاپن پژوهشهای زیادی برای ساخت رایانههای بسیار پیشرفته در گذشته و حال انجام دادهاند.
ابر رایانههای در دست ساخت به نام سی ام ۵ که از ۳۲ تا ۱۶۰۰۰ پردازنده بصورت موازی بهره خواهند گرفت سرعت رایانه را تا دو برابر ترافلاپس (تریلیون عملیات اعشاری در ثانیه) خواهند رساند.
نسل پنجم رایانهها که ایده آن اولین بار توسط ژاپنیها در سال ۱۹۸۰ مطرح شد، ساختن کامپیوترهایی را پیشنهاد میکند که بتوانند بیاموزند، استنباط کنند و تصمیم بگیرند و بطور کلی رفتاری داشته باشند که معمولاً در حوزه منطق و استدلال خاص انسان قرار دارد و به عبارت ساده تر هوشمند باشند. در این نسل از مدارهای مجتمع با تراکم فوق العاده بالا استفاده میشود.
بعد از موفقیت کامل بشر در ساخت کامپیوترهای هوشمند، ایده بعدی انسان طراحی کامپیوتری خواهد بود که مدارهای داخلی آن کپی برداری عینی از مغز آدمی است.
با توجه به تحولات در تغییر نسلهای کامپیوتری، در نسل بعد باید منتظر تغییرات زیر باشیم:
کاهش حجم مدارها تا حد مینیاتوری شدن و نیز کاهش توان مصرفی لازم
افزایش پیچیدگی مدارها
افزایش کارایی و بهبود کیفیت عملکرد مدارها
افزایش سرعت عملکرد مدارها
مشخصات کلی
پیشرفتهای سختافزاری
الف)مینیاتوری کردن(تقلیل حجم دستگاهها و اجزای آنها)
ب)افزایش ظرفیت حافظه به چندین برابر قبل
ج)استفاده از دستگاههای واسطه(Media)، با قابلیت دسترسی مستقیم
د)قدرت ارتباط با نقاط دور و متعدد
پیشرفتهای نرمافزاری
الف)هماهنگی بیشتر با سختافزار
ب)هماهنگی بیشتر با سیستمعامل
ج)پیشرفت در زبانهای برنامه نویسی و به کارگیری زبانهای سطح بال
عملیات و بهره برداری
الف)استفاده از روشهای پردازش مستقیم(on-line) و بازده فوری(real time)
ب)اجرای همزمان چند برنامه با یکدیگر
تقسیمبندی و تفکیک نسلهای کامپیوتری تا قبل از نسل چهارم(Forth Generation)، به لحاظ تغییرات عمده در پیشرفت و تکامل کامپیوتر در هر نسل، به سهولت صورت گرفت. دراوایل سال ۱۹۷۰ تکنیکهای جدیدتری در ساخت و بهره گیری از کامپیوترها به کار برده شدکه بسیاری از دست اندرکاران آن را نسل چهارم نامیدند. مهمترین تغییرات در سختافزار کامپیوترهای نسل چهارم، به کارگرفتن مدارهای مجتمع با تراکم زیاد و تراکم خیلی زیاد است.
در نسل سوم از تراکم SSI(Small Scale Integration) و (Scale Integration Medium)MSI یعنی تراکم کم و تراکم متوسط بهره گرفتند. ولی درنسل چهارم از تراکم (Scale Integration Large) LSI،( Scale Integration Very Large) VLSI و (Ultra Large Scale Integration)ULSI یعنی تراکم بالا، خیلی بالا وفوق العاده بالا بهره میگیرند. نسل چهارم همچنین از حافظه نیمه هادی (Semiconductor) ومیکرو پروسسور (Microprocessor)، سیستمهای محاورهای (Interactive System)، پردازش مستقیم و شبکههای کامپیوتری (Computer Network) بهره جستهاست.
توسعه و پیشرفت سختافزار کامپیوترهای فعلی، در مقایسه با نسلهای قبلی با بررسی چند عامل نظیر سرعت، اندازه، هزینه و ظرفیت حافظه روشن میگردد. در کامپیوترهای اولیه از لامپ خلا استفاده میشد و به همین جهت حجم و وزن زیادی داشتند (کامپیوتر انیاک ۳۰ تن وزن داشت) به کار بردن ترانزیستور در نسل دوم به طور قابل ملاحظهای، اندازه کامپیوترها را کاهش داد. در یک فوت مربع از کامپیوترهای نسل اول ۶۰۰۰ مؤلفه وجود داشت که با بکاربردن ترانزیستور۱۰۰۰۰۰ مدار درهمان حجم کار میکرد. در کامپیوترهای فعلی که در آنها میکروالکترونیک و مدارهای مجتمع با تراکم زیاد به کار میرود بیش از ۱۰ میلیون مدار در یک فوت مربع کار میکند.
برنامه
برنامه رایانهای رشته دستورالعملهایی است که توسط رایانه قابل اجرا میباشد. این اصطلاح میتواند به کد اصلی یا نگارش اجرایی آن (زبان ماشین) نیز اطلاق گردد. برنامههای رایانه میتوانند پایانپذیر یا پایان ناپذیر باشند. در برنامههای کامپیوتری هدف اجرای روالی خاص جهت رسیدن به مقصودی خاص میباشد.
نرمافزار
نرمافزار (به انگلیسی: Software) یا برنامه، مجموعهای از دستورالعملهای دقیق و مرحله به مرحله است که هدف خاصی را دنبال میکنند.
ظاهراً، اولین بار جان توکی در سال ۱۹۵۸ این واژه را بهاین معنا بهکار بردهاست. احتمالاً این واژه در مقابل سختافزار (به انگلیسی: Hardware) به کار بردهاند که بسیار پیش از پیدایش رایانه (به معنای اسباب و اشیاء) بهکار میرفتهاست.
دو گروه کلی نرمافزارها
نرمافزارهای رایانه را میتوان به دو دسته بزرگ تقسیم کرد:
نرمافزار سیستم (به انگلیسی: System software)
نرمافزار کاربردی (به انگلیسی: Application software)
میتوان گفت نرمافزارهای کاربردی، برنامههای مورد استفاده کاربرند و نرمافزارهای سیستمی، مدیریت رایانه را برعهده دارند. مهمترین نرمافزار سیستم، سیستمعامل است.
سیستم عامل
وقتی برنامهای را روی رایانه خود نصب میکنید، اجزای سختافزاری آن به فرمان آن برنامه در میآیند. برای نمونه هنگامی که با یک برنامه اجرای موسیقی کار میکنید، کارت صدای رایانه تان با برنامه پخش موسیقی همکاری میکند و یک آهنگ یا پرونده (فایل) صوتی را از طریق بلندگوی رایانه تان پخش میکند.
این ارتباط میان نرمافزار و سختافزار توسط سیستم عامل انجام میشود. این تنها قسمتی از کار سیستم عامل است.
سیستم عامل خود یک برنامه نرم افزاری است با این تفاوت که چون تمام منابع و امکانات سخت افزاری در اختیار وی می باشد دارای ویژگی منحصر به فرد می باشد بنابراین آن را در رده نرم افزارها می خوانیم با این ویژگی که از اهمیت خاصی برخوردار است. به بیان دیگر سیستم عامل یک برنامه جامع است که اجازه در اختیار قراردادن منابع و امکانات سخت افزاری را برای نرم افزارها صادر می کند و این سیستم عامل است که مسئول صحت عملکرد سیستم و منابع آن است.
سیستم عامل شامل 4 بخش مهم است
1- مدیریت پردازش و پردازشگر
2- مدیریت حافظه
3- مدیریت دستگاههای ورودی و خروجی (I/O)
4- مدیریت فایل
سه گروه کلی نرمافزارهای معماری
از دیدگاه ساختاری (معماری) (architecture)، نرمافزارها به دستههای زیر تقسیم میشوند:
کاربر-بنیان یا Client Base
کارگزار-بنیان یا Server Base
کاربر کارگزار بنیان یا Client-Server Base
امروزه واژه نرمافزار را در معناهایی به جز معنی برنامه رایانهای نیز بهکار میبرند. مثلاً در دانش مدیریت برای اشاره به روشها و دانش فنی (در برابر وسایل و تجهیزات و نیروی انسانی). نرمافزارها انواع گوناگونی دارند که مهم ترین دسته بندی آنها دستهٔ تجاری و آزاد است. به ویژه با رویکردهای طرحهای گنو و لینوکس معنای ژرف تری به نرمافزارهای آزاد داده شده تا آنجا که برخی نرمافزارها را نماد فرهنگ می دانند. نرمافزارها را برنامه نویسان تدوین کرده و انتشار میدهند. این برنامه نویسان ممکن است در یک شرکت مشغول کار باشند یا در خانه برنامه نویسی کنند مانند برنامه نویسان برخی نرمافزارهای لینوکس. امروزه بیشتر کاربران تنها با ظاهر گرافیکی این برنامهها کار میکنند و اقدامات بسیاری از آنها از دید کاربر پنهان میماند به عبارتی هر نرمافزار مجموعهای از رمزها است که از الگوریتمی خاص پشتیبانی میکنند این رمزها خود با رمزهای گرافیکی آمیخته شده و بسیاری از اقدامات برنامه به دور از چشم کاربر عادی رخ میدهد. برنامهها با رمزهایی نوشته میشوند که بعداً یک رمزخوان آن را در رایانه کاربر اجرا میکند.
رقابت نرمافزاری
در حال حاضر نرمافزارهای کامپیوتری فراوان را میتوان در بازار یافت که به طور جدی به رقابت خود برای بقا ادامه میدهند. از مسائل قابل ذکر در این مورد میتوان به خرید سهام شرکتهای نرمافزاری کوچک و بزرگ توسط شرکتهای دیگر اشاره نمود. همچنان که شرکت بزرگ گوگل به خرید سهام شرکتهای بزرگ همچنان ادامه میدهد، در مدت کمی توانسته بسیاری از شرکتها را تحت سلطه خود درآورد.
نرمافزار سیستم
نرمافزار سیستم به نرمافزاری در رایانه گفته میشود که به کارکرد سیستم رایانه یا کاربردهای سطح پایین (یا Low Level) رایانه مربوط باشد. این نرمافزارها به ساختار فیزیکی سختافزار رایانه وابسته هستند و در نوشتن آنها از زبانهای سطح پائین مانند زبان اسمبلی استفاده میشود. سیستمعامل و درایورها از نرمافزارهای سیستم هستند. از جمله زبان هایی که برای نگارش نرمافزارهای سیستمی استفاده میشود، زبان برنامه نویسی C میباشد. کار کردن با سی برای برنامه نویسان راحت تر است و آنان این زبان را به اسمبلی ترجیح میدهند. اگر برای نگارش نرمافزار سیستمی مشکل محدودیت فضای سختافزاری داشته باشیم بهتر است با زبان اسمبلی کار کنیم که حجم آن پایین تر است. نرمافزارهای سیستمی به سختافزار وابسته اند.
در برابر نرمافزار سیستم، نرمافزار کاربردی قرار دارد که برای کاربردهای سطح بالا و غیرسیستمی رایانه است و معمولاً به زبانهای سطح بالا نوشته میشود که از جزئیات سختافزاری سیستم مستقل است.
نرمافزار کاربردی
نرمافزار کاربردی (به انگلیسی: Application software) عبارت است از نرمافزاری که با استفادهٔ مستقیم از منابع و قابلیتهای رایانه کاری را مستقیماً برای کاربر انجام میدهد. باید توجه داشت که این عبارت در مقابل عبارت نرمافزار سیستمی معنی پیدا میکند.
نرمافزار سیستمی در مقابل در پسزمینه عمل میکند و خدماتی را فراهم میکند که دیگر نرمافزارها و یا سیستمعامل میتوانند برای انجام کارهای خود از آن استفاده کنند. اما در عوض معمولاً مستقیماً با کاربر عادی در تماس نیست و خدماتی را به او ارایه نمیدهد.
در عمل بیشتر نرمافزارهایی که کاربران با آنها سر و کار دارند از این دسته محسوب میشوند. برای مثال میتوان به نرمافزارهای رومیزی یعنی واژهپردازها، صفحه گستردهها، نرمافزارهای طراحی گرافیکی، بازیهای رایانهای و امثال آنها اشاره کرد.
بسیاری نرمافزارهای کاربردی، برای توسعهدهندگان ابزار رابط برنامهنویسی کاربردی هم فراهم میکنند تا بتوان از قابلیتهای نرمافزار در نرمافزارهای جدید استفاده کرد. برای مثال نرمافزار ادوبی آکروبات هنگام نصب ایپیآی فراهم میکند که برنامهنویس میتواند با استفاده از آن تواناییهای آکروبات را در برنامهٔ خود به کار گیرد.
برای عنوان نمونههای دیگر میتوان به نرمافزارهای پردازش متن، برگههای گسترده (صفحات گسترده) و نرمافزارهای پخش نوا و نما اشاره کرد.
مهندسی نرمافزار
مهندسی نرمافزار (به انگلیسی: Software engineering) یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرمافزاری با کیفیت که قابل اطمینان و با صرفه بوده و برروی ماشینهای واقعی به طور کارآمدی عمل کند.
مهندسی نرمافزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرمافزاری با کیفیت است.
مهندسی نرمافزار اغلب شامل فرایند خطی تحلیل، طراحی، پیادهسازی و آزمون است؛ که با به کارگیری روشهای فنی و علمی از علوم مهندسی موجب تولید نرمافزاری با کیفیت مطلوب در طول یک فرایند انتخابی مناسب پروژه میشود.
کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههایی از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرمافزار اداری، بازیهای رایانهای و اینترنت.
فناوریها و خدمات مهندسی نرمافزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: پایگاه دادهها، زبانها، کتابخانهها، الگوها، فرایندها و ابزار.
مهم ترین شاخص مهندسی نرمافزار
مهم ترین شاخص در مهندسی نرمافزار تولید نرمافزار با کیفیت مناسب در جهت «نیازهای مشتری» است.
پیشینه مهندسی نرمافزار
اصطلاح مهندسی نرمافزار پس از سال ۱۹۶۸ میلادی شناخته شد. این اصطلاح طی نشست «مهندسی نرمافزار ناتو ۱۹۶۸» (که در گارمیش-پارتنکیرشن، آلمان برگزار شد) توسط ریاست نشست فریدریش ال باوئر معرفی شد و از آن پس بهطور گسترده مورد استفاده قرار گرفت.
اصطلاح مهندسینرمافزار عموماً به معانی مختلفی بهکار میرود:
بهعنوان یک اصطلاح غیر رسمی امروزی برای محدوده وسیع فعالیتهایی که پیش از این برنامهنویسی و تحلیل سامانهها نامیده میشد.
بهعنوان یک اصطلاح جامع برای تمامی جنبههای عملی برنامهنویسی رایانه، در مقابل تئوری برنامهنویسی رایانه، که علوم رایانه نامیده میشود.
بهعنوان اصطلاح مجسمکننده طرفداری از یک رویکرد خاص نسبت به برنامهنویسی رایانه که اصرار میکند، مهندسی نرمافزار، بهجای آنکه هنر یا مهارت باشد، باید بهعنوان یک رشته عملی مهندسی تلقی شود و از جمعکردن و تدوین روشهای عملی توصیهشده به شکل متدولوژیهای مهندسی نرمافزار طرفداری میکند.
مهندسی نرمافزار عبارتست از:
کاربرد یک رویکرد سامانهشناسی، انتظامیافته، قابل سنجش نسبت به توسعه، عملکرد و نگهداری نرمافزار، که کاربرد مهندسی در نرمافزار است.
مطالعه روشهای موجود در استاندارد IEEE
محدوده مهندسی نرمافزار و تمرکز آن
مهندسی نرمافزار به مفهوم توسعه و بازبینی یک سامانه نرمافزاری مربوط میباشد. این رشته علمی با شناسایی، تعریف، فهمیدن و بازبینی خصوصیات مورد نیاز نرمافزار حاصل سر و کار دارد. این خصوصیات نرمافزاری ممکن است شامل پاسخگویی به نیازها، اطمینانپذیری، قابلیت نگهداری، در دسترس بودن، آزمونپذیری، استفاده آسان، قابلیت حمل و سایر خصوصیات باشد.
مهندسی نرمافزار ضمن اشاره به خصوصیات فوق، مشخصات معین طراحی و فنی را آماده میکند که اگر بهدرستی پیادهسازی شود، نرمافزاری را تولید خواهد کرد که میتواند بررسی شود که آیا این نیازمندیها را تأمین میکند یا خیر.
مهندسی نرمافزار همچنین با خصوصیات پروسه توسعه نرمافزاری در ارتباط است. در این رابطه، با خصوصیاتی مانند هزینه توسعه نرمافزار، طول مدت توسعه نرمافزار و ریسکهای توسعه نرمافزار درگیر است.
نیاز به مهندسی نرمافزار
نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای نوین قابل مقایسه هستند. بهعنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرمافزارِ هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.
با توجه به گسترش روزافزون دنیای رایانه امروزه بیش از هر زمان دیگری نیاز به متخصصان رایانه احساس میشود. متاسفانه این رشته در ایران بازار کار خوبی ندارد طبق آمارها ۶۳٫۲۷ درصد از فارغالتحصیلان در سال ۹۰ مشغول به کار در سایر مشاغل هستند. اما برای مهندسان سختافزار هم امکان کار در شرکتهای تولیدکننده قطعات و دستگاهها و مراکز صنعتی – تولیدی بسیار فراهم است و از نظر سطح درآمدی هم با توجه به دانش و پشتکار شخصی در حد متوسط قرار دارند. به طور کلی این رشته در ایران با استقبال چندانی رو به رو نیست؛ این نیز حاکی از نبود برخی از زیرساختها در ایران هست.
تکنولوژیها و روشهای عملی
مهندسان نرمافزار طرفدار تکنولوژیها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگار هستند. این بحث در سالهای دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسان نرمافزار از تکنولوژیها و روشهای عملی بسیار متنوعی استفاده میکنند. کسانی که کار عملی میکنند از تکنولوژیهای متنوعی استفاده میکنند: کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی میکنند از روشهای عملی بسیار متنوعی استفاده میکنند تا تلاشهایشان را اجرا و هماهنگ کنند: برنامهنویسی در دستههای دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرمافزار بایستی رسیدن به ایدههای جدید خارج از الگوهای طراحی شده قبلی باشد، که باید شفاف بوده و بهخوبی مستند شده باشد.
با وجود رشد فزاینده اقتصادی و قابلیت تولید فزایندهای که توسط نرمافزار ایجاد شده، هنوز هم بحث و جدلهای ماندگار درباره کیفیت نرمافزار ادامه دارند.
ماهیت مهندسی نرمافزار
دیوید پارناس گفتهاست که مهندسی نرمافزار یک شکل از مهندسی است. استیو مککانل گفتهاست که هنوز اینطور نیست، ولی مهندسی نرمافزار باید یک شکل از مهندسی شود. دونالد کنوت گفتهاست که برنامهنویسی یک هنر است.
دیوان فعالیتهای آماری آمریکا مهندسان نرمافزار را به عنوان زیرگروهی از «متخصصان رایانه»، با فرصتهای شغلیای مانند «دانشمند رایانه»، «برنامه نویس» و «مدیر شبکه» دسته بندی کردهاست. BLS تمام مهندسان دیگر این شاخه علمی، که شامل مهندسان سختافزار رایانه نیز هست، را بهعنوان «مهندسان» دسته بندی میکند.
نرمافزار آزاد
نرمافزار آزاد (به انگلیسی: Free software) نرمافزاری است که بههمراه کد منبع توزیع شده و با قوانینی منتشر میشود که آزادی استفاده، مطالعه، ویرایش و انتشار مجددِ کاربران را تضمین میکند. نرمافزارهای آزاد معمولاً با همکاری برنامهنویسهای داوطلب بهعنوان یک پروژه بهوجود میآیند.
نرمافزارهای آزاد با نرمافزارهای مالکیتی (مانند مایکروسافت ویندوز) که آزادی کاربر در استفاده، مطالعه، ویرایش یا انتشار مجدد را در درجههای مختلف محدود میکنند، متفاوت است. این محدودیتها با در نظر گرفتن مجازاتهایی قانونی برای کاربرانی که قوانین آنها را نقض میکنند، بهوجود میآیند. نرمافزارهای مالکیتی عموماً به صورت بستههای اجراپذیر باینری و بدون دسترسی به کد منبع فروخته میشوند که جلوی ویرایش و وصلهکردن نرمافزار توسط کاربر را میگیرد و او را برای بهروزرسانی و پشتیبانی به شرکت نرمافزاری تولید کننده وابسته میکنند. نرمافزارهای آزاد از نرمافزاریهای رایگان که برای استفاده، از کاربر پولی دریافت نمیکنند، نیز متفاوتاند. این نوع نرمافزارها نیز معمولاً تمامی حقوق نرمافزار را برای تولیدکنندهٔ آن محفوظ داشته و جلوی مهندسی معکوس، ویرایش و یا توزیع مجدد توسط کاربر را میگیرند. بنابراین موضوع اصلی نرمافزار آزاد، موضوع آزادی است و نه قیمت آن: کاربران آزادند که هر چه میخواهند با نرمافزار انجام دهند. این آزادی شامل انتشار مجدد نرمافزار بهصورت رایگان و یا با سود نیز میشود. یعنی نرمافزار آزاد میتواند به صورت رایگان و یا در ازای دریافت مبلغی پول در اختیار کاربر قرار بگیرد.
ریچارد استالمن در سال ۱۹۸۵ در زمانی که در حال آغاز پروژهٔ گنو و بهوجود آوردن بنیاد نرمافزارهای آزاد بود، برای اولین بار از عبارت «نرمافزار آزاد» استفاده کرد. براساس تعریف بنیاد نرمافزارهای آزاد کاربران یک نرمافزارِ آزاد، آزاد هستند؛ چون به اجازه گرفتن نیازی ندارند؛ آنها در انجام کارهای دلخواهشان (مانند حق نشر و کپیبرداری) محدود نیستند؛ نیازی به موافقت با هیچ توافقنامهای ندارند؛ و در همان ابتدا نیز با نداشتن کد منبع محدود نبودهاند.
تعریف
طبق تعریف نرمافزار آزاد توسط بنیاد نرمافزارهای آزاد، هر نرمافزاری که آزادیهای زیر را برای کاربرانش فراهم کند به عنوان یک نرمافزار آزاد شناخته میشود:
کاربران باید اجازه داشته باشند که نرمافزار مورد نظر را برای هر قصد و منظوری اجرا کنند.
کاربران باید اجازه داشته باشند کدهای منبع نرمافزار را مطالعه کرده و آن را مطابق با نیازهای خود تغییر دهند. برای رسیدن به این هدف، کدهای منبع نرمافزار باید در اختیار کاربر قرار گیرد.
کاربران باید اجازه داشته باشند نرمافزار را مجدداً منشتر کرده و در اختیار دیگران قرار دهند. این کار میتواند به صورت رایگان و یا در ازای دریافت مبلغی پول صورت گیرد.
اگر کاربری نرمافزار را تغییر داد، باید اجازه داشته باشد آن را مجدداً منتشر کرده و در اختیار دیگران قرار دهد. برای تغییر دادن نرمافزار، لازم است تا کدهای منبع نرمافزار در اختیار کاربر قرار گیرد.
همچنین موسسه پیشگامان متنباز هم تعریف مشابهی از نرمافزار آزاد ارائه میدهد. طبق تعریف این موسسه، نرمافزار بازمتن تنها به معنی در دسترس ساختن کدمنبع نیست. علاوه بر آن مجوز باید ویژگیهای زیر را هم داشته باشد:
نرمافزار باید قابل توزیع مجدد باشد (چه به صورت رایگان، چه در ازای دریافت مبلغی پول)
نرمافزار باید شامل کد منبع باشد و این کد منبع را باید بتوان تغییر داد و مجدداً منتشر کرد.
مجوز نباید در برابر افراد یا گروه خاصی تبعیض قائل شود.
مجوز نباید کاربر را برای رسیدن به یک هدف خاص محدود کند.
مجوز نباید مختص به یک محصول خاص باشد.
مجوز نباید نرمافزارهای دیگری که به همراه نرمافزار مورد نظر عرضه شدهاند را محدود کرده و تحت تاثیر قرار دهد. برای مثال اگر چند نرمافزار بر روی یک دیسک منتشر شدند، مجوز نباید اصراری بر روی متنبازبودن آنها داشته باشد.
مجوز نباید تکنولوژی خاصی را محدود کند.
تاریخچه
در اوایل، نرمافزارها به صورت آزاد منتشر میشدند و برنامهنویسان و شرکتها آنها را به صورت آزادانه در اختیار یکدیگر قرار میداند. در اوایل، تجارت رایانه بیشتر مبتنی بر سختافزار بود و شرکتها درامد خود را بیشتر از راه تولید سختافزار کسب میکردند و هر شرکت، سختافزاری ناسازگار با دیگر شرکتها تولید میکرد. مشتریان، که بیشتر مهندسان و دانشمندان بودند، تشویق میشدند که نرمافزارهای ارائه شده توسط سختافزار را بهبود بخشیده و حتی آن را در اختیار دیگران هم قرار دهند. از آنجا که در آن زمانها سختافزارهای تولید شده توسط شرکتهای مختلف با یکدیگر ناسازگار بود و سختافزار استانداردی وجود نداشت، و همینطور از آنجا که در آن زمان مفسرها و کامپایلرها هنوز جا نیفتاده بودند (که این برنامهها برنامهها را قابل حملتر میکنند)، شانس کمی وجود داشت که نرمافزار مورد نظر بر روی سختافزار شرکت رقیب هم به خوبی اجرا شود.
رفتهرفته که صنعت رایانه پیشرفت کرد و سختافزارها بیشتر استاندارد شدند و همینطور کامپایلرها و مفسرها پیشرفت کردند، زمینه برای رشد نرمافزارهای انحصاری فراهم شد. با چنین پیشرفتهایی، برنامهها راحتتر از سختافزار یک شرکت به سختافزار شرکت رقیب پورت میشدند و راحت میشد یک نرمافزار را بر روی سختافزارهای مختلفی از شرکتهای مختلف اجرا کرد. بدین ترتیب یک نفر میتوانست نرمافزاری بنویسد که مستقل از سختافزار خاصی عمل کند و بر روی طیف وسیعی از آنها اجرا شود. علاوه بر آن، با استاندارد شدن سختافزارها، تفاوتهای ناچیزی که آنها در کارایی داشتند رفته رفته ناپدید شد. تولید کنندگان به این نتیجه رسیده بودند که باید به نرمافزار هم به چشم یک وسیله فروشی نگاه کنند. شرکتها شروع به فروش نرمافزارهای خود کردند و دست کاربران خود را برای تغییر در نرمافزارها و انتشار مجدد آنها بستند. به گونه ای که در سال ۱۹۶۸ شرکتی به نام ایدیآر (به انگلیسی: ADR) اولین نرمافزار دارای مجوز را عرضه کرد. در سال ۱۹۶۹، شرکت آیبیام به خاطر اینکه به همراه سختافزارهای خود، نرمافزارهای آزاد ارائه میکرد، توسط وزارت دادگستری ایالات متحده آمریکا به از بین بردن کسب و کار و ایجاد یک شرایط ضدرقابتی برای دیگر متهم شد. آیبیام دیگر به همراه سختافزارهای خود نرمافزار ارائه نکرد و بدین ترتیب نرمافزارها و سختافزارها از یکدیگر جدا شدند و فاصله گرفتند.
در سال ۱۹۸۳، ریچارد استالمن از آزمایشگاه هوش مصنوعی و علوم رایانه امآیتی، پروژه گنو را بنیان نهاد. او که از تغییر فرهنگ در صنعت رایانه و کاربرانش ناامید شده بود، قصد داشت سیستمعاملی به نام گنو را به صورت یک نرمافزار آزاد توسعه دهد. در ژانویه ۱۹۸۴ توسعه سیستمعامل گنو آغاز گشت و بنیاد نرمافزارهای آزاد در اکتبر ۱۹۸۵ بنیان نهاده شد. در سال ۱۹۸۹، اولین نسخه از اجازهنامه همگانی گنو منشتر شد. البته جیپیال اولین پروانه نرمافزار آزاد نبود و قبل از آن پروانههای نرمافزار آزاد دیگری مانند پروانه بیاسدی در سال ۱۹۸۸ عرضه شده بودند. تا کنون پروانههای نرمافزار آزاد زیادی توسط افراد و شرکتهای مختلف منتشر شده است که آز این میان میتوان به پروانه امآیتی، پروانه آپاچی، پروانه آیاسسی، پروانه همگانی موزیلا و ... اشاره کرد.
در سال ۱۹۹۷، اریک ریموند مقالهای با نام کلیسای جامع و بازار را منتشر کرد و در آن به بررسی اصول نرمافزارهای آزاد و مزایای آنها پرداخت. این مقاله به شدت مورد توجه قرار گرفت و یکی از دلایلی بود که شرکت ارتباطات نتاسکیپ، کد منبع مرورگر اینترنتی خود را به صورت نرمافزار آزاد منتشر کرد. این کار باعث شد تا شرکتهای دیگری هم به نرمافزارهای آزاد توجه نشان دهند. کدهای منبع نتاسکیپ، بعدها اساس توسعه مرورگر فایرفاکس و برنامه تاندربیرد قرار گرفت.
مسئله نامگذاری
در زبان انگلیسی، کلمه Free معانی متفاوتی همچون آزادی، رایگان بودن و ... دارد. عدهای بر این عقیده بودند که ممکن است این کلمه باعث کژفهمی شده و باعث شود مردم به نرمافزارهای آزاد، به چشم نرمافزارهای رایگان نگاه کنند. این در حالی است که یک نرمافزار آزاد، لزوماً رایگان نیست. آنها در سال ۱۹۹۸ کمپین دیگری به نام «نرمافزارهای متنباز» (به انگلیسی: Open Source) را تشکیل دادند تا با تاکید بیشتر بر روی مدل توسعه و مسائل تکنیکی، به جای مسائل فلسفی و اخلاقی، مردم و شرکتها را هر چه بیشتر به استفاده از نرمافزار آزاد تشویق کنند. تقریباً هر دو مفهوم، اشاره به یک چیز دارند و یک نرمافزار متنباز، نرمافزار آزاد هم هست (و برعکس)، اما طرفداران ایده نرمافزارهای متنباز، آن را روشی برای توسعه نرمافزارهای بهتر معرفی میکنند و تاکید کمتری بر جنبش اجتماعی و فلسفه پشت این گونه نرمافزارها دارند. طبق گفته موسسه پیشگامان متنباز (که توسط طرفداران ایده نرمافزار متنباز بوجود آمده)، عبارت «نرمافزار آزاد» واژه ای قدیمیتر است و به گونهای منعکس کننده نام بنیاد نرمافزارهای آزاد است، سازمانی که در سال ۱۹۸۵ برای محافظت و ترویج نرمافزارهای آزاد بوجود آمد؛ با اینکه بنیانگذاران ایده متنباز هم از توسعه و ترویج نرمافزارهای آزاد حمایت میکنند، اما در مورد چگونگی ترویج آنها با بنیاد نرمافزارهای آزاد موافق نیستند و اعتقاد دارند که آزادی نرمافزار در درجه اول یک امر عملی است تا ایدئولوژیکی.
پروانههای نرمافزار آزاد
نرمافزارهای آزاد به همراه اجازهنامهای عرضه میشوند که این اجازهنامه آزادیهای نام برده شده را برای کاربران تضمین میکند. از جمله پروانههای نرمافزار آزاد میتوان به پروانه نرمافزار جیپیال، بیاسدی، پروانه امآیتی، پروانه آیاسسی و ... نام برد. این اجازه نامهها تفاوتهایی با یکدیگر دارند و هر کدام توسط افراد و شرکتهای خاصی برای اهداف خاصی منتشر شدهاند. یک دستهبندی کلی برای پروانههای نرمافزار آزاد این است که آیا آنها به صورت کپیلفت هستند یا نه. پروانههایی که کپیلفت هستند، مانند پروانه جیپیال، تاکید دارند که نسخههای مشتق شده از نرمافزار هم باید به صورت نرمافزار آزاد منتشر شوند. مجوزهای غیر کپیلفت تاکیدی بر روی این مساله ندارند و نسخههای مشتق شده از این گونه نرمافزارها را میتوان آزادانه به هر شکل دلخواهی، چه به صورت نرمافزار آزاد و چه به صورت نرمافزار انحصاری منتشر کرد. چنین مجوزهایی را اصطلاحاً «سهلگیرانه» (به انگلیسی: permissive) مینامند. از جمله رایجترین پروانههای کپیلفت، پروانه جیپیال و از جمله رایجترین پروانههای غیر کپیلفت، پروانه بیاسدی و پروانه امآیتی است. امروزه هر دو دسته از این پروانهها به صورت گسترده توسط پروژههای مختلف مورد استفاده قرار میگیرند. برای مثال، هسته لینوکس از پروانه جیپیال و پروژه فریبیاسدی از پروانه بیاسدی استفاده میکنند.
مسئله دیگر در مقایسه پروانههای نرمافزار آزاد، مسئله پیوند دادن کتابخانهها در دیگر نرمافزارهایی است که از یک پروانه غیرمشابه با پروانه کتابخانه استفاده میکنند. برخی از پروانههای نرمافزار آزاد، اجازه نمیدهند که کتابخانههای اشتراکی، توسط نرمافزارهایی که از یک پروانه غیر مشابه استفاده میکنند، پیوند زده شوند و مورد استفاده قرار گیرند. برای مثال، اگر کتابخانهای تحت پروانه جیپیال منتشر شده باشد، تنها نرمافزارهایی که تحت پروانه جیپیال منتشر شدهاند میتوانند به این کتابخانه پیوند داده شوند و از آن استفاده کنند. این کار مانع میشود تا نرمافزارهای انحصاری و یا حتی دیگر نرمافزارهای آزاد از یک کتابخانه با مجوز جیپیال استفاده کنند. بنیاد نرمافزارهای آزاد برای رفع این محدودیت جیپیال، پروانه الجیپیال را منتشر کرده است.
مدل تجاری
نرمافزارهای آزاد را میتوان مستقیماً به فروش رساند و به این ترتیب از فروش آنها کسب درامد کرد. اما این مسئله نباید آزادی های بالا را محدود کند. کاربر پس از خرید یک نرمافزار آزاد، میتواند آن را برای هر منظوری استفاده کرده، تغییر داده، و مجدداً منتشر کند (چه به صورت رایگان و چه به صورت تجاری). علاوه بر فروش مستقیم نرمافزار، میتوان با ارائه خدمات و پشتیبانی از نرمافزارهای آزاد، کسب درامد کرد. مثلاً یک شرکت میتواند با اضافه کردن یک قابلیت جدید به یک نرمافزار آزاد یا در قبال برطرف کردن یک ایراد امنیتی، مبلغی پول از مشتریانش دریافت کند. یا همچنین یک شرکت میتواند نحوه استفاده از یک برنامه را به کارمندان و کاربران یک شرکت دیگر آموزش دهد و در قبال آن دستمزد دریافت کند. برخی از پروانههای سهلگیر نرمافزار آزاد، به کاربران اجازه میدهند تا نرمافزار را بدون در اختیار قرار دادن کدهای منبع توزیع کنند. بدین ترتیب دست کاربران تجاری بیشتر باز خواهد بود. برخی از شرکتها، نرمافزارهای خود را با دو مجوز مختلف، هم به صورت آزاد و هم به صورت غیرآزاد عرضه میکنند.
برخی از توسعهدهندگان مستقل نرمافزار آزاد، کمکهای مالی از طرف افراد داوطلب قبول میکنند. به عنوان مثال، سورسفورج امکاناتی دارد که یک کاربر داوطلب میتواند مبلغی پول را به یک پروژه نرمافزار آزاد اهدا کند.
مثالهایی از نرمافزارهای آزاد کاربردی
هستهٔ سیستمعامل گنو/لینوکس، داروین.
تعدادی از سیستمعاملهای خانواده بیاسدی مانند فریبیاسدی, اپنبیاسدی, نتبیاسدی, دراگونفلیبیاسدی.
کامپایلر جیسیسی، کتابخانهٔ زبان برنامهنویسی سی
کامپایلر کلنگ
پایگاهدادههای رابطهای مانند: mysql، پستگر اسکیوال، برکلی دیبی
زبانهای برنامهنویسی مانند تیسیال، روبی، پایتون، پرل و پیاچپی.
مرورگر وب فایرفاکس (Firefox)
اُپن آفیس (Open Office)
میزکار کیدیای (KDE)
میز کار الاکسدیئی (LXDE)
میزکار اکسافسیئی (XFCE)
میزکار گنوم (Gnome)
برنامههای حروف چینی مانند تک، لاتک و فارسی تک
نرمافزارهای مدیریت محتوا مانند جوملا (!Joomla)، پیاچپی-نیوک (PHP-Nuke)، پست نیوک (postnuke) و مامبو (mambo) ,وردپرس (wordpress), دروپال (drupal) , ....
نرمافزارهای ساخت انجمن (Forum) مانند پیاچپیبیبی (phpbb)، اساماف (smf)، یاب (YaBB) و فروم (phorum)
ویرایشگرهای متن ویم و ایمکس
مجموعه اداری لیبرهآفیس
خواب طولانی
از اشکهای حبسِ توو چشمات
تا بغض ِ تلخِ توو سری خورده
از دردهایی که تموم ِ عمر
هرگز کسی اونا رو نشمُرده
بی قافیه ، بی وزن باید گفت
یک شعرِ سرتاسر پُر از لکنت
این دردها آرایه ی شعرن
این بغض و دلتنگی و این نفرت
شاعر نبودم ، نیستم ، اما
با اشکِ تو شاید که شاعر شم
تووی سَرَم هِی واژه می رقصه
هر جور هس(ت) باید که شاعر شم
توو شعر ها با دردِ تنهایی
هِی گریه کردیم و فقط گفتیم
از دردهای مشترک تا عشق
با هر ترانه خط به خط گفتیم
دنبالِ یک تسکینِ کوتاهیم
با دودهای گیجِ توو کافه
توو این سیاهی ، واژه ها شاید
یک شب حریرِ خوابو بشکافه
توو شهرِ مسخِ خوابِ خرگوشی
احساسِ ما عمریه بیداره
دنیا به چشمایی که غم دیده
یک خوابِ طولانی بِدِهکاره
محمد گوهری
--------------------------------------------------------------------------
هنر پیشه
تمومِ عمرُ روو شونه کشید و
یه جایی عاقبت از نفس افتاد
جَوونِ شاد و قبراقِ پریروز
یه عمرُ توو یه شب بر باد می داد
همه عمرُ فقط لبخند می زد
ولی تووی دلش از گریه پُر بود
واسه زخمی که دائم "دیر" می شه
چه دووره التیامِ واژه ی "زود"
تصور کردنِ اینکه همیشه
یه وقتی واسه گریه کردنش هست
کشوندش سمت تنهائی مطلق
تهِ یک بغضِ پس خورده توو بن بست
همیشه تووی این فکری که دنیا
تموم صحنه هاشُ خوب چیده
نمی دونی یه جائی یک صدائی
پلان نحس عمرُ کات می ده
شبیه یک هنر پیشه روو صحنه
تمومِ زندگیشو غرق بازی
فقط احساسِ مصنوعیِ شادی
تمومِ عمر تنها صحنه سازی
یه شب بغضی که دائم خنده می شد
تووی رگهای تاریکش ورم کرد
هجومِ غصه توو تنهاییِ ناب
یه تیغ و آرزوی رفتنِ درد
تنش رُ دست تنهایی سپرد و
میون لختیِ یک تخت خوابید
سرش رُ بی صدا از آسمون برد
درخت خستهی خمیده خشکید
همیشه تووی این فکری که دنیا
تموم صحنه هاشُ خوب چیده
نمی دونی یه جایی یک صدایی
پلان نحس عمرُ کات می ده
--------------------------------------------------------------------------
نسل ما
نسل من و تو نسلِ کابوسه
نسلی که یک عمرو کُتک خورده
هِی ژستِ زنده بودنو داره
اما خودش می دونه که مُرده
هر بار احساسِ رسیدن داشت
فهمید اون لحظه براش دیره
عمریّه حرکت داره تو دنیا
اما فقط داره عقب می ره
شخصیتای قصّه تکراری
تاریخ می چرخه فقط انگار
این آدما و اشتباهاشون
تکرار می شَن پُشتِ هر تکرار
تکرار می شن قصه ها هربار
تاریخ ، حولِ این مدار افتاد
یک شخص راهو اشتباه می رفت
دنیا تقاصِ اونو پَس می داد
انگار صد ساله که پاییزه
هر لحظه دنیا تو همین فصله
چیزِ عجیبی نیست این احساس
پاییز دردِ کلّ این نسله
محمد گوهری
--------------------------------------------------------------------------
پُر از حسّ پا خوردن از زندگی
منم مثلِ تو دلخورم از جهان
سرم گیجه از چرخشِ دائمی
توو این دورِ تکراریِ هفت خان
به راهی که روزا قدم می زدیم
به هر پرسه ی ممتد و بی حواس
بـه بـحـثـای طـولانـیِ فـلسـفـی
به شعری که خوندی توو "کافه تراس"
به اشکای تو توو دلِ سینما
که از فـیــلم دیدن منو سیر کرد
به این اعتمادی که زخمی شدو
تووی چـند هفته تورو پـیــر کرد
به شعر و به هر غُصّه ی مشترک
به اشکی که می ریزه توو نیمه شب
به روز و شبای پُر از دلهُره
به این مَردُمِ ساده تسلیمِ شب
قسم می خورم رد شه این سختیا
قسم می خورم زندگی خوب شه
فقط گریه کن ، بغض و دلتنگیا
نذار توو گلوی تو سرکوب شه
فقط گریه کن...
محمد گوهری
از اشکهای حبسِ توو چشمات
تا بغض ِ تلخِ توو سری خورده
از دردهایی که تموم ِ عمر
هرگز کسی اونا رو نشمُرده
بی قافیه ، بی وزن باید گفت
یک شعرِ سرتاسر پُر از لکنت
این دردها آرایه ی شعرن
این بغض و دلتنگی و این نفرت
شاعر نبودم ، نیستم ، اما
با اشکِ تو شاید که شاعر شم
تووی سَرَم هِی واژه می رقصه
هر جور هس(ت) باید که شاعر شم
توو شعر ها با دردِ تنهایی
هِی گریه کردیم و فقط گفتیم
از دردهای مشترک تا عشق
با هر ترانه خط به خط گفتیم
دنبالِ یک تسکینِ کوتاهیم
با دودهای گیجِ توو کافه
توو این سیاهی ، واژه ها شاید
یک شب حریرِ خوابو بشکافه
توو شهرِ مسخِ خوابِ خرگوشی
احساسِ ما عمریه بیداره
دنیا به چشمایی که غم دیده
یک خوابِ طولانی بِدِهکاره
محمد گوهری
--------------------------------------------------------------------------
هنر پیشه
تمومِ عمرُ روو شونه کشید و
یه جایی عاقبت از نفس افتاد
جَوونِ شاد و قبراقِ پریروز
یه عمرُ توو یه شب بر باد می داد
همه عمرُ فقط لبخند می زد
ولی تووی دلش از گریه پُر بود
واسه زخمی که دائم "دیر" می شه
چه دووره التیامِ واژه ی "زود"
تصور کردنِ اینکه همیشه
یه وقتی واسه گریه کردنش هست
کشوندش سمت تنهائی مطلق
تهِ یک بغضِ پس خورده توو بن بست
همیشه تووی این فکری که دنیا
تموم صحنه هاشُ خوب چیده
نمی دونی یه جائی یک صدائی
پلان نحس عمرُ کات می ده
شبیه یک هنر پیشه روو صحنه
تمومِ زندگیشو غرق بازی
فقط احساسِ مصنوعیِ شادی
تمومِ عمر تنها صحنه سازی
یه شب بغضی که دائم خنده می شد
تووی رگهای تاریکش ورم کرد
هجومِ غصه توو تنهاییِ ناب
یه تیغ و آرزوی رفتنِ درد
تنش رُ دست تنهایی سپرد و
میون لختیِ یک تخت خوابید
سرش رُ بی صدا از آسمون برد
درخت خستهی خمیده خشکید
همیشه تووی این فکری که دنیا
تموم صحنه هاشُ خوب چیده
نمی دونی یه جایی یک صدایی
پلان نحس عمرُ کات می ده
--------------------------------------------------------------------------
نسل ما
نسل من و تو نسلِ کابوسه
نسلی که یک عمرو کُتک خورده
هِی ژستِ زنده بودنو داره
اما خودش می دونه که مُرده
هر بار احساسِ رسیدن داشت
فهمید اون لحظه براش دیره
عمریّه حرکت داره تو دنیا
اما فقط داره عقب می ره
شخصیتای قصّه تکراری
تاریخ می چرخه فقط انگار
این آدما و اشتباهاشون
تکرار می شَن پُشتِ هر تکرار
تکرار می شن قصه ها هربار
تاریخ ، حولِ این مدار افتاد
یک شخص راهو اشتباه می رفت
دنیا تقاصِ اونو پَس می داد
انگار صد ساله که پاییزه
هر لحظه دنیا تو همین فصله
چیزِ عجیبی نیست این احساس
پاییز دردِ کلّ این نسله
محمد گوهری
--------------------------------------------------------------------------
پُر از حسّ پا خوردن از زندگی
منم مثلِ تو دلخورم از جهان
سرم گیجه از چرخشِ دائمی
توو این دورِ تکراریِ هفت خان
به راهی که روزا قدم می زدیم
به هر پرسه ی ممتد و بی حواس
بـه بـحـثـای طـولانـیِ فـلسـفـی
به شعری که خوندی توو "کافه تراس"
به اشکای تو توو دلِ سینما
که از فـیــلم دیدن منو سیر کرد
به این اعتمادی که زخمی شدو
تووی چـند هفته تورو پـیــر کرد
به شعر و به هر غُصّه ی مشترک
به اشکی که می ریزه توو نیمه شب
به روز و شبای پُر از دلهُره
به این مَردُمِ ساده تسلیمِ شب
قسم می خورم رد شه این سختیا
قسم می خورم زندگی خوب شه
فقط گریه کن ، بغض و دلتنگیا
نذار توو گلوی تو سرکوب شه
فقط گریه کن...
محمد گوهری
ساعت : 1:28 am | نویسنده : admin
|
هواداران محمد گوهری |
مطلب قبلی