Codebasis - Codebase
In softwareontwikkeling , een code base (of code base ) is een verzameling van broncode gebruikt voor het bouwen van een bepaald softwaresysteem , applicatie of softwarecomponent . Gewoonlijk bevat een codebase alleen door mensen geschreven broncodebestanden ; een codebase bevat dus meestal geen broncodebestanden die zijn gegenereerd door tools (gegenereerde bestanden) of binaire bibliotheekbestanden (objectbestanden), omdat ze kunnen worden opgebouwd uit de door mensen geschreven broncode. Het bevat echter over het algemeen configuratie- en eigenschappenbestanden, omdat dit de gegevens zijn die nodig zijn voor de build.
Een codebase wordt meestal opgeslagen in een source control repository in een versie controle systeem. Voor kleinere projecten kan het worden bewaard als een eenvoudige set bestanden (zelfs de Linux-kernel werd jarenlang als een set bestanden onderhouden). Een broncoderepository is een plaats waar grote hoeveelheden broncode worden bewaard, zowel openbaar als privé. Broncode-opslagplaatsen worden het meest gebruikt voor back-ups en versiebeheer, en voor projecten met meerdere ontwikkelaars om verschillende broncodeversies af te handelen en om hulp te bieden bij het oplossen van conflicten die ontstaan doordat ontwikkelaars overlappende wijzigingen indienen. Subversion , Git en Mercurial zijn voorbeelden van populaire tools die worden gebruikt om deze workflow af te handelen, die gebruikelijk zijn in open source-projecten.
Verschillende en monolithische codebases
Meerdere projecten kunnen afzonderlijke, verschillende codebases hebben, of kunnen een enkele, gedeelde of monolithische codebasis . Dit is met name het geval voor gerelateerde projecten, zoals die binnen hetzelfde bedrijf worden ontwikkeld. Meer in detail omvat een monolithische codebase doorgaans een enkele repository (alle code op één plaats), en vaak een gemeenschappelijk bouwsysteem of gemeenschappelijke bibliotheken. Of de codebase wordt gedeeld of gesplitst, hangt niet af van de systeemarchitectuur en de daadwerkelijke buildresultaten; dus een monolithische codebase, die gerelateerd is aan de daadwerkelijke ontwikkeling, houdt geenmonolithisch systeem in, dat gerelateerd is aan software-architectuur of een enkel monolithisch binair bestand. Als gevolg hiervan kan en zal een monolithische codebase (voor grote codebases) vaak uit afzonderlijke componenten bestaan, in plaats van slechts een enkel systeem of een enkel binair bestand te dragen; een gedistribueerde codebase (met meerdere componenten) kan worden gebruikt om een enkel monolithisch systeem of zelfs een enkel binair systeem te bouwen. De Linux-kernel is bijvoorbeeld architectonisch een enkelemonolithische kernel, maar bestaat uit afzonderlijke binaire bestanden (laadbare componenten) en is ontwikkeld in meerdere gedistribueerde opslagplaatsen.
Er zijn zowel voor- als nadelen aan een monolithische codebase in vergelijking met een gedistribueerde codebase. Het eenvoudigste is dat een monolithische codebase de integratie vereenvoudigt - wijzigingen aan verschillende componenten of refactoring van code tussen componenten kan eenvoudig en atomair worden gedaan - en maakt bewerkingen over de hele codebase mogelijk, maar vereist een grotere repository en maakt het gemakkelijker om brede technische schulden te introduceren . Een afzonderlijke codebase of een gedistribueerde codebase houdt individuele repositories kleiner en beter beheersbaar, waardoor tegelijkertijd de scheiding tussen componenten wordt afgedwongen, maar het vereist ook integratie tussen codebases (of met de hoofdrepository) en bemoeilijkt wijzigingen die meerdere codebases beslaan.
In termen van standaarden verklaart het verwijzen naar meerdere codebases als "verschillend" dat er onafhankelijke implementaties zijn zonder gedeelde broncode en dat deze implementaties historisch gezien niet zijn geëvolueerd uit een gemeenschappelijk project. Dit kan een manier zijn om interoperabiliteit aan te tonen door twee onafhankelijke stukjes software te tonen die een bepaalde standaard implementeren.
Voorbeelden
Enkele opmerkelijk grote codebases zijn onder meer:
- Google : monolithisch, 1 miljard bestanden, 9 miljoen broncodebestanden, 2 miljard regels broncode, 35 miljoen commits in totaal, 86 TB totale grootte (januari 2015)
- Facebook : monolithisch, 8 GB (repo 54 GB inclusief geschiedenis, 2014), honderdduizenden bestanden (2014)
- Linux-kernel : gedistribueerd, meer dan 15 miljoen regels code (vanaf 2013 en kernelversie 3.10)