Кіріспе
Компьютерлік бағдарламалық қамтамасыз ету бірнеше есептеу платформаларында іске асырылады. Компьютерлік бағдарламалық қамтамасыз етуде кросс-платформалық бағдарламалық қамтамасыз ету (көп платформалы бағдарламалық қамтамасыз ету, платформаға тәуелсіз бағдарламалық қамтамасыз ету немесе платформадан тыс бағдарламалық қамтамасыз ету деп те аталады) бірнеше есептеу платформаларында жұмыс істеуге арналған компьютерлік бағдарламалық қамтамасыз ету. Кейбір кросс-платформалық бағдарламалық жасақтама әр платформа үшін жеке құрастыруды қажет етеді, бірақ кейбіреулерін ешқандай арнайы дайындықсыз кез-келген платформада тікелей орындауға болады, олар интерпретацияланған тілде жазылған немесе портативті байт-кодқа компиляцияланған, ал интерпретаторлар немесе орындалу уақыты пакеттері барлық қолдау көрсетілетін платформалардың ортақ немесе стандартты компоненттері болып табылады. Мысалы, кросс-платформалық қосымша Linux, macOS және Microsoft Windows жүйелерінде жұмыс істей алады. Крос-платформалық бағдарламалық жасақтама көптеген платформаларда немесе екі платформада да жұмыс істей алады. Крос-платформалық дамуға арналған кейбір фреймворктер: Codename One, ArkUI X, Kivy, Qt, GTK, Flutter, NativeScript, Xamarin, Apache Cordova, Ionic және React Native.
In computing, cross platform software (also called multi platform software, platform agnostic software, or platform independent software) is computer software that is designed to work in several computing platforms. Some cross platform software requires a separate build for each platform, but some can be directly run on any platform without special preparation, being written in an interpreted language or compiled to portable bytecode for which the interpreters or run time packages are common or standard components of all supported platforms. For example, a cross platform application may run on Linux, macOS and Microsoft Windows. Cross platform software may run on many platforms, or as few as two. Some frameworks for cross platform development are Codename One, ArkUI X, Kivy, Qt, GTK, Flutter, NativeScript, Xamarin, Apache Cordova, Ionic, and React Native.
Жава
Java тілі әдетте Java платформасының құрамына кіретін VM-де жұмыс істеу үшін компиляцияланады. Java виртуалды машинасы (Java VM, JVM) – барлық Java кодын іске асыратын бағдарламалық қамтамасыз етуде жүзеге асырылған процессор. Бұл JVM-ді қолдайтын кез келген жүйеде бірдей кодты орындауға мүмкіндік береді. Java бағдарламалық қамтамасыз етілуін аппараттық Java процессоры да іске асыра алады. Бұл көбінесе кіріктірілген жүйелерде қолданылады. JVM-де жұмыс істейтін Java коды, тиісті рұқсаттар берілген жағдайда, дискіге ақпарат енгізу/шығару (I/O) және желіге қол жеткізу сияқты операциялық жүйеге қатысты қызметтерге қол жеткізе алады. JVM Java қолданбасы үшін жүйелік шақыруларды жасайды. Бұл пайдаланушыларға кіруді бақылау тізіміне (ACL) сәйкес, тиісті қорғау деңгейін таңдауға мүмкіндік береді. Мысалы, дискіге және желіге қол жеткізу әдетте десктоптық қолданбалар үшін қосылады, бірақ браузерлік апплеттер үшін қосылмайды. Java Native Interface (JNI) операциялық жүйеге тән функцияларға қол жеткізу үшін де қолданылуы мүмкін, бірақ бұл портативтіліктің жоғалуына әкеледі. Қазіргі уақытта Java Standard Edition бағдарламалық қамтамасыз етілуі Microsoft Windows, macOS, бірнеше Unix сияқты операциялық жүйелерде және кіріктірілген құрылғылар үшін бірнеше нақты уақыт операциялық жүйелерінде жұмыс істей алады. Мобильді қолданбалар үшін Windows және Mac құрылғыларында браузерлік плагиндер қолданылады, ал Android Java-ны ендірілген түрде қолдайды. Сондай-ақ, Java Card немесе Java Platform, Micro Edition сияқты, ресурстары шектеулі құрылғылар үшін арналған Java-ның кіші топтары да бар.
Іске асыру
Бағдарламалық жасақтама кросс-платформа деп есептелуі үшін, ол бірнеше компьютерлік архитектурада немесе операциялық жүйеде (ОЖ) жұмыс істеуі тиіс. Мұндай бағдарламалық жасақтаманы жасау көп уақытты алуы мүмкін, себебі әртүрлі операциялық жүйелерде әртүрлі қолданбалық бағдарламалау интерфейстері (API) болады. Бір операциялық жүйе үшін жазылған бағдарламалық қамтамасыз ету, сол операциялық жүйе қолдайтын барлық архитектураларда автоматты түрде жұмыс істемейді. Бағдарламалық жасақтама C немесе C++ сияқты кең таралған бағдарламалау тілінде жазылған болса да, ол осы тілді қолдайтын барлық операциялық жүйелерде немесе тіпті бір операциялық жүйенің әртүрлі нұсқаларында жұмыс істейді деп кепілдік берілмейді.
Веб-қосымшалар
Веб-қосымшалар әдетте кросс-платформа ретінде сипатталады, себебі олар идеалды жағдайда кез келген веб-браузерден қолжетімді: браузер – платформа. Веб-қосымшалар көбінесе клиент-сервер моделін қолданады, бірақ күрделілігі мен функционалдығы бойынша үлкен айырмашылықтарға ие. Құмарлықпен қалаған мүмкіндіктерді үйлесімділік қажеттілігімен келістіру қиын болуы мүмкін. Негізгі веб-қосымшалар барлық немесе көп бөлігін күйсіз серверде өңдейді және нәтижені клиенттік веб-браузерге жібереді. Пайдаланушының қосымшамен байланысы деректерді сұрау және сервердің жауаптарын қарапайым алмасудан тұрады. Бұл типтегі қосымшалар World Wide Web қосымшаларын дамытудың бастапқы кезеңдерінде кең таралған. Мұндай қосымшалар статикалық веб-беттерге қызмет көрсетумен ұқсас қарапайым транзакциялық модельді ұстанады. Бүгінде олар әлі де жиі кездеседі, әсіресе кросс-платформалық үйлесімділік пен қарапайымдық кеңейтілген функционалдыққа қарағанда маңыздырақ саналатын жағдайларда. Жетілдірілген веб-қосымшалардың айқын мысалдарына Gmail және Google Maps веб-интерфейсі жатады. Мұндай қосымшалар көбінесе танымал веб-браузерлердің соңғы нұсқаларында ғана қолжетімді қосымша мүмкіндіктерге тәуелді болады. Бұл мүмкіндіктерге Ajax, JavaScript, динамикалық HTML, SVG және басқа да бай веб-қосымшалардың құрамдас бөліктері кіреді.
Дизайн
Ыңғайлылық және функционалдылық арасындағы қарама-қайшы мүдделердің нәтижесінде көптеген жобалау стратегиялары пайда болды. Көптеген бағдарламалық жүйелер қабатталған архитектураны қолданады, онда платформаға тәуелді код жоғарғы және ең төменгі қабаттармен шектеледі.
Әдемі төмендеу
Жұмсақ деградация барлық пайдаланушылар мен платформаларға бірдей немесе ұқсас мүмкіндіктерді ұсынуға тырысады, бірақ мүмкіндіктері шектеулі браузерлер үшін осы мүмкіндіктерді ең қарапайым деңгейге дейін төмендетіп береді. Мысалы, егер сіз мүмкіндіктері шектеулі браузер арқылы Gmail-ге кірсеңіз, Gmail қарапайым режимге ауысып, функционалдығы азайғанмен, пайдалануға болады.
Көп кодтық базалар
Кейбір бағдарламалық қамтамасыз ету әртүрлі (аппараттық және операциялық жүйе) платформалар үшін бірдей мүмкіндіктерге ие жеке код базаларында қолдауға алынады. Бұл кодты қолдауға көбірек күш жұмсауды қажет етеді, бірақ платформаға қатысты кодтың көлемі көп болған жағдайда тиімді болуы мүмкін.
Бірыңғай кодтық база
Бұл стратегия бір код базасына негізделген, оны әртүрлі платформаларға арналған форматтарға құрастыруға болады. Бір техника – шартты компиляция. Осы техникамен барлық платформалар үшін ортақ код қайталанбайды. Тек белгілі бір платформаларға ғана қатысты код блоктары шартты етіледі, осылайша олар қажет болған жағдайда ғана интерпретацияланады немесе құрастырылады. Тағы бір техника – функционалдықты бөлу, ол браузерлер немесе операциялық жүйелер қолдамайтын функционалдықты өшіреді, бірақ пайдаланушыға толыққанды қолданбаны ұсынады. (Сондай-ақ: Қызыметтерді бөлу.) Бұл техника веб-дамытуда қолданылады, онда интерпретацияланған код (мысалы, сценарий тілдерінде) өзі жұмыс істейтін платформаға сұраныс жіберіп, әртүрлі код блоктарын шартты түрде орындай алады.
Үшінші тарап кітапханалары
Үшінші тараптық кітапханалар клиенттерді ажыратудың қиындықтарын бірыңғай, біріктірілген API артында жасыру арқылы платформааралық үйлесімділікті жеңілдетуге тырысады, бірақ бұл жеткізушіге тәуелділікті күшейтеді.
Реагистік веб-дизайн
Реагистік веб-дизайн (RWD) – сайттардың көрініс бөлігін әртүрлі құрылғыларда – ұялы телефондардан бастап үстел компьютерлерінің мониторларына дейін – оңтайлы көру үшін жасауға бағытталған веб-дизайн тәсілі. Бұл тәсілде мәтінді оқу және навигацияны жеңілдету үшін масштабтау, жылжыту және прокрутканың қажеті минималды болады. Бұл техникада құрылғыға арналған арнайы код қолданылмайды немесе аздап қолданылады.
Сынау
Платформааралық қосымшаларға көбірек интеграциялық тестілеу қажет. Кейбір веб-браузерлер бір машинаға әртүрлі нұсқаларды орнатуға тыйым салады. Көптеген платформаларды қолдау үшін түрлі тәсілдер пайдаланылады, бірақ олардың бәрі де сынақтан өткізуге және күтіп ұстауға көптеген қолмен еңбекті қажет ететін бағдарламалық құралдарды тудырады. Толық виртуализация сияқты техникалар кейде осы мәселенің шешімі ретінде қолданылады. Page Object Model сияқты құралдар платформааралық тесттерді жазуға мүмкіндік береді, сондықтан бір тест жағдайы қолданбаның бірнеше нұсқасын қамтиды. Егер әртүрлі нұсқалардың пайдаланушы интерфейстері ұқсас болса, олардың бәрін бір тест жағдайымен сынауға болады.
Дәстүрлі қолдану
Веб-қосымшалар күннен-күнге танымал болып келеді, бірақ көптеген компьютер пайдаланушылары әлі де клиент/веб-сервер архитектурасына сүйенбейтін дәстүрлі қолданба бағдарламаларын қолданады. Дәстүрлі және веб-қосымшалар арасындағы шекара әрқашан да анық болмайды. Веб және дәстүрлі қосымшалардың мүмкіндіктері, орнату тәсілдері және архитектуралары үштасады, соның салдарынан айырмашылық көңілсіз болып көрінеді. Дегенмен, бұл жеңілдетілген жіктеу – жиі қолданылатын және пайдалы мысал.
Бейне ойындар
Крос-платформалық немесе мультиплатформалық – бұл әртүрлі ойын консольдерінде шығарылған бейнеойындарға да қолданылатын термин. Крос-платформалық ойындардың мысалдары: Miner 2049er, Tomb Raider: Legend, FIFA сериясы, NHL сериясы және Minecraft. Олардың әрқайсысы Wii, PlayStation 3, Xbox 360, жеке компьютерлер және мобильді құрылғылар сияқты түрлі ойын платформаларында жарық көрді. Кейбір платформаларға бағдарлама жазу басқаларына қарағанда қиын, сондықтан бейнеойындарды бірдей деңгейге жеткізу үшін көбірек уақыт талап етіледі. Мұны өтеу үшін бейнеойынды алдымен бірнеше платформада, содан кейін басқаларында шығару мүмкін. Әдетте, мұндай жағдай жаңа ойын жүйесі шыққанда туындайды, себебі бейнеойын әзірлеушілері оның аппараттық және бағдарламалық қамтамасымен танысуы керек. Кейбір ойындар лицензиялық келісімдерге байланысты кросс-платформалық болмауы мүмкін, себебі әзірлеушілер мен бейнеойын консольдерін өндірушілер арасындағы келісімдер дамуды тек бір консольмен шектейді. Мысалы, Disney соңғы Nintendo және Sony ойын консольдерінде шығару мақсатымен ойын жасауы мүмкін. Егер Disney ойынды бірінші болып Sony-ге лицензияласа, онда ол ойынды тек Sony консолінде қысқа мерзімге немесе белгісіз мерзімге шығаруға міндетті болуы мүмкін.
Платформааралық ойын
Бірнеше әзірлеушілер әртүрлі платформаларды қолдана отырып, онлайн ойындар ойнаудың жолдарын жасады. Psyonix, Epic Games, Microsoft және Valve компаниялары Xbox 360 және PlayStation 3 ойыншыларының PC ойыншыларымен ойнауына мүмкіндік беретін технологияға ие, ал платформаны таңдау тұтынушылардың қалауына берілген. Компьютерлік және консольдік ойындар арасындағы осындай өзара әрекеттесуге алғаш рет Quake 3 ойыны мүмкіндік берді. Rocket League, Final Fantasy XIV, Street Fighter V, Killer Instinct, Paragon және Fable Fortune, сондай-ақ Windows 10-дағы, VR нұсқаларындағы, Pocket Edition және Xbox One-дағы Better Together жаңартуымен Minecraft сияқты ойындарда платформалар аралық онлайн ойын мүмкіндігі бар.
Бағдарламалау
Крос-платформалық бағдарламалау – бірнеше платформада жұмыс істеу үшін бағдарламалық құралды қасады жазу практикасы.
Қадамдар
Платформааралық қолданбаны жазудың әр түрлі жолдары бар. Бір тәсіл – әртүрлі бастапқы код ағаштарында бірдей бағдарламалық қамтамасыз етудің бірнеше нұсқасын жасау, яғни Microsoft Windows нұсқасының қолданба коды файлдарының бір жиынтығы, ал Macintosh нұсқасының басқа жиынтығы, ал FOSS *nix жүйесінде үшінші жиынтығы болуы мүмкін. Бұл түсінікті болғанымен, тек бір платформаға бағдарламалаумен салыстырғанда, үлкен командаға жалақы төлеу немесе өнімді баяу шығару қымбатқа түсуі мүмкін. Сондай-ақ, осылай көп қателерді іздеуге және түзетуге тура келеді. Тағы бір тәсіл – платформалар арасындағы айырмашылықтарды жасыратын бағдарламалық қамтамасыз етуді пайдалану. Бұл абстракция қабаты қолданбаны платформадан оқшаулайды. Мұндай қолданбалар платформаға тәуелді емес. JVM-де іске қосылатын қолданбалар осылай құрылады. Кейбір қолданбалар түпкілікті қолданбаны жасау үшін платформааралық бағдарламалаудың әртүрлі әдістерін біріктіреді. Мысалы, Firefox веб-браузері төменгі деңгейдегі кейбір компоненттерді құру үшін абстракцияны қолданады, платформаға тән мүмкіндіктерді (GUI сияқты) іске асыру үшін жеке бастапқы код тармақтарын, сондай-ақ бағдарламалық қамтамасыз етуді тасымалдауды жеңілдету үшін бірнеше скрипт тілін қолданады. Firefox браузерді кеңейту үшін XUL, CSS және JavaScript-ті қолданады, сонымен қатар классикалық Netscape стиліндегі браузер плагиндерін де қолдайды. Браузердің өзі XUL, CSS және JavaScript тілдерінде жазылған.
Қиындықтар
Платформааралық бағдарламалық жасақтаманы әзірлеуде көптеген қиындықтар бар. Платформааралық қолданбаларды сынау әлдеқайда күрделі болуы мүмкін, себебі әртүрлі платформалар сәл өзгеше мінез-құлықтарды немесе көзге көрінбейтін қателерді көрсетуі мүмкін. Бұл мәселе кейбір әзірлеушілерді платформааралық дамуды "бір рет жаз, барлық жерде түзету" деп әжуалауға итермеледі, бұл Sun Microsystems компаниясының "бір рет жаз, кез келген жерде іске қос" деген маркетингтік слоганының пародиязы. Әдетте, әзірлеушілер барлық платформаларда қол жетімді мүмкіндіктердің ең төменгі ортақ жиынтығын пайдаланумен шектеледі. Бұл қолданбаның өнімділігін төмендетуі немесе әзірлеушілерге әр платформаның ең жетілген мүмкіндіктерін пайдалануға мүмкіндік бермеуі мүмкін. Әртүрлі платформаларда әртүрлі пайдаланушы интерфейсі конвенциялары бар, олар платформааралық қолданбалар үшін әрқашан да оңтайлы бола бермейді. Мысалы, macOS және GNOME үшін жасалған қолданбалар ең маңызды батырманы терезенің немесе диалогтың оң жағына орналастыруы керек, ал Microsoft Windows және KDE керісінше талап етеді. Бұл айырмашылықтардың көпшілігі ұсақ болғанымен, осы конвенцияларды сақтамайтын платформааралық қолданба пайдаланушыға жат немесе қолайсыз сезім тудыруы мүмкін. Жылдам жұмыс істегенде, мұндай қарама-қарсы конвенциялар тіпті деректерді жоғалтуға әкелуі мүмкін, мысалы, өзгерістерді сақтау немесе жою туралы сұрау қоятын диалог терезесінде. Скрипт тілдері мен VM байт-коды әр қолданылған сайын жергілікті атқарылатын кодқа аударылуы керек, бұл өнімділіктің төмендеуіне себеп болады. Бұл мәселені уақытында компиляциялау сияқты әдістермен азайтуға болады, бірақ кейбір есептеу шығындары болмай қалуы мүмкін. Әртүрлі платформалар RPM және MSI сияқты жергілікті пакет форматтарын қолдануды талап етеді. InstallAnywhere сияқты көп платформалық орнату құралдары осы қажеттілікті қанағаттандырады. Платформааралық орындалу орталары платформааралық қауіпсіздік кемшіліктеріне ұшырауы мүмкін, бұл платформааралық зиянды бағдарламалар үшін қолайлы жағдай жасайды.