सॉफ्टवेयर



सॉफ्टवेयर निर्देश का एक संग्रह है जो कंप्यूटर को बताता है कि कैसे काम करना है। यह हार्डवेयर के विपरीत है, जिससे सिस्टम बनाया गया है और जो वास्तव में काम करता है।

सबसे कम प्रोग्रामिंग स्तर, निष्पादन योग्य कोड में मशीन भाषा निर्देश होते हैं जो एक व्यक्ति प्रोसेसर द्वारा समर्थित होते हैं- आमतौर पर एक केंद्रीय प्रसंस्करण इकाई (CPU) या ग्राफिक्स प्रोसेसिंग यूनिट (GPU)। मशीनी भाषा में बाइनरी मानों के सेट होते हैं जो प्रोसेसर निर्देशों का प्रतिनिधित्व करते हैं जो कंप्यूटर की स्थिति को उसकी पिछली स्थिति से बदलते हैं। उदाहरण के लिए, एक निर्देश कंप्यूटर में किसी विशेष स्टोरेज स्थान में संग्रहीत मूल्य को बदल सकता है- एक ऐसा प्रभाव जो उपयोगकर्ता के लिए सीधे देखने योग्य नहीं है। एक निर्देश कई इनपुट या आउटपुट ऑपरेशंस में से एक को भी आमंत्रित कर सकता है, उदाहरण के लिए कंप्यूटर स्क्रीन पर कुछ टेक्स्ट प्रदर्शित करना; राज्य में परिवर्तन करना जो उपयोगकर्ता को दिखाई देना चाहिए । वह प्रोसेसर निर्देशों को उनके द्वारा दिए गए क्रम में निष्पादित करता है, जब तक कि उसे किसी भिन्न निर्देश पर "कूदने" का निर्देश नहीं दिया जाता है, या ऑपरेटिंग सिस्टम द्वारा बाधित नहीं किया जाता है। 2015 तक, अधिकांश व्यक्तिगत कंप्यूटर (personal computer), स्मार्टफोन डिवाइस और सर्वर में कई निष्पादन इकाइयों (execution unit) या एक साथ गणना करने वाले कई प्रोसेसर वाले प्रोसेसर होते हैं, और कंप्यूटिंग अतीत की तुलना में बहुत अधिक समवर्ती गतिविधि बन गई है।

अधिकांश सॉफ्टवेयर उच्च स्तरीय प्रोग्रामिंग भाषा में लिखे गए हैं। वे प्रोग्रामर के लिए आसान और अधिक कुशल हैं क्योंकि वे मशीनी भाषाओं की तुलना में प्राकृतिक भाषा के करीब हैं । उच्च स्तरीय भाषाओं को एक कंपाइलर या दुभाषिया या दोनों के संयोजन का उपयोग करके मशीनी भाषा में अनुवादित किया जाता है। सॉफ़्टवेयर को निम्न-स्तरीय असेंबली भाषा में भी लिखा जा सकता है, जिसमें कंप्यूटर के मशीनी भाषा निर्देशों के लिए एक मजबूत पत्राचार होता है और एक असेंबलर का उपयोग करके मशीन भाषा में अनुवाद किया जाता है।

इतिहास
एल्गोरिथम, जो सॉफ्टवेयर का पहला टुकड़ा होता,  एडा लवलेस द्वारा 19वीं शताब्दी में नियोजित   विश्लेषणात्मक इंजन के लिए लिखा गया था। उसने    प्रमाण बनाए, यह दिखाने के लिए कि इंजन   बर्नौली संख्या एस की गणना कैसे करेगा सबूतों और एल्गोरिथम के कारण, उन्हें पहला कंप्यूटर प्रोग्रामर माना जाता है

सॉफ्टवेयर के बारे में पहला सिद्धांत, कंप्यूटर के निर्माण से पहले, जैसा कि हम आज जानते हैं,  एलन ट्यूरिंग  द्वारा अपने 1935 के निबंध, ऑन कंप्यूटेबल नंबर्स, विद ए एप्लीकेशन टू द एनट्सचीडंग्सप्रॉब्लम (निर्णय समस्या) में प्रस्तावित किया गया था। इसने अंततः कंप्यूटर विज्ञान और सॉफ्टवेयर इंजीनियरिंग के अकादमिक क्षेत्रों का निर्माण किया; दोनों क्षेत्र सॉफ्टवेयर और उसके निर्माण का अध्ययन करते हैं कंप्यूटर विज्ञान कंप्यूटर और सॉफ्टवेयर का सैद्धांतिक अध्ययन है (ट्यूरिंग का निबंध कंप्यूटर विज्ञान का एक उदाहरण है), जबकि सॉफ्टवेयर इंजीनियरिंग सॉफ्टवेयर के विकास के लिए इंजीनियरिंग सिद्धांतों का अनुप्रयोग है। 1946 से पहले, सॉफ़्टवेयर अभी तक संग्रहीत-प्रोग्राम डिजिटल कंप्यूटरों की स्मृति में संग्रहीत प्रोग्राम नहीं था, जैसा कि अब हम इसे समझते हैं; इसके बजाय पहले इलेक्ट्रॉनिक कंप्यूटिंग उपकरणों को फिर से प्रोग्राम करने के लिए रीवायर किया गया था

2000 में, येल लॉ स्कूल के लाइब्रेरियन फ्रेड शापिरो ने एक पत्र प्रकाशित किया जिसमें खुलासा किया गया कि  जॉन वाइल्डर टुके  का 1958 का पेपर द टीचिंग ऑफ कंक्रीट मैथमेटिक्स में   JSTOR  के इलेक्ट्रॉनिक अभिलेखागार की खोज में पाए गए सॉफ़्टवेयर शब्द का सबसे पहला ज्ञात उपयोग शामिल है, जो   OED  के उद्धरण को दो साल पहले बताता है इसने कई लोगों को इस शब्द को गढ़ने का श्रेय दिया, विशेष रूप से उसी वर्ष प्रकाशित मृत्युलेखों में हालांकि तुकी ने कभी भी ऐसे किसी सिक्के के लिए क्रेडिट का दावा नहीं किया। 1995 में, पॉल निकेट ने दावा किया कि उन्होंने मूल रूप से अक्टूबर 1953 में इस शब्द को गढ़ा था, हालांकि उन्हें अपने दावे का समर्थन करने वाला कोई दस्तावेज नहीं मिला। एक इंजीनियरिंग संदर्भ में सॉफ्टवेयर शब्द का सबसे पहला ज्ञात प्रकाशन अगस्त 1953 में रिचर्ड आर। कारहार्ट द्वारा   रैंड कॉर्पोरेशन  रिसर्च मेमोरेंडम में किया गया था।

प्रकार


लगभग सभी कंप्यूटर प्लेटफॉर्म पर, सॉफ्टवेयर को कुछ व्यापक श्रेणियों में बांटा जा सकता है।

उद्देश्य, या उपयोग का क्षेत्र
लक्ष्य के आधार पर कंप्यूटर सॉफ्टवेयर को निम्न में विभाजित किया जा सकता है:


 *  एप्लिकेशन सॉफ्टवेयर  कंप्यूटर के बुनियादी संचालन से परे विशेष कार्य करने के लिए कंप्यूटर सिस्टम का उपयोग करता है। कई अलग-अलग प्रकार के एप्लिकेशन सॉफ़्टवेयर हैं क्योंकि आधुनिक कंप्यूटर के साथ किए जा सकने वाले कार्यों की श्रेणी इतनी बड़ी है-   सॉफ़्टवेयर  की सूची देखें।
 *  सिस्टम सॉफ्टवेयर   हार्डवेयर व्यवहार का प्रबंधन करता है, ताकि उपयोगकर्ताओं द्वारा आवश्यक बुनियादी कार्यक्षमता प्रदान की जा सके, या अन्य सॉफ़्टवेयर को ठीक से चलाने के लिए, यदि बिल्कुल भी। सिस्टम सॉफ़्टवेयर को एप्लिकेशन सॉफ़्टवेयर चलाने के लिए एक प्लेटफ़ॉर्म प्रदान करने के लिए भी डिज़ाइन किया गया है और इसमें निम्नलिखित शामिल हैं:
 *  ऑपरेटिंग सिस्टम  s सॉफ्टवेयर के आवश्यक संग्रह हैं जो संसाधनों का प्रबंधन करते हैं और उनके ऊपर चलने वाले अन्य सॉफ़्टवेयर के लिए सामान्य सेवाएं प्रदान करते हैं।   पर्यवेक्षी कार्यक्रम  एस,   बूट लोडर  एस,    शेल  और   विंडो सिस्टम  एस ऑपरेटिंग सिस्टम के मुख्य भाग हैं। व्यवहार में, एक ऑपरेटिंग सिस्टम अतिरिक्त सॉफ़्टवेयर (एप्लिकेशन सॉफ़्टवेयर सहित) के साथ आता है ताकि उपयोगकर्ता संभावित रूप से ऐसे कंप्यूटर के साथ कुछ काम कर सके जिसमें केवल एक ऑपरेटिंग सिस्टम हो।
 *  डिवाइस ड्राइवर  s एक विशेष प्रकार के डिवाइस को संचालित या नियंत्रित करता है जो कंप्यूटर से जुड़ा होता है। प्रत्येक डिवाइस को कम से कम एक संगत डिवाइस ड्राइवर की आवश्यकता होती है; क्योंकि एक कंप्यूटर में आमतौर पर कम से कम एक इनपुट डिवाइस और कम से कम एक आउटपुट डिवाइस होता है, एक कंप्यूटर को आमतौर पर एक से अधिक डिवाइस ड्राइवर की आवश्यकता होती है।
 *   यूटिलिटीज   कंप्यूटर प्रोग्राम हैं जो उपयोगकर्ताओं को उनके कंप्यूटर के रखरखाव और देखभाल में सहायता करने के लिए डिज़ाइन किए गए हैं।
 *  दुर्भावनापूर्ण सॉफ़्टवेयर , या मैलवेयर, ऐसा सॉफ़्टवेयर है जिसे कंप्यूटर को नुकसान पहुंचाने या बाधित करने के लिए विकसित किया गया है। मैलवेयर कंप्यूटर से संबंधित अपराधों के साथ निकटता से जुड़ा हुआ है, हालांकि कुछ दुर्भावनापूर्ण प्रोग्राम   व्यावहारिक मजाक  एस के रूप में डिजाइन किए गए हो सकते हैं।

निष्पादन की प्रकृति या क्षेत्र

 * डेस्कटॉप एप्लिकेशन जैसे   वेब ब्राउज़र  एस और   माइक्रोसॉफ्ट ऑफिस, साथ ही   स्मार्टफोन  और    टैबलेट  एप्लिकेशन (   ऐप  कहा जाता है)
 * जावास्क्रिप्ट स्क्रिप्ट पारंपरिक रूप से   वेब पेज  एस में एम्बेडेड सॉफ्टवेयर के टुकड़े हैं जो सीधे वेब ब्राउजर के अंदर चलाए जाते हैं जब वेब पेज लोड होने पर वेब ब्राउजर प्लगइन की आवश्यकता नहीं होती है। अन्य प्रोग्रामिंग भाषाओं में लिखे गए सॉफ़्टवेयर को वेब ब्राउज़र के भीतर भी चलाया जा सकता है यदि सॉफ़्टवेयर का या तो जावास्क्रिप्ट में अनुवाद किया गया है, या यदि उस भाषा का समर्थन करने वाला वेब ब्राउज़र प्लग इन स्थापित है; उत्तरार्द्ध का सबसे आम उदाहरण   एक्शनस्क्रिप्ट  स्क्रिप्ट है, जो   एडोब फ्लैश  प्लगइन द्वारा समर्थित हैं।
 * सर्वर सॉफ्टवेयर, जिसमें शामिल हैं:
 * वेब एप्लिकेशन एस, जो आमतौर पर   वेब सर्वर  पर चलता है और वेब ब्राउज़र में गतिशील रूप से जेनरेट किए गए वेब पेजों को आउटपुट करता है, उदा।   PHP ,    Java  ,   ASP.NET  , या    JavaScript जो सर्वर  पर चलता है। आधुनिक समय में इनमें आमतौर पर वेब ब्राउज़र में चलाने के लिए कुछ जावास्क्रिप्ट भी शामिल होते हैं, इस स्थिति में वे आंशिक रूप से सर्वर पर आंशिक रूप से वेब ब्राउज़र में चलते हैं।
 * प्लगइन्स और एक्सटेंशन ऐसे सॉफ़्टवेयर हैं जो सॉफ़्टवेयर के दूसरे भाग की कार्यक्षमता को बढ़ाते या संशोधित करते हैं, और इसके लिए आवश्यक है कि सॉफ़्टवेयर का उपयोग कार्य करने के लिए किया जाए
 * एंबेडेड सॉफ्टवेयर   एंबेडेड सिस्टम  एस के भीतर   फर्मवेयर  के रूप में रहता है, एकल उपयोग के लिए समर्पित उपकरण या   कार  एस और   टेलीविजन  एस (हालांकि कुछ एम्बेडेड डिवाइस जैसे वायरलेस चिपसेट एक साधारण, गैर-एम्बेडेड कंप्यूटर सिस्टम जैसे पीसी या स्मार्टफोन का हिस्सा बनें) एम्बेडेड सिस्टम संदर्भ में कभी-कभी सिस्टम सॉफ़्टवेयर और एप्लिकेशन सॉफ़्टवेयर के बीच कोई स्पष्ट अंतर नहीं होता है। हालाँकि, कुछ एम्बेडेड सिस्टम   एम्बेडेड ऑपरेटिंग सिस्टम  s चलाते हैं, और ये सिस्टम सिस्टम सॉफ़्टवेयर और एप्लिकेशन सॉफ़्टवेयर के बीच अंतर को बनाए रखते हैं (हालाँकि आमतौर पर केवल एक, निश्चित एप्लिकेशन होगा जो हमेशा चलता रहता है)
 * माइक्रोकोड एक विशेष, अपेक्षाकृत अस्पष्ट प्रकार का एम्बेडेड सॉफ्टवेयर है जो प्रोसेसर को "स्वयं" बताता है कि मशीन कोड को कैसे निष्पादित किया जाए, इसलिए यह वास्तव में मशीन कोड से निचला स्तर है यह आमतौर पर प्रोसेसर निर्माता के स्वामित्व में होता है, और किसी भी आवश्यक सुधारात्मक माइक्रोकोड सॉफ़्टवेयर अपडेट को उनके द्वारा उपयोगकर्ताओं को आपूर्ति की जाती है (जो शिपिंग प्रतिस्थापन प्रोसेसर हार्डवेयर से काफी सस्ता है)। इस प्रकार एक साधारण प्रोग्रामर को कभी भी इससे निपटने की उम्मीद नहीं होगी

प्रोग्रामिंग टूल
प्रोग्रामिंग टूल प्रोग्राम या एप्लिकेशन के रूप में भी सॉफ्टवेयर हैं जो   डेवलपर  बनाने के लिए उपयोग करते हैं,    डिबग,     बनाए रखते हैं, या अन्यथा    समर्थन  सॉफ्टवेयर

सॉफ्टवेयर एक या अधिक प्रोग्रामिंग भाषाओं में लिखा जाता है; अस्तित्व में कई प्रोग्रामिंग भाषाएं हैं, और प्रत्येक में कम से कम एक कार्यान्वयन है, जिनमें से प्रत्येक में प्रोग्रामिंग टूल का अपना सेट होता है। ये उपकरण अपेक्षाकृत आत्म-निहित प्रोग्राम हो सकते हैं जैसे  कंपाइलर  एस,   डीबगर  एस,    दुभाषिया,    लिंकर , और   टेक्स्ट एडिटर  एस, जिन्हें जोड़ा जा सकता है किसी कार्य को पूरा करने के लिए; या वे एक   एकीकृत विकास वातावरण  (आईडीई) बना सकते हैं, जो ऐसे स्व-निहित उपकरणों की अधिक या सभी कार्यक्षमता को जोड़ती है आईडीई या तो प्रासंगिक व्यक्तिगत उपकरणों को लागू करके या अपनी कार्यक्षमता को नए तरीके से पुन: कार्यान्वित करके ऐसा कर सकते हैं। एक IDE विशिष्ट कार्यों को करना आसान बना सकता है, जैसे किसी विशेष प्रोजेक्ट में फ़ाइलों की खोज करना कई प्रोग्रामिंग भाषा कार्यान्वयन व्यक्तिगत टूल या आईडीई दोनों का उपयोग करने का विकल्प प्रदान करते हैं

वास्तुकला
जो लोग आधुनिक सामान्य प्रयोजन के कंप्यूटर का उपयोग करते हैं ( एम्बेडेड सिस्टम  एस,   एनालॉग कंप्यूटर  एस और   सुपर कंप्यूटर  एस के विपरीत) आमतौर पर सॉफ्टवेयर की तीन परतें विभिन्न प्रकार के कार्यों को करते हुए देखते हैं: प्लेटफॉर्म, एप्लिकेशन और उपयोगकर्ता सॉफ्टवेयर

प्लेटफ़ॉर्म में   फ़र्मवेयर,   डिवाइस ड्राइवर  s, एक   ऑपरेटिंग सिस्टम , और आम तौर पर एक   ग्राफिकल यूजर इंटरफेस  शामिल है, जो कुल मिलाकर अनुमति देता है। एक उपयोगकर्ता कंप्यूटर और उसके   परिधीय  एस (संबद्ध उपकरण) के साथ बातचीत करने के लिए। प्लेटफ़ॉर्म सॉफ़्टवेयर अक्सर कंप्यूटर के साथ बंडल में आता है।    पीसी  में आमतौर पर प्लेटफॉर्म सॉफ्टवेयर को बदलने की क्षमता होती है। एप्लीकेशन सॉफ्टवेयर वही है जो ज्यादातर लोग सॉफ्टवेयर के बारे में सोचते समय सोचते हैं विशिष्ट उदाहरणों में कार्यालय सुइट और वीडियो गेम शामिल हैं। एप्लीकेशन सॉफ्टवेयर अक्सर कंप्यूटर हार्डवेयर से अलग से खरीदा जाता है। कभी-कभी एप्लिकेशन को कंप्यूटर के साथ बंडल किया जाता है, लेकिन यह इस तथ्य को नहीं बदलता है कि वे स्वतंत्र एप्लिकेशन के रूप में चलते हैं। एप्लिकेशन आमतौर पर ऑपरेटिंग सिस्टम से स्वतंत्र प्रोग्राम होते हैं, हालांकि वे अक्सर विशिष्ट प्लेटफॉर्म के लिए तैयार किए जाते हैं। अधिकांश उपयोगकर्ता कंपाइलर, डेटाबेस और अन्य सिस्टम सॉफ़्टवेयर को एप्लिकेशन के रूप में समझते हैं उपयोगकर्ता की विशिष्ट आवश्यकताओं को पूरा करने के लिए अंतिम उपयोगकर्ता विकास टेलर सिस्टम। उपयोगकर्ता सॉफ़्टवेयर में स्प्रैडशीट टेम्प्लेट और   वर्ड प्रोसेसर  टेम्प्लेट शामिल हैं यहां तक ​​कि ईमेल फिल्टर भी एक तरह का यूजर सॉफ्टवेयर है। उपयोगकर्ता इस सॉफ़्टवेयर को स्वयं बनाते हैं और अक्सर इसे अनदेखा कर देते हैं कि यह कितना महत्वपूर्ण है उपयोगकर्ता-लिखित सॉफ़्टवेयर को डिफ़ॉल्ट एप्लिकेशन पैकेजों में कितनी कुशलता से एकीकृत किया गया है, इस पर निर्भर करते हुए, कई उपयोगकर्ताओं को मूल पैकेजों के बीच अंतर के बारे में पता नहीं हो सकता है, और सहकर्मियों द्वारा क्या जोड़ा गया है
 * प्लेटफ़ॉर्म सॉफ़्टवेयर
 * एप्लीकेशन सॉफ्टवेयर
 * उपयोगकर्ता-लिखित सॉफ़्टवेयर

निष्पादन
कंप्यूटर सॉफ्टवेयर को कंप्यूटर के   स्टोरेज  (जैसे   हार्ड ड्राइव  या    मेमोरी ) में लोड करना होता है। एक बार सॉफ्टवेयर लोड हो जाने के बाद, कंप्यूटर सॉफ्टवेयर को निष्पादित करने में सक्षम होता है। इसमें एप्लिकेशन सॉफ़्टवेयर से सिस्टम सॉफ़्टवेयर के माध्यम से हार्डवेयर को निर्देश देना शामिल है, जो अंततः मशीन कोड के रूप में निर्देश प्राप्त करता है। प्रत्येक निर्देश कंप्यूटर को एक ऑपरेशन-मूविंग डेटा,   गणना  करने, या   नियंत्रण प्रवाह  निर्देशों को बदलने का कारण बनता है।

डेटा मूवमेंट आमतौर पर मेमोरी में एक स्थान से दूसरे स्थान पर होता है। कभी-कभी इसमें मेमोरी और रजिस्टरों के बीच डेटा को स्थानांतरित करना शामिल होता है जो सीपीयू में हाई-स्पीड डेटा एक्सेस को सक्षम करता है। डेटा को स्थानांतरित करना, विशेष रूप से इसकी बड़ी मात्रा में, महंगा हो सकता है; इसके बजाय कभी-कभी पॉइंटर्स टू डेटा का उपयोग करके इसे टाला जाता है संगणना में सरल ऑपरेशन शामिल हैं जैसे कि एक चर डेटा तत्व के मूल्य में वृद्धि। अधिक जटिल संगणनाओं में एक साथ कई ऑपरेशन और डेटा तत्व शामिल हो सकते हैं

गुणवत्ता और विश्वसनीयता
सॉफ्टवेयर की गुणवत्ता बहुत महत्वपूर्ण है, खासकर   वाणिज्यिक  और सिस्टम सॉफ्टवेयर के लिए। यदि सॉफ़्टवेयर दोषपूर्ण है, तो यह किसी व्यक्ति के कार्य को हटा सकता है, कंप्यूटर को क्रैश कर सकता है और अन्य अप्रत्याशित कार्य कर सकता है। दोष और त्रुटियां    बग  कहलाती हैं, जिन्हें अक्सर अल्फा और बीटा परीक्षण के दौरान खोजा जाता है सॉफ़्टवेयर अक्सर   सॉफ़्टवेयर एजिंग  के रूप में जाना जाता है, अनदेखी बग के संयोजन के परिणामस्वरूप प्रगतिशील प्रदर्शन गिरावट का शिकार होता है

सॉफ़्टवेयर परीक्षण के माध्यम से कई बग खोजे और ठीक किए गए। हालाँकि, सॉफ़्टवेयर परीक्षण शायद ही कभी—अगर कभी—हर बग को समाप्त करता है; कुछ प्रोग्रामर कहते हैं कि प्रत्येक प्रोग्राम में कम से कम एक और बग (लुबार्स्की का नियम) है। सॉफ्टवेयर विकास के    वाटरफॉल  पद्धति में, अलग-अलग परीक्षण टीमों को आम तौर पर नियोजित किया जाता है, लेकिन नए दृष्टिकोणों में, सामूहिक रूप से   चुस्त सॉफ्टवेयर विकास  कहा जाता है, डेवलपर्स अक्सर अपने स्वयं के परीक्षण करते हैं, और नियमित रूप से उपयोगकर्ताओं / ग्राहकों को सॉफ़्टवेयर प्रदर्शित करते हैं। प्रतिक्रिया प्राप्त करने के लिए सॉफ्टवेयर का परीक्षण   इकाई परीक्षण,   प्रतिगमन परीक्षण  और अन्य विधियों के माध्यम से किया जा सकता है, जो मैन्युअल रूप से, या सबसे अधिक, स्वचालित रूप से किया जाता है, क्योंकि परीक्षण किए जाने वाले कोड की मात्रा बड़ी हो सकती है कमांड सॉफ़्टवेयर वाले प्रोग्राम हार्डवेयर इंजीनियरिंग और सिस्टम संचालन को एक साथ अधिक आसानी से कार्य करने में सक्षम बनाते हैं

लाइसेंस
सॉफ़्टवेयर का लाइसेंस उपयोगकर्ता को लाइसेंस प्राप्त वातावरण में सॉफ़्टवेयर का उपयोग करने का अधिकार देता है, और  मुफ़्त सॉफ़्टवेयर लाइसेंस  s के मामले में, अन्य अधिकार भी प्रदान करता है जैसे कि प्रतिलिपि बनाने का अधिकार

मालिकाना सॉफ्टवेयर को दो प्रकारों में विभाजित किया जा सकता है:


 * फ्रीवेयर, जिसमें फ्री ट्रायल सॉफ्टवेयर या  फ्रीमियम  सॉफ्टवेयर की श्रेणी शामिल है (अतीत में,   शेयरवेयर  शब्द का इस्तेमाल अक्सर फ्री ट्रायल/फ्रीमियम सॉफ्टवेयर के लिए किया जाता था)। जैसा कि नाम से पता चलता है, फ्रीवेयर का इस्तेमाल मुफ्त में किया जा सकता है, हालांकि फ्री ट्रायल या फ्रीमियम सॉफ्टवेयर के मामले में, यह कभी-कभी सीमित अवधि के लिए या सीमित कार्यक्षमता के साथ ही सही होता है।
 * एक शुल्क के लिए उपलब्ध सॉफ्टवेयर, जिसका उपयोग केवल लाइसेंस की खरीद पर कानूनी रूप से किया जा सकता है

ओपन-सोर्स सॉफ्टवेयर एक मुफ्त सॉफ्टवेयर लाइसेंस के साथ आता है, जो प्राप्तकर्ता को सॉफ्टवेयर को संशोधित और पुनर्वितरित करने का अधिकार देता है।

पेटेंट
सॉफ्टवेयर पेटेंट, अन्य प्रकार के पेटेंटों की तरह, सैद्धांतिक रूप से एक आविष्कारक को एक "विस्तृत विचार (उदाहरण के लिए एक एल्गोरिथ्म) के लिए एक विशेष, समय-सीमित लाइसेंस देना चाहिए कि सॉफ्टवेयर का एक टुकड़ा, या एक घटक को कैसे लागू किया जाए" सॉफ्टवेयर का टुकड़ा। उपयोगी चीजों के लिए विचार जो सॉफ्टवेयर कर सकते हैं, और उपयोगकर्ता आवश्यकताएं, पेटेंट योग्य नहीं हैं, और ठोस कार्यान्वयन (यानी पेटेंट को लागू करने वाले वास्तविक सॉफ्टवेयर पैकेज) को पेटेंट योग्य नहीं माना जाता है- बाद वाले पहले से ही कॉपीराइट द्वारा कवर किए जाते हैं, आमतौर पर स्वचालित रूप से। इसलिए सॉफ़्टवेयर पेटेंट को आवश्यकताओं और ठोस कार्यान्वयन के बीच मध्य क्षेत्र को कवर करना चाहिए। कुछ देशों में, भौतिक दुनिया पर प्रभाव डालने के लिए दावा किए गए आविष्कार की आवश्यकता भी एक सॉफ़्टवेयर पेटेंट के लिए मान्य होने की आवश्यकताओं का हिस्सा हो सकती है - हालाँकि "सभी" उपयोगी सॉफ़्टवेयर का भौतिक दुनिया पर प्रभाव पड़ता है, यह आवश्यकता बहस के लिए खुली हो सकती है। इस बीच, सॉफ्टवेयर कोड के लेखन के विभिन्न पहलुओं पर अमेरिकी कॉपीराइट कानून लागू किया गया

सॉफ्टवेयर उद्योग में सॉफ्टवेयर पेटेंट विवादास्पद हैं, कई लोग उनके बारे में अलग-अलग विचार रखते हैं। विवाद के स्रोतों में से एक यह है कि प्रारंभिक विचारों और पेटेंट के बीच उपरोक्त विभाजन को पेटेंट वकीलों द्वारा व्यवहार में सम्मानित नहीं किया जाता है - उदाहरण के लिए   पहलू-उन्मुख प्रोग्रामिंग  (एओपी) के लिए पेटेंट, जो कथित तौर पर AOP के विचार को लागू करने वाले किसी भी प्रोग्रामिंग टूल पर अधिकार का दावा करने के लिए, चाहे वह किसी भी तरह से लागू किया गया हो विवाद का एक अन्य स्रोत नवाचार पर प्रभाव है, कई प्रतिष्ठित विशेषज्ञों और कंपनियों का तर्क है कि सॉफ्टवेयर इतना तेजी से आगे बढ़ने वाला क्षेत्र है कि सॉफ्टवेयर पेटेंट केवल विशाल अतिरिक्त मुकदमेबाजी लागत और जोखिम पैदा करते हैं, और वास्तव में मंद नवाचार संयुक्त राज्य अमेरिका के बाहर सॉफ्टवेयर पेटेंट के बारे में बहस के मामले में, तर्क दिया गया है कि बड़े अमेरिकी निगम और पेटेंट वकील सॉफ्टवेयर पेटेंट की अनुमति देने या जारी रखने के प्राथमिक लाभार्थी होने की संभावना है

डिजाइन और कार्यान्वयन
सॉफ्टवेयर का डिजाइन और कार्यान्वयन सॉफ्टवेयर की जटिलता के आधार पर भिन्न होता है। उदाहरण के लिए,  माइक्रोसॉफ्ट वर्ड  के डिजाइन और निर्माण में   माइक्रोसॉफ्ट नोटपैड  को डिजाइन और विकसित करने की तुलना में बहुत अधिक समय लगा क्योंकि बाद वाले में बहुत अधिक बुनियादी कार्यक्षमता है।

सॉफ्टवेयर आमतौर पर  एकीकृत विकास वातावरण  एस (आईडीई) में विकसित किया जाता है जैसे    ग्रहण,    इंटेलिजे  और   माइक्रोसॉफ्ट विजुअल स्टूडियो  जो प्रक्रिया को सरल बना सकते हैं और     सॉफ्टवेयर संकलित कर सकते हैं। जैसा कि एक अलग खंड में उल्लेख किया गया है, सॉफ़्टवेयर आमतौर पर मौजूदा सॉफ़्टवेयर और   एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस  (API) के शीर्ष पर बनाया जाता है, जो अंतर्निहित सॉफ़्टवेयर   GTK+ , JavaBeans या    Swing  प्रदान करता है। पुस्तकालयों (एपीआई) को उनके उद्देश्य से वर्गीकृत किया जा सकता है। उदाहरण के लिए,   स्प्रिंग फ्रेमवर्क  का उपयोग   एंटरप्राइज एप्लिकेशन  एस को लागू करने के लिए किया जाता है,   विंडोज फॉर्म  लाइब्रेरी का उपयोग माइक्रोसॉफ्ट वर्ड जैसे ग्राफिकल यूजर इंटरफेस (जीयूआई) अनुप्रयोगों को डिजाइन करने के लिए किया जाता है, और   विंडोज कम्युनिकेशन फाउंडेशन  का उपयोग   डिजाइन करने के लिए किया जाता है। वेब सेवा  एस जब कोई प्रोग्राम डिज़ाइन किया जाता है, तो वह API पर निर्भर करता है। उदाहरण के लिए, एक माइक्रोसॉफ्ट विंडोज डेस्कटॉप एप्लिकेशन    .NET  विंडोज़ फॉर्म लाइब्रेरी जैसे Form1.Close और ''Form1.Show' में API फ़ंक्शन को कॉल कर सकता है। एप्लिकेशन को बंद या खोलने के लिए। इन एपीआई के बिना, प्रोग्रामर को इन कार्यात्मकताओं को पूरी तरह से स्वयं लिखना होगा।    Oracle  और   Microsoft  जैसी कंपनियाँ अपने स्वयं के API प्रदान करती हैं ताकि उनके    सॉफ़्टवेयर लाइब्रेरी  का उपयोग करके कई एप्लिकेशन लिखे जा सकें, जिनमें आमतौर पर कई API होते हैं।

डेटा संरचना एस जैसे   हैश तालिका  एस,    सरणी, और   बाइनरी पेड़  एस, और   एल्गोरिदम  एस जैसे   क्विकॉर्ट , सॉफ्टवेयर बनाने के लिए उपयोगी हो सकते हैं।

कंप्यूटर सॉफ्टवेयर में विशेष आर्थिक विशेषताएं होती हैं जो इसके डिजाइन, निर्माण और वितरण को अधिकांश अन्य आर्थिक वस्तुओं से अलग बनाती हैं

सॉफ़्टवेयर बनाने वाले व्यक्ति को  प्रोग्रामर,   सॉफ़्टवेयर इंजीनियर  या सॉफ़्टवेयर डेवलपर कहा जाता है, इन शब्दों का अर्थ समान है। प्रोग्रामर के लिए अधिक अनौपचारिक शब्द भी मौजूद हैं जैसे कोडर और हैकर – हालांकि बाद वाले शब्द का उपयोग भ्रम पैदा कर सकता है, क्योंकि इसका अर्थ अक्सर    किसी ऐसे व्यक्ति के लिए होता है जो अवैध रूप से कंप्यूटर सिस्टम  में सेंध लगाता है।

<!-- ==उद्योग और संगठन ==

दुनिया में सॉफ्टवेयर कंपनियों और प्रोग्रामर की एक बड़ी विविधता में एक सॉफ्टवेयर शामिल हैउद्योग। सॉफ्टवेयर काफी लाभदायक उद्योग हो सकता है:  बिल गेट्स,   के सह-संस्थापक माइक्रोसॉफ्ट  2009 में दुनिया के सबसे अमीर व्यक्ति थे, इसका मुख्य कारण माइक्रोसॉफ्ट में शेयरों की एक महत्वपूर्ण संख्या के स्वामित्व के कारण   के लिए जिम्मेदार कंपनी थी। माइक्रोसॉफ्ट विंडोज  और   माइक्रोसॉफ्ट ऑफिस  सॉफ्टवेयर उत्पाद - दोनों अपने-अपने उत्पाद श्रेणियों में बाजार के नेता।

गैर-लाभकारी सॉफ़्टवेयर संगठनों में  फ्री सॉफ्टवेयर फाउंडेशन,   जीएनयू प्रोजेक्ट  और   मोज़िला फाउंडेशन  शामिल हैं।   W3C ,   IETF  जैसे सॉफ़्टवेयर मानक संगठन   XML ,   HTTP  और   HTML  जैसे अनुशंसित सॉफ़्टवेयर मानकों को विकसित करते हैं, ताकि सॉफ़्टवेयर इन मानकों के माध्यम से इंटरऑपरेट कर सके।

अन्य प्रसिद्ध बड़ी सॉफ्टवेयर कंपनियों में  गूगल,   आईबीएम ,    टीसीएस ,   इंफोसिस ,   विप्रो ,   एचसीएल टेक्नोलॉजीज ,    ओरेकल ,   नोवेल ,    SAP ,    Symantec ,   Adobe Systems ,   Sidetrade  और   Corel , जबकि छोटी कंपनियां अक्सर नवाचार प्रदान करती हैं। ->