Källkod
Programutförande |
---|
Allmänna begrepp |
Typer av kod |
Sammanställningsstrategier |
Anmärkningsvärda körtider |
|
Anmärkningsvärda kompilatorer och verktygskedjor |
|
Inom datorer är källkod , eller helt enkelt kod , vilken samling text som helst, med eller utan kommentarer , skriven med ett programmeringsspråk som kan läsas av människor , vanligtvis som vanlig text . Källkoden för ett program är speciellt utformad för att underlätta arbetet för datorprogrammerare, som specificerar de åtgärder som ska utföras av en dator mestadels genom att skriva källkod.
Källkoden omvandlas ofta av en assembler eller kompilator till binär maskinkod som kan exekveras av datorn. Maskinkoden är då tillgänglig för exekvering vid ett senare tillfälle.
De flesta tillämpningsprogram distribueras i en form som endast innehåller körbara filer. Om källkoden inkluderades skulle det vara användbart för en användare , programmerare eller en systemadministratör , av vilka vem som helst skulle vilja studera eller modifiera programmet.
Alternativt, beroende på vilken teknik som används, kan källkoden tolkas och exekveras direkt.
Definitioner
Richard Stallmans definition, formulerad i hans seminallicens från 1989 , föreslog källkod som vilken form som helst i vilken programvara modifieras:
"Källkoden" för ett verk betyder den föredragna formen av verket för att göra ändringar i det.
Vissa klassiska källor definierar källkod som textformen för programmeringsspråk, till exempel:
Källkod (även kallad källkod eller kod) är den version av programvara som den ursprungligen skrevs (dvs. skrevs in i en dator) av en människa i vanlig text (dvs. läsbara alfanumeriska tecken ) .
Detta svarar på det faktum att när programöversättning först dök upp var den samtida formen av mjukvaruproduktion textuella programmeringsspråk, så källkod var textkod medan maskinkod var målkod. Men när programmeringspipelines började innehålla mer mellanliggande former, vissa på språk som JavaScript som kunde vara antingen käll- eller mål, slutade textkod att vara synonymt med källkod.
Stallmans definition överväger alltså JavaScript och HTMLs källmålsambivalens, samt överväger möjliga framtida former av mjukvaruproduktion, som visuella programmeringsspråk eller datauppsättningar i Machine Learning.
Andra bredare tolkningar anser dock att källkoden inkluderar maskinkoden tillsammans med alla högnivåspråk som producerar den, denna definition upphäver den ursprungliga maskin/textskillnaden genom att betrakta varje steg i programöversättningen som källkod.
För tydlighetens skull avses med "källkod" varje fullständigt körbar beskrivning av ett mjukvarusystem. Det tolkas därför så att det inkluderar maskinkod, språk på mycket hög nivå och exekverbara grafiska representationer av system.
Detta tillvägagångssätt möjliggör ett mycket mer flexibelt tillvägagångssätt för systemanalys, utan kravet på designer att samarbeta genom att publicera ett bekvämt formulär för förståelse och modifiering. Det kan också tillämpas på scenarier där en designer inte behövs, som DNA. Denna form av analys överväger dock inte en dyrare maskin-till-maskin kodanalys än människa-till-maskin kodanalys.
Historia
De tidigaste programmen för datorer med lagrade program matades in binärt via datorns frontpanelomkopplare . Detta första generationens programmeringsspråk hade ingen skillnad mellan källkod och maskinkod .
När IBM först erbjöd programvara för att fungera med sin maskin, tillhandahölls källkoden utan extra kostnad. På den tiden ingick kostnaden för att utveckla och stödja mjukvara i hårdvarans pris. I decennier distribuerade IBM källkod med sina programvarulicenser fram till 1983.
De flesta tidiga datortidningar publicerade källkod som typprogram .
Ibland publiceras hela källkoden till ett stort program som en inbunden bok, såsom Computers and Typesetting , vol. B: TeX, The Program av Donald Knuth , PGP Source Code and Internals av Philip Zimmermann , PC SpeedScript av Randy Thompson och µC/OS, The Real-Time Kernel av Jean Labrosse.
Organisation
Källkoden som utgör ett program finns vanligtvis i en eller flera textfiler lagrade på en dators hårddisk ; vanligtvis är dessa filer noggrant arrangerade i ett katalogträd , känt som ett källträd . Källkod kan också lagras i en databas (som är vanligt för lagrade procedurer ) eller någon annanstans.
Källkoden för en viss mjukvara kan finnas i en enda fil eller flera filer. Även om övningen är ovanlig, kan ett programs källkod skrivas på olika programmeringsspråk. Till exempel kan ett program som huvudsakligen är skrivet i programmeringsspråket C ha delar skrivna i assemblerspråk för optimeringsändamål. Det är också möjligt för vissa komponenter i en mjukvara att skrivas och kompileras separat, i ett godtyckligt programmeringsspråk, och senare integreras i programvaran med hjälp av en teknik som kallas bibliotekslänkning . I vissa språk, som Java , kan detta göras vid körning (varje klass kompileras till en separat fil som länkas av tolken vid körning).
Ytterligare en annan metod är att göra huvudprogrammet till en tolk för ett programmeringsspråk, antingen designat specifikt för applikationen i fråga eller allmänt och sedan skriva huvuddelen av den faktiska användarfunktionaliteten som makron eller andra former av tillägg på detta språk , ett tillvägagångssätt som till exempel tagits av GNU Emacs textredigerare.
Kodbasen för ett datorprogrammeringsprojekt är den större samlingen av all källkod för alla datorprogram som utgör projektet. Det har blivit vanligt att underhålla kodbaser i versionskontrollsystem . Måttligt komplex programvara kräver vanligtvis sammanställning eller sammansättning av flera, ibland dussintals eller kanske till och med hundratals, olika källkodsfiler. I dessa fall ingår instruktioner för kompilering, till exempel en Makefile , med källkoden. Dessa beskriver programmeringsförhållandena mellan källkodsfilerna och innehåller information om hur de ska kompileras.
Syften
Källkod används främst som indata till processen som producerar ett körbart program (dvs. det kompileras eller tolkas ). Det används också som en metod för att kommunicera algoritmer mellan människor (t.ex. kodavsnitt i böcker).
Datorprogrammerare tycker ofta att det är användbart att granska befintlig källkod för att lära sig om programmeringstekniker. Att dela källkod mellan utvecklare nämns ofta som en bidragande faktor till att deras programmeringskunskaper utvecklas. Vissa människor anser att källkoden är ett uttrycksfullt konstnärligt medium .
Att portera programvara till andra datorplattformar är vanligtvis oöverkomligt svårt utan källkod. Utan källkoden för en viss mjukvara är portabilitet i allmänhet beräkningsmässigt dyrt. Möjliga porteringsalternativ inkluderar binär översättning och emulering av den ursprungliga plattformen.
Dekompilering av ett körbart program kan användas för att generera källkod, antingen i assembly-kod eller på ett högnivåspråk .
Programmerare anpassar ofta källkoden från en mjukvara för att användas i andra projekt, ett koncept som kallas återanvändbarhet av programvara .
Legala aspekter
Situationen varierar över hela världen, men i USA före 1974 var programvara och dess källkod inte upphovsrättsskyddad och därför alltid allmän egendomsmjukvara .
1974 beslutade den amerikanska kommissionen för ny teknisk användning av upphovsrättsskyddade verk (CONTU) att "datorprogram, i den mån de förkroppsligar en författares ursprungliga skapelse, är upphovsrättsligt föremål".
1983 i USA:s rättsfall Apple v. Franklin fastställdes att samma sak gällde objektkod ; och att upphovsrättslagen gav datorprogram upphovsrättslig status för litterära verk.
År 1999, i USA:s domstolsfall Bernstein mot USA, slogs det vidare fast att källkoden kunde anses vara en konstitutionellt skyddad form av yttrandefrihet . Förespråkare av yttrandefrihet hävdade att eftersom källkoden förmedlar information till programmerare, är skriven på ett språk och kan användas för att dela humor och andra konstnärliga sysslor, är det en skyddad form av kommunikation.
Licensiering
Upphovsrätt [åååå] [upphovsrättsinnehavarens namn]
Licensierad under Apache-licensen, version 2.0 ("Licensen"); du får inte använda den här filen förutom i enlighet med licensen. Du kan få en kopia av licensen på
- http://www.apache.org/licenses/LICENSE-2.0
Såvida det inte krävs av tillämplig lag eller skriftligen överenskommits, distribueras programvara som distribueras under licensen "I BEFINTLIGT SKICK", UTAN GARANTIER ELLER VILLKOR AV NÅGOT SLAG, varken uttryckliga eller underförstådda. Se Licensen för det specifika språket som styr behörigheter och begränsningar under Licensen.
En författare till ett icke-trivialt verk som programvara, har flera exklusiva rättigheter , bland dem upphovsrätten till källkoden och objektkoden . Upphovsmannen har rätt och möjlighet att ge kunder och användare av sin programvara några av sina exklusiva rättigheter i form av mjukvarulicenser . Programvara, och dess medföljande källkod, kan associeras med flera licensparadigm; den viktigaste skillnaden är fri programvara vs proprietär programvara . Detta görs genom att inkludera ett upphovsrättsmeddelande som förklarar licensvillkor. Om inget meddelande hittas, är standarden för Alla rättigheter reserverade underförstådd.
Generellt sett är en programvara fri programvara om dess användare är fria att använda den för vilket syfte som helst, studera och ändra dess källkod, ge eller sälja dess exakta kopior och ge eller sälja dess modifierade kopior. Programvara är proprietär om den distribueras medan källkoden hålls hemlig, eller är privatägd och begränsad. En av de första mjukvarulicenserna som publicerades och som uttryckligen beviljade dessa friheter var GNU General Public License 1989; BSD -licensen är ett annat tidigt exempel från 1990.
För proprietär programvara används bestämmelserna i olika upphovsrättslagar, affärshemligheter och patent för att hålla källkoden stängd. Dessutom kommer många delar av detaljhandelsprogramvara med ett slutanvändarlicensavtal (EULA) som vanligtvis förbjuder dekompilering , reverse engineering , analys, modifiering eller kringgående av kopieringsskydd . Typer av källkodsskydd – utöver traditionell kompilering till objektkod – inkluderar kodkryptering, kodobfuskering eller kodförvandling .
Kvalitet
Sättet ett program är skrivet på kan få viktiga konsekvenser för dess underhållare. Kodkonventioner , som betonar läsbarhet och vissa språkspecifika konventioner, syftar till underhåll av programvarans källkod, vilket innebär felsökning och uppdatering . Andra prioriteringar, såsom hastigheten på programmets exekvering, eller förmågan att kompilera programmet för flera arkitekturer, gör ofta kodläsbarhet till en mindre viktig faktor, eftersom kodkvalitet i allmänhet beror på dess syfte .
Se även
- Bytekod
- Koda som data
- Kodningskonventioner
- Datorkod
- Gratis mjukvara
- Äldre kod
- Maskinkod
- Markup language
- Obfuskerad kod
- Objektkod
- Programvara med öppen källkod
- Paket (pakethanteringssystem)
- Programmeringsspråk
- Källkodsförråd
- Syntaxmarkering
- Visuellt programmeringsspråk
Källor
- (VEW04) "Using a Decompiler for Real-World Source Recovery", M. Van Emmerik och T. Waddington, Working Conference on Reverse Engineering , Delft , Nederländerna , 9–12 november 2004. Utökad version av uppsatsen .
externa länkar
- Källkodsdefinition av The Linux Information Project (LINFO)
-
"Obligatoriskt ackrediteringssystem för IT-säkerhetsprodukter" . MetaFilter.com. 22 september 2008.
kommer att införa regler som kräver att utländska företag avslöjar hemlig information om digitala hushållsapparater och andra produkter från och med maj nästa år, sade Yomiuri Shimbun , med hänvisning till icke namngivna källor. Om ett företag vägrar att avslöja information, skulle Kina förbjuda det från att exportera produkten till den kinesiska marknaden eller att producera eller sälja den i Kina, sade tidningen.
- Samma program skrivet på flera språk