बहु-मंच सॉफ्टवेयर

[thumb|सभी प्रमुख डेस्कटॉप प्रचालन तंत्र मंचों के निरूपण के साथ [वर्चुअलबॉक्स के बारे में स्क्रीन]]
अभिकलन में, **बहु-मंच सॉफ्टवेयर** (जिसे **मल्टी-प्लेटफॉर्म सॉफ्टवेयर**, या **क्रॉस-प्लाटफॉर्म सॉफ्टवेयर** भी कहा जाता है) ऐसा सॉफ्टवेयर है जिसे कई अभिकलन मंच (कंप्यूटिंग प्लेटफॉर्म) पर काम करने के लिए डिज़ाइन किया गया है। कुछ बहु-मंच सॉफ्टवेयरों को प्रत्येक प्लेटफॉर्म के लिए एक अलग निर्माण (बिल्ड) की आवश्यकता होती है, लेकिन कुछ को बिना किसी विशेष तैयारी के किसी भी प्लेटफॉर्म पर सीधे चलाया जा सकता है, क्योंकि वे एक व्याख्यायित भाषा में लिखे जाते हैं या पोर्टेबल बाइटकोड में संकलित किए जाते हैं जिसके लिए इंटरप्रेटर या रन-टाइम पैकेज सभी समर्थित प्लेटफार्मों के सामान्य या मानक घटक होते हैं।

उदाहरण के लिए, एक बहु-मंच अनुप्रयोग (एप्लिकेशन) लिनक्स, मैक ओएस और माइक्रोसॉफ्ट विंडोज़ पर चल सकता है। बहु-मंच सॉफ्टवेयर कई प्लेटफार्मों पर चल सकता है, या कम से कम दो पर। बहु-मंच विकास के लिए कुछ फ्रेमवर्क Codename One, ArkUI-X, Kivy, क्यूट, जीटीके, फ्लटर, NativeScript, Xamarin, Apache Cordova, Ionic, और React Native हैं।

## मंच

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

### हार्डवेयर <span class="anchor" id="Hardware platforms"></span>
एक हार्डवेयर प्लेटफॉर्म एक निर्देश सेट वास्तुकला को संदर्भित कर सकता है। उदाहरण के लिए: आर्म (ARM) या x86 आर्किटेक्चर। ये मशीनें अलग-अलग प्रचालन तंत्र चला सकती हैं।

स्मार्टफोन और टैबलेट आमतौर पर आर्म आर्किटेक्चर पर चलते हैं, ये अक्सर एंड्रॉइड या आईओएस और अन्य मोबाइल प्रचालन तंत्र चलाते हैं।

### सॉफ्टवेयर <span class="anchor" id="Software platforms"></span>
एक सॉफ्टवेयर प्लेटफॉर्म या तो प्रचालन तन्त्र (ओएस) या प्रोग्रामिंग वातावरण हो सकता है, हालांकि आमतौर पर यह दोनों का संयोजन होता है। एक अपवाद जावा है, जो जावा बाइटकोड को निष्पादित करने के लिए ओएस-स्वतंत्र आभासी मशीन (वीएम) का उपयोग करता है। कुछ सॉफ्टवेयर प्लेटफॉर्म इस प्रकार हैं:
* एंड्रॉइड (ARM64)
* ChromeOS (ARM32, ARM64, IA-32, x86-64)
* माइक्रोसॉफ़्ट द्वारा कॉमन लैंग्वेज इंफ्रास्ट्रक्चर (CLI), जो इसमें लागू किया गया है:
** विरासत .नेट फ्रेमवर्क जो केवल माइक्रोसॉफ्ट विंडोज़ पर काम करता है।
** नया .नेट फ्रेमवर्क (सिर्फ ".नेट" कहा जाता है) जो माइक्रोसॉफ्ट विंडोज़, मैक ओएस और लिनक्स पर काम करता है।
** अन्य कार्यान्वयन जैसे मोनो (पूर्व में Novell और Xamarin द्वारा)
* OpenHarmony/Oniro (ARM64, RISC-V, x86, x64, और LoongArch)
* HarmonyOS (ARM64)
* आईओएस ((ARMv8-A))
* iPadOS (ARMv8-A)
* जावा
* लिनक्स (&nbsp;Alpha, ARC, ARM, C-Sky, Hexagon, LoongArch, m68k, Microblaze, MIPS, Nios II, OpenRISC, PA-RISC, PowerPC, RISC-V, s390, SuperH, SPARC, x86, Xtensa)
* माइक्रोसॉफ्ट C से P-Code (1980-1982: कई आर्किटेक्चर और सिस्टम)
* मैक ओएस x86, ARM (Apple silicon)
* माइक्रोसॉफ्ट विंडोज़ (आई.ए.-३२, X८६-६४, ARM, ARM64)
* प्लेस्टेशन ४ (x86), प्लेस्टेशन ३ (PowerPC) और PlayStation Vita (ARM)
* सोलारिस (SPARC, x86)
* SPARC
* यूनिक्स (1969 से कई प्लेटफॉर्म)
* वेब ब्राउज़र – ज्यादातर एक-दूसरे के साथ संगत, जावास्क्रिप्ट वेब-ऐप्स चलाते हैं
* एक्सबॉक्स

;लघु, ऐतिहासिक
* AmigaOS (m68k), AmigaOS 4 (PowerPC), AROS (x86, PowerPC, m68k), MorphOS (PowerPC)
* Atari TOS, MiNT
* BSD (कई प्लेटफॉर्म; उदाहरण के लिए NetBSDnet देखें)
* x86 पर डॉस-प्रकार के सिस्टम: एम.एस.-डॉस, PC DOS, DR-DOS, FreeDOS
* OS/2, eComStation
* BeOS (PowerPC, x86)

#### जावा <span class="anchor" id="Java platform"></span>

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

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

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

## कार्यान्वयन <span class="anchor" id="Implementations"></span>
सॉफ्टवेयर को बहु-मंच माने जाने के लिए, उसे एक से अधिक संगणक वास्तुकला या ओएस पर कार्य करना चाहिए। ऐसा सॉफ्टवेयर विकसित करना एक समय लेने वाला कार्य हो सकता है क्योंकि अलग-अलग ओएस में अलग-अलग एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) होते हैं।

एक ओएस के लिए लिखा गया सॉफ्टवेयर स्वचालित रूप से उन सभी आर्किटेक्चर पर काम नहीं कर सकता है जो ओएस समर्थित हैं। केवल इसलिए कि सॉफ्टवेयर सी या सी++ जैसी लोकप्रिय प्रोग्रामिंग भाषा में लिखा गया है, इसका मतलब यह नहीं है कि यह उस भाषा का समर्थन करने वाले सभी ओएस पर चलेगा—या एक ही ओएस के विभिन्न संस्करणों पर भी।

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

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

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

#### डिज़ाइन <span class="anchor" id="Design strategies"></span>
अनुकूलता और कार्यक्षमता के प्रतिस्पर्धी हितों के कारण, कई डिज़ाइन रणनीतियाँ उभरी हैं।

कई सॉफ्टवेयर सिस्टम एक स्तरित वास्तुकला का उपयोग करते हैं जहां प्लेटफॉर्म-निर्भर कोड ऊपरी और निचले स्तरों तक ही सीमित होता है।

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

##### एकाधिक कोडबेस
कुछ सॉफ्टवेयर समान कार्यक्षमता के साथ विभिन्न (हार्डवेयर और ओएस) प्लेटफार्मों के लिए अलग-अलग कोडबेस में बनाए रखे जाते हैं। इसके लिए कोड को बनाए रखने के लिए अधिक प्रयास की आवश्यकता होती है, लेकिन यह वहां सार्थक हो सकता है जहां प्लेटफॉर्म-विशिष्ट कोड की मात्रा अधिक हो।

##### एकल कोडबेस
यह रणनीति एक कोडबेस होने पर निर्भर करती है जिसे कई प्लेटफॉर्म-विशिष्ट प्रारूपों में संकलित किया जा सकता है। एक तकनीक सशर्त संकलन (कंडीशनल कंपाइलेशन) है। इस तकनीक के साथ, सभी प्लेटफार्मों के लिए सामान्य कोड को दोहराया नहीं जाता है। कोड के ब्लॉक जो केवल कुछ प्लेटफार्मों के लिए प्रासंगिक हैं, उन्हें सशर्त बनाया जाता है, ताकि उन्हें जरूरत पड़ने पर ही व्याख्यायित या संकलित किया जा सके। एक अन्य तकनीक कार्यक्षमता का पृथक्करण है, जो ब्राउज़र या ओएस द्वारा समर्थित नहीं होने वाली कार्यक्षमता को अक्षम कर देती है, जबकि उपयोगकर्ता को एक पूर्ण एप्लिकेशन प्रदान करती है। (यह भी देखें: Separation of concerns)। इस तकनीक का उपयोग वेब विकास में किया जाता है जहां व्याख्यायित कोड (स्क्रिप्टिंग भाषाओं की तरह) उस प्लेटफॉर्म के बारे में पूछताछ कर सकता है जिस पर वह विभिन्न ब्लॉकों को सशर्त रूप से निष्पादित करने के लिए चल रहा है।

##### तृतीय-पक्ष लाइब्रेरी
तृतीय-पक्ष लाइब्रेरी विक्रेता तालकन की कीमत पर एक एकल, एकीकृत एपीआई के पीछे क्लाइंट विभेदन की जटिलताओं को छिपाकर बहु-मंच क्षमता को सरल बनाने का प्रयास करती हैं।

##### अनुक्रियाशील वेब डिज़ाइन
अनुक्रियाशील वेब डिज़ाइन (आरडब्ल्यूडी) एक वेब डिज़ाइन दृष्टिकोण है जिसका उद्देश्य साइटों के दृश्य लेआउट को इस तरह से तैयार करना है कि वे मोबाइल फोन से लेकर डेस्कटॉप कंप्यूटर मॉनिटर तक विभिन्न उपकरणों पर अनुकूल दृश्य अनुभव—न्यूनतम रीसाइज़िंग, पैनिंग और स्क्रॉलिंग के साथ आसान पढ़ने और नेविगेशन—प्रदान कर सकें। इस तकनीक के साथ प्लेटफॉर्म-विशिष्ट कोड का बहुत कम या बिल्कुल उपयोग नहीं किया जाता है।

#### परीक्षण <span class="anchor" id="Testing strategies"></span>
बहु-मंच अनुप्रयोगों को बहुत अधिक एकीकरण परीक्षण की आवश्यकता होती है। कुछ वेब ब्राउज़र एक ही मशीन पर विभिन्न संस्करणों की स्थापना की मनाही करते हैं। कई प्लेटफार्मों को लक्षित करने के लिए कई दृष्टिकोणों का उपयोग किया जाता है, लेकिन उन सभी के परिणामस्वरूप ऐसा सॉफ्टवेयर बनता है जिसमें परीक्षण और रखरखाव के लिए पर्याप्त मैन्युअल प्रयास की आवश्यकता होती है। पूर्ण वर्चुअलाइजेशन जैसी तकनीकों का उपयोग कभी-कभी इस समस्या के समाधान के रूप में किया जाता है।

पेज ऑब्जेक्ट मॉडल जैसे उपकरण बहु-मंच परीक्षणों को स्क्रिप्ट करने की अनुमति देते हैं ताकि एक परीक्षण केस ऐप के कई संस्करणों को कवर करे। यदि विभिन्न संस्करणों में समान यूजर इंटरफेस हैं, तो सभी को एक परीक्षण केस के साथ परीक्षण किया जा सकता है।

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

#### बाइनरी सॉफ्टवेयर
पारंपरिक अनुप्रयोग सॉफ्टवेयर को बाइनरी फाइलों के रूप में वितरित किया गया है, विशेष रूप से निष्पादन योग्य (एग्जीक्यूटेबल) फाइलों के रूप में। निष्पादन योग्य फाइलें केवल उस प्लेटफॉर्म का समर्थन करती हैं जिसके लिए वे बनाई गई थीं—जिसका अर्थ है कि एक ही बहु-मंच निष्पादन योग्य फाइल उस कोड के साथ बहुत भारी हो सकती है जो किसी विशेष प्लेटफॉर्म पर कभी निष्पादित नहीं होता है। इसके बजाय, आम तौर पर निष्पादन योग्य फाइलों का चयन होता है, जिनमें से प्रत्येक एक प्लेटफॉर्म के लिए बनाई गई होती है।

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

विभिन्न टूलसेट का उपयोग विभिन्न प्लेटफार्मों के लिए कार्यशील निष्पादन योग्य बनाने के लिए पर्याप्त नहीं हो सकता है। इस मामले में, प्रोग्रामर को स्रोत कोड को नए प्लेटफॉर्म पर *[[porting|पोर्ट]]* करना होगा। उदाहरण के लिए, फ़ायरफ़ॉक्स जैसा एप्लिकेशन, जो पहले से ही x86 परिवार पर विंडोज़ पर चलता है, उसे x86 पर लिनक्स (और संभावित रूप से अन्य आर्किटेक्चर) पर चलाने के लिए संशोधित और फिर से बनाया जा सकता है। कोड के कई संस्करणों को अलग-अलग कोडबेस के रूप में संग्रहीत किया जा सकता है, या एक कोडबेस में मिलाया जा सकता है।

पोर्टिंग का एक विकल्प *[[बहु-मंच वर्चुअलाइजेशन]]* है, जहां एक प्लेटफॉर्म के लिए संकलित एप्लिकेशन स्रोत कोड या बाइनरी के संशोधन के बिना दूसरे पर चल सकते हैं। एक उदाहरण के रूप में, एप्पल का रोसेटा, जो इंटेल-आधारित मैकिंटोश कंप्यूटरों में बनाया गया है, उन अनुप्रयोगों को चलाता है जिन्हें पिछली पीढ़ी के मैक के लिए संकलित किया गया था जो पावरपीसी सीपीयू का उपयोग करते थे। एक अन्य उदाहरण आईबीएम PowerVM Lx86 है, जो लिनक्स/x86 अनुप्रयोगों को लिनक्स/पावर ओएस पर अपरिवर्तित चलने की अनुमति देता है।

बहु-मंच बाइनरी सॉफ्टवेयर का उदाहरण:
* लीब्रऑफिस ऑफिस सूट माइक्रोसॉफ्ट विंडोज़, मैक ओएस, लिनक्स, FreeBSD, NetBSD, OpenBSD, एंड्रॉइड, आईओएस, iPadOS, ChromeOS, वेब-आधारित Collabora Online और कई अन्य के लिए बनाया गया है। इनमें से कई प्रोसेसर आर्किटेक्चर सहित कई हार्डवेयर प्लेटफार्मों पर समर्थित हैं, जिनमें आई.ए.-३२, X८६-६४, आर्म (ARMel, ARMhf, ARM64), MIPS, MIPSel, PowerPC, ppc64le, और S390x शामिल हैं।

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

बाइनरी निष्पादन योग्य फाइलों के विपरीत, एक ही स्क्रिप्ट का उपयोग उन सभी कंप्यूटरों पर किया जा सकता है जिनमें स्क्रिप्ट की व्याख्या करने के लिए सॉफ्टवेयर है। ऐसा इसलिए है क्योंकि स्क्रिप्ट आम तौर पर एक टेक्स्ट फाइल में सादा टेक्स्ट में संग्रहीत की जाती है। कुछ तुच्छ मुद्दे हो सकते हैं, जैसे नई लाइन वर्ण का प्रतिनिधित्व।

कुछ लोकप्रिय बहु-मंच स्क्रिप्टिंग भाषाएं हैं:
* बैश (bash) – एक यूनिक्स शेल जो आमतौर पर लिनक्स और अन्य आधुनिक यूनिक्स जैसे सिस्टम पर चलता है, साथ ही सिगविन पोज़िक्स संगतता परत, विंडोज़ के लिए गिट, या Windows Subsystem for Linux के माध्यम से विंडोज़ पर भी चलता है।
* पर्ल – पहली बार 1987 में जारी किया गया। CGI प्रोग्रामिंग, छोटे सिस्टम प्रशासन कार्यों और बहुत कुछ के लिए उपयोग किया जाता है।
* पीएचपी – ज्यादातर वेब ऐप्लीकेशन के लिए उपयोग किया जाता है।
* पाइथन – एक ऐसी भाषा जो रन-टाइम दक्षता के बजाय त्वरित अनुप्रयोग विकास और लिखने में आसानी पर ध्यान केंद्रित करती है।
* रूबी – एक ऑब्जेक्ट-ओरिएंटेड भाषा जिसका उद्देश्य पढ़ने में आसान होना है। Ruby on Rails के माध्यम से वेब पर भी उपयोग किया जा सकता है।
* टीसीएल – एक गतिशील प्रोग्रामिंग भाषा, जो वेब और डेस्कटॉप अनुप्रयोगों, नेटवर्किंग, प्रशासन, परीक्षण और कई अन्य उपयोगों के लिए उपयुक्त है।

### वीडियो खेल
बहु-मंच (क्रॉस-प्लेटफॉर्म) एक शब्द है जो विभिन्न विडियो गेम कंसोल पर जारी किए गए वीडियो गेम पर भी लागू हो सकता है। बहु-मंच खेलों के उदाहरणों में शामिल हैं: *Miner 2049er*, *Tomb Raider: Legend*, *[[फीफा (वीडियो गेम श्रृंखला)|फीफा श्रृंखला]]*, *NHL श्रृंखला* और *[[माइनक्राफ्ट]]*।

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

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

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

#### बहु-मंच खेल (Cross-platform play)

कई डेवलपर्स ने विभिन्न प्लेटफार्मों का उपयोग करते हुए ऑनलाइन गेम खेलने के तरीके लागू किए हैं। Psyonix, Epic Games, माइक्रोसॉफ़्ट, और Valve सभी के पास ऐसी तकनीक है जो एक्सबॉक्स 360 और प्लेस्टेशन ३ गेमर्स को पीसी गेमर्स के साथ खेलने की अनुमति देती है, जिससे उपभोक्ताओं पर यह निर्णय छोड़ दिया जाता है कि किस प्लेटफॉर्म का उपयोग करना है। पीसी और कंसोल गेम्स (विशेष रूप से उत्पादित कीबोर्ड और माउस के साथ ड्रीमकास्ट) के बीच इस स्तर की अंतःक्रियाशीलता की अनुमति देने वाला पहला गेम *[[Quake 3]]* था।

बहु-मंच ऑनलाइन खेल की सुविधा देने वाले खेलों में *Rocket League*, *[[Final Fantasy XIV: A Realm Reborn|Final Fantasy XIV]]*, *Street Fighter V*, *[[Killer Instinct (2013 video game)|Killer Instinct]]*, *Paragon* और *Fable Fortune* शामिल हैं, और इसके बेटर टुगेदर अपडेट के साथ विंडोज १०, वीआर संस्करण, माइनक्राफ्ट और एक्सबॉक्स वन पर *माइनक्राफ्ट* भी शामिल है।

## प्रोग्रामिंग <span class="anchor" id="Cross-platform programming"></span>
बहु-मंच प्रोग्रामिंग एक से अधिक प्लेटफार्मों पर काम करने के लिए जानबूझकर सॉफ्टवेयर लिखने का अभ्यास है।

### दृष्टिकोण <span class="anchor" id="Approaches to cross-platform programming"></span>
बहु-मंच एप्लिकेशन लिखने के विभिन्न तरीके हैं। एक दृष्टिकोण अलग-अलग *स्रोत ट्री* में एक ही सॉफ्टवेयर के कई संस्करण बनाना है—दूसरे शब्दों में, किसी एप्लिकेशन के माइक्रोसॉफ्ट विंडोज़ संस्करण में स्रोत कोड फाइलों का एक सेट हो सकता है और मैकिन्टोश संस्करण में दूसरा, जबकि मुक्तस्रोत यूनिक्स सिस्टम में तीसरा हो सकता है। हालांकि यह सीधा है, केवल एक प्लेटफॉर्म के लिए विकास करने की तुलना में यह एक बड़ी टीम को भुगतान करने या उत्पादों को अधिक धीरे-धीरे जारी करने के लिए बहुत अधिक खर्च कर सकता है। इसके परिणामस्वरूप अधिक बग ट्रैक और फिक्स किए जा सकते हैं।

दूसरा दृष्टिकोण ऐसे सॉफ्टवेयर का उपयोग करना है जो प्लेटफार्मों के बीच के अंतर को छुपाता है। यह अमूर्त परत (एब्स्ट्रैक्शन लेयर) एप्लिकेशन को प्लेटफॉर्म से अलग करती है। ऐसे एप्लिकेशन *प्लेटफॉर्म अज्ञेयवादी* होते हैं। जेवीएम पर चलने वाले एप्लिकेशन इसी तरह बनाए जाते हैं।

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

### टूलकिट और वातावरण<span class="anchor" id="Cross-platform programming toolkits and environments"></span>
बहु-मंच प्रोग्रामिंग की प्रक्रिया में मदद करने के लिए कई उपकरण उपलब्ध हैं:
* 8th: एक विकास भाषा जो ज्यूस (Juce) को अपनी जीयूआई परत के रूप में उपयोग करती है। यह वर्तमान में एंड्रॉइड, आईओएस, विंडोज़, मैक ओएस, लिनक्स और रास्पबेरी पाई का समर्थन करती है।
* अनंत कंप्यूटिंग: एक मोबाइल एप्लिकेशन प्लेटफॉर्म जो कीबोर्ड सहित सभी भारतीय भाषाओं में काम करता है, और सभी ओएस में AppWallet और नेटिव प्रदर्शन का भी समर्थन करता है।
* AppearIQ: एक फ्रेमवर्क जो एंटरप्राइज वातावरण में ऐप विकास और परिनियोजन के वर्कफ़्लो का समर्थन करता है। नेटिव रूप से विकसित कंटेनर एपीआई के माध्यम से मोबाइल उपकरणों या टैबलेट की हार्डवेयर विशेषताओं को HTML5 कोड में प्रस्तुत करते हैं जिससे विभिन्न प्लेटफार्मों पर चलने वाले मोबाइल ऐप के विकास में सुविधा होती है।
* Boden: C++ में लिखा गया एक यूआई फ्रेमवर्क।
* कैरो (Cairo): वेक्टर ग्राफिक्स-आधारित, उपकरण-स्वतंत्र एपीआई प्रदान करने के लिए उपयोग की जाने वाली एक मुक्त सॉफ्टवेयर लाइब्रेरी। इसे कई अलग-अलग बैकएंड में २-आयामी ड्राइंग के लिए प्रिमिटिव प्रदान करने के लिए डिज़ाइन किया गया है। कैरो सी में लिखा गया है और इसमें कई प्रोग्रामिंग भाषाओं के लिए बाइंडिंग है।
* Cocos2d: २डी और सरल ३डी बहु-मंच गेम और एप्लिकेशन विकसित करने के लिए एक ओपन-सोर्स टूलकिट और गेम इंजन।
* Codename One: जावा और कोटलिन डेवलपर्स के लिए एक ओपन-सोर्स 'राइट वन्स रन एनीवेयर' (WORA) फ्रेमवर्क।
* डेल्फी (Delphi): एक आईडीई जो विकास के लिए पास्कल-आधारित भाषा का उपयोग करता है। यह एंड्रॉइड, आईओएस, विंडोज़, मैक ओएस, लिनक्स का समर्थन करता है।
* Ecere SDK: एक जीयूआई और २डी/३डी ग्राफिक्स टूलकिट और आईडीई, जो ईसी (eC) में लिखा गया है और सी और पाइथन जैसी अतिरिक्त भाषाओं के लिए समर्थन के साथ है। यह Emscripten या WebAssembly के माध्यम से लिनक्स, फ्रीबीएसडी, विंडोज़, एंड्रॉइड, मैक ओएस और वेब का समर्थन करता है।
* एक्लिप्स: एक ओपन-सोर्स विकास वातावरण। जावा में कार्यान्वित एक विन्यास योग्य वास्तुकला के साथ जो सॉफ्टवेयर विकास के लिए कई उपकरणों का समर्थन करता है। जावा और सी++ सहित कई भाषाओं के लिए ऐड-ऑन उपलब्ध हैं।
* FLTK: एक ओपन-सोर्स टूलकिट, लेकिन अधिक हल्का क्योंकि यह खुद को जीयूआई तक सीमित रखता है।
* फ्लटर: गूगल द्वारा विकसित आईओएस, एंड्रॉइड, मैक, विंडोज़ और अन्य के लिए एक बहु-मंच यूआई फ्रेमवर्क।
* fpGUI: एक ओपन-सोर्स विजेट टूलकिट जो पूरी तरह से ऑब्जेक्ट पास्कल में कार्यान्वित है। यह वर्तमान में लिनक्स, विंडोज़ और विंडोज़ सीई का कुछ समर्थन करता है।
* GeneXus: बहु-मंच एप्लिकेशन निर्माण और परिनियोजन के लिए विंडोज़ रैपिड सॉफ्टवेयर डेवलपमेंट समाधान, जो ज्ञान द्योतन पर आधारित है और सी#, COBOL, एंड्रॉइड और ब्लैकबेरी स्मार्ट उपकरणों सहित जावा, एप्पल मोबाइल उपकरणों के लिए Objective-C, RPG, रूबी, Visual Basic, और Visual FoxPro का समर्थन करता है।
* GLBasic: एक बेसिक (BASIC) बोली और कंपाइलर जो C++ कोड उत्पन्न करता है। इसमें कई प्लेटफार्मों के लिए क्रॉस कंपाइलर शामिल हैं और कई प्लेटफार्मों (विंडोज़, मैक, लिनक्स, एंड्रॉइड, आईओएस और कुछ अन्य हैंडहेल्ड) का समर्थन करता है।
* गोडोट (Godot): एक एसडीके जो गोडोट इंजन का उपयोग करता है।
* जीटीके+: एक्स दृश्यतंत्र (X11) और माइक्रोसॉफ्ट विंडोज़ के साथ यूनिक्स-जैसे सिस्टम के लिए एक ओपन-सोर्स विजेट टूलकिट।
* Haxe: एक ओपन-सोर्स भाषा।
* Juce: C++ में लिखा गया एक एप्लिकेशन फ्रेमवर्क, जिसका उपयोग कोड में बदलाव किए बिना कई प्रणालियों (माइक्रोसॉफ्ट विंडोज़, पोज़िक्स, मैक ओएस) पर नेटिव सॉफ्टवेयर लिखने के लिए किया जाता है।
* कीवी (Kivy): पाइथन में लिखा गया एक ओपन-सोर्स बहु-मंच यूआई फ्रेमवर्क। यह एंड्रॉइड, आईओएस, लिनक्स, मैक ओएस, विंडोज़ और रास्पबेरी पाई का समर्थन करता है।
* LEADTOOLS: विंडोज़, आईओएस, मैक ओएस, एंड्रॉइड, लिनक्स और वेब अनुप्रयोगों में पहचान, दस्तावेज़, चिकित्सा, इमेजिंग और मल्टीमीडिया तकनीकों को एकीकृत करने के लिए बहु-मंच एसडीके लाइब्रेरी।
* LiveCode: हाइपरटॉक से प्रेरित एक व्यावसायिक बहु-मंच रैपिड एप्लिकेशन डेवलपमेंट भाषा।
* लाजर (Lazarus): फ्रीपास्कल कंपाइलर के लिए एक प्रोग्रामिंग वातावरण। यह स्व-स्थायी ग्राफिकल और कंसोल अनुप्रयोगों के निर्माण का समर्थन करता है और लिनक्स, मैक ओएस, आईओएस, एंड्रॉइड, विंडोज़ सीई, विंडोज़ और वेब पर चलता है।
* Max/MSP: एक दृश्य प्रोग्रामिंग भाषा जो मैक ओएस और विंडोज़ के लिए अनुप्रयोगों में एक प्लेटफॉर्म-विशिष्ट रनटाइम वातावरण के साथ प्लेटफॉर्म-स्वतंत्र कोड को एनकैप्सुलेट करती है।
* Mendix: क्लाउड-आधारित लो-कोड एप्लिकेशन डेवलपमेंट प्लेटफॉर्म।
* मोनो-क्रॉस (MonoCross): एक ओपन-सोर्स मॉडल दृष्टि नियंत्रक डिज़ाइन पैटर्न जहां मॉडल और कंट्रोलर बहु-मंच हैं लेकिन व्यू प्लेटफॉर्म-विशिष्ट है।
* मोनो: Microsoft .NET का एक ओपन-सोर्स बहु-मंच संस्करण (अनुप्रयोगों और प्रोग्रामिंग भाषाओं के लिए एक फ्रेमवर्क)।
* MoSync: C++ परिवार में मोबाइल प्लेटफॉर्म ऐप विकास के लिए एक ओपन-सोर्स एसडीके।
* मोज़िला एप्लिकेशन फ्रेमवर्क: मैक ओएस, विंडोज़ और लिनक्स एप्लिकेशन बनाने के लिए एक ओपन-सोर्स प्लेटफॉर्म।
* ओपनजीएल (OpenGL): एक ३डी ग्राफिक्स लाइब्रेरी।
* Pixel Game Maker MV: विंडोज़ और निनटेंडो स्विच गेम विकसित करने के लिए विंडोज़ के लिए एक मालिकाना २डी गेम डेवलपमेंट सॉफ्टवेयर।
* PureBasic: मैक ओएस, विंडोज़ और लिनक्स एप्लिकेशन बनाने के लिए एक मालिकाना भाषा और आईडीई।
* ReNative: रिएक्ट नेटिव के साथ बहु-मंच प्रोजेक्ट बनाने के लिए सार्वभौमिक विकास एसडीके। इसमें नवीनतम आईओएस, टीवीओएस, एंड्रॉइड, एंड्रॉइड टीवी, वेब, टिज़ेन टीवी, टिज़ेन वॉच, एलजी वेबओएस, मैक ओएस, विंडोज़, काईओएस, फ़ायरफ़ॉक्स ओएस और फ़ायरफ़ॉक्स टीवी प्लेटफॉर्म शामिल हैं।
* क्यूट: एक्स दृश्यतंत्र (X11), माइक्रोसॉफ्ट विंडोज़, मैक ओएस और अन्य प्रणालियों के साथ यूनिक्स-जैसे सिस्टम के लिए एक एप्लिकेशन फ्रेमवर्क और विजेट टूलकिट—मालिकाना और ओपन-सोर्स लाइसेंस दोनों के तहत उपलब्ध है।
* Simple and Fast Multimedia Library: एक मल्टीमीडिया C++ एपीआई जो ग्राफिक्स, इनपुट, ऑडियो आदि के लिए निम्न और उच्च स्तर की पहुंच प्रदान करता है।
* Simple DirectMedia Layer: C में लिखी गई एक ओपन-सोर्स मल्टीमीडिया लाइब्रेरी जो विभिन्न प्लेटफार्मों के ग्राफिक्स, ध्वनि और इनपुट एपीआई पर एक एब्स्ट्रैक्शन बनाती है। यह लिनक्स, विंडोज़ और मैक ओएस सहित ओएस पर चलता है और इसका उद्देश्य गेम और मल्टीमीडिया एप्लिकेशन हैं।
* Smartface: जावास्क्रिप्ट कोड संपादक के साथ WYSIWYG डिज़ाइन संपादक का उपयोग करके एंड्रॉइड और आईओएस के लिए मोबाइल एप्लिकेशन बनाने के लिए एक नेटिव ऐप डेवलपमेंट टूल।
* टीसीएल/टीके
* Titanium Mobile: एंड्रॉइड और आईओएस विकास के लिए ओपन सोर्स बहु-मंच फ्रेमवर्क।
* U++: प्रदर्शन के लिए एक C++ जीयूआई फ्रेमवर्क। इसमें लाइब्रेरीज़ (जीयूआई, एसक्यूएल, आदि) और आईडीई का एक सेट शामिल है। यह विंडोज़, मैक ओएस और लिनक्स का समर्थन करता है।
* यूनिटी: एक अन्य बहु-मंच एसडीके जो यूनिटी इंजन का उपयोग करता है।
* Uno Platform: C# का उपयोग करते हुए विंडोज़, मैक ओएस, आईओएस, एंड्रॉइड, वेबअसेंबली और लिनक्स।
* अनरियल (Unreal): एक बहु-मंच एसडीके जो अनरियल इंजन का उपयोग करता है।
* V-Play Engine: वी-प्ले लोकप्रिय क्यूट फ्रेमवर्क पर आधारित एक बहु-मंच विकास एसडीके है। वी-प्ले ऐप और गेम क्यूट क्रिएटर के भीतर बनाए जाते हैं।
* WaveMaker: अनुक्रियाशील वेब और हाइब्रिड मोबाइल (एंड्रॉइड और आईओएस) एप्लिकेशन बनाने के लिए एक लो-कोड डेवलपमेंट टूल।
* WinDev: विंडोज़, लिनक्स, .नेट और जावा, और वेब ब्राउज़र के लिए एक एकीकृत विकास वातावरण। व्यावसायिक और औद्योगिक अनुप्रयोगों के लिए अनुकूलित।
* wxWidgets: एक ओपन-सोर्स विजेट टूलकिट जो एक एप्लिकेशन फ्रेमवर्क भी है। यह एक्स दृश्यतंत्र (X11), माइक्रोसॉफ्ट विंडोज़ और मैक ओएस के साथ यूनिक्स-जैसे सिस्टम पर चलता है।
* Xojo: एक रैड आईडीई जो डेस्कटॉप, वेब और आईओएस ऐप संकलित करने के लिए ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा का उपयोग करता है। जोजो नेटिव रूप से विंडोज़, मैक ओएस, आईओएस और लिनक्स में संकलित करने का समर्थन करता है, और संकलित वेब ऐप भी बना सकता है जिन्हें स्टैंडअलोन सर्वर के रूप में या सीजीआई के माध्यम से चलाया जा सकता है।

## इन्हें भी देखें
* ऑपरेटिंग संदर्भ
* विजेट टूलकिट की सूची
* हार्डवेयर वर्चुअलाइजेशन
* भाषा बंधन
* स्रोत्र-से-स्रोत्र अनुभाषक
* मशीनी भाषा संगतता
* मैसेजिंग प्लेटफॉर्म की उपयोगकर्ता सुविधाओं की तुलना

## संदर्भ

श्रेणी:बहु-मंच सॉफ्टवेयर
श्रेणी:अभिकलन मंच
श्रेणी:पारस्परिकता