Een computer bestaat uit hardware, terwijl programma’s bestaan uit software. Software gebruikt de faciliteiten die de hardware biedt. Toen computers voor het eerst geïntroduceerd werden, benaderden programmeurs de hardware direct vanuit de programma’s (bijvoorbeeld, om een pixel zichtbaar te maken op het scherm, zette een programmeur een waarde in een specifiek geheugenadres dat rechtstreeks aan het scherm gekoppeld was – een praktijk die bekend stond onder de naam “poking”). Vandaag de dag is de hardware zo complex en divers dat dit niet langer een geschikte aanpak is. Laar staan het feit dat als je een programma wilt schrijven dat op meerdere computers moet kunnen draaien, je het je niet kunt veroorloven om hardware direct aan te spreken aangezien hardware verschilt tussen computers. Daarom benaderen programma’s de hardware functionaliteiten via een “besturingssysteem.”

Een besturingssysteem kan gezien worden als een laag tussen programma’s en hardware, die de programma’s allerhande hoog-niveau functies biedt om de hardware aan het werk te zetten. Typische besturingssystemen die vandaag op thuiscomputers gebruikt worden zijn Microsoft’s “Windows,” Apple’s “Mac OS,” en het open-source besturingssysteem “Linux” (hoewel er nog veel andere zijn). Ieder van deze systemen bestaat in meerdere varianten, van elkaar onderscheiden door nummers of “builds,” en soms (bij Linux) door een bedrijfsnaam. Hoe dan ook, alle bieden functionaliteiten om hardware aan te sturen.

Een probleem is dat hoewel alle besturingssystemen functionaliteiten aanbieden, deze functionaliteiten niet op een consistente manier benoemd zijn, en verschillen in parameter specificatie. Dit betekent dat als je een Python programma wilt schrijven dat de hardware benadert door direct met het besturingssysteem te communiceren, je programma niet kan draaien op andere besturingssystemen. Dit is waar de os module een oplossing biedt. De os module bevat functies die je kunt gebruiken om hardware te benaderen, ongeacht het besturingssysteem. De os module heeft daarom een verschillende implementatie voor verschillende besturingssystemen, maar je programma hoeft dat niet te weten, omdat de functies altijd dezelfde naam en dezelfde parameters hebben.

Dat betekent niet dat je helemaal niks hoeft te weten van de details van een besturingssysteem. Bijvoorbeeld, als je een bestand benadert, moet je bij Windows soms de letter toevoegen die een disk drive identificeert, die niet bestaat bij Mac OS. Een ander verschil is dat bestandstoegang en bestandsbeveiliging veel meer flexibiliteit heeft bij Linux dan bij Windows of Mac OS, waardoor je bij Linux een ander soort foutmeldingen kunt verwachten. Er zijn ook functies die weliswaar bestaan voor alle besturingssystemen, maar die slechts bij sommige een effect hebben. Desondanks is de os module een acceptabel compromis tussen portabiliteit en besturingssysteem-afhankelijkheid.