AVL schreef op 24 oktober 2002 @ 20:39:
Natuurlijk niet

. Ik vind dat jullie allemaal een beetje conservatief naar het probleem 'drivers' krijgen (ik denk dat ik het wel een probleem mag noemen).
Mja, je kunt de vraagstelling op heel veel manieren interpreteren he...
Ideaal OS, maar er verandert verder niks. Geen andere hardware, comminucatie met huidige software moet mogelijk zijn, het probleem van beschikbaarheid van drivers en apps is reeel, er is geen wereldvrede.
Of:
Ideaal OS, maar je mag ook de hardware en de complete computerwereld redesignen. Alles is dan zoals jij het je voorstelt, andere OSsen zouten fijn op.
Zijn nogal verschillende doelstellingen met verschillende haalbaarheid

En dus verschillende driver-oplossingen.
Maar drivers is wel iets waar ik ooit serieus over nagedacht heb (omdat de huidige situatie een complete troep is).
De oplossing (nouja, wannabe-oplossing, helaas) zou zijn om hardware te generaliseren. Dat wil zeggen dat alle hardware (van hetzelfde type) op dezelfde manier aangesproken kan worden, en dat de hardware volledig plug-n-play (woei, buzzword) herkend zou worden. Verschillende stukken hardware met hetzelfde doel zou dan alleen in snelheid, kwaliteit en features van elkaar verschillen.
Dan heb je voor elke hardware-functie slechts één driver nodig. Één voor videokaarten, één voor geluidskaarten, enz.
Ik zal hier als voorbeeld PCI nemen, maar een andere bus (al dan niet toekomstig) zou even goed kunnen werken. PCI is redelijk geschikt, omdat PCI wel aardig in elkaar zit, al zou ik in een ideale situatie ook de bus en het platform (15 interrupts

) redesignen.
Hardware wordt geclassiceerd in functies, ongeveer als USB nu (maar dan met een grotere namespace ajb). Bijvoorbeeld categorie 0 zijn toetsenborden. Categorie 1 zijn videokaarten. Categorie 2 muizen, enz...
Ik zal als voorbeeld de videokaart uitwerken.
Er wordt voor de videokaarten een API afgesproken. Er zijn een hoop vastgelegde features, en elke feature kan met een bepaalde snelheid uitgevoerd worden. Een videokaart implementeert een aantal van die features, maar hij hoeft ze niet allemaal te implementeren.
De lijst features zou kunnen zijn:
0. Informatie over de capabilities van de kaart opvragen (oa resolutie enzo)
1. Resolutie/colordepth/refresh switchen (en opvragen, en mogelijkheden opvragen)
2. Resolutie/colordepth/refresh opvragen
3. Individuele pixels tekenen
4. Individuele pixels opvragen
5. Lijnen (van x1,y1 naar x2,y2) tekenen
6. Circels tekenen
7. Boxes tekenen
8. Gevulde boxes tekenen
9. VRAM -> VRAM blitting
10. RAM -> VRAM blitting
11. RAM -> VRAM blit & scale
12. RAM -> VRAM blit & colorspace conversion
13. RAM -> VRAM blit & scale & colorspace conversion
14. Renderen van fonts in hardware direct naar het scherm
15. Idem, maar met vastgelegde AA
16. Idem, maar met programmeerbare AA
17. Gevulde boxes capturen
Deze is niet compleet (neem nou alleen al 3D), en waarschijnlijk kan de verdeling technisch een stuk beter, maar ik ben geen videokaart-chip-designer, dus dat weet ik niet exact. Als voorbeeld volstaat het wel.
Videokaarten *moeten* dan features 0 t/m 4 implementeren, met die 4 kun je in principe alles al, alleen baggertraag en inefficient. Maar dan heb je in ieder geval een fallback.
De overige features *mogen* de overigen implementeren. Hoe meer features, hoe sneller en duurder de kaart.
Elke feature kan op een standaard vastgelegde manier worden gebruikt, het maakt voor de driver dus niet uit welke kaart er nou in zit, als de driver zegt "doe feature 5", dan doet de videokaart dat.
Bij het initialiseren van de hardware zegt het OS "wat doe jij?", waarop de kaart antwoordt "video". Dan vraagt het OS, "Welke features heb je", en dan zegt de kaart bijvoorbeeld "1-14,17".
De video-driver van het OS weet dan welke kaart de videokaart is en welke features deze biedt (vrij veel in dit geval). Als je dan je computer gebruikt, dan willen de programma's vanalles met het beeld doen, en de driver gebruikt daar dus de optimale feature voor, met software fallbacks voor alle niet geimplementeerde features.
Als je dus film kijkt, dan zegt de player tegen het OS, "hier staat het plaatje in YUV, maak er maar RGB van en zet het fullscreen op het scherm" (net zoals nu in X via xv gebeurt), en de driver zegt dan tegen de videokaart "Yo, feature 14 vanaf dat adres".
Als je een programma gebruikt met anti-aliased letters, dan zegt het programma tegen het OS "Teken hoi anti-aliased, grootte 12 daar en daar". De videokaart kan dit niet (althans, niet anti-aliased), dus de driver doet de anti-aliasing zelf en tekent het met individuele pixels op het scherm (of met een overlay blit met alpha channel, maar stond niet in mijn feature list).
Feature ontbreekt, maar het werkt wel! Het is wel wat trager, maarja, features en snelheid kosten geld (net zoals nu).
Dit werkt dus met om het even welke videokaart. Niks geen gekut met (al dan niet instabiele) drivers, gewoon één werkende, stabiele, snelle driver.
Nieuwe features en videokaarten (wat nu nieuwe drivers vereist) zijn ook mogelijk.
Stel er wordt een nieuwe feature bedacht: een hardware cursor (had allang bij de feature lijst moeten zitten, maar och). Het bedrijf dat de feature bedacht stapt naar de organisatie die de feature lijst bijhoudt en stelt de nieuwe feature voor. De feature wordt goedgekeurd en toegevoegd aan de lijst met features.
Videokaarten die deze feature hebben werken gewoon nog met de oude drivers, alleen werkt de nieuwe feature dan niet. Nieuwe drivers werken gewoon met oude videokaarten, voor hen is het gewoon nog een feature die de videokaart niet implementeert.
Zo'n systeem zou dus voor alle hardware moeten bestaan. Van hardware wisselen zonder drivers te veranderen, driver updaten voor evt betere performance en ondersteuning van nieuwe features.
Btw, USB heeft dit al een beetje, zo zijn USB HID devices behoorlijk generiek, en USB mass storage devices ook.