Utilisateur:Silex6/Bac à sable - archive 1 - 2013

Une page de Wikipédia, l'encyclopédie libre.

Dalvik (machine virtuelle)[modifier | modifier le code]

[1]

Dalvik est une machine virtuelle destinée aux appareils mobiles (smartphones et tablettes tactiles) équipés du système d'exploitation Android[1]. C'est un des composants clé d'Android[2]. Il est destiné à permettre l'exécution simultanée de plusieurs applications sur un appareil de faible capacité (peu d'espace mémoire et peu de puissance de calcul)[1].

Crée par Dan Bornstein, Dalvik fait partie du runtime, le moteur qui permet l'exécution des applications pour Android[1]. Le nom est celui d'un village de pêcheurs en Islande, pays d'origine de son auteur[1].

[2]

[3]

[4]

Le but d'une machine virtuelle comme Dalvik est de permettre d'exécuter le même programme sur une grande variété d'appareils, quel que soient leurs caractéristiques techniques. Le code exécutable du programme (dit bytecode) est transformé à la volée en instructions spécifique à l'appareil sur lequel le programme est exécuté - c'est la fonction de compilation just-in-time de la machine virtuelle[3].

Dalvik est un des composants clé d'Android[2]. Il est destiné à permettre l'exécution simultanée de plusieurs applications sur un appareil de faible capacité (peu d'espace mémoire et peu de puissance de calcul)[1]. La capacité ordinaire des appareils mobiles contemporains de 2011 étant équivalente à celle d'un ordinateur personnel vieux de dix ans[1].

La technologie Java et Dalvik

Java est un langage de programmation destiné à être utilisé sur une grande variété d'appareils, selon la devise « write once, run anywhere » (en français écrire une fois, utiliser partout). Les programmes écrits dans ce langage sont traduits en bytecode qui sera ensuite exécuté par une machine virtuelle. L'objectif de Dalvik est de fournir une machine virtuelle alternative pour exécuter ces programmes; une machine virtuelle qui soit adaptée aux limitations des appareils mobiles[3].

Dalvik exécute un bytecode différent, dont les instructions sont basées sur des registres, alors que la machine virtuelle classique de la technique Java est basée sur la pile. Une machine à registres nécessite moins d'instructions pour effectuer les mêmes opérations qu'une machine à pile et est par conséquent mieux adaptée à un appareil ayant peu de puissance de calcul. En raison de cette différence, les fichiers de bytecode Java ordinaires ne peuvent pas être exécutés tel quel par Dalvik, et un programme inclu dans Android transforme au préalable ces fichiers en DEX (Dalvik Executable) - les fichiers de bytecode pour Dalvik[3]. Les fichiers exécutables pour Dalvik (.dex) sont créés par consolidation des fichiers de bytecode Java. La taille du fichier .dex est typiquement la moitié de la taille des fichiers de bytecode Java desquels il est issu[4].

La machine virtuelle Dalvik se sert des services offerts par le noyau Linux[2]. Dans Android il est également possible de créer des applications qui n'utilisent pas Dalvik, et qui se servent directement du noyau Linux, cependant cette technique n'offre aucun avantage et est rarement utilisée[2].

Tout les services fournis par Android ainsi que les moyens matériels des appareils sont mis à disposition à travers Dalvik[2]. Cette machine virtuelle joue le rôle d'écran qui cache les caractéristiques techniques de l'appareil sur laquelle elle est exécutée[2].

Infobox logiciel[modifier | modifier le code]

plop
wow
wow

Développeur plop
Écrit en C++
Distribution gratuit
Licence licence MIT
Site web http://www.example.com

eZ Publish
Développeurs eZ Systems AS
Environnement Multiplate-forme
Langue Multilingue
Type CMS (système de gestion de contenu)
Distribution téléchargement, vente de licences
Licence GPL
Site web http://ez.no/fr/eZPublish

Programmes intégrés dans Windows[modifier | modifier le code]

Composition[modifier | modifier le code]

Les produits de la famille Windows sont livrés avec une gamme de programmes qui permettent de leur ajouter des fonctionnalités, parmi lesquels les jeux, des serveurs et des applications[5],[6]

les applications
Les jeux incorporés[6]
les logiciels serveurs[6]

Livrés avec les éditions pour serveur.


Chess Titans, Démineur (jeu), Solitaire (patience), Indexing Service, Internet Information Services,Créateur de DVD Windows, Windows Media Player, Framework .NET, Serveur d'impression,Serveur de fax, Network File System,Simple Network Management Protocol, Active Directory, Active Directory Federation Services, Common Internet File System, Services for UNIX, Microsoft Management Console, Windows SharePoint Services, Internet Explorer, MSN, Notepad, Wordpad, Paint,Outlook Express, Calendrier

[5]

Jeux: échecs, démineur, et le solitaire. Un moteur de recherche. Indexing Service Le service web Internet Information Services. Un graveur de DVD, un lecteur de média et le Windows Media Center. Le framework Microsoft .Net des services permettant d'imprimer des documents, envoyer des Fax et numériser des documents. des services réseaux tels que le NFS, le SNMP. Une couche de compatibilité avec Unix.


[6]

Les systèmes d'exploitation Windows sont livrés avec une gamme de programmes qui permettent de leur ajouter des fonctionnalités, parmi lesquels les jeux, des serveurs et des applications. [7]

[8]

Les services d'annuaire Active Directory et Active Directory Federation Services. DFS. Une console de vérification et de configuration (Microsoft Management Console), avec des outils de vérification des fichiers, des disques durs, du matériel, et des imprimantes.

les services de portail Windows Sharepoint Services. Une couche de compatibilité Unix.

[9]

Internet Explorer, MSN

[10] notepad, wordpad, paint, outlook express, calendar

Internes[modifier | modifier le code]

[11]

Hardware abstraction layer, Win32, ntoskrnl.exe, Graphics Device Interface, DirectDraw, Direct3D, OpenGL, Adobe Type Manager

Un système d'exploitation tel que Windows manipule les moyens matériel de l'ordinateur et offre aux logiciels applicatifs des services en rapport avec leur utilisation[7]. Les principaux programmes internes de la série Windows NT sont la couche d'abstraction matérielle, le noyau, les pilotes, le système graphique, et les interfaces de programmation Win32 et POSIX. Une partie des programmes sont exécutés en mode noyau, et le reste est exécuté en mode utilisateur. Lorsqu'un programme est exécuté en mode utilisateur, ses possibilités sont limitées: l'accès à certains emplacement de mémoire et l'exécution de certaines instructions est interdite. Windows comporte différents programmes permettant l'exécution d'applications dans différents environnements ayant chacun sa propre interface de programmation: MS-DOS, OS/2, POSIX ou Win32 - ce dernier, peu utilisé au début, est devenu l'environnement de référence, utilisé par la majorité des applications pour Windows[7].

l'interface de programmation Win32 est un très large ensemble de fonctions, utilisées par les applications notamment pour manipuler des processus, des threads, utiliser les réseaux informatique, les périphériques, afficher des fenêtres, des dialogues, des widgets, ou traiter des erreurs. Il permet également d'utiliser des services tels que DirectX, GDI, OpenGL ou MAPI, ainsi que des services offerts par des objets COM ou ActiveX. Win32 est disponible sur les produits des branches Windows 95, Windows NT et Windows CE[7].

Environnement de bureau, Windows Aero, Explorateur Windows, Panneau de configuration Windows, Base de registre, Menu démarrer, Cmd

POSIX, Service Control Manager, Local Security Authority Subsystem Service

[12]

Environnement de bureau, Windows Aero, Explorateur Windows, Panneau de configuration Windows, Base de registre, Menu démarrer, Cmd

[13]

POSIX, Service Control Manager, Local Security Authority Subsystem Service

Publication assistée par ordinateur[modifier | modifier le code]

[14]


Activité[modifier | modifier le code]

La publication assistée par ordinateur consiste à créer des documents imprimés en utilisant un ordinateur, une imprimante et éventuellement un scanner en lieu et place des techniques mécanique de l'imprimerie[8]. Il peut s'agir de livres, de journaux, de brochures, de publicité, de dépliants, de cartes de vœux ou de cartes postales[8]. Les documents peuvent contenir des photos, des images numérisées, des clipart et des logos. Les documents sont ensuite imprimés à l'aide d'une imprimante, ou dans une imprimerie[8]. L'opération se fait à l'aide de logiciels spécialisés, semblables à des traitement de textes ordinaires, mais où un accent particulier a été mis sur la disposition des textes et des images sur une page[8]. Des logiciels sophistiqués de traitement de texte peuvent également être utilisés pour de la publication assistée par ordinateur[8].

Les personnes qui travaillent dans la PAO passent beaucoup de temps devant leur ordinateur à arranger des textes et des images créés par autrui ou pas eux-mêmes[9]. Leur travail consiste à préparer des fichiers pour la presse écrite, la publication sur le web ou sur CD. Ils travaillent à la composition du contenu d'ouvrages qui peuvent être sous la forme de rapports, de brochures ou de livres[9]. Les qualités appréciées pour travailler dans ce domaine sont le souci du détail, le sens esthétique et artistique, et la patience[9].

La publication assistée par ordinateur implique la manipulation des caractéristiques typographique des textes: taille des caractères en pica, les styles (serif ou sans serif), le crénage et l'espacement entre les lettres[8]. Les ouvrages réalisés comportent généralement une mise en page - un ensemble de caractéristiques communes à toutes les pages: taille du papier, orientation, dimension des marges, numérotation, nombre de colonnes de texte, et caractéristiques des en-tête et des pieds de page[8].

Outils[modifier | modifier le code]

Les logiciels utilisés en publication assistée par ordinateur permettent généralement le traitement de texte, la mise en page, l'illustration, la retouche d'images numériques et la manipulation des polices de caractères[8]. La publication assistée par ordinateur a connu un tournant avec l'arrivée des ordinateurs Macintosh en 1984. Alors qu'auparavant la présentation des textes sur le papier était déterminée par l'ajout de marques de typographique destinée aux téléscripteurs, avec l'arrivée des interfaces graphiques, l'ouvrage est alors affiché à l'écran de l'ordinateur exactement tel qu'il sera sur le papier (WYSIWYG what you see is what you get), avec la possibilité de changer la typographie (style et police de caractère) et de voir immédiatement le résultat[10].

Il n'existe pas de séparation claire entre le traitement de textes et la publication assistée par ordinateur[11]. Essentiellement le traitement de texte consiste à rédiger et modifier des textes, et est une des activités effectuées en publication assistée par ordinateur[11]. Les logiciels sophistiqués, initialement destinés au traitement de texte peuvent être utilisés pour de la publication assistée par ordinateur[11]. Essentiellement la PAO consiste à créer des documents multipages destinés à être imprimés sous forme de livre ou de brochure. la PAO consiste également à créer des catalogues, des cartes de vœux, ou des étiquettes[11].

Les fonctions typiques des logiciels de traitement de texte sont la possibilité de choisir la police d'écriture, de créer des titres, de créer des en-têtes et des pieds de page, de justifier les textes, de numéroter automatiquement les pages, qu'ils permettent de manipuler les marges et d'ajouter des tabulateurs[11]. Il est également apprécié que le logiciel permette d'ajouter des photos, des clipart, des formes géométriques ou des symboles, qu'il crée automatiquement une table des matière, vérifie l'orthographe et la grammaire[11]. Les fonctions typiques des logiciels de publication sont la possibilité de numéroter automatiquement les pages, générer des en-têtes, des pieds de page, un sommaire et une table des matière. Il est également apprécié que le logiciel traite de manière différente les pages paires et impaires, ainsi que la première page, qu'il facilite la manipulation de grandes quantités de textes et d'images[11].

Les logiciels souvent utilisés dans ce domaine sont Microsoft Word, Corel WordPerfect, Adobe PageMaker, QuarkXPress, Microsoft Publisher, Corel Draw, Adobe Illustrator, Adobe Photoshop, Corel Photo-Paint et Adobe Type Manager[8]. PageMaker, lancé en 1985, a été un des premiers logiciels de publication assistée par ordinateur[10].

La publication assistée par ordinateur implique souvent le recours à la technologie PostScript. C'est un langage informatique qui décrit comment un document se présente sur le papier[8]. Il est utilisé pour communiquer entre l'ordinateur et l'imprimante. Le recours à cette technologie permet d'obtenir un résultat plus fidèle en particulier lorsque la présentation du document est compliquée. De plus la présentation du document sur le papier sera identique quel que soit le modèle d'imprimante utilisée[8].

[15]

[16]

[17]

Samba (informatique)[modifier | modifier le code]

[18]

Samba est un logiciel qui permet à des ordinateurs Unix de mettre à disposition des imprimantes et des fichiers dans des réseaux Windows, en mettant en oeuvre le protocole SMB/CIFS de Microsoft Windows[12]. Samba permet aux ordinateurs Windows d'accéder aux imprimantes et aux fichiers des ordinateurs Unix et inversément[13].


[19]

Permettant aux serveurs Unix de se substituer aux serveurs Windows[14].

[20]

Le fait qu'un système Unix réponds au protocole SMB de Microsoft Windows lui permet d'entrer en action avec les ordinateurs Windows. Un ordinateur Unix apparait alors pour les machines Windows comme une autre machine Windows avec laquelle ils peuvent communiquer. [21]

OpenGL[modifier | modifier le code]

OpenGL est un ensemble normalisé de fonctions de calcul d'images 2D ou 3D lancé par Silicon Graphics en 1992[15]. Cette interface de programmation est disponible sur de nombreuses plateformes où elle est utilisée pour des applications qui vont du jeu vidéo jusqu'à la CAO en passant par la modélisation[15].

OpenGL permet à un programme de déclarer la géométrie d'objets sous forme de points, de vecteurs, de polygones, de bitmaps et de textures. OpenGL effectue des calculs en vue de déterminer l'image à l'écran, en tenant compte de la distance, de l'orientation, des ombres, de la transparence et du cadrage[16],[17].

[22]

OpenGL sert d'interface avec le matériel d'affichage. Cette interface de programmation est disponible sur de nombreuses plateformes et est utilisée pour des applications qui vont du jeu vidéo jusqu'à la CAO[15].

OpenGL a été lancé par Silicon Graphics en 1992, comme une interface de programmation polyvalente et multiplateforme. La spécification de OpenGL est maintenue par un consortium d'industriels tels que ATI, Dell, Hewlett-Packard, IBM, Matrox, NVIDIA, Sun Microsystems et Silicon Graphics. Cette spécification dicte les fonctionnalités que doivent offrir les mises en oeuvre de l'interface OpenGL[15].

OpenGL comporte plusieurs centaines de fonctions qui permettent d'exploiter presque toutes les possibilités du matériel graphique. OpenGL fonctionne comme une machine à états[15].

[23]

OpenGL ES est une implémentation partielle disponible sur les iPhone, qui met en oeuvre un sous-ensemble des fonctions de OpenGL[17].


[24]

[25]

Win32 et Win16[modifier | modifier le code]

définition[modifier | modifier le code]

Win16, Win32 et Win32s sont des ensembles normalisés de fonctions qui permettent aux logiciels applicatifs de se servir des fonctionnalités des différents systèmes d'exploitations de la famille Windows. Win32 est l'ensemble de fonctions le plus souvent utilisé[18], et les programmes dit pour Windows sont généralement des programmes utilisant Win32.

Win32, successeur de Win16, existe depuis 1993, dans les produits 32 bits de la famille Windows comme Windows NT, Windows 2000, Windows 95 ou leurs successeurs. L'interface de programmation est mise en oeuvre par 3 bibliothèques logicielles: Kernel32.Dll, User32.dll et GDI32.dll[19]. Les mêmes fonctions de Win32 sont disponibles dans tout les produits Windows et suivant le produit l'utilisation de certaines fonction peut aboutir à une erreur service non disponible[18].

Les fonctions de Win32 permettent notamment de manipuler des processus, de communiquer entre programmes, d'exploiter les réseaux informatiques, de manipuler des fichiers, des imprimantes, des serveurs et des ports de communication[18].

Histoire[modifier | modifier le code]

Les produits Windows parus avant 1993 étaient adaptées aux processeurs 16 bits tel le Intel 80286 ou ces prédécesseurs[20]. Les éditions de Windows postérieures à cette date sont adaptées aux processeurs 32 bits tels que le Intel 80386 et ses successeurs[20]. Les différences entre ces produits sont notamment la manipulation des pointeurs et l'organisation de l'espace d'adressage[20].

Le nom Win32 a été donné à l'interface de programmation mise à disposition dans Windows NT et ces successeurs, les éditions 32 bits de Windows, pour la distinguer de la précédente interface Win16 inclue dans les éditions 16 bits (Windows 3.1 et ces prédécesseurs)[18]. Win32 offre des fonctions similaires à celles qui existant dans Win16, ainsi qu'un lot de fonctions qui sont couramment mises à disposition par les bibliothèques standard de C[18].

À ses débuts, Windows NT, première édition 32 bits de Windows, offrait l'interface de programmation de OS/2 Presentation Manager. Puis cette interface a été modifiée en vue de s'approcher de celle qui existait dans les versions précédentes; cette interface a été baptisée Win32, et son prédécesseur Win16[19].

Win32s est une interface de programmation qui offre une partie des fonctions de Win32, et est destinée aux programmes pour les produits 16 bits de la série Windows. L'utilisation de certaines fonctions de Win32s peut aboutir à une erreur non disponible[18].

Lors de la sortie de Windows NT et l'introduction de l'interface Win32, très peu de logiciels applicatifs utilisaient cette technique. Microsoft a équipé Windows NT de plusieurs environment subsystems permettant de l'utiliser pour exécuter des logiciels destinés à MS-DOS, OS/2, Unix (POSIX) ainsi que les précédentes versions de Windows qui implémentent l'interface Win16.

Technique[modifier | modifier le code]

Les interfaces de programmation Win16 et Win32 font partie des environment subsystem de produits de la famille Windows[21]. Chaque environnement permet l'exécution de programmes prévus pour un certain type de système d'exploitation: Win32 pour les programmes prévus pour les éditions 32 bits de Windows, Win16 pour les autres éditions (antérieures à 1993), POSIX pour de nombreux programmes prévus pour Unix, ou encore l'environnement pour des programmes destinés à OS/2[21].

Un environment subsystem est essentiellement un ensemble de bibliothèques logicielles qui exposent les fonctions de l'interface de programmation ainsi qu'un programme qui assure la communication entre le logiciel applicatif et le coeur du système d'exploitation. Les fonctions du noyau du système d'exploitation ne sont pas directement exploitées par les logiciels applicatifs.

Win32 est l'environnement natif de Windows NT et ses successeurs. Les autres environnements s'appuient dessus pour émuler les conditions d'exécution des applications: MS-DOS est pris en charge par le programme VDM pour Virtual DOS machine, Windows 3.1 est pris en charge par le programme WOW pour Windows on Windows, Unix est pris en charge par émulation de l'interface POSIX.

Windows 95, Windows 98 et Windows NT offrent les deux interfaces Win16 et Win32[20]. Lorsqu'une fonction de Win32 est utilisée dans Windows 95, cela entraîne l'utilisation de la fonction Win16 équivalente. Dans Windows NT c'est le contraire: l'utilisation d'une fonction Win16 entraîne l'utilisation de la fonction Win32 équivalente[20].

[26]

[27]

[28]

[29]

[30]

[31]

[32]

Les fonctions de Win32 sont utilisées par les Microsoft Foundation Class (abr. MFC). Des classes qui représentent les éléments principaux de Windows tels les fenêtres, les dialogues, ou les polices de caractères, et qui sont mises en oeuvre pas utilisation des fonctions de Win32.

[33]

[34]

Synthèse Wikipédia:Sondage/Neutralité et vérifiabilité des articles concernant un logiciel[modifier | modifier le code]

Bonjour. Un contributeur a clos le sondage Wikipédia:Sondage/Neutralité et vérifiabilité des articles concernant un logiciel que j'avais volontairement laissé traîner (en raison du grande nombre de questions).

Voici ma synthèse des résultats du sondage.

Tout d'abord merci aux contributeurs qui ont répondu. Il y a eu généralement entre 3 et 10 réponses par question.

Le sondage portait en particulier sur la mention d'informations relatives à la licence dans les articles concernant les logiciel. Notamment la mention licence libre ou licence propriétaire.

Les résultats du sondage

  1. Les sondés se sont montrés favorables au placement de ce type d'information dans le résumé d'introduction (11 contre 1) un peu moins favorable au placement dans la première phrase (4 contre 3). Ils se sont montrés opposés au placement systématique en introduction (aucun avis favorable) et favorables à accorder à cette information un poids proportionnel à celui accordé par les sources (3 contre 0). Les sondés se sont également montrés favorable au sourçage de cette information (8 contre 0), et la majorité des sondés se sont montrés favorables au sourçage impératif de cette information (5 contre 1).
  2. D'une manière générale, les sondés se sont montrés favorables au maintien des règles et recommandations existantes aux articles concernant les logiciels, et ont rejetés massivement l'introduction de nouvelles recommandations (0 pour, 8 contre). Notamment les sondés se sont montrés favorables au sourçage des informations de licence (8 pour, 0 contre) et défavorable à l'utilisation non sourçable des mots propriétaires ou libre (non sourçable = mot pas utilisé dans les sources) (1 pour, 3 contre). Plusieurs sondés ont également émis des réserves concernant l'obtention de cette caractéristique par déduction ou interprétation de textes existants. Les mots libre et propriétaire sont de plus jugés connotés par les sondés (4 contre 0 et 2 contre 1)
  3. Les sondés se sont également montrés massivement défavorable à l'ajout d'information de type libre ou propriétaire dans les listes, les palettes et la section articles connexes (3 questions, aucune avis favorable). Les avis sont moins tranchés en ce qui concerne les catégories et les avis sont partagés concernant des catégories par licence (2 contre 2).
  4. Les sondés se sont montrés favorables à l'ajout d'informations relatives à la politique de distribution des logiciels (4 contre 0) et se sont montrés d'avis que ces informations ne sont pas redondantes avec la licence (3 contre 0).
  5. Ce sondage de 35 question a été unanimement jugé trop long (9 contre 0) et inutile (7 contre 0) par les sondés. Et jugé biaisé (7 contre 2).

Malgré les réponses à la dernière question, je reste d'avis que ça sera une source d'inspiration intéressante pour les contributeurs du projet informatique:

L'état actuel de l'encyclopédie

  1. En l'état actuel les informations relatives à la licence sont placées de manière un peu arbitraire dans des articles concernant un logiciel. Ils se limitent bien souvent à la mention libre ou propriétaire dans la première phrase de l'article. Information non détaillée dans l'article et presque toujours non sourcée. Il y a déjà eu des débats animés et des débuts de guerre d'édition suite au retrait d'un mot libre d'un article.
  2. Puisque la majorité des sondés sont favorables au maintient des règles et recommandations existantes - applicables à tout les articles Wikipédia - il n'y a pas lieu d'introduire de nouvelles recommandations ni de pratiquer un traitement différent pour les articles concernant des logiciels.
  3. Les articles concernant les logiciels sont aujourd'hui quasiment toujours catégorisés par licence. Je précise que ce n'est pas le seul critère de classement dans des catégories. libre / propriétaire est actuellement utilisé à des fins de classification dans les listes, les catégories et les palettes, ainsi que la section des articles connexes, comme indiqué dans le sondage.
  4. En l'état les informations relatives à la distribution sont mêlées à la licence. J'ai tenté de les dissocier peu avant le sondage, et créé une catégorie... qui à fait l'objet d'une PàS.
  5. Voir les autres réponses.

Android[modifier | modifier le code]

[35] Android est un système d'exploitation pour téléphones mobiles et tablette tactiles basé sur le noyau Linux[22]. Il a été lancé en 2005 par une startup nommée Android, qui a été rachetée par Google et le produit a été adopté par de nombreux constructeurs de produits concurrents du iPhone[22].

Dans le Guide du développeur, Android est défini comme étant une pile de logiciels, un ensemble de logiciels destinés à fournir une solution clé en main pour les appareils mobiles[23]. Cette pile comporte un système d'exploitation (le noyau Linux), les applications clés telles que le navigateur web, le téléphone et le carnet d'adresse ainsi que des logiciels intermédiaires entre le système d'exploitation et les applications[23]. L'ensemble est organisé en cinq couches distinctes[22]:

Les fonctionnalités offertes par Android sont notamment l'exploitation des réseaux de télécom GSM, bluetooth, Wifi et UMTS, la manipulation de médias, notamment de la vidéo H.264, de l'audio MP3 et des images jpeg ainsi que d'autres formats, l'exploitation des senseurs tels que les capteurs de mouvements, la caméra, la boussole et le récepteur GPS, l'utilisation de l'écran tactile, le stockage en base de données, le rendu d'images en 2D ou 3D en utilisant le processeur graphique, l'affichage de page web, l'exécution multitâche des applications et l'envoi de messages SMS[22],[23].

Android est distribué en open source sous licence Apache. La licence autorise les constructeurs qui intègrent Android dans leurs appareils à y apporter des modifications leur permettant de se distinguer de leurs concurrents[22].

Bien que ne faisant pas partie de la pile de logiciels, l'environnement de développement qui comporte un émulateur de téléphone et un plugin pour Eclipse peut aussi être considéré comme une fonctionnalité d'Android[23]. Google Play est un site web d'achat et de téléchargement d'applications pour Android, qui joue un rôle essentiel pour la popularité de ce système d'exploitation[22].

[36]


la startup Android a été rachetée par Google en 2005[23]. La première version des outils de développement pour Android a été publiée en 2007 et la version 1.0 de Android en septembre 2008[23]. Depuis la version 1.5 chaque version d'Android porte le nom d'un dessert (gâteau, donut, pain d'épice ou crème glacée)[23].

Android et la plateforme Java[modifier | modifier le code]

Android comporte une machine virtuelle nommée Dalvik, qui permet d'exécuter des programmes prévus pour la plate-forme Java. C'est une machine virtuelle conçue dès le départ pour les appareil mobiles et leur ressources réduites: peu de puissance de calcul et peu de mémoire[23].

Le bytecode de Dalvik est différent de celui de la machine virtuelle Java de Oracle (JVM), et le processus de construction d'une application est le suivant: le code source de l'application, en langage Java est tout d'abord compilé avec un compilateur standard qui produit du bytecode pour JVM puis ce dernier est traduit en bytecode pour Dalvik par un programme inclu dans Android, du bytecode qui pourra alors être exécuté[23].

L'ensemble de bibliothèque standard de Android ressemble à J2SE (Java Standard Edition) de la plateforme Java. La principale différence est que les bibliothèques d'interface graphique AWT et Swing sont remplacées par des bibliothèques d'Android[23].

Le développement d'applications pour Android s'effectue avec un ordinateur personnel sous Mac OS, Windows ou Linux en utilisant le JDK de la plateforme Java et des outils pour Android. Des outils qui permettent de manipuler le téléphone ou la tablette, de la simuler par une machine virtuelle, de créer des fichiers APK - les fichiers de paquet d'Android, de déboguer les applications et d'y ajouter une signature numérique. Ces outils sont mis à disposition sous la forme d'un plugin pour l'environnement de développement Eclipse[22].

Utilisation[modifier | modifier le code]

[37]

Après l'introduction d'un code personnel (exemple: code PIN), les appareils équipés d'Android affichent un écran d'accueil qui sert de point de départ à partir duquel l'utilisateur peut accéder aux applications. Le contenu de cet écran peut être librement personnalisé par l'utilisateur et est souvent personnalisé par les fabricants[réf. nécessaire]; il se comporte comme une pile de feuilles qui peuvent être glissées l'une sur l'autre avec le doigt. En haut de l'écran d'accueil se trouvent différents icônes d'avertissement et d'état qui permettent par exemple de contrôler le niveau de la batterie et la disponibilité des réseaux[24].

Depuis cet écran d'accueil, une icône permet à l'utilisateur d'accéder à l'écran de launcher: sur cet écran est affiché la liste de toutes les applications installées dans l'appareil, que l'utilisateur pourra éventuellement ajouter à l'écran d'accueil. Lorsqu'une application est exécutée, l'écran de l'application sera affiché en lieu et place de l'écran d'accueil et un bouton permet à l'utilisateur d'y revenir[24].

Les gestes reconnus par l'écran tactile des appareils Android sont: toucher l'écran, enfoncer (toucher et maintenir le doigt en contact avec l'écran), déplacer (enfoncer, puis déplacer le doigt en restant en contact avec l'écran), glisser (déplacer le doigt en contact avec l'écran sans s'arrêter), double frappe (toucher deux fois de suite un dessin à l'écran dans un délai très court), pincer (mettre deux doigts en contact avec l'écran, puis les rapprocher) et tourner l'écran (changer la position du téléphone, le poser sur le dessus ou sur le coté)[24].

Lorsque l'utilisateur doit entrer un texte, Android affiche en bas de l'écran le clavier virtuel - une simulation d'un clavier d'ordinateur. Ce clavier comporte une fonction de copier-coller ainsi que de reconnaissance vocale - qui permet à l'utilisateur de dicter le texte par oral plutôt que de se servir des touches[24].

Android comporte une quinzaine d'applications incorporées parmi lesquelles il y a l'application téléphone, qui permet d'émettre ou de recevoir des appels téléphoniques, les applications contact et accounts, qui sont deux carnet d'adresses, deux applications Gmail et Mail permettant d'envoyer et de recevoir du courrier électronique, Calendar - un agenda sur lequel l'utilisateur peut inscrire des événements et être rappelé le moment venu, une application de messagerie instantanée utilisant le service Google Talk, l'application Messaging pour envoyer des messages SMS ou MMS[24].

Android comporte également un navigateur web, une application pour consulter des cartes géographiques, une application pour prendre des photos et des vidéos, ainsi que consulter les photos et vidéos enregistrées dans l'appareil, une application pour accéder au service d'hébergement de vidéos YouTube, une application pour écouter de la musique, des applications pour accéder aux nouvelles, à la météo, ainsi qu'une horloge et une calculatrice[24].

Android comporte une application incorporée pour accéder au magasin en ligne Google Play, acheter, télécharger et installer des applications pour Android, ainsi qu'une application Settings permettant à l'utilisateur d'effectuer différentes opérations de maintenance et de configuration de l'appareil: activer ou non l'exploitation des réseaux Wifi et Bluetooth, changer le volume et la mélodie de la sonnerie, désinstaller des applications, formater les cartes mémoire, modifier la disposition du clavier virtuel, régler l'heure, ou obtenir des informations techniques telles que la version d'Android et le numéro de série de l'appareil[24].

et encore[modifier | modifier le code]

[38]

[39]

  • Android 1.0 est paru en 2008.
  • Android 1.6 est sorti en septembre 2009, et de nombreux appareils équipés de ce système d'exploitation ont été lancés à la fin de cette année.
  • Android 3.0 était destiné aux tablettes. Lors de sa sortie les tablettes étaient équipées de Android 3.0 et les téléphones continuaient d'utiliser la version 2. Une situation qui a duré jusqu'à la sortie de Android 4.0.

Les appareils mobiles contemporains de 2011 ont la puissance de calcul d'un ordinateur personnel de dix ans avant[25].

La majorité, voire la totalité des applications sont exécutées par la machine virtuelle Dalvik[26].

Le framework d'Android permet la création d'interfaces graphiques selon un procédé similaire aux frameworks de quatrième génération que sont XUL, JavaFX ou Silverlight: l'interface graphique peut être construite par déclaration et peut être utilisée avec plusieurs skins - chartes graphiques. La programmation consiste à déclarer la composition de l'interface dans des fichiers XML; la description peut comporter des ressources - des textes et des pictogrammes. Ces déclarations sont ensuite transformés en objets tels que des fenêtres et des boutons, qui peuvent être manipulés par de la programmation Java[27]. Les écrans ou les fenêtres (activités dans le jargon d'Android), sont remplis de plusieurs vues; chaque vue étant une pièce d'interface graphique (bouton, liste, case à cocher, ...). Android 3.0, destiné aux tablettes, introduit la notion de fragments: des panneaux contenant plusieurs éléments visuels. Une tablette ayant - contrairement à un téléphone - généralement suffisamment de place à l'écran pour plusieurs panneaux[28].

Android et Linux[modifier | modifier le code]

[40]

[41]

Le noyau Linux est utilisé pour les fondations d'Android, pour les services classiques des systèmes d'exploitation: utilisation des périphériques, accès aux réseaux de télécommunication, manipulation de la mémoire et des processus et contrôle d'accès. Il s'agit d'une branche du noyau Linux 2.6, modifiée en vue de son utilisation sur des appareils mobiles. De cette branche ont été retirés le X Window System, les outils de GNU, ainsi que plusieurs fichiers de configuration qui se trouvent d'ordinaire dans les distributions Linux. L'équipe de développement d'Android a apporté de nombreuses améliorations au noyau Linux, et la décision a été prise par la communauté de développement de Linux d'incorporer ces améliorations dans le noyau Linux 3.3[29].

Couche d'abstraction matérielle[modifier | modifier le code]

En informatique une couche d'abstraction matérielle (abr. HAL pour Hardware Abstraction Layer) est un logiciel intermédiaire entre le système d'exploitation et le matériel informatique. Elle offre des fonctions banalisées de manipulation du matériel informatique tout en cachant les détails techniques de la mise en oeuvre.

De nombreux producteurs de système d'exploitation incluent une couche d'abstraction matérielle dans leurs produits. C'est une pièce de logiciel importante dans les systèmes d'exploitation portables - susceptibles d'être utilisés sur différents types de matériel: en cas de portage seule la couche d'abstraction matérielle nécessite adaptation.

Fonctionnalités[modifier | modifier le code]

Une couche d'abstraction matérielle comporte une interface de programmation qui fournit des fonctions génériques[30] et banalisées de manipulation du matériel informatique[31] en cachant les détails techniques du fonctionnement du matériel[32]. Ce qui permet à un logiciel d'interagir avec le matériel informatique en faisant abstraction des détails technique du matériel[32].

La couche d'abstraction matérielle est la plus basse couche de logiciel, totalement dépendante du matériel, proche des pilotes et du coeur du système d'exploitation[33],[34]. Elle offre des fonctions qui permettent par exemple la mise en oeuvre de la commutation de contexte, de la synchronisation, la manipulation des interruptions, la prise en compte de l´endianness du processeur utilisé[32], la manipulation l'horloge système ou l'unité de gestion mémoire[33]. Chaque fonction contient les instruction permettant de la mettre en oeuvre sur un certain type de matériel[30].

C'est une pièce importante des systèmes d'exploitation portables, susceptibles d'être utilisés sur différents types de matériel[32]. Elle améliore la portabilité du système d'exploitation[33]: si un tel système doit être adapté en vue d'être utilisé sur un nouveau type de matériel, la couche d'abstraction matérielle est alors la seule pièce de logiciel qui nécessite adaptation[30].

Exemples[modifier | modifier le code]

De nombreux producteurs de système d'exploitation incluent une couche d'abstraction matérielle dans leur produits. La construction de la couche d'abstraction matérielle est propre à chaque producteur[34].

Le système d'exploitation eCos comporte une couche d'abstraction matérielle sous la forme d'une suite de macros en langage de programmation C ou assembleur, qui sont adaptées en fonction des caractéristiques du matériel[32].

La famille de système d'exploitation Windows NT comporte une couche d'abstraction matérielle. Il existe 5 modèles différents; lors de l'installation du système d'exploitation, celui-ci installe automatiquement le modèle le mieux adapté au matériel de l'ordinateur[31].

[42]

[43]

[44]

[45]

[46]

Windows HAL [47]

[48]

[49]

Cloud computing[modifier | modifier le code]

Cloud computing est un néologisme pour désigner une nouvelle manière de fournir et d'utiliser les aptitudes des systèmes informatique basé sur un nuage (anglais cloud), c'est-à-dire un parc de machines, d'équipement de réseau et de logiciels. Le nuage est sous la responsabilité du fournisseur qui en dissimule les détails techniques, et le consommateur peut disposer des aptitudes du nuages qui sont mises en self-service, disponibles via Internet et payées à l'usage[35],[36],[37]. Les grandes enterprises du secteur informatique telles que IBM, Microsoft, Google, Dell et Sun soutiennent massivement le cloud computing[38] qui est parfois considéré comme un important changement des systèmes informatiques et fait l'objet d'un certain battage médiatique[35].

Le self-service permet aux utilisateurs de consommer de la puissance informatique quand ils en ont besoin[38].

Principes - le nuage[modifier | modifier le code]

Un nuage (anglais cloud) est un ensemble de matériel, de connexions réseau et de logiciels[37] qui fournissent des services sophistiqués que les individus et les collectivités peuvent exploiter à volonté depuis n'importe où dans le monde[35]. Le cloud computing est une basculement de tendance: un passage de la production maison d'aptitudes par l'acquisition de matériel et de logiciel, vers l'utilisation d'une aptitude qui est un service fourni par des tiers et mis à disposition via Internet[35]. De la même manière que quelqu'un qui doit transporter un meuble et qui n'a pas de véhicule peut en acquérir un ou faire appel à une entreprise de transport, quelqu'un qui a besoin de capacité de stockage informatique peut soit acquérir un disque dur soit faire appel à une société qui offre un service de stockage[39].

Les caractéristiques essentielles d'un nuage sont la disponibilité mondiale en self-service, l'élasticité, l'ouverture, la mutualisation et le payement à l'usage:

  • ressources en self-service, et adaptation automatique à la demande. La capacité de stockage et la puissance de calcul sont adaptées automatiquement au besoin d'un consommateur. Ce qui contraste avec la technique classique des hébergeurs où le consommateur doit faire une demande écrite à son fournisseur en vue d'obtenir une augmentation de la capacité - demande dont la prise en compte nécessite évidemment un certain temps. En cloud computing la demande est automatique et la réponse est immédiate[39].
  • ouverture. Étant des commodités publiques, les services de cloud computing sont mis à disposition sur l'Internet, et utilisent des techniques standardisées qui permettent de s'en servir aussi bien avec un ordinateur qu'un téléphone ou une tablette[39].
  • mutualisation. Les ordinateurs disponibles dans le cloud peuvent être regroupés pour former des puissants systèmes, qui apparaissent comme un seul appareil imaginaire - virtuel. Ce procédé est inspiré des grilles informatique. Le regroupement des appareils est automatique, invisible pour l'utilisateur, et lui donne l'impression d'un système où les ressources sont illimitées[39]. La mutualisation permet de combiner des ressources hétérogènes (matériel, logiciel, trafic réseau) en vue de servir plusieurs consommateurs à qui les ressources sont automatiquement attribuées[38]. La mutualisation améliore la la scalabilité et l'élasticité et permet d'adapter automatiquement les ressources aux variations de la demande[38].
  • payement à l'usage: la quantité de service consommée dans le cloud est mesurée, à des fins de contrôle, d'adaptation des moyens techniques et de facturation[38].

Un nuage peut être public, privé ou communautaire. Un nuage public est mis à disposition du grand public. Les services sont typiquement mis à disposition par une entreprise, qui manipule une infrastructure qui lui appartient[39]. Un nuage privé est destiné exclusivement à une organisation, qui peut le manipuler elle-même, ou faire appel à services fournis par des tiers[39]. Dans un nuage communautaire l'infrastructure provient d'un ensemble de membres qui partagent un intérêt commun. Ce type de nuage est semblable à ceux montés par les milieux académiques pour des études de grande envergure[39].

Les nuages utilisent des technologies telles que la virtualisation du matériel informatique, les grilles, l'architecture orientée services et les services web[35].

Le nom cloud computing est né des professionnels de l'informatique qui recherchaient une désignation pour les nouveaux systèmes informatiques fonctionnant par l'action conjointe d'éléments disparates réunis indifféremment de leur localisation géographique et de l'infrastructure sous-jacente. Le nom vient du nuage - en anglais cloud - qui est le symbole utilisé pour représenter l'Internet dans les diagrammes des réseaux informatique[39].

Caractéristiques[modifier | modifier le code]

Selon le National Institute of Standards and Technology il existe trois catégories de services qui peuvent être offerts en cloud computing[39].

  • infrastructure as a service: c'est le service de plus bas niveau. Il consiste à offrir un accès à une infrastructure virtualisée. Des machines virtuelles sur lesquelles le consommateur peut installer un système d'exploitation et des applications. Le consommateur est ainsi dispensé du coût d'achat de matériel informatique et des tracasseries administratives qui l'accompagnent. Ce service s'apparente aux services d'hébergement classiques des centre de traitement de données, et la tendance est en faveur de services de plus haut niveau, qui font abstraction de davantage de détails techniques[39].
  • platform as a service. Dans ce type de service, situé juste au dessus du précédent, le système d'exploitation et les outils d'infrastructure sont sous la responsabilité du fournisseur. Le consommateur a le contrôle sur les applications et peut ajouter ses propres outils. La situation est analogue à celle de l'hébergement web où le consommateur loue l'exploitation de serveurs sur lesquels les outils nécessaires sont préalablement placés et contrôlés par le fournisseur. La différence étant que les systèmes sont mutualisés et offrent une grande élasticité - capacité de s'adapter automatiquement à la demande, alors que dans une offre classique d'hébergement web l'adaptation fait suite à une demande formelle du consommateur[39].
  • software as a service. Dans ce type de service des applications sont mises à disposition des consommateurs. Les applications peuvent être manipulées à l'aide d'un navigateur web, et le consommateur n'a pas à de soucier d'effectuer des mises à jour, des patches de sécurité et d'assurer la disponibilité du service. Gmail est un exemple de tel service. Il offre au consommateur un service de courrier électronique et le consommateur n'a pas à se soucier de la manière dont le service est fourni[39].

Un fournisseur de software as a service peut exploiter des services de type platform as a service, qui peut lui-même se servir de infrastructure as a service[35].

les caractéristiques inhérentes au cloud computing qui sont intéressantes pour les entreprises sont la réduction du coût total de possession des systèmes informatique, la facilité d'augmenter ou de diminuer les ressources. Le recours au cloud computing permet de décharger les équipes informatique des entreprises, qui alors plus de disponibilité pour des activités à haute valeur ajoutée pour l'entreprise. Le cloud computing permet également aux petites entreprises d'avoir accès à des services qu'ils n'ont pas les moyens d'obtenir autrement, ce qui les places à pied d'égalité avec des grandes entreprises[38].


[50]

[51]

[52]

[53]

[54]

[55]

[56]

interface de programmation[modifier | modifier le code]

En informatique une interface de programmation (abr. API pour Application Programming Interface) est une façade formalisée par laquelle un logiciel offre des services à d'autres logiciels. Une interface de programmation est typiquement composée de classes, des méthodes ou des fonctions offertes par une bibliothèque logicielle ou un service web, ainsi qu'une description qui spécifie comment des programmes consommateurs peuvent se servir des fonctionnalités du programme fournisseur de l'interface de programmation.

Dans l'industrie du logiciel contemporaine, les applications informatiques se servent typiquement de nombreuses interfaces de programmation, réutilisant des briques de fonctionnalités fournies par des logiciels tiers. Cette construction par assemblage nécessite pour le programmeur de connaître la manière d’interagir avec les autres logiciels, qui dépends de leur interface de programmation. Le programmeur n'a pas besoin de connaître les détails de la logique interne du logiciel tiers, et celle ci n'est généralement pas documentée par le fournisseur.

Des logiciels tels que les systèmes d'exploitation, les systèmes de gestion de base de données, les langages de programmation, ou les serveurs d'applications comportent typiquement une interface de programmation.

définition[modifier | modifier le code]

introduction[modifier | modifier le code]

Une interface de programmation est une façade clairement délimitée par laquelle un logiciel offre des services à d'autres logiciels[40]. L'objectif est de fournir une porte d'accès à une fonctionnalité en cachant les détails de la mise en œuvre[40]. Une interface de programmation comporte typiquement des classes, des méthodes ou des fonctions, des types de données et des constantes[40]. Une interface de programmation est typiquement mise en œuvre par une bibliothèque logicielle qui fournit une solution à un problème informatique en faisant abstraction de son fonctionnement[40].

La description de l'interface de programmation spécifie comment des clients peuvent interagir avec un logiciel[40] en mettant l'accent sur les fonctionnalités offertes par le logiciel et en cachant les détails de son fonctionnement[40]. Une interface de programmation peut être utilisée dans de nombreux programmes et sert alors de jeu de construction, offrant des pièces de fonctionnalités qui peuvent être incorporées dans des applications[40]. Les programmeurs créent des interfaces de programmation pour les autres programmeurs, pour l'industrie informatique, mais aussi parfois pour leur propres besoins[40].

Utilisation[modifier | modifier le code]

La création et l'utilisation des interfaces de programmation est un sujet incontournable de la programmation contemporaine[40]. Une application se sert typiquement de nombreuses interfaces de programmations; mises en œuvre par des bibliothèques logicielles qui peuvent elles-mêmes se servir d'autres interfaces de programmation[40].

En cloud computing les applications peuvent dépendre de fonctionnalités tierces offertes par des logiciels via des interfaces de programmation mises en œuvre par des services web[40].

Les interfaces de programmation permettent de gagner du temps par la collaboration et la spécialisation des équipes de développement de logiciel. Par exemple aujourd'hui plus personne n'écrit un SGBD maison pour une application informatique. Les programmeurs réutilisent les SGBD existants dans le commerce, fournis par des entreprises spécialisées dans ce type de produit, et se concentrent sur la logique propre à leur application. De nombreux produits d'infrastructure sont ainsi disponibles sous forme de framework ou de bibliothèque[41].

Une interface de programmation permet par exemple à un programme d'accéder aux services offerts par le système d'exploitation qui héberge le programme. l'interface sockets est un exemple classique d'interface de programmation qui permet à un programme d'exploiter les possibilités de la couche réseau du système d'exploitation[42].

Une des interfaces les plus connues est la Windows API. C'est une collection de fonctions, de types de données et de constantes, en langage de programmation C, qui permet à des programmeurs de créer des applications pour les systèmes d'exploitation Windows. Elle offre la possibilité de manipuler des fichiers, des processus, communiquer par les réseaux et manipuler des interfaces graphique[40].

le business[modifier | modifier le code]

Dans l'industrie du logiciel contemporaine, les applications informatique se servent typiquement de nombreux logiciels tiers tels que par exemple un système d'exploitation, des bibliothèques standard, des serveurs d'application. Chacun de ces produits a sa propre interface de programmation. Ainsi chaque programmeur impliqué dans le développement de tels produits est impliqué, consciemment ou non, dans le business des interfaces de programmation[41]. Du point de vue business une interface de programmation est un contrat par lequel un fournisseur de fonctionnalité décrit son offre, les fonctionnalités qu'il offre et les éventuelles limitations[43].

La construction par assemblage de logiciels nécessite pour le constructeur de savoir comment les pièces interagissent entre elles. Le constructeur n'a pas besoin de connaitre tout les détails des mécanismes internes d'une pièce, du moment qu'il connait son interface de programmation[41]. L'interface de programmation est le minimum qu'un programmeur a besoin de connaitre pour pouvoir se servir d'une pièce de logiciel tierce. Pour une fonction c'est le nom de celle-ci, les paramètres et le type du résultat, ainsi que les effets observables de la fonction[44].

Une interface de programmation est distribuée sur le marché comme un produit logiciel ordinaire, régulièrement amélioré. La mise en oeuvre des fonctionnalités utilisables à travers l'interface de programmation peut changer régulièrement, tout en maintenant la façade conforme au contrat[43].


[57]

[58]

[59]

[60]

[61]

Bibliothèque logicielle[modifier | modifier le code]

définition[modifier | modifier le code]

En informatique une bibliothèque logicielle est une collection de fonctions compilée et prête à être utilisée par des programmes[45],[46]. Les bibliothèques sont enregistrées dans des fichiers semblables, voire identique au fichiers de programmes[47], sous la forme d'une collection de fichiers de code objet rassemblés[46] accompagnée d'un index permettant de retrouver facilement chaque fonction[47].

Les bibliothèques sont apparues dans les années 1950, et sont devenues un sujet incontournable de programmation. Elles sont utilisées pour réaliser des interfaces de programmation, des framework ou des plugins. Les fonctions contenues dans les bibliothèques sont typiquement en rapport avec des opérations fréquentes en programmation: manipulation des interfaces utilisateur, la manipulation des bases de données ou les calculs mathématiques[46].

Utilisation[modifier | modifier le code]

En informatique une fonction est un ensemble d'instructions qui prends en charge une certaine opération et produit un résultat[48]. Les bibliothèques sont apparues dans les années 1950, sous la forme d'un magasin contenant des rouleaux de bande magnétique sur lesquels étaient enregistrés des routines - fonctions[47]. Les programmeurs pouvaient choisir les bandes magnétiques à utiliser dans leurs programmes[47].

Les bibliothèques sont utilisées pour mettre en œuvre des interfaces de programmation (abr. API pour Application Programming Interface)[40].

  • Une interface de programmation est un ensemble documenté et standardisé de fonctions par lesquels un logiciel offre des services à d'autres logiciels. La documentation spécifie comment le logiciel consommateur peut interagir avec le logiciel fournisseur en utilisant des fonctions qui sont mises en œuvre dans une bibliothèque logicielle[40].

les fonctions d'une interface de programmation sont mises à disposition des programmeurs compilées et emballées sous la forme d'une bibliothèque logicielle[40]. Les interfaces de programmation sont un sujet incontournable de la programmation contemporaine et un logiciel se sert typiquement de nombreuses interfaces de programmation[40].

les bibliothèques logicielles sont utilisées pour mettre en oeuvre des framework. La différence essentielle entre les framework et les interfaces de programmation est que les interfaces de programmation comportent des fonctions qu'un programme va utiliser, tandis que les framework sont des bibliothèques qui se serviront des fonctions du programme[49].

Les bibliothèques logicielles sont également utilisées pour mettre en oeuvre des plugins. Dans ce cas une application recherche des fichiers additionnels qui lui permettent d'étendre ses fonctionalités. Cette technique est utilisée par exemple par les navigateurs web pour prendre en charge l'affichage d'animations ou de vidéos[40].

Le langage de programmation C s'utilise avec une bibliothèque standard qui contient une collection normalisée de fonctions permettant par exemple de manipuler des fichiers, d'écrire des textes, d'utiliser la mémoire, ou de faire des calculs[40].

Technique[modifier | modifier le code]

Les bibliothèques sont manipulées de manière différente par l'éditeur de liens et le système d'exploitation selon si elles sont statiques ou partagées. La manipulation se sert de la table de symboles créée par le compilateur.

bibliothèque statique

Une bibliothèque et dite statique si elle est destinée à être copiée dans les programmes qui l'utilisent lors de la construction de ces derniers[45]

bibliothèque partagée

Une bibliothèque est dite partagée si elle est destinée à être associées aux programmes au moment ou ils sont exécutés. Avec une telle bibliothèque, la même copie de la bibliothèque peut être utilisée par plusieurs programmes[45]

éditeur de liens

L'éditeur de liens est le programme qui combine différents fichiers de code objet, parmi lesquels des bibliothèques, pour en faire un programme exécutable[50].

table de symboles

Une table de symboles est une structure manipulée par les compilateurs et les éditeurs de liens, qui contient les noms d'éléments du programme (fonctions, variables, constantes), ainsi que leur adresses, c'est-à-dire leur emplacement dans le programme[50]. La table de symboles produite par le compilateur est utilisée ensuite par l'éditeur de liens pour déterminer l'emplacement des fonctions qui se trouvent dans les bibliothèques[50].

fonction bouchon (anglais stub)

Une fonction bouchon f'() est une fonction ajoutée automatiquement à un programme qui ne fait rien d'autre que d'utiliser une fonction f() d'une bibliothèque partagée[50].

Le procédé[modifier | modifier le code]

Lors de la traduction d'un fichier de code source en code objet par un compilateur, celui-ci ajoute à la table de symboles les noms des fonctions utilisées dans ce fichier source ainsi que leur adresse[50]. L'adresse est laissée vide si la fonction n'a pas été trouvée dans le fichier de code source[50]. L'éditeur de liens recherchera alors à quoi corresponds chaque fonction dont l'adresse est laissée blanc par le compilateur[45].

S'il la fonction provient d'une bibliothèque dite statique, l'éditeur de liens copie l'intégralité de la bibliothèque dans le programme[45]. Le fichier de bibliothèque n'est alors plus nécessaire à l'exécution du programme[45]. La bibliothèque est ainsi copiée dans chaque programme qui l'utilise[45].

Si la fonction provient d'une bibliothèque partagée alors celle-ci n'est pas copiée dans le programme lors de la compilation, au lieu de cela la bibliothèque est placée en mémoire en même temps que le programme, immédiatement avant son exécution[45]. Une seule copie de la bibliothèque est enregistrée dans l'ordinateur[45]. Lorsque plusieurs programmes utilisant cette bibliothèque se trouvent en mémoire, ils utilisent tous la même copie de la bibliothèque, ce qui permet d'économiser de la place par rapport à une bibliothèque statique[45].

L'utilisation de bibliothèques partagées présente cependant certains risques. Le principal risque est qu'une bibliothèque utilisée par un programme ne peut pas être trouvée au moment ou le programme en a besoin, entraînant l'échec du programme[45]. Il arrive également parfois que l'interface de programmation de la bibliothèque qui a été trouvée ne corresponds pas à celle dont le programme a besoin, entraînant un crash de ce dernier[45].

Il est parfois nécessaire de recalculer l'adresse de chaque fonction après l'avoir ajoutée au programme[50] ou de créer des fonctions de bouchon.

Avec une bibliothèque statique, le recalcul des adresses est effectué par l'éditeur de liens immédiatement après la compilation. Tandis qu'avec une bibliothèque partagée il est effectué lors du chargement du programme en mémoire, immédiatement avant son exécution[51]. Le position independent code (abr. PIC) est un code objet produit par certains compilateurs, qui ne nécessite par de recalcul de ces adresses par l'éditeur de liens. Ce type de code est souvent utilisé pour les bibliothèques[50].

Lors de la création d'une fonction bouchon, l'éditeur de liens ajoute ensuite une entrée dans la table de symboles du programme pour informer que l'adresse de la fonction référencée doit être recalculée avant l'exécution du programme[50].

En pratique[modifier | modifier le code]

Lorsqu'un ou plusieurs programmes utilisent une bibliothèque dynamique, une seule copie du code et des ressources de cette bibliothèque est chargée en mémoire. La même fonction peut potentiellement être exécutée simultanément par plusieurs programmes et les variables globales peuvent potentiellement être modifiées simultanément[52].

Les noms des fichiers de bibliothèque partagées se terminent par .so sur Unix, .dylib sur Mac OS X et .dll sur Windows[40], et les emplacements conventionnels des bibliothèques diffèrent en fonction de la plateforme.

sur les systèmes d'exploitation Unix les bibliothèques sont en principe enregistrées dans les répertoires /lib ou /usr/lib. Une variable d'environnement LD_LIBRARY_PATH permet d'indiquer d'autres répertoires à prendre en compte par l'éditeur de liens. Le nom de chaque bibliothèque comporte les lettres lib et se termine par .a (bibliothèque statique) ou .so (bibliothèque partagée)[46]. Les bibliothèques statiques utilisent le format des fichiers d'archive[47]. Ce format, théoriquement destiné à stocker une collection de fichiers quelconques, est utilisé exclusivement pour les fichiers de bibliothèque[47].

Sur les systèmes d'exploitation Windows, les bibliothèques statiques ont format semblable au format d'archive des systèmes Unix, mais avec un index de construction différente[47]. Les noms des bibliothèques statiques se terminent par .lib tandis que les noms des bibliothèques dynamiques se terminent par .dll. Une bibliothèque statique peut également être une collection de bouchons relatifs à une bibliothèques dynamique. Les noms des bibliothèques dynamiques peuvent également se terminer par .ocx, .drv ou .cpl[40]. Les emplacements standard des bibliothèques sont les répertoires \Windows, ou \Windows\System, ainsi que le répertoire ou se trouve l'application qui utilise la bibliothèque. Une variable d'environnement permet d'indiquer au système d'exploitation d'autres répertoires éventuels[53].

Sur les systèmes d'exploitation Mac OS X les bibliothèques sont distribuées sous forme de framework: un répertoire dans lequel se trouve la/les bibliothèques ainsi que la documentation et les headers (description des fonctions dans un langage de programmation). La plupart des bibliothèques logicielles de Mac OS X (Cocoa, Carbon,...) sont distribuées sous cette forme[40]. Les bibliothèques sous forme de framework sont enregistrées dans le répertoire /System/Library/Frameworks, et les pilotes sont enregistrés dans le répertoire /System/Library/Extensions[54].

[62]

Programmer des bibliothèques fait partie des utilisations ordinaires des langages de programmation généralistes. Dans les premiers langages de programmation les fonctionnalités étaient délimitées par le lexique du langage. Les langages de programmation récents ont un lexique très réduit, et beaucoup de fonctionnalités sont apportées par des bibliothèques standard qui accompagnent le langage de programmation[55].

[63]

Deux qualités recherchées des fonctions des bibliothèques sont d'être thread-safe et/ou réentrantes.

  • réentrant signifie que la fonction continue de donner des résultats corrects quand elle est exécutée plusieurs fois simultanément.
  • thread-safe signifie que la fonction continue de donner des résultats corrects quand elle est exécutée simultanément par plusieurs threads.

L'utilisation simultanée par plusieurs programmes d'une fonction qui n'est pas thread-safe ni réentrante peut entrainer des pannes par situation de compétition (anglais race condition)[56].


[64]

[65]

[66]

[67]

[68]

Reentrant and thread-safe

[69]

[70]

[71]

library search on OS/400

[72]

[73]

[74]

[75]

[76]

[77]

[78]

Environnement de développement[modifier | modifier le code]

un environnement de développement est un ensemble d'outils pour augmenter la productivité des programmeurs qui développent des logiciels[57]. Ils comportent des fonctions qui permettent, par pression sur un bouton, de démarrer le compilateur ou l'éditeur de liens. Ils comportent également souvent un débogueur en ligne, qui permet d'exécuter ligne par ligne le programme en cours de construction[58]. Certains environnements sont dédiés à un langage de programmation en particulier[59].

Dans un environnement de développement intégré (abr. IDE pour integrated development environment) les outils sont prévus pour être utilisés ensemble (le produit d'un outil peut servir de matière première pour un autre outil)[57]. Les outils peuvent être intégrés dès le départ, c'est-à-dire qu'ils sont construits dans le but d'être utilisés ensemble. Il peut aussi s'agir d'un ensemble d'outils développés sans lien entre eux et intégrés à posteriori[60].

L'objectif d'un environnement de développement est d'augmenter la productivité des programmeurs en automatisant une partie des activités et en simplifiant les opérations. Les environnements de développement visent également à améliorer la qualité de la documentation en rapport avec le logiciel en construction[61]. Certains environnements de développement offrent également la possibilité de créer des prototypes, de planifier les travaux et de gérer des projets[61].

les outils CASE (computer aided software engineering) sont destinés à assister le travail d'ingénieur logiciel. Les outils CASE de haut niveau sont destinés à assister les opérations préliminaires à la programmation (analyse fonctionnelle et conception), tandis que les outils CASE de bas niveau sont destinés à aider la création du code source - les instructions du programme[57].

Depuis 1980 le développement et la maintenance de logiciels est partiellement automatisée à l'aide d'un lot d'outils - l'environnement de développement. Les outils des environnements de développement sont un sujet d'étude en génie logiciel - le savoir-faire en ingénierie du logiciel[61].

Environnement de développement intégré[modifier | modifier le code]

Un environnement de développement intégré est un ensemble d'outils destinés à programmer dans un langage donné, qui sont distribués ensemble. Il permet de manipuler les outils de programmation depuis une interface graphique simplifiée[62]. Il existe au moins autant d'environnements de développement intégré qu'il existe de langages de programmation et les IDE sont souvent dédiés à un langage donné. Un IDE comporte typiquement une interface graphique pour lancer les différents outils, un éditeur pour le code source, un compilateur, un débogueur[63] , ainsi que souvent un outil permettant de construire les interfaces graphiques des programmesErreur de référence : Paramètre invalide dans la balise <ref>. Visual Studio [64] et Eclipse sont des environnements de développement populaires[65].

Eclipse[modifier | modifier le code]

Eclipse


Eclipse est un environnement de développement intégré populaire qui permet notamment d'écrire, de compiler, d'exécuter et de déboguer des applications. Le débogueur permet d'exécuter le programme ligne par ligne et vérifier l'état des variables[66]. Eclipse permet, à partir d'une fenêtre principale Workbench d'accéder à différentes perspectives à partir desquelles le code source du programme peut être consulté et modifié[66]. Il peut être utilisé avec de nombreux langages de programmation, le plus couramment utilisé étant Java[67]. Il comporte des fonctions destinées à assister la création de constructions courantes du langage Java (packages, classes,...) ainsi qu'une fonction pour générer de la documentation[67].

Visual Studio[modifier | modifier le code]

[79]

Tools[modifier | modifier le code]

[80]

L'expression environnement de développement est apparue dans les années 1980, pour désigner un ensemble d'outils et de procédés destinés à assister et formaliser le travail de création de logiciels. L'objectif visé était de créer des outils qui assistent les développeurs dans tout les étapes de la réalisation du logiciel: définition, conception, programmation, test et maintenance. Ces outils tiennent également compte des différents rôles au sein d'une équipe de programmation: programmeur, manager, et responsable qualité[68].

Les premiers outils couvraient les étapes de programmation et de tests, tandis que sont apparus plus tard des outils couvrant également les étapes de définition et de conception. Cette nouvelle génération d'outils de développement, qui couvrent également les étapes préliminaires à la programmation et orientent le développeur vers les bonnes pratiques de génie logiciel a été appelée Computer Aided Software Engineering (abr. CASE), en français ingénierie logicielle assistée par ordinateur[68].

Un environnement de développement intégré comporte typiquement les outil nécessaires pour analyser, écrire, et déboguer un programme. Les différents outils ont un look and feel identique et peuvent être interconnectés. Par exemple il peut être possible d'ouvrir l'éditeur de texte ou le compilateur à partir du débogueur voire de modifier le code source en cours de débogage directement depuis le débogueur[69].

Un environnement de développement peut comporter un outil de création d'interface graphique. Tel outil permet au programmeur de gagner un temps significatif dans la construction de l'interface graphique de son programme. Jusqu'à l'arrivée de la technologie Java, de tels outils ciblaient toujours un système d'exploitation en particulier[69].

Un environnement de développement comporte souvent un outil pour réaliser automatiquement des tests[69].

Un environnement de développement comporte toujours un éditeur de texte incorporé, avec souvent la possibilité de le substituer par un autre éditeur. L'éditeur comporte typiquement des fonctions de mise en évidence alignées avec le langage de programmation: indentation automatique des blocs de code, marquage des délimiteurs (parenthèses ou accolades), et mise en évidence des mots clés du langage par de la couleur ou des caractères gras[69].

Un environnement de développement comporte souvent des outils d'analyse du code source. Par exemple un générateur de graphique qui permet d'obtenir le diagramme en arbre de l'utilisation d'une fonction du programme[69].

Un environnement de développement peut aussi comporter un moteur de recherche qui tient compte du langage de programmation: il permet par exemple de rechercher le nom d'une fonction en évitant les commentaires et les expressions littérales, et en se limitant au cadre d'un module ou d'une classe[69].

Un environnement de développement peut contenir des outils destinés à assister aux opérations préliminaires à la programmation, par exemple des outils de modélisation, ou d'analyse des exigences[69].

Un environnement de développement peut contenir un outil de contrôle de versions. Un tel outil permet à plusieurs programmeurs de travailler simultanément sur les fichiers de code source du programme[69].

Les environnements de développement intégré sont parfois issus d'outils qui offrent une seule et unique fonction et que leurs auteurs ont ensuite enrichis et fusionnés avec d'autres outils. Il peut s'agir d'outil de création d'interface graphique ou de manipulation de base de données[69].

[81] [82]

Visual Studio est un environnement de développement intégré commercialisé par Microsoft. Il permet de créer des programmes, les compiler et les exécuter. Depuis 2002 il est destiné à la création de programmes pour la plateforme Microsoft .NET dans les langages Visual Basic, C#, C++ et F#. Il permet de créer des applications Web. En plus du code source du programme, les pages web, ainsi que les feuilles de style et les documents XML peuvent être modifiés depuis Visual Studio. Il permet également de créer des interfaces graphiques et comporte un outil de contrôle de versions[70].


[83]

[84]

[85]

[86]

[87]

[88]

[89]

[90]

[91]

[92]

[93]

[94]

[95]

[96]

[97]

[98]

Dynamic Link Library[modifier | modifier le code]

DLL (pour dynamic link library) est l'extension de fichier la plus courante des bibliothèques logicielles de Windows et OS/2[71]. Les bibliothèques logicielles existent dans ces systèmes d'exploitation depuis 1985 et utilisent la technique des liens dynamiques (anglais dynamic link) pour permettre de les associer avec les programmes qui s'en servent[72].

La technique[modifier | modifier le code]

Les bibliothèques logicielles sont utilisées dans les applications de taille non négligeables. Un programme informatique est construit à partir d'un ensemble de fichiers source contenant des fonctions[72]. Certaines fonctions sont regroupées et placées dans des fichiers de bibliothèque. Une bibliothèque logicielle contient généralement un ensemble de fonctions autour du même sujet[73]. Une modification subséquente d'une de ces fonctions nécessite de re-créer de la bibliothèque sans qu'il soit nécessaire de re-créer la totalité de l'application[72].

La technique consiste ensuite à charger en mémoire les fichiers de bibliothèque en même temps que le programme qui les utilise[74]. Un programme - l'éditeur de liens - rends l'application opérationnelle en tissant des liens entre les différents fichiers[74].

Les bibliothèques peuvent être:

statique

une bibliothèque statique est incorporée dans un programme et l'édition de liens est effectuée pendant sa construction. Lorsqu'une bibliothèque statique est modifiée, chaque programme qui l'utilise doit être reconstruit pour incorporer les modifications[73].

partagée

une bibliothèque partagée n'est pas incorporée dans les programmes qui l'utilisent, mais est reliée à ces programme lors de leur chargement, c'est-à-dire immédiatement avant l'exécution du programme. Une bibliothèque partagée peut être utilisée par de nombreux programmes et une modification de la bibliothèque ne nécessite pas de reconstruction des programmes, du moment que l'interface de programmation de la bibliothèque ne change pas[73].

dynamique

les bibliothèques dynamiques sont identiques aux bibliothèques partagées, mais sont utilisées d'une manière différente. De telles bibliothèques sont reliées à l'application lorsque celle-ci en a besoin. Les programmes qui les utilisent comportent les instructions nécessaire au chargement et à la liaison[73].

Dans la technique de la liaison dynamique utilise par les DLL, l'opération de liaison est exécutée en deux temps: tout d'abord, au moment de la construction de l'application, l'éditeur de liens crée des connecteurs, puis au chargement - immédiatement avant l'exécution de l'application - les connecteurs sont reliés entre eux[74].

Les DLL sont au format COFF, également utilisé dans IBM AIX[75].

Dans Windows[modifier | modifier le code]

Les DLL sont une des fondations des systèmes d'exploitation Windows. les fonctions internes de Windows sont mises à disposition des programmes par des interface de programmation mises en oeuvre par des fichiers DLL[76] Les trois principales bibliothèques sont User32.dll - manipulation de l'interface utilisateur, GDI32.dll - manipulation des dispositifs d'impression et d'affichage, et Kernel32.dll - utilisation des fonctions du noyau de Windows concernant les fichiers et les processus. D'autres fichiers de Windows souvent utilisés en programmation sont comdlg32.dll, MAPI32.dll, netapi32.dll et winmm.dll[76]. Les fichiers DLL sont également utilisés pour de nombreuses extensions: pilotes, boîtes de dialogue, widgets, polices de caractères,..[77].

Windows offre la possibilité de détourner ou de subtiliser les fonctions des DLL. Outre des raisons légitimes, ces possibilités sont exploitées par des rootkit, qui injectent des fonctionalités à l'insu et contre le gré de l'utilisateur en subtilisant les DLL du système d'exploitation[78].

DLL hell - l'enfer des DLL[modifier | modifier le code]

La construction des DLL permet de facilement les remplacer pour y ajouter des nouvelles fonctions et améliorer les fonctions existantes. Il arrive cependant que le remplacement entraîne des modifications en profondeur des fonctions existantes, ce qui entraîne des pannes et un fonctionnement erroné des programmes qui l'utilisent. C'est une cause connue d'appels aux services techniques qui ont baptisé ce phénomène DLL hell - l'enfer des DLLs[79].

Lorsqu'un fichier DLL manque sur l'ordinateur de l'utilisateur, le lancement d'un programme qui s'en sert provoquera un message DLL Not found qui est d'aucune utilité pour l'utilisateur. Si la DLL existe mais n'est pas valable pour le programme, alors celui-ci n'a aucun moyen de le vérifier, ce qui peut entraîner des messages DynaLink error voire un crash du programme[80].

Une des causes du DLL hell est que Windows n'offre pas de mécanisme interne de contrôle de version - mécanisme qui garantis qu'un programme sera associé avec la bibliothèque pour laquelle il a été construit[75].

Un des moyens qu'ont les programmeurs de lutter contre le DLL hell est de charger explicitement le fichier DLL: au lieu que le fichier est automatiquement chargé au lancement du programme qui l'utilise, le programme utilise la fonction LoadLibrary, qui charge le fichier si il existe[80].

[99]

OS/2 [100]

[101] [102]

Windows + OS/2 [103]

libraries [104]

DLL Hell [105]

implicit and explicit loading [106]

dll and windows [107]

rootkit and dlls [108]

library versionning [109]

[110]

[111]

Distribution de logiciels[modifier | modifier le code]

La distribution est l'action de mettre un logiciel à disposition des usagers. Les logiciels peuvent être distribués dans le commerce de détail, téléchargés en self-service, incorporés dans un appareil informatique, ou mis en ligne sur un ordinateur du fournisseur. La distribution peut être gratuite, peut faire l'objet de commerce et peut être complétée par des contrats de service tels que de la maintenance ou de l'assistance technique. En plus de la distribution publique, des techniques permettent la distribution automatisée de logiciels aux employés d'une entreprise.

Le droit d'auteur s'applique aux logiciels. La majorité des logiciels continuent d'appartenir à leur producteur après avoir été distribués. Un contrat de licence établi par le producteur fixe les droits accordés aux utilisateurs et les responsabilités du producteur. les conditions sous lesquelles un logiciel est distribué dépendent de choix stratégiques effectuées par leur producteur, en fonction de la nature du producteur (indépendant bénévole ou entreprise commerciale), de la fonctionnalité du logiciel, et de l'utilisateur cible.

Selon les modalités de distribution, l'utilisateur aura plus ou moins de possibilités de collaborer à l'amélioration et la correction du logiciel. Dans le procédé classique de développement d'un logiciel, celui-ci est distribué après avoir été programmé et vérifié. Il peut être distribué avant la fin des vérifications, et peut également être construit en plusieurs étapes donnant à chaque fois lieu à la distribution d'une version différente du logiciel. Le procédé de développement open source consiste à distribuer le logiciel avec le code source plus ou moins terminé, permettant au public de collaborer à sa programmation.

Canaux de distribution[modifier | modifier le code]

Les principaux canaux de distribution des logiciels sont la vente liée, la vente au détail, la vente de suites, le téléchargement, et l'hébergement.

vente liée (OEM pour Original Equipment Manufacturer)

Le producteur du logiciel conclut un accord avec un fabricant de matériel informatique pour incorporer le logiciel dans les produits du fabricant[81].

Vente au détail

Un média (exemple: CD) contenant le logiciel est convoyé par la grande distribution, le logiciel est ensuite installé dans l'ordinateur personnel de l'utilisateur final[82],[81]. Ce procédé est plus coûteux en raison du coût additionnel du média et du transport[82].

Fournisseur de solution

Le logiciel est un ensemble de différents produits provenant de fournisseurs tiers, et vendu ensemble comme un seul produit (anglais bundle)[81].

Suite

Groupée de plusieurs logiciels connexes provenant du même éditeur, distribués comme étant un seul produit[81].

téléchargement

Le logiciel est placé sur un site web, en self-service puis transporté en utilisant des moyens de télécommunication. Il est installé par l'utilisateur final dans son ordinateur[82],[81]. L'envoi ne nécessite pas d'intervention de l'éditeur. Ce procédé a été popularisé par l'avénement de l'Internet[82].

hébergement - logiciel en tant que service

L'éditeur du logiciel installe celui-ci sur un de ses ordinateurs, que l'utilisateur final peut manipuler avec un navigateur web[82],[81].

Une part importante de l'industrie concerne les logiciels en grande distribution: des logiciels standardisés destinés au grand public. Ceux-ci sont typiquement vendus dans le commerce de détail, mais peuvent également être distribués en ligne ou hébergés par le producteur[83].

Les vendeurs au détail sont typiquement des magasins grande surface, des magasins d'ordinateurs ou de matériel de bureau, ou des magasins spécialisés dans les logiciels[83].

Les fournisseurs de solutions sont typiquement des grandes enteprises de consulting ou des fabricants, et ils sont généralement spécialisés sur des produits verticaux[83].

La vente en ligne est généralement une vente directe - le producteur vends son produit directement au consommateur. Le producteur se sert de son propre site web. Il arrive parfois que le logiciel est placé sur le site web d'un revendeur. Ce procédé est moins coûteux que la grande distribution parce qu'il ne nécessite ni transport ni emballage. La vente directe élimine également les surcoûts dus à la marge de revente[83].

Selon un sondage réalisé en 2011 au Canada, les 3 quarts des producteurs de logiciels de ce pays ont affirmé pratiquer la vente en ligne. et pour 40% d'entre eux la vente en ligne est le principal canal de distribution. 17% distribuent leurs logiciels avant tout dans le commerce de détail et 4% pratiquent avant tout la vente liée OEM[83].

[112]

[113]

[114]

Distribution interne dans les entreprises[modifier | modifier le code]

Stratégie de revenu[modifier | modifier le code]

Les logiciels ont un coût unitaire de reproduction proche de zéro et peuvent être recopiés à l'infini sans perte de qualité[84].

la stratégie de revenu est la manière dont l'entreprise obtient de l'argent: la vente de licences et de services (exemple: formation), les parts sur la vente de matériel informatique, sur des logiciels tiers qui utilisent le produit de l'entreprise ou sur l'exploitation de ce logiciel par des entreprises de télécommunication, ainsi que la location du logiciel avec payement proportionnel à la durée d'utilisation[85].

Les principales stratégies pour gagner de l'argent des entreprises du secteur du logiciel sont notamment[86]:

  • la vente de licences de logiciels. Similaire à la vente de produits dans d'autres secteurs industriels.
  • la conclusion de contrats d'après-vente. Par exemple des contrats de maintenance ou d'assistance technique.
  • l'incorporation de logiciels dans des produits qui nécessitent à la fois matériel et logiciel.
  • la vente de services de développement de logiciels.
  • la vente de services d'utilisation de logiciels. Par exemple des services de gestion de données ou de consulting sur des logiciels particuliers.
vente de licences

Dans le langage courant les mots vente et achat sont souvent associés avec les logiciels[86]. Cependant les logiciels ne sont jamais vendus, mais sont l'objet d'un contrat de licence d'utilisation. Le logiciel reste la propriété du producteur, et ce dernier autorise le consommateur de s'en servir pendant un certain temps - parfois une durée indéterminée. Le droit d'utilisation est souvent intransmissible[86]. Les licences peuvent être vendues à l'utilisateur final ou à un revendeur. Elles peuvent également être vendues à un autre producteur de l'industrie informatique, lui donnant le droit d'inclure le logiciel dans ses produits (du matériel informatique ou des logiciels)[86]. La vente à des producteurs de logiciels est souvent utilisé pour les bibliothèques logicielles[86].

contrats d'après-vente et de maintenance

Il s'agit de contrats de service soit sur place, soit par téléphone, qui sont en rapport avec l'utilisation du logiciel[86]. Les contrats durent en généralement quelques mois voire un an et sont renouvelables[86]. Les contrats d'après-vente sont une importante source de revenus pour les producteurs parce qu'ils permettent d'obtenir de l'argent des clients existants[86]. Les services fournis dans le cadre de tels contrats sont typiquement la correction de bugs et des améliorations du produit sur demande du client[86].


[115]

Droit d'auteur et licence[modifier | modifier le code]

Mis à part les logiciels maison créés par les collectivités pour leur propre usage, et les logiciels dans le domaine public, tout les logiciels sont protégés par le droit d'auteur, y compris les logiciels libres / open source[81]. Selon les règles de ce droit, l'auteur du logiciel a tout les droits sur son oeuvre et le public a uniquement les droits que l'auteur leur a formellement accordés. La licence est le contrat qui décrit les droits accordés aux utilisateurs des logiciels. La licence prends la forme d'un document, accompagnant chaque copie du code objet mis en circulation, dans lequel sont décrit les conditions sous lesquelles peut être utilisé le logiciel[87]. Les licences sont typiquement classifiées en fonction des modalités de distribution des logiciels[81].

Les contrats de licence peuvent être limités dans le temps ou non (exemple: renouvellement annuel)[81]. Les clauses du contrat de licence peut stipuler des limitations d'application: nombre de machines, nombre d'utilisateurs, limitation à une seule entreprise, un seul emplacement géographique, possibilités d'achat en gros, et possibilité de disposer du code source du logiciel[81].

Les logiciels peuvent comporter des mécanismes visant à vérifier si les conditions du contrat de licence sont respectées[81].

Positionnement sur le marché[modifier | modifier le code]

la stratégie de produit est la manière dont est composée l'offre en produits et/ou services d'un fournisseur: produits standards susceptibles d'être re-utilisés par d'autres entreprises du secteur, produits personnalisables, personnalisation de produits tiers ou agréation de produits sous forme de solutions[85]. Cette stratégie dépends du positionnement de l'éditeur sur le marché: est-il un fournisseur de produits ou fournisseur de services? ses produits sont-ils destinés à des entreprises ou des privés? visent-ils un marché de masse ou un marché de niche ? les logiciels sont-ils horizontaux (polyvalents) ou verticaux (spécialisés) ?[88] et quel est leur degré de standardisation - les deux extrêmes étant le logiciel standard et le logiciel spécifique:

logiciel spécifique

logiciel créé sur mesure et qui vise à répondre aux besoins spécifiques d'un utilisateur en particulier. De tels logiciel peuvent être développés par des éditeurs, ainsi que par le département informatique des entreprises qui l'utilisent[84].

logiciel standard

Un logiciel standard vise à répondre au dénominateur commun des besoins des utilisateurs. Il est destiné à être distribué en grande quantité sur le marché de masse[84].

Il n'existe pas de distinction formelle entre un logiciel standard et un logiciel spécifique. Les logiciels standard offrent généralement des possibilités d'adaptation aux besoins spécifiques de certains utilisateurs. Cependant étant donné le coût élevé de telles opérations de customization, et les difficultés qu'elles peuvent apporter, celles-ci sont souvent réduites au minimum[84].

Un éditeur fournisseur de produits les distribuera typiquement sur des CD-ROM vendus dans le commerce de détail. Il existe des société hybrides qui vendent à la fois des produits et des services, par exemple de la maintenance, des mises à jour et des améliorations sur mesure[88].

Procédés des développement[modifier | modifier le code]

Techniquement, un logiciel existe sous deux formes: le code source, qui est la forme exprimée par le programmeur, et le code objet ou code exécutable qui est la forme finale dans laquelle le programme peut être exécuté[87].

Lorsque le logiciel est distribué sous une licence conventionnelle, seule la forme exécutable est mise en circulation, et la licence concerne uniquement cette forme. La licence de tels produits interdit généralement le recours à l'ingénierie inverse qui permet de retrouver le code source[87].

Lorsqu'une copie du code source est mise en circulation, il est techniquement impossible d'imposer le respect de la propriété intellectuelle[84].

open source[modifier | modifier le code]

Lorsqu'un logiciel est distribué sous une licence dite open source, les termes de la licence autorisent l'inspection et la modification du code source par autrui, et le code source est mis en circulation avec le code objet. L'objectif de telles licences est de promouvoir le travail de développement collaboratif d'un bien commun, et d'empêcher une personne unique de prendre possession du code source[87].

Les logiciels open-source sont développés par des volontaires, souvent non rémunérés[84]. Le travail de développement s'arrête soit parce que les utilisateurs sont satisfait du produit, soit parce que les développeurs clés on perdu leur motivation[84]. Du point de vue de l'utilisateur final les logiciels open-source ont d'intéressant qu'ils sont gratuits[84]. Des entreprises commerciales participent également au développement open-source, notamment dans le but de vendre des services en rapport avec ces logiciels, d'intégrer ces logiciels dans des solution plus larges et de faire pression sur les concurrents[84].


[116]

[117]

[118]

[119]

[120]

[121]

[122]

[123]

[124]

[125]

[126]

[127]

[128]

[129]

[130]

Le marché du logiciel est fortement internationalisé: il peut être développé par des équipes disséminées à travers le monde, puis mis à disposition du monde entier immédiatement grace à Internet[84].

[131]

[132]

Une entreprise de l'industrie du logiciel organise son activité selon différents axes tels que la stratégie de produits, la stratégie de distribution, la stratégie de revenu et la stratégie de services[85]:

stratégie de produits

[133]

Vente de licences de logiciels[modifier | modifier le code]

définition[modifier | modifier le code]

Un logiciel commercial est créé et distribué dans le but de faire du profit, la plupart du temps par un éditeur de logiciels - une entreprise spécialisée dans ce type de produit[89]. L'acheteur paie la conclusion d'un contrat de licence par lequel le producteur lui accorde l'autorisation d'utiliser le logiciel. Le producteur reste le propriétaire du logiciel[90].

De tels logiciels sont la plupart du temps propriétaires, c'est-à-dire que l'acheteur n'a pas le droit de modifier ou de distribuer le logiciel[91].

L'argent récolté par la vente de contrats de licence sert au producteur pour couvrir les frais de recherche, de développement, de marketing et d'assistance technique liés au logiciel[92].

Les logiciels commerciaux existent depuis les années 1960[93]. En 2011 il existe 77'000 éditeurs de logiciels aux États-Unis, et la vente de contrats de licence est à l'origine de 75% du chiffre d'affaire de ces entreprises. Certains éditeurs de logiciels sont parmi les entreprises les plus grandes et les plus prospères au monde[93]. Le marché du logiciel open source apparu dans les années 1990 exerce une pression toujours plus forte sur le marché du logiciel commercial[94].

En droit[modifier | modifier le code]

En tant qu'oeuvre intellectuelle, les logiciels sont protégés dans de nombreux pays par les lois du droit d'auteur, qui s'appliquent également aux films et aux livres: sauf accord explicite, l'auteur est le seul a avoir le droit de modifier, de copier, de distribuer ou de vendre son logiciel[95]. La licence est le contrat par lequel l'auteur stipule les droits qu'il accorde à autrui[96]. Les logiciels peuvent également être protégés par des brevets[95].

Dans un logiciel commercial le payement amène à la conclusion d'un accord de licence entre l'acheteur et le producteur; un contrat qui donne le droit à l'acheteur se servir du logiciel[95]. Le contrat de licence autorise généralement l'utilisation par une seule personne à la fois, rendant illégal le fait de copier le logiciel pour le mettre à disposition de tiers[94]: Toute personne qui n'a pas payé pour utiliser un tel logiciel est susceptible d'être poursuivi en justice par le producteur[90].

Le piratage est un délit répandu dans le monde entier, qui touche le marché des logiciels commerciaux: des organisations de contrebande offrent des logiciels commerciaux à des utilisateurs sans qu'ils aient payés le contrat de licence qui leur donne le droit de s'en servir. La distribution de tels logiciels volés (aussi appelés warez) fait perdre de l'argent aux entreprises qui produisent des logiciels commerciaux: Le nombre de licences vendues pour un logiciel est inférieur au nombre de copies en circulation et peut devenir insuffisant pour couvrir les frais occasionnés par la construction du logiciel[97].

Certains logiciels commerciaux sont distribués en version d'essai et de démonstration: un tel logiciel peut être distribué et utilisé gratuitement mais certaines fonctions clés ont été retirées et le logiciel fonctionne souvent pendant une durée limitée à quelques jours; des limitations qui peuvent être supprimées par le payement d'une licence d'utilisation[95].

[134]

Histoire[modifier | modifier le code]

Les logiciels commerciaux existent depuis les années 1960[93]. En 2011 il existe 77'000 éditeurs de logiciels aux États-Unis, et la vente de contrats de licence est à l'origine de 75% du chiffre d'affaire de ces entreprises. Certains éditeurs de logiciels sont parmi les entreprises les plus grandes et les plus prospères au monde[93].

Les logiciels commerciaux sont devenus populaires en raison de leur coût modique par rapport à un logiciel spécifique, dont le coût est généralement excessif pour les petites organisations et les particuliers. Les producteurs de tels logiciels sont souvent spécialisés dans un domaine d'activité en particulier[98].

Les entreprises du secteur public ou privé développement souvent elle-mêmes des logiciels spécifiques. L'acquisition d'un logiciel commercial est alors une alternative intéressante: Un logiciel commercial peut être obtenu plus rapidement et à moindre coût qu'un logiciel spécifique, et nécessite moins de connaissances techniques. Si le logiciel commercial est populaire, il a déjà été éprouvé en terme de fiabilité et de performance et il est possible d'obtenir de l'aide d'autres entreprises[99].

Le code source - le texte original du logiciel - d'un logiciel commercial est souvent considéré comme la trésor du producteur, qui le garde à l'abri de la concurrence, et ne le met pas à disposition de l'utilisateur final, contrairement à un logiciel open source[92].

Les logiciels open source sont considérés comme l'opposé des logiciels commerciaux[96]. Ils sont devenus populaires suite au succès du projet Linux dans les années 1990. Dans les logiciels open source, le code source du logiciel est mis à disposition du public, rendant possible d'être revu et amélioré collectivement par des programmeurs indépendants. De tels logiciels sont souvent mis à disposition gratuitement ou à faible coût, mais peuvent également faire l'objet de vente de licences. Linux, un des plus célèbres logiciels open source, est également disponible comme logiciel commercial[94]. La licence des logiciels open source autorise d'examiner, de modifier et de redistribuer le code source[96].

Dans les années 2000 le marché du logiciel open source est en croissance régulière, et la qualité, la richesse et le coût généralement bas fait une pression toujours plus forte sur le marché du logiciel commercial. Des collectivités, déçues par les coûts plus élevés et la qualité inférieure des logiciels commerciaux, notamment ceux de Microsoft, les abandonne au profit de produits open source bon marché tels que Linux[94].

Le marché[modifier | modifier le code]

Bien que plus restrictifs que les logiciels libres, les logiciels commerciaux restent populaires pour diverses raisons: les logiciels commerciaux s'intégrent souvent bien avec d'autres logiciels commerciaux. L'utilisation est souvent standardisée par producteur, ainsi un utilisateur avisé avec un produit d'un certain producteur trouvera facilement ses repères avec les autres produits de ce producteur. Les logiciels commerciaux offrent souvent de nombreuses possibilités de configuration qui permettent une personalisation du logiciel malgré l'absence du code source. Les logiciels commerciaux sont typiquement distribués avec une robuste documentation, et un service d'assistance technique facile d'accès[37].

Par rapport à un logiciel libre, la personnalisation d'un logiciel commercial peut cependant demander beaucoup d'effort et de temps. L'utilisation de logiciels commerciaux peut conduire l'utilisateur à des situation d'enfermement propriétaire, et le logiciel peut cesser d'être adapté et amélioré soudainement le jour où le producteur décide d'abandonner le produit. Les logiciel commerciaux utilisent souvent des formats de données propres au producteur, et les fichiers de ce format peuvent être manipulés uniquement avec les logiciels de ce producteur, rendant impossible leur manipulation une fois que le producteur a abandonné le logiciel[37].


[135]

[136]

[137]

[138]

[139] état du marché commercial vs open source.

[140]

[141]

[142] piratage

[143]

[144]

[145] Les éditeurs de logiciels existent depuis 1975

[146] [147]

[148]

Profil utilisateur[modifier | modifier le code]

[149]

Un profil utilisateur est un ensemble de données qui influencent le comportement d'un système informatique en fonction de l'utilisateur. Un profil peut être relatif à une personne seule, ou à un groupe de personnes ayant des points communs, tels que par exemple les membres d'un groupe de travail[100].

Les profils permettent par exemple d'autoriser l'accès à certains programmes réservés à un secteur de l'organisation (marketing, finance, ressources humaines). En vue de simplifier leur manipulation, de telles autorisations sont attribuées à des groupes de personnes plutôt qu'individuellement[100].

[150]

[151]

Dans les systèmes d'exploitation Windows, un profil utilisateur contient les réglages personnels appliqués à l'environnement de bureau pour cet utilisateur. Un administrateur système peut également créer des profils collectifs, applicables à un groupe de personnes. Les profils peuvent être mobiles (anglais roaming), dans quel cas ils seront appliqués sur chaque ordinateur que l'utilisateur manipule[101].

[152]

Les informations enregistrées dans le profil peuvent être par exemple les marque-page du navigateur web, les connexion au réseau, les réglage des imprimantes, les comptes e-mail ou les documents personnels[102].

[153] Idem dans l'environnement de bureau GNOME[103].

[154]

Dans le logiciel de base de données Oracle Database les profils utilisateurs permettent de limiter la quantité de ressources matérielles. Chaque profil peut être attribué à plusieurs utilisateurs, et permet par exemple de limiter l'utilisation du processeur, la durée des sessions ou la longueur des mots de passe[104].

[155]

Des travaux de recherche sont en cours en vue d'améliorer la pertinence des résultats donnés par les moteurs de recherche en fonction du profil utilisateur. Dans de telles applications le profil utilisateur contiendrait une table de de calculs des scores destinés à ajuster les résultats aux attentes d'un utilisateur: Le moteur de recherche affiche en premier lieu les résultats qui obtiennent le score le plus élevé[105].

[156] La création d'un ou de plusieurs profils utilisateurs est une des tâches de conception des interface utilisateur. Cette opération permet de faire la distinction entre les utilisateurs expérimentés et les novices, les utilisateurs réguliers ou occasionnels et ensuite adapter les caractéristiques de l'interface à ses usagers: interface simple à aborder, flexible, efficace, utilisation du clavier, etc.

[157]

Dans les ordinateurs centraux IBM AS 400, les profils utilisateurs sont utilisés par exemple pour définir les opérations autorisées à cet utilisateur, le premier programme qui lui est présenté et la langue des messages. Chaque profil utilisateur individuel peut être associé à un profil de groupe - profil collectif[106].

Base de données[modifier | modifier le code]

Définition[modifier | modifier le code]

Une base de données (anglais database) est un conteneur informatique permettant de stocker dans au même endroit l'intégralité des informations en rapport avec une activité. Une base de données permet de stocker ensemble des informations de plusieurs natures ainsi que les liens qu'il existe entre les différentes natures. La base de données contient en outre la description des caractéristiques de son contenu[107],[108].

Les données sont des renseignements bruts tels que des chiffres, des dates ou des mots, qui sont travaillés par des moyens informatique en vue de produire une information; Par exemple des chiffres et des noms assemblés et triés pour former un annuaire téléphonique[109].

Une base de données est la pièce centrale des dispositifs informatique qui servent à la collecte, le stockage, le travail et l'utilisation de données. Le dispositif comporte un système de gestion de base de données (abr. SGBD): un logiciel moteur qui manipule la base de données et dirige l'accès à son contenu. De tels dispositifs - souvent appelés base de données - comportent également des logiciels applicatif, et un ensemble de règles relatives à l'accès et l'utilisation des informations[108].

Les métadonnées décrivent les caractéristiques ainsi que les relations qui existent entre les différentes données (des renseignements bruts) qui peuvent être stockées dans la base de données. Parmi les caractéristiques il y a le nom ainsi que le type (texte, nombre, date) de chaque valeur qui pourra être enregistrée[108].

Une base de données est une structure qui permet de stocker différentes catégories d'informations ainsi que les relations entre les catégories stockées[110].

La technique[modifier | modifier le code]

Une base de données est un conteneur servant à stocker des données[108]: des renseignements bruts tels que des chiffres, des dates ou des mots, qui peuvent être retraitées par des moyens informatique en vue de produire une information; Par exemple des chiffres et des noms assemblés et triés pour former un annuaire téléphonique. Les retraitements sont typiquement une combinaison d'opérations de recherches, de choix, de tri, de regroupement, et de concaténation[109].

Une base de données est la pièce centrale d'un dispositif informatique dit système de base de données ou base de données tout court, qui régit la collecte le stockage, le retraitement et l'utilisation de données. Un dispositif qui comporte également un logiciel moteur (le SGBD), des logiciels applicatif, et un ensemble de règles relatives à l'accès et l'utilisation des informations[108].

Le système de gestion de base de données (abr. SGBD) est une suite de programmes qui manipule la structure de la base de données et dirige l'accès aux données qui y sont stockées. Il sert d'intermédiaire entre la base de données et ses usagers. La base de données est composées d'une collection de fichiers et le seul moyen d'accéder aux données est par l'intermédiaire du SGBD. Celui-ci receoit des demandes de manipulation du contenu et effectue les opérations nécessaires sur les fichiers. Il cache la complexité des opérations et offre une vue synthétique sur le contenu. Le SGBD permet en outre à plusieurs usagers de manipuler simultanément le contenu, et peut offrir différentes vues sur un même stock de données[108].

Le recours aux bases de données est une alternative au procédé classique de stockage de données, qui consiste à les placer dans des fichiers. L'utilisation d'une base de données en lieu et place de fichiers facilite le partage des informations, permet le contrôle automatique de la cohérence et de la redondance des informations, permet de limiter l'accès aux informations et permet de produire plus facilement des informations synthétiques à partir des renseignements bruts. La base de données aura de plus un effet fédérateur: dans une collectivité qui utilise une base de données, une personne unique - l'administrateur de bases de données, et chargée d'organiser le contenu de la base de données d'une manière qui soit bénéfique à l'ensemble de la collectivité, ce qui évite les conflits dûs à des intérêts divergents entre les membres de la collectivité[110].

Une base de données nécessite généralement plus d'espace disque, le large éventail de fonctions offertes par les SGBD rends les manipulations plus complexes, et les pannes ont un impact plus large et sont plus difficiles à rattraper [110].

Typologie[modifier | modifier le code]

L'usage qui est fait des données diffère d'une base de données à l'autre. Les bases de données sont classifiées en fonction du nombre d'usagers - un seul, un petit groupe, voire une entreprise. Une base de données de bureau est installée sur un ordinateur personnel au service d'un seul usager. Tandis qu'une base de données d´entreprise et installée sur un ordinateur puissant au service de centaines d'utilisateurs. Une base de données centralisée est installée dans un emplacement unique, tandis qu'une base de données distribuée est répartie entre plusieurs emplacements[108].

La manière la plus populaire de classer les bases de données est selon l'usage qui en est fait, et l'aspect temporel du contenu:

  • Les bases de données dites opérationnelles ou OLTP (de l'anglais online transaction processing) sont destinées à assister des usagers à tenir l'état d'activités quotidiennes[108]. Elles permettent en particulier de stocker sur le champ les informations relatives à chaque opération effectuée dans le cadre de l'activité: achats, ventes, réservations, payements. Dans de telles applications l'accent est mis sur la vitesse de réponse et la capacité de traiter plusieurs opérations simultanément[109].
  • Les bases de données d'analyse dites aussi OLAP, sont composées d'informations historiques telles que des mesures sur lesquelles sont effectuées des opérations massives en vue d'obtenir des statistiques et des prévisions. Les base de données sont souvent des entrepôts de données[108] (anglais datawarehouse): des bases de données utilisées pour collecter des énormes quantités de données historiques de manière quotidienne depuis une base de données opérationnelle. Le contenu de la base de données est utilisé pour effectuer des analyses d'évolution temporelle et des statistiques telles que celles utilisées en management. Dans de telles applications l'accent est mis sur la capacité d'effectuer des traitements très complexes et les logiciels sont équipées d'un moteur d'analyse dit OLAP (online analytical processor)[109].

Les bases de données sont également parfois classifiées selon les caractéristiques du contenu: Des données non structurées sont stockées à l'état brut, et nécessitent d'être retraitées en vue de produire de l'information - de la connaissance. Des données structurées sont formatées en fonction de l'usage qui va en être fait, en vue de faciliter le stockage, l'utilisation et la production d'information finie. Par exemple un ensemble de factures peuvent être stockées brut sous forme d'images bitmap, ce qui ne permettra pas de calculer des totaux et des moyennes, ou alors chaque facture peut être décomposés sous forme d'un tableau de chiffres sur lesquels il est alors possible d'effectuer des calculs[108].

Définitions[modifier | modifier le code]

modèle de données

Le schéma ou modèle de données, est la description de la manière dont les données sont organisées. Il se trouve à l'intérieur de la base de données, et renseigne sur les caractéristiques de chaque type de donnée et les relations entre les différentes données qui se trouvent dans la base de données. Il existe plusieurs types de modèles de données (relationnel, entité-association, objet, hiérarchique et réseau)[111].

modèle de données logique

Le modèle de données logique - ou conceptuel - est la description des données telles qu'elles sont dans la pratique[111].

modèle de données physique

Le modèle de données physique est dérivé du modèle logique et décrit comment les données seront techniquement stockées dans la base de données[111].

entité

Une entité est un objet, un sujet, une notion en rapport avec le domaine d'activité pour lequel la base de données est utilisée, et concernant lequel des données sont enregistrées (exemple: des personnes, des produits, des commandes, des réservations, ...)[110],[107].

attribut

un attribut est une caractéristique d'une entité susceptible d'être enregistrée dans la base de données. Par exemple une personne (entité), son nom et son adresse (des attributs). Les attribut sont également appelés des champs ou des colonnes[110]. Dans le schéma les entités sont décrites comme un lot d'attributs en rapport avec un sujet[107].

enregistrement

Un enregistrement est une donnée composite qui comporte plusieurs champs dans chacun duquel est enregistré une donnée. Cette notion a été introduite par le stockage dans des fichiers dans les années 1960[107].

association

Les associations désignent les liens qu'il existe entre différentes entités, par exemple entre un vendeur, un client et un magasin[110].

cardinalité

La cardinalité d'une association - d'un lien entre deux entités A et B - est le nombre de A pour lesquelles il existe un B et inversément. Celle-ci peut être un-a-un, un-a-plusieurs ou plusieurs-à-plusieurs. Par exemple un compte bancaire appartient à un seul client, et un client peut avoir plusieurs comptes bancaires (cardinalité un-a-plusieurs)[111].

modèle de données relationnel

C'est le type de modèle de données le plus courant. Selon ce type de modèle, la base de données est composée d'un ensemble de tables (les relations) dans lequelles sont placées les données ainsi que les liens. Chaque ligne d'une table est un enregistrement. Ces modèles sont simples à mettre en oeuvre, basés sur les mathématiques (la théorie des ensembles), ils sont très populaires et fortement normalisés[111].

modèle de données entité-association

Selon ce type de modèle, Une base de données est un lot d'entités et d'associations. Une entité est un sujet concret, un objet, une idée, pour laquelle il existe des informations. Un attribut est un renseignement concernant ce sujet - exemple le nom d'une personne. A chaque attribut corresponds un domaine: un ensemble de valeurs possibles. Une association désigne un lien entre deux entités - par exemple un élève et une école[111].

modèle de données objet

Ce type de modèle est basé sur la notion d'objet de la programmation orientée objet. Selon ce type de modèle une base de données est lot d´objets de différentes classes. Chaque objet possède des propriétés - des caractéristiques propres, et des méthodes qui sont des opérations en rapport avec l'objet. Une classe est une catégorie d'objets et reflète typiquement un sujet concret[111].

modèle de données hiérarchique

Ce type de modèle de données a été créé dans les années 1960, c'est le plus ancien modèle de données. Selon ce type de modèle, les informations sont groupées dans des enregistrements, chaque enregistrement comporte des champs. Les enregistrements sont reliés entre eux de manière hierarchique: à chaque enregistrement correspond un enregistrement parent[111].

modèle de données réseau

Ce type de modèle de données est semblable au modèle hiérarchique. Les informations sont groupées dans des enregistrements, chaque enregistrement possède des champs. Les enregistrements sont reliés entre eux par des pointeurs. Contrairement aux modèles hiérarchiques, l'organisation des liens n'est pas obligatoirement hiérarchique, ce qui rend ces modèles plus polyvalents que leurs prédécesseurs[111].

nul

Dans les modèles de données relationnels, un attribut peut avoir une valeur nulle, indiquant que la donnée est absente, non disponible ou inapplicable[107].

intégrité référentielle

Dans les modèles de données relationnels il y a situation d´intégrité référentielle lorsque toutes les données référencées par les clés étrangères sont présentes dans la base de données[107].

clé primaire

Dans les modèles de données relationnels, la clé primaire est un attribut dont la contenu est différente pour chaque enregistrement de la table, ce qui permet de retrouver un et un seul enregistrement[111].

clé étrangère

Dans les modèles de données relationnels, une clé étrangère est un attribut qui contient une référence à une donnée connexe - dans les faits la valeur de la clé primaire de la donnée connexe[111].

Modèle de données[modifier | modifier le code]

Le modèle de données logique est la description des données telles qu'elles sont dans la pratique. Le modèle de données physique est dérivé du modèle logique et décrit comment les données seront techniquement stockées dans la base de données[111].

Un modèle de données est une description de l'organisation des données: leurs caractéristiques et les relations entre les différentes données. Il existe différentes manières de décrire le contenu[111]:

  • les modèles relationnels: C'est le type de modèle le plus courant, la base de données est composée d'un ensemble de tables (les relations) dans lequelles sont placées les données ainsi que les liens. Chaque ligne d'une table est un enregistrement, une suite de champs, c'est-à-dire d'emplacements dans lesquels peuvent être placées des données. La clé primaire est un champs dont le contenu est différent pour chaque enregistrement de la table, ce qui permet de retrouver un et un seul enregistrement, et une clé étrangère est un champ qui contient une référence à une donnée connexe. Ces modèles sont les plus populaires et sont fortement normalisés parce qu'ils sont simples à mettre en oeuvre et basés sur les mathématiques (la théorie des ensembles)[111].
  • Les modèles orientés objet: est basée sur la notion d'objet, chaque objet possède des propriétés - des caractéristiques propres, et des méthodes qui sont des opérations en rapport avec l'objet. Une classe est une catégorie d'objets et reflète typiquement un sujet concret[111].
  • les modèles hiérarchiques: créé dans les années 1960, c'est le plus ancien modèle de données. Les informations sont groupées dans des enregistrements, chaque enregistrement comporte des champs, qui sont des emplacements dans lesquels peuvent être placées des données. Les enregistrements sont reliés entre eux de manière hierarchique: à chaque enregistrement correspond un enregistrement parent[111].
  • les modèles réseau: semblable au modèle hiérarchique, les informations sont groupées dans des enregistrements, chaque enregistrement possède des champs, des emplacements dans lequels peuvent être placées des données. Les enregistrements sont reliés entre eux par des pointeurs, selon une organisation qui n'est pas obligatoirement hiérarchique, ce qui rend ces modèles plus polyvalents que les modèles hiérarchiques[111].

Genèse[modifier | modifier le code]

Les étapes clés du cycle de vie d'une base de données sont la conception et la mise en service[112].

Avant la conception, les utilisateurs et les producteurs des informations sont interviewés en vue de prendre connaissance des caractéristiques des informations, des relations entre les informations, ainsi que les caractéristiques du système informatique qui accueillera la base de données[112]. Puis sera créé un schéma d'ensemble du réseau d'informations et de relations, sous forme de diagramme comportant des entités, des attributs et des relations. Puis ce plan est transformé en instructions formulées dans le langage de commande du SGBD et les instruction sont exécutées en vue de créer la structure de la base de données et la rendre opérationnelle[112].

Une fois opérationnelle, des opérations de surveillance permettent de déceler des problèmes susceptibles de nécessiter des modifications du schéma. Des modifications peuvent également être apportées en cas de changement des besoins des utilisateurs[112].

l'objectif lors de la conception de la base de données est de recueillir les caractéristiques des informations dans la pratique, et les besoins des usagers, et de les formuler d'une manière simple, compréhensible autant par les usagers que les administrateurs de base de données[112].

Utilisations[modifier | modifier le code]

La manipulation de données est une des utilisations les plus courantes des ordinateurs[37]. Les secteurs de la finance, des assurances, des écoles, de l'administration publique et les médias, secteurs majeurs de la société de l'information, qui offrent des services basés sur des informations, utilisent des bases de données[109]. Parmi les domaines d'utilisation pratiques il y a les inventaires (stocks, magasins, bibiothèques), les outils de réservation (vols en avion, cinéma, ...), l'octroi de permis (de conduire, de chasse, de propriétaire de chien,...), les ressources humaines, les salaires, la production industrielle (les machines de production sont souvent informatiques), ainsi que la comptabilité et la facturation[109].

Les grandes entreprises et les institutions nationales ont besoin de bases de données de grandes capacités et sont prêts à payer cher. Une puissance qui serait excessive et trop coûteuse pour une petite entreprise ou une personne seule. Raison pour laquelle les SGBD visent différents secteurs du marché: Certains produits supportent des bases de données de grande dimension, mais nécessitent un matériel informatique coûteux, d'autres logiciels fonctionnent sur un petit ordinateur et sont limités à des bases de données de taille réduite[37].

Les bases de données sont utilisées en particulier dans les situations ou l'enregistrement sous forme de fichiers (chaque fichier contient une liste d'informations) aboutirait à redondances ou des incohérences - renseignements à double, et contradictoires; où les limitations de cette technique pose des problèmes, rends difficile le partage des informations et ne permet pas un contrôle pointu de la qualité des données[109].


[158]

[159]

[160]

[161]

[162]

[163]

[164]

[165] research

Organisation interne[modifier | modifier le code]

La conception du modèle de données physique, étape finale de la construction d'une base de données, consiste à définir des enregistrements correspondant au modèle de données logique et de se servir de diverses techniques en vue d'obtenir un modèle qui aboutit à une vitesse adéquate de manipulation de données, tout en garantissant l'intégrité des données[113]. Un enregistrement comporte des pointeurs et des balises utilisées par le SGBD pour retrouver et manipuler les données[114]. Les enregistrements sont stockés dans des fichiers, et chaque fichier contient typiquement un lot d'enregistrements similaires[114].

Le modèle de données physique a un impact majeur sur la vitesse des opérations sur la base de données[113]. Une simple amélioration peut rendre les opérations sur les données 50 fois plus rapides[114], différence d'autant plus sensible qu'il y a une grande quantité de données[114]. Au début des années 2000 il n'est pas rare de trouver des bases de données contenant plusieurs téraoctets de données et il existe des ingénieurs indépendants dont l'activité consiste uniquement à aider des clients à accélérer leurs bases de données[114].

Les principales techniques utilisées dans le modèle de données physique sont les indexes, les vues matérialisées et le partitionnement. Le stockage des données se fait souvent par des dispositifs RAID [114] et le SGBD organise les fichiers d'une manière qui accélère les opération, tel que les tables de hachage, les arbres B, les bitmaps ou les fichiers ISAM:

index

Un index est un lot de données destiné à accélérer les opérations de recherche de données. La structure de l'index comporte des valeurs associées des pointeurs où chaque pointeur permet de retrouver la donnée qui a cette valeur[114].

vue matérialisée

Dans une vue matérialisée, le résultat d'une recherche / agrégation est enregistré dans la base de données, ce qui permet de l'utiliser plusieurs fois et d'économiser du temps. Cette technique est utilisée notamment dans les bases de données analytiques et les applications OLAP[114].

partitionnement

Le partitionnement consiste à répartir les données entre plusieurs disque durs, ce qui accélère les opérations en diminuant la quantité de travail effectuée par chaque disque dur[114].

RAID (Redundant array of independent disks)

dispositif matériel équipé d'une batterie de disques durs, qui travaillent parallèlement, ce qui accélère les opérations[114]

table de hachage (anglais hashing)

Dans cette organisation, une fonction de hachage est utilisée. Une telle fonction transforme par calcul arithmétique une valeur quelconque en un nombre entier. Le nombre obtenu est utilisé pour déterminer l'emplacement exact ou sera enregistrée la donnée de cette valeur[113].

arbre B

l'arbre B est une structure en arbre où toutes les branches ont la même longueur, et chaque noeud comporte entre N/2 et N branches. C'est une structure très souvent utilisée dans les bases de données[113].

bitmap

Les index en bitmap sont souvent utilisés pour des données où il n'existe que peu de valeurs possibles (genre M/F, jour de la semaine, ...). Pour chacune des valeurs possible de la donnée l'index comporte un tableau de bits où le Nième bit est à "1" si la Nième donnée a la valeur en question[113].

ISAM (pour Indexed sequential access method)

Dans cette organisation les enregistrements sont stockés triés selon la clé primaire, dans une structure découpée en cylindres et pistes de taille fixe. Chaque piste comporte un espace de réserve pour permettre l'insertion de nouveaux enregistrements. Une structure en arbre contient la valeur de la clé et un pointeur vers le premier enregistrement de chaque piste.


L'avénement de l'Internet, des applications de traitement de transaction en ligne, et la possibilité d'interconnecter différents appareils ont entrainé une augmentation du volume de données, et au début des années 2000 il n'est pas rare de trouver des bases de données contenant plusieurs téraoctets de données, accédées simultanément par des centaines d'utilisateurs[114].

L'augmentation est aussi due au fait que, en raison de l'augmentation de la capacité et la baisse du coût du matériel informatique, le stockage de données informatisé est devenu moins cher que le papier[114].

La vitesse de manipulation de bases de données volumineuses dépends étroitement de son organisation interne et des caractéristiques du matériel de stockage[114].

Lors de la conception du modèle de données physique, l'accent est mis sur la recherche de techniques de stockage qui accélèrent les manipulations des données[114]. Les ressources matérielles qui consomment du temps sont les disques durs, le réseau et le processeur[114].

Il y a eu des discussions récurrentes dans les milieux académiques autour de la question « quel est le meilleur type de modèle de données ? », entre Charles Bachman, auteur du modèle de données réseau et Edgar F. Codd, auteur du modèle de données relationnel. Les discussions ont commencé en 1974 et duré jusqu'à la mort d'un des interlocuteurs en 2003[114].

[166] physical model

Pour l'utilisateur, le format des enregistrements est la seule partie visible de l'organisation physique de la base de données[113].

[167]

[168]

Système d'exploitation[modifier | modifier le code]

En informatique, un système d'exploitation est un ensemble de programmes qui dirige l'utilisation des capacités d'un ordinateur par les logiciels applicatifs. Il offre une suite de services généraux qui facilitent la création de logiciels applicatifs et sert d'intermédiaire entre ces logiciels et le matériel informatique[115]. Un système d'exploitation apporte commodité, efficacité et capacité d'évolution, permettant d'introduire de nouvelles fonctions et du nouveau matériel sans remettre en causes les logiciels[72].

Le système d'exploitation est le premier programme exécuté lors de la mise en marche de l'ordinateur[72]. Il dirige l'utilisation des ressources matérielles: il reçoit des logiciels applicatifs des demandes d'utilisation des capacités de l'ordinateur - capacité de stockage des mémoires et des disque durs, capacité de calcul du processeur. Le système d'exploitation accepte ou refuse de telles demandes, puis réserve les ressources en question pour éviter que leur utilisation n'interfère avec d'autres demandes provenant de d'autres logiciels[115].

Il existe sur le marché des dizaines de systèmes d'exploitation différents[72]. Ils sont souvent livrés avec l'appareil informatique[116]. Les fonctionnalités offertes diffèrent d'un modèle à l'autre, et sont typiquement en rapport avec l'exécution des programmes, l'utilisation de la mémoire centrale, des périphériques, la manipulation des systèmes de fichiers, la communication, ou la détection d'erreurs[72].

La définition des système d'exploitation est flouée par le fait que les vendeurs de tels produits considèrent comme étant le système d'exploitation la totalité du contenu de leur produit, y compris les vidéos, les images et les logiciels applicatifs qui l'accompagnent[115].


[169]

Le système d'exploitation rends l'utilisation de l'ordinateur moins embarassante, plus simple et plus efficace.

[170]

Un système d'exploitation est un ensemble de programmes qui contrôlent l'exécution des logiciels applicatifs en servant d'intermédiaire avec l'usager et le matériel informatique. Le système d'exploitation apporte commodité, efficacité et capacité d'évolution, permettant d'introduire de nouvelles fonctions sans remettre en causes celles qui existent.

Le système d'exploitation sert essentiellement à contrôler la réservation et l'utilisation des capacités matérielles de l'ordinateur par les usagers et les programmes ainsi que fournir une interface entre les les logiciels applicatifs et le matériel de l'ordinateur qui facilite le travail de programmation.

Il existe sur le marché des dizaines de systèmes d'exploitation différents. Les fonctionnalités offertes diffèrent d'un modèle à l'autre, et sont typiquement en rapport avec l'exécution des programmes, l'utilisation des périphériques, la manipulation des systèmes de fichiers, la communication, ou la détection d'erreurs.

Le système d'exploitation est le premier programme exécuté lors de la mise en marche de l'ordinateur.

[171]

Un système d'exploitation est un ensemble de programmes, souvent livré avec un appareil informatique, qui permet une utilisation commode et efficace de l'appareil. Les services offerts par un système d'exploitation sont en rapport avec la manipulation des informations enregistrées dans l'ordinateur, l'exécution des programmes et l'utilisation partagée de la mémoire par les différents programmes en cours d'exécution.

[172]

La définition des système d'exploitation est flouée par le fait que les vendeurs de tels produits considèrent comme étant le système d'exploitation la totalité du contenu de leur produit, y compris les vidéos, les images et les logiciels applicatifs qui l'accompagnent.

Le système d'exploitation dirige l'utilisation des ressources matérielles de l'ordinateur, offre une suite de services courants qui facilitent la création de logiciels applicatifs et sert d'intermédiaire entre les logiciels applicatifs et le matériel informatique. Le système d'exploitation reçoit des demandes d'utilisation des capacités de l'ordinateur: capacité de stockage des mémoires et des disque durs, capacité de calcul du processeur. Le système d'exploitation accepte ou refuse de telles demandes puis réserve les ressources en question pour éviter que leur utilisation n'interfère avec d'autres demandes.

Caractéristiques[modifier | modifier le code]

Il existe cinq générations de système d'exploitation: les systèmes d'exploitation batch, multiprogrammés, en temps partagé, temps réel et distribués[117].

  • Un système batch est prévu pour exécuter l'un après l'autre des grands calculs, avec peu d'intervention utilisateur[72].

A partir de la génération des systèmes d'exploitation multiprogrammés, plusieurs programmes sont exécutés simultanément par planification (scheduling): plusieurs programmes résident en mémoire centrale et le système d'exploitation suspends régulièrement l'exécution d'un programme pour continuer l'exécution d'un autre[117].

  • Dans la génération des systèmes multiprogrammés, l'exécution simultanée de plusieurs programmes vise l'utilisation efficace de la puissance de calcul du processeur.
  • Dans la génération des systèmes en temps partagé l'exécution simultanée de plusieurs programmes vise à répondre rapidement aux demandes de plusieurs utilisateurs en communication directe avec l'ordinateur[117].
  • Un système d'exploitation temps réel doit garantir que toute opération se termine dans un délai donné, en vue de garantir la réussite du dispositif dans lequel l'ordinateur est utilisé[72].
  • Un système distribué dirige l'utilisation des ressources de plusieurs ordinateurs à la fois. Il utilise les capacités d'un réseau informatique. Il contrôle un groupe de machines, et les fait apparaître comme une machine unique, imaginaire, de très grande capacité[72].

première génération: les batch[modifier | modifier le code]

Dans les système de cette génération le principal dispositif d'entrée sont les cartes perforées. Un programme n'est autre qu'une pile de cartes. L'exécution d'un programme consiste à demander à un opérateur de placer la pile de cartes dans le lecteur, puis l'opérateur invers quelques interrupteurs pour lancer l'exécution du programme. Le processeur n'est pas utilisé durant les manipulations de l'opérateur[117].

Un batch est un lot de travaux à effectuer. L'opérateur compose un batch en empilant les cartes des différents programmes demandés par les utilisateurs. Il forme une pile de cartes séparées par des marque-page qu'il place ensuite dans le lecteur. Le regroupement de plusieurs programmes en un batch diminue les interventions de l'opérateur[117].

Dans un système basé sur les batch le coeur du système d'exploitation est un programme moniteur, qui réside continuellement en mémoire centrale, et qui permet à l'opérateur de demander de commencer ou d'arrêter l'exécution du lot. A la fin de l'exécution de chaque tâche du lot, le moniteur effectue des travaux de nettoyage, puis lance l'exécution de la tâche suivante. L'opérateur intervient ainsi uniquement au début et à la fin du lot[117].

Dans ces systèmes d'exploitation les commandes ajoutées au marque-pages, formulées dans le langage JCL (Job Control Language) sont un des seul moyens qu'a l'utilisateur d'interagir avec le système d'exploitation[117].

Les systèmes d'exploitation batch sont adaptés à des application ou il y a de très gros calculs avec très peu d'implication de l'utilisateur: météo, statistiques, impôts... Les utilisateurs n'attendent pas les résultats, soumettent les demandes, puis reviennent un peu plus tard collecter les résultats[117].

En raison de la grande différence de vitesse entre le processeur et les périphériques, dans un système d'exploitation batch le processeur est inutilisé 90% du temps parce que les programmes attendent qu'un ou l'autre périphérique termine les opérations. Avec de tels systèmes d'exploitation il n'y a pas de concurrence entre les différentes tâches, la mise en œuvre de l'utilisation du processeur, de la mémoire et des périphériques est par conséquent triviale[117].

deuxième génération: la multiprogrammation[modifier | modifier le code]

Dans de tels systèmes le but recherché est d'augmenter l'efficacité de l'utilisation du processeur et des périphériques en utilisant la possibilité de les faire fonctionner en parallèle. Plusieurs programmes sont placés en mémoire centrale, et lorsque le programme en cours d'exécution attends un résultat de la part d'un périphérique, le système d'exploitation ordonne au processeur d'exécuter un autre programme[117].

Les systèmes d'exploitation multiprogrammés mettent en œuvre la planification (scheduling): À chaque utilisation d'un périphérique, le système d'exploitation choisis quel programme va être exécuté. Ce choix se fait sur la base de priorités. Le système d'exploitation comporte un mécanisme de protection qui évite que le programme en cours d'exécution lit ou écrit dans la mémoire attribuée à un autre programme. Les programmes sont exécutés dans un mode non-privilégié, dans lequel l'exécution de certaines instructions est interdite[117].

Les systèmes multiprogrammés nécessitent un ordinateur et de périphériques qui mettent en œuvre la technique du DMA (direct memory access): Par cette technique le processeur ordonne à un périphérique d'effectuer une opération; le résultat de l'opération est placée en mémoire centrale par le périphérique pendant que le processeur exécute d'autres instructions. Dans les systèmes multiprogrammés tout comme les systèmes batch l'utilisateur n'a que peu de contact avec les programmes et des maigres possibilités d'intervention[117].

troisième génération: le temps partagé[modifier | modifier le code]

Dans un dispositifs interactif les utilisateurs sont en communication constante avec le dispositif. Ces dispositifs utilisent un système d'exploitation en temps partagé, destiné à répondre rapidement aux demandes de l'utilisateur, et lui donner l'impression qu'il est le seul à utiliser l'ordinateur[117].

Un système en temps partagé met en œuvre des techniques sophistiquées de multiprogrammation en vue de permettre l'utilisation interactive de l'ordinateur pas plusieurs usagers et plusieurs programmes simultanément[72]. L'arrivée de cette nouvelle génération de systèmes d'exploitation en 1970 résulte d'une forte demande des consommateurs et de la baisse du prix du matériel informatique qui a rendu possible sa réalisation[117].

Dans les systèmes d'exploitation en temps partagé la notion de batch n'a que peu d'importance. Ces système mettent en oeuvre de nouveaux mécanismes d'utilisation du processeur et de la mémoire, ce qui leur permet de répondre rapidement à des demandes provenant simultanément d'un grand nombre d'utilisateurs[117].

Dans ces systèmes, tout comme dans la génération précédente, l'utilisation du processeur est planifiée. Cependant contrairement aux systèmes de la génération précédente, dans les systèmes en temps partagé chaque programme est exécuté durant une tranche de temps déterminé, puis le système d'exploitation bascule sur l'exécution d'un autre programme, ce qui évite qu'un programme monopolise l'utilisation du processeur au service d'un utilisateur, entrainant des retards pour les autres usagers[117].

Les systèmes d'exploitation en temps partagé mettent en œuvre la technique du swap: lorsque le programme en cours d'exécution a besoin de plus de mémoire que ce qui est disponible, alors un autre programme inactif est retiré pour gagner de la place; le programme inactif est enregistré temporairement sur le disque dur. L'enregistrement sur disque provoque cependant une perte de temps non négligeable[117].

quatrième génération: le temps réel[modifier | modifier le code]

Un dispositif est dit temps réel lorsqu'il doit non seulement donner des résultat corrects, mais les donner à temps, c'est-à-dire dans un délai déterminé. Les systèmes d'exploitation temps réel sont souvent utilisés par des ordinateurs reliés à un appareil externe, où un retard de réponse de l'ordinateur entraînerait un échec de l'appareil: pilotes automatiques, les robots industriels, les applications vidéo et audio[117].

Dans les système d'exploitation temps réel l'accent est mis sur la durée nécessaire pour effectuer chaque opération: répondre aux demandes rapidement en vue de satisfaire aux contraintes de temps du système dans lequel il va être utilisé[117].

Certains services offerts par ces systèmes d'exploitation sont réalisés comme des logiciels applicatifs, et sont exécutés en concurrence avec ceux-ci. Un système d'exploitation temps réel autorise un contact direct entre les logiciels applicatifs et les périphériques. Dans certains systèmes temps réel les ressources sont réservées à l'avance, ce qui évite les ralentissements que provoquerais les réservations à la volée, et garantis que les ressources seront continuellement disponibles[117].

Windows CE, Embedded Linux, Symbian OS, PalmOS et VxWorks sont des systèmes d'exploitation temps réel[118].

cinquième génération: les systèmes distribués[modifier | modifier le code]

La baisse des prix du matériel informatique a permis, dans les années 1990, la création de systèmes informatiques composés de plusieurs ordinateurs, et donc plusieurs processeurs, plusieurs mémoires, et de nombreux périphériques. Un système distribué permet le partage des ressources entre les ordinateurs. Un utilisateur d'un ordinateur bon marché peut se servir de ressources coûteuses qui existent sur un autre ordinateur[117].

Mach, Amoeba, Andrew, Athena, et Locus sont des systèmes d'exploitation distribués. Ils ont tous été développés par des universités[119].


[173]

selon sa construction, un système d'exploitation peut être prévu pour un mainframe, un ordinateur personnel, on un assistant personnel.

  • Un mainframe est un ordinateur de grande puissance utilisé collectivement par les membres d'une organisation (entreprise, fondation, service d'État). Un système d'exploitation pour ce genre d'appareil est typiquement batch ou temps partagé, et utilisé par plusieurs usagers simultanément. De tels systèmes d'exploitation existent depuis 1955.
  • Les ordinateurs personnels sont apparus à la fin des années 1970. La baisse du prix du matériel informatique a permis de construire des ordinateurs aux capacités limitées, mais dont le prix abordable autorisait l'acquisition au profit d'une personne seule. Les premiers systèmes d'exploitation pour ce type d'appareil offraient éventuellement des fonctions de temps partagé et de multiprogrammation, mais leur utilisation était limité par la faible capacité de ces machines.
  • Les assistants personnels sont des petits appareils apparus dans les années 1990. Ces appareils à batterie de petite dimension (10 cm) sont équipés d'un affichage de petite dimension, de processeur et de mémoire de faible capacité, et qui consomme peu de courant et sont typiquement équipés de réseau sans fil.

Suite à l'évolution technologique, des fonctions autrefois offertes par les systèmes d'exploitation pour mainframe ont été ajoutées à ceux destinés aux ordinateurs personnels, puis aux assistants personnels. Les systèmes d'exploitation de la famille Unix, lancés dans les années 1970 sur des mainframe se retrouvent 30 ans plus tard dans des assistants personnels.

[174]

les caractéristiques majeures d'un système d'exploitation sont d'être interactif ou batch, en temps partagé, temps réel, et/ou distribué:

  • interactif / batch : un système batch est prévu pour exécuter l'un après l'autre des grands calculs, avec peu d'intervention utilisateur. dans un système interactif l'usager communique directement avec l'ordinateur et effectue sur demandes des petites opérations, les temps de réponse doivent rester courts, du fait que l'usager est continuellement en attente de résultats.
  • un système en temps partagé met en oeuvre des techniques de multiprogrammation en vue de permettre l'utilisation interactive de l'ordinateur pas plusieurs usagers et plusieurs programmes simultanément. Plus sophistiqués, les systèmes interactifs en temps partagés sont apparus plusieurs années après l'arrivée des systèmes batch.
  • temps réel. Un système d'exploitation temps réel doit garantir que toute opération se termine dans un délai donné, en vue de garantir la performance du dispositif informatique dans lequel il sera utilisé.
  • distribué. Un tel système permet de répartir les calculs entre différents processeurs, et assure la communication entre eux.
  • distribué: un tel système dirige l'utilisation des ressources de plusieurs ordinateurs à la fois. Il utilise les capacités d'un réseau informatique. Un système d'exploitation distribué contrôle un groupe de machines, et les fait apparaître comme une machine unique, virtuelle, et multi-processeurs.

[175]

un système d'exploitation batch exécute des tâches l'une après l'autre. Un programme resident monitor attends que la tâche en cours soit terminée, puis enchaine automatiquement avec l'exécution de la tâche suivante. Les instructions et les données des différentes tâches sont enregistrées sur des cartes perforées, et des cartes intermédiaires de job control contiennent des commandes, et signalent le début ou la fin d'une tâche. Les commandes formulées dans le langage JCL (Job Control Language) sont un des seul moyens qu'a l'utilisateur d'interagir avec le système d'exploitation.

Les systèmes d'exploitation batch sont adaptés à des application ou il y a de très gros calculs avec très peu d'implication de l'utilisateur: météo, statistiques, impôts... Les utilisateurs n'attendent pas les résultats, soumettent les demandes, puis reviennent un peu plus tard collecter les résultats.

En raison de la grande différence de vitesse entre le processeur et les périphériques, dans un système d'exploitation batch le processeur est inutilisé 90% du temps parce que les programmes attendent qu'un ou l'autre périphérique termine les opérations. Avec de tels systèmes d'exploitation il n'y a pas de concurrence entre les différentes tâches, la mise en oeuvre de l'utilisation du processeur, de la mémoire et des périphériques est par conséquent triviale.

Dans un système d'exploitation multiprogrammé, plusieurs tâches résident simultanément en mémoire. Le processeur exécute une des tâches, puis lorsque celle-ci attends qu'un périphérique termine une opération le système d'exploitation fait exécuter la tâche suivante, et ainsi de suite. Si le système d'exploitation est multi-utilisateurs, plusieurs usagers, chacun par l'intermédiaire de son terminal, utilisent simultanément l'ordinateur. La plupart des systèmes d'exploitation généralistes en temps partagé offrent les possibilité de multitâches et multi-utilisateurs.

un système d'exploitation en temps partagé permet à de nombreux usagers d'utiliser simultanément l'ordinateur. Le processeur exécute pendant une fraction de seconde un programme au service d'un utilisateur, puis enchaine avec l'utilisateur suivant, et ainsi de suite. La réponse presque immédiate aux sollicitations de l'utilisateur lui donne l'impression qu'il est le seul à utiliser l'ordinateur. Le choix du prochain programme à exécuter se fait sur la base de priorités: la priorité d'une tâche augmente quand celle-ci n'est pas exécutée, puis retombe à zéro lors de son exécution. Toute tâche qui s'exécute continuellement durant plus que le délai prévu (une fraction de seconde) est interrompue par le système d'exploitation et traitée comme la dernière des priorités.

Il existe cinq générations de systèmes d'exploitation, apparues successivement entre 1960 et 1990. Chacun des principes d'une génération se retrouvent dans les générations suivantes.

1955 - les batches: Dans les années 1960 le principal dispositif d'entrée était les cartes perforées. Un programme n'était autre qu'une pile de cartes. L'exécution de ce dernier consistait à demander à un opérateur de placer la pile de cartes dans le lecteur, puis d'inverser quelques interrupteurs pour lancer l'exécution du programme. Le processeur n'est pas utilisé durant les manipulations de l'opérateur.

Un batch est un lot de travaux à effectuer. L'opérateur compose un batch en empilant les cartes des différents programmes demandés par les utilisateurs. Il forme une pile de cartes séparées par des marque-page qu'il place ensuite dans le lecteur. Le regroupement de plusieurs programmes en un batch diminue les interventions de l'opérateur.

Dans un système basé sur les batch le coeur du système d'exploitation est un programme moniteur, qui réside continuellement en mémoire centrale, et qui permet à l'opérateur de demander de commencer ou d'arrêter l'exécution du lot. A la fin de l'exécution de chaque tâche du lot, le moniteur effectue des travaux de nettoyage, puis lance l'exécution de la tâche suivante. L'opérateur intervient uniquement au début et à la fin du lot.

1965 - les systèmes multiprogrammés: Dans de tels systèmes le but recherché est d'augmenter l'efficacité de l'utilisation du processeur et des périphériques en utilisant la possibilité de les faire fonctionner en parallèle. Plusieurs programmes sont placés en mémoire centrale, et lorsque le programme en cours d'exécution attends un résultat de la part d'un périphérique, le système d'exploitation ordonne au processeur d'exécuter un autre programme.

Les systèmes d'exploitation multiprogrammés mettent en œuvre la planification (scheduling): À chaque utilisation d'un périphérique, le système d'exploitation choisis quel programme va être exécuté. Ce choix se fait sur la base de priorités. Le système d'exploitation comporte un mécanisme de protection qui évite que le programme en cours d'exécution lit ou écrit dans la mémoire attribuée à un autre programme. Les programmes sont exécutés dans un mode non-privilégié, dans lequel l'exécution de certaines instructions est interdite.

Les systèmes multiprogrammés nécessitent un ordinateur et de périphériques qui mettent en œuvre la technique du DMA (direct memory access): Par cette technique le processeur ordonne à un périphérique d'effectuer une opération; le résultat de l'opération est placée en mémoire centrale par le périphérique pendant que le processeur exécute d'autres instructions. Dans les systèmes multiprogrammés tout comme les systèmes batch l'utilisateur n'a que peu de contact avec les programmes et des maigres possibilités d'intervention.

1975 - le temps partagé: Dès le milieu des années 1970 l'accent a été mis sur la productivité de l'utilisateur final plutôt que l'exploitation efficace de l'appareil. Cette tendance résulte d'une forte demande des consommateurs et la réalisation a été rendue possible par la baisse du prix du matériel informatique.

Dans un dispositifs interactif l'utilisateur est en communication constante avec l'ordinateur à l'aide du clavier et de l'écran. Ces dispositifs utilisent un système d'exploitation en temps partagé, destiné à répondre rapidement aux demandes de l'utilisateur, et lui donner l'impression qu'il est le seul à utiliser l'ordinateur.

Dans les systèmes d'exploitation en temps partagé la notion de batch n'a que peu d'importance. Ces système mettent en oeuvre de nouveaux mécanismes d'utilisation du processeur et de la mémoire, ce qui leur permet de répondre rapidement à des demandes provenant simultanément d'un grand nombre d'utilisateurs.

Dans ces systèmes, tout comme dans la génération précédente, l'utilisation du processeur est planifiée. Cependant contrairement aux systèmes de la génération précédente, dans les systèmes en temps partagé chaque programme est exécuté durant une tranche de temps déterminé, puis le système d'exploitation bascule sur l'exécution d'un autre programme, ce qui évite qu'un programme monopolise l'utilisation du processeur au service d'un utilisateur, entrainant des retards pour les autres usagers.

Les systèmes d'exploitation en temps partagé mettent en œuvre la technique du swap: lorsque le programme en cours d'exécution a besoin de plus de mémoire que ce qui est disponible, alors un autre programme inactif est retiré pour gagner de la place; le programme inactif est enregistré temporairement sur le disque dur. L'enregistrement sur disque provoque cependant une perte de temps non négligeable.

1985 - les système temps réel: Un dispositif est dit temps réel lorsqu'il doit non seulement donner des résultat corrects, mais les donner à temps, c'est-à-dire dans un délai déterminé. Les systèmes d'exploitation temps réel sont souvent utilisés par des ordinateurs reliés à un appareil externe, où un retard de réponse de l'ordinateur entraînerait un échec de l'appareil.

Dans les système d'exploitation temps réel l'accent est mis sur la durée nécessaire pour effectuer chaque opération: répondre aux demandes rapidement en vue de satisfaire aux contraintes de temps du système dans lequel il va être utilisé. De tels systèmes sont utilisés pour les pilotes automatiques, les robots industriels, les applications vidéo et audio.

Dans les systèmes d'exploitation temps réél certains services offerts par le système d'exploitation sont réalisés comme des logiciels applicatifs, et sont exécutés en concurrence avec ceux-ci. Le système d'exploitation autorise un contact direct entre les logiciels applicatifs et les périphériques. Dans certains systèmes temps réel les ressources sont réservées à l'avance, ce qui évite les ralentissements que provoquerais les réservations à la volée, et garantis que les ressources seront continuellement disponibles.

1995 - les systèmes distribués. La baisse des prix du matériel informatique a permis la création de systèmes informatiques composés de plusieurs ordinateurs, et donc plusieurs processeurs, plusieurs mémoires, et de nombreux périphériques. Un système distribué permet le partage des ressources entre les ordinateurs. Un utilisateur d'un ordinateur bon marché peut se servir de ressources coûteuses qui existent sur un autre ordinateur.

Fonctionnalités[modifier | modifier le code]

Les fonctionalités du système d'exploitation permettent à plusieurs usagers et plusieurs programmes de se partager les ressources de l'ordinateur[117] et les services offerts sont en rapport avec l'utilisation de telles ressources par les programmes[72]. Les services permettent en particulier d'exécuter des programmes, de lire et écrire des informations, de manipuler les fichiers, de communiquer entre ordinateurs et de déceler des erreurs[72].

Le matériel informatique peut exécuter des instructions, mais celles-ci sont rarement plus que des copies et des additions. La traduction d'opérations complexes en suite d'instructions est une tâche fastidieuse qui incombe au système d'exploitation[117].

  • l'utilisation des périphériques. Chaque périphérique a ses propres instructions, avec lesquelles il peut être manipulé. Le système d'exploitation tiens compte de cela. Il permet au programmeur de manipuler le périphériques par de simples demandes de lecture ou d'écriture, lui évitant la perte de temps de traduire les opérations en instructions propres au périphérique[117].
  • Accès aux fichiers: en plus des instructions propres à chaque périphérique (lecteur de disquette, disque dur, lecteur de CD-ROM), le système d'exploitation tient compte du format propre à chaque support servant au stockage de fichiers. Il offre également des mécanismes de protection permettant de contrôler quel utilisateur peut manipuler quel fichier[117].
  • L'accès aux ressources: Une des fonctions du système d'exploitation est de protéger les ressources contre l'utilisation par des personnes non autorisées, et de résoudre les conflits lorsque deux utilisateurs demandent simultanément la même ressource[117].
  • Détection et récupération en cas d'erreur: lorsqu'une erreur survient, que sa soit du matériel, ou du logiciel, le système d'exploitation traite l'erreur en adoucissant son impact sur le système informatique. Il peut tenter de recommencer l'opération, arrêter l'exécution du programme fautif, ou signaler le problème à l'utilisateur[117].
  • Contrôle. Un système d'exploitation peut tenir des statistiques d'utilisation des ressources, surveiller la performance, et les temps de réponse[117].

Le système d'exploitation assure la réservation des différentes ressources pour les besoin des programmes, qui sont exécutés simultanément. Les réservations peuvent être inscrites dans des journaux d'activités à des fin de statistiques ou de dépannage et le système d'exploitation peut refuser une réservation à un utilisateur qui n'a pas reçu préalablement d'autorisation[72].

Du point de vue du programmeur, son logiciel applicatif regarde vers le bas, en direction du système d'exploitation et du matériel et les programmes sont considérés comme fonctionnant sur le système d'exploitation. le système d'exploitation facilite le travail de programmation en fournissant une suite de services qui peuvent être utilisés par les logiciels applicatifs[115].

Le système d'exploitation prends en charge la manipulation du matériel en cachant les détails techniques des opérations. Dès lors, le logiciel applicatif ne peut pas voir la différence entre une machine simple, rudimentaire et une machine riche et complexe parce que le système d'exploitation offre les même services dans les deux cas[115].

Un système d'exploitation peut également être vu comme une machine virtuelle. L'ensemble matériel + système d'exploitation forme la "machine" qui exécute le logiciel applicatif, une machine en partie simulée par du logiciel[115].


[176] Les services offerts par les systèmes d'exploitation sont en rapport avec l'utilisation des ressources matérielles de l'ordinateur. En particulier dans le but d'exécuter des programmes, de lire et écrire des informations, de manipuler le système de fichier, de communiquer entre les ordinateurs et de déceler des erreurs.

Le système d'exploitation assure la réservation des différentes ressources pour les besoin des programmes, qui sont exécutés simultanément. Les réservations peuvent être inscrites dans des journaux d'activités à des fin de statistiques ou de dépannage et le système d'exploitation peut refuser une réservation à un utilisateur qui n'a pas reçu préalablement d'autorisation.

L'appel système est le mécanisme par lequel un programme demande des services au système d'exploitation. L'exécution d'une instruction particulière provoque la mise en attente du programme, et l'exécution d'une fonction du système d'exploitation.

[177] Les programmes du système d'exploitation permettent à plusieurs utilisateur de se partager l'ordinateur, il protège les données contre tout accès non autorisé et permet à des dizaines de périphériques de fonctionner correctement.

Le matériel informatique peut exécuter des instructions, mais celles-ci sont rarement plus que des copies et des additions. La traduction d'opérations complexes en suite d'instructions est une tâche fastidieuse. Des programmes dit système ont été créés dans le but d'effectuer ces traductions.

Le système d'exploitation est également le directeur, qui décide quel logiciel applicatif va utiliser les ressources de l'ordinateur, sans lequel les logiciels seraient constamment en combat pour des ressources.

Un système d'exploitation n'est pas forcément confiné à un certain matériel informatique: il fournit des services de haut niveau tels qu'écrire un fichier ou imprimer une ligne qui cachent les détails bassement matériel des opérations nécessaire pour les effectuer.

les services offerts par un système d'exploitation sont typiquement en rapport avec:

  • l'exécution de programmes: de nombreuses tâches sont effectuées par le système d'exploitation dans le cadre de l'exécution de programmes. Par exemple la préparation des périphériques, la consultation des fichiers, la copie en mémoire centrale des instruction et des données du programme.
  • l'utilisation des périphériques. Chaque périphérique a ses propres instructions, avec lesquelles il peut être manipulé. Le système d'exploitation tiens compte de cela. Il permet au programmeur de manipuler le périphériques par de simples demandes de lecture ou d'écriture, lui évitant la perte de temps de traduire les opérations en instructions propres au périphérique.
  • Accès aux fichiers: en plus des instructions propres à chaque périphérique (lecteur de disquette, disque dur, lecteur de CD-ROM), le système d'exploitation tient compte du format propre à chaque support servant au stockage de fichiers. Il offre également des mécanismes de protection permettant de contrôler quel utilisateur peut manipuler quel fichier.
  • L'accès aux ressources: Une des fonctions du système d'exploitation est de protéger les ressources contre l'utilisation par des personnes non autorisées, et de résoudre les conflits lorsque deux utilisateurs demandent simultanément la même ressource.
  • Détection et récupération en cas d'erreur: lorsqu'une erreur survient, que sa soit du matériel, ou du logiciel, le système d'exploitation traite l'erreur en adoucissant son impact sur le système informatique. Il peut tenter de recommencer l'opération, arrêter l'exécution du programme fautif, ou signaler le problème à l'utilisateur.
  • Contrôle. Un système d'exploitation peut tenir des statistiques d'utilisation des ressources, surveiller la performance, et les temps de réponse.


[178]

Du point de vue du programmeur, le système d'exploitation facilite le travail de programmation en fournissant une suite de services qui peuvent être utilisés par les logiciels applicatifs. Le système d'exploitation prends en charge et cache les détails de l'exploitation des périphériques ou de la réservation de la mémoire. C'est de ce point de vue là que les programmes sont considérés comme fonctionnant sur le système d'exploitation.

Un système d'exploitation peut également être vu comme une machine virtuelle. De ce point de vue le logiciel applicatif regarde vers le bas, en direction du système d'exploitation et du matériel. Le système d'exploitation cache les détails du matériel, et le logiciel applicatif ne peut pas voir la différence entre une machine simple, rudimentaire et une machine riche et complexe parce que le système d'exploitation offre les même services dans les deux cas. L'ensemble matériel + système d'exploitation forme la machine qui exécute le logiciel applicatif, une machine en partie simulée par du logiciel.

[179] les processus: la première ressource informatique dont l'utilisation est dirigée par le système d'exploitation est le processeur central. Celui-ci est utilisé collectivement par le système d'exploitation et les logiciels applicatifs. Le travail du système d'exploitation consiste à réserver des fractions de temps durant lesquelles le processeur est utilisé pour dérouler un ou l'autre processus - dans les faits exécuter un programme.

Les services offerts par le système d'exploitation permettent de démarrer un nouveau processus, d'arrêter un processus, il permettent la communication entre différents processus, et la synchronisation - l'alignement de plusieurs processus dans le temps.

Répartition des articles du Portail:Logiciel[modifier | modifier le code]

[180] [181] [182] [183] [184]

Modèle:Palette Systèmes de gestion de base de données Liste des logiciels SIG [185]

Par licence[modifier | modifier le code]

  • licence libre : 1614
    • licence GPL: 922
    • (non précisé): 388
    • licence LGPL: 129
    • licence BSD: 93
    • licence Apache: 52
    • licence MIT: 30
  • propriétaire: 594
    • (non précisé) : 250
    • propriété de Microsoft: 118
    • Freeware : 98
    • propriété de Apple: 67
    • propriété de IBM: 25
    • propriété de Adobe: 23
    • Shareware: 13
  • domaine public: 4

Par système d'exploitation[modifier | modifier le code]

  • Unix: 914
    • (non précisé): 595
    • Linux: 319
      • - non compté - Jeux pour Linux: 209
  • Windows : 785
    • non compté - Jeux pour windows: 2319
  • Mac OS: 280
    • non compté - Jeux pour Mac OS: 535
  • Java Runtime: 182
  • Application web: 89
  • DOS: 35
  • Android: 35

Logiciels applicatif - par application[modifier | modifier le code]

logiciel applicatif
  • réseau / Internet: 523
    • world wide web: 206
      • gestion de contenu : 96
      • navigateur web: 92
      • (non précisé): 18
    • messagerie instantanée: 97
    • (non précisé) : 70
    • courrier électronique: 60
    • partage de fichiers: 48
    • voix sur réseau IP: 42
  • développement de logiciels: 366
    • IDE: 98
    • éditeur de texte: 93
    • (non précisé) : 88
    • compilateur: 46
    • gestion de projets: 41
  • éducatif: 138
    • (non précisé) : 107
    • plate-forme pédagogique: 31
  • sciences: 122
    • information géographique: 70
    • calcul scientifique: 26
    • (non précisé) : 26
  • base de données: 112
    • SGBD: 75
    • (non précisé) : 37
  • émulateur: 57
  • médias: 86
    • lecteur multimédia: 38
    • (non précisé): 48
  • bureautique: 76
    • suite bureautique: 28
    • traitement de texte: 30
    • (non précisé): 18
  • dessin: 60
    • sur images matricielles: 17
    • (non précisé): 43

logiciels système - par sujet[modifier | modifier le code]

  • système d'exploitation: 542
    • (non précisé): 148
    • Linux: 122
    • Windows: 101
    • Unix: 98
    • Live CD: 73
  • sécurité : 130
    • (non précisé): 52
    • analyse du réseau: 41
    • antivirus: 37
  • utilitaire: 121
    • compression de données: 37
    • (non précisé): 35
    • sauvegarde: 26
    • installation: 23
  • système de fichiers: 113
  • environnement graphique: 90
    • (non précisé): 59
    • gestionnaire de fenêtres pour X Window: 31

Composants logiciels par type[modifier | modifier le code]

  • framework: 135
    • (non précisé): 90
    • .Net framework: 45
  • bibliothèque : 116
  • moteur de jeu: 86
  • codec: 75
    • codec audio: 42
    • codec vidéo: 26
    • (non précisé): 7
  1. a b c d e et f (en)Satya Komatineni et Dave MacLean,Pro Android 4,Apress - 2012,(ISBN inconnu)
  2. a b c d e et f (en)Reto Meier,Professional Android 4 Application Development,John Wiley & Sons - 2012, (ISBN 9781118223857)
  3. a b et c (en)Onur Cinar,Android Apps with Eclipse,Apress - 2012, (ISBN 9781430244356)
  4. (en)Android Apps Security,Sheran Gunasekera, (ISBN 9781430240624)
  5. (en)David Aaron Karp, Tim O'Reilly et Troy Mott,Windows Xp In A Nutshell,O'Reilly Media, Inc. - 2005, (ISBN 9780596009007)
  6. a b et c (en)William R. Stanek,Windows 7: The Definitive Guide: The Essential Resource for Professionals and Power Users,O'Reilly Media - 2009, (ISBN 9781449379452)
  7. a b et c (en)Feng Yuan,Windows Graphics Programming: Win32 GDI and DirectDraw,Prentice Hall Professional - 2001, (ISBN 9780130869852)
  8. a b c d e f g h i j et k (en)James Stroman,Administrative Assistant's and Secretary's Handbook,AMACOM Div American Mgmt Assn - 2008, (ISBN 9780814409763)
  9. a b et c (en)Allison J. Ross,Choosing a Career in Desktop Publishing,The Rosen Publishing Group, 2000, (ISBN 9780823932955)
  10. a et b (en)Susan E. L. Lake,Digital Desktop Publishing - The business of technology, Cengage Learning - 2008, (ISBN 9780538975001)
  11. a b c d e f et g (en)Learn2succeed.com Inc,Desktop Publishing for Beginners: How to Create Great Looking Brochures, Books and Documents,Productive Publications - 2012, (ISBN 9781552704660)
  12. (en)Roderick W. Smith,Linux Samba Server Administration: Craig Hunt Linux Library,John Wiley & Sons, 2006, (ISBN 9780782153132)
  13. (en)Jay Ts, Robert Eckstein, David Collier-Brown,Samba Pocket Reference: A Unix-to-Windows File & Print Server,O'Reilly Media, Inc. - 2003, (ISBN 9780596005467)
  14. Michel Dutreix,Samba: Installation, mise en oeuvre et administration,Editions ENI, 2003, (ISBN 9782746021457)
  15. a b c d et e (en)Dave Astle et Kevin H. Hawkins,Beginning OpenGL: Game Programming,Cengage Learning - 2004, (ISBN 9781592003693)
  16. (en)Paul Martz,OpenGL Distilled,Addison-Wesley Professional - 2006, (ISBN 9780132701785)
  17. a et b (en)PJ Cabrera, Peter Bakhirev, Ian Marsh, Ben Smith, Eric Wing, Scott Penberthy,Beginning iPhone Games Development,Apress - 2010, (ISBN 9781430226000)
  18. a b c d e et f (en)Marshall Brain et Ron Reeves,Win32 System Services: The Heart of Windows 98 and Windows 2000,Prentice Hall Professional - 2001, (ISBN 9780130225573)
  19. a et b (en)Ken Henderson,The Guru's Guide to SQL Server Architecture and Internals,Addison-Wesley Professional - 2004, (ISBN 9780201700473)
  20. a b c d et e (en)Charles Petzold, Programming Windows®,O'Reilly Media Inc. - 2010, (ISBN 9780735646032)
  21. a et b (en)Jeffrey R. Shapiro et Jim Boyce,Windows Server 2003 Bible, John Wiley & Sons - 2006, (ISBN 9780471998044)
  22. a b c d e f et g (en)Wei-Meng Lee, Beginning Android 4 Application Development,John Wiley & Sons, (ISBN 9781118240670)
  23. a b c d e f g h i et j (en)Dave Smith et Jeff Friesen,Android Recipes: A Problem-Solution Approach,Apress - 2012, (ISBN 9781430246145)
  24. a b c d e f et g Google Inc., Android 2.2.1 User's Guide
  25. (en)Satya Komatineni, Dave MacLean,Pro Android 4,Apress - 2012, (ISBN 9781430239307)
  26. (en)Satya Komatineni, Dave MacLean,Pro Android 4,Apress - 2012, (ISBN 9781430239307)
  27. (en)Satya Komatineni, Dave MacLean,Pro Android 4,Apress - 2012, (ISBN 9781430239307)
  28. (en)Satya Komatineni, Dave MacLean,Pro Android 4,Apress - 2012, (ISBN 9781430239307)
  29. (en)Anmol Misra et Abhishek Dubey,Android Security: Attacks and Defenses,CRC Press - 2013, (ISBN 9781439896464)
  30. a b et c (en)Anthony J. Massa,Embedded Software Development With Ecos,Prentice Hall Professional - 2003, (ISBN 97801303547309780130354730[à vérifier : ISBN invalide])
  31. a et b (en)Syngress,MCSA/MCSE Managing and Maintaining a Windows Server 2003 Environment (Exam 70-290): Study Guide,Syngress - 2003, (ISBN 9780080479255)
  32. a b c d et e (en)El Mostapha Aboulhamid - Frederic Rousseau,System Level Design with .Net Technology,CRC Press - 2010, (ISBN 9781439812129)
  33. a b et c (en)Wolfgang Ecker - Wolfgang Müller et Rainer. Dömer,Hardware-Dependent Software: Principles and Practice,Springer - 2009, (ISBN 9781402094361)
  34. a et b (en)Ahmed Amine Jerraya,Embedded Software for SoC,Springer - 2003, (ISBN 9781402075285)
  35. a b c d e et f (en)Rajkumar Buyya, James Broberg, Andrzej M. Goscinski,Cloud Computing: Principles and Paradigms,John Wiley & Sons, 2010, (ISBN 9781118002209)
  36. (en)Lee Gillam,Cloud computing,Springer - 2010, (ISBN 9781849962414)
  37. a b c d e et f (en)Kalani Kirk Hausman et Susan L. Cook,IT Architecture For Dummies,John Wiley & Sons - 2010, (ISBN 9780470926918) Erreur de référence : Balise <ref> incorrecte : le nom « dummies » est défini plusieurs fois avec des contenus différents.
  38. a b c d e et f (en)Zaigham. Mahmood - Richard Hill,Cloud computing for enterprise architectures,Springer - 2011, (ISBN 9781447122364)
  39. a b c d e f g h i j k et l (en)Brian J.S. Chee - Curtis Franklin Jr.,Cloud Computing: Technologies and Strategies of the Ubiquitous Data Center,CRC Press - 2010, (ISBN 9781439806173) Erreur de référence : Balise <ref> incorrecte : le nom « chee » est défini plusieurs fois avec des contenus différents.
  40. a b c d e f g h i j k l m n o p q r s t et u (en)Martin Reddy,API Design for C++,Elsevier - 2011, (ISBN 9780123850041)
  41. a b et c (en)Jaroslav Tulach,Practical API Design: Confessions of a Java Framework Architect,Apress - 2008, (ISBN 9781430209744)
  42. (en)Joe Casad,Sams Teach Yourself Tcp/Ip in 24 Hours,Sams Publishing - 2004, (ISBN 9780672325656)
  43. a et b (en)Daniel Jacobson - Dan Woods - Greg Brail,APIs: A Strategy Guide,O'Reilly Media Inc. - 2011, (ISBN 9781449308926)
  44. (en)David A. Watt,Programming Language Design Concepts,John Wiley & Sons - 2004, (ISBN 9780470020470)
  45. a b c d e f g h i j k et l (en)Brian Ward,How Linux Works: What Every SuperUser Should Know,No Starch Press - 2004, (ISBN 9781593270353)
  46. a b c et d (en)Neil Matthew et Richard Stones,Beginning Linux Programming,John Wiley & Sons - 2011, (ISBN 9781118058619)
  47. a b c d e f et g (en)John Levine,Linkers and loaders - Operating Systems Series,Morgan Kaufmann - 2000, (ISBN 9781558604964)
  48. (en)John Shapley Gray,Interprocess Communications in Linux,Prentice Hall Professional - 2003, (ISBN 9780130460424)
  49. (en) Richard Harrison et Mark Shackman,Symbian OS C++ for Mobile Phones, Volume 3,John Wiley & Sons - 2007, (ISBN 9780470066584)
  50. a b c d e f g h et i (en)Santanu Chattopadhyay,System Software, PHI Learning Pvt. Ltd. - 2007, (ISBN 9788120330511)
  51. (en)Shibu,Intro To Embedded Systems 1E,Tata McGraw-Hill Education, (ISBN 9780070145894)
  52. (en)Arndt Bode,Euro-Par 2000 Parallel Processing: 6th International Euro-Par Conference, Munich, Germany, August 29-September 1, 2000,Springer - 2000, (ISBN 9783540679561)
  53. (en)Brian Hook,Write portable code: an introduction to developing software for multiple platforms,No Starch Press - 2005, (ISBN 9781593270568)
  54. (en)Amit Singh,Mac OS X Internals: A Systems Approach,Addison-Wesley Professional - 2006, (ISBN 9780132702263)
  55. (en)David A. Watt,Programming Language Design Concepts,John Wiley & Sons - 2004, (ISBN 9780470020470)
  56. (en)Dick Buttlar - Jacqueline Farrell - Bradford Nichols,PThreads Programming: A POSIX Standard for Better Multiprocessing, O'Reilly Media, Inc. - 2013, (ISBN 9781449364748)
  57. a b et c (en)Donald G. Firesmith - B. Henderson-Sellers,The OPEN Process Framework: An Introduction,Pearson Education - 2002, (ISBN 9780201675108)
  58. (en)Mark Hamilton,Software Development: Building Reliable Systems,Prentice Hall Professional - 1999, (ISBN 9780130812469)
  59. (en)Adrian Kingsley-Hughes et Kathie Kingsley-Hughes,Beginning Programming,John Wiley & Sons - 2005, (ISBN 9780764597480)
  60. (en)Bernhard Westfechtel,Models and Tools for Managing Development Processes, Numéro 1646,Springer - 1999, (ISBN 9783540667568)
  61. a b et c (en)Manfred Nagl,Building Tightly Integrated Software Development Environments: The IPSEN Approach,Springer - 1996, (ISBN 9783540619857)
  62. (en)Ralph M. Stair - George Walter Reynolds,Principios de sistemas de información: un enfoque administrativo,Cengage Learning - 2009, (ISBN 9780324665284)
  63. Erreur de référence : Balise <ref> incorrecte : aucun texte n’a été fourni pour les références nommées thorn
  64. (en)Stephen G. Kochan,Programming in C,Sams Publishing - 2004, (ISBN 9780672331411)
  65. (en)William von Hagen,Ubuntu Linux Bible: Featuring Ubuntu 10.04 LTS,John Wiley & Sons - 2010, (ISBN 9780470881804)
  66. a et b (en)Rober McGovern,Eclipse in action: a guide for Java developers,Manning Publications Co. - 2003, (ISBN 9781930110960)
  67. a et b (en)Steve Holzner,Eclipse,O'Reilly Media, Inc. - 2009, (ISBN 9780596552626)
  68. a et b (en)Albert Endres et Herbert Weber, Software Development Environments and Case Technology: European Symposium, Königswinter, June 17-19, 1991,Springer - 1991, (ISBN 9783540541943)
  69. a b c d e f g h et i (en)Mark Hamilton,Software Development: Building Reliable Systems,Prentice Hall Professional - 1999, (ISBN 9780130812469)
  70. (en)Andrew Moore,Visual Studio 2010 All-in-One For Dummies,John Wiley & Sons - 2010, (ISBN 9780470885581)
  71. (en)InfoWorld,23 mai 1988, (ISSN 0199-6649)
  72. a b c d e f g h i j k l m et n (en)I.A.Dhotre - A.A.Puntambekar,Systems Programming,Technical Publications - 2008, (ISBN 9788184313925) Erreur de référence : Balise <ref> incorrecte : le nom « dhotre » est défini plusieurs fois avec des contenus différents.
  73. a b c et d (en)Sibsankar Haldar - Alex Alagarsamy Aravind,Operating Systems,Pearson Education India - 2010, (ISBN 9788131730225)
  74. a b et c (en)Joseph A. Fisher - Paolo Faraboschi - Clifford Young,Embedded Computing: A Vliw Approach To Architecture, Compilers And Tools,Elsevier - 2005, (ISBN 9781558607668)
  75. a et b (en)John Calcote,Autotools: A Practitioner's Guide to GNU Autoconf, Automake, and Libtool,No Starch Press - 2010, (ISBN 9781593272067)
  76. a et b Greg Perry,Visual Basic 6,Pearson Education France, (ISBN 9782744040825)
  77. (en)Marco Cantu,Mastering Delphi 6,John Wiley & Sons - 2006, (ISBN 9780782152784)
  78. (en)Greg. Hoglund - James Butler,Rootkits: subverting the Windows kernel,Addison-Wesley Professional - 2006, (ISBN 9780321294319)
  79. (en)Kate Gregory,Microsoft Visual C++ .Net 2003: Kick Start,Sams Publishing - 2004, (ISBN 9780672326004)
  80. a et b (en)Mark A. Deloura,Game Programming: Gems 2,Cengage Learning - 2001, (ISBN 9781584500544)
  81. a b c d e f g h i j et k (en)ECP Media LC - Ibsma,Software License Management Study Guide,IBSMA.com - 2009, (ISBN 9780984063109)
  82. a b c d et e (en)Software Testing and Quality Assurance,Nirali Prakashan, (ISBN 9788190639644)
  83. a b c d et e (en)Björn Regnell - Inge van de Weerd - Olga De Troyer,Software Business: Second International Conference, ICSOB 2011, Brussels, Belgium, June 8-10, 2011,Springer - 2011, (ISBN 9783642215438)
  84. a b c d e f g h i et j (en) Peter. Buxmann - Heiner. Diefenbach - Thomas. Hess,The Software Industry: Economic Principles, Strategies, Perspectives,Springer - 2013, (ISBN 9783642315107) Erreur de référence : Balise <ref> incorrecte : le nom « industry » est défini plusieurs fois avec des contenus différents.
  85. a b et c (en){{lien web|url=http://sdaw.info/asp/aspecis/20030126.pdf%7Ctitre=London School of Economics - A framework to analyzing software business models
  86. a b c d e f g h et i (en)Joseph Morris,Software Industry Accounting,John Wiley & Sons - 2001, (ISBN 9780471437451)
  87. a b c et d (en)« University of Pittsburgh - Reconstructing the software license »
  88. a et b (en)Michael A. Cusumano,The Business of Software: What Every Manager, Programmer, and Entrepreneur Must Know to Thrive and Survive in Good Times and Bad,Simon and Schuster - 2004, (ISBN 9780743266635) Erreur de référence : Balise <ref> incorrecte : le nom « cusumano » est défini plusieurs fois avec des contenus différents.
  89. (en)A.P.Godse et D.A.Godse,Fundamentals Of Computing And Programming,Technical Publications - 2008, (ISBN 9788184315097)
  90. a et b (en)Dr. Mukesh Dhunna et J. B. Dixit,Information Technology in Business Management,Laxmi Publications, Ltd. - 2010, (ISBN 9789380386232)
  91. (en)Arthur Tatnall,Encyclopedia of Portal Technologies and Applications, Idea Group Inc (IGI) - 2007, (ISBN 9781591409908)
  92. a et b (en)Henrik Vogt,Open Source Customer Relationship Management Solutions,Diplomica Verlag - 2009, (ISBN 9783836667593)
  93. a b c et d (en)Capers Jones, Olivier Bonsignour et Jitendra Subramanyam,The Economics of Software Quality, Addison-Wesley - 2011, (ISBN 9780132582209)
  94. a b c et d (en)Deborah Morley,Understanding Computers in a Changing Society,Cengage Learning - 2008, (ISBN 9780324596052)
  95. a b c et d (en)June Jamrich Parsons et Dan Oja,Computer concepts: new perspectives,Cengage Learning - 2008, (ISBN 9781423925163)
  96. a b et c (en)June Parsons, Dan Oja,Practical Computer Literacy,Cengage Learning, 2010, (ISBN 9780538742153)
  97. (en)Emerging Trends in Information Technology,Nirali Prakashan, (ISBN 9788185790886)
  98. (en)James A. Hall,Accounting Information Systems,Cengage Learning - 2010, (ISBN 9781439078570)
  99. (en)Gary B. Shelly - Harry J. Rosenblatt,Systems Analysis and Design,Cengage Learning - 2011, (ISBN 9780538481618)
  100. a et b (en)Office of Government Commerce,Introduction to the ITIL service lifecycle,The Stationery Office - 2010, (ISBN 9780113311316)
  101. (en)Jean Andrews,A+ Guide to Managing And Maintaining Your PC, Cengage Learning - 2006, (ISBN 9780619217587)
  102. (en) Rand Morimoto, Michael Noel, Omar Droubi, Ross Mistry, Chris Amaris,Windows Server 2008: Unleashed,Sams Publishing - 2008, (ISBN 9780672329302)
  103. (en)Richard Petersen,Red Hat Enterprise Linux 5: Administration Security Desktop,Surfing Turtle Press - 2008, (ISBN 9780982099803)
  104. (en)Sam R. Alapati, Expert Oracle Database 10g Administration,Apress - 2005, (ISBN 9781430200666)
  105. (en)Paul De Bra, Alfred Kobsa, David Chin,User Modeling, Adaptation, and Personalization: 18th International Conference, UMAP 2010, Big Island, HI, USA, June 20-24, 2010,Springer - 2010, (ISBN 9783642134692)
  106. (en)Carol Woodbury, Patrick Botz, Experts' Guide to Os/400 & I5/os Security,System iNetwork - 2004, (ISBN 9781583040966)
  107. a b c d e et f (en)Colin Ritchie,Database Principles and Design,Cengage Learning EMEA - 2008, (ISBN 9781844805402)
  108. a b c d e f g h i et j (en)Carlos Coronel, Steven Morris et Peter Rob,Database Systems: Design, Implementation, and Management,Cengage Learning - 2012, (ISBN 9781111969608)
  109. a b c d e f et g (en)Nick Dowling,Database Design And Management Using Access,Cengage Learning EMEA - 2000, (ISBN 9781844801091)
  110. a b c d e et f (en) Philip J. Pratt et Joseph J. Adamski,Concepts of Database Management,Cengage Learning - 2011, (ISBN 9781111825911)
  111. a b c d e f g h i j k l m n o p et q (en)P.S. Gill,Database Management Systems,I. K. International Pvt Ltd - 2008, (ISBN 9788189866839)
  112. a b c d et e (en)Toby J. Teorey, Sam S. Lightstone, Tom Nadeau, H.V. Jagadish,Database Modeling and Design: Logical Design, Fifth Edition,Elsevier - 2011, (ISBN 9780123820204)
  113. a b c d e et f (en)S. Sumathi et S. Esakkirajan,Fundamentals of Relational Database Management Systems,Springer - 2007, (ISBN 9783540483977)
  114. a b c d e f g h i j k l m n o et p (en)Sam Lightstone, Toby J. Teorey et Tom Nadeau,Physical Database Design, Morgan Kaufmann - 2007, (ISBN 9780123693891)
  115. a b c d e et f (en)Brian L. Stuart,Principles of Operating Systems: Design & Applications,Cengage Learning EMEA - 2008, (ISBN 9781418837693)
  116. (en)Godbole,Operating System 3E,Tata McGraw-Hill Education - 2011, (ISBN 9780070702035)
  117. a b c d e f g h i j k l m n o p q r s t u v w x y z aa et ab (en)Pal Chaudhury,Operating Systems: Priciples and Design,PHI Learning Pvt. Ltd. - 2009, (ISBN 9788120338111)
  118. Bhatt,Introduction To Operating Systems: Concepts And Practice An 2Nd Ed.,PHI Learning Pvt. Ltd. - 2007, (ISBN 9788120332584)
  119. Amjad Umar,Third Generation Distributed Computing Environments,nge solutions, inc - 2004, (ISBN 9780975918210)