Noyau Linux

Noyau Linux
Page d'aide sur l'homonymie Pour les articles homonymes, voir Noyau et Linux (homonymie).
Linux
Tux, le manchot
Développeurs Linus Torvalds et des milliers de contributeurs
Dernière version 3.1.1 (11 novembre 2011) [+/-]
Version avancée [+/-]
Écrit en C, Assembleur
Environnement Type UNIX
Type Noyau
Licence GNU GPL 2
Site web www.kernel.org

Le noyau Linux est un noyau de système d'exploitation de type Unix. Le noyau Linux est un logiciel libre développé essentiellement en langage C par des centaines de bénévoles et salariés communiquant par Internet.

Le noyau est le cœur du système, c'est lui qui s'occupe de fournir aux logiciels une interface pour utiliser le matériel. Le noyau Linux a été créé en 1991 par Linus Torvalds pour les compatibles PC construits sur l'architecture processeur x86. Depuis, il a été porté sur nombre d'architectures dont m68k, PowerPC, StrongARM, Alpha, SPARC, MIPS, etc. Il s'utilise dans une très large gamme de matériel, des systèmes embarqués aux superordinateurs, en passant par les ordinateurs personnels.

Ses caractéristiques principales sont d'être multitâche et multi-utilisateur. Il respecte les normes POSIX ce qui en fait un digne héritier des systèmes UNIX. Au départ, le noyau a été conçu pour être monolithique. Ce choix technique fut l'occasion de débats enflammés avec Andrew S. Tanenbaum, professeur à l'université libre d'Amsterdam, qui avait développé Minix, Andrew Tanenbaum arguant que les noyaux modernes se devaient d'être des micro-noyaux et Linus répondant que les performances des micronoyaux n'étaient pas bonnes. Depuis sa version 2.0, le noyau, bien que n'étant pas un micro-noyau, est modulaire, c'est-à-dire que certaines fonctionnalités peuvent être ajoutées ou enlevées du noyau à la volée (en cours d'utilisation).

Sommaire

Histoire

Le noyau Linux a vu le jour le 5 octobre 1991, date à laquelle Linus Torvalds annonça sur le forum Usenet comp.os.minix la disponibilité d'une ébauche de son système d'exploitation[1]. C'était la version 0.02, la 0.01 ayant eu une diffusion plus que confidentielle[2].

Avant d'être un noyau, Linux était un émulateur de terminal que Linus utilisait pour se connecter via un modem au serveur de son université. Il fut écrit à l'origine de façon ludique et initié pour comprendre le fonctionnement de son ordinateur, un 80386, machine très avancée pour son époque, car gérant à la fois une commutation maître/esclave efficace (à la différence du 80286) et une mémoire virtuelle. Après ajout de diverses fonctionnalités dont un système de fichiers hérité de Minix, Linus orienta son projet vers quelque chose de plus ambitieux : un système d'exploitation aux normes POSIX.

La mise à disposition du code de Linux (qui s'était appelé Freax dans la chambre de Linus) suscita beaucoup d'intérêt de la communauté des utilisateurs de Minix. Dès lors, des milliers de programmeurs bénévoles à travers le monde ont participé à ce projet.

Rythme de développement

Début 2009, la version 2.6.30 du noyau linux est composé de plus de 11,5 millions de lignes de code[3] dans 28 000 fichiers[4], alors que 2,8 millions de lignes ont été ajoutées entre noël 2008 et janvier 2010[5].

Entre 2005 et mi-2009, 5 000 développeurs et 500 entreprises ont participé à l'écriture du noyau. Le nombre de patchs proposé est en augmentation, notamment depuis la version 2.6.25[4].

Développement du noyau Linux

Si au début de son histoire le développement du noyau Linux était assuré par des développeurs bénévoles, les principaux contributeurs sont aujourd'hui un ensemble d'entreprises, souvent concurrentes, comme Red Hat, Novell, IBM ou Intel[6].

La licence du noyau Linux est la licence publique générale GNU dans sa version 2. Cette licence est libre, ce qui permet d'utiliser, copier et modifier le code source selon ses envies ou ses besoins. Ainsi, quiconque a les connaissances nécessaires peut participer aux tests et à l'évolution du noyau.

Rôle de Linus Torvalds

Linus Torvalds, créateur du noyau Linux, est le mainteneur officiel depuis le début en 1991. Il est une sorte de « dictateur bienveillant », l'autorité en termes de choix techniques et organisationnels. Les différentes versions du noyau publiées par Linus Torvalds s'appellent « mainline » ou « vanilla » en anglais. Ce sont les noyaux vanilla qui sont intégrés par les distributeurs, avec parfois l'addition de quelques patchs de sécurité, de corrections de bogue ou d'optimisations.

Processus de développement

Linus Torvalds a apporté un changement radical dans la façon dont les systèmes d'exploitation sont développés, en utilisant pleinement la puissance du réseau Internet.

Le processus de développement de Linux est public sur Internet : les sources du noyau y sont visibles par tous, les modifications de ces sources sont publiées et revues sur Internet et sont également visibles de tous. Un cycle de développement incrémental et rapide a été adopté depuis le début (aujourd'hui une nouvelle version est publiée toutes les 9 semaines environ), qui a permis de construire autour de Linux et d'Internet par couches successives une communauté dynamique de développeurs / sociétés / utilisateurs.

Mode de numérotation

Les numéros de version du noyau sont composés de trois chiffres : le premier est le numéro majeur, le second le numéro mineur. Avant l'apparition des versions 2.6.x, les numéros mineurs pairs indiquaient une version stable et les numéros mineurs impairs une version de développement. Ainsi, les versions 2.2, 2.4 sont stables, les versions 2.3 et 2.5 sont des versions de développement. Cependant, depuis la version 2.6 du noyau, ce modèle de numérotation stable/développement a été abandonné et il n'y a donc plus de signification particulière aux numéros mineurs pairs ou impairs. Le troisième chiffre indique une révision, ce qui correspond à des corrections de bogues, de sécurité ou un ajout de fonctionnalité, par exemple 2.2.26, 2.4.30 ou 2.6.11.

Depuis mars 2005 (date de publication du noyau 2.6.11), Greg Kroah-Hartman et Chris Wright tentent de maintenir une branche stabilisée du noyau vanilla de Linus Torvalds. Leur but est de stabiliser davantage le noyau, en intégrant des patchs de correction de bogues, de sécurité ou d'optimisation simples et concis répondant à des critères stricts. Cette branche n'intègre pas de nouvelles fonctionnalités. Leurs publications sont indiquées par un quatrième chiffre de version, par exemple 2.6.11.1 ou 2.6.11.6. Le fonctionnement technique et organisationnel de cette branche sera éprouvé avec le temps, sur le moyen et long terme.

Les patches

Il existe une multitude de patches disponibles sur Internet au sein de la communauté de développement du noyau Linux. Les plus connus sont ceux d'Andrew Morton suffixés -mm qui intègrent des patchs de fonctionnalités et optimisations très demandées et les WOLK (Working Over Loaded Kernel, noyau surchargé fonctionnel).

Linux en temps réel

Article détaillé : Linux-rt.

Les patches d'Ingo Molnár suffixés -rt sont utilisés par les distributions linux multimédia comme DeMuDi ; ils permettent d'obtenir les performances temps réel nécessaires au bon fonctionnement d'une station de travail multimédia professionnelle. Ingo Molnar est aussi à l'origine du débogueur du noyau kgdb.

Chronologie

Version Date Caractéristiques
0.01 17 septembre 1991 Diffusion confidentielle (10000 lignes de codes).
0.02 5 octobre 1991 Annonces sur usenet, système quasi inutilisable.
0.03 octobre 1991 bash et gcc disponibles en binaire.
0.10 décembre 1991 Premières contributions externes, internationalisation du clavier.
0.11 mi-décembre 1991 Pilote pour disquette, SCSI en développement.
0.12 5 janvier 1992 Mémoire virtuelle, système utilisable, plus de matériel supporté, diffusé en GNU GPL, consoles virtuelles.
0.95 7 mars 1992 Init/login, X Window est porté, un groupe de discussion existe : alt.os.linux
0.95a 17 mars 1992 Nouveau mainteneur pour les linux root diskette : Jim Winstead.
0.96 - 0.99 patch level 15Z 2 ans de développement, pour l'ajout de fonctionnalités et de corrections, les forums comp.os.linux.* sont les plus fréquentés de usenet et sont réorganisés 3 fois, signe que la communauté grandit et est très active.
1.0 mars 1994 Le noyau Linux est stable, pour la production et fournit les services d'un UNIX classique (176000 lignes de codes).
1.2 mars 1995 Beaucoup plus d'architectures processeur, modules chargeables, … (311000 lignes de codes)
2.0 juillet 1996 PowerPC, Multiprocesseur, plus de matériels supportés, gestion du réseau plus complète, apparition de la mascote Tux.
2.2 janvier 1999 Framebuffer, NTFS, Joliet, IPv6, … (1,8 million de lignes de codes)
2.4 janvier 2001 USB, PCMCIA, I2O, NFS 3, X86-64 … (3,378 millions de lignes de codes)
2.6 décembre 2003 ALSA, noyau préemptible, NFS 4, … (5,93 millions de lignes de codes)
2.6.18 19 septembre 2006 Outil Lockdep, Priority inheritance, gestion des priorités avec SMPnice, ordonnanceur CFQ, …[7].
2.6.19 29 novembre 2006 Système de fichiers GFS2, chiffrage eCryptfs, sous-système libata, …[8].
2.6.20 4 février 2007 Virtualisation KVM, Support UDP-Lite, scan asynchrone SCSI, …[9].
2.6.21 25 avril 2007 Interface de paravirtualisation VMI, Dynticks et Clockevents, …[10].
2.6.22 8 juillet 2007 Toute nouvelle couche wifi, allocateur de mémoire SLUB, ordonnanceur d'E/S CFQ, nouveaux pilotes …[11] (8,499 millions de lignes de codes).
2.6.23 9 octobre 2007 Nouvel ordonnanceur de tâches CFS, environnement de support des pilotes en espace utilisateur UIO intégré au noyau, SLUB allocateur de mémoire par défaut, …[12].
2.6.24 24 janvier 2008 Unification des architectures i386 et x86-64, E/S vectorielles, authentification des périphériques USB, ordonnancement de groupe avec CFS, …[13].
2.6.25 16 avril 2008 SMACK (alternative à SELinux), gestion du bus CAN, refonte de timerfd, amélioration de la gestion du temps réel[14].
2.6.26 13 juillet 2008 Intégration du débogueur du noyau kgdb, début de support des réseaux à topologie maillée unifiée, support des écrans Braille, support du PAT pour architecture x86, montage "--bind" en lecture seule, gestion de droits de sécurité par processus (securebits), amélioration de la virtualisation avec KVM[15].
2.6.27 9 octobre 2008 Jeu de drivers webcam GSPCA, couche réseau multi-files, UBIFS, système de debug ftrace…[16].
2.6.28 24 décembre 2008 Gestionnaire de mémoire pour cartes graphiques GEM (Graphics Execution Manager), système de fichiers ext4, meilleure montée en charge de la gestion mémoire, gestion des réseaux UWB[17].
2.6.29 23 mars 2009 Intégration de Btrfs, SquashFS, pile WiMAX, amélioration d'eCryptfs, intégration de KMS, etc.[18].
2.6.30 9 juin 2009 Intégration de NILFS, d'un cache local pour les systèmes de fichiers distants, du module de sécurité TOMOYO, du support des équipements de stockage objet[19] (11,561 millions de lignes de codes).
2.6.31 9 septembre 2009 Prise en charge d'USB 3.0, apparition de l'API fsnotify pour la notification des évènements relatifs au système de fichiers, défragmentation à chaud d'ext4, moniteur de performances perfcounters[20].
2.6.32 3 décembre 2009 Écriture des données par BDI, Changements dans l'ordonnanceur CFS, Gestion dynamique de l'énergie, Gestion d'intégrité TXT, devtmpfs pour le listage des périphériques, technique KSM pour la réduction de l'empreinte mémoire de systèmes virtualisés avec KVM[21].
2.6.33 24 février 2010 Système de fichier DRBD, pilote Nouveau, transaction TCP par cookie, contrôleur IO-Block[22], prise en charge de la fonction TRIM par ext4.
2.6.34 16 mai 2010 Systèmes de fichier Ceph et LogFS, mise en veille asynchrone des périphériques, mécanisme de sécurité GTSM, Lockdep-RCU, VGA-Switcheroo[23].
2.6.35 2 août 2010 Fonction cpu_stop, gestion de l'énergie, Compactage mémoire, performances réseau avec RPS et RFS, Qualité de service avec pm_qos, Gestion des interruptions[24].
2.6.36 20 octobre 2010 AppArmor, réécriture de la fonction OOM Killer, outil fanotify, optimisations VFS[25].
2.6.37 5 janvier 2011 Amélioration des performances d'ext4 et des mécanismes de traçage (jump label), introduction de l'allocateur mémoire memblock en remplacement de early_res et de FITRIM (d'abord pour ext4) plus performant que TRIM pour les disques SSD, pile PPTP, premier pilote wifi Broadcom (tous les principaux constructeurs wifi ont maintenant un pilote libre)[26].
2.6.38 15 mars 2011 Nouvelle gestion macroscopique de la pagination, optimisation de la résolution de chemin d'accès[27].
2.6.39 18 mai 2011 Approche par thread pour le branchement des périphériques, intégration officielle de ipsets[28], prise en charge de FITRIM par Btrfs, fin du verrou global (Big Kernel Lock).
3.0 22 juillet 2011 Nouvelle mise en cache des pages mémoire, améliorations de Btrfs, nouvelle interface d'accès à l'alarme du BIOS, suppression de prefetch, compilateur à la volée pour les instructions de comparaison de la pile réseau[29].
3.1 24 octobre 2011 Architecture OpenRISC, gestion de la consommation par cpupower, ajouts de fonctionnalités pour KVM, amélioration de la gestion mémoire de Xen, de la gestion des débits des disques, du Virtual File System, du protocole B.A.T.M.A.N., ajout de pilotes NFC[30]

Frise chronologique

Source : www.kernel.org[31]

Compilation du noyau

Comme tous les programmes informatiques, le noyau Linux est écrit sous forme de code source, et doit être transformé en binaire exécutable pour être compris par le microprocesseur.

Dans la mesure où le code source du noyau Linux contient une très grande quantité de fonctionnalités, l'utilisateur peut choisir de n'intégrer que celles qui lui sont utiles ou les mieux adaptées (de nombreuses fonctionnalités sont concurrentes) : c'est l'étape de configuration du noyau.

La grande majorité des distributions GNU/Linux installent un noyau précompilé qui répond aux besoins des postes de travail et serveurs. Il est donc rare qu'un utilisateur de Linux ait à compiler un noyau. La compilation permet d'adapter le noyau à des besoins spécifiques comme le support de matériels peu répandus, l'activation de fonctionnalités expérimentales ou l'adaptation à des plates-formes particulières comme des systèmes embarqués.

Le code source du noyau Linux est disponible sur le site kernel.org, mais les distributions GNU/Linux fournissent également des sources empaquetées sur leurs dépôts.

L'étape la plus importante de la compilation d'un noyau personnalisée est la configuration du noyau. Les options de configuration sont déclarées dans le fichier .config, chacun correspond à une fonctionnalité du noyau, qu'on décide d'utiliser ou non. Trois choix sont généralement possibles :

  • Y: la fonctionnalité est compilée et implantée dans l'image du noyau
  • M: la fonctionnalité est compilée comme module
  • N: la fonctionnalité est ignorée

Certaines options consistent en un choix binaire: la fonctionnalité est incluse dans l'image noyau ou n'est pas compilée

Il existe plusieurs outils pour régler la configuration :

  • make config: programme en mode texte qui énumère toutes les options et demande d'entrer son choix
  • make menuconfig: utilitaire en mode texte écrit avec ncurses, il permet une navigation plus aisée dans la configuration
  • make gconfig: outil graphique basé sur GTK+
  • make xconfig: outil graphique basé sur Qt
  • make oldconfig: outil permettant de récupérer les paramètres de configuration d'une ancienne version du noyau afin de ne pas recommencer la configuration à zéro.

La compilation du noyau et des modules se fait par la commande make. Cette opération peut être assez longue. L'installation est automatisée, les commandes make install et make modules_install permettent respectivement d'installer l'image du noyau et ses modules.

Pour permettre l'amorçage du système avec la nouvelle image de noyau, il est nécessaire de configurer le chargeur de démarrage (LILO, GRUB) pour qu'il exécute l'image du noyau au démarrage.

La distribution Debian fournit un utilitaire, make-kpkg qui automatise les étapes ci-dessus et crée des paquets Debian. Ceci permet ensuite un déploiement facile sur un grand nombre de machines.

Gestion de versions

Le noyau a longtemps été maintenu sans système de gestion de versions, avant tout parce que Linus Torvalds n'aimait pas les systèmes de gestion de version centralisés[32].

En 2002, le noyau est passé à Bitkeeper, un système qui correspondait aux exigences techniques de Torvalds. Bitkeeper a été offert à Torvalds et à quelques autres[Qui ?], mais il ne s'agissait pas d'un logiciel libre, ce qui a suscité des controverses dans la communauté[33]. Le système n'était pas interopérable avec des systèmes de gestions de version libres tels que CVS et SVN

En avril 2005, les efforts d'Andrew Tridgell pour faire de l'ingénierie inverse sur Bitkeeper ont conduit BitMover, l'éditeur de ce logiciel, à arrêter son soutien au développement de Linux. En réaction, Linus Torvalds et quelques autres ont développé un nouveau système de gestion de versions : Git. Git a été écrit en quelques semaines, et deux mois plus tard, sortait une nouvelle version du noyau développée avec Git[34]. Le projet Git a ensuite volé de ses propres ailes, puis il a été largement adopté dans la communauté du logiciel libre.

Caractéristiques techniques

Portabilité

Bien que le but initial du projet était seulement de fournir un noyau de type UNIX sur les architectures x86, la disponibilité des sources a permis à des contributeurs de l'adapter à un très grand nombre d'architectures.

Linux peut fonctionner sur des ordinateurs grand public aussi bien sur les super-calculateurs comme le Tianhe-1A, classé premier au Top 500 de novembre 2010[35], dans ce même classement Linux était présent sur 91,8 % des machines[36]. Le noyau est également utilisé sur des systèmes embarqués, pourvus d'un matériel plus modeste ; parmi les exemples les plus connus, on peut citer les systèmes de navigation GPS TomTom ou le téléphone HTC Magic, équipé de la distribution Linux Android.

Litiges

Simple défi d'étudiant au départ, le noyau Linux est devenu, en tant que concurrence gratuite commerciale ou non, une menace pour les autres systèmes d'exploitations commerciaux. Ces dernières années, il a été la cible de campagnes publicitaires et d'actions en justice.

La nature même du développement décentralisé du noyau Linux, les milliers de participations à son évolution de la part d'entreprises ou de particuliers, et la protection du code source par la licence GPL juridiquement contestée en font une structure peu apte à se défendre de manière autonome. Face à un concurrent coriace sur le plan du rapport qualité/prix, il est donc tentant de porter la concurrence sur le terrain juridique.

  1. Sur la marque : en 1995, Linux avait acquis une certaine notoriété ; un particulier eut l'idée de déposer la marque Linux, ce que personne n'avait fait (la même chose était arrivée avec MLF quelques années avant en France). La réaction fut vive dans toute la communauté, le litige se régla à l'amiable et Linus devint propriétaire du nom Linux (et donc libre de le refuser ou non à une distribution qu'il estimerait s'écarter trop du projet initial).
  2. Sur les droits d'auteur : un procès opposa SCO à IBM au sujet du noyau Linux : voir à ce sujet SCO contre Linux.
  3. Sur les brevets logiciels : incompatibles avec l'idée de logiciel libre et celle d'interopérabilité indispensable à leurs succès, les brevets logiciels sont une épée de Damoclès pesant sur les logiciels libres en général et Linux en particulier. De tels brevets sont délivrés aux États-Unis, mais les brevets logiciels en Europe ont été rejetés par le Parlement européen.

Notes et références

  1. Le message sur wikisource
  2. Linus Torvalds a annoncé publiquement qu'il travaillait sur un nouveau système d'exploitation le 25 août 1991
  3. 2010… l’odyssée de l’informatique ?, Sabine Bohnké, 25 janvier 2010]
  4. a et b [PDF] The Linux Foundation, « Linux Kernel Development », 2009. Consulté le 4 février 2010
  5. Open Source : 75% des contributeurs de Linux sont rémunérés sur zdnet.fr
  6. https://www.linuxfoundation.org/publications/linuxkerneldevelopment.php
  7. http://linuxfr.org/2006/09/20/21352.html
  8. http://linuxfr.org/2006/11/30/21677.html
  9. http://linuxfr.org/2007/02/04/21986.html
  10. http://linuxfr.org/2007/04/26/22398.html
  11. http://linuxfr.org/2007/07/09/22676.html
  12. http://linuxfr.org/2007/10/10/23088.html
  13. http://linuxfr.org/2008/01/25/23529.html
  14. http://linuxfr.org/2008/04/17/23919.html
  15. http://linuxfr.org/2008/07/14/24297.html
  16. http://linuxfr.org/2008/10/10/24559.html
  17. http://linuxfr.org/2008/12/25/24808.html
  18. http://linuxfr.org/2009/03/24/25162.html
  19. http://linuxfr.org/2009/06/10/25555.html
  20. http://linuxfr.org/2009/09/10/25848.html
  21. http://linuxfr.org/2009/12/03/26207.html
  22. http://linuxfr.org/2010/02/25/26478.html
  23. http://linuxfr.org/2010/05/17/26852.html
  24. http://linuxfr.org/2010/08/02/27164.html
  25. http://linuxfr.org/2010/10/21/27463.html
  26. http://linuxfr.org/2011/01/05/27723.html
  27. http://linuxfr.org/news/le-noyau-linux-est-disponible-en-version-2638
  28. http://linuxfr.org/news/sortie-du-noyau-linux%C2%A02639
  29. http://linuxfr.org/news/le-noyau-linux-est-disponible-en-version%C2%A030
  30. http://linuxfr.org/news/sortie-du-noyau-linux%C2%A031
  31. http://www.kernel.org/pub/linux/kernel/
  32. "NOTE! I detest the centralized SCM model" Message de Torvalds sur la Kernel Mailing List
  33. Linux Torvalds, « Kernel SCM saga.. », 2005. Consulté le 5 nov. 2009
  34. Linux Kernel Mailing List, « Linux 2.6.12 », 2005-06-17
  35. http://www.top500.org/system/10587
  36. http://www.top500.org/stats/list/36/osfam

Voir aussi

Sur les autres projets Wikimedia :

Articles connexes

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Noyau Linux de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • Noyau linux — Pour les articles homonymes, voir Noyau et Linux (homonymie). Linux …   Wikipédia en Français

  • Branches de développement du noyau Linux — Sommaire 1 La branche de développement principale ( linus tree ) 2 La branche stable 3 Les versions intermédiaires quotidiennes ( daily git snapshots ) …   Wikipédia en Français

  • Documentation du noyau Linux — Le noyau Linux est fourni avec une documentation complète, usuellement disponible dans une distribution Linux sous la forme d un paquetage de documentation nommé linux doc (assorti d un numéro de version). Un site Internet de référence fourni… …   Wikipédia en Français

  • Noyau Unix — Noyau Linux Pour les articles homonymes, voir Noyau et Linux (homonymie). Linux …   Wikipédia en Français

  • LINUX —  Pour l’article homonyme, voir Linux (homonymie).  Linux …   Wikipédia en Français

  • Linux's Not UNIX — Linux  Pour l’article homonyme, voir Linux (homonymie).  Linux …   Wikipédia en Français

  • Linux Is Not UNIX — Linux  Pour l’article homonyme, voir Linux (homonymie).  Linux …   Wikipédia en Français

  • Linux x86 64 — Linux  Pour l’article homonyme, voir Linux (homonymie).  Linux …   Wikipédia en Français

  • Linux Ou GNU/Linux — Un débat divise les partisans du logiciel libre au sujet du nom à donner aux systèmes d exploitation fondés sur un noyau Linux. Les plus nombreux (avec le grand public) l appellent simplement « Linux », les autres (peut être plus… …   Wikipédia en Français

  • Linux ou gnu/linux — Un débat divise les partisans du logiciel libre au sujet du nom à donner aux systèmes d exploitation fondés sur un noyau Linux. Les plus nombreux (avec le grand public) l appellent simplement « Linux », les autres (peut être plus… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”