?????????????????????е??¤?????????塱?????
For alternative betydninger, se Program.
Denne artikel b?r genneml?ses af en person med fagkendskab for at sikre den faglige korrekthed.

Et stykke computersoftware eller kortere software ogs? kaldet programmel, udg?res af et eller flere computerprogrammer.[1] Et computerprogram eller kortere program er en samling processorinstruktioner[2] som s?tter computeren i stand til at l?se en bestemt opgave.[3] Dette er i kontrast til fysisk hardware, af hvilken systemet er bygget og faktisk udf?rer arbejdet. Indenfor datalogi og softwareudvikling omfatter software computerprogrammer, systemprogrammer, hj?lpeprogrammer, programbiblioteker og relaterede ikke-udf?rbare data, s?som online dokumentation eller digitale lagringsmedier. Computerhardware og software foruds?tter hinanden og ingen af dem kan realistisk set anvendes alene.
P? det laveste programmeringsniveau haves udf?rbar kode best?ende af maskinsprogsinstruktioner, der afvikles af en individuel processor — typisk en central processing unit (CPU) eller en graphics processing unit (GPU). Et maskinsprog best?r af grupper af bin?re v?rdier, som indikerer processorinstruktioner, der under afvikling ?ndrer computerens tilstand fra den forg?ende tilstand. Fx kan en instruktion ?ndre v?rdien lagret i et bestemt lagerposition i en computer — en effekt som ikke direkte kan observeres af en bruger. En instruktion kan ogs? udf?re et kald; fx en af de mange input- eller output-operationer, fx udl?se noget tekst p? en computer visningsenhed; hvilket viser en tilstand som er synlig for brugeren. Processoren afvikler instruktionerne i den r?kkef?lge de modtages, medmindre processoren instrueres i at "hoppe" til en anden instruktion, eller bliver interruptet af styresystemet. Pr. 2015 har de fleste PCere, smartphone enheder og servere processorer med flere processorkerner.
Det meste software skrives i h?jniveauprogrammeringssprog. H?jniveauprogrammeringssprog er lettere og mere effektive for programm?rer og softwareudviklere, fordi de er t?ttere p? naturlige sprog end maskinsprog.[4] H?jniveauprogrammeringssprog overs?ttes til maskinsprog ved at anvende en compiler eller en fortolker - eller en kombination af begge. Software kan ogs? skrives i et lavniveau assemblersprog, som har en st?rk korrespondance til computerens maskinsprogsinstruktioner og bliver oversat til maskinsprog ved at anvende en assembler.
Historie
[redigér | rediger kildetekst]En skitse (algoritme) for hvad som kunne have v?ret det f?rste stykke skrevne software, blev skrevet af Ada Lovelace i det 19. ?rhundrede, for den planlagte Analytical Engine.[5] Ada Lovelace lavede matematiske beviser for at vise hvordan maskinen ville beregne Bernoulli-tal.[5] Grundet beviserne og algoritmen, betragtes Ada Lovelace som den f?rste computerprogramm?r.[6][7]
Den f?rste teori om software — f?r skabelsen af computere som vi kender dem i dag — blev foresl?et af Alan Turing i hans 1935 artikel On Computable Numbers, with an Application to the Entscheidungsproblem (decision problem).
Alan Turing teori ledte senere til oprettelsen af det akademiske omr?de datalogi og softwareudvikling; begge omr?der udforsker software og dens tilblivelse.
F?r 1946 var software ikke endnu programmer lagret i digital hukommelse, som vi kender det i dag. De f?rste elektroniske computerenheder blev hardwired og om-hardwired for at "omprogrammere" dem.
Typer
[redigér | rediger kildetekst]P? stort set alle computerplatforme kan software grupperes i nogle f? brede kategorier.
Form?l eller dom?nebrug
[redigér | rediger kildetekst]Baseret p? m?let, kan computersoftware inddeles i:
- Applikationssoftware - som er software, der anvender computersystemet til at yde specielle funktioner eller yde underholdningsfunktioner udover de computerens grundl?ggende operationer. Der er mange forskellige typer af applikationssoftware, fordi arbejdsopgaveomr?det, en moderne computer kan yde er s? stor.
- Systemsoftware - som er software til at forvalte computerhardware opf?rsel, som at tilbyde grundl?ggende funktionaliteter, der er ?nsket af brugere, eller for andet software for at k?re ordentligt, hvis overhovedet. Systemsoftware bliver ogs? designet til at yde en platform til at k?re applikationssoftware[8] og inkluderer f?lgende:
- Styresystemer - som er vigtige samlinger af software til at h?ndtere resurser og yde f?lles services for andet software som k?rer "ovenp?" dem. Overv?gningsprogrammer, bootloadere, shells og skrivebordsmilj?er er dele af styresystemets kernekomponenter. I praksis er et styresystem udstyret med yderligere forinstalleret software (inklusiv applikationssoftware) s? en bruger har mulighed for at arbejde p? en computer, der kun har et styresystem.
- Device drivere - som betjener eller styrer en bestemt type enhed, som er koblet til en computer. Hver enhed beh?ver mindst én korresponderende device driver; fordi en computer typisk har minimum en input-enhed og mindst en output-enhed, beh?ver en computer typisk mere end en device driver.
- Hj?lpesoftware - hvilket er software designet til at assistere brugere med vedligeholdelse af deres computere.
- Skadelig software eller malware - hvilket er software, der er udviklet til at skade og forstyrre computere. Derfor er malware u?nsket. Malware er t?t associeret med computer-relaterede forbrydelser, selvom nogle skadelige programmer kan v?re designet til at v?re practical jokes.
Naturlig k?rsel eller k?rselsdom?ne
[redigér | rediger kildetekst]- Skrivebordsapplikationer s?som webbrowsere og Microsoft Office, s?vel som smartphone og tablet applikationer (kaldet "mobilapps"). (Der er en vinkling i nogle dele af softwareindustrien, i en vis udstr?kning, til at sammenflette skrivebordsapplikationer med mobilapps. Windows 8 og senere Ubuntu Touch, pr?vede at tillade den samme applikation layout gr?nseflade til at blive anvendt p? desktops, laptops og mobiler.)
- JavaScript-scripts er stykker af software som traditionelt bliver indlejret i websider, der k?res direkte indeni webbrowseren, n?r en webside hentes uden behovet for en webbrowserudvidelse. Software skrevet i andre programmeringssprog, kan ogs? k?res indeni webbrowser, hvis software er enten oversat til JavaScript eller hvis en webbrowserudvidelse, der underst?tter sproget er installeret; det mest almindelige eksempel p? det sidste er ActionScript-scripts, som underst?ttes af Adobe Flash-udvidelsen.
- Serversoftware, inklusiv:
- Webapplikationer, som typisk k?res p? en webserver og der som output dynamisk genererer websider til webbrowsere, ved at anvende fx PHP, Java, ASP.NET, eller selv JavaScript som k?res p? en server. In moderne tider omfatter disse typisk noget JavaScript som ogs? k?res i webbrowseren, i nogle tilf?lde k?res noget JavaScript p? serveren og noget i webbrowseren.
- Plugins og udvidelser er software som udvider eller modificerer funktionaliteten af andre stykker af software, og foruds?tter at softwaren anvendes for at fungere;
- Indlejret software opholder sig som firmware i indlejrede systemer, enheder dedikeret til en specielt brug eller nogle f? anvendelser s?som biler og fjernsyn (selvom nogle indlejrede enheder s?som tr?dl?se chipsets selv kan v?re del af en ordin?r, ikke-indlejret computersystem s?som en PC eller smartphone).[9] I indlejrede system sammenh?nge er der nogle gange ikke en klar forskel mellem systemsoftware og applikationssoftware. Men nogle indlejrede systemer k?rer indlejrede styresystemer og disse systemer bibeholder faktisk forskellen mellem systemsoftware og applikationssoftware (selvom der typisk kun er én fast applikation som altid k?rer).
- Mikrokode er en speciel, relativ uigennemskuelig type af indlejret software som instruerer processor selv hvordan maskinkode skal k?res, s? mikrokode er faktisk p? et lavere niveau end maskinkode.
Programmeringsv?rkt?jer
[redigér | rediger kildetekst]Programmeringsv?rkt?jer er ogs? software i form af programmer eller applikationer som softwareudviklere (ogs? kendt som programm?rer, kodere, hackere eller softwareingeni?rer) anvendes til at skabe, debug, vedligeholde (fx forbedre eller rette) eller anden support software.
Software skrives i et eller flere programmeringssprog; der eksisterer mange programmeringssprog, og hver har mindst en implementering, hver best?r af sit egne m?ngder af programmeringsv?rkt?jer. Disse programmeringsv?rkt?jer kan v?re relativt selvtilstr?kkelige programmer s?som overs?ttere, debuggere, fortolkere, linkere og teksteditorer, som kan kombineres sammen til at v?re et job; eller de kan udg?re et integreret softwareudviklingsmilj? (IDE), som kombinerer meget eller al funktionalitet af s?danne selvtilstr?kkelige programmeringsv?rkt?jer. IDEs kan g?re dette ved at kalde de relevante individuelle v?rkt?jer eller ved at genimplementere deres funktionalitet p? en ny m?de. En IDE kan g?re det lettere at g?re specifikke opgaver, s?som s?gning i filer i et bestemt programmeringsprojekt. Mange implementeringer af programmeringssprog tilbyder denne mulighed ved at anvende b?de individuelle programmeringsv?rkt?jer eller en IDE.
Emner
[redigér | rediger kildetekst]Arkitektur
[redigér | rediger kildetekst]Brugere ser ofte ting p? en anden m?de end programm?rer. Mennesker, som anvender moderne universelle computere (i mods?tning til indlejrede systemer, analoge computere og supercomputere), ser typisk tre softwarelag som udf?rer forskellige former for opgaver: platform, applikation og brugersoftware.
- Platformssoftware - platformen omfatter firmware, device drivere, et styresystem og typisk et grafisk brugergr?nseflade som, samlet, tillader en bruger at interagere med computeren og dens ydre enheder. Platformssoftware er ofte forindstalleret p? computer. P? en PC vil man typisk have muligheden for at ?ndre platformssoftware.
- Applikationssoftware - applikationssoftware eller applikationer er hvad de fleste mennesker t?nker p? n?r de t?nker p? software. Typiske eksempler omfatter kontorpakker og videospil. Applikationssoftware k?bes ofte separat fra computerhardwaren. Nogle gange er applikationer solgt med computer, men det ?ndrer ikke ved det faktum at applikationer k?rer som uafh?ngige applikationer. Applikationer er s?dvanligvis uafh?ngige programmer fra styresystemet, selvom de ofte skr?ddersys til specifikke platforme. De fleste brugere t?nker p? compilere, databaser og andet "systemsoftware" som applikationer.
- Brugerskreven software - slutbrugerudvikling skr?ddersyr systemer til at opfylde brugernes specifikke behov. Brugersoftware omfatter regnearkskabeloner og tekstbehandlingsskabeloner. Selv email-filtre er en form for brugersoftware. Brugere skaber selv denne software og glemmer ofte hvor vigtig det er. Afh?ngig af hvor kompetent brugerskreven software er blevet integreret i standard applikationspakker, vil mange brugere ikke v?re opm?rksom p? hvad der den oprindelige applikationspakker og hvad som er blevet tilf?jet af fx kollegaer, superbrugere eller it-folk.
K?rsel
[redigér | rediger kildetekst]
Computersoftware skal "l?gges" ind i computerens datalager (s?som harddisken eller hukommelsen). N?r softwaren én gang er lagt p? datalageret, er computeren i stand til at k?re eller udf?re softwaren. Dette omfatter at mediere processorinstruktioner fra applikationssoftware, gennem systemsoftware, til hardwaren som i sidste ende modtager instruktioner som maskinkode.
Kvalitet og p?lidelighed
[redigér | rediger kildetekst]Softwarekvalitet er meget vigtig, specielt for kommerciel software og systemsoftware som fx Microsoft Office, Microsoft Windows og Linux. Hvis softwaren er fejlbeh?ftet, kan den for?rsage at en brugers arbejde mistes (slettes), software computernedbrud og have andre utilsigtede virkninger. De fleste af s?danne fejl findes via "softwareaflusning", og denne proces udf?res under alfatestning og betatestning.
If?lge USAs CISA-chef Jen Easterly er d?rlig softwarekvalitet skyld i verdens cybersikkerhedsproblemer.[10][11] CISA anbefaler at softwareudviklere skriver deres programmer i hukommelsessikre programmeringssprog som fx Rust, Python, C#, Go, Swift eller Java - is?r Rust fremh?ves som et godt hukommelsessikkert programmeringssprog.[12][13] USAs DARPA foresl?r at konvertere C-kode til Rust-kode via maskinl?ring. Projektet kaldes TRanslating All C TO Rust - kort TRACTOR.[14]
Licens
[redigér | rediger kildetekst]
En softwarenslicens giver brugeren retten til at anvende softwaren i et licenseret milj? - og i tilf?ldet af frie software licenser, har man ogs? andre rettigheder som fx at lave kopier.
Propriet?r software kan inddeles i to typer:
- freeware, hvilket omfatter kategorien af "fri pr?ve" software eller "freemium" software (tidligere blev termen shareware ofte anvendt for fri pr?ve/freemium software). Som navnet indikerer, kan freeware anvendes frit - og i tilf?ldet fri pr?ve eller freemium software, er det nogle gange kun sandt for en begr?nset tidsperiode - eller med begr?nset funktionalitet.
- software tilg?ngelig for et gebyr, ofte ukorrekt navngivet "kommerciel software", kan kun legalt anvendes ved k?b af en licens.
Open source software (det vil sige at kildekoden er frit tilg?ngelig) kommer i minimum to varianter:
- Propriet?r software - hvor kildekoden frit er tilg?ngelig, men man m? ikke frit genbruge eller ?ndre kildekoden.
- Med Free/Libre and Open Source Software - der giver modtageren rettigheder til at modificere og redistribuere softwaren. Fx:
Patenter
[redigér | rediger kildetekst]
Softwarepatenters form?l, er ligesom andre typer af patenter, teoretisk t?nkt til at give opfinderen en eksklusiv, tidsbegr?nset licens for en detaljeret idé (fx en algoritme) p? hvordan noget implementeres et stykke software. Idéer for brugbare ting som software kan g?re, og brugerkrav, er ikke t?nkt til at v?re patentérbare og konkrete implementeringer (fx den aktuelle softwarepakke der implementerer patentet) er heller ikke ment til at v?re patentérbare - det sidste tilf?lde er allerede typisk automatisk d?kket af copyright. S? softwarepatenter er ment til at d?kke omr?det mellem krav og konkrete implementeringer.
Design og implementering
[redigér | rediger kildetekst]
Design og implementering af software er afh?ngig af kompleksiteten af softwaren. Fx, design og skabelse af Microsoft Word tog meget l?ngere tid end tiden for design og udvikling af Microsoft Notepad, fordi det sidstn?vnte har meget simplere funktionalitet.
Software er s?dvandligvis designet og skabt (ogs? kendt som kodet/skrevet/programmeret) i integrerede softwareudviklingsmilj?er (IDE) som fx Eclipse, IntelliJ og Microsoft Visual Studio, som kan simplificere processen og compilere softwaren (hvis muligt). Som tidligere n?vnt, skabes software typisk ovenp? eksisterende software og application programming interface (API) som det underliggende software tilbyder som fx GTK+, JavaBeans eller Swing. Biblioteker (APIs) kan kategoriseres efter deres form?l. Fx, Spring Framework anvendes til at implementere enterprise applikationer, Windows Forms biblioteket anvendes til at designe grafisk brugergr?nseflade (GUI) applikationer som fx Microsoft Word - og Windows Communication Foundation anvendes til at designe webservices. N?r et program er designet, st?tter det sig APIen. Fx, en Microsoft Windows skrivebordsapplikation kan kalde API-funktioner i .NET Windows Forms library som fx Form1.Close() og Form1.Show()[15] til at lukke eller ?bne applikationen. Uden disse APIer, skal programm?ren selv programmere alle disse funktionaliteter. Selskaber som fx Oracle og Microsoft tilbyder deres egne APIer s? mange applikationer bliver skrevet ved at anvende deres programbiblioteker som typisk har talrige APIer i sig.
Datastrukturer s?som hashtabeller, tabeller og bin?re s?getr?er og algoritmer s?som quicksort, kan v?re nyttige ved skabelsen af software.
Computersoftware har specielle ?konomiske kendetegn som g?r dets design, skabelse og distribution forskellig fra de fleste andre ?konomiske varer.[16][17]
En person som skaber software kaldes for en programm?r, softwareingeni?r eller softwareudvikler, termer som alle har omtrent samme betydning. Mere uformelle termer for programm?rer eksisterer ogs? s?som "koder" og "hacker" – selvom brug af sidstn?vnte term kan skabe forvirring, fordi det oftere anvendes til at betyde nogen som illegalt bryder ind i computersystemer.
Industri og organisationer
[redigér | rediger kildetekst]Der er en stor diversitet af softwarefirmaer og programm?rer i verden og de udg?r en softwareindustri. Software kan faktisk v?re en meget profitabel industri: Bill Gates, medgrundl?ggeren af Microsoft var den rigeste person i verden i 2009, mest grundet hans ejerskab af mange aktier i Microsoft, selskabet som er ansvarlig for Microsoft Windows og Microsoft Office softwareprodukterne - begge markedsledende i deres respektive produktkategorier.
Almennyttige softwareorganisationer omfatter Free Software Foundation, GNU Project og Mozilla Foundation. Softwarestandard organisationer som fx W3C, IETF udvikler anbefalede softwarestandarder s?som XML, HTTP og HTML, s? software kan have interoperabilitet ved at underst?tte disse standarder.
Andre velkendte store softwareselskaber omfatter Facebook, Instagram, Apple, Google, IBM, HCL Technologies, Oracle, Novell, SAP, Symantec, Adobe Systems og Amazon, mens sm? selskaber ofte yder innovation.
Se ogs?
[redigér | rediger kildetekst]S?sterprojekter med yderligere information: |
Kilder/referencer
[redigér | rediger kildetekst]- ^ "ordnet.dk: software". Arkiveret fra originalen 16. februar 2021. Hentet 26. maj 2019.
- ^ "l?s mere hos Copenhagen Software". Arkiveret fra originalen 16. marts 2021. Hentet 11. marts 2021.
- ^ "ordnet.dk: computerprogram". Arkiveret fra originalen 16. februar 2021. Hentet 26. maj 2019.
- ^ "Compiler construction". Arkiveret fra originalen 2. november 2013. Hentet 24. maj 2019.
- ^ a b Evans 2018, s. 21.
- ^ Fuegi, J.; Francis, J. (2003). "Lovelace & Babbage and the creation of the 1843 'notes'". Annals of the History of Computing. 25 (4): 16-26. doi:10.1109/MAHC.2003.1253887. ISSN 1058-6180.
- ^ "Ada Lovelace honoured by Google doodle". The Guardian. 10. december 2012. Arkiveret fra originalen 25. juni 2013. Hentet 25. november 2018.
- ^ "System Software". The University of Mississippi. Arkiveret fra originalen 30. maj 2001. Hentet 24. maj 2019.
- ^ "Embedded Software—Technologies and Trends". IEEE Computer Society. maj-juni 2009. Arkiveret fra originalen 28. oktober 2013. Hentet 6. november 2013.
{{cite web}}
: CS1-vedligeholdelse: Dato-format (link) - ^ 2025-08-06, version2.dk: USA’s cyberchef: D?rlige software-udviklere er den st?rste trussel mod sikkerheden. CISA-chefen Jen Easterly skoser teknologileverand?rer for at levere produkter med indbyggede sikkerhedsproblemer, der ?bner d?rene for cyberangreb, backup Citat: "...?Vi har ikke et cybersikkerhedsproblem – vi har et softwarekvalitetsproblem. Vi har ikke brug for flere sikkerhedsprodukter – vi har brug for mere sikre produkter,? sagde chefen for den amerikanske cybersikkerhedsmyndighed CISA (Cybersecurity and Infrastructure Security Agency) Jen Easterly p? en konference onsdag if?lge The Register. ?Sandheden er: Teknologileverand?rer er de personer, der bygger problemer? ind i deres produkter, som derefter ??bner d?rene for skurke, s? de kan angribe deres ofre.?..."
- ^ 2025-08-06, theregister.com: CISA boss: Makers of insecure software are the real cyber villains. Write better code, urges Jen Easterly. And while you're at it, give crime gangs horrible names like 'Evil Ferret', backup
- ^ 28 Jun 2024, theregister.com: CISA looked at C/C++ projects and found a lot of C/C++ code. Wanna redo any of it in Rust? So, so many lines of memory-unsafe routines in crucial open source, and unsafe dependencies, backup Citat: "...Memory-safe languages, like C#, Go, Java, Python, Rust, and Swift, handle memory management for the developer, reducing the opportunity to make memory errors...The 2015 stable release of Rust, a language with strong memory-safety guarantees, gave tech firms a non-aligned systems language they could use to avoid the problems with memory-unsafe code. The competitive implications of adopting languages with strong corporate associations, like C# (Microsoft), Go (Google), Swift (Apple), or Java (Oracle) may have helped make Rust more appealing. But it took a few years for Rust to mature and catch on..."
- ^ June 26, 2024, cisa.gov: Exploring Memory Safety in Critical Open Source Projects, backup Citat: "...We encourage others to build on this analysis to further expand our collective understanding of memory-unsafety risk in OSS, evaluate approaches—such as targeted rewrites of critical components in memory-safe languages—to reducing this risk, and to continue efforts to drive risk-reducing action by software manufacturers. For those considering further investment in memory safe programming practices, we recommend two references: The Case for Memory Safe Roadmaps and the December 2023 report on memory safety by the Technical Advisory Council of CISA’s Cybersecurity Advisory Committee.37..."
- ^ 3 Aug 2024, theregister.com: DARPA suggests turning old C code automatically into Rust – using AI, of course. Who wants to make a TRACTOR pull request?, backup Citat: "...The term stands for TRanslating All C TO Rust. It's a DARPA project that aims to develop machine-learning tools that can automate the conversion of legacy C code into Rust. The reason to do so is memory safety. Memory safety bugs, such buffer overflows, account for the majority of major vulnerabilities in large codebases. And DARPA's hope is that AI models can help with the programming language translation, in order to make software more secure..."I think all languages are about trade-offs, but certainly at the kernel-level it makes sense to move part of the code to Rust," he said..."
- ^ "MSDN Library". Arkiveret fra originalen 11. juni 2010. Hentet 14 juni 2010.
- ^ v. Engelhardt, Sebastian (2008). "The Economic Properties of Software". Jena Economic Research Papers. 2 (2008-045). Arkiveret fra originalen 5. januar 2016. Hentet 24. maj 2019.
- ^ Kaminsky, Dan (1999). "Why Open Source Is The Optimum Economic Paradigm for Software". Arkiveret fra originalen 22. maj 2012. Hentet 24. maj 2019.
- Evans, Claire L. (2018). Broad Band: The Untold Story of the Women Who Made the Internet. New York: Portfolio/Penguin. ISBN 9780735211759.
Eksterne henvisninger
[redigér | rediger kildetekst]- Computerprogram p? Curlie (som bygger videre p? Open Directory Project)