реклама
Току-що изтеглете актуализирана актуализирана версия на любимото ви приложение с отворен код. Всичко работи добре и го използвате на другите си устройства - така че е време да го разгърнете и на тези.
Освен, че лъскавият ви нов лаптоп за Linux не е съвместим с вашия инсталационен пакет за Windows. Какво ще кажете за вашия таблет Android? iPhone? PS4? Защо не можете просто да вземете този софтуер и да го използвате, където искате? Нека разгледаме някои различни бариери пред мечтата „купувай веднъж, бягай навсякъде“.
Разработка на софтуер и архитектура на ОС
Разбирането защо софтуерът не работи в операционните системи изисква малко (само малко, обещавам) знания за това как се прави софтуер.
Процесът на разработка на софтуер
В много основен поток за разработка на софтуер за десктоп, сървър и мобилен телефон (т.е. не уеб Програмиране vs. Уеб разработка: каква е разликата?Може да мислите, че приложните програмисти и уеб разработчиците вършат същата работа, но това е далеч от истината. Ето основните разлики между програмистите и уеб разработчиците. Прочетете още ), програмист ще:
- Въведете някои код в един или повече файлове.
- Compile кода в нещо, което компютърът може да изпълни.
- Тест за да се уверите, че програмата работи както се очаква.
- Пакетиране и разпространение / внедряване софтуера.
Тук ни касае комбинация от първата и втората стъпка. Процесът на компилиране софтуер или превръщането му от код в тези и нули, които компютърът разбира (машинен език) е сложно. Няма да влезем в нея подробно, но е полезно да разберем на високо ниво какво се случва.
OS Архитектура
Важен момент за разбиране е, че операционната система не е едно цяло. По-скоро е съставен от слоеве софтуер.
Ядра на операционната система
Операционна система ядро отговаря за комуникацията с хардуера на компютъра. Софтуерът съобщава своите команди на ядрото, което от своя страна издава команди на хардуера за (например) четене на файл от твърдия диск или изготвяне на прозорец на екрана. По същество той координира цялата информация (независимо дали е съхранена информация, изчисления или потребителски вход) между хардуер и различни части софтуер. Ядрото предоставя цялата тази функционалност достъпна за софтуер чрез системни повиквания.
Във всяко ядро на операционната система ще се изпълняват системни обаждания по различен начин, по отношение на това кои са наличните, как се наричат или какви опции предприемат. В резултат на това софтуерът трябва да отчита системните обаждания, поддържани от ядрото на всяка ОС, към която е насочен. Системното обаждане, което използвате за изпращане на данни до графичния процесор в Linux, може да има различно име, списък с информация, която трябва да предоставите или и двете в Windows. Точното обаждане може дори да не е там.
Системни библиотеки
В много случаи софтуерът не се обажда директно към ядрото. Вместо това се обажда на системни библиотекиили колекции от основни функции. Библиотеките съществуват така (например) всяка програма, която запаметява файлове на твърдия диск, не е необходимо да пише функция за това. Вместо това, просто връзки към системна библиотека и използва съществуваща функция. GLibC библиотеката за Linux е отличен пример, както и .DLL файловете в Win32 API или съдържанието на директория на Mac / System / Library на Mac Как да получите достъп до папката на библиотеката OS X и защо е удобенПовечето папки на библиотеката на OS X са най-добре оставени сами, но е полезно да знаете пътя си в и около Потребителската библиотека. Прочетете още .
Системните библиотеки действат като вид преводач между приложения и ядрото за рутинни задачи. Заявления правят функционални обаждания към тези библиотеки, които обработват много от детайлите от ниско ниво. Те могат също така да правят системни обаждания към ядрото за удобство. Както може би се досещате, това означава, че тези библиотеки са написани за определено ядро и следователно не могат да се използват в операционни системи с различни ядра.
Заглавки за изпълнение на операционната система
Последното препятствие пред универсалния софтуер е форматът на изпълними файлове за операционните системи. ОС очаква файловете, които стартира, да следват конкретен двоичен формат на файла Всичко, което трябва да знаете за форматите на файловете и техните свойстваНие използваме взаимозаменяемия файл с думи: музика, изображение, електронна таблица, слайдшоу и т.н. Но какво прави един файл "файл", така или иначе? Нека да опитаме и да разберем тази основна част от изчисленията. Прочетете още . Например файловете за изпълним и свързващ формат (ELF), които работят на операционни системи като Linux и FreeBSD трябва да посочват определени свойства на файла в определени байтове, както е показано по-долу образ.
Най- двоичен интерфейс за приложение (ABI) показаната способност е от особено значение. Комбинация от обаждания, налични от процесор, ядро и системни библиотеки, ABI е подобна на един интерфейс за приложно програмиране (API) тъй като тя определя как две програми общуват помежду си. Но API е нещо, използвано от програмисти (хора) в изходния код, за да посочи две части от софтуера Трябва да разговарят помежду си. ABI е това, което всъщност им позволява да го направят, след като софтуерът се компилира и стартира. Всяка операционна система реализира определен ABI, който може или не може да се променя между версиите на същата тази ОС.
По принцип операционните системи прилагат свой собствен ABI, определен от комбинация от типа процесор, ядрото и всички стандартни системни библиотеки. Но понякога една ОС ще реализира повече от една. FreeBSD има поддръжка за двоични файлове на Linux, например, защото предоставя Linux ABI като добавка към ядрото FreeBSD (вместо ядрото на Linux). Това е различно от програми за виртуализация Какво е виртуална машина? Всичко, което трябва да знаетеВиртуалните машини ви позволяват да стартирате други операционни системи на вашия текущ компютър. Ето какво трябва да знаете за тях. Прочетете още като VMWare или VirtualBox, които използват софтуер за симулиране на цяла машина (хардуер и всички). В резултат този тип ABI-съвместимост е по-бърз, но много повече усилия за поддържане. Ето защо е рядко, въпреки че Наскоро Microsoft видя стойността Ubuntu вече е наличен в Windows StoreСега Insiders могат да изтеглят и инсталират Ubuntu на Windows 10. Това обединява Linux и Windows в един нечестен съюз, който малцина някога са предполагали, че ще живеят достатъчно дълго, за да станат свидетели. Прочетете още при правенето му.
Изключение: Интерпретиран софтуер
Въз основа на горното научихме, че разработчиците пишат софтуер за един и само един тип целева система. Освен когато не Има много приложения, които можете да изтеглите и стартирате на Mac, след това да копирате и стартирате в Windows, а може би дори да копирате отново и да стартирате на Linux без проблеми. Как е възможно?
Легнах ли до сега?
Както се оказва, има категория софтуер, който изглежда на повърхността, сякаш просто „работи навсякъде“. Можете да го изтеглите и стартирате на всеки поддържана платформа - ключовата дума се „поддържа“. Всъщност вие изтегляте изходния код за приложението, докато друго приложение (най- преводач) е нещо като стартиране на изходния код директно в реално време. Това е нещо прекалено опростяване, така че нека разгледаме как точно става това с няколко езика.
Ява
Когато Java пусна за първи път, обещанието беше (буквално) „напиши веднъж, пусни навсякъде“. Идеята беше да се създаде приложения чрез използване на Java функции за запазване на файлове, извършване на изчисления или създаване на приложение прозорец. Тогава Java Runtime Enviornment (JRE) за всяка поддържана компютърна платформа ще стартира кода и ще ги преведе в родни функции на ОС. Номерът на Java е, че тя не се изпълнява „директно“ в операционната система. Той работи в част от JRE, наречена на Java виртуална машина и това е, което работи в операционната система.
Чрез поставяне на този допълнителен софтуерен слой между приложението и ОС, Java ви позволява да се съсредоточите върху набор от функции, които са еднакви в операционните системи. Казвате на Java какво искате да направите и оставяте JVM за вашата система да се тревожи как всъщност да го направи. Снимката по-долу показва това в действие, къде Софтуерната програма на Java Desktop на JIDE Software показва същото приложение за Mac (отгоре), Windows (средна лява), „чиста Java“ (средна дясна) и Linux (отдолу).
Java програмите не се „компилират“ точно в реално време. По-скоро Java компилаторът ще ги превърне в „байт код“. Можете да мислите за байткод като полупечена програма. Когато програмистът пусне приложението, то е съставено толкова, колкото може да бъде, без да знае на коя ОС ще работи. Когато всъщност го стартирате, JVM ще го „изпече останалото“, за да пасне на функциите, специфични на хост операционната система.
Питон
Популярен тълкуван език е Питон 5 причини, поради които програмирането на Python не е безполезноPython - или го обичаш, или го мразиш. Може дори да се люлеете от единия край до другия като махало. Независимо от това, Python е език, за който е трудно да бъдем амбивалентни. Прочетете още . Когато стартирате скрипт Python, преводачът Python ще преведе кода в инструкции за ОС. Той може да функционира подобно на Java: когато „импортирате“ код извън приложението си, той се компилира да байтодира първия път, когато се стартира. Тогава интерпретаторът ще знае дали при следващите тиражи оригиналният код се е променил, в този момент той ще го компилира отново в нов байт код.
Страхотен страничен продукт от това „по заявка“ работи е, че можете да използвате интерпретатора за разработване на вашите скриптове интерактивно. Като просто напишете „python“ в командния ред, ще стартирате интерпретатора и можете да стартирате код и да видите резултатите веднага.
Това означава, че разработчиците могат да играят наоколо и да оправят нещата „на живо“. След това, след като ред код прави това, което искат, копирайте го и го поставете скриптов файл (който е много по-ефективен от цикъла „тест на компилация-тест“, който трябва да правят неинтерпретираните езикови програмисти).
Дори когато софтуерът е един и същ, вероятно не е
За съжаление на потребителите, технологичната индустрия не е разработила наистина „универсален“ формат. И може никога да не го направи. Въвеждането на тези видове стандарти често води до решение за „най-малко общ знаменател“ с отстъпки в интерес на одобрението на всички.
Какво мислиш? Бихте ли предпочели универсално съвместим софтуер, дори ако това означаваше, че не е толкова добър? Или сте добре с операционната система, която използвате, и нямате интерес към приложенията от други платформи? Уведомете ни по-долу в коментарите!
Образни кредити: Masterchief_Productions / Shutterstock
Aaron е дълбоко в технологията като бизнес анализатор и мениджър на проекти, продължава вече петнадесет години и е лоялен потребител на Ubuntu почти толкова дълго време (от Breezy Badger). Интересите му включват отворен код, приложения за малък бизнес, интеграция на Linux и Android и компютри в обикновен текстов режим.