Programvareportabilitet - Software portability

Portabilitet i høyt nivå dataprogrammering er brukervennligheten til samme programvare i forskjellige miljøer. Forutsetningen for bærbarhet er den generelle abstraksjonen mellom applikasjonslogikken og systemgrensesnittene . Når programvare med samme funksjonalitet produseres for flere databehandlingsplattformer , er bærbarhet det viktigste problemet for reduksjon av utviklingskostnader.

Strategier for bærbarhet

Programvareportabilitet kan innebære:

  • Overføring av installerte programfiler til en annen datamaskin med i utgangspunktet samme arkitektur.
  • Installere et program på nytt fra distribusjonsfiler på en annen datamaskin med i utgangspunktet samme arkitektur.
  • Bygging av kjørbare programmer for forskjellige plattformer fra kildekoden ; dette er det som vanligvis forstås av " porting ".

Lignende systemer

Når operativsystemer av samme familie er installert på to datamaskiner med prosessorer med lignende instruksjonssett, er det ofte mulig å overføre filene som implementerer programfiler mellom dem.

I det enkleste tilfellet kan filen eller filene ganske enkelt kopieres fra en maskin til en annen. I mange tilfeller er programvaren imidlertid installert på en datamaskin på en måte som avhenger av detaljert maskinvare, programvare og oppsett, med enhetsdrivere for bestemte enheter, ved hjelp av installert operativsystem og støtte for programvarekomponenter og ved bruk av forskjellige stasjoner eller kataloger. .

I noen tilfeller er programvare, vanligvis beskrevet som " bærbar programvare ", spesielt designet for å kjøre på forskjellige datamaskiner med kompatible operativsystemer og prosessorer, uten maskinavhengig installasjon. Portering er ikke mer enn å overføre spesifiserte kataloger og innholdet. Programvare installert på bærbare masselagringsenheter som USB-pinner kan brukes på hvilken som helst kompatibel datamaskin ved å bare koble lagringsenheten til, og lagrer all konfigurasjonsinformasjon på den flyttbare enheten. Maskinvare- og programvarespesifikk informasjon lagres ofte i konfigurasjonsfiler på bestemte steder (f.eks. Registeret på maskiner som kjører Microsoft Windows ).

Programvare som ikke er bærbar i denne forstand, må overføres med modifikasjoner for å støtte miljøet på destinasjonsmaskinen.

Ulike prosessorer

Fra og med 2011 brukte de fleste stasjonære og bærbare datamaskiner mikroprosessorer som var kompatible med 32- og 64-biters x86 instruksjonssett. Mindre bærbare enheter bruker prosessorer med forskjellige og inkompatible instruksjonssett, for eksempel ARM . Forskjellen mellom større og mindre enheter er slik at detaljert programvaredrift er forskjellig; et program som er utformet for å vises passende på en stor skjerm, kan ikke bare porteres til en smarttelefon med lommestørrelse med en liten skjerm selv om funksjonaliteten er lik.

Nettapplikasjoner kreves for å være prosessoruavhengig, slik at bærbarhet kan oppnås ved å bruke webprogrammeringsteknikker og skrive JavaScript . Et slikt program kan kjøres i en vanlig nettleser. Slike nettapplikasjoner må av sikkerhetsgrunner ha begrenset kontroll over vertsdatamaskinen, spesielt når det gjelder lese- og skrivefiler. Ikke-web-programmer, installert på en datamaskin på vanlig måte, kan ha mer kontroll, og likevel oppnå systemportabilitet ved å koble til bærbare biblioteker som gir samme grensesnitt på forskjellige systemer.

Kildekodeportabilitet

Programvare kan kompileres og kobles fra kildekode for forskjellige operativsystemer og prosessorer hvis det er skrevet på et programmeringsspråk som støtter kompilering for plattformene. Dette er vanligvis en oppgave for programutviklerne; typiske brukere har verken tilgang til kildekoden eller de nødvendige ferdighetene.

I open source- miljøer som Linux er kildekoden tilgjengelig for alle. Tidligere ble kildekoden ofte distribuert i et standardisert format, og kunne bygges inn i kjørbar kode med et standard Make-verktøy for et bestemt system av moderat kunnskapsrike brukere hvis ingen feil oppstod under byggingen. Noen Linux-distribusjoner distribuerer programvare til brukere i kildeform. I disse tilfellene er det vanligvis ikke behov for detaljert tilpasning av programvaren for systemet; den distribueres på en måte som modifiserer kompileringsprosessen for å matche systemet .

Innsats for portkildekode

Selv med tilsynelatende bærbare språk som C og C ++ kan innsatsen for å porter kildekoden variere betydelig. Forfatterne av UNIX / 32V (1979) rapporterte at "[t] he (Bourne) shell [...] krevde den klart største konverteringsinnsatsen til ethvert antatt bærbart program, av den enkle grunn at det ikke er bærbart."

Noen ganger består innsatsen i å kompilere kildekoden på nytt, men noen ganger er det nødvendig å omskrive store deler av programvaren. Mange språkspesifikasjoner beskriver implementeringsdefinert oppførsel (f.eks. Å høyre skifte et signert heltall i C kan gjøre et logisk eller aritmetisk skifte). Operativsystemfunksjoner eller tredjepartsbiblioteker er kanskje ikke tilgjengelig på målsystemet. Noen funksjoner kan være tilgjengelige på et målsystem, men viser litt annen oppførsel (F.eks .: utime () mislykkes under Windows med EACCES, når det kreves en katalog). Selve programkoden kan også inneholde ikke-bærbare ting, som stiene til inkluderer filer. Stasjonsbokstaver og tilbakeslagstrek som stiavgrensning aksepteres ikke i alle operativsystemer. Implementering definerte ting som byteordre og størrelsen på en int kan også øke porteringsinnsatsen. I praksis kan det hevdes at språk, som C og C ++ , har WOCA ( skriv en gang, kompiler hvor som helst ).

Se også

Referanser

Kilder

  • Mooney (1997). "Å bringe bærbarhet til programvareprosessen" (PDF) . West Virginia University. Institutt for statistikk og informatikk. Arkivert fra originalen (PDF) 2008-07-25 . Hentet 2008-03-17 . Sitatjournal krever |journal= ( hjelp )
  • Garen (2007). "Portabilitet av programvare: veiealternativer, valg" . CPA Journal . 77 (11): 3.
  • Lehey (1995). "Portering av UNIX-programvare: Fra nedlasting til feilsøking" (PDF) . Hentet 27.05.2010 . Sitatjournal krever |journal= ( hjelp )