Wikibooks
enwikibooks
https://en.wikibooks.org/wiki/Main_Page
MediaWiki 1.47.0-wmf.8
first-letter
Media
Special
Talk
User
User talk
Wikibooks
Wikibooks talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Cookbook
Cookbook talk
Transwiki
Transwiki talk
Wikijunior
Wikijunior talk
Subject
Subject talk
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Wikibooks:Requests for permissions
4
840
4641489
4631004
2026-06-28T13:00:07Z
Tenshi Hinanawi
3513579
Request for bot flag
4641489
wikitext
text/x-wiki
__NEWSECTIONLINK__ {{Discussion Rooms}} {{Requests for permissions/Archives}} {{shortcut|WB:RFP|WB:PERM}} [[Category:Wikibooks administration|{{PAGENAME}}]]
All [[Wikibooks:User rights|rights]] available on Wikibooks are handled here, including [[Wikibooks:Autoreviewed users|autoreview]], [[Wikibooks:Reviewers|reviewer]], [[Wikibooks:Importers|importer]], [[Wikibooks:Import uploaders|import uploader]], [[Wikibooks:Uploaders|uploader]], [[Wikibooks:Temporary account IP viewer|temporary account IP viewer]], [[Wikibooks:Administrators|administrator]], [[Wikibooks:Interface administrators|interface administrator]], [[Wikibooks:Administrators|bureaucrat]], [[m:CheckUser|CheckUser]], [[Wikibooks:Pseudo-bots|pseudo-bot]], and [[Wikibooks:Bots|bot]] flags. A nomination must demonstrate how the project will benefit from granting the rights.
;Nominations
:To nominate a user (including yourself), add their username to the appropriate section below. Please explain why you feel the nominated user would be a good choice. All registered Wikibookians may comment, and provide arguments in support or opposition. For the bot flag, technical information about the bot may be requested. See the specific requirements for each type of access on their respective pages. Please do not nominate other users unless they have already agreed to be nominated.
;Outcome
:Consensus does not need to be demonstrated —though discussion is welcome— in granting autoreview, reviewer, importer, and uploader flags. Administrators may use their best judgement in granting those. Interface admin was historically part of the administrator tool set and is granted on request to administrators. All other tools require community consensus and can only be granted by bureaucrats. Access to CheckUser is governed by [[meta:CheckUser policy|CheckUser policy]]. After about one week, if there is consensus to grant access, then a [[Special:ListUsers/bureaucrat|bureaucrat]] (or steward if there are no bureaucrats) will make it so and record the fact here. If not, the bureaucrat or steward may refuse to grant the rights and the request will remain until a consensus is reached. The importer and import uploader permissions require a 5-day discussion before the right(s) can be granted.
;Note(s)
:This project allows [[Wikibooks:Global rights policy#Global bots|global bots]], but otherwise does ''not'' allow automatic approval, nor does it utilize the [[:m:Bot policy|standard bot policy]].
= Removal of permissions=
{{mbox
| image = [[File:Symbol comment vote.svg|40px]]
| text = '''Note:''' You may request removal of ''your own'' rights at [[meta:Steward requests/Permissions]]. Requests to remove others' rights should be placed here, whether due to inactivity, or abuse. Proposals for the removal of advanced permissions (included admin and bureaucrat rights) are governed by the [[WB:ADMIN]] policy. A minimum discussion of two weeks is required to remove an admin or bureaucrat for inactivity.
}}
= Requests for permissions =
{{mbox
| image = [[File:Symbol comment vote.svg|40px]]
| text = '''Note:''' When adding nominations, please use the format <code>=={{tlx|usercheck|Username}} (Right requested)==</code> followed by the nomination.
}}
=={{usercheck|TenshiBot}} (bot)==
Hi. I'd like to request a bot flag for my [[User:TenshiBot|bot]], which would fix [[mw:Help:Extension:Linter|Linter]] errors on this wiki. [[User:Tenshi Hinanawi|Tenshi Hinanawi]] ([[User talk:Tenshi Hinanawi|discuss]] • [[Special:Contributions/Tenshi Hinanawi|contribs]]) 13:00, 28 June 2026 (UTC)
8k4zh6olbh8yetam1y8r2nsa32hu9fl
Biochemistry/Proteins/Protein structure and folding
0
7305
4641472
4535109
2026-06-28T12:02:23Z
Dirk Hünniger
343292
/* Protein structural levels */
4641472
wikitext
text/x-wiki
== What is protein folding? ==
Protein folding is commonly a fast or very fast process, often but not always reversible, taking no more than a few milliseconds to occur. It can be viewed as a complex compromise between the different chemical interactions that can happen between the amino acid sidechains, the amidic backbone and the solvent. There are literally millions of possible three-dimensional configurations, often with minimal energetic differences between them. That's why we're still almost unable to predict the folding of a given polypeptide chain ''ab initio''. Protein folding problem is that scientist still has failed to crack the code that governs folding. Moreover, the ability of biological polymers such as protein fold into well-defined structures is remarkable thermodynamically. An unfolded polymer exists are random coils, each copy of an unfolded polymers will have different conformation, yielding a mixture of many possible conformation.
==Folding depends only on primary structure==
In 1954 Christian Anfinsen demonstrated that the folding of a protein in a given environment depends only on its primary structure - the amino acid sequence. This conclusion was by no means obvious, given the complexity of the folding process and the paucity of biochemical knowledge at the time. The process of folding often begins co-translationally, so that the N-terminus of the protein begins to fold while the C-terminal portion of the protein is still being synthesized by the ribosome. Specialized proteins called chaperones assist in the folding of other proteins.
Meanwhile, protein folding is a thermodynamically driven process: that is, proteins fold by reaching their thermodynamically most stable structure. The path followed by the protein in the potential energy landscape is far from obvious, however. Many local and non-local interactions take part in the process, and the space of possible structures is enormous. As of today molecular dynamics simulations are giving invaluable hints on the first stages of the folding process. It is known now that the unfolded state still retains key long-range interactions and that the local propensity of the sequence to fold in a given secondary structure element narrow the "search" in the so-called conformational space. This seems to mean that biological proteins somehow evolved to properly fold. In fact, many random amino acid sequences only acquire ill-defined structures (molten globules) or no structure at all.
There are some general rules, however. Hydrophobic amino acids will tend to be kept inside the structure, with little or no contact with the surrounding water; conversely, polar or charged amino acids will be often exposed to solvent. Very long proteins will often fold in various distinct modules, instead of in a single large structure.
==The Ramachandran plot==
The Ramachandran plot was invented by professor G.N.Ramachandran, a very eminent scientist from India. He discovered the triple helix structure of collagen in 1954 a year after the double helix structure was put forth. In a polypeptide the main chain N-Calpha and Calpha-C bonds relatively are free to rotate. These rotations are represented by the torsion angles phi and psi, respectively.
G N Ramachandran used computer models of small polypeptides to systematically vary phi and psi with the objective of finding stable conformations. For each conformation, the structure was examined for close contacts between atoms. Atoms were treated as hard spheres with dimensions corresponding to their van der Waals radii. Therefore, phi and psi angles which cause spheres to collide correspond to sterically disallowed conformations of the polypeptide backbone
==Intramolecular forces in protein folding==
The tertiary structure is held together by hydrogen bonds, hydrophilic interactions, ionic interactions, and/or disulfide bonds.
==The protein folding problem==
The protein folding problem relates to what is known as the Levinthal paradox. Levinthal calculated that if a fairly small protein is composed of 100 amino acids and each amino acid residue has only 3 possible conformations (an underestimate) then the entire protein can fold into 3<sup>100</sup>-1 or 5x10<sup>47</sup> possible conformations. Even if it takes only 10<sup>-13</sup> of a second to try each conformation it would take 10<sup>27</sup> years to try them all. Obviously a protein doesn't take that long to fold, so randomly trying out all possible conformations is not the way proteins fold. Since most proteins fold on a timescale of the order of milliseconds it is clear that the process is directed in some manner dependent on the constituents of the chain. The protein folding problem which has perplexed scientists for over thirty years is that of understanding how the tertiary structure of a protein is related to its primary structure, because it has been proven that the primary structure of a protein holds the only information necessary for the protein to fold. Ultimately the aim is also to be able to predict what pathway the protein will take.
==Folding in extreme environments==
Most proteins are not capable of maintaining their three-dimensional shape when they are exposed to environmental extremes such as a low or high pH, or a highly variable temperature.
Changes in the pH of the proteins environment may alter the charges on the amino acid side chains that form the whole protein, so that repulsive or attractive forces may form, altering the secondary and tertiary structure of the protein as a whole, as a result the shape of the enzyme is warped, and the now non-functional protein is said to be denatured.
A high or exceptionally low temperature can cause the constitutive bonds on the protein to be broken, again resulting in the protein being rendered non-functional.
It is important to note that certain proteins, mainly digestive enzymes such as trypsin, are capable of with-standing a pH as low as 1. If the pH of such an enzymes environment were to increase to approximately pH5, it would be inactivated.
==Protein misfolding==
The way that a protein folds is one of the most important factors influencing its properties, as this is what determines which active groups are exposed for interaction. If the protein misfolds, its properties can be markedly changed.
One example of this is in Transmissible Spongiform Encephalopathies, such as BSE, and Scrapie. In these, the prion protein, which is involved in the brain's copper metabolism, misfolds, and starts forming plaques, which destroy brain tissue.
==Protein structural levels==
Biochemists refer to four distinct aspects of a protein's structure:
===Primary structure===
Primary structure is practically a synonym of the amino acid sequence. It can also contain informations on amino acids linked by peptide bonds. Primary structure is typically written as a string of three letter sequences, each representing an amino acid. Peptides and proteins must have the correct sequence of amino acids.
===Secondary structure===
''Secondary structure'' elements are elementary structural patterns that are present in most,if not all,known proteins. These are highly patterned sub-structures --alpha helix and beta sheet-- consisting of loops between elements or segments of polypeptide chain that assume no stable shape. Secondary structure elements, when mapped on the sequence and depicted in the relative position they have in respect to each other, define the ''topology'' of the protein. It is also relevant to note that hydrogen bonding between residues is the cause for secondary structure features; secondary structure is usually described to beginning biochemists as (almost) entirely independent of residue side-chain interactions.
===Tertiary structure===
''Tertiary structure'' is the name given to refer to the overall shape of a single protein molecule. Although tertiary structure is sometimes described (especially to beginning biology and biochemistry students) as being a result of interactions between amino acid residue side chains, a more correct understanding of tertiary structure is the interactions between elements of secondary protein structure, i.e. alpha-helices and beta-pleated sheets. Tertiary structure is often referred to as the "fold structure" of a protein, since it is the result of the complex three-dimensional interplay of other structural and environmental elements.
===Super-tertiary structure (protein modules)===
Some literature refers to elements of super-tertiary structure, which often refers to elements of folding that, for whatever reason, do not neatly fit into the category of tertiary structure. Often this level of distinction is saved for graduate level coursework.
Protein denaturation can be a reversible or an irreversible process, i.e., it may be possible or impossible to make the protein regain its original spatial conformation.
===Quaternary structure===
Quaternary structure is the shape or structure that results from the union of more than one protein molecule, usually called ''subunit proteins'' ''subunits'' in this context, which function as part of the larger assembly or protein complex.
And it refers to the regular association of two or more polypeptide chains to form a complex. A multi-subunit protein may be composed of two or more identical polypeptides, or it may include different polypeptides.
Quaternary structure tends to be stabilized mainly by weak interactions between residues exposed on surfaces polypeptides within a complex.
=Secondary structure elements=
==The alpha helix==
[[Image:AlphaHelixBALL.png|thumb|right|Alpha Helix]]
The alpha helix is a periodic structure formed when main-chain atoms from residues spaced four residues apart hydrogen bond with one another. This gives rise to a helical structure, which in natural proteins is always right-handed. Each turn of the helix comprises 3.6 amino acids. Alpha helices are stiff, rod-like structures which are found in many unrelated proteins. One feature of these structures is that they tend to show a bias in the distribution of hydrophobic residues such that they tend to occur primarily on one face of the helix.
The amino acids in an α helix are arranged in a helical structure, about 5 Å wide. Each amino acid results in a 100° turn in the helix, and corresponds to a translation of 1.5Å along the helical axis. The helix is tightly packed; there is almost no free space within the helix. All amino acid side-chains are arranged at the outside of the helix. The N-H group of amino acid (n) can establish a hydrogen bond with the C=O group of amino acid (n+4).
Short polypeptides usually are not able to adopt the alpha helical structure, since the entropic cost associated with the folding of the polypeptide chain is too high. Some amino acids (called ''helix breakers'') like proline will disrupt the helical structure.
Ordinarily, a helix has a buildup of positive charge at the N-terminal end and negative charge at the C-terminal end which is a destabilizing influence. As a result, α helices are often capped at the N-terminal end by a negatively charged amino acid (like glutamic acid) in order to stabilize the helix dipole. Less common (and less effective) is C-terminal capping with a positively charged protein like lysine.
α helices have particular significance in DNA binding motifs, including helix-turn-helix motifs, leucine zipper motifs and zinc finger motifs. This is because of the structural coincidence of the α helix diameter of 12Å being the same as the width of the major groove in B-form DNA.
α helices are one of the basic structural elements in proteins, together with beta sheets.
The peptide backbone of an α helix has 3.6 amino acids per turn.
==The beta sheet==
[[Image:BetaPleatedSheetProtein.png|right|thumb|200px|Diagram of Β-Pleated sheet and bond structure of protein]]
The '''β sheet''' (also '''β-pleated sheet''') is a commonly occurring form of regular secondary structure in proteins, first proposed by Linus Pauling and Robert Corey in 1951. It consists of two or more amino acid sequences within the same protein that are arranged adjacently and in parallel, but with alternating orientation such that hydrogen bonds can form between the two strands. The amino acid chain is almost fully extended throughout a β strand, lessening the probability of bulky steric clashes. The Ramachandran plot shows optimal conformation with angle phi = -120 to -60 degrees and angle psi = 120 to 160 degrees. The N-H groups in the backbone of one strand establish hydrogen bonds with the C=O groups in the backbone of the adjacent, parallel strand(s). The cumulative effect of multiple such hydrogen bonds arranged in this way contributes to the sheet's stability and structural rigidity and integrity: for example, cellulose's beta-1,4 glucose structure. The side chains from the amino acid residues found in a β sheet structure may also be arranged such that many of the adjacent side chains on one side of the sheet are hydrophobic, while many of those adjacent to each other on the alternate side of the sheet are polar or charged (hydrophilic). Some sequences involved in a β sheet, when traced along the backbone, take a ''hairpin turn'' in orientation (direction), sometimes through one or more prolines. The α-C atoms of adjacent strands stand 3.5Å apart. In addition to the parallel beta sheet, there is also the anti-parallel beta sheet. The hydrogen-bond still exists in this conformation but the main difference lies in the directionality of the protein. In this conformation the proteins run in opposite directions, but the resulting hydrogen bonds connect directly across from one another instead of the diagonal. In short, beta sheets can be purely parallel, anti-parallel, or even mixed.
==The random coil==
A protein that completely lacks secondary structure is a '''random coil'''. In random coil, the only fixed relationship between amino acids is that between adjacent residues through the peptide bond. As a result, random coil can be detected from the absence of the signals in a multidimensional nuclear magnetic resonance experiment that depend on particular peptide-peptide interactions. Likewise in the images produced in crystallography experiments, pieces of random coil appear simply as an absence of "electron density" or contrast. Random coil is also easily distinguished by circular dichroism. Denaturing reduces a protein entirely to random coil.
==Less common secondary structure elements==
Certain other periodic structures rarely appear in proteins, some of which are similar to the more common types. For example, two variants of the alpha-helix also occur, the 3-10 helix and the pi helix. These have helical pitches of 3 and 4.4 residues per turn respectively, corresponding to hydrogen bonds forming between residue i and i+3 for the 3-10 helix and between i and i+5 for the pi helix. Both are usually very short (1 turn or so) and have been seen only at the ends of alpha helices.
=Tertiary structure elements=
==Alpha-only structures==
Structures that contain only Alpha Helices
==Beta-only structures==
=Common folds and modules=
==The Rossman fold==
The Rossmann fold is a protein structural motif found in proteins that bind nucleotides, especially the cofactor NAD. The structure is composed of three or more parallel beta strands linked by two alpha helices in the topological order beta-alpha-beta-alpha-beta. Because each Rossmann fold can bind one nucleotide, binding domains for dinucleotides such as NAD consist of two paired Rossmann folds that each bind one nucleotide moiety of the cofactor molecule. Single Rossmann folds can bind mononucleotides such as the cofactor FMN.
The motif is named for Michael Rossmann who first pointed out that this was a frequently occurring motif in nucleotide binding proteins.
==The hemoglobin fold==
==The immunoglobulin fold==
==Keratin==
Found in hair and in the palms of human hands.
==Collagen==
{{BookCat}}
5i08a51q66jfnjcgknb0o07myoq5gju
Introduction to Game Theory
0
18096
4641587
4627479
2026-06-28T22:43:07Z
MinskyyCharmmaker
3610149
/* */ added 3 new themes in introduction of ame theory
4641587
wikitext
text/x-wiki
Game Theory might be better described as Strategy Theory, or Theory of Interactive Decision Making. A ''strategic situation'' involves two or more interacting players who make decisions while trying to anticipate the actions and reactions by others. Game theory studies the ''general principles'' that explain how people and organizations act in strategic situations.
Game theory studies strategy mainly through the analysis of different "games". A "game" in game theory is a fully explicit structure which characterizes each player's set of actions, payoffs and possible outcomes under given rules of playing. Given this conditions, rational players act in such a way, that they maximize the expected value of their ''von Neumann-Morgenstern Utility.'' Games provide a simplified world within which to study strategy (as opposed to the real world where complexities get in the way of developing general principles).
==Table of Contents==
'''1''' Introduction to Game Theory
# [[/Overview/]]
# [[/Short history/]]
# [[/Theory of rational choice/]]
# [[Subject of game theory]]
# [[Basic concepts]]
# [[Utility in game theory]]
===Part I - Games with Perfect Information===
'''2''' Nash Equilibrium
# [[/Strategic games|Strategic games]]
# [[/Prisoner's Dilemma|Example: ''Prisoner's Dilemma'']]
# [[/Matrix Notation|Matrix Notation In Game Theory - How To Set Out A Game]]
# [[/Battle of the sexes|Example: ''Battle of the sexes'']] (a.k.a. ''Bach or Stravinsky?'')
# [[/Matching Pennies|Example: ''Matching Pennies'']]
# [[/Nash equilibrium/]]
# Best response functions
# Cournot's model of oligopoly
# Bertrand's model of oligopoly
# Auctions
# Questions
# Sources
'''3''' Mixed Strategy Equilibrium
# Randomization
# Mixed strategy Nash equilibrium
# Dominated actions
# [[/Dominant Strategies/]]
# Example: expert diagnosis
# Formation of beliefs
'''4''' Extensive Games with Perfect Equilibrium
# [[/Extensive games|Introduction to Extensive games]]
# Strategies and outcomes
# Nash equilibrium
# Subgame perfect equilibrium
# Stackelberg's model of duopoly
# Adding simultaneous moves
# Adding uncertainty
'''5''' Coalitional Games
===Part II - Games with Imperfect Information===
'''6''' Bayesian Games
# Motivational Examples
# Cournot's duopoly with imperfect information
'''7''' Extensive Games with Imperfect Information
# Strategies
# Nash equilibrium
# Beliefs
# Signaling games
===Part III - Real World Examples===
'''8''' TV Game Shows
# [[/Deal Or No Deal/]]
'''9''' Politics
# [[/Mutually assured destruction/]]
=== Part IV - Pages Needing Categorization ===
# [[Introduction to Game Theory/Backward induction|Backward induction]]
== See Also ==
'''Wikipedia Articles on Game Theory Related Topics'''
* [[w:Game theory|Game Theory article on Wikipedia]]
* [[w:Prisoner's dilemma|Prisoner's Dilemma]].
* [[w:John von Neumann|John von Neumann]] and [[w:John Forbes Nash|John Forbes Nash]].
* [[w:Game semantics|Game semantics]], an approach to establish the notion of truth in mathematical logic, in another way than Tarski did, using game theoretical concepts
{{Shelves|Applied mathematics|University level mathematics books}}
{{alphabetical|I}}
{{status|25%}}
__NOTOC__ __NOEDITSECTION__
[[ca:Teoria del joc]]
749sm3a92lu812siz2qasevxoecdy4v
4641654
4641587
2026-06-29T09:53:41Z
Xania
40302
fixed links
4641654
wikitext
text/x-wiki
Game Theory might be better described as Strategy Theory, or Theory of Interactive Decision Making. A ''strategic situation'' involves two or more interacting players who make decisions while trying to anticipate the actions and reactions by others. Game theory studies the ''general principles'' that explain how people and organizations act in strategic situations.
Game theory studies strategy mainly through the analysis of different "games". A "game" in game theory is a fully explicit structure which characterizes each player's set of actions, payoffs and possible outcomes under given rules of playing. Given this conditions, rational players act in such a way, that they maximize the expected value of their ''von Neumann-Morgenstern Utility.'' Games provide a simplified world within which to study strategy (as opposed to the real world where complexities get in the way of developing general principles).
==Table of Contents==
'''1''' Introduction to Game Theory
# [[/Overview/]]
# [[/Short history/]]
# [[/Theory of rational choice/]]
# [[/Subject of game theory/]]
# [[/Basic concepts/]]
# [[/Utility in game theory/]]
===Part I - Games with Perfect Information===
'''2''' Nash Equilibrium
# [[/Strategic games|Strategic games]]
# [[/Prisoner's Dilemma|Example: ''Prisoner's Dilemma'']]
# [[/Matrix Notation|Matrix Notation In Game Theory - How To Set Out A Game]]
# [[/Battle of the sexes|Example: ''Battle of the sexes'']] (a.k.a. ''Bach or Stravinsky?'')
# [[/Matching Pennies|Example: ''Matching Pennies'']]
# [[/Nash equilibrium/]]
# Best response functions
# Cournot's model of oligopoly
# Bertrand's model of oligopoly
# Auctions
# Questions
# Sources
'''3''' Mixed Strategy Equilibrium
# Randomization
# Mixed strategy Nash equilibrium
# Dominated actions
# [[/Dominant Strategies/]]
# Example: expert diagnosis
# Formation of beliefs
'''4''' Extensive Games with Perfect Equilibrium
# [[/Extensive games|Introduction to Extensive games]]
# Strategies and outcomes
# Nash equilibrium
# Subgame perfect equilibrium
# Stackelberg's model of duopoly
# Adding simultaneous moves
# Adding uncertainty
'''5''' Coalitional Games
===Part II - Games with Imperfect Information===
'''6''' Bayesian Games
# Motivational Examples
# Cournot's duopoly with imperfect information
'''7''' Extensive Games with Imperfect Information
# Strategies
# Nash equilibrium
# Beliefs
# Signaling games
===Part III - Real World Examples===
'''8''' TV Game Shows
# [[/Deal Or No Deal/]]
'''9''' Politics
# [[/Mutually assured destruction/]]
=== Part IV - Pages Needing Categorization ===
# [[Introduction to Game Theory/Backward induction|Backward induction]]
== See Also ==
'''Wikipedia Articles on Game Theory Related Topics'''
* [[w:Game theory|Game Theory article on Wikipedia]]
* [[w:Prisoner's dilemma|Prisoner's Dilemma]].
* [[w:John von Neumann|John von Neumann]] and [[w:John Forbes Nash|John Forbes Nash]].
* [[w:Game semantics|Game semantics]], an approach to establish the notion of truth in mathematical logic, in another way than Tarski did, using game theoretical concepts
{{Shelves|Applied mathematics|University level mathematics books}}
{{alphabetical|I}}
{{status|25%}}
__NOTOC__ __NOEDITSECTION__
[[ca:Teoria del joc]]
5ni1mzftfmr4lypa5wycll2cdro7yhr
Writing Effective Songs
0
18424
4641513
4384957
2026-06-28T14:45:14Z
~2026-37202-01
3610548
/* A Word Concerning Originality... */
4641513
wikitext
text/x-wiki
{{Disputed}}{{Split}}
"Songwriters and poets suffer from the same affliction . . . they both believe they have something to say."
Do any of the following statements describe you?
*"I spend a large portion of every day thinking about writing songs."
*"I read scripture and think . . . surely these are the lyrics to a song."
*"I write down interesting remarks I overhear."
*"I put a lot of energy into writing songs, and trying to write songs."
*"I see all the bits and pieces of songs I have lying around and it drives me crazy."
*"I go to songwriting workshops given by people who make their living writing songs."
*"I spend time with other songwriters."
*"I read books on songwriting."
*"I think I am a songwriter."
*"I am obsessed with songs."
*"I sometimes feel angry with lyrics and just go with the flow."
*"I feel an overwhelming sense of satisfaction when I finish writing a song. Writing is difficult, but I am always challenged to do my best. Sometimes I feel like songwriting should be called song rewriting, because I spend a lot of time rewriting until the song is right."
If these statements generally describe you, then read on, as we discuss "Writing Effective Songs".
Music and lyrics come from the heart. It's not something you can just do easily. Lyrics are created from events that have happened in your life, for instance - an ex lover, the present, dreams, or everyday life. All the different experiences you have had in your life can be written down as songs if you think hard enough.
==The Mechanical Elements of a Song==
For the beginning songwriter, it may be helpful to know something about the various elements of a song. Following are some definitions:
*'''Measure (Bar)''': a segment of time defined as a given number of beats of a given duration.
*'''Melody''': the part of a song that can be sung alone so that the song is recognizable; the "lead". Elements of the melody include:
**Motif: a short group of notes
**Phrase: Two motifs combined
**Sentence or period: Two phrases combined
**Paragraph: A group of sentences
**Sequence: a melodic phrase that is repeated but is transposed
*'''Harmony''': the notes that compliment or support the melody line. These may be sung or played. In music theory, they are described as the vertical structure. If using a chord progression format, should base the harmony of the song upon the progression and only vary a bit.
*'''Rhythm''': the pattern of beats to which the words are sung. There are two versions: The traditional, where every note is played as shown, and the "swing", used in Blues and Jazz, where, for example, two half-beats go "bomp-bomb" (kind of like heartbeat). A more technically useful definition of swing is best described using eighth notes. Rather than playing "straight", or on the down and up-beats: there is a lengthening of the on-beat eighth note, a pause perhaps in slower tempos, and a rushed offbeat eighth note. This is derived by forming two triplets (assuming 4/4 or "Common Time") and playing the first note in the triplet, a silent second note or "rest" and playing the third note. Swing can create a sort of laid back, lazy feel at slow tempos and at higher tempos can give a driving force that pushes the music forward. At extreme tempos, it can become technically impossible or cause a loss of pulse/beat, but this is mainly only an issue with electronic music forms.
*'''Tempo''': the speed of the song, measured in beats per minute (BPM). A higher BPM number indicates a faster speed, whereas low BPM indicates slow speed.
*'''Time Signature''': 4/4, 2/4, 2/2, 3/4, 6/8, etc. the top number relates to the number of beats in a measure/bar and the bottom number relates to the value of the notes in the bar. i.e 4/4 = four Quarter/crochet notes in a bar. 6/8 = six eighth/quaver notes in a bar.
Different time signatures can offer different rhythmic feelings depending on the beat emphasis. 4/4 is very standard feeling, befitting a time signature known as "Common Time", whereas 6/8 is most often played as if it were 2/4 with the beat divided into 3 equal parts in a triplet or "dotted-quarter feel and is "bouncy" (It is common to many Irish/Celtic dances/jigs as well as "naval"/sailor music such as shanties).
More complex music can feature "odd", uncommon time signatures such as 7/8 which vary as far as beat subdivision from song to song but the uneven number of beats per measure creates uneven rhythmic patterns. An example in 7/8 could be counted 1-2, 1-2, 1-2-3 (emphasis placed on the 1's), and would feel like 3/4 with an extended 3rd beat. Different eighth note groupings and emphasis are used to vary the feel.
Usually, each song consists of the following:
*'''Intro''': the short instrumental section at the beginning of the song.
*'''Verse''': a section of the song having its own melody, usually following the introduction and occurring again after the chorus. Most songs have two or three verses, repeating the same melody with different words. Verses usually have about eight measures, but traditional twelve bar blues may use twelve measures.
*'''Pre-Chorus''' (a.k.a. Channel): a short section that builds beyond the verse and usually leads to the Chorus.
*'''Chorus''': a different section in the song with a different melody, usually following the verses and the bridge. The chorus may be very repetitive.
*'''Bridge, or Middle 8''': a section of the song that is different from the verses and chorus. The bridge usually occurs during a transition between verse and chorus or between two choruses in separate keys; hence, it is sometimes called the "bridge." Because it is frequently 8 bars long, it also known as the "Middle 8," particularly in Britain and Europe. However it is conceived, its primary function is to provide the ear with a kind of "relief" from the repetitiveness of the Verse and Chorus, to provide a fresh perspective within the context of the overall structure.
*'''Hook''': an important phrase in the song, the memorable theme. The hook is usually repeated at various times during the song. Also referred to as the motif.
*'''Coda''': the ending section of the song; usually repeats the hook or an important portion of the song. Maybe integrated into the chorus. In traditional western music, a coda is a separate section of music from the rest that is only played when indicated (written: to Coda), usually only once and often is used as a resolution or ending in songs that involve a repeating loop such as the traditional American graduation song Pomp and Circumstance or other marches that need to be played for varying durations (or other creative uses, or as a method of saving space/ink in written music).
Often, it is worth the effort to first invent a melody from a chord (or string for guitar) sequence around which your song will be focused. Song writing for the popular vote requires a 'hook' as it is known. The hook may be simply a melodic structure, but is perhaps preferably a mix of the melody coupled with a clever line of words.
For instance, in the well known 'Danny Boy' or 'Derry Air' as it is sometimes called, the 'hook' is found where the melody appears to try to surge forward into the chorus and the words "But come ye back" accompany that surge in chord progression.
The reverse process, putting music to words, is a lot more difficult and is also less successful in most formats. (fitting lyrics to a melody can create some "forced" lines or wording in order to fit. Developing a melody after writing lyrics allows you to form the basic rhythmic structure from the syllables of the words, adding expanding and altering to develop interesting melodic movement. Knowing the tone of a particular line or section also allows you to better able match the mood musically for more consistent feeling. Plenty of people find these advantages helpful and it is by no means incorrect or more difficult writing in this fashion. Song writing is a process unique to everyone, do what works best for you.)
But there are certain cases where putting music to words is a better option... for instance, a rhyming poem or free verse with a regular meter can easily be made a song. Basic chords lend themselves well, the I - IV - V progression and iv - IV - V - I chords work.
===Popular Song forms===
Popular music has several forms that are commonly used. These usually consist of four 8-bar phrases, making up the typical 32 bar form. Typically, this entire 32-bar is a chorus.
*'''A-A1-B-A (ternary)''' is the most famous. The hook is typically in A, which allows it to be repeated, setting the hook in the listener's mind. The hook is a memorable, catchy part of the song, and may consist of one or more of the following: the title, a musical phrase, a riff, or a production effect. In section A1 the song develops usually by adding new instruments or increasing energy level in some other way. The B section, often referred to as the bridge, is a musical (and usually lyrical) contrast.
:Example: Over the rainbow, Yesterday, Just the Way You Are, What'll I Do, Ain't Misbehavin', As Time Goes By.
*'''A-B-A-B (binary verse/chorus)''' consist of eight-bar of A as verse, followed by eight bar of B as chorus. The 2nd half, acting as repetition , have a slight difference either melodically, harmonically, or both.
:Example: Material girl, "Sunrise, Sunset"
*'''A-A-B-B (binary)''': One A phrases for 8 bars, followed by its repetition, then followed by B phrases for 8 bars and its repetition. Repetition may or may not have variations.
:Example: Bouree in E minor
*'''A-B-A-C''': Provide variation with the B phrase and repetition of A phrase with new concluding material in C phrase.
*'''A-B-C-D''': Each phrase provides a variation with new melodic material. This is rarer since it requires more attention from the listener and fewer opportunities to bring home the hook through its repetition.
The other popular form, the 12-Bar Blues, is also common. See [[Music Theory/Blues]] for numerous type of 12-bar blues form.
==Tools for Your Songwriting “Toolbox”==
Some things that will help, but are not required:
*'''The gift of songwriting'''. Obviously, if you are gifted in this way, you’ll be way ahead of the game. Some people are born skilled writers. It comes to them like breathing. Others want to write so bad it's killing them, but they can't come up with anything that moves people. Most of us are somewhere in between . . . pretty good writers who could benefit from studying the craft of songwriting. (Those naturally gifted wouldn't be here most likely, for the "ungifted", you are actually just unpracticed. Experience is more useful than being gifted, you will learn all the wrong ways of doing things which will actually give you a better understanding of the craft rather than being "lucky" and making something good but with no idea of why and how you might expand from there.)
*'''Absolute Pitch'''. Of course it is a helpful tool but is not necessary. (More commonly called "Perfect Pitch", and is the ability to distinguish and identify the pitch, note, or chord playing by name. This is a gift you are born with or without. An equally useful and similar tool is "Relative Pitch", the ability to distinguish and identify intervals and chord movement from a known starting pitch. Again, you gain more musical knowledge such as scale degree and chord tendencies that you wouldn't just "have" if you had Perfect Pitch. Experience is always better, natural gifts just give a starting advantage while simultaneously discouraging actually learning correctly (taking shortcuts).)
*'''Some creative bent'''. "Most people see the sun go down. I see the mountain rise up."
*A good understanding of poetry writing. (Though if you listen to pop songs these days you'll notice a frequent lack of form or rhyme. Decide to rise above and keep making music with meaning, it's your method and chance of sharing yourself or a message with anyone that listens to your song. Don't waste it on materializing women and fantasizing about drugs unless that's your intention, eh?)
*Ability to sing or play an instrument. (Many rich song writers actually don't play anything... its certainly useful and enriching playing music you write but its perfectly possible to write songs without hearing them. Take, for example, Beethoven. He was writing 26 part symphonies deaf. Another option is going the electronic route like many modern artists with software that allows you to put in notes/chords/whatever individually and accurately, then play it back.)
*Collaboration with other writers. (In general the best way to learn and grow as a musician is collaborating and playing with others, its a whole different level than playing solo and typically much more fun)
*Multi-track Recorder (cassette 4-track, computer program, smartphone app, etc.)
*'''A voice recorder''', to record how it sounds.
*'''Music Theory'''. While some of the greatest songs being sung around the world today were birthed in the hearts of people who knew nothing about music, if one wants to play in a certain style, they should also follow the style. One should not deviate too much from the 12-Bar Blues, for example, if they are to make a song in the style of Blues, regardless of the song's content. (Anyone with any sort of ear for pitch and pitch relation should be able to come up with something musical given a bit of time, theory allows you to understand why things work but also how best to achieve certain effects, in addition to understanding ways to develop a musical idea rather than guessing/experimenting until you find what you want. A lot of new, interesting ideas can develop this way and you should do a bit of it regardless but knowing some basic theory will speed up the process and help prevent discouragement due to getting "stuck".)
*'''material from experienced writers/musicians''' you don't have to listen to anyone else to make your own music, but immersing yourself in the work of other talented people is good for inspiration and seeing what has been proven to work well, as well as motivation
Things that are not required, PERIOD
*Virtuoso ability on an instrument.
*A great singing voice. (you definitely don't have to sound good, but its a good idea to at least develop the ability to sing in tune and correct pitches. if not singing, humming or whistling would do. being able to experiment with musical ideas or prototype things anywhere with no additional materials than your own body is highly useful. you can even record these ideas as inspiration hits to save for later, which is also encouraged. Finally, singing either lyrics or pitches along with a song gives an organic connection to it and helps you better understand whats happening in analysis; and singing harmony or bass parts expands your creativity for adding depth to a simple idea in addition to just being fun.)
Requirements:
*An intimate and vital relationship with your topic.
*A sensitive spirit relative to your intended audience.
*Patience. (Sometimes you block or hit snags. Work through them.)
*A paying job, or normal education. (Don't expect to hit a record contract so soon, pal)
==Becoming an Effective Songwriter==
You need to know your subject matter, this is imperative. After all, it is difficult at best to discuss subjects that you’re not knowledgeable of—and research, know about the subject matter as much as possible
Write about what you know. If your songs are not meaningful to you, they probably won't be meaningful to other people, and the lack of knowledge on your subject and your lack of enthusiasm for it will show through.
Write primarily as an expression of your own feelings, and who knows better about what you're feeling than you?
Strive to expand your vocabulary. While some phrases may be very meaningful, there are probably words that fit the image you are trying to create more appropriately. Also, if possible, try to live "in" the subject matter.
You need to be vulnerable; to be a good writer, you must remain vulnerable in your writing. If you hide, then the song hides. There is no safe haven for songwriters. If you choose to play it safe and not lay it on the line, your songs will be cliché-ridden, shallow and boring.
You need to practice and you need to be persistent; Yes, sometimes, the words and melody simply flow. But most of the time songwriting is hard work. Songwriting requires work, practice, mentors, study, diligence, and commitment. We should give ourselves to the development of our writing skills.
Practice, sing and write constantly. Write something every day, even if you come up with something that might initially sound trite. You can revise it and make it something good later. Whatever musical impulse lies within will come out.
==Important Elements of a Song==
The most important aspect of a song is "'''sing-ability'''"
*Do the stressed syllables of the lyrics match the stressed beats of the music? (If you write the lyrics first, as mentioned earlier, this becomes less of an issue.)
*Are the words you want emphasized sung with longer notes? (higher or contrasting pitches also bring attention to a word better than lower pitches that can get lost in the rest of the music or repeated pitches that usually create no musical interest unless used a particular way)
*Does it have a smooth melody? (occasional leaps or breaks, if used artfully, are perfectly fine and add interest)
*Are the intervals easy to sing? (Usually 2nds, 3rds, 4ths, 5ths and octaves are easiest.)
*Is the melody supported by the chord progression?
*Does the melody fall within the sing-able range of the majority? (Usually, not much lower than an A; not much higher than a D.) (A what? D what? Octaves exist. If you want an anthem this is important, but if your range is atypical or you have a greater than average range don't feel like you can't show it off. People like singing along to songs, but people also like being impressed and appreciate a show of talent/ability)
*Is it too wordy? Too many words make it difficult to focus on the subject matter.
*'''One Theme''': stay focused on the "seed thought".
*'''Repetition''': This makes the song easier for the congregation to retain and memorize. (And potentially boring. Much music is not repetitive, again do you want an anthem or something personal?)<br>
*'''Imagery''': Does it capture an image? Does it paint a picture of how you feel about a given situation at a given moment in time?
*'''Consistent within itself''': Is the melody "saying" the same thing as the lyrics? Try to avoid putting happy sounding lyrics with a haunting melody. Of course, this can be done: for example, songs by Asaki are a good example (they have haunting , but celebratory songs ) (psst, writing lyrics first often makes this easier)
*'''Is it “catchy”?''': Is there a creative chord progression? Is there an interesting rhyming scheme? Is there a creative melody? Is there alliteration?
===Making the Connection===
*The lyric is arguably the most important part of a song. Be clear. It is primary and fundamental that the audience understands what you are saying. If not . . . it might as well have been an instrumental. (the human voice is an instrument and many musicians use it as such, focusing on musicality of the syllables rather than clear words... Listen to Zac Condon of Beirut, can't understand a thing he says half the time but boy does it sound nice. also many singing styles distort the voice such as growling and screaming in more hardcore music.)
*Does it use the language of the assembly? If aimed at Youth, does it "groove"? If aimed at kids, is it happy?
*Is it simple "ABC-rock," or is it 70's "Art-Rock"?
*Is it intended for small group or a large crowd? Can it be sung by your choice of line up?
*Are there long pauses that could be filled with a lead instrument?
*Could there be more pauses to let your rhythm take a "rest"?
===Simplicity===
Simple images cut deep like a sharp knife. One of the most common mistakes made by beginning songwriters is trying to say too much. The simplest songs are usually the most powerful.
Complex writing in "code" that sounds like some other good song somewhere doesn't cut it. Many writers play it safe behind vague or complex lyrics. (And many listeners enjoy decoding the meaning of them. Do what you want.)
If you try to say in three minutes or less how you feel about everything in your life, you will lose people. It is more powerful to show how you feel about ONE thing, right now.
Once you've gained considerable experience in writing songs, you may decide to add some elements of symbolism, metaphor, or irony into your work. A song with several layers grows progressively interesting; if there is more to the song than first meets the ear, it will stay fresh.
==Sparking the Creative Flow==
*'''Quiet time''': The key to expressive songs and lyrics is personal quiet times.
Meditation is a very effective way to do this.
There is no more creative expressiveness than your inner voice.
Inner voice can both flow and be shaped: you can let ideas come to you and you can alter them.
It usually comes when you quiet your mind.
As you open to your inner voice,
it becomes easier to hear, grasp and shape ideas.
*'''Difficulties and Devastation''' Speaking from life-changing personal experience.
This is important in folk-style songs, such as Blues and Country Music.
Negative stories with a positive resolution can be very inspirational.
Angry lyrics can be the release a listener is looking for.
*'''Brainstorming''' If you are a musician, sit at your instrument and just play.
If you are a lyricist, write or sing whatever comes to mind.
Even seemingly boring or strange lyrics must be written down,
to open your mind to the more interesting and familiar lyrics.
It is important to at least consider everything that comes to mind.
You can rewrite and reshape the lyrics later,
as it becomes more and more clear,
what you were trying to say or realized you could say instead.
*'''Was it just a feeling?''' Then follow your feeling—do not look for anything else.
Put those feelings into words and music.
Either you must look for situations to match the feeling or feelings to match the words,
Be emotionally well-rounded: write songs of varying feelings, but realize what emotions won't fit,
Don't write funny if you consider your genre very serious.
*'''Do you just have a melody?''' Sing something, anything, to it.
Flip the notes around: try the second note as a fifth then as a fourth and third.
See what works.
Remember that the more familiar always sounds better,
so you have to try any new melody you wrote several times before throwing it out.
*'''Is it just a thought?'''
Single thoughts are a powerful way to write.
The feeling is often already implied.
An interesting story, onatomatopiea, or extended reasoning or metaphor,
could easily be written around a simple thought with enough hours spent.
Every little thought counts,
that you have about every phrase, word, and sound.
Don't be afraid to try anything that comes to mind.
Use the satisfaction from improving your thoughts to continue to improve your thoughts.
**Brainstorm - write down every corresponding thought that comes to mind,
and don’t ever throw anything away.
Bob Dylan is quoted in his famous deal with a higher power interview,
as saying that he would move onto other songs if a new song wasn't happening.
In another interview about Dylan's song Tangled Up In Blue,
he said he spent years on the song grafting various women into one character,
so sometimes move on, but keep every idea for some use somewhere.
**Write down your ideas and lyrics, and always record a rough draft of your songs.
Listen to the recording.
Does it have a linear thread through the whole song?
Or is it like this wiki: a patchwork of many separate ideas under one umbrella?
Are there any phrases that don't quite make sense?
Is there another phrase you could replace it with?
Is there anything you cringe at?
Do you talk about your muffin in a song about poker?
**Read your lyrics out loud.
Is there a clunky bunch of words?
Is there anything that means something very powerful,
but doesn't sound that way out loud?
What is that powerful meaning and can you just write that instead?
**Is the theme universal, or is it so personal that it could only mean something to you?
Remember theme is the universal meaning behind the details like love, bravery, good, evil, etc.
There is always a theme, you just have to make it consistent.
*'''Do you have a great chord progression?''' If you have access to a piano, voice the chords with left hand and just improvise a melody with the right.
There are actually a limited number of simple good progressions,
and they've all been written already,
which explains why you wrote that really cool song,
and then realized you took it from so and so,
They "took" it too, because we ran out of "new" simple chord progressions centuries ago,
and the more complex ones are really combinations of simple ones.
*'''Or . . . do you just want to get rich?'''
Well don't waste your time in music;
there are a lot of other professions that immediately pay a lot more than 99.99% of musicians ever make.
Even many supposedly rich musicians never made a dime,
because of too much money spent on production, touring, and distribution.
If you want to get rich, then check out any profession with a lot of demand.
Yes you can become a millionaire from music,
but count the number of hit songs and then think of the total number of songs written ever,
and then think of the number of hit songs that were profitable.
Also, consider that even if you wrote a hit level song,
how do you get the national audience needed to become a millionaire?
Record labels don't even listen to submissions anymore.
You have to tour relentlessly after you spent years begging friends
to come to shows and not even listen your perfectly written songs.
And then consider that everyone has an ego,
and that your song is not as good as it at first seems.
Actually success depends on you opening your ego,
unless you just happen to part of a social movement,
and then nobody is really listening anyway.
One exercise in ego would be to take the first two lines of your favorite song and break it down,
then break down the language and poetry of your best song.
And even opening up to better writing still doesn't guarantee success,
There are countless songwriters that pop up years after their death as being great writing,
but yet unacknowledged in their lifetime.
**It's not completely impossible. Just close to impossible.
If you make songs just to get rich, there’s a strong chance you’re going to be terribly frustrated.
We have little control over how others receive what we create.
And if you try to change to fit what you think they want, you will never be happy with it,
and they will never be happy with you.
But at the same time, if you are unwillingly to change your lyrics to make more sense,
because of some intangible lofty feeling,
then you might be fooling yourself,
and your success depends on deaf ears.
==A Word Concerning Originality...==
As songwriters, we don't have to re-invent the wheel; we just need to spin it our own way. A composer fails to be original when they do not listen to their own musical voice. Composers frequently re-create melodic, harmonic, and rhythmic tapestries that lie deep in their sub-conscious. Initially this is not a problem, since all music must take off from somewhere. We must be able to take it to a NEW place . . . one that it is original to our "take" on the style. Sometimes a composer is successful with a song only to find it has already been written.
Alternatively, it is common for a songwriter to use the same (or similar) well known melody. for example, Gekkoka (Moonlight Flower) and Tsubasa (wings) are both based on a classical piano piece, Midori no haze. However, with variations on melody (one is more melodramatic, while Tsubasa is more upbeat), and different lyrics, they become two distinct songs. Still, one should be very careful about using another person's melody, especially in countries in the developed world, which usually have the toughest copyright laws.
The most commonly reused part of music is chord structure. There are only so many chords and over the centuries people have found many of the chord changes that are most naturally pleasing. You can play about a million songs that all have the chord progression in the key of C: C - Am - F - G or some variation of the order (C - F - Am - G). So long as you have your own musical ideas building off of those chords, your song will still be unique same as the million others. This allows an excellent opportunity to really make your song stand out by using other chords creatively. don't feel confined to a key or set progression, some of the most interesting music uses out of key (non diatonic) chords or chromaticism, and modal interchange. All of those are more advanced music theory, but its something to work towards when you get tired of hearing the same progressions you always do. You can also play in different keys with the same progression: I - vi - IV - V in the key of Bb for example would be Bb - g - Eb - F. These are different chords, but it will have the same "feel" to it as it is the same pattern of tension building and release. It will change the pitch and note range, however (make sure its a key you can actually play or sing in), which can lend a brighter or darker mood and changing keys mid-song can be very effective, if done tastefully, in addition to giving your song a more unique identity.
==Conclusion==
*Once you have a song that you think is ready for the group, run it past a few objective and mature friends for an honest critique. Don't be afraid to refine it, taking into consideration their input.
*Focus on the process, not the outcome. It's good to have a goal. It's more important to spend your days doing what pleases you. Years of deprivation and sacrifice to reach a “place” most times equal years of deprivation and sacrifice. The “place” is never enough compensation. Just ask anyone who is in the “place” you want to be.
*If you are really strong, you can find your identity in the songs you write, just like any poem.
Meter is something not always fully understood, by learning writers, briefly meter in songs is the measurement of each note, Study the best writers and see where they relieve any chance of metric boredom , by inserting contrasting sections in each stanza.
== Style Reference ==
* [[/Solid "Praise & Worship" songs/|Elements of an Effective Praise & Worship Song]]
* [[/Rock Album Arranging/]]
{{Shelves|Musical composition}}
{{Alphabetical|W}}
{{status|25%}}
dkm7kvzds4dep7rk3d6213s2ak88gx1
Template:Chinese (Mandarin)TOC
10
20037
4641672
3114125
2026-06-29T11:49:41Z
一隻北極熊
3609960
4641672
wikitext
text/x-wiki
<div class="noprint"><!-- class="noprint" makes this box disappear when printing -->
{| cellpadding="1" align="center" style="border: 1px solid #bfffbf; -moz-border-radius:12px; background: #f2fff2; padding: 0px; font-size: 95%; margin;"
| style="background: #CCFFCC; -moz-border-radius:12px 0px 0px 0px; text-align: right;" | Lessons:
|align="center" style="background: #CCFFCC;" | [[Chinese (Mandarin)/Pinyin Pronunciation|Pron.]] - <big>[[Chinese (Mandarin)/Lesson 1|1]] - [[Chinese (Mandarin)/Lesson 2|2]] - [[Chinese (Mandarin)/Lesson 3|3]] - [[Chinese (Mandarin)/Lesson 4|4]] - [[Chinese (Mandarin)/Lesson 5|5]] - [[Chinese (Mandarin)/Lesson 6|6]] - [[Chinese (Mandarin)/Lesson 7|7]] - [[Chinese (Mandarin)/Lesson 8|8]] - [[Chinese (Mandarin)/Lesson 9|9]] - [[Chinese (Mandarin)/Lesson 10|10]] - [[Chinese (Mandarin)/Lesson 11|11]] - [[Chinese (Mandarin)/Lesson 12|12]] - [[Chinese (Mandarin)/Lesson 13|13]] - [[Chinese (Mandarin)/Lesson 14|14]] - [[Chinese (Mandarin)/Lesson 15|15]] - [[Chinese (Mandarin)/Lesson 16|16]] - [[Chinese (Mandarin)/Lesson 17|17]]</big>
| rowspan=2 align="center" width="160pt" style="background: #CCFFCC; -moz-border-radius:0px 12px 12px 0px; " | [http://www.google.com/custom?sa=Google+Search&domains=en.wikibooks.org/wiki/Chinese_(Mandarin)&sitesearch=en.wikibooks.org/wiki/Chinese_(Mandarin) Search inside this book using Google]
|-
| style="background: #CCFFCC; -moz-border-radius:0px 0px 0px 12px; text-align: right;" | Subpages:
| style="background: #CCFFCC; -moz-border-radius:0px 0px 0px 0px; " |[[{{PAGENAME}}/Examples|Examples]] - [[{{PAGENAME}}/Exercises|Exercises]] - [[{{PAGENAME}}/Stroke Order|Stroke Order]]
|}
</div><noinclude>[[Category:Chinese templates]]</noinclude>
ab5m1wmbmx7atmeudtho93ztcyv1kvi
Editing Wikitext/Indents and Lists
0
33572
4641514
4439229
2026-06-28T14:45:43Z
Kozak391
3518176
/* Bullet Lists */ Fixed syntax issue
4641514
wikitext
text/x-wiki
{{Editing Wikitext|bd=linen}}
{{TOC|float=left}}
[[image:GaramondStempel.png|border|right|240px]]
In common with word processors, Wikitext allows the use of paragraph indents and various kinds of bullet and numbered lists. The few examples below show how it is done.
Indents are broadly similar to the idea of ''tabs'' on a word processor, though they can be used only at the ''start'' of a line.
Numbered lists find use in formal listings such as legal documents, and in specifications and other texts where paragraph reference numbers might be quoted. Bullets are much used in lists of hyperlinks, and in many summaries.
An introduction to HTML lists has been included, since this method alone allows the use of the alphabet and Roman numbers for list labels.
{{clear}}
==Indentation==
'''Indentation means increasing a paragraph's left margin'''. In wikitext this TAB character is the ''colon''. When a colon is added before the start of a paragraph, the ''whole paragraph'' will be moved in by one TAB stop. To move the paragraph further, simply add more colons. Here is the text to indent three short paragraphs:
{{block|ta=left|background=ivory|<pre style="font-size:1.1em;background:ivory; border:none; white-space:pre-wrap;">:This was given ''one'' indent
::This was given ''two'' indents
:::This was given ''three'' indents</pre>}}
and the result of doing so is:
{{block|background=white|ta=left|ff=inherit|
:This was given ''one'' indent
::This was given ''two'' indents
:::This was given ''three'' indents}}
Note that indents are often used in combination with other symbols such as bullets; when they used in this way the indents should be written first, ''then'' the bullets.
==Lists==
The table of contents found on each page is handled automatically by the software and is not accessible using the list syntax. This subject refers to user-made lists within the text.
Lists are useful for short comments and summaries and are easy to make.
===Numbered Lists===
To make an automatically numbered list of the first order, just add a hash symbol, sometimes called an ''octothorp'' or ''number sign'', before each line of the list. It looks like this:
{{block|background=ivory|ta=left|
<syntaxhighlight lang="tid" style="font-size:1.1em;background:transparent;border:none; white-space:pre-wrap;">
#The First Item
#The Second Item
#The Third Item
#The Fourth Item
#The Fifth Item</syntaxhighlight>}}
The result is this:
{{block|background=white|ff=inherit|ta=left|
#The First Item
#The Second Item
#The Third Item
#The Fourth Item
#The Fifth Item}}
To add a second order of numbering to the list, give the sub-items ''two'' hash symbols. The sub-item will then indent itself beneath the level one list item that resides above it. Additional levels of listing are made by adding more hash symbols. Here is an example:
{{block|background=ivory|ff=inherit|ta=left|
<syntaxhighlight lang="tid" style="font-size:1.1em;background:transparent;border:none; white-space:pre-wrap;">
#The First Item
##Sub Item
#The Second Item
#The Third Item
##Sub Item
###Sub-sub Item
#The Fourth Item
#The Fifth Item</syntaxhighlight>}}
The result of this wikitext coding is:
{{block|background=white|ff=inherit|ta=left|
#The First Item
##Sub Item
#The Second Item
#The Third Item
##Sub Item
###Sub-sub Item
#The Fourth Item
#The Fifth Item}}
<br>
===Bullet Lists===
Bullet lists are used more often than numbered lists, perhaps because they are less formal. The bullet lists make blue square bullets against each item in the list. It is done by adding an ''asterisk'' before each list item. Additional levels of listing are made by adding more asterisks. Using the same theme as above, consider the following text:
{{block|background=ivory|ff=inherit|ta=left|
<syntaxhighlight lang="tid" style="font-size:1.1em;background:transparent;border:none; white-space:pre-wrap;">
*The First Item
**Sub Item
*The Second Item
*The Third Item
**Sub Item
***Sub-sub Item
*The Fourth Item
*The Fifth Item</syntaxhighlight>}}
The result of this text listing is:
{{block|background=white|ff=inherit|ta=left|
*The First Item
**Sub Item
*The Second Item
*The Third Item
**Sub Item
***Sub-sub Item
*The Fourth Item
*The Fifth Item}}
Since lists are made up of paragraphs, it is a simple matter to add ''colons'' for indentation ''before'' the list code to shift each list item further across the page. Colons need added to ''each'' list item for this effect.
===Definition Lists===
Definition lists are usefully formatted for their purpose. They have a bold heading, followed by a normal text section on the lines that follow. Their name is self explanatory, for these lists are ideal for defining terms. They can be made in both HTML and Wikitext but only the simpler wikitext version is explained here. Note that the method needs only the ''semi-colon'' and the ''full-colon'' for its effect. The following text entry shows how to make list items:
{{block|background=ivory|ff=inherit|ta=left|
<pre style="font-size:1.1em;background:ivory; border:none; white-space:pre-wrap;">
;Mono-spaced fonts:A mono-spaced font is so-named because every glyph in the set has equal width...
;Proportional fonts:Proportional fonts are made with glyphs of different width...
;WikiBooks house font:The WikiBooks house font is 9 point ''Arial'' roman, a proportional font with a particularly clear style...The quick brown fox jumps over the lazy dog's back. The quick brown fox jumps over the lazy dog's back.
</pre>}}
The result of this text listing is:
{{block|background=white|ff=inherit|ta=left|
;Mono-spaced fonts:A mono-spaced font is so-named because every glyph in the set has equal width...
;Proportional fonts:These fonts are made with glyphs of different width...
;WikiBooks house font:The WikiBooks house font is 9 point ''Arial'' roman, a proportional font with a particularly clear style...The quick brown fox jumps over the lazy dog's back. The quick brown fox jumps over the lazy dog's back.}}
{{clear}}
Note that wrapped lines are also indented.
===Other Ordered Lists===
'''Alpha and Roman lists need HTML formats.''' These other list types are easily made in HTML, as well as the more usual numbered lists. In addition, their starting points can be preset.
The rules for making these alternative lists are as follows:
*Ordered lists are enclosed in the tags '''<syntaxhighlight lang="html" inline><ol></ol></syntaxhighlight>'''.
*Each list item must start with the tag '''<syntaxhighlight lang="html" inline><li></syntaxhighlight>'''.
*<u>The list ''format''</u> is set as follows in the leading '''<syntaxhighlight lang="html" inline><ol></syntaxhighlight>''' tag with the ''type'' attribute. See the drop-box for examples.
**'''Numbering''' is set with ''type=1''; ''the number one''.
**'''Lower case alphabet''' is set with ''type=a''
**'''Upper case alphabet''' is set with ''type=A''
**'''Lower case Roman''' numbers are set with ''type=i''
**'''Upper case Roman''' numbers are set with ''type=I''; ''the capital letter.''
*<u>The start value</u> is also set in the leading '''<syntaxhighlight lang="html" inline><ol></syntaxhighlight>''' tag, with the ''start'' attribute. See the drop-box for examples.
**'''Numbered lists''' use the intended start integer as a value. If omitted, the default is always equivalent to the first character of the intended set, as decided by ''type''.
**'''Alpha lists''' use the alphabet position value; e.g. ''start=3'' for 'c'.
**'''Zero and negative start values have no meaning''' except for numbered lists.
*<u>Arbitrary list labels</u> can be set in any '''<syntaxhighlight lang="html" inline><li></li></syntaxhighlight>''' tag with the ''value'' attribute. The label must belong to the selected ''type''. For example, if ''type'' is for an alphabetic list, an arbitrary Roman number would be inappropriate.
**'''Values are numbers''' representing the position in the ''type'' set; ''e.g. 3 for 'c' ''.
**'''The start attribute''' should be omitted for this method; ''avoids confusion''.
**'''List items without values''' will ''follow-on'' from the previous label.
In the event that list-making adversely affects follow-on text, ensure that there is a blank line or a break tag between the two. Examples of HTML list formats can be found in the examples below.
Consider the following example. The sample code uses ''type=a'' to choose lower case alpha listing and the entry ''start=2'' sets the starting point as the second letter of the alphabet; the letter ''b''.
<syntaxhighlight lang="tid" style="font-size:1.1em; background:ivory; border:none;">
<ol type="a" start="2">
<li> These listing labels use lower case alphabet.
<li> This list starts with the ''second'' letter of the alphabet.
<li> Change ''type'' and ''start'' value for different formats.
</ol>
</syntaxhighlight>
When the code runs it looks like this:
{{block|background=white|ta=left|ff=inherit|1=<ol type="a" start="2">
<li> These listing labels use lower case alphabet.
<li> This list starts with the ''second'' letter of the alphabet.
<li> Change ''type'' and ''start'' value for different formats.
</ol>
}}
==HTML List Options and Examples==
===The HTML List Code===
<syntaxhighlight lang="html"><ol type="a" start=1>
<li> This is the first item for lower case alpha starting with 'a'.
<li> This is the second item.
<li> This is the last.
</ol></syntaxhighlight>
===HTML List Examples===
{{hiddenh4|Numbers}}
With ''type = 1'' , (the number ''one''), and ''start = 432'' we obtain:
<ol type="1" start="432">
<li> This is the first item for numbers starting with '432'.
<li> This is the second item.
<li> This is the last.
</ol>
{{hiddenh4|Alpha Lower Case}}
With ''type = a'' and ''start = 2'' we obtain:
<ol type="a" start="2">
<li> This is the first item for lower case alpha starting with 'b'.
<li> This is the second item.
<li> This is the last.
</ol>
{{hiddenh4|Alpha Upper Case}}
With ''type = A'', and either ''start = 1'' or not providing a value for ''start'', we obtain:
<ol type="A" start="1">
<li> This is the first item of upper case starting with A.
<li> This is the second item.
<li> This is the last.
</ol>
{{hiddenh4|Roman Numbers, Lower Case}}
With ''type = i'' and ''start = 3'' we obtain:
<ol type="i" start="3">
<li> This is the first lower case roman item starting with iii.
<li> This is the second item.
<li> This is the last.
</ol>
{{hiddenh4|Roman Numbers, Upper Case}}
With ''type = I'', (the capital letter ''eye''), and ''start = 2''
<ol type="I" start="2">
<li> This is the first uppercase roman item starting with II.
<li> This is the second item.
<li> This is the last.
</ol>
{{hiddenh4|Negative Numbers}}
With ''type = 1'', (the number ''one''), and ''start = -29''
<ol type="1" start="-29">
<li> This is the first number starting with -29.
<li> This is the second item.
<li> This is the last.
</ol>
{{hiddenh4|More Negative Numbers}}
With ''type = 1'', (the number ''one''), and ''start = -1''
<ol type="1" start="-1">
<li> This is the first number starting with -1.
<li> This is the second item.
<li> This is the last.
</ol>
Proper reversed lists will become a part of HTML5. See [http://blog.whatwg.org/reverse-ordered-lists '''Reversed Lists'''].
The various listing options are easily changed, and an alternative method for simple numbering of lines can be found in [[Editing Wikitext/Preformatted Text#Numbered Prose|'''Numbered Prose''']]. Although ''bullet'' lists can be made in HTML by setting the list items in '''<nowiki><ul></ul></nowiki>''' tags instead of '''<nowiki><ol></ol></nowiki>''' tags, the rendering is likely to afford only the default bullet type instead of the three types that are theoretically possible. For a complete description of HTML lists refer to the external page [http://www.w3.org/TR/html401/struct/lists.html '''Lists in HTML'''].
{{ewlinks}}
pu3newqqw1exchkh3dv8xoow773xh8d
Greek Mythology/Gods/Athena
0
63449
4641584
4622066
2026-06-28T21:24:01Z
All About World History
3610638
4641584
wikitext
text/x-wiki
[[File:Patung Pallas Athena.jpg|left|thumb|200px|Athena]]
'''Athena''' was the goddess of battle strategy, and wisdom. She was dentified in the Roman mythology as the goddess '''Minerva'''. She was always accompanied by her owl and the goddess of victory, Nike. Also known as Pallas Athena, she wore a breastplate made out of goatskin called the Aegis, which was given to her by her father, Zeus. She had many names that explain her. Some of her names are helmet head, Athena the wise, and others.
Athena was an armed warrior goddess. The Parthenon at Athens was her most famous shrine. She never had a true lover. For some strange reason it was hopeless that she would fall in love; Hephaestus tried once, yet failed. Athena was well known for giving advice/mentoring heroes. One example of that is in The Odyssey, where Athena assists Odysseus' son Telemachus in finding his father; another is where she gives Perseus the shield he will need to fight Medusa.
Athena's mother was Metis. Metis warned [[Greek Mythology/Gods/Zeus|Zeus]] that if she bore him a boy child, the child would be greater than him. Zeus swallowed her and started having a terrible headache. Then his head split open by an axe from help from Hephaestus. Suddenly, Athena came out of his head. Athena came out fully grown, with her symbols the aegis and the famous helmet of Athena. Athena is much like her brother Ares: They are both rulers of war, but she is more of the strategy and quick thinking. Her brother Ares is the power, strength, and villain of mythology. Athena is also known of being and having Wisdom, Wealth and Crafts.
Athens is named after Athena for memory of her. She has proved her skills for craft for making cloth. Once a young maiden named Arachne, who was a very talented weaver, claimed that she was a better weaver then Athena herself. So Athena came down to Earth to test Arachne. Athena and Arachne competed in weaving a tapestry. At the end of the competition Arachne made a tapestry mocking the gods, which sent Athena into such an uncontrollable rage that she turned Arachne into a spider, thus creating the name Arachne.
{{BookCat}}
2a1z8pykgg5d8h871ygyak0rusnzmv8
4641585
4641584
2026-06-28T21:24:15Z
All About World History
3610638
4641585
wikitext
text/x-wiki
[[File:Patung Pallas Athena.jpg|left|thumb|200px|Athena]]
'''Athena''' was the goddess of battle strategy, and wisdom. She was identified in the Roman mythology as the goddess '''Minerva'''. She was always accompanied by her owl and the goddess of victory, Nike. Also known as Pallas Athena, she wore a breastplate made out of goatskin called the Aegis, which was given to her by her father, Zeus. She had many names that explain her. Some of her names are helmet head, Athena the wise, and others.
Athena was an armed warrior goddess. The Parthenon at Athens was her most famous shrine. She never had a true lover. For some strange reason it was hopeless that she would fall in love; Hephaestus tried once, yet failed. Athena was well known for giving advice/mentoring heroes. One example of that is in The Odyssey, where Athena assists Odysseus' son Telemachus in finding his father; another is where she gives Perseus the shield he will need to fight Medusa.
Athena's mother was Metis. Metis warned [[Greek Mythology/Gods/Zeus|Zeus]] that if she bore him a boy child, the child would be greater than him. Zeus swallowed her and started having a terrible headache. Then his head split open by an axe from help from Hephaestus. Suddenly, Athena came out of his head. Athena came out fully grown, with her symbols the aegis and the famous helmet of Athena. Athena is much like her brother Ares: They are both rulers of war, but she is more of the strategy and quick thinking. Her brother Ares is the power, strength, and villain of mythology. Athena is also known of being and having Wisdom, Wealth and Crafts.
Athens is named after Athena for memory of her. She has proved her skills for craft for making cloth. Once a young maiden named Arachne, who was a very talented weaver, claimed that she was a better weaver then Athena herself. So Athena came down to Earth to test Arachne. Athena and Arachne competed in weaving a tapestry. At the end of the competition Arachne made a tapestry mocking the gods, which sent Athena into such an uncontrollable rage that she turned Arachne into a spider, thus creating the name Arachne.
{{BookCat}}
cky7yynhadpec9llgevdhvp4xacoy68
Greek Mythology/Gods/Demeter
0
69951
4641582
4303970
2026-06-28T21:23:13Z
All About World History
3610638
4641582
wikitext
text/x-wiki
[[File:Demeter Altemps Inv8546.jpg|thumb|Statue of Demeter.]]
Demeter is the goddess of harvest cereal and corn. She was the daughter of the Titans Cronus and Rhea. She used to have annual festivals in her name. Her daughter, Persephone (per-sě-funny), was kidnapped by the god of the Underworld, Hades. When this occurred, Demeter had to agree to allow her daughter to stay half a year with her and half with Hades. They say that during spring and summer, Demeter gets to see Persephone
and during fall and winter she doesn't and is so depressed that the plants of the Earth go dormant.
{{BookCat}}
845btsqbzghkik7xog2xxxkdldgznqz
4641606
4641582
2026-06-29T06:17:01Z
All About World History
3610638
4641606
wikitext
text/x-wiki
[[File:Demeter Altemps Inv8546.jpg|thumb|Statue of Demeter.]]
'''Demeter''' is the goddess of harvest cereal and corn. She was the daughter of the Titans Cronus and Rhea. She used to have annual festivals in her name. Her daughter, Persephone (per-sě-funny), was kidnapped by the god of the Underworld, Hades. When this occurred, Demeter had to agree to allow her daughter to stay half a year with her and half with Hades. They say that during spring and summer, Demeter gets to see Persephone
and during fall and winter she doesn't and is so depressed that the plants of the Earth go dormant.
{{BookCat}}
pxoewy114krf8fvejsilptjwk1n6eqe
4641607
4641606
2026-06-29T06:18:39Z
All About World History
3610638
4641607
wikitext
text/x-wiki
[[File:Demeter Altemps Inv8546.jpg|thumb|Statue of Demeter.]]
'''Demeter''' is the goddess of harvest cereal and corn. She was the daughter of the Titans Cronus and Rhea. She used to have annual festivals in her name. Her daughter, [[Greek Mythology/Chthonian Gods/Persephone|Persephone]] (per-sě-funny), was kidnapped by the god of the Underworld, Hades. When this occurred, Demeter had to agree to allow her daughter to stay half a year with her and half with Hades. They say that during spring and summer, Demeter gets to see Persephone
and during fall and winter she doesn't and is so depressed that the plants of the Earth go dormant.
{{BookCat}}
3pt6ay4j8j6u15560rps8xjn3wmr7q4
Greek Mythology/Titans/Prometheus
0
74354
4641603
3794015
2026-06-29T06:14:20Z
All About World History
3610638
4641603
wikitext
text/x-wiki
[[File:Prometheus Adam Louvre MR1745 edit atoma.jpg|thumb|Statue of Prometheus]]
'''Prometheus,''' whose name means "forethought", was the brother of Epimetheus. During the war of the Titans, Prometheus, foreseeing the victory of Zeus, fought on the Olympians side. Epimetheus, looking to the past, kept fighting with the Titans.
After the victory, Prometheus was given the task by Zeus of creating all life on Earth. He then also made humans from clay without Zeus' permission. This upset Zeus; but Prometheus was able to save humanity.
At the first animal sacrifices, Prometheus tricked Zeus into choosing the bones and entrails for the gods' portion by wrapping them in enticing fat, while the choice cuts were hidden under the stomach. This resulted in human celebrants receiving the choice meats at future animal sacrifices.
Prometheus was reputed to have felt pity on the early days of humanity, and decided to share with them the gift of fire, which only the deities knew. For this, he was punished by being chained to a pole on the side of a mountain and have his subsequently regenerating liver eaten day after day by an eagle. To punish humanity, Zeus sent Pandora along with Pandora's box.
After 30,000 years, Prometheus was released from his torture because he possessed a great secret. This secret was that Zeus could only be overthrown by a child he fathered by the nymph Thetis.
{{BookCat}}
5pjknzq5k9g4m6v5r1y8znrif1ecs2f
Social and Cultural Foundations of American Education/History/19th Century
0
100712
4641559
3951371
2026-06-28T17:45:30Z
~2026-37080-31
3610587
/* Tuskegee Normal School (Tuskegee National Institute, Tuskegee University */
4641559
wikitext
text/x-wiki
{{hiddenh3|What are the markers of the 19th Century?}}
American education in the nineteenth century is often referred to as "The Common School Period". The reason for the name "the common school" is that it was the first time that education went from being exclusively private to be available to the common masses. Schools for the masses did not exist prior to the 1840s. But soon after reformers Horace Mann and Henry Barnard came into the picture and they created the first statewide common schools in Massachusetts and Connecticut. They felt that children needed to have the opportunity to attend school available to all children, so they may create bonds between the diverse population of the people who were there since the United States declared their independence from England and the new influx of immigrants coming into the country. They believed that with the education being available to the masses they will be able to “preserve social stability and prevent crime and poverty.” Both Mann and Barnard “worked to establish a free elementary education accessible to everyone and financed by public funds.” But they also thought that schools should be accountable to the their local school board and state government. And they helped establish mandatory attendance for elementary school-age children. This new reformed education was later imposed on all the states in 1841 (19th-century education).
==Early Textbooks==
The earlier textbooks wanted to focus the child on becoming a democratic citizens when they grow up. The earlier textbooks were “…specifically designed to connect children with their environment.” And by being connected to their environment the children are being reinforced to be democratic citizens, by knowing what is going on around them. These textbooks taught the children to be democratic citizens by incorporating local history, politics, documents, speeches, and geographic locations (Schwartz, 2002).
===''McGuffey Reader''===
Then “In 1833, Rev. William Holmes McGuffey was approached by Truman and Smith Publishing and asked to write a school text book for their company to sell” (19th Century Education). However, McGueffy decided to originally write a textbook because he was completely dissatisfied with the current teaching trends. Therefore he took matters into his own hands, and had the neighboring children on his porch and tried to find out how they learned. He discovered that children are capable of reading before they even know how to spell. And that children are more likely to retain the knowledge if they read aloud and have to memorize certain phrases or sentences (Westerhoff, 1978). He published his first reader in 1841, followed in later years four more. In his first reader it contained fifty-five lessons, of which the child is portrayed to be “prompt, good, kind, honest and truthful” just like a model citizen should be. The child also is a White, Anglo-Saxon, Protestant. The reader itself contained stories from the Bible, schoolbooks, and other literary works.
==Public High Schools==
Public high schools were developed in the early 1800s for college preparatory classes.
===Kalamazoo court case===
At first the extent of public school education was initially restricted to only common schools, but then in 1859 the Michigan Legislature passed a law “that authorized school districts of more than 200 school-age children to elect school boards to govern their districts.” If the districts had 200 plus children that were of school age then they were able to fund high schools. They were able to do this by using the local taxes if the citizens voted for it. Kalamazoo established their first high school in 1858, but this was done prior to the voting (Timmerman, 2005). So in 1875 (Wright ) three predominate members in the community, that opposed this new form of higher education, to take it to court. This is due to their belief that they shouldn’t have their tax dollars wasted on such a petty thing as preparatory work for college. The out come was that the judge liked the idea of higher education of the younger generation, thus the case was dismissed (Timmerman, 2005).
===Other colleges===
Under the Morrill Land-Grant Acts federal land was given to the states to open a college. The only requirement was that the college has to teach military tactics, engineering, and agriculture. Each state received 30,000 acres per Congressmen according to the 1860 consensus. Originally the land that was distributed was only for the northern states, due to the current Civil War that was going on at the time. But was later extended to the southern states, too (2007).
==After the Civil War==
After the Civil War and the blacks were freed from slavery, white missionaries came down to educate the people of African heritage. They wanted to do enlighten these people with knowledge, because they thought that slavery dehumanized them, thus going to try to teach them as if they are objects. But once the white men arrived in the South they were deeply surprised that they developed their own type of schools. Some of the white men tried to intervene and teach these ex-slaves the correct way to learn, while others simple just stood from a distance, overseeing it. One such man was John W. Alvord, the national superintendent for the Freedman’s Bureau (Anderson, 1988). The Freedman’s Bureau was established on March 3, 1865, and it supervised all relief and educational activities relating to the refugees and the freedmen. Alvord was appointed inspector (later known as general superintendent) of the Bureau. He made a dramatic change to the hierarchy of schools by dividing his work load. In August of 1865 Alvord appointing one superintendent per state, which had to report the actions of the Bureau. During one of the reports a group of African Americans had achieved something that no other race had yet to come close to. That is (in this particular) two black men gathered 150 pupils in one place to teach (Anderson, 1988). The whites called these African American schools native schools.
===Tuskegee Normal School (Tuskegee National Institute, Tuskegee University)===
{{Rquote|right|He lifted the veil of ignorance from his people and pointed the way to progress through education and industry.|from the monument of Booker T. Washington|(Brown, 1999)}}
The second [[http://en.wikipedia.org/wiki/Morrill_Land-Grant_Colleges_Act Morrill Land-Grant Act]] permitted the African Americans to have land to put colleges on. Though they didn’t receive as much land as an all white school, they at least received some. The Tuskegee State Normal Institute (Tuskegee Institute, Tuskegee University) was founded by Adams, a former slave, and George Campbell, a slave owner (Brown, 1999). These two men wanted to fund an institution where African Americans are able to learn skills that they can making a living, so they may survive. When the school was started Adams and Campbell brought Washington into the school. They brought him into the school because they liked his philosophy on how to teach African Americans. Washington believed that “blacks could gain economic stability, purchase land or homes, and consequently become socially stable,” if they were taught the industrial skills in school. Which made Tuskegee the first African American school to be constructed where the whole curriculum is to learn industrial skills (Brown, 1999).
==Multiple Choice Questions==
Click to reveal the answer.
{{question-answer|question=If you were a student at Tuskegee Normal School, in the 1800s, you would be learning?
:A. Greek tragedies
:B. French
:C. Agriculture
:D. Law
|answer=C. Agriculture}}
{{question-answer|question=If you were a student in the 19th century, why would you would be attending school?
:A. Learn to create bonds between diverse population
:B. Learn that you would specialize in
:C. Learn how to be good little Protestant people
:D. Learn what it means to be patriotic
|answer=A. Learn to create bonds between diverse population}}
{{question-answer|question=Thanks to the reforms in the 19th century we have what today?
:A. Mandatory play time
:B. Mandatory discipline
:C. Mandatory participation
:D. Mandatory attendance
|answer=D. Mandatory attendance}}
{{question-answer|question=If you were a student attending a college that was part of the Morrill Land-Grant Acts then what would you be learning?
:A. teaching, engineering, and law
:B. military tactics, engineering, and agriculture
:C. military tactics, teaching, and clergy
:D. Law, agriculture, and medicine
|answer=B. military tactics, engineering, and agriculture}}
{{question-answer|question=If you where a white teacher heading south to teach after the Civil War, what would you have found?
:A. Blacks that set up their own schools
:B. Whites teaching Blacks
:C. Blacks not teaching anything
:D. Whites having the only schools
|answer=A. Blacks that set up their own schools}}
==Essay Question==
Click to reveal a sample response.
{{question-answer|question=Do you feel that the establishment of high school is truly beneficial to those who attend colleges?
|answer=I believe that the establishment of high schools is truly necessary for students to attend before they reach college. I believe this because there is a lot of knowledge that is needed to be learned before they enter the college academia. The establishment of high schools provides the student the correct amount of knowledge, so they are better equipped before entering the prestigious college arena. The establishment also allow the child to mature in age before they are set free to move about and make an impact on the world. Thus by having the student enter college after the completion of high school; they are allowing them to learn new ideas and concepts on what they believe to be right and what needs to be corrected in the world.}}
==References==
* Brown II, M. C (1999).The Politics of Industrial Education: Booker T. Washington and Tuskegee State Normal School, 1880-1915. The Negro Educational Review. 50, 123-128.
* Anderson, J. D. (1988). ''[[:w:The Education of Blacks in the South, 1860–1935|The Education of Blacks in the South, 1860–1935]]''. Chapel Hill, NC: The University of North Carolina Press.
* (2007 September 6). Morill Land-Grant Colleges Act. Retrieved September 14, 2007, from Wikipedia Web site: http://en.wikipedia.org/wiki/Morrill_Land-Grant_Colleges_Act
* Timmerman, Elizabeth (2005 July). The Kalamazoo School Case: Supporting High School Education. Retrieved September 14, 2007, from Kalamazoo Public Library Web site: http://www.kpl.gov/collections/localhistory/allabout/education/SchoolCase.aspx
* Wright, Sarah The Kalamazoo Case. Retrieved September 14, 2007, from Kalamazoo court case Web site: http://www.nd.edu/~rbarger/www7/kalamazo.html
* Westerhoff III, J.H. (1978). McGuffey and His Readers. Nashville, TN: Abingdon.
* 19th Century Education. Retrieved September 14, 2007, from The History of Education in America Web site: http://www.chesapeake.edu/library/EDU_101/eduhist_19thC.asp
* Schwartz, Sherry (2002).Finding the Expanding Environments Curriculum in America's First Primary Schools. The Social Studies. 93, 57-61.
{{BookCat}}
orsorusbofid3u9j0bxq5ha21glxnol
Social and Cultural Foundations of American Education/History/21st Century
0
100723
4641581
1721425
2026-06-28T21:21:43Z
~2026-37080-31
3610587
/* Project Based Learning (PBL) */
4641581
wikitext
text/x-wiki
{{hiddenh3|What are the markers of the 21st Century?}}
Our world is constantly changing. No longer are we ignorant to the world around us. We have created new technologies over the years so we can connect with the whole world. We have become a multicultural society, embracing ethnic and cultural differences, and also a technological society, using technologies, such as cell phones, computers, ipods, video games, etc., in our everyday lives. It is no surprise that because of this our educational system has changed and must continue to change in order to carry on in the 21st century. " The world has changed. Nearly all teachers understand how the industrial culture has shaped the organization and methods of schools in the 19th and 20th centuries, and they recognize that schools must now adapt to a new century" ("Introduction to PBL"). Educators have new standards to meet and much to learn in order to be successful teachers nowadays. They must be able to follow the curriculum established by NCLB and also incorporate technology and new teaching methods into their classroom in order to prepare students for the future. It is vital to "bring what we teach and how we teach into the 21st century" (Wallis, 2006).
==NCLB==
One change upon entering the 21st century was the No Child Left Behind Act (NCLB). This act was made in 2001 to ensure that all children have an equal and fair opportunity to get a high quality education and perform at the minimum proficiency level set by their state on achievement tests. This act was implemented because there were too many students being “left behind” in the classroom. These students were falling further and further behind each year because they were not getting the individualized attention they needed to perform well in school. NCLB makes certain that students will learn every concept they need to learn at their grade level. In order to make this happen, teachers must be “highly qualified” and undergo rigorous assessment themselves. They are judged upon how their students perform on the standardized tests. This leaves educators no choice but to teach strictly from the book to meet these standards. No longer do teachers have the time to review concepts over and over again and move the class along as they see fit. The classroom must follow a strict schedule to get things done. However, this creates another problem for the educational system. If so much emphasis is placed on getting passing scores on achievement tests, where is the time to teach students other important things needed in the 21st century? According to (Fletcher, 2007), “What may be needed is a fundamental shift in how we think about curriculum.” The current view in the standards movement is that the state should define what needs to be taught and the teachers should teach according to those set standards. However, we need to become less content-oriented and focus more on the process (Fletcher, 2007). According to (Wallis, 2006), teachers need to do much more than the bare minimum to have students meet testing requirements for NCLB. They also need to teach students skills essential to the 21st century. These skills include, but are not limited to, learning about the world around them, being able to think outside the box and across different disciplines, developing good people skills, and learning how to process and organize information. (Wallis, 2006).
==Technology Integration==
Many of these skills essential to the 21st century rely on the use of technology. As said previously, technology is everywhere in our world today. Children are growing up with computers, cell phones, ipods, etc. Our society depends on these technologies on an everyday basis. In order for educators to be successful teachers in the 21st century they must be able to integrate these technologies into the school curriculum. "How teachers of the 21st century implement computers into their schools is critical to achieving the benefits of technology in children's learning" (Dockstader, 1999). It is vital to students’ success in the future, both independently and professionally. It was stated in (Fletcher, 2007) that several hundred employers were polled to see what skills were thought to be the most important to learn for success in the workplace. The skills reported as the most important were professionalism/work ethic, teamwork collaboration, oral communication, and critical thinking/problem solving (Fletcher, 2007). All of the skills mentioned can be taught through technology integration. The question is How?
<table WIDTH="350px" ALIGN="right"><tr><td style="background-color: #FFF7F7;
border: solid 1px #FFBDBD; padding: 1em;" valign=top>
[http://www.thejournal.com/aticles/14141_2 How to Integrate Technology in the Classroom]
</td></tr></table>
Incorporting technology into the curriculum can be quite a struggle, especially if one does not understand what technology integration actually means. It is not just about using computers in the classroom; it is about using computers and other technologies to effectively teach general subject matter. Dockstader stated, “Technology integration is having the curriculum drive technology usage, not having technology drive the curriculum” (Dockstader,1999). It might seem like a hard task to do this effectively, but there are now many new teaching methods out there to help. Many of these methods focus on a student-centered approach to learning rather than a teacher-centered approach. This gives students the opportunity to work hands on with technology and each other to build the skills they need for life. Two of these many methods that will be further discussed are Cooperative Learning and Project Based Learning.
The No Child Left Behind Act was signed on 2005 by President George W. Bush it is still a huge factor. It means that each state has different standard tests that each student needs to graduate from school. It is also difficult for teachers because they have to cover every lecture befor the semester ends and it is a struggle. In Virginia, they have a special standard tests call Standards of Learing tests (SOL's). Every student has to pass at least six of them to graduate, which it started in 2004. It is a nightmare and it is no fun in the sun too.
==Cooperative Learning==
Cooperative Learning is defined as "students of all levels of performance working together in structured groups towards a shared or common goal" ("A Guide to Cooperative Learning"). In this kind of learning environment teachers act as a facilitator or coach in the learning process. The students are responsible for creating a learning community among themselves. This encourages group members to support each other and build team work skills. It also raises both group and individual accountability ("A Guide.."). Through cooperative learning students are able to achieve goals they would not be able to do individually. These projects help students attain higher levels of achievement and increase their self-esteem and communication skills they need to be productive members of society ("A Guide..").
Some of the basic principles of this teaching method are: Face-to-face Promotive Interaction, where learning is active, students discuss ideas and learn to appreciate others values; Positive Interdependence, where there is a single team product and different roles for each group member; Individual Accountability and Collaborative Skills, where students are encouraged to work together effectively; and Reflection/ Group Processing of interaction, where students analyze how their group functions ("A Guide..").
<table WIDTH="350px" ALIGN="right"><tr><td style="background-color: #FFF7F7;
border: solid 1px #FFBDBD; padding: 1em;" valign=top>
[http://www.jigsaw.org/steps.htm An example of Cooperative Learning: The Jigsaw]
</td></tr></table>
The results of Cooperative Learning in classrooms have been positive ones. There seems to be a "higher retention of subject material, better attitutes towards learning, and enhanced personal relationships among peers" ("A Guide.."). Because of this success, cooperative learning will more than likely be encouraged to use in future classroom settings.
==Project Based Learning (PBL)==
Another teaching method new to the 21st century is called Problem Based Learning, or PBL. In this approach to teaching, the teacher creates a project designed around a problem or topic that is (1) addressed in the existing course curriculum, (2) effects the students life or community, and (3) is solved by the student using teacher supplied resources and guidelines ("Introduction to PBL"). PBL is a great way to incorportate both content and life skills into learning at the same time. A less broad approach to PBL is Standards-Focused PBL. This is defined as "a systematic teaching method that engages students in learning knowledge and skills through an extended inquiry process structured around complex, authentic questions and carefully designed products and tasks" ("Intro.."). PBL begins with a driving question that is tied to content standards in the curriculum. Students need to answer this question by using tools and skills, like technology and project management. It requires students to investigate, research, reason, and learn from experience ("Intro.."). This creates in-depth exploration of the topic in a challenging and interactive way.
Some of the benefits found to be associated with this approach are students learning problem solving and communication, it assesses performance on content and skills, encourages accountability, and it meets the needs of students with different learning styles ("Intro..").
PBL learning and Cooperative Learning are just two methods of many that can be excellent ways to teach the children of the 21st century. They will be able to learn the content that is required by NCLB and also learn important and necessary skills for the future.
==Conclusion: What teachers of the 21st century need to do==
Teachers of the 21st century have much to do in order to meet the needs of students, parents, and administrators. It is important that they “..will know and understand basic technology competencies are important. And they will know how to integrate technology using a consistant and well-designed model of instruction” (Dockstader, 1999). 21st century teachers need to be willing to work with new technologies and incorporate them into their teaching. They must be able to move away from traditional teaching methods and use a more student-centered approach.
<table WIDTH="350px" ALIGN="right"><tr><td style="background-color: #FFF7F7;
border: solid 1px #FFBDBD; padding: 1em;" valign=top>
[http://www.21stcenturyskills.org Skills of the 21st Century]
</td></tr></table>
This requires teachers to be open-minded, patient, and not afraid to ask questions. Because students "must develop a high level of competence not only in traditional academic areas but also in 21st century skills such as collaboration, communication, creativity, innovation, information literacy, critical thinking, problem solving, and global awareness” (Rosenfeld, 2007), it is vital that the curriculum establishes a balance between content knowledge and skills. By doing this we will be able to successfully prepare our children for what's ahead of them in the future.
==Multiple Choice Questions==
Click to reveal the answer.
{{question-answer|question=A teacher divides her students into groups in which they work together with different roles to solve a problem. What kind of teaching method is she using?
:A. Technology Integration
:B. PBL
:C. Cooperative Learning
:D. None, she made her own method up
|answer=C. Cooperative Learning}}
{{question-answer|question=Every student in Mrs. Jones' sixth grade class has passed the SOL test this year. In order to do this they spent every day listening to Mrs. Jones' lecture, then they answered questions out of the textbook. Even though they mastered the content part of the curriculum, what are they missing?
:A.Recess
:B.Nothing, SOLS are all that matters
:C. Life skills, such as problem solving and collaboration
|answer=C. Life skills, such as problem solving and collaboration}}
{{question-answer|question=Mr. Edwards wants to incorporate technology into his teaching method. How could he effectively do this while still teaching content standards?
:A. He could have students use computers to do PowerPoint presentations on an era in History
:B. He could have students use computers to talk on instant messenger to each other
:C. He could have students learn how to type on a computer.
|answer=A. He could have students use computers to do PowerPoint presentations on an era in History}}
{{question-answer|question=In order to be an effective teacher of the 21st century what does Mr. Smith need to do in his classroom?
:A. Make sure he meets all the requirements of NCLB
:B. Find a teaching balance between content and skills
:C. Make sure all his students like him and enjoy class
|answer=B. Find a teaching balance between content and skills}}
{{question-answer|question=Ms. Harris walks around the classroom while her students work in groups to solve a problem. She offers help and encouragement to her students as needed. What role is she taking in this learning environment?
:A. A Facilitator
:B. An administrator
:C. An encourager
|answer=A. A Facilitator}}
==Essay Question==
Click to reveal a sample response.
{{question-answer|question=Teachers of the 21st century need to do more than just teach students according to the standards made by NCLB. They must also teach important skills for each child to be successful in the future. What are some of these "skills"? As a teacher, how could you integrate these "skills" into the content curriculum?
|answer=Teachers of the 21st century need to take a student-centered approach to teaching. They need to integrate technology into their curriculum. They can do this by using computers and other technology to teach the content curriculum provided by NCLB. By doing this students can learn the important and necessary skills of problem solving, communication, and project management. Teachers can show videos and other interactive material to engage students in learning. They can also have students use programs like Microsoft Word, Power Point, etc. Teachers can show students how to use the internet and how to find their own information through search engines and other websites. Students can learn how to research, sort, and analyze data. Most importantly, students can be taught how to teach themselves. Students can then use the skills that they gain to learn about the subjects outlined in the standards.
Some of the methods teachers can use to make sure students get a balance between content and skills are cooperative learning and Project Based Learning (PBL). By using cooperative learning methods, teachers can get students to become more social and develop good communication skills. By having students work in groups they are able to achieve goals they would not be able to do alone. Through cooperative learning, students also learn other skills such as collaboration and how to value opinions of others. There are many different ways teachers can incorporate cooperative learning into their teaching. There are also many resources available for teachers to help them create ideas for their classrooms.
Another method is PBL. In PBL students are asked a driving question. This question engages students and makes them excited to learn. Through PBL students can also learn the skills of problem solving, working in groups, finding their own answers, etc. Students are able to gain these skills while also learning the material they need to learn for the SOLS. Both these methods, cooperative learning and PBL, along with many others, have been shown to cause higher retention rates of material and more interest in learning. The skills learned through this methods of teaching are ones that can be used throughout life.}}
==References==
* Dockstader, Jolene. (1999, January). Teachers of the 21st Century know the what, why, and how of technology. Retrieved September 18, 2007, from http://www.thejournal.com/articles/14141.
* Rosenfeld, Ester. (2007, April). Beginning the Conversation About Education 2.0. '''''Teacher Librarian, 34'''''(6-7). Retrieved September 18, 2007, from Education Full Text database http://www.vnweb.hwwilsonweb.com.proxy.lib.odu.edu/hww/shared/shared_main.jhtml?_requestid=122710.
* Wallis, C, ft Steptoe, S. (2006, December 18). How to bring our schools out of the 20th Century. '''''Time, 768'''''(25). Retrieved September 16, 2007, from http://www.time.com/magazine/article/0,9171,1568480,00.html.
* Fletcher, Geoffrey H. (2007, July). An Eye on the Future. '''''T.H.E. Journal, 34'''''(26-7). Retrieved September 16, 2007 from Education Full Text database http://vnweb.hwwilsonweb.com.proxy.lib.odu.edu/hww/shared/shared_main.jtml?_requestid=28540.
* Stitt, Jason. (2004, March). 21st century skills, the future of technology and education. Retrieved September 18, 2007, from http://www.wistechnology.com/article.php?id=685.
* Introduction to PBL. Retrieved September 18, 2007, from Buck Institute for Education http://www.bie.org/index.php/site/PBL/pbL/pbl_handbook_introduction/#history.
* A Guide to Cooperative Learning. Retrieved September 18, 2007, from http://www.pgcps.pg.k12.md.us/~elc/learning1.html.
{{BookCat}}
rdrz7xaqdnhjvz3npwrz37099ureldz
4641657
4641581
2026-06-29T09:56:50Z
Xania
40302
fixed lots of grammar issues
4641657
wikitext
text/x-wiki
{{hiddenh3|What are the markers of the 21st Century?}}
Our world is constantly changing. No longer are we ignorant to the world around us. We have created new technologies over the years so we can connect with the whole world. We have become a multicultural society, embracing ethnic and cultural differences, and also a technological society, using technologies, such as cell phones, computers, iPods, video games, etc., in our everyday lives. It is no surprise that because of this our educational system has changed and must continue to change in order to carry on in the 21st century. " The world has changed. Nearly all teachers understand how the industrial culture has shaped the organization and methods of schools in the 19th and 20th centuries, and they recognize that schools must now adapt to a new century" ("Introduction to PBL"). Educators have new standards to meet and much to learn in order to be successful teachers nowadays. They must be able to follow the curriculum established by NCLB and also incorporate technology and new teaching methods into their classroom in order to prepare students for the future. It is vital to "bring what we teach and how we teach into the 21st century" (Wallis, 2006).
==NCLB==
One change upon entering the 21st century was the No Child Left Behind Act (NCLB). This act was made in 2001 to ensure that all children have an equal and fair opportunity to get a high quality education and perform at the minimum proficiency level set by their state on achievement tests. This act was implemented because there were too many students being “left behind” in the classroom. These students were falling further and further behind each year because they were not getting the individualized attention they needed to perform well in school. NCLB makes certain that students will learn every concept they need to learn at their grade level. In order to make this happen, teachers must be “highly qualified” and undergo rigorous assessment themselves. They are judged on how their students perform on the standardized tests. This leaves educators no choice but to teach strictly from the book to meet these standards. No longer do teachers have the time to review concepts over and over again and move the class along as they see fit. The classroom must follow a strict schedule to get things done. However, this creates another problem for the educational system. If so much emphasis is placed on getting passing scores on achievement tests, where is the time to teach students other important things needed in the 21st century? According to (Fletcher, 2007), “What may be needed is a fundamental shift in how we think about curriculum.” The current view in the standards movement is that the state should define what needs to be taught and the teachers should teach according to those set standards. However, we need to become less content-oriented and focus more on the process (Fletcher, 2007). According to (Wallis, 2006), teachers need to do much more than the bare minimum to have students meet testing requirements for NCLB. They also need to teach students skills essential to the 21st century. These skills include, but are not limited to, learning about the world around them, being able to think outside the box and across different disciplines, developing good people skills, and learning how to process and organize information. (Wallis, 2006).
==Technology Integration==
Many of these skills essential to the 21st century rely on the use of technology. As said previously, technology is everywhere in our world today. Children are growing up with computers, cell phones, iPods, etc. Our society depends on these technologies on an everyday basis. In order for educators to be successful teachers in the 21st century they must be able to integrate these technologies into the school curriculum. "How teachers of the 21st century implement computers into their schools is critical to achieving the benefits of technology in children's learning" (Dockstader, 1999). It is vital to students’ success in the future, both independently and professionally. It was stated in (Fletcher, 2007) that several hundred employers were polled to see what skills were thought to be the most important to learn for success in the workplace. The skills reported as the most important were professionalism/work ethic, teamwork collaboration, oral communication, and critical thinking/problem solving (Fletcher, 2007). All of the skills mentioned can be taught through technology integration. The question is How?
<table WIDTH="350px" ALIGN="right"><tr><td style="background-color: #FFF7F7;
border: solid 1px #FFBDBD; padding: 1em;" valign=top>
[http://www.thejournal.com/aticles/14141_2 How to Integrate Technology in the Classroom]
</td></tr></table>
Incorporating technology into the curriculum can be quite a struggle, especially if one does not understand what technology integration actually means. It is not just about using computers in the classroom; it is about using computers and other technologies to effectively teach general subject matter. Dockstader stated, “Technology integration is having the curriculum drive technology usage, not having technology drive the curriculum” (Dockstader,1999). It might seem like a hard task to do this effectively, but there are now many new teaching methods out there to help. Many of these methods focus on a student-centered approach to learning rather than a teacher-centered approach. This gives students the opportunity to work hands on with technology and each other to build the skills they need for life. Two of these many methods that will be further discussed are Cooperative Learning and Project Based Learning.
The No Child Left Behind Act was signed on 2005 by President George W. Bush it is still a huge factor. It means that each state has different standard tests that each student needs to graduate from school. It is also difficult for teachers because they have to cover every lecture befor the semester ends and it is a struggle. In Virginia, they have a special standard tests call Standards of Learing tests (SOL's). Every student has to pass at least six of them to graduate, which it started in 2004. It is a nightmare and it is no fun in the sun too.
==Cooperative Learning==
Cooperative Learning is defined as "students of all levels of performance working together in structured groups towards a shared or common goal" ("A Guide to Cooperative Learning"). In this kind of learning environment teachers act as facilitators or coach in the learning process. The students are responsible for creating a learning community among themselves. This encourages group members to support each other and build team work skills. It also raises both group and individual accountability ("A Guide.."). Through cooperative learning students are able to achieve goals they would not be able to do individually. These projects help students attain higher levels of achievement and increase their self-esteem and communication skills they need to be productive members of society ("A Guide..").
Some of the basic principles of this teaching method are: Face-to-face Promotive Interaction, where learning is active, students discuss ideas and learn to appreciate others values; Positive Interdependence, where there is a single team product and different roles for each group member; Individual Accountability and Collaborative Skills, where students are encouraged to work together effectively; and Reflection/ Group Processing of interaction, where students analyze how their group functions ("A Guide..").
<table WIDTH="350px" ALIGN="right"><tr><td style="background-color: #FFF7F7;
border: solid 1px #FFBDBD; padding: 1em;" valign=top>
[http://www.jigsaw.org/steps.htm An example of Cooperative Learning: The Jigsaw]
</td></tr></table>
The results of Cooperative Learning in classrooms have been positive ones. There seems to be a "higher retention of subject material, better attitudes towards learning, and enhanced personal relationships among peers" ("A Guide.."). Because of this success, cooperative learning will more than likely be encouraged to use in future classroom settings.
==Project Based Learning (PBL)==
Another teaching method new to the 21st century is called Problem Based Learning, or PBL. In this approach to teaching, the teacher creates a project designed around a problem or topic that is (1) addressed in the existing course curriculum, (2) affects the students life or community, and (3) is solved by the student using teacher supplied resources and guidelines ("Introduction to PBL"). PBL is a great way to incorportate both content and life skills into learning at the same time. A less broad approach to PBL is Standards-Focused PBL. This is defined as "a systematic teaching method that engages students in learning knowledge and skills through an extended inquiry process structured around complex, authentic questions and carefully designed products and tasks" ("Intro.."). PBL begins with a driving question that is tied to content standards in the curriculum. Students need to answer this question by using tools and skills, like technology and project management. It requires students to investigate, research, reason, and learn from experience ("Intro.."). This creates in-depth exploration of the topic in a challenging and interactive way.
Some of the benefits found to be associated with this approach are students learning problem solving and communication, it assesses performance on content and skills, encourages accountability, and it meets the needs of students with different learning styles ("Intro..").
PBL learning and Cooperative Learning are just two methods of many that can be excellent ways to teach the children of the 21st century. They will be able to learn the content that is required by NCLB and also learn important and necessary skills for the future.
==Conclusion: What teachers of the 21st century need to do==
Teachers of the 21st century have much to do in order to meet the needs of students, parents, and administrators. It is important that they “..will know and understand basic technology competencies are important. And they will know how to integrate technology using a consistent and well-designed model of instruction” (Dockstader, 1999). 21st century teachers need to be willing to work with new technologies and incorporate them into their teaching. They must be able to move away from traditional teaching methods and use a more student-centered approach.
<table WIDTH="350px" ALIGN="right"><tr><td style="background-color: #FFF7F7;
border: solid 1px #FFBDBD; padding: 1em;" valign=top>
[http://www.21stcenturyskills.org Skills of the 21st Century]
</td></tr></table>
This requires teachers to be open-minded, patient, and not afraid to ask questions. Because students "must develop a high level of competence not only in traditional academic areas but also in 21st century skills such as collaboration, communication, creativity, innovation, information literacy, critical thinking, problem solving, and global awareness” (Rosenfeld, 2007), it is vital that the curriculum establishes a balance between content knowledge and skills. By doing this we will be able to successfully prepare our children for what's ahead of them in the future.
==Multiple Choice Questions==
Click to reveal the answer.
{{question-answer|question=A teacher divides her students into groups in which they work together with different roles to solve a problem. What kind of teaching method is she using?
:A. Technology Integration
:B. PBL
:C. Cooperative Learning
:D. None, she made her own method up
|answer=C. Cooperative Learning}}
{{question-answer|question=Every student in Mrs. Jones' sixth grade class has passed the SOL test this year. In order to do this they spent every day listening to Mrs. Jones' lecture, then they answered questions out of the textbook. Even though they mastered the content part of the curriculum, what are they missing?
:A.Recess
:B.Nothing, SOLS are all that matters
:C. Life skills, such as problem solving and collaboration
|answer=C. Life skills, such as problem solving and collaboration}}
{{question-answer|question=Mr. Edwards wants to incorporate technology into his teaching method. How could he effectively do this while still teaching content standards?
:A. He could have students use computers to do PowerPoint presentations on an era in History
:B. He could have students use computers to talk on instant messenger to each other
:C. He could have students learn how to type on a computer.
|answer=A. He could have students use computers to do PowerPoint presentations on an era in History}}
{{question-answer|question=In order to be an effective teacher of the 21st century what does Mr. Smith need to do in his classroom?
:A. Make sure he meets all the requirements of NCLB
:B. Find a teaching balance between content and skills
:C. Make sure all his students like him and enjoy class
|answer=B. Find a teaching balance between content and skills}}
{{question-answer|question=Ms. Harris walks around the classroom while her students work in groups to solve a problem. She offers help and encouragement to her students as needed. What role is she taking in this learning environment?
:A. A Facilitator
:B. An administrator
:C. An encourager
|answer=A. A Facilitator}}
==Essay Question==
Click to reveal a sample response.
{{question-answer|question=Teachers of the 21st century need to do more than just teach students according to the standards made by NCLB. They must also teach important skills for each child to be successful in the future. What are some of these "skills"? As a teacher, how could you integrate these "skills" into the content curriculum?
|answer=Teachers of the 21st century need to take a student-centered approach to teaching. They need to integrate technology into their curriculum. They can do this by using computers and other technology to teach the content curriculum provided by NCLB. By doing this students can learn the important and necessary skills of problem solving, communication, and project management. Teachers can show videos and other interactive material to engage students in learning. They can also have students use programs like Microsoft Word, Power Point, etc. Teachers can show students how to use the internet and how to find their own information through search engines and other websites. Students can learn how to research, sort, and analyze data. Most importantly, students can be taught how to teach themselves. Students can then use the skills that they gain to learn about the subjects outlined in the standards.
Some of the methods teachers can use to make sure students get a balance between content and skills are cooperative learning and Project Based Learning (PBL). By using cooperative learning methods, teachers can get students to become more social and develop good communication skills. By having students work in groups they are able to achieve goals they would not be able to do alone. Through cooperative learning, students also learn other skills such as collaboration and how to value opinions of others. There are many different ways teachers can incorporate cooperative learning into their teaching. There are also many resources available for teachers to help them create ideas for their classrooms.
Another method is PBL. In PBL students are asked a driving question. This question engages students and makes them excited to learn. Through PBL students can also learn the skills of problem solving, working in groups, finding their own answers, etc. Students are able to gain these skills while also learning the material they need to learn for the SOLS. Both these methods, cooperative learning and PBL, along with many others, have been shown to cause higher retention rates of material and more interest in learning. The skills learned through this methods of teaching are ones that can be used throughout life.}}
==References==
* Dockstader, Jolene. (1999, January). Teachers of the 21st Century know the what, why, and how of technology. Retrieved September 18, 2007, from http://www.thejournal.com/articles/14141.
* Rosenfeld, Ester. (2007, April). Beginning the Conversation About Education 2.0. '''''Teacher Librarian, 34'''''(6-7). Retrieved September 18, 2007, from Education Full Text database http://www.vnweb.hwwilsonweb.com.proxy.lib.odu.edu/hww/shared/shared_main.jhtml?_requestid=122710.
* Wallis, C, ft Steptoe, S. (2006, December 18). How to bring our schools out of the 20th Century. '''''Time, 768'''''(25). Retrieved September 16, 2007, from http://www.time.com/magazine/article/0,9171,1568480,00.html.
* Fletcher, Geoffrey H. (2007, July). An Eye on the Future. '''''T.H.E. Journal, 34'''''(26-7). Retrieved September 16, 2007 from Education Full Text database http://vnweb.hwwilsonweb.com.proxy.lib.odu.edu/hww/shared/shared_main.jtml?_requestid=28540.
* Stitt, Jason. (2004, March). 21st century skills, the future of technology and education. Retrieved September 18, 2007, from http://www.wistechnology.com/article.php?id=685.
* Introduction to PBL. Retrieved September 18, 2007, from Buck Institute for Education http://www.bie.org/index.php/site/PBL/pbL/pbl_handbook_introduction/#history.
* A Guide to Cooperative Learning. Retrieved September 18, 2007, from http://www.pgcps.pg.k12.md.us/~elc/learning1.html.
{{BookCat}}
lejeoisf3ihcjrljxrlot6q7mnmop9q
Introduction to Game Theory/Short history
0
104706
4641586
3267473
2026-06-28T22:40:18Z
MinskyyCharmmaker
3610149
/* */ added what does game theory discovers and work on
4641586
wikitext
text/x-wiki
Game theory discovers, how the science about claiming decisions in conditions, when the results depends out of a few members actions arose and were developing.
Game theory can be traced back to Babylonian times, in the so called ''Marriage Contract Problem'', although this was only recognised as such in 1985. Game Theory really began to emerge as a subject in the 1900s. Firstly by Ernst Zermelo in his paper ''Über eine Anwendung der Mengenlehre auf die Theorie des Schachspiels'' ("On the Application of Set Theory to the Theory of Chess") of 1913, in which the first 'theorem' of game theory was published. This theory (known as Zermelo's Theorem) states that in the game of chess either white can force a win, or black can force a win, or both sides can force at least a draw.
The field came into being properly with the 1944 classic ''Theory of Games and Economic Behavior'' by John von Neumann and Oskar Morgenstern.
{{chapnav|Overview|Theory of rational choice}}
{{BookCat}}
jna51t4m9n461xnbko8uvzhxsiaxro6
4641655
4641586
2026-06-29T09:54:33Z
Xania
40302
removed opening sentences which makes no sense
4641655
wikitext
text/x-wiki
Game theory can be traced back to Babylonian times, in the so called ''Marriage Contract Problem'', although this was only recognised as such in 1985. Game Theory really began to emerge as a subject in the 1900s. Firstly by Ernst Zermelo in his paper ''Über eine Anwendung der Mengenlehre auf die Theorie des Schachspiels'' ("On the Application of Set Theory to the Theory of Chess") of 1913, in which the first 'theorem' of game theory was published. This theory (known as Zermelo's Theorem) states that in the game of chess either white can force a win, or black can force a win, or both sides can force at least a draw.
The field came into being properly with the 1944 classic ''Theory of Games and Economic Behavior'' by John von Neumann and Oskar Morgenstern.
{{chapnav|Overview|Theory of rational choice}}
{{BookCat}}
3lp47npl773htg6uah6a382g6uk9zio
The Linux Kernel/Modules
0
108805
4641529
4640233
2026-06-28T15:36:26Z
Conan
3188
Modules: moduleparam.h header reference
4641529
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Linux modules}}</noinclude><includeonly>== Modules ==</includeonly>
A kernel module is a code that can be loaded into the kernel image at will, without requiring users to rebuild the kernel or reboot their computer.
Modular design ensures that you do not have to make a monolithic kernel that contains all code necessary for hardware and situations.
Common kernel modules are device drivers, which directly access computer and peripheral hardware.
Kernel modules have a .ko extension.
⚲ API
: /proc/modules
: {{The Linux Kernel/man|8|insmod}} – simple program to insert a module
: {{The Linux Kernel/man|8|modprobe}} – searches and loads a module with dependencies
:: /etc/modprobe.d/
:: /lib/modules/$(uname -r)/modules.dep – module dependencies, is created by depmod -a
: {{The Linux Kernel/man|8|lsmod}} – list loaded modules
: {{The Linux Kernel/man|8|kmod}} – core program to manage Linux Kernel modules
: {{The Linux Kernel/man|8|modinfo}}
: {{The Linux Kernel/include|linux/init.h}} – initcalls
: {{The Linux Kernel/include|linux/module.h}} – macros and functions for kernel module support
:: {{The Linux Kernel/id|module_init}} – module initialization entry point
:: {{The Linux Kernel/id|module_exit}} – module cleanup exit point
:: {{The Linux Kernel/id|MODULE_LICENSE}} – licence declaration
: {{The Linux Kernel/include|linux/mod_devicetable.h}} – device ID tables for module device matching
: {{The Linux Kernel/include|linux/moduleparam.h}} – module parameter declaration ({{The Linux Kernel/id|module_param}})
: {{The Linux Kernel/include|linux/export.h}} – macros for symbol export control to kernel modules.
: {{The Linux Kernel/include|linux/kernel.h}} – miscellaneous stuff
⚙️ Internals
: {{The Linux Kernel/source|kernel/module}} – loadable module support
📖 References
: {{The Linux Kernel/doc|Building External Modules|kbuild/modules.html}}
📚 Further reading
: {{w|Loadable kernel module}}
: [https://sysprog21.github.io/lkmpg/ The Linux Kernel Module Programming Guide]
: https://wiki.archlinux.org/title/Kernel_module
: [https://github.com/makelinux/ldt Linux Driver Template]
: http://lwn.net/images/pdf/LDD3/ch02.pdf
: http://www.xml.com/ldd/chapter/book/ch02.html
: [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_kernel/managing-kernel-modules_managing-monitoring-and-updating-the-kernel Managing kernel modules, RHEL]
: http://www.tldp.org/LDP/tlk/modules/modules.html
{{BookCat}}
azf243culz89qeyljjsflwd5cizfu69
4641539
4641529
2026-06-28T16:08:23Z
Conan
3188
Modules: init_module, finit_module, delete_module syscalls
4641539
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Linux modules}}</noinclude><includeonly>== Modules ==</includeonly>
A kernel module is a code that can be loaded into the kernel image at will, without requiring users to rebuild the kernel or reboot their computer.
Modular design ensures that you do not have to make a monolithic kernel that contains all code necessary for hardware and situations.
Common kernel modules are device drivers, which directly access computer and peripheral hardware.
Kernel modules have a .ko extension.
⚲ API
: /proc/modules
: {{The Linux Kernel/man|8|insmod}} – simple program to insert a module
: {{The Linux Kernel/man|8|modprobe}} – searches and loads a module with dependencies
:: /etc/modprobe.d/
:: /lib/modules/$(uname -r)/modules.dep – module dependencies, is created by depmod -a
: {{The Linux Kernel/man|8|lsmod}} – list loaded modules
: {{The Linux Kernel/man|8|kmod}} – core program to manage Linux Kernel modules
: {{The Linux Kernel/man|8|modinfo}}
: {{The Linux Kernel/man|2|init_module}}, {{The Linux Kernel/man|2|finit_module}} – load a kernel module
: {{The Linux Kernel/man|2|delete_module}} – unload a kernel module
: {{The Linux Kernel/include|linux/init.h}} – initcalls
: {{The Linux Kernel/include|linux/module.h}} – macros and functions for kernel module support
:: {{The Linux Kernel/id|module_init}} – module initialization entry point
:: {{The Linux Kernel/id|module_exit}} – module cleanup exit point
:: {{The Linux Kernel/id|MODULE_LICENSE}} – licence declaration
: {{The Linux Kernel/include|linux/mod_devicetable.h}} – device ID tables for module device matching
: {{The Linux Kernel/include|linux/moduleparam.h}} – module parameter declaration ({{The Linux Kernel/id|module_param}})
: {{The Linux Kernel/include|linux/export.h}} – macros for symbol export control to kernel modules.
: {{The Linux Kernel/include|linux/kernel.h}} – miscellaneous stuff
⚙️ Internals
: {{The Linux Kernel/source|kernel/module}} – loadable module support
📖 References
: {{The Linux Kernel/doc|Building External Modules|kbuild/modules.html}}
📚 Further reading
: {{w|Loadable kernel module}}
: [https://sysprog21.github.io/lkmpg/ The Linux Kernel Module Programming Guide]
: https://wiki.archlinux.org/title/Kernel_module
: [https://github.com/makelinux/ldt Linux Driver Template]
: http://lwn.net/images/pdf/LDD3/ch02.pdf
: http://www.xml.com/ldd/chapter/book/ch02.html
: [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_kernel/managing-kernel-modules_managing-monitoring-and-updating-the-kernel Managing kernel modules, RHEL]
: http://www.tldp.org/LDP/tlk/modules/modules.html
{{BookCat}}
jlctxe9czhbw61f9xrni1ic8fjrrymo
Wikibooks:User groups
4
145217
4641579
4610305
2026-06-28T20:23:32Z
Codename Noreste
3441010
/* */ Modifying the introduction.
4641579
wikitext
text/x-wiki
{{Useful|WB:UG|WB:RIGHTS}}
The following is a list of '''user groups''' on English Wikibooks, and as such are typically requested at [[Wikibooks:Requests for permissions]]. The full list of rights available to user groups is at [[Special:ListGroupRights]]
== User groups available to all users ==
==== <span class="anchor" id="Unregistered users"></span><span class="anchor" id="Unregistered"></span><span class="anchor" id="*"></span>Unregistered users ====
{{shortcut|WB:ANON|WB:UNREGISTERED}}
Users who do not log in are said to be '''unregistered users''', also referred to as '''anonymous users''' or ''anons''. These users may edit pages which are not protected or semi-protected; their edits will appear in [[Help:Tracking changes#Page history|page histories]]. They can also create new pages.
Unregistered users cannot move pages, upload media, or maintain a [[Help:Tracking changes#Watching pages|watchlist]]. They also are not able to select the option of '''minor edit''' as this could allow a bad-faith user to make undesirable changes without being spotted for some time.
== User groups automatically assigned to registered users ==
Each of the English Wikibooks' permissions, which are approved by an administrator or a bureaucrat, are listed and described here. The information is located at [[Special:ListGroupRights]].
=== User groups that are usually conferred automatically ===
==== <span class="anchor" id="New users"></span><span class="anchor" id="New"><span class="anchor" id="Registered"></span><span class="anchor" id="Registered users"><span class="anchor" id="user"></span>Registered users</span></span> ====
A '''registered user''' is a user who has signed up for an account and has logged in to a Wikimedia project. In addition to what an unregistered user can do, a newly registered user can set their [[Special:Preferences|preferences]], register pages for "watching", mark edits as minor, and create their own user page. However, they cannot edit semi-protected pages, move pages, and create pages in the File:, Template:, Help:, Transwiki:, and Subject: [[WB:NS|namespaces]].
==== <span class="anchor" id="Autoconfirmed and confirmed users"></span><span class="anchor" id="Autoconfirmed users"></span><span class="anchor" id="Autoconfirmed"></span><span class="anchor" id="autoconfirmed"></span><span class="anchor" id="confirmed"></span><span class="anchor" id="Confirmed"></span><span class="anchor" id="Confirmed users"></span>Confirmed and autoconfirmed accounts ====
{{shortcut|WB:AC}}
Some actions are restricted to user accounts that pass certain thresholds of age: users who meet these requirements are considered part of the pseudo-group "autoconfirmed users". Autoconfirmed status is checked every time a user performs an action and it is granted automatically by the software. Autoconfirmed status is granted to users who have registered for 4 days ''and'' have made at least 5 edits.
Autoconfirmed users can [[WB:MOVE|move pages]] and edit [[Help:Editing#Page protection|semi-protected]] pages, and are no longer required to enter a [[w:CAPTCHA|CAPTCHA]] for most events.
In some situations, it is necessary for accounts to be exempted from the customary confirmation period newly registered accounts are subject to. The <tt>'confirmed'</tt> group contains the same rights as the <tt>'autoconfirmed'</tt> group.
=== User groups that are typically requested at WB:RFP ===
The following user groups are typically requested at [[Wikibooks:Requests for permissions]].
==== <span class="anchor" id="Autoreviewed_users"></span><span class="anchor" id="Autoreviewed"></span><span class="anchor" id="Reviewers"></span>Autoreviewed users and reviewers ====
{{further|Wikibooks:Reviewers}}
'''Autoreviewed users''' have the ability to mark their own edits as being automatically reviewed and patrolled.
'''Reviewers''', on the other hand, can also [[WB:REVIEW|review pending changes]], use the [[WB:ROLLBACK|rollback]] tool to combat vandalism, and also use other abilities. These permissions are automatically assigned to administrators.
See [[Special:ListUsers/autoreview]] for the list of the {{NUMINGROUP:autoreview}} autoreviewed users on the English Wikibooks, as well as [[Special:ListUsers/editor]] for the list of the {{NUMINGROUP:editor}} reviewers.
==== <span class="anchor" id="Importers"></span><span class="anchor" id="Import uploaders"></span>Importers and import uploaders ====
{{further|Wikibooks:Importers}}
'''Importers''' can [[Help:Importing|import pages]] by using [[Special:Import]], which allows them to copy pages, and optionally their page histories, from a limited group of certain Wikimedia wikis to the English Wikibooks. They can also perform [[:mw:Help:Merge history|history merges]] by using [[Special:MergeHistory]], and optionally enable [[:mw:Help:Two-factor authentication|enable two-factor authentication]] (2FA).
The '''import uploader''' user group has the same rights as an importer, but also holds the <code>importupload</code> user right. This allows them to import pages using XML from any MediaWiki installations, including wikis not hosted by the WMF.
See [[Special:ListUsers/transwiki]] for the list of the {{NUMINGROUP:transwiki}} importers on the English Wikibooks. Currently, there are no import uploaders.
See also the [[Special:Log/import|import log]], [[Help:Importing]], and [[Wikibooks:Requests for import]].
==== <span class="anchor" id="Uploaders"></span>Uploaders ====
{{further|Wikibooks:Uploaders}}
'''Uploaders''' are able to upload files and images on the English Wikibooks by using [[Special:Upload]], and can also overwrite existing files. This permission is automatically assigned to administrators.
See [[Special:ListUsers/uploader]] for the list of the {{NUMINGROUP:uploader}} uploaders on the English Wikibooks.
==== <span class="anchor" id="Account creators"></span>Account creators ====
'''Account creators''' are not affected by the 6 account creation limit per day per IP, and can create accounts for other users without restriction. Users in this group can also override the anti-spoof checks on account creation. Users in this group can also override the anti-spoof checks on account creation. Additionally, account creators are able to create accounts with names that are otherwise blocked by the [[MediaWiki:Titleblacklist|title blacklist]]. This permission is automatically assigned to administrators and bureaucrats.
Currently, there are no account creators on the English Wikibooks.
==== <span class="anchor" id="ipblock-exempt"></span>IP block exempt ====
{{further|Wikibooks:IP block exemption}}
Users in this group are not affected by autoblocks, blocks of IP addresses and ranges that are made with the "Prevent logged-in users from editing" option enabled,<ref>This flag only grants the exempted user to ''edit'' behind the IP address. IP block exempt users are not able to create accounts while behind an IP address that is also blocked with the "Prevent account creation" option enabled.</ref> and by [[:w:Tor (anonymity network)|Tor blocks]]. This permission is automatically assigned to administrators and bots.
See [[Special:ListUsers/ipblock-exempt]] for the list of the {{NUMINGROUP:ipblock-exempt}} affected users.
==== <span class="anchor" id="Temporary account IP viewers"></span>Temporary account IP viewers ====
{{further|Wikibooks:Temporary account IP viewer}}
'''Temporary account IP viewers''' are permitted to view IP addresses used by temporary accounts, as well as able to access a full view of the [[:mw:Extension:IPInfo|IPInfo]] tool. This permission is automatically assigned to administrators.
Currently, there are no temporary account IP viewers on the English Wikibooks.
=== User groups that are assigned non-locally ===
==== <span class="anchor" id="Administrator"></span><span class="anchor" id="administrator"></span><span class="anchor" id="Admin"></span><span class="anchor" id="admin"></span><span class="anchor" id="Sysop"></span><span class="anchor" id="sysop"></span>Administrators ====
{{further|Wikibooks:Administrators}}
'''Administrators''', also referred as "admins" or "sysops", are Wikibookians who can perform certain special actions such as deleting pages, blocking users, and the ability to edit fully protected pages. Administrators can also grant the ''import uploader'', ''importer'', ''uploader'', ''pseudo-bot'', ''IP block exempt'', ''temporary account IP viewer'', ''reviewer'' and ''autoreviewed user'' user groups.
Administrators are not granted any additional authority; they must follow all [[Wikibooks:Policies and guidelines|policies]]. Administrators are not employees of the Wikimedia Foundation and should not be confused with [[:m:System administrators|system administrators]] ("sysadmins").
See [[Special:ListUsers/sysop]] for the list of the {{NUMINGROUP:sysop}} administrators on the English Wikibooks.
==== <span class="anchor" id="Bureaucrat"></span><span class="anchor" id="bureaucrat"></span><span class="anchor" id="Crat"></span>Bureaucrats ====
{{further|Wikibooks:Bureaucrats}}
'''Bureaucrats''' are administrators with extra tools responsible for judging community consensus in the granting of advanced access rights. They are able to grant the ''account creator'', ''administrator'', ''interface administrator'', ''bureaucrat'', ''bot'' and ''confirmed'' user groups.
Currently, there are no bureaucrats on the English Wikibooks.
==== <span class="anchor" id="CheckUser"></span>CheckUsers ====
{{further|Wikibooks:CheckUsers}}
'''CheckUsers''' have access to [[Special:CheckUser]], which allows them to view a list of IP addresses that have been used by an account, or a list of user accounts that have been used by a given IP address or range to edit the English Wikibooks. They also have access to the [[Special:CheckUserLog|CheckUser log]], which logs each time a CheckUser uses their tools to view any of the information listed. This permission is granted to ''very few'' users who are currently administrators, are over 18 years old and have signed the [[:m:Access to nonpublic personal data policy/Noticeboard|Wikimedia Foundation's confidentiality agreement for nonpublic information]].
See [[Special:ListUsers/checkuser]] for the list of {{NUMINGROUP:checkuser}} CheckUsers on the English Wikibooks.
==== <span class="anchor" id="Interface administrators"></span>Interface administrators ====
{{further|Wikibooks:Interface administrators}}
'''Interface administrators''' are users who can edit sitewide [[Cascading Style Sheets|CSS]], [[JavaScript|JS]], and [[JSON]] pages (pages such as [[MediaWiki:Common.js]] or [[MediaWiki:Vector.css]], or the gadget pages listed on [[Special:Gadgets]]), CSS/JS/JSON pages in another user's userspace, and all pages in the MediaWiki namespace. Because it provides the potential to send malicious CSS, JS, and JSON code to execute in other users' browsers, this right may only be granted to existing administrators with [[:m:Help:Two-factor authentication|two-factor authentication]] enabled on their accounts.
See [[Special:ListUsers/interface-admin]] for the list of {{NUMINGROUP:interface-admin}} interface administrators on the English Wikibooks.
==== <span class="anchor" id="Suppressors"></span><span class="anchor" id="Oversighters"></span><span class="anchor" id="Oversight"></span>Suppressors ====
{{further|Wikibooks:Oversight}}
'''Suppressors''', also known as '''oversighters''', have access to additional options on the page deletion, revision deletion, and block function pages in which they can hide logs or revisions from pages (partially or entirely) from all users, including administrators. They also have access to the [[Special:Log/suppress|suppression log]], where they can view actions made by other suppressors, as well as the content of the hidden revisions. This permission is granted to ''very few'' users who are currently administrators, are over 18 years old and have signed the [[:m:Access to nonpublic personal data policy/Noticeboard|Wikimedia Foundation's confidentiality agreement for nonpublic information]].
Currently, there are no suppressors on the English Wikibooks.
=== Other user groups ===
==== <span class="anchor" id="Bots"></span>Bots ====
{{further|Wikibooks:Bots}}
Accounts used by approved [[Wikibooks:Bots|bots]] to make pre-approved edits can be flagged as such. Bot accounts are automated or semi-automated, the nature of their edits is well defined, and they will be quickly blocked if their actions vary from their given tasks, so they require less scrutiny than human edits.
For this reason, contributions from accounts with the bot flag ({{mono|[[Wikibooks:Bots|bot]]}} user group) are not displayed in [[Special:RecentChanges|recent changes]] or [[Special:Watchlist|watchlists]] to users who have opted to hide bot edits. Minor edits made by bot accounts to user talk pages do not trigger the "you have new messages" banner. Bot accounts can query the [http://en.wikibooks.org/w/api.php API] in batches of 5,000 rather than 500.
See [[Special:ListUsers/bot]] for the list of {{NUMINGROUP:bot}} bots on the English Wikibooks.
==== <span class="anchor" id="Pseudo-bots"></span>Pseudo-bots ====
{{further|Wikibooks:Pseudo-bots}}
The '''pseudo-bot''' user group, also known as '''flooder''' or the '''flood flag''', is used by administrators to avoid flushing the [[Special:RecentChanges|recent changes]] feed when making repetitive actions.
== References ==
{{reflist}}
{{Wikibooks editor navigation}}
024w9l2b2xmn05sgk2bggc7d8q2fouv
4641580
4641579
2026-06-28T20:25:47Z
Codename Noreste
3441010
/* */ Adding a period.
4641580
wikitext
text/x-wiki
{{Useful|WB:UG|WB:RIGHTS}}
The following is a list of '''user groups''' on English Wikibooks, and as such are typically requested at [[Wikibooks:Requests for permissions]]. The full list of rights available to user groups is at [[Special:ListGroupRights]].
== User groups available to all users ==
==== <span class="anchor" id="Unregistered users"></span><span class="anchor" id="Unregistered"></span><span class="anchor" id="*"></span>Unregistered users ====
{{shortcut|WB:ANON|WB:UNREGISTERED}}
Users who do not log in are said to be '''unregistered users''', also referred to as '''anonymous users''' or ''anons''. These users may edit pages which are not protected or semi-protected; their edits will appear in [[Help:Tracking changes#Page history|page histories]]. They can also create new pages.
Unregistered users cannot move pages, upload media, or maintain a [[Help:Tracking changes#Watching pages|watchlist]]. They also are not able to select the option of '''minor edit''' as this could allow a bad-faith user to make undesirable changes without being spotted for some time.
== User groups automatically assigned to registered users ==
Each of the English Wikibooks' permissions, which are approved by an administrator or a bureaucrat, are listed and described here. The information is located at [[Special:ListGroupRights]].
=== User groups that are usually conferred automatically ===
==== <span class="anchor" id="New users"></span><span class="anchor" id="New"><span class="anchor" id="Registered"></span><span class="anchor" id="Registered users"><span class="anchor" id="user"></span>Registered users</span></span> ====
A '''registered user''' is a user who has signed up for an account and has logged in to a Wikimedia project. In addition to what an unregistered user can do, a newly registered user can set their [[Special:Preferences|preferences]], register pages for "watching", mark edits as minor, and create their own user page. However, they cannot edit semi-protected pages, move pages, and create pages in the File:, Template:, Help:, Transwiki:, and Subject: [[WB:NS|namespaces]].
==== <span class="anchor" id="Autoconfirmed and confirmed users"></span><span class="anchor" id="Autoconfirmed users"></span><span class="anchor" id="Autoconfirmed"></span><span class="anchor" id="autoconfirmed"></span><span class="anchor" id="confirmed"></span><span class="anchor" id="Confirmed"></span><span class="anchor" id="Confirmed users"></span>Confirmed and autoconfirmed accounts ====
{{shortcut|WB:AC}}
Some actions are restricted to user accounts that pass certain thresholds of age: users who meet these requirements are considered part of the pseudo-group "autoconfirmed users". Autoconfirmed status is checked every time a user performs an action and it is granted automatically by the software. Autoconfirmed status is granted to users who have registered for 4 days ''and'' have made at least 5 edits.
Autoconfirmed users can [[WB:MOVE|move pages]] and edit [[Help:Editing#Page protection|semi-protected]] pages, and are no longer required to enter a [[w:CAPTCHA|CAPTCHA]] for most events.
In some situations, it is necessary for accounts to be exempted from the customary confirmation period newly registered accounts are subject to. The <tt>'confirmed'</tt> group contains the same rights as the <tt>'autoconfirmed'</tt> group.
=== User groups that are typically requested at WB:RFP ===
The following user groups are typically requested at [[Wikibooks:Requests for permissions]].
==== <span class="anchor" id="Autoreviewed_users"></span><span class="anchor" id="Autoreviewed"></span><span class="anchor" id="Reviewers"></span>Autoreviewed users and reviewers ====
{{further|Wikibooks:Reviewers}}
'''Autoreviewed users''' have the ability to mark their own edits as being automatically reviewed and patrolled.
'''Reviewers''', on the other hand, can also [[WB:REVIEW|review pending changes]], use the [[WB:ROLLBACK|rollback]] tool to combat vandalism, and also use other abilities. These permissions are automatically assigned to administrators.
See [[Special:ListUsers/autoreview]] for the list of the {{NUMINGROUP:autoreview}} autoreviewed users on the English Wikibooks, as well as [[Special:ListUsers/editor]] for the list of the {{NUMINGROUP:editor}} reviewers.
==== <span class="anchor" id="Importers"></span><span class="anchor" id="Import uploaders"></span>Importers and import uploaders ====
{{further|Wikibooks:Importers}}
'''Importers''' can [[Help:Importing|import pages]] by using [[Special:Import]], which allows them to copy pages, and optionally their page histories, from a limited group of certain Wikimedia wikis to the English Wikibooks. They can also perform [[:mw:Help:Merge history|history merges]] by using [[Special:MergeHistory]], and optionally enable [[:mw:Help:Two-factor authentication|enable two-factor authentication]] (2FA).
The '''import uploader''' user group has the same rights as an importer, but also holds the <code>importupload</code> user right. This allows them to import pages using XML from any MediaWiki installations, including wikis not hosted by the WMF.
See [[Special:ListUsers/transwiki]] for the list of the {{NUMINGROUP:transwiki}} importers on the English Wikibooks. Currently, there are no import uploaders.
See also the [[Special:Log/import|import log]], [[Help:Importing]], and [[Wikibooks:Requests for import]].
==== <span class="anchor" id="Uploaders"></span>Uploaders ====
{{further|Wikibooks:Uploaders}}
'''Uploaders''' are able to upload files and images on the English Wikibooks by using [[Special:Upload]], and can also overwrite existing files. This permission is automatically assigned to administrators.
See [[Special:ListUsers/uploader]] for the list of the {{NUMINGROUP:uploader}} uploaders on the English Wikibooks.
==== <span class="anchor" id="Account creators"></span>Account creators ====
'''Account creators''' are not affected by the 6 account creation limit per day per IP, and can create accounts for other users without restriction. Users in this group can also override the anti-spoof checks on account creation. Users in this group can also override the anti-spoof checks on account creation. Additionally, account creators are able to create accounts with names that are otherwise blocked by the [[MediaWiki:Titleblacklist|title blacklist]]. This permission is automatically assigned to administrators and bureaucrats.
Currently, there are no account creators on the English Wikibooks.
==== <span class="anchor" id="ipblock-exempt"></span>IP block exempt ====
{{further|Wikibooks:IP block exemption}}
Users in this group are not affected by autoblocks, blocks of IP addresses and ranges that are made with the "Prevent logged-in users from editing" option enabled,<ref>This flag only grants the exempted user to ''edit'' behind the IP address. IP block exempt users are not able to create accounts while behind an IP address that is also blocked with the "Prevent account creation" option enabled.</ref> and by [[:w:Tor (anonymity network)|Tor blocks]]. This permission is automatically assigned to administrators and bots.
See [[Special:ListUsers/ipblock-exempt]] for the list of the {{NUMINGROUP:ipblock-exempt}} affected users.
==== <span class="anchor" id="Temporary account IP viewers"></span>Temporary account IP viewers ====
{{further|Wikibooks:Temporary account IP viewer}}
'''Temporary account IP viewers''' are permitted to view IP addresses used by temporary accounts, as well as able to access a full view of the [[:mw:Extension:IPInfo|IPInfo]] tool. This permission is automatically assigned to administrators.
Currently, there are no temporary account IP viewers on the English Wikibooks.
=== User groups that are assigned non-locally ===
==== <span class="anchor" id="Administrator"></span><span class="anchor" id="administrator"></span><span class="anchor" id="Admin"></span><span class="anchor" id="admin"></span><span class="anchor" id="Sysop"></span><span class="anchor" id="sysop"></span>Administrators ====
{{further|Wikibooks:Administrators}}
'''Administrators''', also referred as "admins" or "sysops", are Wikibookians who can perform certain special actions such as deleting pages, blocking users, and the ability to edit fully protected pages. Administrators can also grant the ''import uploader'', ''importer'', ''uploader'', ''pseudo-bot'', ''IP block exempt'', ''temporary account IP viewer'', ''reviewer'' and ''autoreviewed user'' user groups.
Administrators are not granted any additional authority; they must follow all [[Wikibooks:Policies and guidelines|policies]]. Administrators are not employees of the Wikimedia Foundation and should not be confused with [[:m:System administrators|system administrators]] ("sysadmins").
See [[Special:ListUsers/sysop]] for the list of the {{NUMINGROUP:sysop}} administrators on the English Wikibooks.
==== <span class="anchor" id="Bureaucrat"></span><span class="anchor" id="bureaucrat"></span><span class="anchor" id="Crat"></span>Bureaucrats ====
{{further|Wikibooks:Bureaucrats}}
'''Bureaucrats''' are administrators with extra tools responsible for judging community consensus in the granting of advanced access rights. They are able to grant the ''account creator'', ''administrator'', ''interface administrator'', ''bureaucrat'', ''bot'' and ''confirmed'' user groups.
Currently, there are no bureaucrats on the English Wikibooks.
==== <span class="anchor" id="CheckUser"></span>CheckUsers ====
{{further|Wikibooks:CheckUsers}}
'''CheckUsers''' have access to [[Special:CheckUser]], which allows them to view a list of IP addresses that have been used by an account, or a list of user accounts that have been used by a given IP address or range to edit the English Wikibooks. They also have access to the [[Special:CheckUserLog|CheckUser log]], which logs each time a CheckUser uses their tools to view any of the information listed. This permission is granted to ''very few'' users who are currently administrators, are over 18 years old and have signed the [[:m:Access to nonpublic personal data policy/Noticeboard|Wikimedia Foundation's confidentiality agreement for nonpublic information]].
See [[Special:ListUsers/checkuser]] for the list of {{NUMINGROUP:checkuser}} CheckUsers on the English Wikibooks.
==== <span class="anchor" id="Interface administrators"></span>Interface administrators ====
{{further|Wikibooks:Interface administrators}}
'''Interface administrators''' are users who can edit sitewide [[Cascading Style Sheets|CSS]], [[JavaScript|JS]], and [[JSON]] pages (pages such as [[MediaWiki:Common.js]] or [[MediaWiki:Vector.css]], or the gadget pages listed on [[Special:Gadgets]]), CSS/JS/JSON pages in another user's userspace, and all pages in the MediaWiki namespace. Because it provides the potential to send malicious CSS, JS, and JSON code to execute in other users' browsers, this right may only be granted to existing administrators with [[:m:Help:Two-factor authentication|two-factor authentication]] enabled on their accounts.
See [[Special:ListUsers/interface-admin]] for the list of {{NUMINGROUP:interface-admin}} interface administrators on the English Wikibooks.
==== <span class="anchor" id="Suppressors"></span><span class="anchor" id="Oversighters"></span><span class="anchor" id="Oversight"></span>Suppressors ====
{{further|Wikibooks:Oversight}}
'''Suppressors''', also known as '''oversighters''', have access to additional options on the page deletion, revision deletion, and block function pages in which they can hide logs or revisions from pages (partially or entirely) from all users, including administrators. They also have access to the [[Special:Log/suppress|suppression log]], where they can view actions made by other suppressors, as well as the content of the hidden revisions. This permission is granted to ''very few'' users who are currently administrators, are over 18 years old and have signed the [[:m:Access to nonpublic personal data policy/Noticeboard|Wikimedia Foundation's confidentiality agreement for nonpublic information]].
Currently, there are no suppressors on the English Wikibooks.
=== Other user groups ===
==== <span class="anchor" id="Bots"></span>Bots ====
{{further|Wikibooks:Bots}}
Accounts used by approved [[Wikibooks:Bots|bots]] to make pre-approved edits can be flagged as such. Bot accounts are automated or semi-automated, the nature of their edits is well defined, and they will be quickly blocked if their actions vary from their given tasks, so they require less scrutiny than human edits.
For this reason, contributions from accounts with the bot flag ({{mono|[[Wikibooks:Bots|bot]]}} user group) are not displayed in [[Special:RecentChanges|recent changes]] or [[Special:Watchlist|watchlists]] to users who have opted to hide bot edits. Minor edits made by bot accounts to user talk pages do not trigger the "you have new messages" banner. Bot accounts can query the [http://en.wikibooks.org/w/api.php API] in batches of 5,000 rather than 500.
See [[Special:ListUsers/bot]] for the list of {{NUMINGROUP:bot}} bots on the English Wikibooks.
==== <span class="anchor" id="Pseudo-bots"></span>Pseudo-bots ====
{{further|Wikibooks:Pseudo-bots}}
The '''pseudo-bot''' user group, also known as '''flooder''' or the '''flood flag''', is used by administrators to avoid flushing the [[Special:RecentChanges|recent changes]] feed when making repetitive actions.
== References ==
{{reflist}}
{{Wikibooks editor navigation}}
eeppdlo4unbbu097spwo7vq75vd093c
Chinese History
0
156173
4641485
4478914
2026-06-28T12:46:56Z
一隻北極熊
3609960
/* Sources */
4641485
wikitext
text/x-wiki
__NOTOC__
<div style="text-align:center; margin-top:2em;">Welcome to the Wikibook of
<div style="font-size:4em;margin:.5em">'''Chinese History'''</div>
</div>
This book will focus extensively on the history of China, the transformation of government and development of cultures in China, and the influences on other places by China. It requires a great deal of reading and researching, but feel free to contribute if you have knowledge on Chinese history and are fluent in English!
==Brief Introduction==
*[[{{BOOKNAME}}/Geography|Geography]]
*[[{{BOOKNAME}}/Government|Government]]
*[[{{BOOKNAME}}/Religion|Religion]]
*[[{{BOOKNAME}}/Contributions|Contributions]]
*[[{{BOOKNAME}}/Others|Others]]
== The History in Chronological Order ==
[[File:Divisions of Chinese history.jpg|thumb|Chart showing divisions of Chinese History.]]
=== Prehistoric China ===
1.1 [[{{BOOKNAME}}/Paleolithic sites|Paleolithic sites]]
1.2 Neolithic cultures
1.3 Three Sovereigns and Five Emperors
=== Ancient China ===
2.1 Xia Dynasty
2.2 Shang Dynasty
2.3 Zhou Dynasty
:2.3.1 Western Zhou
:2.3.2 Eastern Zhou
::2.3.2.1 Spring and Autumn
::2.3.2.2 Warring States
=== Imperial China ===
3.1 Qin Dynasty
3.2 Han Dynasty
:3.2.1 Western Han
:3.2.2 Xin
:3.2.3 Eastern Han
3.3 Three Kingdoms
3.4 Jin Dynasty
:3.4.1 Western Jin
:3.4.2 Eastern Jin
3.5 Sixteen Kingdoms
3.6 Northern and Southern Dynasties
3.7 Sui Dynasty
3.8 Tang Dynasty
3.9 Five Dynasties and Ten Kingdoms
3.10 Song Dynasty, Liao, Jin, and Western Xia
:3.10.1 Northern Song
:3.10.2 Southern Song
:3.10.3 Liao
:3.10.4 Western Liao
:3.10.5 Western Xia
:3.10.6 Jin
3.11 Yuan Dynasty
3.12 Ming Dynasty
3.13 Qing Dynasty
:3.13.1 Late Qing Wars and Reforms
=== The Republic of China ===
4.1 Xinhai Revolution
4.2 Beiyang Government
:4.2.1 Warlord Era
:4.2.2 Northern Expedition
4.3 Nationalist Government
:4.3.1 First Chinese Civil War
:4.3.2 The Second Sino-Japanese War
:4.3.3 Second Chinese Civil War
4.4 Taiwan
:4.4.1 Authoritarianism Period
:4.4.2 Democratic Transformation
=== Communist China ===
5.1 The Rise of The Chinese Communist Party
5.2 People's Republic of China
:5.2.1 Mao Era
:5.2.2 Deng Era
:5.2.3 Jiang Era
:5.2.4 Hu Era
:5.2.5 Xi Era
== The History from Different Perspectives ==
=== Culture ===
6.1 Philosophy
6.2 Religion
6.3 Music and Arts
6.4 Architecture
=== Science ===
7.1 Four Great Inventions
7.2 Scientific Revolutions
7.3 Mathematics
=== Literature ===
8.1 Historical Documents
8.2 Poetry, Ci, and Qu
8.3 Classical Works
=== Economy ===
9.1 Imperial Economy
9.2 Trade
9.3 Modern Economy
=== Government and Reforms ===
10.1 Centralized Monarchy
10.2 Authoritarian Regime
10.3 Reforms
=== Geography ===
11.1 Geography
==Sources==
*"Ancient China." [http://www.sjsu.edu/faculty/watkins/ancientchina.htm Link].
*"Ancient China: Environment." Ancient China. [http://www.ancientchina.co.uk/geography/home_set.html Link].
*"Ancient China: Religon." [http://www.historyforkids.org/learn/china/religon/index.html Link].
*"Ancient China." Wikipedia. [[w:Chinese architecture|Chinese architecture]].
*Carr, Karen. "Ancient China: Environment." History for Kids. 20 Feb. 2008 [http://www.historyforkids.org/learn/china/environment/index.html Link].
*"China Religon." [http://blue.butler.edu/~jfmcgrat/china/religon1.html Link].
*"China." World Book Encyclopedia.
*Deedrick, Tami. Ancient Civilizations: Ancient China. Austin, New York: Raintree Steck-Vaughn Publisher, 2001.
*"Geography of Ancient China." [http://refrence.allrefer.com/country-guide-study/china/china343.html Link].
*"Geography of Ancient China." Wikipedia. [[w:Geography of China|Geography of China]].
*Landau, Elaine. Ancient China with Elaine Landau. New York City: Alfred a. Knoph, 2003.
*Shuter, Jane. Ancient China. Chicago: Heinemann Library, 2006.
==Related Books==
[[History of China]]
{{alphabetical|A}}
{{shelves|Asian history}}
{{status|25%}}
rngdnbnxxk3e1koxc5esd1k2c8d32rh
4641486
4641485
2026-06-28T12:47:30Z
一隻北極熊
3609960
/* Related Books */
4641486
wikitext
text/x-wiki
__NOTOC__
<div style="text-align:center; margin-top:2em;">Welcome to the Wikibook of
<div style="font-size:4em;margin:.5em">'''Chinese History'''</div>
</div>
This book will focus extensively on the history of China, the transformation of government and development of cultures in China, and the influences on other places by China. It requires a great deal of reading and researching, but feel free to contribute if you have knowledge on Chinese history and are fluent in English!
==Brief Introduction==
*[[{{BOOKNAME}}/Geography|Geography]]
*[[{{BOOKNAME}}/Government|Government]]
*[[{{BOOKNAME}}/Religion|Religion]]
*[[{{BOOKNAME}}/Contributions|Contributions]]
*[[{{BOOKNAME}}/Others|Others]]
== The History in Chronological Order ==
[[File:Divisions of Chinese history.jpg|thumb|Chart showing divisions of Chinese History.]]
=== Prehistoric China ===
1.1 [[{{BOOKNAME}}/Paleolithic sites|Paleolithic sites]]
1.2 Neolithic cultures
1.3 Three Sovereigns and Five Emperors
=== Ancient China ===
2.1 Xia Dynasty
2.2 Shang Dynasty
2.3 Zhou Dynasty
:2.3.1 Western Zhou
:2.3.2 Eastern Zhou
::2.3.2.1 Spring and Autumn
::2.3.2.2 Warring States
=== Imperial China ===
3.1 Qin Dynasty
3.2 Han Dynasty
:3.2.1 Western Han
:3.2.2 Xin
:3.2.3 Eastern Han
3.3 Three Kingdoms
3.4 Jin Dynasty
:3.4.1 Western Jin
:3.4.2 Eastern Jin
3.5 Sixteen Kingdoms
3.6 Northern and Southern Dynasties
3.7 Sui Dynasty
3.8 Tang Dynasty
3.9 Five Dynasties and Ten Kingdoms
3.10 Song Dynasty, Liao, Jin, and Western Xia
:3.10.1 Northern Song
:3.10.2 Southern Song
:3.10.3 Liao
:3.10.4 Western Liao
:3.10.5 Western Xia
:3.10.6 Jin
3.11 Yuan Dynasty
3.12 Ming Dynasty
3.13 Qing Dynasty
:3.13.1 Late Qing Wars and Reforms
=== The Republic of China ===
4.1 Xinhai Revolution
4.2 Beiyang Government
:4.2.1 Warlord Era
:4.2.2 Northern Expedition
4.3 Nationalist Government
:4.3.1 First Chinese Civil War
:4.3.2 The Second Sino-Japanese War
:4.3.3 Second Chinese Civil War
4.4 Taiwan
:4.4.1 Authoritarianism Period
:4.4.2 Democratic Transformation
=== Communist China ===
5.1 The Rise of The Chinese Communist Party
5.2 People's Republic of China
:5.2.1 Mao Era
:5.2.2 Deng Era
:5.2.3 Jiang Era
:5.2.4 Hu Era
:5.2.5 Xi Era
== The History from Different Perspectives ==
=== Culture ===
6.1 Philosophy
6.2 Religion
6.3 Music and Arts
6.4 Architecture
=== Science ===
7.1 Four Great Inventions
7.2 Scientific Revolutions
7.3 Mathematics
=== Literature ===
8.1 Historical Documents
8.2 Poetry, Ci, and Qu
8.3 Classical Works
=== Economy ===
9.1 Imperial Economy
9.2 Trade
9.3 Modern Economy
=== Government and Reforms ===
10.1 Centralized Monarchy
10.2 Authoritarian Regime
10.3 Reforms
=== Geography ===
11.1 Geography
==Sources==
*"Ancient China." [http://www.sjsu.edu/faculty/watkins/ancientchina.htm Link].
*"Ancient China: Environment." Ancient China. [http://www.ancientchina.co.uk/geography/home_set.html Link].
*"Ancient China: Religon." [http://www.historyforkids.org/learn/china/religon/index.html Link].
*"Ancient China." Wikipedia. [[w:Chinese architecture|Chinese architecture]].
*Carr, Karen. "Ancient China: Environment." History for Kids. 20 Feb. 2008 [http://www.historyforkids.org/learn/china/environment/index.html Link].
*"China Religon." [http://blue.butler.edu/~jfmcgrat/china/religon1.html Link].
*"China." World Book Encyclopedia.
*Deedrick, Tami. Ancient Civilizations: Ancient China. Austin, New York: Raintree Steck-Vaughn Publisher, 2001.
*"Geography of Ancient China." [http://refrence.allrefer.com/country-guide-study/china/china343.html Link].
*"Geography of Ancient China." Wikipedia. [[w:Geography of China|Geography of China]].
*Landau, Elaine. Ancient China with Elaine Landau. New York City: Alfred a. Knoph, 2003.
*Shuter, Jane. Ancient China. Chicago: Heinemann Library, 2006.
==Related Books==
*[[History of China]]
{{alphabetical|A}}
{{shelves|Asian history}}
{{status|25%}}
8homl0jukvt3n3g16qwfyjccd6bnvra
Structural Biochemistry
0
171033
4641558
4641456
2026-06-28T17:09:46Z
Dirk Hünniger
343292
4641558
wikitext
text/x-wiki
__NOTOC__
{{DISPLAYTITLE:<span style="display:block;text-align:center;font-size:100%;font-style:italic;line-height:1em;">Structural Biochemistry</span>}}
Structural biochemistry is a branch of the life sciences, specially biochemistry, that combines biology, physics, and chemistry to study living organisms and to summarize some mutual physicochemical underlying principles that all forms of life share. It is also referred to more generally as structural biology. Structural biochemists aim to describe, in atomic precision level, molecular terms of the structures, mechanisms, and chemical processes shared by all metabolism of all organisms, providing organizing principles that underlie life in all its diverse forms.
<center>[[Image:EIF4E-interaction with cap analogue.png|500x300px|Depiction of interaction between cap analogue molecule and eIF4E protein.]]</center>{{clear}}
{{Book Search|prefix=Structural Biochemistry}}
{{print version}}
{{PDF version|Structural Biochemistry_Volume_2|PDF Version of Volume 2}}
{{PDF version|Structural Biochemistry_Volume_3|PDF Version of Volume 3}}
{{PDF version|Structural Biochemistry_Volume_4|PDF Version of Volume 4}}
==[[/Relations of Structural Biochemistry with other Sciences/]]==
===[[/Physics/]]===
# [[/Thermodynamics/]]
## [[/Zeroth Law/]]
## [[/First law/]]
## [[/Second law/]]
### [[/Carnot Cycle/|Thermodynamic Cycles]]
## [[/Third law/]]
## [[/Internal Energy/]]
## [[/Entropy/]]
## [[/Enthalpy/]]
## [[/Heat capacity/]]
## [[/Free energy/]]
## [[/Material Equilibrium/]]
## [[/Phase Diagrams/]]
## [[/Phase Equilibria/]]
## [[/Endergonic reaction/]]
## [[/Exergonic reaction/]]
## [[/Molecular Thermodynamics/]]
## [[/Thermodynamic Equilibrium/]]
## [[/Ideal Gas/]]
## [[/Equation for Process Calculations for Ideal Gases/]]
## [[/Irreversible Process/]]
## [[/Application of the Virial Equations/]]
# [[/Bioenergetics/]]
# [[/Energy coupling in chemical reactions/]]
# [[/Metabolism/]]
## [[/Anabolism/]]
## [[/Catabolism/]]
# [[/Biophysics- Single Molecule techniques/]]
===[[/Chemistry/]]===
#[[/Chemical Bonding/]]
##[[/Chemical Bonding/Covalent bonds|Covalent Bonds]]
##[[/Chemical Bonding/Noncovalent bonds|Noncovalent Bonds]]
##[[/Chemical Bonding/Hydrogen bonds|Hydrogen bonds]]
##[[/Chemical Bonding/Hydrophobic interaction|Hydrophobic Interaction]]
##[[/Chemical Bonding/Van der Waals interaction|Van der Waals Interaction]]
##[[/Chemical Bonding/Dipole interaction|Dipole Interaction]]
##[[/Chemical Bonding/Ionic interaction|Ionic Interaction]]
##[[/Chemical Bonding/ Disulfide bonds|Disulfide Bonds]]
###[[/Chemical Bonding/ Disulfide bonds/Multiple Ways to make Disulfides|Multiple ways to make Disulfides]]
##[[/Chemical Bonding/ Electronic Structure Theories|Electronic Structure Theories]]
#[[/Biochemical Natural Selection/]]
##[[/Chemical Bonding/ Electronic Structure Theories|Electronic Structure Theories]]
#[[/Organic Chemistry/]]
##[[/Organic Chemistry/Organic Functional Group|Organic Functional Groups]]
###[[/Organic Chemistry/Organic Functional Group/Hydroxyl|Hydroxyl]]
###[[/Organic Chemistry/Organic Functional Group/Carbonyl|Carbonyl]]
###[[/Organic Chemistry/Organic Functional Group/Carboxyl|Carboxyl]]
###[[/Organic Chemistry/Organic Functional Group/Amino|Amino]]
###[[/Organic Chemistry/Organic Functional Group/Amide|Amide]]
###[[/Organic Chemistry/Organic Functional Group/Sulfhydryl|Sulfhydryl]]
###[[/Organic Chemistry/Organic Functional Group/Phosphate|Phosphate]]
##[[/Organic Chemistry/Organic Synthesis|Organic Synthesis]]
##[[/Organic Chemistry/Types of Macromolecules|Types of Macromolecules]]
###[[/Organic Chemistry/Carbohydrates|Carbohydrates]]
###[[/Organic Chemistry/Nucleic Acids (DNA)|Nucleic Acids]]
###[[/Organic Chemistry/Lipids|Lipids]]
###[[/Organic Chemistry/Proteins|Proteins]]
##[[/Organic Chemistry/Reagents|Reagents]]
##[[/Organic Chemistry/Mechanisms of Organic Molecules|Mechanisms of Organic Molecules]]
##[[/Organic Chemistry/Stereochemistry|Stereochemistry of Organic Molecules]]
##[[/Chemistry of important organic molecules in Biochemistry/|Chemistry of Important Organic Molecules in Biochemistry]]
###[[/Chemistry of important organic molecules in Biochemistry/Vitamins and Cofactors|Vitamins and Cofactors]]
###[[/Chemistry of important organic molecules in Biochemistry/Vitamin D|Vitamin D]]
###[[/Chemistry of important organic molecules in Biochemistry/Vitamin K|Vitamin K]]
###[[/Chemistry of important organic molecules in Biochemistry/Vitamin C|Vitamin C]]
###[[/Chemistry of important organic molecules in Biochemistry/Vitamin A|Vitamin A]]
###[[/Chemistry of important organic molecules in Biochemistry/Vitamin E|Vitamin E]]
###[[/Chemistry of important organic molecules in Biochemistry/Vitamin B|Vitamin B]]
####[[/Chemistry of important organic molecules in Biochemistry/Vitamin B12|Vitamin B12]]
####[[/Chemistry of important organic molecules in Biochemistry/Vitamin B6|Vitamin B6]]
##[[/Organic Chemistry/Important Organic Reactions in Biochemistry|Important Organic Reactions in Biochemistry]]
###[[/Organic Chemistry/Important Organic Reactions in Biochemistry/Peptide Bonding|Peptide Bonding]]
##[[/Organic Chemistry/Techniques in Organic Chemistry|Techniques in Organic Chemistry]]
###[[/Organic Chemistry/Methods of Separation and Isolation|Methods of Separation and Isolation]]
###[[/Organic Chemistry/Methods of Purification|Methods of Purification]]
###[[/Organic Chemistry/Methods of Identification|Methods of Identification]]
###[[/Organic Chemistry/Method of Combustion Analysis|Method of Combustion Analysis]]
###[[/Organic Chemistry/Method of Fischer Esterification|Fischer Esterification]]
###[[/Organic Chemistry/Method of Trans Esterification|Trans Esterification]]
##[[/Organic Chemistry/Organic Chemistry Terms|Organic Chemistry Terms]]
##[[/Organic Chemistry/Synthesis|Synthesis]]
##[[/Organometallic Chemistry/]]
###[[/Bioorganometallic Chemistry/]]
##[[/Degree of Unsaturation/]]
##[[/Acid-Base Chemistry/]]
#[[/Inorganic Chemistry/]]
##[[/Metals/]]
###[[/Alkali Metals/]]
###[[/Alkali Earth metals/|Alkali Earth Metals]]
###[[/Transition Metals/]]
###[[/Poor Metals/]]
###[[/Rare Earth Metals/]]
###[[/Biological Roles of Metal Ions/]]
###[[/Oxidation states/]]
###[[/Copper Metallochaperones/]]
###[[/Bioremediation of Metals/]]
##[[/Inorganic Chemistry/Semimetals|Metalloids/Semimetals]]
###[[/Inorganic Chemistry/Semimetals|Introduction of porous Silicon]]
###[[/Carbon Nanomaterials/]]
##[[/Nonmetals/]]
###[[/Inorganic Chemistry/Nonmetals/Halogens|Halogens]]
###[[/Noble Gases/]]
##[[/Linear Combination of Atomic Orbitals/]]
##[[/Molecular Orbitals/]]
##[[/How to Construct Molecular Orbital Diagram/]]
##[[/Reduction Formula and Projection Operator/]]
#[[/Point Groups/]]
#[[/Character Table/]]
#[[/SALC/]]
#[[/Chemical Reactions/]]
##[[/Rate Laws/]]
##[[/Kinetic and Thermodynamic Control/]]
##[[/Reaction types/]]
#[[/Molecular Geometry/]]
#[[/Periodic trends/]]
##[[/Atomic Radius/]]
##[[/Electron Affinity/]]
##[[/Electronegativity/]]
##[[/Ionization Energy/]]
##[[/Metallic Behavior/]]
##[[/Melting Point/]]
#[[/Medicinal Chemistry/]]
#[[/Cystalline solid state/]]
##[[/Formulas and structures/]]
#[[/General Chemistry/]]
##[[/Significant Figures/]]
##[[/Matter/]]
===[[/Biological Bases/|Biology]] ===
#[[/Properties of Living Organisms/]]
#[[/Retinoid/]]
====[[/Evolutionary Bases/|Evolution]]====
#[[/History of the Earth/]]
# [[/RNA World Hypothesis|RNA World Hypothesis]]
#[[/Evolution in the Laboratory/]]
#[[/Evolution of Humans/]]
#[[/Evolution of Populations/]]
#[[/The Oparin-Haldane Hypothesis/]]
#[[/Molecular Evolution/]]
# [[/Three Domains of Life/]]
##[[/Three Domains of Life/Archaea|Archaea]]
###[[/Three Domains of Life/Archaea/SAMPylation Protein in Archaea|SAMPylation Protein in Archaea]]
##[[/Three Domains of Life/Bacteria|Bacteria]]
##[[/Three Domains of Life/Eukarya|Eukarya]]
###[[/Three Domains of Life/Eukarya/Community Ecology|Community Ecology]]
# [[/The Endosymbiotic Theory/]]
# [[/The Evolution of Membranes/]]
# [[/Natural Selection of Aluminum and Silicon/]]
# [[/Speciation/]]
# [[/Gene Flow/]]
# [[/Organismic and Evolutionary Biology/]]
#[[/Hardy-Weinberg Principle/]]
====[[/Cellular Bases/|The Cell]]====
# [[/Cell Organelles|Cell Organelles and Structural Biochemistry]]
## [[/Cell Organelles/Nucleus|Nucleus]]
##[[/Cell Organelles/Nucleolus|Nucleolus]]
##[[/Cell Organelles/Ribosome|Ribosome]]
###[[/Cell Organelles/Ribosome/Ribosome Synthesis|Ribosome Synthesis]]
###[[/Cell Organelles/Ribosome/Maturation|Maturation]]
###[[/Cell Organelles/Ribosome/RNP|RNP]]
##[[/Cell Organelles/Chloroplast|Chloroplast]]
##[[/Cell Organelles/Proteins|Proteins]]
##[[/Cell Organelles/Endoplasmic Reticulum|Endoplasmic Reticulum]]
###[[/Cell Organelles/Endoplasmic Reticulum/ER Stress & Type 2 Diabetes|ER Stress & Type 2 Diabetes]]
##[[/Cell Organelles/Golgi Apparatus|Golgi Apparatus]]
##[[/Cell Organelles/Mitochondria|Mitochondria]]
###[[/Cell Organelles/Mitochondria/Cardiolipin and the Mitochondria|Cardiolipin and the Mitochondria]]
##[[/Cell Organelles/Centrioles|Centrioles]]
##[[/Cell Organelles/Cytosol|Cytosol]]
##[[/Cell Organelles/Lysosome|Lysosome]]
##[[/Cell Organelles/Peroxisome|Peroxisome]]
##[[/Cell Organelles/Cytoskeleton|Cytoskeleton]]
##[[/Functional Categories of Eukaryotic Organelles/]]
##[[/Cell Organelles/Plant Cell|Plant Cell]]
###[[/Cell Organelles/Plant Cell/Heat Stress Response|Heat Stress Response]]
### [[/Cell Organelles/Plant Cell/Cellulosomes|Cellulosomes]]
##[[/Cell Organelles/Animal Cell|Animal Cell]]
###[[/Cell Organelles/Animal Cell/Membrane Contact Site|Membrane Contact Site]]
##[[/Imaging cellular architecture with X-rays/]]
##[[/Fluorescence/]]
##[[/Cell Aging/]]
##[[/Cell Adhesion/]]
#[[/Prokaryotes and Eukaryotes/]]
##[[/CRISPR defense system (Prokaryotes)/]]
##[[/Control of Gene Expression in Prokaryotes/]]
##[[/Control of Gene Expression in Eukaryotes/]]
##[[/Eukaryotic Alternative Splicing/]]
##[[/Metal Levels in Eukaryotes/]]
#[[/Stem Cells/]]
##[[/Embryonic Stem Cells/]]
##[[/Adult Stem Cells/]]
#[[/Cells Transforming Energy/]]
## [[/Metabolism Coupled Reactions/]]
##[[/ATP/]]
##[[/Acetyl-CoA/]]
##[[/Glycolysis and Gluconeogenesis/]]
### [[/Anaerobic Respiration (Fermentation)/]]
### [[/Aerobic Respiration/]]
### [[/Pyruvate Dehydrogenase Complex/]]
### [[/Krebs Cycle (Citric Acid cycle)/]]
### [[/Oxidative Phosphorylation Cycle (Electron Transport Chain cycle)/]]
### [[/Gluconeogenesis/]]
### [[/Phosphofructokinase-1/]]
#### [[/Micro-purification/]]
##[[/Light Reaction/]]
##[[/Calvin Cycle/]]
##[[/The Pentose Phosphate Pathway/]]
#[[/Control Systems/]]
##[[/Cell Signaling Pathways/Nervous System|Nervous System]]
###[[/Parkinson's Disease/]]
##[[/Cell Signaling Pathways/Circulatory System|Circulatory System]]
##[[/Cell Signaling Pathways/Excretory System|Excretory System]]
##[[/Cell Signaling Pathways/Respiratory System|Respiratory System]]
### [[/Asthma/Asthma symptoms/]]
##[[/Cell Signaling Pathways/Digestive System|Digestive System]]
### [[/Lactose Intolerance/]]
### [[/Crohn's Disease/]]
### [[/Cirrhosis/]]
##[[/Cell Signaling Pathways/Muscular System|Muscular System]]
##[[/Cell Signaling Pathways/Endocrine System|Endocrine System]]
###[[/Ovarian Cancer/]]
###[[/Graves Disease/]]
###[[/Addison's Disease/]]
##[[/Cell Signaling Pathways/Sensory System|Sensory System]]
### [[/Biochemical Pathways of Vision/]]
##[[/Cell Signaling Pathways/Immune System|Immune System]]
##[[/Cell Signaling Pathways/Integumentary System|Integumentary System]]
##[[/Cell Signaling Pathways/Reproductive System|Reproductive System]]
#[[/Cell Signaling Pathways/]]
##[[/Cell Signaling Pathways/Juxtacrine Signaling|Juxtacrine Signaling]]
##[[/Cell Signaling Pathways/Paracrine Signaling|Paracrine Signaling]]
##[[/Cell Signaling Pathways/Endocrine Signaling|Endocrine Signaling]]
##[[/Cell Signaling Pathways/G-Proteins and G-Protein Coupled Receptors|G-Proteins and G-Protein Coupled Receptors]]
##[[/Cell Signaling Pathways/Adenylate Cyclase and cAMP Signaling|Adenylate Cyclase and cAMP Signaling]]
##[[/Cell Signaling Pathways/Phosphoinositol Signaling|Phosphoinositol Signaling]]
##[[/Cell Signaling Pathways/Calcium Signaling|Calcium Signaling]]
##[[/Cell Signaling Pathways/Protein Kinases Signaling Cascades|Protein Kinases Signaling Cascades]]
##[[/Cell Signaling Pathways/Receptor Tyrosine Kinases|Receptor Tyrosine Kinases]]
##[[/Cell Signaling Pathways/Kinases Inhibitors|Kinases Inhibitors]]
###[[/MPS1 protein kinase inhibitor development/]]
##[[/Cell Signaling Pathways/Insulin Signaling|Insulin Signaling]]
##[[/Cell Signaling Pathways/Epidermal Growth Factor Signaling|Epidermal Growth Factor Signaling]]
##[[/Cell Signaling Pathways/RAS|RAS]]
##[[/Cell Signaling Pathways/ROS|ROS]]
##[[/Cell Signaling Pathways/Problems in Signaling that cause Cancer|Problems in Signaling that cause Cancer]]
##[[/Cell Signaling Pathways/Transforming Growth Factor Beta|Transforming Growth Factor Beta]]
##[[/Cell Signaling Pathways/Hormonal Signaling|Hormonal Signaling]]
##[[/Cell Signaling Pathways/Apoptosis|Apoptosis]]
##[[/Cell Signaling Pathways/RAGE: Pattern Recognition Receptor|RAGE: Pattern Recognition Receptor]]
##[[/Cell Signaling Pathways/Mobile Zinc and Nitric Oxide|Mobile Zinc and Nitric Oxide]]
##[[/Nitric Oxide/]]
##[[/Cell Signaling Pathways/Heparan Sulfate|Heparan Sulfate]]
##[[/Cell Signaling Pathways/Skeletal Muscle Remodeling|Skeletal Muscle Remodeling]]
##[[/Cell Signaling Pathways/Phagoptosis|Phagoptosis]]
##[[/Cell Signaling Pathways/Necrosis|Necrosis]]
##[[/Cell Signaling Pathways/Noise in Signaling|Noise in Signaling]]
##[[/Cell Signaling Pathways/Hippo Signaling Pathway|Hippo Signaling]]
##[[/Cell Signaling Pathways/cJun-NH2 Terminal Kinase|JNK Signaling]]
##[[/Cell Signaling Pathways/Immune Signaling|Immune Signaling]]
###[[/RIG-I-like Receptors (RLR)/]]
###[[/NOD-like Receptors (NLR)/]]
###[[/IL23R/]]
##[[/Cell Signaling Pathways/Apoptosis-Inducing Factor|Apoptosis-Inducing Factor]]
##[[/Cell Signaling Pathways/Adipogenesis: From Stem Cell to Adipocyte|Adipogenesis: From Stem Cell to Adipocyte]]
##[[/Cell Signaling Pathways/Nitric Oxide and CGMP Response|Nitric Oxide and CGMP Response]]
#[[/Secretins/]]
#[[/Microscopy/]]
#[[/Endocytosis/]]
##[[/Actin Assembly during Endocytosis/]]
#[[/Virus Entry by Endocytosis/]]
#[[/Mitotic Spindles/]]
#[[/Pili/]]
##[[/Type IV Pili/]]
#[[/Flagella/]]
#[[/Aging and Metabolic Control Analysis/]]
#[[/Short Linear Motifs and Viral Infection/]]
#[[/Phagocytosis/]]
#[[/Pinocytosis/]]
#[[/Cytokine Receptors/]]
#[[/Ras-ERK and PI3K-mTOR pathways/]]
====[[/Genetic Bases/|Genetics]]====
#[[/The Genetics of Bacteria/]]
#[[/Properties of Mutant Alleles/]]
#[[/Foundation of Genetics/]]
#[[/Genetics terms/]]
#[[/Inheritance Patterns/]]
#[[/Chromosomes/]]
#[[/Epigenomics/]]
##[[/Epigenome reader/]]
#[[/Mitosis/]]
#[[/Meiosis/]]
#[[/Homeobox Genes/]]
#[[/How can you know if Genes are "on" or "off" in a cell?/]]
#[[/Genetic Variants/]]
#[[/Structural Variation/]]
====[[/Nucleic Acid/Biology of Cancer|Biology of Cancer]]====
# [[/Nucleic Acid/Biology of Cancer/Defective Repair of DNA|Defective Repair of DNA]]
# [[/Classifications of Cancer/]]
## [[/Carcinoma/]]
## [[/Sarcoma/]]
## [[/Lymphoma/]]
## [[/Leukemia/]]
## [[/Germ Cell Tumor/]]
## [[/Blastoma/]]
# [[/Nucleic Acid/Biology of Cancer/Mutagenic Action on Bacteria|Mutagenesis]]
## [[/Nucleic Acid/Biology of Cancer/Mutagenic Action on Bacteria/Ames test|Ames test]]
# [[/Tumor suppressor genes/]]
##[[/PTEN/]]
## [[/p53/]]
## [[/P63|p63]]
## [[/p73/]]
##[[/sequestosome-1/]]
##[[/Retinoblastoma/]]
## [[/p62/]]
##[[/Brooke-Spiegler syndrome/]]
#[[/Glutamine Addiction in Cancer/]]
#[[/Ligand-Binding Site and Glutamate Receptor Trafficking/]]
# [[Structural Biochemistry/Proto-oncogene|Proto-oncogenes]]
===[[/Medicine & Drug Design/]]===
#[[/Drug Targeting/]]
#[[/Quantum Dot-Aptamer Conjugate/]]
#[[/Pharmaceutical Dosage Forms/]]
##[[/Solid Dosage Forms/]]
##[[/Liquid Dosage Forms/]]
##[[/Topical Dosage Forms/]]
##[[/Ophthalmic dosage forms/]]
##[[/Miscellaneous dosage forms/]]
#[[/Drug Platform/]]
#[[/Drug Classification/]]
#[[/Drug Development Challenges/]]
# [[/Development and Discovery of Zanamivir & Oseltamivir for Various Diseases/]]
# [[/Clinical Development of Drugs/]]
# [[/Controlled Substances Act/]]
# [[/Contribution of natural products/]]
# [[/How drugs cross the cell membrane/]]
# [[/MDR Pumps/]]
# [[/Response to Medicine/]]
# [[/Influenza Virus/]]
# [[/Alprazolam/]]
# [[/Amsacrine/]]
# [[/Aspirin/]]
# [[/Valsartan/]]
# [[/Dianabol/]]
# [[/Tylenol/]]
# [[/Prozac/]]
# [[/Anthrax/]]
# [[/Phenelzine/]]
# [[/Pepcid/]]
# [[/Adalat/]]
# [[/Bosulif/]]
# [[/Luvox/]]
# [[/Norethindrone/]]
# [[/Paclitaxel/]]
# [[/Allegra/]]
# [[/Adderall/]]
# [[/Ritalin/]]
# [[/Paxil/]]
# [[/Paxin/]]
# [[/Marijuana/]]
# [[/Benadryl/]]
# [[/Prednisone/]]
# [[/Tobacco and Nicotine/]]
# [[/Alcohol/]]
# [[/Acetaminophen/]]
# [[/Vicodin/]]
# [[/Folic acid/]]
# [[/Ayahuasca/]]
# [[/Viagra (Sildenafil Citrate)/]]
# [[/Vyvanse/]]
# [[/Retrovir/AZT/]]
# [[/Drug Antagonists/]]
# [[/Tyrosine Kinase Inhibitors/]]
# [[/Drug Resistance/]]
# [[/Antivirals/]]
# [[/Ketamine/]]
# [[/MDMA/]]
# [[/Cocaine/]]
# [[/Warfarin/]]
# [[/Ibuprofen/]]
# [[/Loratadine/]]
# [[/Nexium/]]
# [[/Methotrexate/]]
# [[/Vancomycin/]]
# [[/Thalidomide/]]
# [[/Simvastatin/]]
# [[/Drug Reward Path In The Brain/]]
# [[/Hurler Syndrome and Treatments/]]
# [[/RNA-Based Drugs/]]
# [[/Antibiotics/]]
# [[/Prodrugs/]]
# [[/Selective Serotonin Reuptake Inhibitors/]]
# [[/Stages of how a drug passes through the body/]]
# [[/Statin/]]
# [[/Caffeine/]]
# [[/Lysergic acid diethylamide/]]
# [[/Methamphetamine/]]
# [[/Minocycline/]]
# [[/Testosterone and the Anabolic-Androgenic Steroid (AASs)/]]
# [[/Oxycodone/]]
# [[/Contraceptives/]]
# [[/Morphine/]]
# [[/Diprivan/]]
# [[/Rituximab/]]
# [[/Plan B/]]
#[[/Routes of Drug Administration/]]
##[[/Topical/]]
###[[/Epicutaneous/]]
###[[/Eye Drop/]]
###[[/Inhalation/]]
###[[/Intranasal Route/]]
##[[/Enteral/]]
###[[/Oral/]]
###[[/Rectal/]]
###[[/Sublingual/]]
##[[/Parenteral/]]
###[[/Intravenous/]]
###[[/Intramuscular/]]
###[[/Subcutaneous/]]
###[[/Intraarterial/]]
###[[/Intradermal/]]
###[[/Transdermal/]]
###[[/Transmucosal/]]
###[[/Inhalation/]]
#[[/Pharmacokinetics/]]
#[[/PTP1B/]]
#[[/Amphetamine/]]
#[[/Juvenile Hormone/]]
#[[/Phylketonuria (PKU)/]]
#[[/Antibiotic/]]
#[[/Furosemide/]]
#[[/Vitamin C/]]
#[[/Lantipeptides/]]
#[[/ADME/]]
#[[/Pharmacology/]]
===[[/Laboratory and Clinical Relationship/]]===
# [[/Translational Science/]]
## [[/Diabetes/]]
## [[/Alzheimers/]]
#[[/Personalized Medicine/]]
#[[/Model Organisms/]]
#[[/Bridging the gap between basic and clinical investigation/]]
===[[/Histology/]]===
# [[/Types of Stains/]]
##[[/H and E/]]
===[[/Immunohistochemistry/]]===
===[[/Neuroscience/]]===
#[[/Neurons/]]
##[[/Action Potential/]]
##[[/Resting Potential/]]
##[[/Signaling Within Neurons/]]
#[[/Glial Cells/]]
#[[/Neurochemistry/]]
##[[/Neurotransmitters/]]
#[[/Axonal Transport and Disease/]]
##[[/Multiple Sclerosis/]]
#[[/Synapses/]]
#[[/Channelopathies/]]
#[[/Phases of Brain Development/]]
##[[/Neural Induction/]]
##[[/Proliferation/]]
##[[/Migration/]]
##[[/Differentiation/]]
##[[/Synaptogenesis/]]
##[[/Cell Death/Stabilization/]]
##[[/Synaptic Rearrangement/]]
#[[/Neurodegeneration/]]
#[[/Neuroglobin/]]
#[[/Motor Systems/]]
##[[/Basal Ganglia/]]
##[[/Cerebellum/]]
===[[/Systems Biology/]]===
# [[/Systems Biology/Analysis of Programmed Cell Death|Analysis of Programmed Cell Death]]
===[[/Bioinformatics/]]===
# [[/Bioinformatics/Homology|Homology]]
# [[/Bioinformatics/Sequences Alignments|Sequences Alignments]]
# [[/Bioinformatics/Structural Alignments|Structural Alignments]]
#[[/Advances and pitfalls of protein structural alignment/]]
## [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment|Programs Used For Structural Alignment]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/DALI|DALI]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/Combinatorial Extension|Combinatorial Extension]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/SSAP|SSAP]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/GANGSTA+|GANGSTA+]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/MAMMOTH|MAMMOTH]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/RAPIDO|RAPIDO]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/SABERTOOTH|SABERTOOTH]]
### [[/Bioinformatics/Structural Alignments/Programs Used For Structural Alignment/TOPOFIT|TOPOFIT]]
## [[/Bioinformatics/Structural Alignments/RNA Structural Alignment|RNA Structural Alignment]]
# [[/Bioinformatics/Evolution Trees|Evolution Trees]]
#[[/Bioimaging/]]
# [[/Bioinformatics/Combinatorial Chemistry|Combinatorial Chemistry]]
# [[/Bioinformatics/Comparative Bioinformatics|Comparative Genomics]]
# [[/Transgenic Animal/]]
##[[/Protein function/Regulation|Regulation]]
#[[/Bioinformatics/Protein Fold Recognition|Protein Fold Recognition]]
#[http://en.wikibooks.org/wiki/Chemical_Information_Sources/SIRCh/Bioinformatics SIRCh Link for Bioinformateics] (Selected Internet Resources)
#[[/Fold.it/]]
===[[/Molecular Modeling/]]===
#[[/Molecular Modeling/Molecular Docking|Molecular Docking]]
#[[/Molecular Modeling/Molecular Dynamics|Classical Molecular Dynamics]]
#[[/Molecular Modeling/Interactive 3D Model within a PDF|Interactive 3D Model within a PDF]]
===[[/Mental Inertia in the Biological Sciences/|Mental Inertia]]===
#[[/Incorrectly Established Results/]]
#[[/Incorrect Understanding of a Mechanism Action/]]
==[[/Water/]]==
#[[/Unique Properties/]]
#[[/pH/]]
#[[/Buffer/]]
#[[/Osmosis/]]
#[[/Polarity/]]
#[[/Water Gas Reaction/]]
==[[/Proteins/]]==
# [[/Proteins/Amino Acids|Amino Acids]]
##[[/Proteins/Total Chemical Synthesis of a D-Enzyme: The Enantiomers of HIV-1 Protease Show Demonstrations of Reciprocal Chiral Substrate Specificity|Total Chemical Synthesis of a D-Enzyme: The Enantiomers of HIV-1 Protease Show Demonstrations of Reciprocal Chiral Substrate Specificity]]
##[[/Proteins/Nitrogen Fixation|Nitrogen Fixation]]
##[[/Proteins/Amino Acid Degradation|Amino Acid Degradation]]
##[[/Proteins/Amino Acid Biosynthesis|Amino Acid Biosynthesis]]
##[[/Proteins/Recent Progress in Understanding Alzheimer's β-Amyloid structures|Proteins/Recent Progress in Understanding Alzheimer's β-Amyloid structures]]
# [[/Proteins/Proteins|Proteins]]
## [[/Proteins/Structures|Structures]]
## [[/Proteins/Surface Layer Proteins|Surface Layer Proteins]]
## [[/Proteins/Protein Folding|Protein Folding]]
## [[/Proteins/Ramachandron Plot|Ramachandron Plot]]
## [[/Proteins/Protein Folding Problem|Protein Folding Problem]]
## [[/Proteins/Protein Folding on the Ribosome|Protein Folding on the Ribosome]]
## [[/Proteins/Assembly of bacterial inner membrane proteins|Assembly of bacterial inner membrane proteins]]
## [[/Proteins/Protein Folding to New Enzymes|Protein Folding to New Enzymes]]
## [[/Proteins/Fibrous Proteins|Fibrous Proteins]]
## [[/Proteins/Unfolded Protein Response|Unfolded Protein Response]]
## [[/Proteins/Signaling Control of Splicing Proteins|Signaling Control of Splicing Proteins]]
##[[/Analyzing and visualizing residue networks of protein structures/]]
## [[/Binding-sites Predictions assisting protein-protein Docking/]]
# [[/Proteins/Developing Novel Classifications of Protein Structure|Developing Novel Classifications of Protein Structure]]
# [[/Proteins/Protein Studies|Techniques to Study Proteins]]
##[[/Counting proteins using fluorescence microscopy/]]
# [[/Proteostasis/]]
## [[/Proteins/Synthesis|Synthesis]]
###[[/Non Ribosomal Peptide Synthesis/]]
###[[/Bacterial Protein Synthesis/]]
## [[/Proteins/Purification|Purification]]
### [[/Proteins/Purification/Differential Centrifugation|Differential Centrifugation]]
### [[/Proteins/Purification/Salting Out|Salting Out]]
### [[/Proteins/Purification/Capillary Electrophoresis|Capillary Electrophoresis]]
### [[/Proteins/Purification/High Pressure Liquid chromatography|High pressure Liquid Chromatography (HPLC)]]
#### [[/Proteins/Purification/Gel-Filtration chromatography|Gel-filtration Chromatography]]
#### [[/Proteins/Purification/Ion-Exchange chromatography|Ion-Exchange Chromatography]]
#### [[/Proteins/Purification/Affinity chromatography|Affinity Chromatography]]
#### [[/Proteins/Purification/Hydrophobic Interaction Chromatography|Hydrophobic Interaction Chromatography (HIC)]]
#### [[/Chromatography/Column|Column Chromatography]]
#### [[/Chromatography/Planar|Planar Chromatography]]
##### [[/Chromatography/Paper|Paper Chromatography]]
##### [[/Chromatography/Thin Layer|Thin Layer Chromatography]]
#### [[/Chromatography/Gas|Gas Chromatography]]
#### [[/Chromatography/Liquid|Liquid Chromatography]]
### [[/Proteins/Purification/Isoelectric Focusing|Isoelectric Focusing]]
### [[/Proteins/Purification/Dialysis|Dialysis]]
### [[/Proteins/Purification|MicroPurification]]
## [[/Proteins/Analysis of Purification Result|Analysis of Purification Results]]
### [[/Identifying Proteins|Identifying Proteins]]
#### [[/Cellulose Acetate Electrophoresis|Cellulose Acetate Electrophoresis]]
### [[/Quantifying Proteins|Quantifying Proteins]]
#### [[/Proteins/Gel Electrophoresis|Gel Electrophoresis]]
####[[/Proteins/Purification/SDS-Polyacrylamide Gel Electrophoresis|SDS-Polyacrylamide Gel Electrophoresis]][[/Proteins/Purification/Edman Sequencing|Edman Sequencing]]
####[[/Proteins/Purification/SDS-Polyacrylamide Gel Electrophoresis|SDS-Polyacrylamide Gel Electrophoresis]][[/Proteins/Purification/Micro-Purification /Edman Sequencing|Edman Sequencing]]
#### [[/Proteins/Zonal Centrifugation|Zonal Centrifugation]]
#### [[/Bradford Assay|Bradford Assay]]
###[[/Quantum Dots/]]
### [[/Analysis of Membrane Proteins|Analysis of Membrane Proteins]]
####[[/VDAC-1 and Analysis Using Solution NMR/]]
## [[/Analytical Ultracentrifugation/]]
## [[/Crosslinking Technique/]]
## [[/Proteins/Protein sequence determination techniques|Protein Sequence Determination Techniques]]
### [[/Proteins/Proteolytic Analysis of Proteins|Proteolytic Analysis of Proteins]]
### [[/Protein sequence determination techniques/Mass Spectroscopy|Mass Spectroscopy]]
## [[/Proteins/Protein Structure determination methods|Protein Structure Determination Methods]]
### [[/Proteins/NMR Spectroscopy|NMR Spectroscopy]]
###[[/Proteins/Deuterium Exchange Mass Spectrometry (DXMS)|Deuterium Exchange Mass Spectrometry]]
### [[/Proteins/X-ray Crystallography|X-ray Crystallography]]
### [[/Proteins/Cryo-Electron Microscopy|Cryo-Electron Microscopy]]
### [[/Proteins/Infrared Spectroscopy|Infrared Spectroscopy]]
### [[/Proteins/Neutron Diffraction|Neutron Diffraction]]
### [[/Proteins/Continuous Theory of Protein Structure|Continuous Theory of Protein Structure]]
## [[/Analyzing protein structure and function using ancestral gene reconstruction/]]
## [[/Proteins/Measuring Enzymatic Activity Using Spectroscopy|Measuring Enzymatic Activity Using Spectroscopy]]
## [[/Proteins/Protein Glycosylation|Protein Glycosylation]]
## [[/Comparison of Vertebrate and Invertebrate Proteolytic Cascades/]]
## [[/Conformational changes in Adenylyl Cyclases control regulation of signal transduction/]]
## [[/Prion Protein Misfolding and Disease/]]
## [[/Proteins/Immunology; Another Approach toward Protein Investigation|Immunology: Another Approach Towards Protein Analysis]]
### [[/Proteins/Antibody and Antigen Interaction|Antibody and Antigen Interaction]]
#### [[/Proteins/Agglunation reactions|Agglunation Reactions]]
### [[/Proteins/Usage of Antibody in Protein Research|Use of Antibodies in Protein Research]]
#### [[/Proteins/Enzyme-Linked Immunoabsorbent Assay (ELISA)|Enzyme-Linked Immunoabsorbent Assay (ELISA)]]
#### [[/Proteins/Western Blotting|Western Blotting]]
#### [[/Proteins/Fluorescent Marker|Fluorescent Marker]]
#### [[/Enzyme-Linked ImmunoSpot Assay (ELISpot)/]]
### [[/Proteins/Preparation of Monoclonal Antibody|Preparation of Monoclonal Antibodies]]
#### [[/Proteins/Sources of production of Monoclonal antibody|Sources of Monoclonal Antibody Production]]
### [[/Proteins/Preparation of Polyclonal Antibody|Preparation of Polyclonal Antibodies]]
### [[/Dynamic Light Scattering|Dynamic Light Scattering]]
##[[/Site Prediction/]]
##[[/Protein Misfolding and Human Disease/]]
# [[/Proteins/Protein Translation|Protein Translation]]
##[[/Proteins/Myristoylation|Myristoylation]]
##[[/Proteins/Internal Ribosome Entry Sites|Internal Ribosome Entry Sites]]
# [[/Proteins/Protein Modification|Protein Modification]]
##[[/Proteins/Palmitoylation|Palmitoylation]]
##[[/Proteins/Prenylation|Prenylation]]
# [[/Proteins/Posttranslational Modification of Proteins|Posttranslational Modification of Proteins]]
##[[/Proteins/Adenylation|Adenylation]]
##[[/Proteins/ADP-Ribosylation|ADP-Ribosylation]]
##[[/Enzyme Regulation/Acetylation|Acetylation]]
##[[/Proteins/Histone Modifications|Histone Modifications]]
###[[/Fast signals and slow marks: the dynamics of histone modifications/]]
# [[/Proteins/Protein Phosphorylation by Protein Kinases|Protein Phosphorylation by Protein Kinases]]
##[[/NMP Kinase/]]
##[[/Phosphatase PHLPP/]]
##[[/Phosphatidylserine Binding Motif and PKC/]]
##[[/Pleckstrin Homology Domain Leucine-rich Repeat Protein Phosphatase/]]
#[[/Detection of Phosphorylation/]]
# [[/Proteins/Protein in Signal Transduction|Protein in Signal Transduction]]
# [[/Proteins/Integrin Proteins|Integrin Proteins]]
# [[/Proteins/Protein in Signal Transduction|Conformational changes in Adenylyl Cyclases control regulation of signal transduction]]
# [[/Proteins/Protein O-GlcNAcylation by O-linked β-N-acetylglucosamine (O-GlcNAc)|Protein O-GlcNAcylation by O-linked β-N-acetylglucosamine (O-GlcNAc)]]
# [[/Proteins/Protein Acetylation by Lipids|Protein Acetylation by Lipids]]
##[[/Proteins are modified by fatty acids /]]
# [[/Proteins/Protein Functions|Protein Functions]]
##[[/Structural/]]
##[[/Binding/]]
###[[/Myoglobin/]]
###[[/Hemoglobin/]]
###[[/Hemocyanin/]]
###[[/Protein-Protein Interaction Network/]]
##[[/Catalysis/]]
###[[/Catalytic Strategies/Enzyme Classification|Enzyme Classification]]
###[[/Proteases/]]
##[[/Switching/]]
#[[/Protein function/Regulation|Regulation]]
##[[/Protein function/Interferon2|Interferon]]
##[[/Protein function/HIF|HIF]]
##[[/Protein function/HIF switch|HIF switch]]
##[[/Protein function/VHL|VHL]]
#[[/Protein function/Lysozyme|Lysozyme]]
#[[/Oct Proteins/]]
#[[/Lafora Disease/]]
#[[/Other Non-Common Amino Acids/]]
#[[/Inherently Disordered Proteins/]]
#[[/Stability, Mutation and Evolvability/]]
#[[/Protein Disorder/]]
#[[/Nonribosomal Peptide Synthestases (NRPSs)//]]
#[[/Overcoming Challenges of Protein Crystallography//]]
#[[/Protein Evolution/]]
#[[/Sirtuins/]]
#[[/Collagen/]]
#[[/Serpins/]]
#[[/Glycoproteins/]]
##[[/Glycoproteins/Ebola Virus|Ebola Virus]]
#[[/Protein Design/]]
#[[/Protein Design & Drug Delivery/]]
#[[/Drug Delivery/]]
#[[/Beta-Propeller Proteins/]]
#[[/WD40 Domains/]]
#[[/Bub1 and BubR1/]]
#[[/APOBEC3G/]]
#[[/Glutaredoxins/]]
#[[/TAX1BP1/]]
#[[/TPD-43/]]
===[[/Enzyme Catalytic Mechanism/Protein Function|Protein Function]]===
#[[/Enzyme Catalytic Mechanism/Binding|Binding]]
##[[/Protein function/Conformational Selection|Conformational Selection]]
##[[/Protein function/Ligand|Ligand]]
###[[/Protein function/Ligand/Metal Binding Sites|Metal Binding Sites]]
##[[/Protein function/Binding Sites|Binding Sites]]
##[[/Protein function/Lock and Key|Lock and Key]]
##[[/Protein function/Induced Fit|Induced Fit]]
##[[/Protein function/Transition-state Model|Transition-state Model]]
##[[/Protein function/Binding Sites/Cooperativity|Cooperativity]]
#[[/Enzyme Catalytic Mechanism/Integral Membrane Protein|Integral Membrane Protein]]
##[[/Protein function/Integral Membrane Protein|Alpha Helical Membrane Protein]]
#[[/Protein function/Heme group/Myoglobin|Myoglobin]]
##[[/Protein function/Heme group|Heme Group]]
###[[/Bilirubin/]]
##[[/Protein function/Heme group/Biological Roles of Metal Ions|Biological Roles of Metal Ions]]
##[[/Protein function/Myoglobin's Oxygen Binding Curve|Myoglobin's Oxygen Binding Curve]]
##[[/Protein function/Additional Globins2|Additional Globins]]
#[[/Protein function/Hemoglobin|Hemoglobin]]
##[[/Protein function/Heme group/Hemoglobin|Hemoglobin-Heme Group]]
##[[/Protein function/Heme group/Hemoglobin/Sickle disease|Sickle Cell Anemia]]
##[[/Protein function/Heme group/Hemoglobin/Thalassemia|Thalassemia]]
##[[/Protein function/Heme group/Hemoglobin/AHSP|AHSP]]
##[[/Protein function/Heme group/Hemoglobin/Bohr Effect|Bohr Effect]]
##[[/Protein function/Heme group/Hemoglobin/Affinity Constant|Affinity Constant]]
##[[/Protein function/Heme group/Hemoglobin/Dissociation Constant|Dissociation Constant]]
##[[/Enzyme Catalytic Mechanism/Regulation|Regulation]]
##[[/Enzyme Catalytic Mechanism/Regulation/Regulation by 2,3-bisphosphoglycerate|Regulation by 2,3-Bisphosphoglycerate (2,3-BPG)]]
##[[/Protein function/Oxygen-Binding Curve|Oxygen-Binding Curve]]
##[[/Protein function/Heme group/Other Globins|Other Globins]]
#[[/Protein function/Antibodies|Antibodies]]
##[[/Protein function/Epitope|Epitope]]
##[[/Protein function/Antigen|Antigen]]
##[[/Protein function/Major Histocompatibility Complex (MHC)|Major Histocompatibility Complex (MHC)]]
###[[/Protein function/Major Histocompatibility Complex (MHC)/MHC Class I|MHC Class I]]
###[[/Protein function/Major Histocompatibility Complex (MHC)/MHC Class II|MHC Class II]]
##[[/Protein function/Abzyme|Abzyme]]
#[[/Protein function/Myosin|Myosin]]
#[[/Protein function/Actin|Actin]]
#[[/Protein function/Insulin|Insulin]]
#[[/Protein function/DNA Binding|DNA Binding]]
#[[/Fluorescent Proteins/]]
#[[/G Proteins/]]
#[[/LPA Receptors/]]
#[[/G Protein Mechanism/]]
#[[/Ferritin/]]
#[[/Siderochromes/]]
#[[/The "fuzzy" interactome/]]
#[[/Protein Folding and Chaperones/]]
##[[/Protein Folding Rates/]]
##[[/Heat Shock Proteins/]]
#[[/CCN Proteins/]]
#[[/Prion Proteins/]]
#[[/Bacterial Proteins/]]
#[[/Ubiquitin/]]
#[[/Cdc48/]]
#[[/TGFβ and Integrins/]]
#[[/AB5 Toxins/]]
#[[/PHD Finger/]]
#[[/TATA-Binding Protein/]]
#[[/Chaperone Proteins/]]
##[[/HSP90/]]
#[[/Function Attribution/]]
#[[/Unfolded Protein Response/]]
#[[/TDP-43/]]
===[[/Membrane Proteins/]]===
#[[/Membrane Proteins/Active Transport|Active Transport]]
#[[/Membrane Proteins/Passive Transport|Passive Transport]]
#[[/Membrane Proteins/Membrane Gradients and its Thermodynamics|Membrane Gradients and Thermodynamics]]
#[[/Membrane Proteins/P-Type ATPases|P-type ATPases]]
#[[/Membrane Proteins/ATP-Binding Cassette Proteins|ATP-Binding Cassette Proteins]]
#[[/Membrane Proteins/Symporters|Symporters]]
#[[/Membrane Proteins/Antiporters|Antiporters]]
#[[/Membrane Proteins/Uniporters|Uniporters]]
#[[/Membrane Proteins/Ion Channels|Ion Channels]]
##[[/Membrane Proteins/Ion Channels/Patch Clamp|Patch Clamp]]
##[[/Membrane Proteins/Ion Channels/Transient receptor potential channel|Transient receptor potential channel]]
#[[/Membrane Proteins/Ligand-gated Ion Channels|Ligand-gated Ion Channels]]
#[[/Membrane Proteins/Gap Junctions|Gap Junctions]]
#[[/Membrane Proteins/Water Channels|Water Channels]]
#[[/Membrane Proteins/Nuclear Pore Complex|Nuclear Pore Compex]]
#[[/Membrane Proteins/Cotransporters|Cotransporters]]
#[[/Membrane Proteins/Control Systems:Nervous System|Control Systems:Nervous System]]
#[[/Membrane Proteins/The Evolution of Membrane Proteins|The Evolution of Membrane Proteins]]
#[[/Membrane Proteins/Organizational Scheme for Protein Function|Organizational Scheme for Protein Function]]
#[[/Membrane Proteins/Methods for Studying Membrane Proteins|Methods for Studying Membrane Proteins]]
##[[/Membrane Proteins/Methods for Studying Membrane Proteins/Solution NMR Spectroscopy|Solution NMR Spectroscopy]]
##[[/Membrane Proteins/Methods for Studying Membrane Proteins/Electron crystallography of proteins in membranes|Electron crystallography of proteins in membranes]]
##[[/Membrane Proteins/Methods for Studying Membrane Proteins/Cryo-electron Tomography and 3D Image Averaging|Cryo-electron Tomography and 3D Image Averaging]]
#[[/Membrane Proteins/Assembly of Membrane Proteins into Complexes|Assembly of Membrane Proteins into Complexes]]
#[[/Membrane Proteins/Topology|Topology]]
#[[/Membrane Proteins/G Protein Coupled Receptor|G Protein Coupled Receptor]]
#[[/Membrane Proteins/Multidrug-Resistance Pumps|Multidrug-Resistance Pumps]]
#[[/Membrane Proteins|Study of Protein structure in lipid bilayer: Electron crystallography]]
#[[/Membrane Proteins/Folding|Folding]]
#[[/Membrane Proteins/Membrane Curvature|Membrane Curvature]]
# [[/Hydrophobicity scales/]]
#[[/Membrane Protein stresses in fusion and fission/]]
#[[/Mucus Membrane System/]]
#[[/Secretin/]]
#[[/Binding of the Drug Amantadine to the Proton Channels of the M2 Protein in the Influenza Virus/]]
#[[/TA proteins (GET) pathway in young men/]]
==[[/Carbohydrates/]]==
# [[/Carbohydrates/Monosaccharides|Monosaccharides]]
## [[/Carbohydrates/Monosaccharides/Stereochemistry of Monosaccharides|Stereochemistry of Monosaccharides]]
#[[/Carbohydrates/Carbohydrate Structure Elucidation through Periodic Acid Cleavage|Carbohydrate Structure Elucidation through Periodic Acid Cleavage]]
# [[/Carbohydrates/Ketoses|Ketoses]]
# [[/Carbohydrates/Aldoses|Aldoses]]
# [[/Carbohydrates/Disaccharides|Disaccharides]]
# [[/Carbohydrates/Oligosaccharides|Oligosaccharides]]
# [[/Carbohydrates/Sequencing Oligosaccharides using glycosidases|Sequencing Oligosaccharides Using Glycosidases]]
# [[/Carbohydrates/Polysaccharides|Polysaccharides]]
# [[/Carbohydrates/Chitin]]
# [[/Carbohydrates/Glycans|Glycans]]
# [[/Carbohydrates/Peptidoglycan Biosynthesis|Peptidoglycan Biosynthesis]]
# [[/Carbohydrates/Glycoproteins|Glycoproteins]]
# [[/Carbohydrates/Carbohydrate Derivatives|Carbohydrate Derivatives]]
# [[/Carbohydrates/Carbohydrates and Proteins|Carbohydrates and Proteins]]
## [[/Carbohydrates/Lectins|Lectins]]
##[[/Carbohydrates/Glycosaminoglycans|Glycosaminoglycans]]
## [[/Carbohydrates/Proteoglycans|Proteoglycans]]
## [[/Carbohydrates/Blood Type|Blood Type]]
##[[/Carbohydrates/Virus|Virus]]
### [[/Carbohydrates/Virus/Mechanism behind HIV Infection|Mechanism behind HIV Infection]]
#[[/Carbohydrates/Carbohydrate Metabolism|Carbohydrate Metabolism]]
#[[/Carbohydrates/Glycogen Breakdown|Glycogen Breakdown]]
==[[/Lipids/]]==
#[[/Lipids/Fatty Acids|Fatty Acids]]
##[[/Triacylglycerols/]]
#[[/Lipids/Cholesterol|Cholesterol]]
## [[/Lipids/Biosynthesis of Cholestrol/|Biosynthesis of Cholestrol]]
##[[/Lipids/Lipoproteins/|Lipoproteins]]
#[[/Lipids/Biological Membranes|Biological Membranes]]
#[[/Lipids/Membrane Lipids|Membrane Lipids]]
#[[/Lipids/Membrane Transport|Membrane Transport]]
#[[/Membrane Fusion/]]
#[[/Membrane Fission/]]
#[[/Lipids/Micelles|Micelles]]
#[[/Lipids/Lipid Bilayer|Lipid Bilayer]]
#[[/Lipids/Membrane Fluidity|Membrane Fluidity]]
#[[/Lipids/Fluid Mosaic Model|Fluid Mosaic Model]]
#[[/Lipids/Techniques to Study Membranes|Techniques to Study Membranes]]
## [[/Lipids/Techniques to Study Membranes/Electron Microscopy|Electron Microscopy]]
## [[/Lipids/Techniques to Study Membranes/Preparation of Bilayers and Vesicles|Preparation of Bilayers and Vesicles]]
## [[/Lipids/Techniques to Study Membranes/Scanning Calorimetry|Scanning Calorimetry]]
## [[/Lipids/Techniques to Study Membranes/Fluorescence Photo Bleaching|Fluorescence Photo Bleaching]]
#[[/Lipids/Waxes, Soaps, and Detergents|Waxes, Soaps, and Detergents]]
## [[/Lipids/Fatty Wax|Fatty Wax]]
## [[/Lipids/Soap|Soap]]
## [[/Lipids/Detergents|Detergents]]
#[[/Lipids/Isoprenoids|Isoprenoids]]
#[[/Lipids/Lipid Rafts|Lipid Rafts]]
#[[/Lipids/Sample Preparation for Mass Spectrometry-Based Lipidomics Studies]]
#[[/Lipids/Mass Spectrometry-Based Structure Determination of Novel Lipids|Mass Spectrometry-Based Structure Determination of Novel Lipids]]
#[[/Receptor-mediated Endocytosis/]]
#[[/Lipids/Biosynthesis|Biosynthesis]]
##[[/Lipids/Biosynthesis|Triacylglycerols]]
#[[/Lipid activation of protein kinases/]]
#[[/Degradation of Odd-Chain and Unsaturated Fatty Acids/]]
#[[/Liposomes/]]
#[[/Lipid Droplets and Cellular Lipid Metabolism/]]
==[[/Nucleic Acids/]]==
# [[/Nucleic Acid/Structure|Structure]]
## [[/Nucleic Acid/Phosphate|Phosphate]]
## [[/Nucleic Acid/Sugars|Sugars]]
### [[/Nucleic Acid/Sugars/Deoxyribose Sugar|Deoxyribose]]
### [[/Nucleic Acid/Sugars/Ribose|Ribose]]
## [[/Nucleic Acid/Nitrogenous Bases|Nitrogenous Bases]]
### [[/Nucleic Acid/Nitrogenous Bases/Purines|Purines]]
#### [[/Nucleic Acid/Nitrogenous Bases/Purines/Adenine|Adenine]]
#### [[/Nucleic Acid/Nitrogenous Bases/Purines/Guanine|Guanine]]
#### [[/Nucleic Acid/Nitrogenous Bases/Purines/Purine|Purine]]
#### [[/Nucleic Acid/Nitrogenous Bases/Purines/Hypoxanthine|Hypoxanthine]]
#### [[/Nucleic Acid/Nitrogenous Bases/Purines/Xanthine|Xanthine]]
#### [[/Nucleic Acid/Nitrogenous Bases/Purines/Theobromine|Theobromine]]
### [[/Nucleic Acid/Nitrogenous Bases/Pyrimidines|Pyrimidines]]
#### [[/Nucleic Acid/Nitrogenous Bases/Pyrimidines/Cytosine|Cytosine]]
#### [[/Nucleic Acid/Nitrogenous Bases/Pyrimidines/Uracil|Uracil]]
#### [[/Nucleic Acid/Nitrogenous Bases/Pyrimidines/Thymine|Thymine]]
### [[/Nucleic Acid/Nitrogenous Bases/Ribonucleotide Reductase|Ribonucleotide Reductase]]
## [[/Nucleic Acid/Nucleotides|Nucleotides]]
# [[/Nucleic Acid/Connection between monomers|Connection Between Monomers]]
# [[/Nucleic Acid/DNA|DNA]]
## [[/Nucleic Acid/DNA/DNA structure|DNA structure]]
### [[/Nucleic Acid/DNA/DNA structure/Telomeres|Telomeres]]
### [[/Nucleic Acid/DNA/DNA structure/Unusual Structures|Unusual Structures]]
##[[/Nucleic Acid/DNA/Supercoiling and Nucleosomes|Supercoiling and Nucleosomes]]
##[[/Nucleic Acid/DNA/Palindromic Sequencing|Palindromic Sequencing]]
##[[/Nucleic Acid/DNA/DNA Denaturation|DNA Denaturation]]
##[[/Nucleic Acid/DNA/Avery-MacLeod-McCarty Experiment|Avery-MacLeod-McCarty Experiment]]
##[[/Nucleic Acid/DNA/Hershey-Chase Experiment|Hershey-Chase Experiment]]
##[[/Nucleic Acid/DNA/Chargaff's Experiments|Chargaff's Experiments]]
##[[/Nucleic Acid/DNA/Watson and Crick's Article|Watson and Crick's Article]]
##[[/Nucleic Acid/DNA/Franklin's DNA X-ray Crystallography|Franklin's DNA X-ray Crystallography]]
##[[/Nucleic Acid/DNA/Replication Process|Replication Process]]
### [[/Nucleic Acid/DNA/Replication Process/DNA Polymerase|DNA Polymerase]]
### [[/Nucleic Acid/DNA/Replication Process/DNA Initiation|DNA Initiation]]
##[[/Nucleic Acid/DNA/Meselson-Stahl Experiment|Meselson-Stahl Experiment]]
##[[/Nucleic Acid/DNA/Knockout Mouse|Knockout Mouse]]
##[[/Nucleic Acid/DNA/Transgenic Animals|Transgenic Animals]]
##[[/Nucleic Acid/DNA/Transgenic Plants|Transgenic Plants]]
##[[/The Hypochromic Effect/]]
##[[/DNA Repair/]]
###[[/DNA Repair/Mismatch Repair|Mismatch Repair]]
###[[/DNA Repair/Polynucleotide kinase/phosphatase in DNA strand break repair|Polynucleotide kinase/phosphatase in DNA strand break repair]]
##[[/DNA Packaging/]]
##[[/DNA as Nanomaterial/]]
##[[/Structural DNA Nanotechnology/]]
##[[/Holliday Junction/]]
##[[/Proliferative and Antiproliferative Genes/]]
##[[/Protein-DNA Recognition/]]
##[[/Transcription Regulation by Mediator/]]
##[[/Chromatin and Aging/]]
##[[/Chromatin regulation and genome maintenance by mammalian SIRT6/]]
# [[/Nucleic Acid/RNA|RNA]]
## [[/Nucleic Acid/RNA/Messenger RNA (mRNA)|Messenger RNA (mRNA)]]
### [[/Nonsense-Mediated mRNA Decay/]]
## [[/Nucleic Acid/RNA/Transfer RNA (tRNA)|Transfer RNA (tRNA)]]
## [[/Nucleic Acid/RNA/Ribosomal RNA (rRNA)|Ribosomal RNA (rRNA)]]
## [[/Nucleic Acid/RNA/Small RNA|Small RNA]]
### [[/Nucleic Acid/RNA/MicroRNA (miRNA)|MicroRNA (miRNA)]]
## [[/Nucleic Acid/RNA/Other RNA|Other RNA]]
## [[/Nucleic Acid/RNA/RNA Polymerase|RNA Polymerase]]
### [[/Single-molecule study of RNAP/]]
## [[/Nucleic Acid/RNA/RNA-Dependent RNA Polymerase|RNA-Dependent RNA Polymerase]]
## [[/Nucleic Acid/RNA/RNA Helicase|RNA Helicase]]
## [[/Nucleic Acid/RNA/Riboswitch|Riboswitch]]
## [[/Nucleic Acid/RNA/RNA Folding|RNA Folding]]
### [[/Mechanical Unfolding of RNA/]]
##[[/Short RNAs/]]
### [[/Salt Effects on Mechanical Folding/]]
## [[/Nucleic Acid/RNA/RNA Interference|RNA Interference (RNAi)]]
### [[/Nucleic Acid/RNA/RNA Interference/RISC (RNA-induced silencing complex)|RISC (RNA-induced silencing complex)]]
## [[/Nucleic Acid/Difference between DNA and RNA|Differences between DNA and RNA]]
## [[/Nucleic Acid/Transcription|Transcription]]
### [[/Nucleic Acid/]]
### [[/Transcription/]]
### [[/Reverse Transcription/]]
### [[/RNA Polymerase II/]]
## [[/Nucleic Acid/RNA/mRNA processing and transfer|mRNA processing and transfer]]
## [[/Nucleic Acid/Translation|Translation]]
## [[/Nucleic Acid/RNA/RNA modification|RNA Modification]]
### [[/Nucleic Acid/RNA/RNA modification/Introns|Introns]]
### [[/Nucleic Acid/RNA/RNA modification/Exons|Exons]]
### [[/Nucleic Acid/RNA/RNA modification/RNA splicing|RNA Splicing]]
### [[/Nucleic Acid/RNA/RNA modification/snRNP|snRNP]]
## [[/Nucleic Acid/RNA/RNA modification/RNA Degradation|RNA Degradation]]
### [http://en.wikibooks.org/wiki/Structural_Biochemistry/Nucleic_Acid/RNA/RNA_modification/RNA_Degradation/RNaseT2_Functionality/ RNaseT2 Functionality]
### [[/Nucleic Acid/RNA/RNA modification/Ribonucleases|Ribonucleases]]
## [[/Nucleic Acid/DNA/DNA structure/Telomeres|Telomere]]
## [[/Nucleic Acid/RNA/RNA purification|RNA Purification]]
## [[/Nucleic Acid/RNA/RNA Extraction|RNA Extraction]]
## [[/Nucleic Acid/RNA/Short RNAs Sequencing| Short RNA (sRNA Sequencing)]]
## [[/Nematode RNA/]]
## [[/Nucleic Acid/RNA/RNA Secondary Structure|RNA Secondary Structure]]
## [[/Making RISC's/]]
##[[/Diverse Interctions of retroviral Gag proteins with RNAs/]]
# [[/DNA manipulation techniques|DNA Manipulation Techniques]]
##[[/Maintaining Genome Integrity]]
## [[/DNA recombinant techniques/Restriction endonucleases|Restriction Endonucleases]]
## [[/DNA recombinant techniques/Southern Blot|Southern Blot]]
## [[/DNA recombinant techniques/Northern Blot|Northern Blot]]
## [[/DNA recombinant techniques/DNA sequencing|DNA Sequencing]]
## [[/DNA recombinant techniques/DNA Cataloging|DNA Cataloging]]
## [[/DNA recombinant techniques/DNA synthesis|DNA Synthesis]]
## [[/DNA Amplification Technique:Polymerase Chain Reaction (PCR)|DNA Amplification]]
## [[/Precipitation of Nucleic Acids With Alcohols|Alcohol Precipitation]]
## [[/Gene Regulation|Gene Regulation]]
### [[/Synthetic Biology/]]
### [[/Zinc fingers/]]
### [[/Metabolites/]]
### [[/REM/]]
##[[/Bacterial transformation technique/|Bacterial Transformation Technique]]
# [[/Genetic code|Genetic Code]]
#[[/Gene Expression/]]
##[[/Gatekeepers of Chromatin: Small Metabolites Elicit Big Changes in Gene Expression/]]
# [[/DNA Mutation/]]
## [[/Transposons/]]
## [[/Copy Number Variants/]]
## [[/Genetic Diseases/]]
### [[/Tay-Sachs/]]
##[[/Mitochondrial Diseases/]]
### [[/Duchenne Muscular Dystrophy/]]
# [[/Enzymes Used for Cloning/|Cloning Enzymes]]
## [[/Enzymes Used for Cloning/]]
### [[/T4 DNA Ligase/]]
### [[/T4 RNA Ligase/]]
### [[/T4 Polynucleotide Kinase/]]
### [[/Calf Intestinal Alkaline Phosphatase/]]
### [[/RecA Protein/]]
### [[/AgarACE ®, Enzyme/|AgarACE<sup>®</sup> Enzyme]]
## [[/Cloning Tips/]]
## [[/The Stepwise Process of How DNA is Cloned and Inserted into the Vector/|Process of DNA Cloning and Vector Insertion]]
## [[/Genetic code/Immune System|Immune System]]
# [[/Genome Regulation/]]
# [[/Genome Analysis/]]
## [[/DNA Gel Electrophoresis|DNA Gel Electrophoresis]]
## [[/Genome Analysis/DNA Microarrays|DNA Microarrays]]
## [[/Genome Analysis/Sequenced Genomes|Sequenced Genomes]]
## [[/Genome Analysis/Single Nucleotide Polymorphisms (SNPs)|Single Nucleotide Polymorphisms (SNPs)]]
## [[/Genome Analysis/The Impact of Genome Analysis on Medicine|The Impact of Genome Analysis on Medicine]]
## [[/Genome Analysis/Karyotyping|Karyotyping]]
# [[/DNA recombinant techniques|DNA Recombinant Techniques]]
## [[/DNA recombinant techniques/History and Study of Bacteriophage Lambda|History and Study of Bacteriophage Lambda]]
## [[/DNA recombinant techniques/Plasmid|Plasmid]]
###[[/DNA recombinant techniques/Plasmid/Lytic Pathway|Lytic Pathway]]
###[[/DNA recombinant techniques/Plasmid/Lysogenic Pathway|Lysogenic Pathway]]
## [[/DNA recombinant techniques/Genomic Library|Genomic Library]]
## [[/DNA recombinant techniques/Detecting specific genes|Detecting Specific Genes]]
## [[/DNA recombinant techniques/Mutagenesis|Mutagenesis]]
## [[/DNA recombinant techniques/Designer Genes|Designer Genes]]
## [[/DNA recombinant techniques/Human Genome Project|Human Genome Project]]
## [[/DNA recombinant techniques/Gene Therapy|Gene Therapy]]
## [[/DNA recombinant techniques/Artificial Chromosomes|Artificial Chromosomes]]
### [[/DNA recombinant techniques/Artificial Chromosomes/Bacterial Artificial Chromosomes (BAC)|Bacterial Artificial Chromosomes (BAC)]]
### [[/DNA recombinant techniques/Artificial Chromosomes/Bacterial Artificial Chromosomes (BAC)|Bacterial Artificial Chromosomes (BAC)]]
## [[/DNA recombinant techniques/Electroporation|Electroporation]]
## [[/DNA recombinant techniques/293T Cells|293T Cells]]
### [[/Bacterial Gram Stain/]]
## [[/Nucleic Acid/Heredity and Related Experiments|Heredity and Related Experiments]]
##[[/Directed Changes in DNA|Directed Changes in DNA]]
##[[/Eukaryotic Recombination|Eukaryotic Recombination]]
# [[/Single Molecule DNA Sequencing|Single Molecule DNA Sequencing]]
# [[/Methods for Determining Recombinant DNA in the Environment/]]
#[[/Polyermase Chain Reaction/]]
##[[/Polyermase Chain Reaction/How PCR is Performed/|How PCR is Performed]]
##[[/Polyermase Chain Reaction/Uses of PCR/|Uses of PCR]]
# [[/Nucleic Acid/DNA of the Future|DNA of the Future (The Many Faces of DNA)]]
# [[/Mitochondrial DNA/]]
# [[/ATP/]]
# [[/Function Attribution of Gene & Gene Products/]]
# [[/30nm chromatin fibers/]]
==[[/Enzyme Catalytic Mechanism/Catalysis|Catalysis]]==
#[[/Enzyme|Enzyme]]
##[[/Enzyme/Binding energy|Binding Energy]]
##[[/Enzyme/Desolvation|Desolvation]]
##[[/Enzyme/Ground state|States: Ground, Pre-steady,& Steady]]
##[[/Enzyme/Coenzymes|Coenzymes]]
##[[/Enzyme/Cofactors|Cofactors]]
##[[/Enzyme/Prosthetic Group|Prosthetic Group]]
##[[/Enzyme/Apoenzyme and Holoenzyme|Apoenzyme and Holoenzyme]]
##[[/Enzyme/Active Site|Active Site and Enzyme Specificity]]
##[[/Enzyme/Catalytic Triad|Catalytic Triad]]
##[[/Enzyme/Evolution of Enzymes|Evolution of Enzymes]]
##[[/Enzyme/Transition-State Binding Principle|Transition-State Binding Principle]]
#[[/Enzyme/Zymogen|Zymogen]]
#[[/Enzyme/Gibbs free energy graph|Gibbs Free Energy Diagram]]
##[[/Enzyme/Transition state|Transition State]]
##[[/Enzyme/Activation energy|Activation Energy]]
##[[/Enzyme/Reaction intermediates|Reaction Intermediates]]
#[[/Enzyme/Rates and constants|Rates and Constants]]
##[[/Enzyme/Rate constant|Rate Constant]]
##[[/Enzyme/Rate equation|Rate Equation]]
##[[/Enzyme/Rate-limiting step|Rate-limiting Step]]
##[[/Enzyme/Equilibrium constant|Equilibrium Constant]]
##[[/Enzyme/Initial rate|Initial Rate]]
#[[/Enzyme/Mechanisms|Mechanisms]]
##[[/Enzyme/Acid-Base Catalysis|Acid-Base Catalysis]]
##[[/Enzyme/Covalent Catalysis|Covalent Catalysis]]
##[[/Enzyme/Metal Ion Catalysis|Metal Ion Catalysis]]
##[[/Enzyme/Catalysis By Approximation|Catalysis By Approximation]]
#[[/Enzyme/Michaelis and Menten Equation|Michaelis-Menten Equation]]
##[[/Enzyme/Michaelis constant|Michaelis Constant]]
##[[/Enzyme/Kcat/Km|K<sub>cat</sub>/K<sub>M</sub>]]
##[[/Enzyme/Kinetic Perfection|Kinetic Perfection]]
##[[/Enzyme/Maximum velocity|Maximum Velocity]]
##[[/Enzyme/sequential reactions|Sequential Reactions]]
##[[/Enzyme/Double displacement reactions|Double Displacement Reactions]]
##[[/Enzyme Catalytic Mechanism/pingpong mechanism|Ping-Pong Mechanism]]
##[[/Enzyme/Allosteric Enzymes|Allosteric Enzymes]]
#[[/Enzyme/Double-Reciprocal plot: Lineweaver Burk plote|Double-Reciprocal Plot]]
#[[/Enzyme/Reversible Inhibitors|Reversible Inhibitors]]
##[[/Enzyme/Competitive Inhibitor|Competitive Inhibitor]]
##[[/Enzyme/Uncompetitive Inhibitor|Uncompetitive Inhibitor]]
##[[/Enzyme/Noncompetitive Inhibitor|Noncompetitive Inhibitor]]
#[[/Enzyme/Irreversible Inhibitor|Irreversible Inhibitor]]
##[[/Enzyme/Group Specific Reagent|Group Specific Reagent]]
##[[/Enzyme/Affinity Labels (reactive substrate analogs)|Affinity Labels]]
##[[/Enzyme/Suicide Inhibitors|Suicide Inhibitors]]
#[[/Enzyme/Time-dependent Inhibition|Time-dependent Inhibition]]
#[[/Enzyme/Transition State Analogs|Transition-State Analogs]]
#[[/Enzyme/Penicillin|Penicillin]]
#[[/Enzyme/Effects of pH on enzyme activity|Effects of pH on Enzyme Activity]]
#[[/Enzyme/Site-Directed Mutagenesis|Site-Directed Mutagenesis]]
#[[/Enzyme/Multi-substrate reactions|Multi-substrate reactions]]
#[[/Enzyme/Catalytic antibodies|Catalytic antibodies]]
#[[/Enzyme/Effects of Temperature on Enzyme Activity|Effects of Temperature on Enzyme Activity]]
===[[/Specific Enzymes and Catalytic Mechanisms/]]===
#[[/Enzyme Catalytic Mechanism/Proteases|Proteases]]
##[[/Enzyme Catalytic Mechanism/Hydrolysis|Hydrolysis]]
##[[/Enzyme Catalytic Mechanism/Proteases/Chymotrypsin|Chymotrypsin]]
##[[/Enzyme/Cysteine Proteases|Cysteine Proteases]]
##[[/Enzyme/Aspartyl Proteases|Aspartyl Proteases]]
##[[/Enzyme/Serine Proteases|Serine Proteases]]
##[[/Enzyme/Threonine Proteases|Threonine Proteases]]
##[[/Enzyme/Metalloproteases|Metalloproteases]]
##[[/Enzyme/Catalytic Triad and S1 Pocket|Catalytic Triad and S<sub>1</sub> Pocket]]
##[[/Enzyme/AAA+ Proteases|AAA+ Proteases]]
##[[/Enzyme/HIV-1 Proteases|HIV-1 Proteases]]
#[[/Enzyme Catalytic Mechanism/Dehydrogenases|Dehydrogenases]]
#[[/Enzyme/Enzyme Phenylalanine Hydrozylase (PAH)|Enzyme Phenylalanine Hydrozylase (PAH)]]
#[[/Enzyme Catalytic Mechanism/Carbonic Anhydrase|Carbonic Anhydrase]]
#[[/Carboxypeptidase/]]
#[[/Kinase/]]
##[[/Kinase/Cyclin-Dependent Kinase|Cyclin-Dependent Kinase]]
##[[/Kinase/MPS1|MPS1]]
#[[/Biophysical Studies of Bacterial Ribosome Assembly/]]
#[[/Enzyme Catalytic Mechanism/Restriction Enzyme|Restriction Enzyme]]
##[[/Enzyme Catalytic Mechanism/BamHI|BamHI]]
##[[/Enzyme Catalytic Mechanism/EcoRI|EcoRI]]
##[[/Enzyme Catalytic Mechanism/HindIII|HindIII]]
##[[/Enzyme Catalytic Mechanism/XbaI|XbaI]]
#[[/Enzyme Catalytic Mechanism/Glutathione Reductase|Glutathione Reductase]]
#[[/Enzyme Catalytic Mechanism/Nucleoside Monophosphate Kinase|Nucleotide Monophosphate Kinase]]
#[[/Enzyme Catalytic Mechanism/Phillips mechanism|Phillips mechanism]]
#[[/Enzyme Catalytic Mechanism/Isomerases|Isomerases]]
##[[/Enzyme/Isomerases/Triose Phosphate Isomerase|Triose Phosphate Isomerase]]
#[[/Enzyme Catalytic Mechanism/pingpong mechanism|Ping-Pong Mechanism]]
#[[/Enzyme/Acetyltransferase|Acetyltransferase]]
#[[/Enzyme/Deacetylase|Deacetylase]]
#[[/Enzyme/Radical-SAM Enzyme|Radical-SAM Enzyme]]
##[[/Enzyme/FeMo Cofactor and FeFe-Hydrogenase|FeMo Cofactor and FeFe-Hydrogenase]]
#[[/Enzyme Catalytic Mechanism/Summary|Summary]]
#[[/Membrane Traffic/]]
#[[/Cold-Adapted enzymes/]]
#[[/Cholesterol 24-hydroxylase/]]
#[[/Cytochrome b6f Complex/]]
#[[/Cytochrome P450 Enzyme/]]
#[[/Deaminase/]]
#[[/Drug metabolism enzymes/]]
#[[/MAO B enzyme/]]
#[[/Cyclooxygenase enzyme/]]
#[[/PLC enzyme/]]
#[[/Polynucleotide Kinase/Phosphatase enzyme/]]
#[[/NLR Sensors/]]
#[[/GTPase/]]
#[[/Palmitoyl Transferase/]]
===[[/Enzyme Regulation/]]===
#[[/Enzyme Regulation/Feedback inhibition|Feedback Inhibition]]
#[[/Enzyme Regulation/Isozymes|Isozymes]]
##[[/Enzyme Regulation/Isoenzyme analysis|Enzyme Regulation/Isoenzyme Analysis]]
##[[/Enzyme Regulation/Enzyme and Metabolite Interactions and Gene Regulation based on RNA/]]
#[[/Enzyme Regulation/Reversible covalent modification|Reversible Covalent Modification]]
##[[/Enzyme Regulation/Phosphorylation|Phosphorylation]]
##[[/Enzyme Regulation/Ubiquitination|Ubiquitination]]
###[[/Enzyme Regulation/Multitasking With Ubiquitin Through Multivalent Interactions|Multitasking With Ubiquitin Through Multivalent Interactions]]
##[[/Enzyme Regulation/Methylation|Methylation]]
##[[/Enzyme Regulation/Acetylation|Acetylation]]
##[[/Enzyme Regulation/Adenylation|Adenylation]]
##[[/Enzyme Regulation/Myristoylation|Myristoylation]]
##[[/Enzyme Regulation/Protein Lysine Acetylation in metabolism|Protein Lysine Acetylation in metabolism]]
#[[/Enzyme Regulation/Proteolytic activation|Proteolytic Activation]]
#[[/Enzyme Regulation/Enzyme Cascades|Enzyme Cascades]]
#[[/Enzyme Regulation/Transcription activation|Transcription Activation]]
#[[/Enzyme Regulation/Cooperativity|Allosteric Control]]
#[[/Enzyme Regulation/Cooperativity|Irreversible Inhibition]]
#[[/Enzyme Regulation/Amino Acid Sensing and Transporting|Amino Acid Sensing and Transporting]]
===[[/Hormones/]]===
#[[/Testosterone/]]
#[[/Estrogen/]]
#[[/Xenohormones/]]
##[[/Alkylphenols/]]
#[[/Human Chorionic Gonadotropins/]]
#[[/Pheromones/]]
#[[/Gastrin/]]
#[[/Epinephrine/]]
#[[/Human Placental Lactogen/]]
==Key Words==
# [[/General Terms/]]
#[[/Protein Terms/]]
#[[/Contentious Terms/]]
#[[/Carbohydrate Terms/]]
#[[/Lipids and Cell Membrane Terms/]]
#[[/DNA and RNA Terms/]]
#[[/Evolution and Bioinformatics Terms/]]
#[[/Enzyme Terms/]]
#[[/Apoptosis/]]
==Influential Structural Biochemists==
# [[/Dorothy Crowfoot Hodgkin/]]
# [[/Albert Claude/]]
# [[/Christian de Duve/]]
#[[/Venkatraman Ramakrishnan/]]
# [[/Roger D. Kornberg/]]
#[[/Elizabeth F. Neufeld/]]
#[[/Ivan Berkes/]]
#[[/James C. Wang/]]
#[[/Nobuhiko Katunuma/]]
#[[/Matthias W. Hentze/]]
#[[/Rosalind Franklin/]]
#[[/Shigeru Tsuiki/]]
#[[/Paul D. Boyer/]]
#[[/Maria Manasseina/]]
#[[/Frederick Sanger/]]
#[[/Edwin G. Krebs/]]
#[[/John C. Kendrew/]]
#[[/Selman A. Waksman/]]
#[[/William H. Stein/]]
#[[/Vaclaw L. Kretovich/]]
#[[/Linus Pauling/]]
==[[/Helpful Mnemonics/]]==
==[[/Natural Products/]]==
#[[/Carbon-Phosphorus Bond/]]
==[[/Taxis/]]==
#[[/Chemotaxis/]]
==[[/Biochemistry in Medicine/]]==
#[[/Carbon Monoxide: A Stealthy Killer/]]
#[[/Inherited Human Diseases Resulting from Abnormal Accumulations of Membrane Lipids/]]
#[[/Eat your Fruits and Veggies! How Vitamin C combats scurvy/]]
#[[/X-ray Crystallography/]]
#[[/Antibodies that target tumor cells/]]
==[[/Biochemistry in Animals/]]==
#[[/Vibrio fischeri: Let there be light//]]
==[[/Biochemical Role in Neuropsychiatric Disease/]]==
#[[/Schizophrenia/]]
#[[/Autism/]]
#[[/Bipolar/]]
#[[/Huntington's Disease/]]
==[[/Structural Biochemistry Paper Topics/]]==
#[[/The RNA recognition motif, a plastic RNA-binding platform to regulate post-transcriptional gene expression/]]
#[[/The Molecular Regulation of Programmed Necrotic Cell Injury/]]
#[[/Ribosome Mediated Translation Initiation for Vesicular Stomatitus Virus/]]
#[[/The MPS1 Family of Protein Kinases/]]
==References==
# The Free Dictionary. Mosby's Medical Dictionary, 8th Edition. © 2009, Elsevier., 2009. Web. 28 Oct. 2012. http://medical-dictionary.thefreedictionary.com/compartment+model.
# Zhang, Liangfang. "Controlled Drug Delivery Systems." CENG 207 Lecture 9 “Pharmacokinetics of Drug Dispersion”. University of California, San Diego, La Jolla. 10 May 2012. Lecture.
# Dhillon, Soraya and Gill, Kiren. "Basic Pharmacokinetics." 28 Oct. 2012. http://www.pharmpress.com/files/docs/clinical_pharmacokinetics_samplechapter.pdf
<!-- DON'T REMOVE THE BELOW -- THEY ARE NEEDED TO FILE THE BOOK -->
{{shelves|Chemistry|Life sciences|Class projects}}
{{Alphabetical|S}}
{{status|75%}}
<!--Reviewing Featured Book -->
gzgs0rgbn802e5isanp9g5l23smkyrh
Structural Biochemistry/Buffer
0
173269
4641550
4343211
2026-06-28T16:30:24Z
Dirk Hünniger
343292
/* General Information of Buffers */
4641550
wikitext
text/x-wiki
== General Information of Buffers ==
A significant change in [[Structural Biochemistry/pH|pH]] can lead to harmful reaction to molecular structure, biological activity and function. Protein structure can be disrupted and [[Structural Biochemistry/Enzyme|enzymes]] denatured due to the effects of pH on cellular structure. Fortunately, nature has evolved a solution to this problem; solutions that resist changes in pH are called buffers. If an acid is added to an unbuffered solution, the pH will change suddenly and proportional to the amount of acid added. However, the pH will drop gradually in buffer solution when acid is added. Buffers also mitigate the pH increase caused by adding base.
Buffers are aqueous systems that resist changes in pH as acid or base is added. They are usually composed of a weak acid and its conjugate base. Biological buffers, mixture of weak acids (the proton donors) and their conjugate bases (the proton acceptors), help maintain biomolecules in optimal ionic state of pH 7. Buffering is a result of two reversible reaction equilibrium occurring in a solution of about equal concentration of proton donor and its conjugate proton acceptor; when acid or base is added to a buffer, it results in a change in the ratio of the relative concentrations of the weak acid and its anion, or the pH. However, this change in pH is significantly greater than it would be without a buffering solution to accommodate excess hydronium or hydroxide ions.
== Properties ==
A buffer solution usually contains a weak acid and its conjugate base, but it can also contain a weak base and its conjugate acid. When H<sup>+</sup> are added to a buffer, the weak acid's conjugate base will become protonated, thereby "absorbing" the H<sup>+</sup> before the pH of the solution lowers significantly. Similarly, when OH<sup>-</sup> is added, the weak acid will become deprotonated to its conjugate base, thereby resisting any increase in pH before shifting to a new equilibrium point. In biological systems, buffers prevent the fluctuation of pH by processes that produce acid or base by-products to maintain an optimal pH.
Each conjugate acid-base pair has a characteristic pH range as an effective buffer. The buffering region is about 1 pH unit on either side of the pKa of the conjugate acid, where it has the most effectiveness for resisting large changes in pH when either acid or base is added.
== Henderson-Hasselbalch Equation ==
The equilibrium constant for the deprotonation of an acid is written as:
<math>\mathrm{K_a = \frac{[H^+][A^-]}{[HA]} }</math> (1)
Where <math>[A^-]</math> is the concentration of a conjugate base and [HA] is the concentration of an acid
Taking logarithms of both sides, we get
<math>\mathrm{\log K_a = \log H^+ - \log \frac{[A^-]}{[HA]} }</math> (2)
subtract both sides by <math>log([A^-]/[HA])</math>, we get
<math>\mathrm{pH = pK_a + \log \frac{[A^-]}{[HA]} }</math> (3)
This is the Henderson-Hasselbalch Equation. It describes the dissociation of a weak acid (HA) in the presence of its conjugate base (A<sup><small>-</small></sup>).
The midpoint of the buffering region is when one half of the acid reacts to dissociation and where the concentration of the proton donor (acid) equals that of the proton acceptor (base); the pH of the equimolar solution of acid is equal to the pKa. (When the concentration ratio for conjugated base and weak acid, [A<sup><small>-</small></sup>]/[HA], is 1:1)
== Limitations ==
Buffers usually work well at a pH close to the pKa value of the acidic component. If too much acid is added to the buffer, or if the concentration is too strong, extra protons remain free and the pH will fall sharply. This is reflected in the titration curve and is known as the buffer capacity.
== Titration curve ==
This curve demonstrated the capacity of a buffer. In the middle part of the curve, it is flat because the addition of base or acid does not affect the pH of the solution drastically - this is the '''buffer zone'''. However, once the curve extends out of the buffer region, it will increase tremendously when a small amount of acid or base added to the buffer system. This effect demonstrated the buffer capacity of the solution.
[[Image:H3PO4 titration curve.jpg|500px]]
'''H<sub><small>3</small></sub>PO<sub><small>4</small></sub> titration curve'''
[[Image:HCl_titration_curve.jpg|500px]]
'''HCl titration curve'''
== Physiological Buffers ==
Phosphoric acid system (pK<sub>a</sub> = 7.4) and carbonic acid system (pK<sub>a</sub> = 3.6) are two important buffer systems in human body. The phosphate buffer system is an effective buffer in the cytoplasm of all cells. H<sub>2</sub>PO<sub>4</sub><sup>–</sup> acts as the proton donor and HPO<sub>4</sub><sup>2–</sup>- acts as the proton acceptor.
H<sub>2</sub>PO<sub>4</sub><sup>–</sup> ⇋ H<sup>+</sup> + HPO<sub>4</sub><sup>2–</sup>
The bicarbonate buffer system is used to buffer blood plasma where the carbonic acid (H<sub>2</sub>CO<sub>3</sub>) acts as a proton donor and bicarbonate (HCO<sub>3</sub><sup>−</sup> acts as a proton acceptor.
H<sub>2</sub>CO<sub>3</sub> ⇋ HCO<sub>3</sub><sup>−</sup> + H<sup>+</sup>
In this buffer system, when the pH of the blood plasma is too high, the H<sup>+</sup> of blood plasma is lowered. The H<sub>2</sub>CO<sub>3</sub> is dissociated to H<sup>+</sup> and HCO<sub>3</sub><sup>−</sup>. The CO<sub>2</sub> from the lungs is dissolved in the blood plasma resulting in a lower pH. On the other hand if the pH of the blood plasma is too low, H<sup>+</sup> is added to the blood increasing the concentration of H<sub>2</sub>CO<sub>3</sub>. This results in an increase of CO<sub>2</sub> in the blood plasma. The increase in the partial pressure of CO<sub>2</sub> in the air space of the lungs causes extra CO<sub>2</sub> to be exhaled ultimately resulting in a raise in pH. Since the concentration of CO<sub>2</sub> can be adjusted rapidly through changes in the rate of respiration, a large reservoir of CO<sub>2</sub> can quickly adjust this equilibria to keep blood pH at a nearly constant rate.
{{BookCat}}
Buffers are also important for enzyme activities. There is an optimal pH for each enzyme. For example [[Structural Biochemistry/Proteins|protein]] cleavage enzyme pepsin works at pH 1-6 (pH=2 max), trypsin at pH 2-9 (ph=6 max) and alkaline phospatase at pH 4-10(pH=8 max).
In addition to this, some reactions should be carried out at constant pH which is provided by buffer systems.
burfb604eursd37ewhroon9i9nrgoms
Structural Biochemistry/Protein function/Regulation
0
216519
4641473
4443949
2026-06-28T12:04:00Z
Dirk Hünniger
343292
4641473
wikitext
text/x-wiki
Protein regulation is essential for biological balance. Too much or too little of any [[Structural Biochemistry/Proteins|protein ]]reactivity can cause severe biological damage.
==Specific Diseases==
===Alzheimer's Disease===
Alzheimer's patients have "plaques" in their brains, which are essentially large chunks of a certain protein believed to contribute to neuronal death. It is also a dementia that gets worse over time. There is no cure for Alzheimer's disease. As you can see in the picture, someone who has Alzheimer's has extreme loss in the different functions of the brain.
Alzheimer's patients have this protein's regulation pathway disturbed, causing it to be overly expressed. Protein regulation is also referred to as [[Structural Biochemistry/Enzyme Regulation|Enzyme Regulation]]. Furthermore, the study of these protein regulation pathways have lead to much growth in the creation of medicinal and pharmaceutical products.
[[File:Alzheimer's disease brain comparison.jpg]]
===Hunter Syndrome===
Hunter syndrome is a genetic disease in which mucopolysaccharides do not degrade accurately. As a result, mucopolysaccharides will accumulate inside the body. The main cause of this accumulation is the absence of iduronate sulfatase enzyme. Some of the signs for recognition of the syndrome are big heads and different facial characteristics. The syndrome can be found out with urine test. However, this test is not trusted. The study of fibroblasts that extract from body’s skin is more effective. The gene that contributes to the cause of Hunter syndrome is residing on the X-recessive chromosome. Since males only have one X chromosome, the chance that males inherit this syndrome is higher than that of females.
The problem with Hunter syndrome is how the body is unable to break down mucopolysaccharides, which make up proteoglycan that is part of the extracellular matrix. As a consequence, the adding up of mucopolysaccharides becomes an obstacle for other cells in the body to carry out their jobs. This incident may lead to significant effects that can harm the body. For instance, some early side effects of Hunter syndrome can be the normal sickness such as cold and runny nose.
Hunter syndrome results in a certain effects upon the body. Thus, people who inherit the syndrome tend to have common characteristics. The more extreme consequences of Hunter syndrome include mental retardation, heart problem, joint stiffness, etc. Bone marrow replacement was proven to help expanding the life span of Hunter syndrome patients. Unfortunately, it does not solve the problem of mental retardation. Elaprase, a lysosomal enzyme iduronate sulfatase that can be made by recombinant DNA technique, has demonstrated to be an effective cure for Hunter syndrome through the replace of enzyme. Nevertheless, elaprase is indeed very expensive.
===Hurler Syndrome===
Hurler Syndrome is an inherited disease and is caused by a recessive mutation (both parents would need to have passed down the trait). Historically, it was thought to be caused by the excessive synthesis of 2 mucopolysaccharides: dermatan sulfate and heparan sulfate. Some scientists believed the excessive synthesis of the 2 molecules to be caused by a faulty regulation pathway. Elizabeth Neufeld tested this hypothesis and found it to be false; she found the cause of the disorder to be the inadequate degradation of the 2 sugars. While normal cells leveled off production after a certain point, cells affected by the mutation continued production past normal levels.
Correction of this disease is easily possible in vitro (and works to an extent in vivo.) The addition of healthy cells in the same culture as mutated cells in vitro caused normal levels of dermatan sulfate and heparan sulfate to be created. The normal cells excrete a corrective factor/enzyme in the medium which is taken up by the mutated cells. This enzyme is crucial in the degradation of the 2 mucopolysaccharides; furthermore, very little of it is necessary to fully correct the mutated cells. There are many problems with using α-L-Iduronidase as treatment in vivo; the main issue being that various tissues respond at various degrees to the medication. Most importantly, the central nervous system does not uptake any of the intravenously injected enzyme because of the blood-brain barrier. On top of this issue, a significant number of people with this disease have neurological diseases that need to uptake this enzyme somehow.
α-L-Iduronidase was found to be the key enzyme in restoring proper degradation of dermatan sulfate and heparan sulfate. It was found though that α-L-Iduronidase from some cells was not corrective. Research showed that the carbohydrate mannose 6-phosphate was responsible for proper uptake of the enzyme; a mutation in the structure of it caused the α-L-Iduronidase product to not be taken up properly by cells affected by Hurler Syndrome.
===Sanfilippo Syndrome===
Sanfilippo Syndrome is within a set of neurodegenerative diseases called tauopathies (the most common of which is Alzheimer's Disease). Although there are 4 subtypes of Sanfilippo Syndrome, they are all characterized by reduced degradation of heparan sulfate (see Hurler Syndrome section) due to reduced levels of a lysosomal enzyme.
It was found in a mouse model (MPS IIIB) that there were significantly increased levels of the protein lysozyme; increased levels of this disease were found to cause the creation of hyperphosphorylated tau which is found in the brains of Alzheimer's patients and patients with other tauopathies. Significant research is being done in Alzheimer's disease which may carry over to Sanfilippo Syndrome as well due to their similarities.
1. 4 different subtypes:
Each Sanfilippo subtype is caused by the deficiency of each specific enzyme: heparin N-sulfatase for MPS-III A, N-acetyl-alpha-D-glucosaminidase for MPS-III B, acetyl-CoA: alpha-glucosaminide acetyltransferase for MPS-III C, and N-acetylglucosamine-G-sulfate sulfatase for MPS-III D. Among these four subtypes, Sanfilippo syndrome type A is the most prevalent (60%), followed by B (30%), D (5%), and C (6%). In total, 47% of all cases of mucopolysaccharidosis diagnosed is related with Sanfilippo disease.
2. Mortality/ Morbidity:
Patients with Sanfilippo syndrome tend to develop Central Nervous System degeneration and usually end up at a vegetative state. They usually die before the age of 20 due to cardiopulmonary arrest because of airway obstruction or infection in the pulmonary pathway. Among these 4 subtypes, MPS-III A is the most severe one due to early death in patients (usually during their teenage years).
Sanfilippo syndrome has an equal effect on both males and females as well as on different races since its main cause is the inheritance in an autosomal recessive pattern which has no relations with the sex chromosomes.
3. Diagnosis and History:
In terms of diagnosis, these four subtypes are not indistinguishable clinically; therefore, the only determining factor to identify each specific subtype is the different genes that are responsible for that subtype.
Usually, affected individuals show no symptoms and develop normally during the first two years of their lives. Onset usually takes place between the age of 2 and 6. Developmental delays in infancy may be shown in some of them. Growth might be slowed down at the age of 3 (e.g. short stature). Patients might also become hyperactive and behave aggressively and destructively. Besides disturbing the sleep pattern in patients, this syndrome also interferes severely into the mental development of affected patients – speech impairment, hearing loss, etc. At the same time, patients might show shortened attention spans and find it challenging to concentrate and to be able to perform academic tasks at schools.
By the age of 10, patients’ daily activities and movements are severely limited. They often are in need of wheelchairs to accommodate them and might even have swallowing difficulties and seizures.
Some other physical symptoms might also be shown such as carious teeth, enlarged liver and spleen, diarrhea (which is believed is due to lysosomal glycosaminoglycans (GAG) storage in the neurons of the myenteric plexus3.)
Respiratory compromise can occur and is related to airway obstruction due to anatomical changes, excessive thick secretions and neurologic impairment. Upper respiratory tract infections and sinopulmonary disease are common.
4. Work-up:
In order to diagnose patients with Sanfilippo Syndrome, specific enzymatic assays in cultured skin fibroblasts and in peripheral blood leukocytes are used (e.g. enzymatic cell analysis). One indicating sign for this syndrome is the increase in the level of heparan sulfate in the urinary secretion. Thus a total quantitative or a fractionation test are carried by performing either electrophoresis or chromatography with the purpose of measuring how much Glycosaminoglycans (GAGs) is in the urine. Due to the higher level of GAGs in newborns and infants, age-specific controls and fractionation must be included to accurately quantify the level of GAGs.
Imaging studies can also be used to look for changes in brain structure since the spectrum of skeletal changes can be seen in patients with Sanfilippo syndrome.
5. Treatment:
Currently, there is no available treatment for the real cause of Sanfilippo syndrome. Bone marrow transplantation and Enzyme replacement therapy only work for patients with mucopolysaccharidosis I, II, and VI (not III). However, some promising therapies are making their ways to be FDA-approved.
==References==
* Defendi, Germaine, [http://emedicine.medscape.com/article/948540-overview]
* Neufeld, Elizabeth F, [http://www.ncbi.nlm.nih.gov/pubmed/21675915?dopt=Abstract|"From serendipity to therapy."]
* [http://en.wikipedia.org/wiki/Hunter_syndrome]
* [http://www.ncbi.nlm.nih.gov/pubmedhealth/PMH0002183/]
{{BookCat}}
h6dlfzogry9g57y878oosiqlyc3odhh
The Linux Kernel/System
0
226981
4641515
4640301
2026-06-28T14:48:31Z
Conan
3188
System: sysctl under procfs, kallsyms, notifier chains, resource management
4641515
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:System functionality}}</noinclude>
{| style="float: right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#edf" |system
|-
| bgcolor="#cdf" |[[#System interfaces|system interfaces]]
|-
| bgcolor=#abe |[[#Virtualization|virtualization]]
|-
| bgcolor="#aad" |[[#Driver Model|Driver Model]]
|- style=""
| bgcolor="#99c" |[[../Modules|modules]]
|-
| bgcolor="#88a" |[[#Peripheral buses|buses]], [[The Linux Kernel/PCI|PCI]]
|-
| bgcolor="#889" |[[#Hardware interfaces|hardware interfaces]], [[#Booting and halting|[re]booting]]
|}
The System functionality is named after system calls and sysfs.
It differs from other kernel functionalities.
Its subsystems are not tightly coupled across layers but instead provide infrastructure to other parts of the kernel.
For example, the System Calls subsystem offers a common interface layer for all functionalities exposed to user space.
== System interfaces ==
There are several mechanisms available in Linux for user space system interfaces.
One of the most common mechanisms is through {{w|system call}}s, which are functions that allow user space applications to request services from the kernel, such as opening files, creating processes, and accessing system resources.
Another mechanism for user space communication is through {{w|device file}}s, which are special files that represent physical or virtual devices, such as storage devices, network interfaces, and various peripheral devices.
User space applications can communicate with these devices by reading from and writing to their corresponding device files.
In summary, Linux kernel provides several mechanisms for user space communication, including system calls, device files, {{w|procfs}}, {{w|sysfs}}, and devtmpfs.
These mechanisms enable user space applications to communicate with the kernel and access system resources in a safe and controlled manner.
⚲ APIs:
: kernel space API for user space
:: {{The Linux Kernel/include|uapi}}
:: {{The Linux Kernel/source|arch/x86/include/uapi}} – x86 user-space API headers
:: {{The Linux Kernel/man|2|ioctl}}
:: [[#System calls|System calls]]
:: [[#Device files|Device files]]
: user space API for kernel space
:: {{The Linux Kernel/include|linux/uaccess.h}}:
:: {{The Linux Kernel/id|copy_to_user}}
:: {{The Linux Kernel/id|copy_from_user}}
📖 References
: {{The Linux Kernel/doc|User-space API guides|userspace-api}}
: {{w|User space}}
: {{w|Linux kernel interfaces}}
: [http://safari.oreilly.com/0596005652/understandlk-CHP-11 ULK3 Chapter 11. Signals]
===System calls===
System calls are the fundamental interface between user space applications and the Linux kernel.
They provide a way for programs to request services from the operating system, such as opening a file, allocating memory, or creating a new process.
In the Linux kernel, system calls are implemented as functions that can be invoked by user space programs using a software interrupt mechanism.
The Linux kernel provides hundreds of system calls, each with its own unique functionality.
These system calls are organized into categories such as process management, file management, network communication, and memory management.
User space applications can use these system calls to interact with the kernel and access the underlying system resources.
⚲ API
: [[../Syscalls|Table of syscalls]]
: {{The Linux Kernel/man|2|syscalls}}
⚙️ Internals
: {{The Linux Kernel/include|linux/syscalls.h}}
: {{The Linux Kernel/source|kernel/entry}} – common syscall entry/exit and exception handling
: {{The Linux Kernel/id|syscall_init}} installs {{The Linux Kernel/id|entry_SYSCALL_64}}
: {{The Linux Kernel/man|2|syscall}} ↪
:: {{The Linux Kernel/id|entry_SYSCALL_64}} ↯ call hierarchy:
::: {{The Linux Kernel/id|do_syscall_64}}
:::: {{The Linux Kernel/id|sys_call_table}}
📖 References
: {{w|System call}}
: [http://man7.org/linux/man-pages/dir_section_2.html Directory of system calls, man section 2]
: Anatomy of a system call, [https://lwn.net/Articles/604287/ part 1] and [https://lwn.net/Articles/604515/ part 2]
: {{The Linux Kernel/ltp|kernel|syscalls}}
💾 ''Historical''
: [http://safari.oreilly.com/0596005652/understandlk-CHP-10 ULK3 Chapter 10. System Calls]
=== Device files ===
Classic UNIX devices are [[../Human_interfaces#Char_devices|Char devices]] used as byte streams with {{The Linux Kernel/man|2|ioctl}}.
⚲ API
ls /dev
cat /proc/devices
cat /proc/misc
Examples: {{The Linux Kernel/id|misc_fops}} {{The Linux Kernel/id|usb_fops}} {{The Linux Kernel/id|memory_fops}}
: {{The Linux Kernel/doc|Allocated devices|admin-guide/devices.html}}
: {{The Linux Kernel/source|drivers/char}} – miscellaneous byte stream devices
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch13.html Chapter 13. I/O Architecture and Device Drivers]
==== hiddev ====
⚠️ Warning: confusion. hiddev isn't real [[../Human_interfaces#HID|human interface device]]! It reuses USBHID infrastructure. hiddev is used for example for monitor controls and Uninterruptible Power Supplies.
This module supports these devices separately using a separate event interface on /dev/usb/hiddevX (char 180:96 to 180:111) (⚙️ {{The Linux Kernel/id|HIDDEV_MINOR_BASE}})
⚲ API
: {{The Linux Kernel/include|uapi/linux/hiddev.h}}
: {{The Linux Kernel/id|HID_CONNECT_HIDDEV}}
⚙️ Internals
: [https://elixir.bootlin.com/linux/latest/K/ident/CONFIG_USB_HIDDEV CONFIG_USB_HIDDEV]
: {{The Linux Kernel/include|linux/hiddev.h}}
: {{The Linux Kernel/id|hiddev_event}}
: {{The Linux Kernel/source|drivers/hid/usbhid/hiddev.c}}, {{The Linux Kernel/id|hiddev_fops}}
📖 References
: {{The Linux Kernel/doc|HIDDEV - Care and feeding of your Human Interface Devices|hid/hiddev.html}}
📖 References
: {{w|Device file}}
===Administration===
🔧 TODO
📖 References
: {{The Linux Kernel/man|7|netlink}}
: {{The Linux Kernel/doc|The Linux kernel user’s and administrator’s guide|admin-guide}}
==== procfs ====
The ''proc filesystem'' (''procfs'') is a special filesystem that presents information about processes and other system information in a hierarchical file-like structure, providing a more convenient and standardized method for dynamically accessing process data held in the kernel than traditional tracing methods or direct access to kernel memory.
Typically, it is mapped to a mount point named <code>/proc</code> at boot time.
The proc file system acts as an interface to internal data structures in the kernel.
It can be used to obtain information about the system and to change certain kernel parameters at runtime.
<code>/proc</code> includes a directory for each running process —including kernel threads— in directories named <code>/proc/PID</code>, where <code>PID</code> is the process number. Each directory contains information about one process, including the command that originally started the process (<code>/proc/PID/cmdline</code>), the names and values of its environment variables (<code>/proc/PID/environ</code>), a symlink to its working directory (<code>/proc/PID/cwd</code>), another symlink to the original executable file —if it still exists— (<code>/proc/PID/exe</code>), a couple of directories with symlinks to each open file descriptor (<code>/proc/PID/fd</code>) and the status —position, flags, ...— of each of them (<code>/proc/PID/fdinfo</code>), information about mapped files and blocks like heap and stack (<code>/proc/PID/maps</code>), a binary image representing the process's virtual memory (<code>/proc/PID/mem</code>), a symlink to the root path as seen by the process (<code>/proc/PID/root</code>), a directory containing hard links to any child process or thread (<code>/proc/PID/task</code>), basic information about a process including its run state and memory usage (<code>/proc/PID/status</code>) and much more.
📖 References
: {{w|procfs}}
: {{The Linux Kernel/man|5|procfs}}
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|linux/proc_fs.h}}
: {{The Linux Kernel/source|fs/proc}} – procfs implementation
:: {{The Linux Kernel/include|linux/sysctl.h}} – /proc/sys runtime kernel tuning:
:: {{The Linux Kernel/source|fs/proc/proc_sysctl.c}} – filesystem interface
:: {{The Linux Kernel/source|kernel/sysctl.c}} – read/write handlers (proc_dointvec, proc_dostring, ...)
==== sysfs ====
sysfs is a pseudo-file system that exports information about various kernel subsystems, hardware devices, and associated device drivers from the kernel's device model to user space through virtual files.
In addition to providing information about various devices and kernel subsystems, exported virtual files are also used for their configuring.
Sysfs is designed to export the information present in the device tree, which would then no longer clutter up procfs.
Sysfs is mounted under the <code>/sys</code> mount point.
⚲ API
: {{The Linux Kernel/include|linux/sysfs.h}}
📖 References
: {{w|sysfs}}
: {{The Linux Kernel/man|5|sysfs}}
: {{The Linux Kernel/doc|sysfs - filesystem for exporting kernel objects|filesystems/sysfs.html}}
: {{The Linux Kernel/source|fs/sysfs}} – sysfs implementation
: {{The Linux Kernel/source|fs/kernfs}} – kernfs, the backing filesystem for sysfs and cgroups
==== devtmpfs ====
devtmpfs is a hybrid {{w|User space and kernel space|kernel/user space}} approach of a device filesystem to provide nodes before udev runs for the first time.
📖 References
: {{w|Device file}}
: {{The Linux Kernel/source|drivers/base/devtmpfs.c}} – kernel-maintained tmpfs /dev
==== configfs ====
{{The Linux Kernel/doc|configfs|filesystems/configfs.html}} is a userspace-driven kernel object configuration filesystem mounted at /sys/kernel/config/.
Unlike sysfs (which exposes kernel-created objects), configfs lets userspace create and configure kernel objects via mkdir/rmdir.
Used by USB gadget, NVMe target, ACPI, null_blk, GPIO simulator and other subsystems.
⚲ API:
: {{The Linux Kernel/include|linux/configfs.h}}
:: {{The Linux Kernel/id|config_item}} – base object, created by userspace mkdir
:: {{The Linux Kernel/id|config_group}} – container for config_items
:: {{The Linux Kernel/id|configfs_attribute}} – per-item readable/writable attribute
:: {{The Linux Kernel/id|configfs_subsystem}} – top-level subsystem registration
:: {{The Linux Kernel/id|configfs_register_subsystem}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/configfs}}
== Virtualization ==
🔧 TODO
See {{w|Kernel-based Virtual Machine}}
📖 References
: {{The Linux Kernel/doc|Virtualization Support|virt/}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/3-virtualization
=== Containerization ===
{{w|OS-level virtualization|Containerization}} is a powerful technology that has revolutionized the way software applications are developed, deployed, and run.
At its core, containerization provides an isolated environment for running applications, where the application has all the necessary dependencies and can be easily moved from one environment to another without worrying about any compatibility issues.
Containerization technology has its roots in the {{w|chroot}} command, which was introduced in the Unix operating system in the 1979.
Chroot provided a way to change the root directory of a process, effectively creating a new isolated environment with its own file system hierarchy.
However, this early implementation of containerization had limited functionality, and it was difficult to manage and control the various processes running within the container.
In the early 2000s, the Linux kernel introduced {{w|Linux namespaces|namespaces}} and {{w|cgroups|control groups}} to provide a more robust and scalable containerization solution.
'''Namespaces''' allow processes to have their own isolated view of the system, including the file system, network, and process ID space, while '''control groups''' provide fine-grained control over the resources allocated to each container, such as CPU, memory, and I/O.
Using these kernel features, containerization platforms such as {{w|Docker (software)|Docker}} and {{w|Kubernetes}} have emerged as popular solutions for building and deploying containerized applications at scale.
Containerization has become an essential tool for modern software development, allowing developers to easily package applications and deploy them in a consistent and predictable manner across different environments.
==== Resources usage and limits ====
⚲ API
: {{The Linux Kernel/man|2|chroot}} – change root directory
: {{The Linux Kernel/man|2|sysinfo}} – return system information
: {{The Linux Kernel/man|2|getrusage}} – get resource usage
: get/set resource limits:
:: {{The Linux Kernel/man|2|getrlimit}}
:: {{The Linux Kernel/man|2|setrlimit}}
:: {{The Linux Kernel/man|2|prlimit64}}
📖 References
: {{w|chroot}}
==== Namespaces ====
{{w|Linux namespaces}} provide the way to isolate and virtualize different aspects of the operating system.
Namespaces allow multiple instances of an application to run in isolation from each other, without interfering with the host system or other instances.
🔧 TODO
⚲ API
: /proc/self/ns
: {{The Linux Kernel/man|8|lsns}}, {{The Linux Kernel/man|2|ioctl_ns}} ↪ {{The Linux Kernel/id|ns_ioctl}}
: {{The Linux Kernel/man|1|unshare}}, {{The Linux Kernel/man|2|unshare}}
: {{The Linux Kernel/man|1|nsenter}}, {{The Linux Kernel/man|2|setns}}
: {{The Linux Kernel/man|2|clone3}} ↪ {{The Linux Kernel/id|clone_args}}
: {{The Linux Kernel/include|linux/ns_common.h}}
: {{The Linux Kernel/include|linux/proc_ns.h}}
: namespaces definition
:: {{The Linux Kernel/id|uts_namespace}}
:: {{The Linux Kernel/id|ipc_namespace}}
:: {{The Linux Kernel/id|mnt_namespace}}
:: {{The Linux Kernel/id|pid_namespace}}
:: {{The Linux Kernel/include|net/net_namespace.h}} - struct net
:: {{The Linux Kernel/id|user_namespace}}
:: {{The Linux Kernel/id|time_namespace}}
:: {{The Linux Kernel/id|cgroup_namespace}}
⚙️ Internals
: {{The Linux Kernel/id|init_nsproxy}} - struct of namespaces
: {{The Linux Kernel/source|kernel/nsproxy.c}} – namespace proxy management
: {{The Linux Kernel/source|fs/namespace.c}} – mount namespace
: {{The Linux Kernel/source|fs/proc/namespaces.c}} – /proc namespace entries
: {{The Linux Kernel/source|net/core/net_namespace.c}} – network namespace
: {{The Linux Kernel/source|kernel/time/namespace.c}} – time namespace
: {{The Linux Kernel/source|kernel/user_namespace.c}} – user namespace
: {{The Linux Kernel/source|kernel/pid_namespace.c}} – PID namespace
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace
: {{The Linux Kernel/source|kernel/cgroup/namespace.c}} – cgroup namespace
: {{The Linux Kernel/source|ipc/namespace.c}} – IPC namespace
📖 References
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
: {{The Linux Kernel/man|7|ipc_namespaces}}
: {{The Linux Kernel/man|7|mount_namespace}}
: {{The Linux Kernel/man|7|pid_namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|user_namespaces}}
: {{The Linux Kernel/man|7|time_namespaces}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
=== Control groups ===
{{w|cgroups}} are used to limit and control the resource usage of groups of processes. They allow administrators to set limits on CPU usage, memory usage, disk I/O, network bandwidth, and other resources, which can be useful for managing system performance and preventing resource contention.
There are two versions of cgroups.
Unlike v1, cgroup v2 has only a single process hierarchy and discriminates between processes, not threads.
Here are some of the key differences between cgroups v1 and v2:
{| class="wikitable"
|+
!
!cgroups v1
!cgroups v2
|-
|Hierarchy
|each subsystem had its own hierarchy, which could lead to complexity and confusion
|unified hierarchy, which simplifies management and enables better resource allocation
|-
|Controllers
|has several subsystems that are controlled by separate controllers, each with its own set of configuration files and parameters
|controllers are consolidated into a single "cgroup2" controller, which provides a unified interface for managing resources
|-
|Resource distribution
|distributes resources among groups of processes based on proportional sharing, which can lead to unpredictable results
|resources are distributed based on a "weighted fair queuing" algorithm, which provides better predictability and fairness
|}
Cgroups v2 is not backward compatible with cgroups v1, which means that migrating from v1 to v2 can be challenging and requires careful planning.
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/cgroup.h}}
: {{The Linux Kernel/include|linux/cgroup-defs.h}}
:: {{The Linux Kernel/id|css_set}} – holds set of reference-counted pointers to {{The Linux Kernel/id|cgroup_subsys_state}} objects
:: {{The Linux Kernel/id|cgroup_subsys}}
: {{The Linux Kernel/include|linux/cgroup_subsys.h}} – list of cgroup subsystems
⚙️ Internals
: {{The Linux Kernel/id|cg_list}} – list of {{The Linux Kernel/id|css_set}} in task_struct
: {{The Linux Kernel/source|kernel/cgroup}} – cgroup core
: {{The Linux Kernel/id|cgroup_init}}
: {{The Linux Kernel/id|cgroup2_fs_type}}
: {{The Linux Kernel/source|tools/testing/selftests/cgroup}} – cgroup self-tests
📖 References
: [[The_Linux_Kernel/System/CGroup_v2|Control Groups v2]]
: {{The Linux Kernel/doc|Control Groups v1|admin-guide/cgroup-v1/}}
: {{The Linux Kernel/man|1|systemd-cgtop}}
: {{The Linux Kernel/man|5|systemd.slice}} – slice unit configuration
: {{The Linux Kernel/man|7|cgroups}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
: {{The Linux Kernel/doc|CFS Bandwidth Control for cgroups|scheduler/sched-bwc.html}}
: {{The Linux Kernel/doc|Real-Time group scheduling|scheduler/sched-rt-group.html}}
: [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/latest/html/managing_monitoring_and_updating_the_kernel/setting-limits-for-applications_managing-monitoring-and-updating-the-kernel Understanding control groups, RHEL]
📚 Further reading
: https://github.com/containers
: [https://github.com/mk-fg/fgtk#cgrc cgrc tool]
💾 Historical
: https://github.com/mk-fg/cgroup-tools for cgroup v1
== Driver Model ==
The Linux driver model (or Device Model, or just DM) is a framework that provides a consistent and standardized way for device drivers to interface with the kernel.
It defines a set of rules, interfaces, and data structures that enable device drivers to communicate with the kernel and perform various operations, such as managing resources, lifecycle and more.
DM core structure consists of DM classes, DM buses, DM drivers and DM devices.
=== kobject ===
In the Linux kernel, a {{The Linux Kernel/id|kobject}} is a fundamental data structure used to represent kernel objects and provide a standardized interface for interacting with them.
A kobject is a generic object that can represent any type of kernel object, including devices, files, modules, and more.
The kobject data structure contains several fields that describe the object, such as its name, type, parent, and operations.
Each kobject has a unique name within its parent object, and the parent-child relationships form a hierarchy of kobjects.
Kobjects are managed by the kernel's sysfs file system, which provides a virtual file system that exposes kernel objects as files and directories in the user space.
Each kobject is associated with a sysfs directory, which contains files and attributes that can be read or written to interact with the kernel object.
⚲ Infrastructure API
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/id|kobject}}
: {{The Linux Kernel/doc|Kernel objects manipulation|driver-api/basics.html#kernel-objects-manipulation}}
: 🔧 TODO
=== Classes ===
A class is a higher-level view of a device that abstracts out low-level implementation details.
Drivers may see a NVME storage or a SATA storage, but, at the class level, they are all simply {{The Linux Kernel/id|block_class}} devices.
Classes allow user space to work with devices based on what they do, rather than how they are connected or how they work.
General DM classes structure match {{w|composite pattern}}.
⚲ API
: ls /sys/class/
: {{The Linux Kernel/id|class_register}} registers {{The Linux Kernel/id|class}}
: {{The Linux Kernel/include|linux/device/class.h}}
👁 Examples: {{The Linux Kernel/id|input_class}}, {{The Linux Kernel/id|block_class}} {{The Linux Kernel/id|net_class}}
=== Buses ===
A {{w|peripheral bus}} is a channel between the processor and one or more peripheral devices.
A DM bus is {{w|Proxy pattern|proxy}} for a peripheral bus.
General DM buses structure match {{w|composite pattern}}.
For the purposes of the device model, all devices are connected via a bus, even if it is an internal, virtual, {{The Linux Kernel/id|platform_bus_type}}.
Buses can plug into each other.
A USB controller is usually a PCI device, for example.
The device model represents the actual connections between buses and the devices they control.
A bus is represented by the {{The Linux Kernel/id|bus_type}} structure.
It contains the name, the default attributes, the bus' methods, PM operations, and the driver core's private data.
⚲ API
: ls /sys/bus/
: {{The Linux Kernel/id|bus_register}} registers {{The Linux Kernel/id|bus_type}}
: {{The Linux Kernel/include|linux/device/bus.h}}
👁 Examples: {{The Linux Kernel/id|usb_bus_type}}, {{The Linux Kernel/id|hid_bus_type}}, {{The Linux Kernel/id|pci_bus_type}}, {{The Linux Kernel/id|scsi_bus_type}}, {{The Linux Kernel/id|platform_bus_type}}
: [[#Peripheral_buses|Peripheral buses]]
=== Drivers ===
⚲ API
: ls /sys/bus/:/drivers/
: {{The Linux Kernel/id|module_driver}} - simple common driver initializer, 👁 for example used in {{The Linux Kernel/id|module_pci_driver}}
: {{The Linux Kernel/id|driver_register}} registers {{The Linux Kernel/id|device_driver}} - basic device driver structure, one per all device instances.
: {{The Linux Kernel/include|linux/device/driver.h}}
👁 Examples: {{The Linux Kernel/id|hid_generic}} {{The Linux Kernel/id|usb_register_device_driver}}
'''Platform drivers'''
: {{The Linux Kernel/id|module_platform_driver}} registers {{The Linux Kernel/id|platform_driver}} (platform wrapper of {{The Linux Kernel/id|device_driver}}) with {{The Linux Kernel/id|platform_bus_type}}
: {{The Linux Kernel/include|linux/platform_device.h}}
👁 Examples: {{The Linux Kernel/id|gpio_mouse_device_driver}}
=== Devices ===
⚲ API
: ls /sys/devices/
: {{The Linux Kernel/id|device_register}} registers {{The Linux Kernel/id|device}} - the basic device structure, per each device instance
: {{The Linux Kernel/include|linux/device.h}} – {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/doc|Device Resource Management|driver-api/basics.html#device-resource-management}}, devres, devm ...
👁 Examples: {{The Linux Kernel/id|platform_bus}} mousedev_create
'''Platform devices'''
: {{The Linux Kernel/id|platform_device}} - platform wrapper of {{The Linux Kernel/doc|struct <big>device</big> - the basic device structure|driver-api/infrastructure.html#c.device}}, contains resources associated with the device
: it can be created dynamically by {{The Linux Kernel/id|platform_device_register_simple}} or {{The Linux Kernel/id|platform_device_alloc}}. Or registered with {{The Linux Kernel/id|platform_device_register}}.
: {{The Linux Kernel/id|platform_device_unregister}} - releases device and associated resources
👁 Examples: {{The Linux Kernel/id|add_pcspkr}}
⚲ API 🔧 TODO
: platform_device_info platform_device_id platform_device_register_full platform_device_add
: platform_device_add_data platform_device_register_data platform_device_add_resources
: attribute_group dev_pm_ops
<hr>
⚙️ Internals
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/source|lib/kobject.c}} – kobject library
: {{The Linux Kernel/source|drivers/base/platform.c}} – platform bus for legacy devices
: {{The Linux Kernel/source|drivers/base/core.c}} – driver model core
: {{The Linux Kernel/include|linux/notifier.h}}, {{The Linux Kernel/source|kernel/notifier.c}} – notifier chains for event broadcasting
📖 References
: {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
: {{The Linux Kernel/doc|Driver Model|driver-api/driver-model}}
:: {{The Linux Kernel/doc|The Linux Kernel Device Model|driver-api/driver-model/overview.html}}
:: {{The Linux Kernel/doc|Platform Devices and Drivers|driver-api/driver-model/platform.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_model.html Linux Device Model, by linux-kernel-labs]
{{:The Linux Kernel/Modules}}
== {{w|Peripheral bus}}es ==
Peripheral buses are the communication channels used to connect various peripheral devices to a computer system.
These buses are used to transfer data between the peripheral devices and the system's processor or memory.
In the Linux kernel, peripheral buses are implemented as drivers that enable communication between the operating system and the hardware.
Peripheral buses in the Linux kernel include USB, PCI, SPI, I2C, and more.
Each of these buses has its own unique characteristics, and the Linux kernel provides support for a wide range of peripheral devices.
The PCI (Peripheral Component Interconnect) bus is used to connect internal hardware devices in a computer system.
It is commonly used to connect graphics cards, network cards, and other expansion cards.
The Linux kernel provides a PCI bus driver that enables communication between the operating system and the devices connected to the bus.
The USB (Universal Serial Bus) is one of the most commonly used peripheral buses in modern computer systems.
It allows devices to be hot-swapped and supports high-speed data transfer rates.
🔧 TODO: device enumeration
⚲ API
: Shell interface: ls /proc/bus/ /sys/bus/
See also [[#Buses|Buses of Driver Model]]
See [[../Human_interfaces#Input_devices|'''Input: keyboard, mouse etc''']]
'''PCI'''
⚲ Shell API
: lspci -vv
: column -t /proc/bus/pci/devices
Main article: [[The_Linux_Kernel/PCI|PCI]]
'''USB'''
⚲ Shell API
: lsusb -v
: ls /sys/bus/usb/
: cat /proc/bus/usb/devices
⚙️ Internals
: {{The Linux Kernel/source|drivers/usb}} – USB subsystem
📖 References
: {{The Linux Kernel/doc|USB|usb}}
: [http://lwn.net/images/pdf/LDD3/ch13.pdf LDD3:USB Drivers]
'''Other buses'''
: {{The Linux Kernel/source|drivers/bus}} – bus driver implementations
'''Buses for 🤖 embedded devices:'''
: {{The Linux Kernel/include|linux/gpio/driver.h}} {{The Linux Kernel/include|linux/gpio.h}} {{The Linux Kernel/source|drivers/gpio}} {{The Linux Kernel/source|tools/gpio}}
: {{The Linux Kernel/source|drivers/i2c}} – I2C bus framework, https://i2c.wiki.kernel.org
'''SPI'''
⚲ API
: {{The Linux Kernel/include|linux/spi/spi.h}}
: {{The Linux Kernel/source|tools/spi}} – SPI user-space tools
⚙️ Internals
: {{The Linux Kernel/source|drivers/spi}} – SPI bus framework
: {{The Linux Kernel/id|spi_register_controller}}
: {{The Linux Kernel/id|spi_controller_list}}🚧
📖 References
: {{The Linux Kernel/doc|SPI|spi}}
==Hardware interfaces==
Hardware interfaces are basic part of any operating, enabling communication between the processor and other HW components of a computer system: memory, peripheral devices and buses, various controllers.
[[../Multitasking/CPU#Interrupts|Interrupts]]
===I/O ports and registers===
I/O ports and registers are electronic components in computer systems that enable communication between CPU and other electronic controllers and devices.
⚲ API
{{The Linux Kernel/include|asm-generic/io.h}} — generic I/O port emulation.
: {{The Linux Kernel/id|ioport_map}}
: {{The Linux Kernel/id|ioread32}} / {{The Linux Kernel/id|iowrite32}} ...
: {{The Linux Kernel/id|readl}}/ {{The Linux Kernel/id|writel}} ...
: The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space:
: {{The Linux Kernel/id|inl}}/ {{The Linux Kernel/id|outl}} ...
{{The Linux Kernel/include|linux/ioport.h}}, {{The Linux Kernel/source|kernel/resource.c}} — I/O and memory resource management.
: {{The Linux Kernel/id|request_mem_region}}
{{The Linux Kernel/source|arch/x86/include/asm/io.h}} – x86 I/O port and MMIO access
Functions for memory mapped registers:
{{The Linux Kernel/id|ioremap}} ...
==== regmap ====
The regmap subsystem provides a standardized abstraction layer for register access in device drivers.
It simplifies interactions with hardware registers across various bus types,
such as I2C, SPI, and MMIO, by offering a consistent API.
⚲ API
{{The Linux Kernel/include|linux/regmap.h}} — register map access API
: the most frequently used functions:
: {{The Linux Kernel/id|regmap_update_bits}}
: {{The Linux Kernel/id|regmap_write}}
: {{The Linux Kernel/id|regmap_read}}
: {{The Linux Kernel/id|regmap_reg_range}}
: {{The Linux Kernel/id|regmap_bulk_read}}
: {{The Linux Kernel/id|devm_regmap_init_i2c}}
: {{The Linux Kernel/id|regmap_set_bits}}
: {{The Linux Kernel/id|regmap_field_write}}
: {{The Linux Kernel/id|regmap_bulk_write}}
: {{The Linux Kernel/id|regmap_clear_bits}}
: {{The Linux Kernel/id|regmap_write_bits}}
: {{The Linux Kernel/id|regmap_config}}
: {{The Linux Kernel/id|regmap_read_poll_timeout}}
: {{The Linux Kernel/id|devm_regmap_init_mmio}}
⚙️ Internals
{{The Linux Kernel/source|drivers/base/regmap}} – register map abstraction layer
===Hardware Device Drivers===
Keywords: firmware, hotplug, clock, mux, pin
⚙️ Internals
: {{The Linux Kernel/source|drivers/acpi}} – ACPI drivers
: {{The Linux Kernel/source|drivers/base}} – driver model core
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/hwmon}} – hardware monitoring
: {{The Linux Kernel/source|drivers/thermal}} – thermal management
: {{The Linux Kernel/source|drivers/pinctrl}} – pin control and multiplexing
: {{The Linux Kernel/source|drivers/clk}} – clock framework
📖 References
: {{The Linux Kernel/doc|Pin control subsystem|driver-api/pin-control.html}}
: {{The Linux Kernel/doc|Linux Hardware Monitoring|hwmon}}
: {{The Linux Kernel/doc|Firmware guide|firmware-guide}}
: {{The Linux Kernel/doc|Devicetree|devicetree}}
: https://hwmon.wiki.kernel.org/
: [http://lwn.net/images/pdf/LDD3/ch14.pdf LDD3:The Linux Device Model]
: http://www.tldp.org/LDP/tlk/dd/drivers.html
: http://www.xml.com/ldd/chapter/book/
: http://examples.oreilly.com/linuxdrive2/
=== Live patching ===
{{w|Kpatch|Live patching}} (since 4.0) allows applying critical fixes to a running kernel without rebooting.
⚲ API:
: {{The Linux Kernel/include|linux/livepatch.h}}
: {{The Linux Kernel/id|klp_patch}} – patch structure
: {{The Linux Kernel/id|klp_enable_patch}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/livepatch}} – live patching core
📖 References:
: {{The Linux Kernel/doc|Livepatch|livepatch}}
=== Booting and halting ===
==== Kernel booting ====
This is loaded in two stages - in the first stage the kernel (as a compressed image file) is loaded into memory and decompressed, and a few fundamental functions such as essential hardware and basic memory management (memory paging) are set up.
Control is then switched one final time to the main kernel start process calling {{The Linux Kernel/id|start_kernel}}, which then performs the majority of system setup (interrupts, the rest of memory management, device and driver initialization, etc.) before spawning separately, the idle process and scheduler, and the init process (which is executed in user space).
'''Kernel loading stage'''
The kernel as loaded is typically an image file, compressed into either zImage or bzImage formats with zlib.
A routine at the head of it does a minimal amount of hardware setup, decompresses the image fully into high memory, and takes note of any RAM disk if configured.
It then executes kernel startup via startup_64 (for x86_64 architecture).
: {{The Linux Kernel/source|arch/x86/boot/compressed/vmlinux.lds.S}} - linker script defines entry {{The Linux Kernel/id|startup_64}} in
: {{The Linux Kernel/source|arch/x86/boot/compressed/head_64.S}} - assembly of extractor
: {{The Linux Kernel/id|extract_kernel}} - extractor in language C
:: prints
Decompressing Linux... done.
Booting the kernel.
'''Kernel startup stage'''
The startup function for the kernel (also called the swapper or process 0) establishes memory management (paging tables and memory paging), detects the type of CPU and any additional functionality such as floating point capabilities, and then switches to non-architecture specific Linux kernel functionality via a call to {{The Linux Kernel/id|start_kernel}}.
↯ Startup call hierarchy:
: {{The Linux Kernel/source|arch/x86/kernel/vmlinux.lds.S}} – linker script
: {{The Linux Kernel/source|arch/x86/kernel/head_64.S}} – assembly of uncompressed startup code
: {{The Linux Kernel/source|arch/x86/kernel/head64.c}} – platform dependent startup:
:: {{The Linux Kernel/id|x86_64_start_kernel}}
:: {{The Linux Kernel/id|x86_64_start_reservations}}
: {{The Linux Kernel/source|init/main.c}} – main initialization code
:: {{The Linux Kernel/id|start_kernel}} 200 SLOC
::: {{The Linux Kernel/id|mm_init}}
:::: {{The Linux Kernel/id|mem_init}}
:::: {{The Linux Kernel/id|vmalloc_init}}
::: {{The Linux Kernel/id|sched_init}}
::: {{The Linux Kernel/id|rcu_init}} – {{w|Read-copy-update}}
::: {{The Linux Kernel/id|rest_init}}
:::: {{The Linux Kernel/id|kernel_init}} - deferred kernel thread #1
::::: {{The Linux Kernel/id|kernel_init_freeable}} This and following functions are defined with attribute {{The Linux Kernel/id|__init}}
:::::: {{The Linux Kernel/id|prepare_namespace}}
::::::: {{The Linux Kernel/id|initrd_load}}
::::::: {{The Linux Kernel/id|mount_root}}
::::: {{The Linux Kernel/id|run_init_process}} obviously runs the first process {{The Linux Kernel/man|1|init}}
:::: {{The Linux Kernel/id|kthreadd}} – deferred kernel thread #2
:::: {{The Linux Kernel/id|cpu_startup_entry}}
::::: {{The Linux Kernel/id|do_idle}}
{{The Linux Kernel/id|start_kernel}} executes a wide range of initialization functions. It sets up interrupt handling (IRQs), further configures memory, starts the {{The Linux Kernel/man|1|init}} process (the first user-space process), and then starts the idle task via {{The Linux Kernel/id|cpu_startup_entry}}. Notably, the kernel startup process also mounts the {{w|initial ramdisk}} (initrd) that was loaded previously as the temporary root file system during the boot phase. The initrd allows driver modules to be loaded directly from memory, without reliance upon other devices (e.g. a hard disk) and the drivers that are needed to access them (e.g. a SATA driver). This split of some drivers statically compiled into the kernel and other drivers loaded from initrd allows for a smaller kernel. The root file system is later switched via a call to {{The Linux Kernel/man|8|pivot_root}} / {{The Linux Kernel/man|2|pivot_root}} which unmounts the temporary root file system and replaces it with the use of the real one, once the latter is accessible. The memory used by the temporary root file system is then reclaimed.
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/Kconfig.debug}} – x86 debugging Kconfig options
: {{The Linux Kernel/include|linux/smpboot.h}}
: {{The Linux Kernel/source|kernel/smpboot.c}} – common SMP CPU bringup/teardown
: {{The Linux Kernel/source|arch/x86/kernel/smpboot.c}} – x86 SMP booting
: {{The Linux Kernel/include|linux/kallsyms.h}}, {{The Linux Kernel/source|kernel/kallsyms.c}} – the /proc/kallsyms kernel symbol table
===== ... =====
📖 References
: Article about [[../Booting|booting of the kernel]]
: {{The Linux Kernel/doc|Initial RAM disk|admin-guide/initrd.html}}
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=initcall_debug initcall_debug, boot argument]
: {{w|Linux startup process}}
: {{w|init}}
: [http://lwn.net/Articles/632528/ Linux (U)EFI boot process]
: {{The Linux Kernel/doc|The kernel’s command-line parameters|admin-guide/kernel-parameters.html}}
: {{The Linux Kernel/doc|The EFI Boot Stub|admin-guide/efi-stub.html}}
: {{The Linux Kernel/doc|Boot Configuration|admin-guide/bootconfig.html}}
: {{The Linux Kernel/doc|Boot time memory management|core-api/boot-time-mm.html}}
: [https://github.com/0xAX/linux-insides/blob/master/Booting/README.md Kernel booting process]
: [https://github.com/0xAX/linux-insides/blob/master/Initialization/README.md Kernel initialization process]
📚 Further reading
: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
: {{w|E820}}
💾 ''Historical''
: http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/
: http://www.tldp.org/LDP/lki/lki-1.html
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-4.html
==== Halting or rebooting ====
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/reboot.h}}
: {{The Linux Kernel/include|linux/stop_machine.h}}
:: {{The Linux Kernel/id|print_stop_info}}
:: {{The Linux Kernel/id|stop_machine}}
::: {{The Linux Kernel/id|stop_core_cpuslocked}}
: {{The Linux Kernel/id|reboot_mode}}
: {{The Linux Kernel/id|sys_reboot}} calls
:: {{The Linux Kernel/id|machine_restart}} or
:: {{The Linux Kernel/id|machine_halt}} or
:: {{The Linux Kernel/id|machine_power_off}}
: {{The Linux Kernel/include|linux/reboot-mode.h}}
:: {{The Linux Kernel/id|reboot_mode_driver}}
::: {{The Linux Kernel/id|devm_reboot_mode_register}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/reboot.c}} – reboot, halt and power-off
: {{The Linux Kernel/source|kernel/stop_machine.c}} – stop all CPUs for safe code patching
:: {{The Linux Kernel/id|cpu_stopper}}
:: {{The Linux Kernel/id|cpu_stop_init}}
::: {{The Linux Kernel/id|cpu_stopper_thread}} – "migration" tasks
: {{The Linux Kernel/source|arch/x86/kernel/reboot.c}} – x86 reboot methods
: [[../Softdog Driver/]]
==== Power management ====
Keyword: suspend, alarm, hibernation.
⚲ API
: /sys/power/
: /sys/kernel/debug/wakeup_sources
:: <big>⌨️</big> hands-on:
:: sudo awk '{gsub("^ ","?")} NR>1 {if ($6) {print $1}}' /sys/kernel/debug/wakeup_sources
: {{The Linux Kernel/include|linux/pm.h}}
:: {{The Linux Kernel/include|linux|dev_pm_ops}}
: {{The Linux Kernel/include|linux/pm_qos.h}}
: {{The Linux Kernel/include|linux/pm_clock.h}}
: {{The Linux Kernel/include|linux/pm_domain.h}}
: {{The Linux Kernel/include|linux/pm_wakeirq.h}}
: {{The Linux Kernel/include|linux/pm_wakeup.h}}
:: {{The Linux Kernel/id|wakeup_source}}
:: {{The Linux Kernel/id|wakeup_source_register}}
: {{The Linux Kernel/include|linux/suspend.h}}
:: {{The Linux Kernel/id|pm_suspend}} suspends the system
: Suspend and wakeup depend on
:: {{The Linux Kernel/man|2|timer_create}} and {{The Linux Kernel/man|2|timerfd_create}} with clock ids {{The Linux Kernel/id|CLOCK_REALTIME_ALARM}} or {{The Linux Kernel/id|CLOCK_BOOTTIME_ALARM}} will wake the system if it is suspended.
:: {{The Linux Kernel/man|2|epoll_ctl}} with flag {{The Linux Kernel/id|EPOLLWAKEUP}} blocks suspend
:: See also {{The Linux Kernel/man|7|capabilities}} {{The Linux Kernel/id|CAP_WAKE_ALARM}}, {{The Linux Kernel/id|CAP_BLOCK_SUSPEND}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM}}
: {{The Linux Kernel/id|CONFIG_SUSPEND}}
: {{The Linux Kernel/source|kernel/power}} – suspend, hibernate and PM core
: {{The Linux Kernel/id|alarm_init}}
: {{The Linux Kernel/source|kernel/time/alarmtimer.c}} – alarm timer for wakeup events
: {{The Linux Kernel/source|drivers/base/power}}: {{The Linux Kernel/id|wakeup_sources}}
📖 References
: {{The Linux Kernel/doc|PM administration|admin-guide/pm}}
: {{The Linux Kernel/doc|CPU and Device PM|driver-api/pm}}
: {{The Linux Kernel/doc|Power Management|power}}
: {{The Linux Kernel/doc|sysfs power testing ABI|admin-guide/abi-testing.html#file-testing-sysfs-power}}
: https://lwn.net/Kernel/Index/#Power_management
: {{w|PowerTOP}}
: [https://linux.die.net/man/1/cpupower cpupower]
: [https://manpages.ubuntu.com/manpages/xenial/man8/tlp.8.html tlp] – apply laptop power management settings
: {{w|ACPI}} – Advanced Configuration and Power Interface
===== Runtime PM =====
Keywords: runtime power management, devices power management opportunistic suspend, autosuspend, autosleep.
⚲ API
: /sys/devices/.../power/:
:: async autosuspend_delay_ms control runtime_active_kids runtime_active_time runtime_enabled runtime_status runtime_suspended_time runtime_usage
: {{The Linux Kernel/include|linux/pm_runtime.h}}
:: {{The Linux Kernel/id|pm_runtime_mark_last_busy}}
:: {{The Linux Kernel/id|pm_runtime_enable}}
:: {{The Linux Kernel/id|pm_runtime_disable}}
:: {{The Linux Kernel/id|pm_runtime_get}} – asynchronous get
:: {{The Linux Kernel/id|pm_runtime_get_sync}}
:: {{The Linux Kernel/id|pm_runtime_resume_and_get}} – preferable synchronous get
:: {{The Linux Kernel/id|pm_runtime_put}}
:: {{The Linux Kernel/id|pm_runtime_put_noidle}} – just decrement usage counter
:: {{The Linux Kernel/id|pm_runtime_put_sync}}
:: {{The Linux Kernel/id|pm_runtime_put_autosuspend}}
: {{The Linux Kernel/id|SET_RUNTIME_PM_OPS}}
👁 Example: {{The Linux Kernel/id|ac97_pm}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM_AUTOSLEEP}}
=== ... ===
📖 References
: {{The Linux Kernel/doc|Runtime Power Management Framework for I/O Devices|power/runtime_pm.html}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/cpuidle CPU idle power saving methods for real-time workloads]
: [https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-power Sysfs devices PM API]
: [https://www.kernel.org/doc/Documentation/driver-api/usb/power-management.rst Power Management for USB]
: [https://lwn.net/Kernel/Index/#Power_management-Opportunistic_suspend Opportunistic suspend]
📚 Further reading
: https://deepwiki.com/torvalds/linux/5-hardware-drivers
== Building and Updating ==
: [[../Updating/]]
{{BookCat}}
hjwb26aiuxij8twzmxyv4c8vhiy4flk
4641526
4641515
2026-06-28T15:27:30Z
Conan
3188
System: seq_file.h header reference
4641526
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:System functionality}}</noinclude>
{| style="float: right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#edf" |system
|-
| bgcolor="#cdf" |[[#System interfaces|system interfaces]]
|-
| bgcolor=#abe |[[#Virtualization|virtualization]]
|-
| bgcolor="#aad" |[[#Driver Model|Driver Model]]
|- style=""
| bgcolor="#99c" |[[../Modules|modules]]
|-
| bgcolor="#88a" |[[#Peripheral buses|buses]], [[The Linux Kernel/PCI|PCI]]
|-
| bgcolor="#889" |[[#Hardware interfaces|hardware interfaces]], [[#Booting and halting|[re]booting]]
|}
The System functionality is named after system calls and sysfs.
It differs from other kernel functionalities.
Its subsystems are not tightly coupled across layers but instead provide infrastructure to other parts of the kernel.
For example, the System Calls subsystem offers a common interface layer for all functionalities exposed to user space.
== System interfaces ==
There are several mechanisms available in Linux for user space system interfaces.
One of the most common mechanisms is through {{w|system call}}s, which are functions that allow user space applications to request services from the kernel, such as opening files, creating processes, and accessing system resources.
Another mechanism for user space communication is through {{w|device file}}s, which are special files that represent physical or virtual devices, such as storage devices, network interfaces, and various peripheral devices.
User space applications can communicate with these devices by reading from and writing to their corresponding device files.
In summary, Linux kernel provides several mechanisms for user space communication, including system calls, device files, {{w|procfs}}, {{w|sysfs}}, and devtmpfs.
These mechanisms enable user space applications to communicate with the kernel and access system resources in a safe and controlled manner.
⚲ APIs:
: kernel space API for user space
:: {{The Linux Kernel/include|uapi}}
:: {{The Linux Kernel/source|arch/x86/include/uapi}} – x86 user-space API headers
:: {{The Linux Kernel/man|2|ioctl}}
:: [[#System calls|System calls]]
:: [[#Device files|Device files]]
: user space API for kernel space
:: {{The Linux Kernel/include|linux/uaccess.h}}:
:: {{The Linux Kernel/id|copy_to_user}}
:: {{The Linux Kernel/id|copy_from_user}}
📖 References
: {{The Linux Kernel/doc|User-space API guides|userspace-api}}
: {{w|User space}}
: {{w|Linux kernel interfaces}}
: [http://safari.oreilly.com/0596005652/understandlk-CHP-11 ULK3 Chapter 11. Signals]
===System calls===
System calls are the fundamental interface between user space applications and the Linux kernel.
They provide a way for programs to request services from the operating system, such as opening a file, allocating memory, or creating a new process.
In the Linux kernel, system calls are implemented as functions that can be invoked by user space programs using a software interrupt mechanism.
The Linux kernel provides hundreds of system calls, each with its own unique functionality.
These system calls are organized into categories such as process management, file management, network communication, and memory management.
User space applications can use these system calls to interact with the kernel and access the underlying system resources.
⚲ API
: [[../Syscalls|Table of syscalls]]
: {{The Linux Kernel/man|2|syscalls}}
⚙️ Internals
: {{The Linux Kernel/include|linux/syscalls.h}}
: {{The Linux Kernel/source|kernel/entry}} – common syscall entry/exit and exception handling
: {{The Linux Kernel/id|syscall_init}} installs {{The Linux Kernel/id|entry_SYSCALL_64}}
: {{The Linux Kernel/man|2|syscall}} ↪
:: {{The Linux Kernel/id|entry_SYSCALL_64}} ↯ call hierarchy:
::: {{The Linux Kernel/id|do_syscall_64}}
:::: {{The Linux Kernel/id|sys_call_table}}
📖 References
: {{w|System call}}
: [http://man7.org/linux/man-pages/dir_section_2.html Directory of system calls, man section 2]
: Anatomy of a system call, [https://lwn.net/Articles/604287/ part 1] and [https://lwn.net/Articles/604515/ part 2]
: {{The Linux Kernel/ltp|kernel|syscalls}}
💾 ''Historical''
: [http://safari.oreilly.com/0596005652/understandlk-CHP-10 ULK3 Chapter 10. System Calls]
=== Device files ===
Classic UNIX devices are [[../Human_interfaces#Char_devices|Char devices]] used as byte streams with {{The Linux Kernel/man|2|ioctl}}.
⚲ API
ls /dev
cat /proc/devices
cat /proc/misc
Examples: {{The Linux Kernel/id|misc_fops}} {{The Linux Kernel/id|usb_fops}} {{The Linux Kernel/id|memory_fops}}
: {{The Linux Kernel/doc|Allocated devices|admin-guide/devices.html}}
: {{The Linux Kernel/source|drivers/char}} – miscellaneous byte stream devices
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch13.html Chapter 13. I/O Architecture and Device Drivers]
==== hiddev ====
⚠️ Warning: confusion. hiddev isn't real [[../Human_interfaces#HID|human interface device]]! It reuses USBHID infrastructure. hiddev is used for example for monitor controls and Uninterruptible Power Supplies.
This module supports these devices separately using a separate event interface on /dev/usb/hiddevX (char 180:96 to 180:111) (⚙️ {{The Linux Kernel/id|HIDDEV_MINOR_BASE}})
⚲ API
: {{The Linux Kernel/include|uapi/linux/hiddev.h}}
: {{The Linux Kernel/id|HID_CONNECT_HIDDEV}}
⚙️ Internals
: [https://elixir.bootlin.com/linux/latest/K/ident/CONFIG_USB_HIDDEV CONFIG_USB_HIDDEV]
: {{The Linux Kernel/include|linux/hiddev.h}}
: {{The Linux Kernel/id|hiddev_event}}
: {{The Linux Kernel/source|drivers/hid/usbhid/hiddev.c}}, {{The Linux Kernel/id|hiddev_fops}}
📖 References
: {{The Linux Kernel/doc|HIDDEV - Care and feeding of your Human Interface Devices|hid/hiddev.html}}
📖 References
: {{w|Device file}}
===Administration===
🔧 TODO
📖 References
: {{The Linux Kernel/man|7|netlink}}
: {{The Linux Kernel/doc|The Linux kernel user’s and administrator’s guide|admin-guide}}
==== procfs ====
The ''proc filesystem'' (''procfs'') is a special filesystem that presents information about processes and other system information in a hierarchical file-like structure, providing a more convenient and standardized method for dynamically accessing process data held in the kernel than traditional tracing methods or direct access to kernel memory.
Typically, it is mapped to a mount point named <code>/proc</code> at boot time.
The proc file system acts as an interface to internal data structures in the kernel.
It can be used to obtain information about the system and to change certain kernel parameters at runtime.
<code>/proc</code> includes a directory for each running process —including kernel threads— in directories named <code>/proc/PID</code>, where <code>PID</code> is the process number. Each directory contains information about one process, including the command that originally started the process (<code>/proc/PID/cmdline</code>), the names and values of its environment variables (<code>/proc/PID/environ</code>), a symlink to its working directory (<code>/proc/PID/cwd</code>), another symlink to the original executable file —if it still exists— (<code>/proc/PID/exe</code>), a couple of directories with symlinks to each open file descriptor (<code>/proc/PID/fd</code>) and the status —position, flags, ...— of each of them (<code>/proc/PID/fdinfo</code>), information about mapped files and blocks like heap and stack (<code>/proc/PID/maps</code>), a binary image representing the process's virtual memory (<code>/proc/PID/mem</code>), a symlink to the root path as seen by the process (<code>/proc/PID/root</code>), a directory containing hard links to any child process or thread (<code>/proc/PID/task</code>), basic information about a process including its run state and memory usage (<code>/proc/PID/status</code>) and much more.
📖 References
: {{w|procfs}}
: {{The Linux Kernel/man|5|procfs}}
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|linux/proc_fs.h}}
: {{The Linux Kernel/include|linux/seq_file.h}} – sequential file interface for /proc entries
: {{The Linux Kernel/source|fs/proc}} – procfs implementation
:: {{The Linux Kernel/include|linux/sysctl.h}} – /proc/sys runtime kernel tuning:
:: {{The Linux Kernel/source|fs/proc/proc_sysctl.c}} – filesystem interface
:: {{The Linux Kernel/source|kernel/sysctl.c}} – read/write handlers (proc_dointvec, proc_dostring, ...)
==== sysfs ====
sysfs is a pseudo-file system that exports information about various kernel subsystems, hardware devices, and associated device drivers from the kernel's device model to user space through virtual files.
In addition to providing information about various devices and kernel subsystems, exported virtual files are also used for their configuring.
Sysfs is designed to export the information present in the device tree, which would then no longer clutter up procfs.
Sysfs is mounted under the <code>/sys</code> mount point.
⚲ API
: {{The Linux Kernel/include|linux/sysfs.h}}
📖 References
: {{w|sysfs}}
: {{The Linux Kernel/man|5|sysfs}}
: {{The Linux Kernel/doc|sysfs - filesystem for exporting kernel objects|filesystems/sysfs.html}}
: {{The Linux Kernel/source|fs/sysfs}} – sysfs implementation
: {{The Linux Kernel/source|fs/kernfs}} – kernfs, the backing filesystem for sysfs and cgroups
==== devtmpfs ====
devtmpfs is a hybrid {{w|User space and kernel space|kernel/user space}} approach of a device filesystem to provide nodes before udev runs for the first time.
📖 References
: {{w|Device file}}
: {{The Linux Kernel/source|drivers/base/devtmpfs.c}} – kernel-maintained tmpfs /dev
==== configfs ====
{{The Linux Kernel/doc|configfs|filesystems/configfs.html}} is a userspace-driven kernel object configuration filesystem mounted at /sys/kernel/config/.
Unlike sysfs (which exposes kernel-created objects), configfs lets userspace create and configure kernel objects via mkdir/rmdir.
Used by USB gadget, NVMe target, ACPI, null_blk, GPIO simulator and other subsystems.
⚲ API:
: {{The Linux Kernel/include|linux/configfs.h}}
:: {{The Linux Kernel/id|config_item}} – base object, created by userspace mkdir
:: {{The Linux Kernel/id|config_group}} – container for config_items
:: {{The Linux Kernel/id|configfs_attribute}} – per-item readable/writable attribute
:: {{The Linux Kernel/id|configfs_subsystem}} – top-level subsystem registration
:: {{The Linux Kernel/id|configfs_register_subsystem}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/configfs}}
== Virtualization ==
🔧 TODO
See {{w|Kernel-based Virtual Machine}}
📖 References
: {{The Linux Kernel/doc|Virtualization Support|virt/}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/3-virtualization
=== Containerization ===
{{w|OS-level virtualization|Containerization}} is a powerful technology that has revolutionized the way software applications are developed, deployed, and run.
At its core, containerization provides an isolated environment for running applications, where the application has all the necessary dependencies and can be easily moved from one environment to another without worrying about any compatibility issues.
Containerization technology has its roots in the {{w|chroot}} command, which was introduced in the Unix operating system in the 1979.
Chroot provided a way to change the root directory of a process, effectively creating a new isolated environment with its own file system hierarchy.
However, this early implementation of containerization had limited functionality, and it was difficult to manage and control the various processes running within the container.
In the early 2000s, the Linux kernel introduced {{w|Linux namespaces|namespaces}} and {{w|cgroups|control groups}} to provide a more robust and scalable containerization solution.
'''Namespaces''' allow processes to have their own isolated view of the system, including the file system, network, and process ID space, while '''control groups''' provide fine-grained control over the resources allocated to each container, such as CPU, memory, and I/O.
Using these kernel features, containerization platforms such as {{w|Docker (software)|Docker}} and {{w|Kubernetes}} have emerged as popular solutions for building and deploying containerized applications at scale.
Containerization has become an essential tool for modern software development, allowing developers to easily package applications and deploy them in a consistent and predictable manner across different environments.
==== Resources usage and limits ====
⚲ API
: {{The Linux Kernel/man|2|chroot}} – change root directory
: {{The Linux Kernel/man|2|sysinfo}} – return system information
: {{The Linux Kernel/man|2|getrusage}} – get resource usage
: get/set resource limits:
:: {{The Linux Kernel/man|2|getrlimit}}
:: {{The Linux Kernel/man|2|setrlimit}}
:: {{The Linux Kernel/man|2|prlimit64}}
📖 References
: {{w|chroot}}
==== Namespaces ====
{{w|Linux namespaces}} provide the way to isolate and virtualize different aspects of the operating system.
Namespaces allow multiple instances of an application to run in isolation from each other, without interfering with the host system or other instances.
🔧 TODO
⚲ API
: /proc/self/ns
: {{The Linux Kernel/man|8|lsns}}, {{The Linux Kernel/man|2|ioctl_ns}} ↪ {{The Linux Kernel/id|ns_ioctl}}
: {{The Linux Kernel/man|1|unshare}}, {{The Linux Kernel/man|2|unshare}}
: {{The Linux Kernel/man|1|nsenter}}, {{The Linux Kernel/man|2|setns}}
: {{The Linux Kernel/man|2|clone3}} ↪ {{The Linux Kernel/id|clone_args}}
: {{The Linux Kernel/include|linux/ns_common.h}}
: {{The Linux Kernel/include|linux/proc_ns.h}}
: namespaces definition
:: {{The Linux Kernel/id|uts_namespace}}
:: {{The Linux Kernel/id|ipc_namespace}}
:: {{The Linux Kernel/id|mnt_namespace}}
:: {{The Linux Kernel/id|pid_namespace}}
:: {{The Linux Kernel/include|net/net_namespace.h}} - struct net
:: {{The Linux Kernel/id|user_namespace}}
:: {{The Linux Kernel/id|time_namespace}}
:: {{The Linux Kernel/id|cgroup_namespace}}
⚙️ Internals
: {{The Linux Kernel/id|init_nsproxy}} - struct of namespaces
: {{The Linux Kernel/source|kernel/nsproxy.c}} – namespace proxy management
: {{The Linux Kernel/source|fs/namespace.c}} – mount namespace
: {{The Linux Kernel/source|fs/proc/namespaces.c}} – /proc namespace entries
: {{The Linux Kernel/source|net/core/net_namespace.c}} – network namespace
: {{The Linux Kernel/source|kernel/time/namespace.c}} – time namespace
: {{The Linux Kernel/source|kernel/user_namespace.c}} – user namespace
: {{The Linux Kernel/source|kernel/pid_namespace.c}} – PID namespace
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace
: {{The Linux Kernel/source|kernel/cgroup/namespace.c}} – cgroup namespace
: {{The Linux Kernel/source|ipc/namespace.c}} – IPC namespace
📖 References
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
: {{The Linux Kernel/man|7|ipc_namespaces}}
: {{The Linux Kernel/man|7|mount_namespace}}
: {{The Linux Kernel/man|7|pid_namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|user_namespaces}}
: {{The Linux Kernel/man|7|time_namespaces}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
=== Control groups ===
{{w|cgroups}} are used to limit and control the resource usage of groups of processes. They allow administrators to set limits on CPU usage, memory usage, disk I/O, network bandwidth, and other resources, which can be useful for managing system performance and preventing resource contention.
There are two versions of cgroups.
Unlike v1, cgroup v2 has only a single process hierarchy and discriminates between processes, not threads.
Here are some of the key differences between cgroups v1 and v2:
{| class="wikitable"
|+
!
!cgroups v1
!cgroups v2
|-
|Hierarchy
|each subsystem had its own hierarchy, which could lead to complexity and confusion
|unified hierarchy, which simplifies management and enables better resource allocation
|-
|Controllers
|has several subsystems that are controlled by separate controllers, each with its own set of configuration files and parameters
|controllers are consolidated into a single "cgroup2" controller, which provides a unified interface for managing resources
|-
|Resource distribution
|distributes resources among groups of processes based on proportional sharing, which can lead to unpredictable results
|resources are distributed based on a "weighted fair queuing" algorithm, which provides better predictability and fairness
|}
Cgroups v2 is not backward compatible with cgroups v1, which means that migrating from v1 to v2 can be challenging and requires careful planning.
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/cgroup.h}}
: {{The Linux Kernel/include|linux/cgroup-defs.h}}
:: {{The Linux Kernel/id|css_set}} – holds set of reference-counted pointers to {{The Linux Kernel/id|cgroup_subsys_state}} objects
:: {{The Linux Kernel/id|cgroup_subsys}}
: {{The Linux Kernel/include|linux/cgroup_subsys.h}} – list of cgroup subsystems
⚙️ Internals
: {{The Linux Kernel/id|cg_list}} – list of {{The Linux Kernel/id|css_set}} in task_struct
: {{The Linux Kernel/source|kernel/cgroup}} – cgroup core
: {{The Linux Kernel/id|cgroup_init}}
: {{The Linux Kernel/id|cgroup2_fs_type}}
: {{The Linux Kernel/source|tools/testing/selftests/cgroup}} – cgroup self-tests
📖 References
: [[The_Linux_Kernel/System/CGroup_v2|Control Groups v2]]
: {{The Linux Kernel/doc|Control Groups v1|admin-guide/cgroup-v1/}}
: {{The Linux Kernel/man|1|systemd-cgtop}}
: {{The Linux Kernel/man|5|systemd.slice}} – slice unit configuration
: {{The Linux Kernel/man|7|cgroups}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
: {{The Linux Kernel/doc|CFS Bandwidth Control for cgroups|scheduler/sched-bwc.html}}
: {{The Linux Kernel/doc|Real-Time group scheduling|scheduler/sched-rt-group.html}}
: [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/latest/html/managing_monitoring_and_updating_the_kernel/setting-limits-for-applications_managing-monitoring-and-updating-the-kernel Understanding control groups, RHEL]
📚 Further reading
: https://github.com/containers
: [https://github.com/mk-fg/fgtk#cgrc cgrc tool]
💾 Historical
: https://github.com/mk-fg/cgroup-tools for cgroup v1
== Driver Model ==
The Linux driver model (or Device Model, or just DM) is a framework that provides a consistent and standardized way for device drivers to interface with the kernel.
It defines a set of rules, interfaces, and data structures that enable device drivers to communicate with the kernel and perform various operations, such as managing resources, lifecycle and more.
DM core structure consists of DM classes, DM buses, DM drivers and DM devices.
=== kobject ===
In the Linux kernel, a {{The Linux Kernel/id|kobject}} is a fundamental data structure used to represent kernel objects and provide a standardized interface for interacting with them.
A kobject is a generic object that can represent any type of kernel object, including devices, files, modules, and more.
The kobject data structure contains several fields that describe the object, such as its name, type, parent, and operations.
Each kobject has a unique name within its parent object, and the parent-child relationships form a hierarchy of kobjects.
Kobjects are managed by the kernel's sysfs file system, which provides a virtual file system that exposes kernel objects as files and directories in the user space.
Each kobject is associated with a sysfs directory, which contains files and attributes that can be read or written to interact with the kernel object.
⚲ Infrastructure API
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/id|kobject}}
: {{The Linux Kernel/doc|Kernel objects manipulation|driver-api/basics.html#kernel-objects-manipulation}}
: 🔧 TODO
=== Classes ===
A class is a higher-level view of a device that abstracts out low-level implementation details.
Drivers may see a NVME storage or a SATA storage, but, at the class level, they are all simply {{The Linux Kernel/id|block_class}} devices.
Classes allow user space to work with devices based on what they do, rather than how they are connected or how they work.
General DM classes structure match {{w|composite pattern}}.
⚲ API
: ls /sys/class/
: {{The Linux Kernel/id|class_register}} registers {{The Linux Kernel/id|class}}
: {{The Linux Kernel/include|linux/device/class.h}}
👁 Examples: {{The Linux Kernel/id|input_class}}, {{The Linux Kernel/id|block_class}} {{The Linux Kernel/id|net_class}}
=== Buses ===
A {{w|peripheral bus}} is a channel between the processor and one or more peripheral devices.
A DM bus is {{w|Proxy pattern|proxy}} for a peripheral bus.
General DM buses structure match {{w|composite pattern}}.
For the purposes of the device model, all devices are connected via a bus, even if it is an internal, virtual, {{The Linux Kernel/id|platform_bus_type}}.
Buses can plug into each other.
A USB controller is usually a PCI device, for example.
The device model represents the actual connections between buses and the devices they control.
A bus is represented by the {{The Linux Kernel/id|bus_type}} structure.
It contains the name, the default attributes, the bus' methods, PM operations, and the driver core's private data.
⚲ API
: ls /sys/bus/
: {{The Linux Kernel/id|bus_register}} registers {{The Linux Kernel/id|bus_type}}
: {{The Linux Kernel/include|linux/device/bus.h}}
👁 Examples: {{The Linux Kernel/id|usb_bus_type}}, {{The Linux Kernel/id|hid_bus_type}}, {{The Linux Kernel/id|pci_bus_type}}, {{The Linux Kernel/id|scsi_bus_type}}, {{The Linux Kernel/id|platform_bus_type}}
: [[#Peripheral_buses|Peripheral buses]]
=== Drivers ===
⚲ API
: ls /sys/bus/:/drivers/
: {{The Linux Kernel/id|module_driver}} - simple common driver initializer, 👁 for example used in {{The Linux Kernel/id|module_pci_driver}}
: {{The Linux Kernel/id|driver_register}} registers {{The Linux Kernel/id|device_driver}} - basic device driver structure, one per all device instances.
: {{The Linux Kernel/include|linux/device/driver.h}}
👁 Examples: {{The Linux Kernel/id|hid_generic}} {{The Linux Kernel/id|usb_register_device_driver}}
'''Platform drivers'''
: {{The Linux Kernel/id|module_platform_driver}} registers {{The Linux Kernel/id|platform_driver}} (platform wrapper of {{The Linux Kernel/id|device_driver}}) with {{The Linux Kernel/id|platform_bus_type}}
: {{The Linux Kernel/include|linux/platform_device.h}}
👁 Examples: {{The Linux Kernel/id|gpio_mouse_device_driver}}
=== Devices ===
⚲ API
: ls /sys/devices/
: {{The Linux Kernel/id|device_register}} registers {{The Linux Kernel/id|device}} - the basic device structure, per each device instance
: {{The Linux Kernel/include|linux/device.h}} – {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/doc|Device Resource Management|driver-api/basics.html#device-resource-management}}, devres, devm ...
👁 Examples: {{The Linux Kernel/id|platform_bus}} mousedev_create
'''Platform devices'''
: {{The Linux Kernel/id|platform_device}} - platform wrapper of {{The Linux Kernel/doc|struct <big>device</big> - the basic device structure|driver-api/infrastructure.html#c.device}}, contains resources associated with the device
: it can be created dynamically by {{The Linux Kernel/id|platform_device_register_simple}} or {{The Linux Kernel/id|platform_device_alloc}}. Or registered with {{The Linux Kernel/id|platform_device_register}}.
: {{The Linux Kernel/id|platform_device_unregister}} - releases device and associated resources
👁 Examples: {{The Linux Kernel/id|add_pcspkr}}
⚲ API 🔧 TODO
: platform_device_info platform_device_id platform_device_register_full platform_device_add
: platform_device_add_data platform_device_register_data platform_device_add_resources
: attribute_group dev_pm_ops
<hr>
⚙️ Internals
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/source|lib/kobject.c}} – kobject library
: {{The Linux Kernel/source|drivers/base/platform.c}} – platform bus for legacy devices
: {{The Linux Kernel/source|drivers/base/core.c}} – driver model core
: {{The Linux Kernel/include|linux/notifier.h}}, {{The Linux Kernel/source|kernel/notifier.c}} – notifier chains for event broadcasting
📖 References
: {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
: {{The Linux Kernel/doc|Driver Model|driver-api/driver-model}}
:: {{The Linux Kernel/doc|The Linux Kernel Device Model|driver-api/driver-model/overview.html}}
:: {{The Linux Kernel/doc|Platform Devices and Drivers|driver-api/driver-model/platform.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_model.html Linux Device Model, by linux-kernel-labs]
{{:The Linux Kernel/Modules}}
== {{w|Peripheral bus}}es ==
Peripheral buses are the communication channels used to connect various peripheral devices to a computer system.
These buses are used to transfer data between the peripheral devices and the system's processor or memory.
In the Linux kernel, peripheral buses are implemented as drivers that enable communication between the operating system and the hardware.
Peripheral buses in the Linux kernel include USB, PCI, SPI, I2C, and more.
Each of these buses has its own unique characteristics, and the Linux kernel provides support for a wide range of peripheral devices.
The PCI (Peripheral Component Interconnect) bus is used to connect internal hardware devices in a computer system.
It is commonly used to connect graphics cards, network cards, and other expansion cards.
The Linux kernel provides a PCI bus driver that enables communication between the operating system and the devices connected to the bus.
The USB (Universal Serial Bus) is one of the most commonly used peripheral buses in modern computer systems.
It allows devices to be hot-swapped and supports high-speed data transfer rates.
🔧 TODO: device enumeration
⚲ API
: Shell interface: ls /proc/bus/ /sys/bus/
See also [[#Buses|Buses of Driver Model]]
See [[../Human_interfaces#Input_devices|'''Input: keyboard, mouse etc''']]
'''PCI'''
⚲ Shell API
: lspci -vv
: column -t /proc/bus/pci/devices
Main article: [[The_Linux_Kernel/PCI|PCI]]
'''USB'''
⚲ Shell API
: lsusb -v
: ls /sys/bus/usb/
: cat /proc/bus/usb/devices
⚙️ Internals
: {{The Linux Kernel/source|drivers/usb}} – USB subsystem
📖 References
: {{The Linux Kernel/doc|USB|usb}}
: [http://lwn.net/images/pdf/LDD3/ch13.pdf LDD3:USB Drivers]
'''Other buses'''
: {{The Linux Kernel/source|drivers/bus}} – bus driver implementations
'''Buses for 🤖 embedded devices:'''
: {{The Linux Kernel/include|linux/gpio/driver.h}} {{The Linux Kernel/include|linux/gpio.h}} {{The Linux Kernel/source|drivers/gpio}} {{The Linux Kernel/source|tools/gpio}}
: {{The Linux Kernel/source|drivers/i2c}} – I2C bus framework, https://i2c.wiki.kernel.org
'''SPI'''
⚲ API
: {{The Linux Kernel/include|linux/spi/spi.h}}
: {{The Linux Kernel/source|tools/spi}} – SPI user-space tools
⚙️ Internals
: {{The Linux Kernel/source|drivers/spi}} – SPI bus framework
: {{The Linux Kernel/id|spi_register_controller}}
: {{The Linux Kernel/id|spi_controller_list}}🚧
📖 References
: {{The Linux Kernel/doc|SPI|spi}}
==Hardware interfaces==
Hardware interfaces are basic part of any operating, enabling communication between the processor and other HW components of a computer system: memory, peripheral devices and buses, various controllers.
[[../Multitasking/CPU#Interrupts|Interrupts]]
===I/O ports and registers===
I/O ports and registers are electronic components in computer systems that enable communication between CPU and other electronic controllers and devices.
⚲ API
{{The Linux Kernel/include|asm-generic/io.h}} — generic I/O port emulation.
: {{The Linux Kernel/id|ioport_map}}
: {{The Linux Kernel/id|ioread32}} / {{The Linux Kernel/id|iowrite32}} ...
: {{The Linux Kernel/id|readl}}/ {{The Linux Kernel/id|writel}} ...
: The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space:
: {{The Linux Kernel/id|inl}}/ {{The Linux Kernel/id|outl}} ...
{{The Linux Kernel/include|linux/ioport.h}}, {{The Linux Kernel/source|kernel/resource.c}} — I/O and memory resource management.
: {{The Linux Kernel/id|request_mem_region}}
{{The Linux Kernel/source|arch/x86/include/asm/io.h}} – x86 I/O port and MMIO access
Functions for memory mapped registers:
{{The Linux Kernel/id|ioremap}} ...
==== regmap ====
The regmap subsystem provides a standardized abstraction layer for register access in device drivers.
It simplifies interactions with hardware registers across various bus types,
such as I2C, SPI, and MMIO, by offering a consistent API.
⚲ API
{{The Linux Kernel/include|linux/regmap.h}} — register map access API
: the most frequently used functions:
: {{The Linux Kernel/id|regmap_update_bits}}
: {{The Linux Kernel/id|regmap_write}}
: {{The Linux Kernel/id|regmap_read}}
: {{The Linux Kernel/id|regmap_reg_range}}
: {{The Linux Kernel/id|regmap_bulk_read}}
: {{The Linux Kernel/id|devm_regmap_init_i2c}}
: {{The Linux Kernel/id|regmap_set_bits}}
: {{The Linux Kernel/id|regmap_field_write}}
: {{The Linux Kernel/id|regmap_bulk_write}}
: {{The Linux Kernel/id|regmap_clear_bits}}
: {{The Linux Kernel/id|regmap_write_bits}}
: {{The Linux Kernel/id|regmap_config}}
: {{The Linux Kernel/id|regmap_read_poll_timeout}}
: {{The Linux Kernel/id|devm_regmap_init_mmio}}
⚙️ Internals
{{The Linux Kernel/source|drivers/base/regmap}} – register map abstraction layer
===Hardware Device Drivers===
Keywords: firmware, hotplug, clock, mux, pin
⚙️ Internals
: {{The Linux Kernel/source|drivers/acpi}} – ACPI drivers
: {{The Linux Kernel/source|drivers/base}} – driver model core
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/hwmon}} – hardware monitoring
: {{The Linux Kernel/source|drivers/thermal}} – thermal management
: {{The Linux Kernel/source|drivers/pinctrl}} – pin control and multiplexing
: {{The Linux Kernel/source|drivers/clk}} – clock framework
📖 References
: {{The Linux Kernel/doc|Pin control subsystem|driver-api/pin-control.html}}
: {{The Linux Kernel/doc|Linux Hardware Monitoring|hwmon}}
: {{The Linux Kernel/doc|Firmware guide|firmware-guide}}
: {{The Linux Kernel/doc|Devicetree|devicetree}}
: https://hwmon.wiki.kernel.org/
: [http://lwn.net/images/pdf/LDD3/ch14.pdf LDD3:The Linux Device Model]
: http://www.tldp.org/LDP/tlk/dd/drivers.html
: http://www.xml.com/ldd/chapter/book/
: http://examples.oreilly.com/linuxdrive2/
=== Live patching ===
{{w|Kpatch|Live patching}} (since 4.0) allows applying critical fixes to a running kernel without rebooting.
⚲ API:
: {{The Linux Kernel/include|linux/livepatch.h}}
: {{The Linux Kernel/id|klp_patch}} – patch structure
: {{The Linux Kernel/id|klp_enable_patch}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/livepatch}} – live patching core
📖 References:
: {{The Linux Kernel/doc|Livepatch|livepatch}}
=== Booting and halting ===
==== Kernel booting ====
This is loaded in two stages - in the first stage the kernel (as a compressed image file) is loaded into memory and decompressed, and a few fundamental functions such as essential hardware and basic memory management (memory paging) are set up.
Control is then switched one final time to the main kernel start process calling {{The Linux Kernel/id|start_kernel}}, which then performs the majority of system setup (interrupts, the rest of memory management, device and driver initialization, etc.) before spawning separately, the idle process and scheduler, and the init process (which is executed in user space).
'''Kernel loading stage'''
The kernel as loaded is typically an image file, compressed into either zImage or bzImage formats with zlib.
A routine at the head of it does a minimal amount of hardware setup, decompresses the image fully into high memory, and takes note of any RAM disk if configured.
It then executes kernel startup via startup_64 (for x86_64 architecture).
: {{The Linux Kernel/source|arch/x86/boot/compressed/vmlinux.lds.S}} - linker script defines entry {{The Linux Kernel/id|startup_64}} in
: {{The Linux Kernel/source|arch/x86/boot/compressed/head_64.S}} - assembly of extractor
: {{The Linux Kernel/id|extract_kernel}} - extractor in language C
:: prints
Decompressing Linux... done.
Booting the kernel.
'''Kernel startup stage'''
The startup function for the kernel (also called the swapper or process 0) establishes memory management (paging tables and memory paging), detects the type of CPU and any additional functionality such as floating point capabilities, and then switches to non-architecture specific Linux kernel functionality via a call to {{The Linux Kernel/id|start_kernel}}.
↯ Startup call hierarchy:
: {{The Linux Kernel/source|arch/x86/kernel/vmlinux.lds.S}} – linker script
: {{The Linux Kernel/source|arch/x86/kernel/head_64.S}} – assembly of uncompressed startup code
: {{The Linux Kernel/source|arch/x86/kernel/head64.c}} – platform dependent startup:
:: {{The Linux Kernel/id|x86_64_start_kernel}}
:: {{The Linux Kernel/id|x86_64_start_reservations}}
: {{The Linux Kernel/source|init/main.c}} – main initialization code
:: {{The Linux Kernel/id|start_kernel}} 200 SLOC
::: {{The Linux Kernel/id|mm_init}}
:::: {{The Linux Kernel/id|mem_init}}
:::: {{The Linux Kernel/id|vmalloc_init}}
::: {{The Linux Kernel/id|sched_init}}
::: {{The Linux Kernel/id|rcu_init}} – {{w|Read-copy-update}}
::: {{The Linux Kernel/id|rest_init}}
:::: {{The Linux Kernel/id|kernel_init}} - deferred kernel thread #1
::::: {{The Linux Kernel/id|kernel_init_freeable}} This and following functions are defined with attribute {{The Linux Kernel/id|__init}}
:::::: {{The Linux Kernel/id|prepare_namespace}}
::::::: {{The Linux Kernel/id|initrd_load}}
::::::: {{The Linux Kernel/id|mount_root}}
::::: {{The Linux Kernel/id|run_init_process}} obviously runs the first process {{The Linux Kernel/man|1|init}}
:::: {{The Linux Kernel/id|kthreadd}} – deferred kernel thread #2
:::: {{The Linux Kernel/id|cpu_startup_entry}}
::::: {{The Linux Kernel/id|do_idle}}
{{The Linux Kernel/id|start_kernel}} executes a wide range of initialization functions. It sets up interrupt handling (IRQs), further configures memory, starts the {{The Linux Kernel/man|1|init}} process (the first user-space process), and then starts the idle task via {{The Linux Kernel/id|cpu_startup_entry}}. Notably, the kernel startup process also mounts the {{w|initial ramdisk}} (initrd) that was loaded previously as the temporary root file system during the boot phase. The initrd allows driver modules to be loaded directly from memory, without reliance upon other devices (e.g. a hard disk) and the drivers that are needed to access them (e.g. a SATA driver). This split of some drivers statically compiled into the kernel and other drivers loaded from initrd allows for a smaller kernel. The root file system is later switched via a call to {{The Linux Kernel/man|8|pivot_root}} / {{The Linux Kernel/man|2|pivot_root}} which unmounts the temporary root file system and replaces it with the use of the real one, once the latter is accessible. The memory used by the temporary root file system is then reclaimed.
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/Kconfig.debug}} – x86 debugging Kconfig options
: {{The Linux Kernel/include|linux/smpboot.h}}
: {{The Linux Kernel/source|kernel/smpboot.c}} – common SMP CPU bringup/teardown
: {{The Linux Kernel/source|arch/x86/kernel/smpboot.c}} – x86 SMP booting
: {{The Linux Kernel/include|linux/kallsyms.h}}, {{The Linux Kernel/source|kernel/kallsyms.c}} – the /proc/kallsyms kernel symbol table
===== ... =====
📖 References
: Article about [[../Booting|booting of the kernel]]
: {{The Linux Kernel/doc|Initial RAM disk|admin-guide/initrd.html}}
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=initcall_debug initcall_debug, boot argument]
: {{w|Linux startup process}}
: {{w|init}}
: [http://lwn.net/Articles/632528/ Linux (U)EFI boot process]
: {{The Linux Kernel/doc|The kernel’s command-line parameters|admin-guide/kernel-parameters.html}}
: {{The Linux Kernel/doc|The EFI Boot Stub|admin-guide/efi-stub.html}}
: {{The Linux Kernel/doc|Boot Configuration|admin-guide/bootconfig.html}}
: {{The Linux Kernel/doc|Boot time memory management|core-api/boot-time-mm.html}}
: [https://github.com/0xAX/linux-insides/blob/master/Booting/README.md Kernel booting process]
: [https://github.com/0xAX/linux-insides/blob/master/Initialization/README.md Kernel initialization process]
📚 Further reading
: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
: {{w|E820}}
💾 ''Historical''
: http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/
: http://www.tldp.org/LDP/lki/lki-1.html
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-4.html
==== Halting or rebooting ====
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/reboot.h}}
: {{The Linux Kernel/include|linux/stop_machine.h}}
:: {{The Linux Kernel/id|print_stop_info}}
:: {{The Linux Kernel/id|stop_machine}}
::: {{The Linux Kernel/id|stop_core_cpuslocked}}
: {{The Linux Kernel/id|reboot_mode}}
: {{The Linux Kernel/id|sys_reboot}} calls
:: {{The Linux Kernel/id|machine_restart}} or
:: {{The Linux Kernel/id|machine_halt}} or
:: {{The Linux Kernel/id|machine_power_off}}
: {{The Linux Kernel/include|linux/reboot-mode.h}}
:: {{The Linux Kernel/id|reboot_mode_driver}}
::: {{The Linux Kernel/id|devm_reboot_mode_register}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/reboot.c}} – reboot, halt and power-off
: {{The Linux Kernel/source|kernel/stop_machine.c}} – stop all CPUs for safe code patching
:: {{The Linux Kernel/id|cpu_stopper}}
:: {{The Linux Kernel/id|cpu_stop_init}}
::: {{The Linux Kernel/id|cpu_stopper_thread}} – "migration" tasks
: {{The Linux Kernel/source|arch/x86/kernel/reboot.c}} – x86 reboot methods
: [[../Softdog Driver/]]
==== Power management ====
Keyword: suspend, alarm, hibernation.
⚲ API
: /sys/power/
: /sys/kernel/debug/wakeup_sources
:: <big>⌨️</big> hands-on:
:: sudo awk '{gsub("^ ","?")} NR>1 {if ($6) {print $1}}' /sys/kernel/debug/wakeup_sources
: {{The Linux Kernel/include|linux/pm.h}}
:: {{The Linux Kernel/include|linux|dev_pm_ops}}
: {{The Linux Kernel/include|linux/pm_qos.h}}
: {{The Linux Kernel/include|linux/pm_clock.h}}
: {{The Linux Kernel/include|linux/pm_domain.h}}
: {{The Linux Kernel/include|linux/pm_wakeirq.h}}
: {{The Linux Kernel/include|linux/pm_wakeup.h}}
:: {{The Linux Kernel/id|wakeup_source}}
:: {{The Linux Kernel/id|wakeup_source_register}}
: {{The Linux Kernel/include|linux/suspend.h}}
:: {{The Linux Kernel/id|pm_suspend}} suspends the system
: Suspend and wakeup depend on
:: {{The Linux Kernel/man|2|timer_create}} and {{The Linux Kernel/man|2|timerfd_create}} with clock ids {{The Linux Kernel/id|CLOCK_REALTIME_ALARM}} or {{The Linux Kernel/id|CLOCK_BOOTTIME_ALARM}} will wake the system if it is suspended.
:: {{The Linux Kernel/man|2|epoll_ctl}} with flag {{The Linux Kernel/id|EPOLLWAKEUP}} blocks suspend
:: See also {{The Linux Kernel/man|7|capabilities}} {{The Linux Kernel/id|CAP_WAKE_ALARM}}, {{The Linux Kernel/id|CAP_BLOCK_SUSPEND}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM}}
: {{The Linux Kernel/id|CONFIG_SUSPEND}}
: {{The Linux Kernel/source|kernel/power}} – suspend, hibernate and PM core
: {{The Linux Kernel/id|alarm_init}}
: {{The Linux Kernel/source|kernel/time/alarmtimer.c}} – alarm timer for wakeup events
: {{The Linux Kernel/source|drivers/base/power}}: {{The Linux Kernel/id|wakeup_sources}}
📖 References
: {{The Linux Kernel/doc|PM administration|admin-guide/pm}}
: {{The Linux Kernel/doc|CPU and Device PM|driver-api/pm}}
: {{The Linux Kernel/doc|Power Management|power}}
: {{The Linux Kernel/doc|sysfs power testing ABI|admin-guide/abi-testing.html#file-testing-sysfs-power}}
: https://lwn.net/Kernel/Index/#Power_management
: {{w|PowerTOP}}
: [https://linux.die.net/man/1/cpupower cpupower]
: [https://manpages.ubuntu.com/manpages/xenial/man8/tlp.8.html tlp] – apply laptop power management settings
: {{w|ACPI}} – Advanced Configuration and Power Interface
===== Runtime PM =====
Keywords: runtime power management, devices power management opportunistic suspend, autosuspend, autosleep.
⚲ API
: /sys/devices/.../power/:
:: async autosuspend_delay_ms control runtime_active_kids runtime_active_time runtime_enabled runtime_status runtime_suspended_time runtime_usage
: {{The Linux Kernel/include|linux/pm_runtime.h}}
:: {{The Linux Kernel/id|pm_runtime_mark_last_busy}}
:: {{The Linux Kernel/id|pm_runtime_enable}}
:: {{The Linux Kernel/id|pm_runtime_disable}}
:: {{The Linux Kernel/id|pm_runtime_get}} – asynchronous get
:: {{The Linux Kernel/id|pm_runtime_get_sync}}
:: {{The Linux Kernel/id|pm_runtime_resume_and_get}} – preferable synchronous get
:: {{The Linux Kernel/id|pm_runtime_put}}
:: {{The Linux Kernel/id|pm_runtime_put_noidle}} – just decrement usage counter
:: {{The Linux Kernel/id|pm_runtime_put_sync}}
:: {{The Linux Kernel/id|pm_runtime_put_autosuspend}}
: {{The Linux Kernel/id|SET_RUNTIME_PM_OPS}}
👁 Example: {{The Linux Kernel/id|ac97_pm}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM_AUTOSLEEP}}
=== ... ===
📖 References
: {{The Linux Kernel/doc|Runtime Power Management Framework for I/O Devices|power/runtime_pm.html}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/cpuidle CPU idle power saving methods for real-time workloads]
: [https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-power Sysfs devices PM API]
: [https://www.kernel.org/doc/Documentation/driver-api/usb/power-management.rst Power Management for USB]
: [https://lwn.net/Kernel/Index/#Power_management-Opportunistic_suspend Opportunistic suspend]
📚 Further reading
: https://deepwiki.com/torvalds/linux/5-hardware-drivers
== Building and Updating ==
: [[../Updating/]]
{{BookCat}}
fmp6jbzvezb92yo8btdgxil62qihh6c
4641532
4641526
2026-06-28T15:36:30Z
Conan
3188
System: freezer.h header reference
4641532
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:System functionality}}</noinclude>
{| style="float: right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#edf" |system
|-
| bgcolor="#cdf" |[[#System interfaces|system interfaces]]
|-
| bgcolor=#abe |[[#Virtualization|virtualization]]
|-
| bgcolor="#aad" |[[#Driver Model|Driver Model]]
|- style=""
| bgcolor="#99c" |[[../Modules|modules]]
|-
| bgcolor="#88a" |[[#Peripheral buses|buses]], [[The Linux Kernel/PCI|PCI]]
|-
| bgcolor="#889" |[[#Hardware interfaces|hardware interfaces]], [[#Booting and halting|[re]booting]]
|}
The System functionality is named after system calls and sysfs.
It differs from other kernel functionalities.
Its subsystems are not tightly coupled across layers but instead provide infrastructure to other parts of the kernel.
For example, the System Calls subsystem offers a common interface layer for all functionalities exposed to user space.
== System interfaces ==
There are several mechanisms available in Linux for user space system interfaces.
One of the most common mechanisms is through {{w|system call}}s, which are functions that allow user space applications to request services from the kernel, such as opening files, creating processes, and accessing system resources.
Another mechanism for user space communication is through {{w|device file}}s, which are special files that represent physical or virtual devices, such as storage devices, network interfaces, and various peripheral devices.
User space applications can communicate with these devices by reading from and writing to their corresponding device files.
In summary, Linux kernel provides several mechanisms for user space communication, including system calls, device files, {{w|procfs}}, {{w|sysfs}}, and devtmpfs.
These mechanisms enable user space applications to communicate with the kernel and access system resources in a safe and controlled manner.
⚲ APIs:
: kernel space API for user space
:: {{The Linux Kernel/include|uapi}}
:: {{The Linux Kernel/source|arch/x86/include/uapi}} – x86 user-space API headers
:: {{The Linux Kernel/man|2|ioctl}}
:: [[#System calls|System calls]]
:: [[#Device files|Device files]]
: user space API for kernel space
:: {{The Linux Kernel/include|linux/uaccess.h}}:
:: {{The Linux Kernel/id|copy_to_user}}
:: {{The Linux Kernel/id|copy_from_user}}
📖 References
: {{The Linux Kernel/doc|User-space API guides|userspace-api}}
: {{w|User space}}
: {{w|Linux kernel interfaces}}
: [http://safari.oreilly.com/0596005652/understandlk-CHP-11 ULK3 Chapter 11. Signals]
===System calls===
System calls are the fundamental interface between user space applications and the Linux kernel.
They provide a way for programs to request services from the operating system, such as opening a file, allocating memory, or creating a new process.
In the Linux kernel, system calls are implemented as functions that can be invoked by user space programs using a software interrupt mechanism.
The Linux kernel provides hundreds of system calls, each with its own unique functionality.
These system calls are organized into categories such as process management, file management, network communication, and memory management.
User space applications can use these system calls to interact with the kernel and access the underlying system resources.
⚲ API
: [[../Syscalls|Table of syscalls]]
: {{The Linux Kernel/man|2|syscalls}}
⚙️ Internals
: {{The Linux Kernel/include|linux/syscalls.h}}
: {{The Linux Kernel/source|kernel/entry}} – common syscall entry/exit and exception handling
: {{The Linux Kernel/id|syscall_init}} installs {{The Linux Kernel/id|entry_SYSCALL_64}}
: {{The Linux Kernel/man|2|syscall}} ↪
:: {{The Linux Kernel/id|entry_SYSCALL_64}} ↯ call hierarchy:
::: {{The Linux Kernel/id|do_syscall_64}}
:::: {{The Linux Kernel/id|sys_call_table}}
📖 References
: {{w|System call}}
: [http://man7.org/linux/man-pages/dir_section_2.html Directory of system calls, man section 2]
: Anatomy of a system call, [https://lwn.net/Articles/604287/ part 1] and [https://lwn.net/Articles/604515/ part 2]
: {{The Linux Kernel/ltp|kernel|syscalls}}
💾 ''Historical''
: [http://safari.oreilly.com/0596005652/understandlk-CHP-10 ULK3 Chapter 10. System Calls]
=== Device files ===
Classic UNIX devices are [[../Human_interfaces#Char_devices|Char devices]] used as byte streams with {{The Linux Kernel/man|2|ioctl}}.
⚲ API
ls /dev
cat /proc/devices
cat /proc/misc
Examples: {{The Linux Kernel/id|misc_fops}} {{The Linux Kernel/id|usb_fops}} {{The Linux Kernel/id|memory_fops}}
: {{The Linux Kernel/doc|Allocated devices|admin-guide/devices.html}}
: {{The Linux Kernel/source|drivers/char}} – miscellaneous byte stream devices
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch13.html Chapter 13. I/O Architecture and Device Drivers]
==== hiddev ====
⚠️ Warning: confusion. hiddev isn't real [[../Human_interfaces#HID|human interface device]]! It reuses USBHID infrastructure. hiddev is used for example for monitor controls and Uninterruptible Power Supplies.
This module supports these devices separately using a separate event interface on /dev/usb/hiddevX (char 180:96 to 180:111) (⚙️ {{The Linux Kernel/id|HIDDEV_MINOR_BASE}})
⚲ API
: {{The Linux Kernel/include|uapi/linux/hiddev.h}}
: {{The Linux Kernel/id|HID_CONNECT_HIDDEV}}
⚙️ Internals
: [https://elixir.bootlin.com/linux/latest/K/ident/CONFIG_USB_HIDDEV CONFIG_USB_HIDDEV]
: {{The Linux Kernel/include|linux/hiddev.h}}
: {{The Linux Kernel/id|hiddev_event}}
: {{The Linux Kernel/source|drivers/hid/usbhid/hiddev.c}}, {{The Linux Kernel/id|hiddev_fops}}
📖 References
: {{The Linux Kernel/doc|HIDDEV - Care and feeding of your Human Interface Devices|hid/hiddev.html}}
📖 References
: {{w|Device file}}
===Administration===
🔧 TODO
📖 References
: {{The Linux Kernel/man|7|netlink}}
: {{The Linux Kernel/doc|The Linux kernel user’s and administrator’s guide|admin-guide}}
==== procfs ====
The ''proc filesystem'' (''procfs'') is a special filesystem that presents information about processes and other system information in a hierarchical file-like structure, providing a more convenient and standardized method for dynamically accessing process data held in the kernel than traditional tracing methods or direct access to kernel memory.
Typically, it is mapped to a mount point named <code>/proc</code> at boot time.
The proc file system acts as an interface to internal data structures in the kernel.
It can be used to obtain information about the system and to change certain kernel parameters at runtime.
<code>/proc</code> includes a directory for each running process —including kernel threads— in directories named <code>/proc/PID</code>, where <code>PID</code> is the process number. Each directory contains information about one process, including the command that originally started the process (<code>/proc/PID/cmdline</code>), the names and values of its environment variables (<code>/proc/PID/environ</code>), a symlink to its working directory (<code>/proc/PID/cwd</code>), another symlink to the original executable file —if it still exists— (<code>/proc/PID/exe</code>), a couple of directories with symlinks to each open file descriptor (<code>/proc/PID/fd</code>) and the status —position, flags, ...— of each of them (<code>/proc/PID/fdinfo</code>), information about mapped files and blocks like heap and stack (<code>/proc/PID/maps</code>), a binary image representing the process's virtual memory (<code>/proc/PID/mem</code>), a symlink to the root path as seen by the process (<code>/proc/PID/root</code>), a directory containing hard links to any child process or thread (<code>/proc/PID/task</code>), basic information about a process including its run state and memory usage (<code>/proc/PID/status</code>) and much more.
📖 References
: {{w|procfs}}
: {{The Linux Kernel/man|5|procfs}}
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|linux/proc_fs.h}}
: {{The Linux Kernel/include|linux/seq_file.h}} – sequential file interface for /proc entries
: {{The Linux Kernel/source|fs/proc}} – procfs implementation
:: {{The Linux Kernel/include|linux/sysctl.h}} – /proc/sys runtime kernel tuning:
:: {{The Linux Kernel/source|fs/proc/proc_sysctl.c}} – filesystem interface
:: {{The Linux Kernel/source|kernel/sysctl.c}} – read/write handlers (proc_dointvec, proc_dostring, ...)
==== sysfs ====
sysfs is a pseudo-file system that exports information about various kernel subsystems, hardware devices, and associated device drivers from the kernel's device model to user space through virtual files.
In addition to providing information about various devices and kernel subsystems, exported virtual files are also used for their configuring.
Sysfs is designed to export the information present in the device tree, which would then no longer clutter up procfs.
Sysfs is mounted under the <code>/sys</code> mount point.
⚲ API
: {{The Linux Kernel/include|linux/sysfs.h}}
📖 References
: {{w|sysfs}}
: {{The Linux Kernel/man|5|sysfs}}
: {{The Linux Kernel/doc|sysfs - filesystem for exporting kernel objects|filesystems/sysfs.html}}
: {{The Linux Kernel/source|fs/sysfs}} – sysfs implementation
: {{The Linux Kernel/source|fs/kernfs}} – kernfs, the backing filesystem for sysfs and cgroups
==== devtmpfs ====
devtmpfs is a hybrid {{w|User space and kernel space|kernel/user space}} approach of a device filesystem to provide nodes before udev runs for the first time.
📖 References
: {{w|Device file}}
: {{The Linux Kernel/source|drivers/base/devtmpfs.c}} – kernel-maintained tmpfs /dev
==== configfs ====
{{The Linux Kernel/doc|configfs|filesystems/configfs.html}} is a userspace-driven kernel object configuration filesystem mounted at /sys/kernel/config/.
Unlike sysfs (which exposes kernel-created objects), configfs lets userspace create and configure kernel objects via mkdir/rmdir.
Used by USB gadget, NVMe target, ACPI, null_blk, GPIO simulator and other subsystems.
⚲ API:
: {{The Linux Kernel/include|linux/configfs.h}}
:: {{The Linux Kernel/id|config_item}} – base object, created by userspace mkdir
:: {{The Linux Kernel/id|config_group}} – container for config_items
:: {{The Linux Kernel/id|configfs_attribute}} – per-item readable/writable attribute
:: {{The Linux Kernel/id|configfs_subsystem}} – top-level subsystem registration
:: {{The Linux Kernel/id|configfs_register_subsystem}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/configfs}}
== Virtualization ==
🔧 TODO
See {{w|Kernel-based Virtual Machine}}
📖 References
: {{The Linux Kernel/doc|Virtualization Support|virt/}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/3-virtualization
=== Containerization ===
{{w|OS-level virtualization|Containerization}} is a powerful technology that has revolutionized the way software applications are developed, deployed, and run.
At its core, containerization provides an isolated environment for running applications, where the application has all the necessary dependencies and can be easily moved from one environment to another without worrying about any compatibility issues.
Containerization technology has its roots in the {{w|chroot}} command, which was introduced in the Unix operating system in the 1979.
Chroot provided a way to change the root directory of a process, effectively creating a new isolated environment with its own file system hierarchy.
However, this early implementation of containerization had limited functionality, and it was difficult to manage and control the various processes running within the container.
In the early 2000s, the Linux kernel introduced {{w|Linux namespaces|namespaces}} and {{w|cgroups|control groups}} to provide a more robust and scalable containerization solution.
'''Namespaces''' allow processes to have their own isolated view of the system, including the file system, network, and process ID space, while '''control groups''' provide fine-grained control over the resources allocated to each container, such as CPU, memory, and I/O.
Using these kernel features, containerization platforms such as {{w|Docker (software)|Docker}} and {{w|Kubernetes}} have emerged as popular solutions for building and deploying containerized applications at scale.
Containerization has become an essential tool for modern software development, allowing developers to easily package applications and deploy them in a consistent and predictable manner across different environments.
==== Resources usage and limits ====
⚲ API
: {{The Linux Kernel/man|2|chroot}} – change root directory
: {{The Linux Kernel/man|2|sysinfo}} – return system information
: {{The Linux Kernel/man|2|getrusage}} – get resource usage
: get/set resource limits:
:: {{The Linux Kernel/man|2|getrlimit}}
:: {{The Linux Kernel/man|2|setrlimit}}
:: {{The Linux Kernel/man|2|prlimit64}}
📖 References
: {{w|chroot}}
==== Namespaces ====
{{w|Linux namespaces}} provide the way to isolate and virtualize different aspects of the operating system.
Namespaces allow multiple instances of an application to run in isolation from each other, without interfering with the host system or other instances.
🔧 TODO
⚲ API
: /proc/self/ns
: {{The Linux Kernel/man|8|lsns}}, {{The Linux Kernel/man|2|ioctl_ns}} ↪ {{The Linux Kernel/id|ns_ioctl}}
: {{The Linux Kernel/man|1|unshare}}, {{The Linux Kernel/man|2|unshare}}
: {{The Linux Kernel/man|1|nsenter}}, {{The Linux Kernel/man|2|setns}}
: {{The Linux Kernel/man|2|clone3}} ↪ {{The Linux Kernel/id|clone_args}}
: {{The Linux Kernel/include|linux/ns_common.h}}
: {{The Linux Kernel/include|linux/proc_ns.h}}
: namespaces definition
:: {{The Linux Kernel/id|uts_namespace}}
:: {{The Linux Kernel/id|ipc_namespace}}
:: {{The Linux Kernel/id|mnt_namespace}}
:: {{The Linux Kernel/id|pid_namespace}}
:: {{The Linux Kernel/include|net/net_namespace.h}} - struct net
:: {{The Linux Kernel/id|user_namespace}}
:: {{The Linux Kernel/id|time_namespace}}
:: {{The Linux Kernel/id|cgroup_namespace}}
⚙️ Internals
: {{The Linux Kernel/id|init_nsproxy}} - struct of namespaces
: {{The Linux Kernel/source|kernel/nsproxy.c}} – namespace proxy management
: {{The Linux Kernel/source|fs/namespace.c}} – mount namespace
: {{The Linux Kernel/source|fs/proc/namespaces.c}} – /proc namespace entries
: {{The Linux Kernel/source|net/core/net_namespace.c}} – network namespace
: {{The Linux Kernel/source|kernel/time/namespace.c}} – time namespace
: {{The Linux Kernel/source|kernel/user_namespace.c}} – user namespace
: {{The Linux Kernel/source|kernel/pid_namespace.c}} – PID namespace
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace
: {{The Linux Kernel/source|kernel/cgroup/namespace.c}} – cgroup namespace
: {{The Linux Kernel/source|ipc/namespace.c}} – IPC namespace
📖 References
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
: {{The Linux Kernel/man|7|ipc_namespaces}}
: {{The Linux Kernel/man|7|mount_namespace}}
: {{The Linux Kernel/man|7|pid_namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|user_namespaces}}
: {{The Linux Kernel/man|7|time_namespaces}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
=== Control groups ===
{{w|cgroups}} are used to limit and control the resource usage of groups of processes. They allow administrators to set limits on CPU usage, memory usage, disk I/O, network bandwidth, and other resources, which can be useful for managing system performance and preventing resource contention.
There are two versions of cgroups.
Unlike v1, cgroup v2 has only a single process hierarchy and discriminates between processes, not threads.
Here are some of the key differences between cgroups v1 and v2:
{| class="wikitable"
|+
!
!cgroups v1
!cgroups v2
|-
|Hierarchy
|each subsystem had its own hierarchy, which could lead to complexity and confusion
|unified hierarchy, which simplifies management and enables better resource allocation
|-
|Controllers
|has several subsystems that are controlled by separate controllers, each with its own set of configuration files and parameters
|controllers are consolidated into a single "cgroup2" controller, which provides a unified interface for managing resources
|-
|Resource distribution
|distributes resources among groups of processes based on proportional sharing, which can lead to unpredictable results
|resources are distributed based on a "weighted fair queuing" algorithm, which provides better predictability and fairness
|}
Cgroups v2 is not backward compatible with cgroups v1, which means that migrating from v1 to v2 can be challenging and requires careful planning.
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/cgroup.h}}
: {{The Linux Kernel/include|linux/cgroup-defs.h}}
:: {{The Linux Kernel/id|css_set}} – holds set of reference-counted pointers to {{The Linux Kernel/id|cgroup_subsys_state}} objects
:: {{The Linux Kernel/id|cgroup_subsys}}
: {{The Linux Kernel/include|linux/cgroup_subsys.h}} – list of cgroup subsystems
⚙️ Internals
: {{The Linux Kernel/id|cg_list}} – list of {{The Linux Kernel/id|css_set}} in task_struct
: {{The Linux Kernel/source|kernel/cgroup}} – cgroup core
: {{The Linux Kernel/id|cgroup_init}}
: {{The Linux Kernel/id|cgroup2_fs_type}}
: {{The Linux Kernel/source|tools/testing/selftests/cgroup}} – cgroup self-tests
📖 References
: [[The_Linux_Kernel/System/CGroup_v2|Control Groups v2]]
: {{The Linux Kernel/doc|Control Groups v1|admin-guide/cgroup-v1/}}
: {{The Linux Kernel/man|1|systemd-cgtop}}
: {{The Linux Kernel/man|5|systemd.slice}} – slice unit configuration
: {{The Linux Kernel/man|7|cgroups}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
: {{The Linux Kernel/doc|CFS Bandwidth Control for cgroups|scheduler/sched-bwc.html}}
: {{The Linux Kernel/doc|Real-Time group scheduling|scheduler/sched-rt-group.html}}
: [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/latest/html/managing_monitoring_and_updating_the_kernel/setting-limits-for-applications_managing-monitoring-and-updating-the-kernel Understanding control groups, RHEL]
📚 Further reading
: https://github.com/containers
: [https://github.com/mk-fg/fgtk#cgrc cgrc tool]
💾 Historical
: https://github.com/mk-fg/cgroup-tools for cgroup v1
== Driver Model ==
The Linux driver model (or Device Model, or just DM) is a framework that provides a consistent and standardized way for device drivers to interface with the kernel.
It defines a set of rules, interfaces, and data structures that enable device drivers to communicate with the kernel and perform various operations, such as managing resources, lifecycle and more.
DM core structure consists of DM classes, DM buses, DM drivers and DM devices.
=== kobject ===
In the Linux kernel, a {{The Linux Kernel/id|kobject}} is a fundamental data structure used to represent kernel objects and provide a standardized interface for interacting with them.
A kobject is a generic object that can represent any type of kernel object, including devices, files, modules, and more.
The kobject data structure contains several fields that describe the object, such as its name, type, parent, and operations.
Each kobject has a unique name within its parent object, and the parent-child relationships form a hierarchy of kobjects.
Kobjects are managed by the kernel's sysfs file system, which provides a virtual file system that exposes kernel objects as files and directories in the user space.
Each kobject is associated with a sysfs directory, which contains files and attributes that can be read or written to interact with the kernel object.
⚲ Infrastructure API
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/id|kobject}}
: {{The Linux Kernel/doc|Kernel objects manipulation|driver-api/basics.html#kernel-objects-manipulation}}
: 🔧 TODO
=== Classes ===
A class is a higher-level view of a device that abstracts out low-level implementation details.
Drivers may see a NVME storage or a SATA storage, but, at the class level, they are all simply {{The Linux Kernel/id|block_class}} devices.
Classes allow user space to work with devices based on what they do, rather than how they are connected or how they work.
General DM classes structure match {{w|composite pattern}}.
⚲ API
: ls /sys/class/
: {{The Linux Kernel/id|class_register}} registers {{The Linux Kernel/id|class}}
: {{The Linux Kernel/include|linux/device/class.h}}
👁 Examples: {{The Linux Kernel/id|input_class}}, {{The Linux Kernel/id|block_class}} {{The Linux Kernel/id|net_class}}
=== Buses ===
A {{w|peripheral bus}} is a channel between the processor and one or more peripheral devices.
A DM bus is {{w|Proxy pattern|proxy}} for a peripheral bus.
General DM buses structure match {{w|composite pattern}}.
For the purposes of the device model, all devices are connected via a bus, even if it is an internal, virtual, {{The Linux Kernel/id|platform_bus_type}}.
Buses can plug into each other.
A USB controller is usually a PCI device, for example.
The device model represents the actual connections between buses and the devices they control.
A bus is represented by the {{The Linux Kernel/id|bus_type}} structure.
It contains the name, the default attributes, the bus' methods, PM operations, and the driver core's private data.
⚲ API
: ls /sys/bus/
: {{The Linux Kernel/id|bus_register}} registers {{The Linux Kernel/id|bus_type}}
: {{The Linux Kernel/include|linux/device/bus.h}}
👁 Examples: {{The Linux Kernel/id|usb_bus_type}}, {{The Linux Kernel/id|hid_bus_type}}, {{The Linux Kernel/id|pci_bus_type}}, {{The Linux Kernel/id|scsi_bus_type}}, {{The Linux Kernel/id|platform_bus_type}}
: [[#Peripheral_buses|Peripheral buses]]
=== Drivers ===
⚲ API
: ls /sys/bus/:/drivers/
: {{The Linux Kernel/id|module_driver}} - simple common driver initializer, 👁 for example used in {{The Linux Kernel/id|module_pci_driver}}
: {{The Linux Kernel/id|driver_register}} registers {{The Linux Kernel/id|device_driver}} - basic device driver structure, one per all device instances.
: {{The Linux Kernel/include|linux/device/driver.h}}
👁 Examples: {{The Linux Kernel/id|hid_generic}} {{The Linux Kernel/id|usb_register_device_driver}}
'''Platform drivers'''
: {{The Linux Kernel/id|module_platform_driver}} registers {{The Linux Kernel/id|platform_driver}} (platform wrapper of {{The Linux Kernel/id|device_driver}}) with {{The Linux Kernel/id|platform_bus_type}}
: {{The Linux Kernel/include|linux/platform_device.h}}
👁 Examples: {{The Linux Kernel/id|gpio_mouse_device_driver}}
=== Devices ===
⚲ API
: ls /sys/devices/
: {{The Linux Kernel/id|device_register}} registers {{The Linux Kernel/id|device}} - the basic device structure, per each device instance
: {{The Linux Kernel/include|linux/device.h}} – {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/doc|Device Resource Management|driver-api/basics.html#device-resource-management}}, devres, devm ...
👁 Examples: {{The Linux Kernel/id|platform_bus}} mousedev_create
'''Platform devices'''
: {{The Linux Kernel/id|platform_device}} - platform wrapper of {{The Linux Kernel/doc|struct <big>device</big> - the basic device structure|driver-api/infrastructure.html#c.device}}, contains resources associated with the device
: it can be created dynamically by {{The Linux Kernel/id|platform_device_register_simple}} or {{The Linux Kernel/id|platform_device_alloc}}. Or registered with {{The Linux Kernel/id|platform_device_register}}.
: {{The Linux Kernel/id|platform_device_unregister}} - releases device and associated resources
👁 Examples: {{The Linux Kernel/id|add_pcspkr}}
⚲ API 🔧 TODO
: platform_device_info platform_device_id platform_device_register_full platform_device_add
: platform_device_add_data platform_device_register_data platform_device_add_resources
: attribute_group dev_pm_ops
<hr>
⚙️ Internals
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/source|lib/kobject.c}} – kobject library
: {{The Linux Kernel/source|drivers/base/platform.c}} – platform bus for legacy devices
: {{The Linux Kernel/source|drivers/base/core.c}} – driver model core
: {{The Linux Kernel/include|linux/notifier.h}}, {{The Linux Kernel/source|kernel/notifier.c}} – notifier chains for event broadcasting
📖 References
: {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
: {{The Linux Kernel/doc|Driver Model|driver-api/driver-model}}
:: {{The Linux Kernel/doc|The Linux Kernel Device Model|driver-api/driver-model/overview.html}}
:: {{The Linux Kernel/doc|Platform Devices and Drivers|driver-api/driver-model/platform.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_model.html Linux Device Model, by linux-kernel-labs]
{{:The Linux Kernel/Modules}}
== {{w|Peripheral bus}}es ==
Peripheral buses are the communication channels used to connect various peripheral devices to a computer system.
These buses are used to transfer data between the peripheral devices and the system's processor or memory.
In the Linux kernel, peripheral buses are implemented as drivers that enable communication between the operating system and the hardware.
Peripheral buses in the Linux kernel include USB, PCI, SPI, I2C, and more.
Each of these buses has its own unique characteristics, and the Linux kernel provides support for a wide range of peripheral devices.
The PCI (Peripheral Component Interconnect) bus is used to connect internal hardware devices in a computer system.
It is commonly used to connect graphics cards, network cards, and other expansion cards.
The Linux kernel provides a PCI bus driver that enables communication between the operating system and the devices connected to the bus.
The USB (Universal Serial Bus) is one of the most commonly used peripheral buses in modern computer systems.
It allows devices to be hot-swapped and supports high-speed data transfer rates.
🔧 TODO: device enumeration
⚲ API
: Shell interface: ls /proc/bus/ /sys/bus/
See also [[#Buses|Buses of Driver Model]]
See [[../Human_interfaces#Input_devices|'''Input: keyboard, mouse etc''']]
'''PCI'''
⚲ Shell API
: lspci -vv
: column -t /proc/bus/pci/devices
Main article: [[The_Linux_Kernel/PCI|PCI]]
'''USB'''
⚲ Shell API
: lsusb -v
: ls /sys/bus/usb/
: cat /proc/bus/usb/devices
⚙️ Internals
: {{The Linux Kernel/source|drivers/usb}} – USB subsystem
📖 References
: {{The Linux Kernel/doc|USB|usb}}
: [http://lwn.net/images/pdf/LDD3/ch13.pdf LDD3:USB Drivers]
'''Other buses'''
: {{The Linux Kernel/source|drivers/bus}} – bus driver implementations
'''Buses for 🤖 embedded devices:'''
: {{The Linux Kernel/include|linux/gpio/driver.h}} {{The Linux Kernel/include|linux/gpio.h}} {{The Linux Kernel/source|drivers/gpio}} {{The Linux Kernel/source|tools/gpio}}
: {{The Linux Kernel/source|drivers/i2c}} – I2C bus framework, https://i2c.wiki.kernel.org
'''SPI'''
⚲ API
: {{The Linux Kernel/include|linux/spi/spi.h}}
: {{The Linux Kernel/source|tools/spi}} – SPI user-space tools
⚙️ Internals
: {{The Linux Kernel/source|drivers/spi}} – SPI bus framework
: {{The Linux Kernel/id|spi_register_controller}}
: {{The Linux Kernel/id|spi_controller_list}}🚧
📖 References
: {{The Linux Kernel/doc|SPI|spi}}
==Hardware interfaces==
Hardware interfaces are basic part of any operating, enabling communication between the processor and other HW components of a computer system: memory, peripheral devices and buses, various controllers.
[[../Multitasking/CPU#Interrupts|Interrupts]]
===I/O ports and registers===
I/O ports and registers are electronic components in computer systems that enable communication between CPU and other electronic controllers and devices.
⚲ API
{{The Linux Kernel/include|asm-generic/io.h}} — generic I/O port emulation.
: {{The Linux Kernel/id|ioport_map}}
: {{The Linux Kernel/id|ioread32}} / {{The Linux Kernel/id|iowrite32}} ...
: {{The Linux Kernel/id|readl}}/ {{The Linux Kernel/id|writel}} ...
: The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space:
: {{The Linux Kernel/id|inl}}/ {{The Linux Kernel/id|outl}} ...
{{The Linux Kernel/include|linux/ioport.h}}, {{The Linux Kernel/source|kernel/resource.c}} — I/O and memory resource management.
: {{The Linux Kernel/id|request_mem_region}}
{{The Linux Kernel/source|arch/x86/include/asm/io.h}} – x86 I/O port and MMIO access
Functions for memory mapped registers:
{{The Linux Kernel/id|ioremap}} ...
==== regmap ====
The regmap subsystem provides a standardized abstraction layer for register access in device drivers.
It simplifies interactions with hardware registers across various bus types,
such as I2C, SPI, and MMIO, by offering a consistent API.
⚲ API
{{The Linux Kernel/include|linux/regmap.h}} — register map access API
: the most frequently used functions:
: {{The Linux Kernel/id|regmap_update_bits}}
: {{The Linux Kernel/id|regmap_write}}
: {{The Linux Kernel/id|regmap_read}}
: {{The Linux Kernel/id|regmap_reg_range}}
: {{The Linux Kernel/id|regmap_bulk_read}}
: {{The Linux Kernel/id|devm_regmap_init_i2c}}
: {{The Linux Kernel/id|regmap_set_bits}}
: {{The Linux Kernel/id|regmap_field_write}}
: {{The Linux Kernel/id|regmap_bulk_write}}
: {{The Linux Kernel/id|regmap_clear_bits}}
: {{The Linux Kernel/id|regmap_write_bits}}
: {{The Linux Kernel/id|regmap_config}}
: {{The Linux Kernel/id|regmap_read_poll_timeout}}
: {{The Linux Kernel/id|devm_regmap_init_mmio}}
⚙️ Internals
{{The Linux Kernel/source|drivers/base/regmap}} – register map abstraction layer
===Hardware Device Drivers===
Keywords: firmware, hotplug, clock, mux, pin
⚙️ Internals
: {{The Linux Kernel/source|drivers/acpi}} – ACPI drivers
: {{The Linux Kernel/source|drivers/base}} – driver model core
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/hwmon}} – hardware monitoring
: {{The Linux Kernel/source|drivers/thermal}} – thermal management
: {{The Linux Kernel/source|drivers/pinctrl}} – pin control and multiplexing
: {{The Linux Kernel/source|drivers/clk}} – clock framework
📖 References
: {{The Linux Kernel/doc|Pin control subsystem|driver-api/pin-control.html}}
: {{The Linux Kernel/doc|Linux Hardware Monitoring|hwmon}}
: {{The Linux Kernel/doc|Firmware guide|firmware-guide}}
: {{The Linux Kernel/doc|Devicetree|devicetree}}
: https://hwmon.wiki.kernel.org/
: [http://lwn.net/images/pdf/LDD3/ch14.pdf LDD3:The Linux Device Model]
: http://www.tldp.org/LDP/tlk/dd/drivers.html
: http://www.xml.com/ldd/chapter/book/
: http://examples.oreilly.com/linuxdrive2/
=== Live patching ===
{{w|Kpatch|Live patching}} (since 4.0) allows applying critical fixes to a running kernel without rebooting.
⚲ API:
: {{The Linux Kernel/include|linux/livepatch.h}}
: {{The Linux Kernel/id|klp_patch}} – patch structure
: {{The Linux Kernel/id|klp_enable_patch}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/livepatch}} – live patching core
📖 References:
: {{The Linux Kernel/doc|Livepatch|livepatch}}
=== Booting and halting ===
==== Kernel booting ====
This is loaded in two stages - in the first stage the kernel (as a compressed image file) is loaded into memory and decompressed, and a few fundamental functions such as essential hardware and basic memory management (memory paging) are set up.
Control is then switched one final time to the main kernel start process calling {{The Linux Kernel/id|start_kernel}}, which then performs the majority of system setup (interrupts, the rest of memory management, device and driver initialization, etc.) before spawning separately, the idle process and scheduler, and the init process (which is executed in user space).
'''Kernel loading stage'''
The kernel as loaded is typically an image file, compressed into either zImage or bzImage formats with zlib.
A routine at the head of it does a minimal amount of hardware setup, decompresses the image fully into high memory, and takes note of any RAM disk if configured.
It then executes kernel startup via startup_64 (for x86_64 architecture).
: {{The Linux Kernel/source|arch/x86/boot/compressed/vmlinux.lds.S}} - linker script defines entry {{The Linux Kernel/id|startup_64}} in
: {{The Linux Kernel/source|arch/x86/boot/compressed/head_64.S}} - assembly of extractor
: {{The Linux Kernel/id|extract_kernel}} - extractor in language C
:: prints
Decompressing Linux... done.
Booting the kernel.
'''Kernel startup stage'''
The startup function for the kernel (also called the swapper or process 0) establishes memory management (paging tables and memory paging), detects the type of CPU and any additional functionality such as floating point capabilities, and then switches to non-architecture specific Linux kernel functionality via a call to {{The Linux Kernel/id|start_kernel}}.
↯ Startup call hierarchy:
: {{The Linux Kernel/source|arch/x86/kernel/vmlinux.lds.S}} – linker script
: {{The Linux Kernel/source|arch/x86/kernel/head_64.S}} – assembly of uncompressed startup code
: {{The Linux Kernel/source|arch/x86/kernel/head64.c}} – platform dependent startup:
:: {{The Linux Kernel/id|x86_64_start_kernel}}
:: {{The Linux Kernel/id|x86_64_start_reservations}}
: {{The Linux Kernel/source|init/main.c}} – main initialization code
:: {{The Linux Kernel/id|start_kernel}} 200 SLOC
::: {{The Linux Kernel/id|mm_init}}
:::: {{The Linux Kernel/id|mem_init}}
:::: {{The Linux Kernel/id|vmalloc_init}}
::: {{The Linux Kernel/id|sched_init}}
::: {{The Linux Kernel/id|rcu_init}} – {{w|Read-copy-update}}
::: {{The Linux Kernel/id|rest_init}}
:::: {{The Linux Kernel/id|kernel_init}} - deferred kernel thread #1
::::: {{The Linux Kernel/id|kernel_init_freeable}} This and following functions are defined with attribute {{The Linux Kernel/id|__init}}
:::::: {{The Linux Kernel/id|prepare_namespace}}
::::::: {{The Linux Kernel/id|initrd_load}}
::::::: {{The Linux Kernel/id|mount_root}}
::::: {{The Linux Kernel/id|run_init_process}} obviously runs the first process {{The Linux Kernel/man|1|init}}
:::: {{The Linux Kernel/id|kthreadd}} – deferred kernel thread #2
:::: {{The Linux Kernel/id|cpu_startup_entry}}
::::: {{The Linux Kernel/id|do_idle}}
{{The Linux Kernel/id|start_kernel}} executes a wide range of initialization functions. It sets up interrupt handling (IRQs), further configures memory, starts the {{The Linux Kernel/man|1|init}} process (the first user-space process), and then starts the idle task via {{The Linux Kernel/id|cpu_startup_entry}}. Notably, the kernel startup process also mounts the {{w|initial ramdisk}} (initrd) that was loaded previously as the temporary root file system during the boot phase. The initrd allows driver modules to be loaded directly from memory, without reliance upon other devices (e.g. a hard disk) and the drivers that are needed to access them (e.g. a SATA driver). This split of some drivers statically compiled into the kernel and other drivers loaded from initrd allows for a smaller kernel. The root file system is later switched via a call to {{The Linux Kernel/man|8|pivot_root}} / {{The Linux Kernel/man|2|pivot_root}} which unmounts the temporary root file system and replaces it with the use of the real one, once the latter is accessible. The memory used by the temporary root file system is then reclaimed.
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/Kconfig.debug}} – x86 debugging Kconfig options
: {{The Linux Kernel/include|linux/smpboot.h}}
: {{The Linux Kernel/source|kernel/smpboot.c}} – common SMP CPU bringup/teardown
: {{The Linux Kernel/source|arch/x86/kernel/smpboot.c}} – x86 SMP booting
: {{The Linux Kernel/include|linux/kallsyms.h}}, {{The Linux Kernel/source|kernel/kallsyms.c}} – the /proc/kallsyms kernel symbol table
===== ... =====
📖 References
: Article about [[../Booting|booting of the kernel]]
: {{The Linux Kernel/doc|Initial RAM disk|admin-guide/initrd.html}}
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=initcall_debug initcall_debug, boot argument]
: {{w|Linux startup process}}
: {{w|init}}
: [http://lwn.net/Articles/632528/ Linux (U)EFI boot process]
: {{The Linux Kernel/doc|The kernel’s command-line parameters|admin-guide/kernel-parameters.html}}
: {{The Linux Kernel/doc|The EFI Boot Stub|admin-guide/efi-stub.html}}
: {{The Linux Kernel/doc|Boot Configuration|admin-guide/bootconfig.html}}
: {{The Linux Kernel/doc|Boot time memory management|core-api/boot-time-mm.html}}
: [https://github.com/0xAX/linux-insides/blob/master/Booting/README.md Kernel booting process]
: [https://github.com/0xAX/linux-insides/blob/master/Initialization/README.md Kernel initialization process]
📚 Further reading
: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
: {{w|E820}}
💾 ''Historical''
: http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/
: http://www.tldp.org/LDP/lki/lki-1.html
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-4.html
==== Halting or rebooting ====
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/reboot.h}}
: {{The Linux Kernel/include|linux/stop_machine.h}}
:: {{The Linux Kernel/id|print_stop_info}}
:: {{The Linux Kernel/id|stop_machine}}
::: {{The Linux Kernel/id|stop_core_cpuslocked}}
: {{The Linux Kernel/id|reboot_mode}}
: {{The Linux Kernel/id|sys_reboot}} calls
:: {{The Linux Kernel/id|machine_restart}} or
:: {{The Linux Kernel/id|machine_halt}} or
:: {{The Linux Kernel/id|machine_power_off}}
: {{The Linux Kernel/include|linux/reboot-mode.h}}
:: {{The Linux Kernel/id|reboot_mode_driver}}
::: {{The Linux Kernel/id|devm_reboot_mode_register}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/reboot.c}} – reboot, halt and power-off
: {{The Linux Kernel/source|kernel/stop_machine.c}} – stop all CPUs for safe code patching
:: {{The Linux Kernel/id|cpu_stopper}}
:: {{The Linux Kernel/id|cpu_stop_init}}
::: {{The Linux Kernel/id|cpu_stopper_thread}} – "migration" tasks
: {{The Linux Kernel/source|arch/x86/kernel/reboot.c}} – x86 reboot methods
: [[../Softdog Driver/]]
==== Power management ====
Keyword: suspend, alarm, hibernation.
⚲ API
: /sys/power/
: /sys/kernel/debug/wakeup_sources
:: <big>⌨️</big> hands-on:
:: sudo awk '{gsub("^ ","?")} NR>1 {if ($6) {print $1}}' /sys/kernel/debug/wakeup_sources
: {{The Linux Kernel/include|linux/pm.h}}
:: {{The Linux Kernel/include|linux|dev_pm_ops}}
: {{The Linux Kernel/include|linux/pm_qos.h}}
: {{The Linux Kernel/include|linux/pm_clock.h}}
: {{The Linux Kernel/include|linux/pm_domain.h}}
: {{The Linux Kernel/include|linux/pm_wakeirq.h}}
: {{The Linux Kernel/include|linux/pm_wakeup.h}}
:: {{The Linux Kernel/id|wakeup_source}}
:: {{The Linux Kernel/id|wakeup_source_register}}
: {{The Linux Kernel/include|linux/suspend.h}}
:: {{The Linux Kernel/id|pm_suspend}} suspends the system
: {{The Linux Kernel/include|linux/freezer.h}} – process freezer for suspend/hibernate
: Suspend and wakeup depend on
:: {{The Linux Kernel/man|2|timer_create}} and {{The Linux Kernel/man|2|timerfd_create}} with clock ids {{The Linux Kernel/id|CLOCK_REALTIME_ALARM}} or {{The Linux Kernel/id|CLOCK_BOOTTIME_ALARM}} will wake the system if it is suspended.
:: {{The Linux Kernel/man|2|epoll_ctl}} with flag {{The Linux Kernel/id|EPOLLWAKEUP}} blocks suspend
:: See also {{The Linux Kernel/man|7|capabilities}} {{The Linux Kernel/id|CAP_WAKE_ALARM}}, {{The Linux Kernel/id|CAP_BLOCK_SUSPEND}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM}}
: {{The Linux Kernel/id|CONFIG_SUSPEND}}
: {{The Linux Kernel/source|kernel/power}} – suspend, hibernate and PM core
: {{The Linux Kernel/id|alarm_init}}
: {{The Linux Kernel/source|kernel/time/alarmtimer.c}} – alarm timer for wakeup events
: {{The Linux Kernel/source|drivers/base/power}}: {{The Linux Kernel/id|wakeup_sources}}
📖 References
: {{The Linux Kernel/doc|PM administration|admin-guide/pm}}
: {{The Linux Kernel/doc|CPU and Device PM|driver-api/pm}}
: {{The Linux Kernel/doc|Power Management|power}}
: {{The Linux Kernel/doc|sysfs power testing ABI|admin-guide/abi-testing.html#file-testing-sysfs-power}}
: https://lwn.net/Kernel/Index/#Power_management
: {{w|PowerTOP}}
: [https://linux.die.net/man/1/cpupower cpupower]
: [https://manpages.ubuntu.com/manpages/xenial/man8/tlp.8.html tlp] – apply laptop power management settings
: {{w|ACPI}} – Advanced Configuration and Power Interface
===== Runtime PM =====
Keywords: runtime power management, devices power management opportunistic suspend, autosuspend, autosleep.
⚲ API
: /sys/devices/.../power/:
:: async autosuspend_delay_ms control runtime_active_kids runtime_active_time runtime_enabled runtime_status runtime_suspended_time runtime_usage
: {{The Linux Kernel/include|linux/pm_runtime.h}}
:: {{The Linux Kernel/id|pm_runtime_mark_last_busy}}
:: {{The Linux Kernel/id|pm_runtime_enable}}
:: {{The Linux Kernel/id|pm_runtime_disable}}
:: {{The Linux Kernel/id|pm_runtime_get}} – asynchronous get
:: {{The Linux Kernel/id|pm_runtime_get_sync}}
:: {{The Linux Kernel/id|pm_runtime_resume_and_get}} – preferable synchronous get
:: {{The Linux Kernel/id|pm_runtime_put}}
:: {{The Linux Kernel/id|pm_runtime_put_noidle}} – just decrement usage counter
:: {{The Linux Kernel/id|pm_runtime_put_sync}}
:: {{The Linux Kernel/id|pm_runtime_put_autosuspend}}
: {{The Linux Kernel/id|SET_RUNTIME_PM_OPS}}
👁 Example: {{The Linux Kernel/id|ac97_pm}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM_AUTOSLEEP}}
=== ... ===
📖 References
: {{The Linux Kernel/doc|Runtime Power Management Framework for I/O Devices|power/runtime_pm.html}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/cpuidle CPU idle power saving methods for real-time workloads]
: [https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-power Sysfs devices PM API]
: [https://www.kernel.org/doc/Documentation/driver-api/usb/power-management.rst Power Management for USB]
: [https://lwn.net/Kernel/Index/#Power_management-Opportunistic_suspend Opportunistic suspend]
📚 Further reading
: https://deepwiki.com/torvalds/linux/5-hardware-drivers
== Building and Updating ==
: [[../Updating/]]
{{BookCat}}
bwfh4wowlv62n2sz5btq92h0axsovq2
4641545
4641532
2026-06-28T16:08:33Z
Conan
3188
System: reboot, kexec_load syscalls
4641545
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:System functionality}}</noinclude>
{| style="float: right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#edf" |system
|-
| bgcolor="#cdf" |[[#System interfaces|system interfaces]]
|-
| bgcolor=#abe |[[#Virtualization|virtualization]]
|-
| bgcolor="#aad" |[[#Driver Model|Driver Model]]
|- style=""
| bgcolor="#99c" |[[../Modules|modules]]
|-
| bgcolor="#88a" |[[#Peripheral buses|buses]], [[The Linux Kernel/PCI|PCI]]
|-
| bgcolor="#889" |[[#Hardware interfaces|hardware interfaces]], [[#Booting and halting|[re]booting]]
|}
The System functionality is named after system calls and sysfs.
It differs from other kernel functionalities.
Its subsystems are not tightly coupled across layers but instead provide infrastructure to other parts of the kernel.
For example, the System Calls subsystem offers a common interface layer for all functionalities exposed to user space.
== System interfaces ==
There are several mechanisms available in Linux for user space system interfaces.
One of the most common mechanisms is through {{w|system call}}s, which are functions that allow user space applications to request services from the kernel, such as opening files, creating processes, and accessing system resources.
Another mechanism for user space communication is through {{w|device file}}s, which are special files that represent physical or virtual devices, such as storage devices, network interfaces, and various peripheral devices.
User space applications can communicate with these devices by reading from and writing to their corresponding device files.
In summary, Linux kernel provides several mechanisms for user space communication, including system calls, device files, {{w|procfs}}, {{w|sysfs}}, and devtmpfs.
These mechanisms enable user space applications to communicate with the kernel and access system resources in a safe and controlled manner.
⚲ APIs:
: kernel space API for user space
:: {{The Linux Kernel/include|uapi}}
:: {{The Linux Kernel/source|arch/x86/include/uapi}} – x86 user-space API headers
:: {{The Linux Kernel/man|2|ioctl}}
:: [[#System calls|System calls]]
:: [[#Device files|Device files]]
: user space API for kernel space
:: {{The Linux Kernel/include|linux/uaccess.h}}:
:: {{The Linux Kernel/id|copy_to_user}}
:: {{The Linux Kernel/id|copy_from_user}}
📖 References
: {{The Linux Kernel/doc|User-space API guides|userspace-api}}
: {{w|User space}}
: {{w|Linux kernel interfaces}}
: [http://safari.oreilly.com/0596005652/understandlk-CHP-11 ULK3 Chapter 11. Signals]
===System calls===
System calls are the fundamental interface between user space applications and the Linux kernel.
They provide a way for programs to request services from the operating system, such as opening a file, allocating memory, or creating a new process.
In the Linux kernel, system calls are implemented as functions that can be invoked by user space programs using a software interrupt mechanism.
The Linux kernel provides hundreds of system calls, each with its own unique functionality.
These system calls are organized into categories such as process management, file management, network communication, and memory management.
User space applications can use these system calls to interact with the kernel and access the underlying system resources.
⚲ API
: [[../Syscalls|Table of syscalls]]
: {{The Linux Kernel/man|2|syscalls}}
⚙️ Internals
: {{The Linux Kernel/include|linux/syscalls.h}}
: {{The Linux Kernel/source|kernel/entry}} – common syscall entry/exit and exception handling
: {{The Linux Kernel/id|syscall_init}} installs {{The Linux Kernel/id|entry_SYSCALL_64}}
: {{The Linux Kernel/man|2|syscall}} ↪
:: {{The Linux Kernel/id|entry_SYSCALL_64}} ↯ call hierarchy:
::: {{The Linux Kernel/id|do_syscall_64}}
:::: {{The Linux Kernel/id|sys_call_table}}
📖 References
: {{w|System call}}
: [http://man7.org/linux/man-pages/dir_section_2.html Directory of system calls, man section 2]
: Anatomy of a system call, [https://lwn.net/Articles/604287/ part 1] and [https://lwn.net/Articles/604515/ part 2]
: {{The Linux Kernel/ltp|kernel|syscalls}}
💾 ''Historical''
: [http://safari.oreilly.com/0596005652/understandlk-CHP-10 ULK3 Chapter 10. System Calls]
=== Device files ===
Classic UNIX devices are [[../Human_interfaces#Char_devices|Char devices]] used as byte streams with {{The Linux Kernel/man|2|ioctl}}.
⚲ API
ls /dev
cat /proc/devices
cat /proc/misc
Examples: {{The Linux Kernel/id|misc_fops}} {{The Linux Kernel/id|usb_fops}} {{The Linux Kernel/id|memory_fops}}
: {{The Linux Kernel/doc|Allocated devices|admin-guide/devices.html}}
: {{The Linux Kernel/source|drivers/char}} – miscellaneous byte stream devices
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch13.html Chapter 13. I/O Architecture and Device Drivers]
==== hiddev ====
⚠️ Warning: confusion. hiddev isn't real [[../Human_interfaces#HID|human interface device]]! It reuses USBHID infrastructure. hiddev is used for example for monitor controls and Uninterruptible Power Supplies.
This module supports these devices separately using a separate event interface on /dev/usb/hiddevX (char 180:96 to 180:111) (⚙️ {{The Linux Kernel/id|HIDDEV_MINOR_BASE}})
⚲ API
: {{The Linux Kernel/include|uapi/linux/hiddev.h}}
: {{The Linux Kernel/id|HID_CONNECT_HIDDEV}}
⚙️ Internals
: [https://elixir.bootlin.com/linux/latest/K/ident/CONFIG_USB_HIDDEV CONFIG_USB_HIDDEV]
: {{The Linux Kernel/include|linux/hiddev.h}}
: {{The Linux Kernel/id|hiddev_event}}
: {{The Linux Kernel/source|drivers/hid/usbhid/hiddev.c}}, {{The Linux Kernel/id|hiddev_fops}}
📖 References
: {{The Linux Kernel/doc|HIDDEV - Care and feeding of your Human Interface Devices|hid/hiddev.html}}
📖 References
: {{w|Device file}}
===Administration===
🔧 TODO
📖 References
: {{The Linux Kernel/man|7|netlink}}
: {{The Linux Kernel/doc|The Linux kernel user’s and administrator’s guide|admin-guide}}
==== procfs ====
The ''proc filesystem'' (''procfs'') is a special filesystem that presents information about processes and other system information in a hierarchical file-like structure, providing a more convenient and standardized method for dynamically accessing process data held in the kernel than traditional tracing methods or direct access to kernel memory.
Typically, it is mapped to a mount point named <code>/proc</code> at boot time.
The proc file system acts as an interface to internal data structures in the kernel.
It can be used to obtain information about the system and to change certain kernel parameters at runtime.
<code>/proc</code> includes a directory for each running process —including kernel threads— in directories named <code>/proc/PID</code>, where <code>PID</code> is the process number. Each directory contains information about one process, including the command that originally started the process (<code>/proc/PID/cmdline</code>), the names and values of its environment variables (<code>/proc/PID/environ</code>), a symlink to its working directory (<code>/proc/PID/cwd</code>), another symlink to the original executable file —if it still exists— (<code>/proc/PID/exe</code>), a couple of directories with symlinks to each open file descriptor (<code>/proc/PID/fd</code>) and the status —position, flags, ...— of each of them (<code>/proc/PID/fdinfo</code>), information about mapped files and blocks like heap and stack (<code>/proc/PID/maps</code>), a binary image representing the process's virtual memory (<code>/proc/PID/mem</code>), a symlink to the root path as seen by the process (<code>/proc/PID/root</code>), a directory containing hard links to any child process or thread (<code>/proc/PID/task</code>), basic information about a process including its run state and memory usage (<code>/proc/PID/status</code>) and much more.
📖 References
: {{w|procfs}}
: {{The Linux Kernel/man|5|procfs}}
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|linux/proc_fs.h}}
: {{The Linux Kernel/include|linux/seq_file.h}} – sequential file interface for /proc entries
: {{The Linux Kernel/source|fs/proc}} – procfs implementation
:: {{The Linux Kernel/include|linux/sysctl.h}} – /proc/sys runtime kernel tuning:
:: {{The Linux Kernel/source|fs/proc/proc_sysctl.c}} – filesystem interface
:: {{The Linux Kernel/source|kernel/sysctl.c}} – read/write handlers (proc_dointvec, proc_dostring, ...)
==== sysfs ====
sysfs is a pseudo-file system that exports information about various kernel subsystems, hardware devices, and associated device drivers from the kernel's device model to user space through virtual files.
In addition to providing information about various devices and kernel subsystems, exported virtual files are also used for their configuring.
Sysfs is designed to export the information present in the device tree, which would then no longer clutter up procfs.
Sysfs is mounted under the <code>/sys</code> mount point.
⚲ API
: {{The Linux Kernel/include|linux/sysfs.h}}
📖 References
: {{w|sysfs}}
: {{The Linux Kernel/man|5|sysfs}}
: {{The Linux Kernel/doc|sysfs - filesystem for exporting kernel objects|filesystems/sysfs.html}}
: {{The Linux Kernel/source|fs/sysfs}} – sysfs implementation
: {{The Linux Kernel/source|fs/kernfs}} – kernfs, the backing filesystem for sysfs and cgroups
==== devtmpfs ====
devtmpfs is a hybrid {{w|User space and kernel space|kernel/user space}} approach of a device filesystem to provide nodes before udev runs for the first time.
📖 References
: {{w|Device file}}
: {{The Linux Kernel/source|drivers/base/devtmpfs.c}} – kernel-maintained tmpfs /dev
==== configfs ====
{{The Linux Kernel/doc|configfs|filesystems/configfs.html}} is a userspace-driven kernel object configuration filesystem mounted at /sys/kernel/config/.
Unlike sysfs (which exposes kernel-created objects), configfs lets userspace create and configure kernel objects via mkdir/rmdir.
Used by USB gadget, NVMe target, ACPI, null_blk, GPIO simulator and other subsystems.
⚲ API:
: {{The Linux Kernel/include|linux/configfs.h}}
:: {{The Linux Kernel/id|config_item}} – base object, created by userspace mkdir
:: {{The Linux Kernel/id|config_group}} – container for config_items
:: {{The Linux Kernel/id|configfs_attribute}} – per-item readable/writable attribute
:: {{The Linux Kernel/id|configfs_subsystem}} – top-level subsystem registration
:: {{The Linux Kernel/id|configfs_register_subsystem}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/configfs}}
== Virtualization ==
🔧 TODO
See {{w|Kernel-based Virtual Machine}}
📖 References
: {{The Linux Kernel/doc|Virtualization Support|virt/}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/3-virtualization
=== Containerization ===
{{w|OS-level virtualization|Containerization}} is a powerful technology that has revolutionized the way software applications are developed, deployed, and run.
At its core, containerization provides an isolated environment for running applications, where the application has all the necessary dependencies and can be easily moved from one environment to another without worrying about any compatibility issues.
Containerization technology has its roots in the {{w|chroot}} command, which was introduced in the Unix operating system in the 1979.
Chroot provided a way to change the root directory of a process, effectively creating a new isolated environment with its own file system hierarchy.
However, this early implementation of containerization had limited functionality, and it was difficult to manage and control the various processes running within the container.
In the early 2000s, the Linux kernel introduced {{w|Linux namespaces|namespaces}} and {{w|cgroups|control groups}} to provide a more robust and scalable containerization solution.
'''Namespaces''' allow processes to have their own isolated view of the system, including the file system, network, and process ID space, while '''control groups''' provide fine-grained control over the resources allocated to each container, such as CPU, memory, and I/O.
Using these kernel features, containerization platforms such as {{w|Docker (software)|Docker}} and {{w|Kubernetes}} have emerged as popular solutions for building and deploying containerized applications at scale.
Containerization has become an essential tool for modern software development, allowing developers to easily package applications and deploy them in a consistent and predictable manner across different environments.
==== Resources usage and limits ====
⚲ API
: {{The Linux Kernel/man|2|chroot}} – change root directory
: {{The Linux Kernel/man|2|sysinfo}} – return system information
: {{The Linux Kernel/man|2|getrusage}} – get resource usage
: get/set resource limits:
:: {{The Linux Kernel/man|2|getrlimit}}
:: {{The Linux Kernel/man|2|setrlimit}}
:: {{The Linux Kernel/man|2|prlimit64}}
📖 References
: {{w|chroot}}
==== Namespaces ====
{{w|Linux namespaces}} provide the way to isolate and virtualize different aspects of the operating system.
Namespaces allow multiple instances of an application to run in isolation from each other, without interfering with the host system or other instances.
🔧 TODO
⚲ API
: /proc/self/ns
: {{The Linux Kernel/man|8|lsns}}, {{The Linux Kernel/man|2|ioctl_ns}} ↪ {{The Linux Kernel/id|ns_ioctl}}
: {{The Linux Kernel/man|1|unshare}}, {{The Linux Kernel/man|2|unshare}}
: {{The Linux Kernel/man|1|nsenter}}, {{The Linux Kernel/man|2|setns}}
: {{The Linux Kernel/man|2|clone3}} ↪ {{The Linux Kernel/id|clone_args}}
: {{The Linux Kernel/include|linux/ns_common.h}}
: {{The Linux Kernel/include|linux/proc_ns.h}}
: namespaces definition
:: {{The Linux Kernel/id|uts_namespace}}
:: {{The Linux Kernel/id|ipc_namespace}}
:: {{The Linux Kernel/id|mnt_namespace}}
:: {{The Linux Kernel/id|pid_namespace}}
:: {{The Linux Kernel/include|net/net_namespace.h}} - struct net
:: {{The Linux Kernel/id|user_namespace}}
:: {{The Linux Kernel/id|time_namespace}}
:: {{The Linux Kernel/id|cgroup_namespace}}
⚙️ Internals
: {{The Linux Kernel/id|init_nsproxy}} - struct of namespaces
: {{The Linux Kernel/source|kernel/nsproxy.c}} – namespace proxy management
: {{The Linux Kernel/source|fs/namespace.c}} – mount namespace
: {{The Linux Kernel/source|fs/proc/namespaces.c}} – /proc namespace entries
: {{The Linux Kernel/source|net/core/net_namespace.c}} – network namespace
: {{The Linux Kernel/source|kernel/time/namespace.c}} – time namespace
: {{The Linux Kernel/source|kernel/user_namespace.c}} – user namespace
: {{The Linux Kernel/source|kernel/pid_namespace.c}} – PID namespace
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace
: {{The Linux Kernel/source|kernel/cgroup/namespace.c}} – cgroup namespace
: {{The Linux Kernel/source|ipc/namespace.c}} – IPC namespace
📖 References
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
: {{The Linux Kernel/man|7|ipc_namespaces}}
: {{The Linux Kernel/man|7|mount_namespace}}
: {{The Linux Kernel/man|7|pid_namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|user_namespaces}}
: {{The Linux Kernel/man|7|time_namespaces}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
=== Control groups ===
{{w|cgroups}} are used to limit and control the resource usage of groups of processes. They allow administrators to set limits on CPU usage, memory usage, disk I/O, network bandwidth, and other resources, which can be useful for managing system performance and preventing resource contention.
There are two versions of cgroups.
Unlike v1, cgroup v2 has only a single process hierarchy and discriminates between processes, not threads.
Here are some of the key differences between cgroups v1 and v2:
{| class="wikitable"
|+
!
!cgroups v1
!cgroups v2
|-
|Hierarchy
|each subsystem had its own hierarchy, which could lead to complexity and confusion
|unified hierarchy, which simplifies management and enables better resource allocation
|-
|Controllers
|has several subsystems that are controlled by separate controllers, each with its own set of configuration files and parameters
|controllers are consolidated into a single "cgroup2" controller, which provides a unified interface for managing resources
|-
|Resource distribution
|distributes resources among groups of processes based on proportional sharing, which can lead to unpredictable results
|resources are distributed based on a "weighted fair queuing" algorithm, which provides better predictability and fairness
|}
Cgroups v2 is not backward compatible with cgroups v1, which means that migrating from v1 to v2 can be challenging and requires careful planning.
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/cgroup.h}}
: {{The Linux Kernel/include|linux/cgroup-defs.h}}
:: {{The Linux Kernel/id|css_set}} – holds set of reference-counted pointers to {{The Linux Kernel/id|cgroup_subsys_state}} objects
:: {{The Linux Kernel/id|cgroup_subsys}}
: {{The Linux Kernel/include|linux/cgroup_subsys.h}} – list of cgroup subsystems
⚙️ Internals
: {{The Linux Kernel/id|cg_list}} – list of {{The Linux Kernel/id|css_set}} in task_struct
: {{The Linux Kernel/source|kernel/cgroup}} – cgroup core
: {{The Linux Kernel/id|cgroup_init}}
: {{The Linux Kernel/id|cgroup2_fs_type}}
: {{The Linux Kernel/source|tools/testing/selftests/cgroup}} – cgroup self-tests
📖 References
: [[The_Linux_Kernel/System/CGroup_v2|Control Groups v2]]
: {{The Linux Kernel/doc|Control Groups v1|admin-guide/cgroup-v1/}}
: {{The Linux Kernel/man|1|systemd-cgtop}}
: {{The Linux Kernel/man|5|systemd.slice}} – slice unit configuration
: {{The Linux Kernel/man|7|cgroups}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
: {{The Linux Kernel/doc|CFS Bandwidth Control for cgroups|scheduler/sched-bwc.html}}
: {{The Linux Kernel/doc|Real-Time group scheduling|scheduler/sched-rt-group.html}}
: [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/latest/html/managing_monitoring_and_updating_the_kernel/setting-limits-for-applications_managing-monitoring-and-updating-the-kernel Understanding control groups, RHEL]
📚 Further reading
: https://github.com/containers
: [https://github.com/mk-fg/fgtk#cgrc cgrc tool]
💾 Historical
: https://github.com/mk-fg/cgroup-tools for cgroup v1
== Driver Model ==
The Linux driver model (or Device Model, or just DM) is a framework that provides a consistent and standardized way for device drivers to interface with the kernel.
It defines a set of rules, interfaces, and data structures that enable device drivers to communicate with the kernel and perform various operations, such as managing resources, lifecycle and more.
DM core structure consists of DM classes, DM buses, DM drivers and DM devices.
=== kobject ===
In the Linux kernel, a {{The Linux Kernel/id|kobject}} is a fundamental data structure used to represent kernel objects and provide a standardized interface for interacting with them.
A kobject is a generic object that can represent any type of kernel object, including devices, files, modules, and more.
The kobject data structure contains several fields that describe the object, such as its name, type, parent, and operations.
Each kobject has a unique name within its parent object, and the parent-child relationships form a hierarchy of kobjects.
Kobjects are managed by the kernel's sysfs file system, which provides a virtual file system that exposes kernel objects as files and directories in the user space.
Each kobject is associated with a sysfs directory, which contains files and attributes that can be read or written to interact with the kernel object.
⚲ Infrastructure API
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/id|kobject}}
: {{The Linux Kernel/doc|Kernel objects manipulation|driver-api/basics.html#kernel-objects-manipulation}}
: 🔧 TODO
=== Classes ===
A class is a higher-level view of a device that abstracts out low-level implementation details.
Drivers may see a NVME storage or a SATA storage, but, at the class level, they are all simply {{The Linux Kernel/id|block_class}} devices.
Classes allow user space to work with devices based on what they do, rather than how they are connected or how they work.
General DM classes structure match {{w|composite pattern}}.
⚲ API
: ls /sys/class/
: {{The Linux Kernel/id|class_register}} registers {{The Linux Kernel/id|class}}
: {{The Linux Kernel/include|linux/device/class.h}}
👁 Examples: {{The Linux Kernel/id|input_class}}, {{The Linux Kernel/id|block_class}} {{The Linux Kernel/id|net_class}}
=== Buses ===
A {{w|peripheral bus}} is a channel between the processor and one or more peripheral devices.
A DM bus is {{w|Proxy pattern|proxy}} for a peripheral bus.
General DM buses structure match {{w|composite pattern}}.
For the purposes of the device model, all devices are connected via a bus, even if it is an internal, virtual, {{The Linux Kernel/id|platform_bus_type}}.
Buses can plug into each other.
A USB controller is usually a PCI device, for example.
The device model represents the actual connections between buses and the devices they control.
A bus is represented by the {{The Linux Kernel/id|bus_type}} structure.
It contains the name, the default attributes, the bus' methods, PM operations, and the driver core's private data.
⚲ API
: ls /sys/bus/
: {{The Linux Kernel/id|bus_register}} registers {{The Linux Kernel/id|bus_type}}
: {{The Linux Kernel/include|linux/device/bus.h}}
👁 Examples: {{The Linux Kernel/id|usb_bus_type}}, {{The Linux Kernel/id|hid_bus_type}}, {{The Linux Kernel/id|pci_bus_type}}, {{The Linux Kernel/id|scsi_bus_type}}, {{The Linux Kernel/id|platform_bus_type}}
: [[#Peripheral_buses|Peripheral buses]]
=== Drivers ===
⚲ API
: ls /sys/bus/:/drivers/
: {{The Linux Kernel/id|module_driver}} - simple common driver initializer, 👁 for example used in {{The Linux Kernel/id|module_pci_driver}}
: {{The Linux Kernel/id|driver_register}} registers {{The Linux Kernel/id|device_driver}} - basic device driver structure, one per all device instances.
: {{The Linux Kernel/include|linux/device/driver.h}}
👁 Examples: {{The Linux Kernel/id|hid_generic}} {{The Linux Kernel/id|usb_register_device_driver}}
'''Platform drivers'''
: {{The Linux Kernel/id|module_platform_driver}} registers {{The Linux Kernel/id|platform_driver}} (platform wrapper of {{The Linux Kernel/id|device_driver}}) with {{The Linux Kernel/id|platform_bus_type}}
: {{The Linux Kernel/include|linux/platform_device.h}}
👁 Examples: {{The Linux Kernel/id|gpio_mouse_device_driver}}
=== Devices ===
⚲ API
: ls /sys/devices/
: {{The Linux Kernel/id|device_register}} registers {{The Linux Kernel/id|device}} - the basic device structure, per each device instance
: {{The Linux Kernel/include|linux/device.h}} – {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/doc|Device Resource Management|driver-api/basics.html#device-resource-management}}, devres, devm ...
👁 Examples: {{The Linux Kernel/id|platform_bus}} mousedev_create
'''Platform devices'''
: {{The Linux Kernel/id|platform_device}} - platform wrapper of {{The Linux Kernel/doc|struct <big>device</big> - the basic device structure|driver-api/infrastructure.html#c.device}}, contains resources associated with the device
: it can be created dynamically by {{The Linux Kernel/id|platform_device_register_simple}} or {{The Linux Kernel/id|platform_device_alloc}}. Or registered with {{The Linux Kernel/id|platform_device_register}}.
: {{The Linux Kernel/id|platform_device_unregister}} - releases device and associated resources
👁 Examples: {{The Linux Kernel/id|add_pcspkr}}
⚲ API 🔧 TODO
: platform_device_info platform_device_id platform_device_register_full platform_device_add
: platform_device_add_data platform_device_register_data platform_device_add_resources
: attribute_group dev_pm_ops
<hr>
⚙️ Internals
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/source|lib/kobject.c}} – kobject library
: {{The Linux Kernel/source|drivers/base/platform.c}} – platform bus for legacy devices
: {{The Linux Kernel/source|drivers/base/core.c}} – driver model core
: {{The Linux Kernel/include|linux/notifier.h}}, {{The Linux Kernel/source|kernel/notifier.c}} – notifier chains for event broadcasting
📖 References
: {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
: {{The Linux Kernel/doc|Driver Model|driver-api/driver-model}}
:: {{The Linux Kernel/doc|The Linux Kernel Device Model|driver-api/driver-model/overview.html}}
:: {{The Linux Kernel/doc|Platform Devices and Drivers|driver-api/driver-model/platform.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_model.html Linux Device Model, by linux-kernel-labs]
{{:The Linux Kernel/Modules}}
== {{w|Peripheral bus}}es ==
Peripheral buses are the communication channels used to connect various peripheral devices to a computer system.
These buses are used to transfer data between the peripheral devices and the system's processor or memory.
In the Linux kernel, peripheral buses are implemented as drivers that enable communication between the operating system and the hardware.
Peripheral buses in the Linux kernel include USB, PCI, SPI, I2C, and more.
Each of these buses has its own unique characteristics, and the Linux kernel provides support for a wide range of peripheral devices.
The PCI (Peripheral Component Interconnect) bus is used to connect internal hardware devices in a computer system.
It is commonly used to connect graphics cards, network cards, and other expansion cards.
The Linux kernel provides a PCI bus driver that enables communication between the operating system and the devices connected to the bus.
The USB (Universal Serial Bus) is one of the most commonly used peripheral buses in modern computer systems.
It allows devices to be hot-swapped and supports high-speed data transfer rates.
🔧 TODO: device enumeration
⚲ API
: Shell interface: ls /proc/bus/ /sys/bus/
See also [[#Buses|Buses of Driver Model]]
See [[../Human_interfaces#Input_devices|'''Input: keyboard, mouse etc''']]
'''PCI'''
⚲ Shell API
: lspci -vv
: column -t /proc/bus/pci/devices
Main article: [[The_Linux_Kernel/PCI|PCI]]
'''USB'''
⚲ Shell API
: lsusb -v
: ls /sys/bus/usb/
: cat /proc/bus/usb/devices
⚙️ Internals
: {{The Linux Kernel/source|drivers/usb}} – USB subsystem
📖 References
: {{The Linux Kernel/doc|USB|usb}}
: [http://lwn.net/images/pdf/LDD3/ch13.pdf LDD3:USB Drivers]
'''Other buses'''
: {{The Linux Kernel/source|drivers/bus}} – bus driver implementations
'''Buses for 🤖 embedded devices:'''
: {{The Linux Kernel/include|linux/gpio/driver.h}} {{The Linux Kernel/include|linux/gpio.h}} {{The Linux Kernel/source|drivers/gpio}} {{The Linux Kernel/source|tools/gpio}}
: {{The Linux Kernel/source|drivers/i2c}} – I2C bus framework, https://i2c.wiki.kernel.org
'''SPI'''
⚲ API
: {{The Linux Kernel/include|linux/spi/spi.h}}
: {{The Linux Kernel/source|tools/spi}} – SPI user-space tools
⚙️ Internals
: {{The Linux Kernel/source|drivers/spi}} – SPI bus framework
: {{The Linux Kernel/id|spi_register_controller}}
: {{The Linux Kernel/id|spi_controller_list}}🚧
📖 References
: {{The Linux Kernel/doc|SPI|spi}}
==Hardware interfaces==
Hardware interfaces are basic part of any operating, enabling communication between the processor and other HW components of a computer system: memory, peripheral devices and buses, various controllers.
[[../Multitasking/CPU#Interrupts|Interrupts]]
===I/O ports and registers===
I/O ports and registers are electronic components in computer systems that enable communication between CPU and other electronic controllers and devices.
⚲ API
{{The Linux Kernel/include|asm-generic/io.h}} — generic I/O port emulation.
: {{The Linux Kernel/id|ioport_map}}
: {{The Linux Kernel/id|ioread32}} / {{The Linux Kernel/id|iowrite32}} ...
: {{The Linux Kernel/id|readl}}/ {{The Linux Kernel/id|writel}} ...
: The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space:
: {{The Linux Kernel/id|inl}}/ {{The Linux Kernel/id|outl}} ...
{{The Linux Kernel/include|linux/ioport.h}}, {{The Linux Kernel/source|kernel/resource.c}} — I/O and memory resource management.
: {{The Linux Kernel/id|request_mem_region}}
{{The Linux Kernel/source|arch/x86/include/asm/io.h}} – x86 I/O port and MMIO access
Functions for memory mapped registers:
{{The Linux Kernel/id|ioremap}} ...
==== regmap ====
The regmap subsystem provides a standardized abstraction layer for register access in device drivers.
It simplifies interactions with hardware registers across various bus types,
such as I2C, SPI, and MMIO, by offering a consistent API.
⚲ API
{{The Linux Kernel/include|linux/regmap.h}} — register map access API
: the most frequently used functions:
: {{The Linux Kernel/id|regmap_update_bits}}
: {{The Linux Kernel/id|regmap_write}}
: {{The Linux Kernel/id|regmap_read}}
: {{The Linux Kernel/id|regmap_reg_range}}
: {{The Linux Kernel/id|regmap_bulk_read}}
: {{The Linux Kernel/id|devm_regmap_init_i2c}}
: {{The Linux Kernel/id|regmap_set_bits}}
: {{The Linux Kernel/id|regmap_field_write}}
: {{The Linux Kernel/id|regmap_bulk_write}}
: {{The Linux Kernel/id|regmap_clear_bits}}
: {{The Linux Kernel/id|regmap_write_bits}}
: {{The Linux Kernel/id|regmap_config}}
: {{The Linux Kernel/id|regmap_read_poll_timeout}}
: {{The Linux Kernel/id|devm_regmap_init_mmio}}
⚙️ Internals
{{The Linux Kernel/source|drivers/base/regmap}} – register map abstraction layer
===Hardware Device Drivers===
Keywords: firmware, hotplug, clock, mux, pin
⚙️ Internals
: {{The Linux Kernel/source|drivers/acpi}} – ACPI drivers
: {{The Linux Kernel/source|drivers/base}} – driver model core
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/hwmon}} – hardware monitoring
: {{The Linux Kernel/source|drivers/thermal}} – thermal management
: {{The Linux Kernel/source|drivers/pinctrl}} – pin control and multiplexing
: {{The Linux Kernel/source|drivers/clk}} – clock framework
📖 References
: {{The Linux Kernel/doc|Pin control subsystem|driver-api/pin-control.html}}
: {{The Linux Kernel/doc|Linux Hardware Monitoring|hwmon}}
: {{The Linux Kernel/doc|Firmware guide|firmware-guide}}
: {{The Linux Kernel/doc|Devicetree|devicetree}}
: https://hwmon.wiki.kernel.org/
: [http://lwn.net/images/pdf/LDD3/ch14.pdf LDD3:The Linux Device Model]
: http://www.tldp.org/LDP/tlk/dd/drivers.html
: http://www.xml.com/ldd/chapter/book/
: http://examples.oreilly.com/linuxdrive2/
=== Live patching ===
{{w|Kpatch|Live patching}} (since 4.0) allows applying critical fixes to a running kernel without rebooting.
⚲ API:
: {{The Linux Kernel/include|linux/livepatch.h}}
: {{The Linux Kernel/id|klp_patch}} – patch structure
: {{The Linux Kernel/id|klp_enable_patch}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/livepatch}} – live patching core
📖 References:
: {{The Linux Kernel/doc|Livepatch|livepatch}}
=== Booting and halting ===
==== Kernel booting ====
This is loaded in two stages - in the first stage the kernel (as a compressed image file) is loaded into memory and decompressed, and a few fundamental functions such as essential hardware and basic memory management (memory paging) are set up.
Control is then switched one final time to the main kernel start process calling {{The Linux Kernel/id|start_kernel}}, which then performs the majority of system setup (interrupts, the rest of memory management, device and driver initialization, etc.) before spawning separately, the idle process and scheduler, and the init process (which is executed in user space).
'''Kernel loading stage'''
The kernel as loaded is typically an image file, compressed into either zImage or bzImage formats with zlib.
A routine at the head of it does a minimal amount of hardware setup, decompresses the image fully into high memory, and takes note of any RAM disk if configured.
It then executes kernel startup via startup_64 (for x86_64 architecture).
: {{The Linux Kernel/source|arch/x86/boot/compressed/vmlinux.lds.S}} - linker script defines entry {{The Linux Kernel/id|startup_64}} in
: {{The Linux Kernel/source|arch/x86/boot/compressed/head_64.S}} - assembly of extractor
: {{The Linux Kernel/id|extract_kernel}} - extractor in language C
:: prints
Decompressing Linux... done.
Booting the kernel.
'''Kernel startup stage'''
The startup function for the kernel (also called the swapper or process 0) establishes memory management (paging tables and memory paging), detects the type of CPU and any additional functionality such as floating point capabilities, and then switches to non-architecture specific Linux kernel functionality via a call to {{The Linux Kernel/id|start_kernel}}.
↯ Startup call hierarchy:
: {{The Linux Kernel/source|arch/x86/kernel/vmlinux.lds.S}} – linker script
: {{The Linux Kernel/source|arch/x86/kernel/head_64.S}} – assembly of uncompressed startup code
: {{The Linux Kernel/source|arch/x86/kernel/head64.c}} – platform dependent startup:
:: {{The Linux Kernel/id|x86_64_start_kernel}}
:: {{The Linux Kernel/id|x86_64_start_reservations}}
: {{The Linux Kernel/source|init/main.c}} – main initialization code
:: {{The Linux Kernel/id|start_kernel}} 200 SLOC
::: {{The Linux Kernel/id|mm_init}}
:::: {{The Linux Kernel/id|mem_init}}
:::: {{The Linux Kernel/id|vmalloc_init}}
::: {{The Linux Kernel/id|sched_init}}
::: {{The Linux Kernel/id|rcu_init}} – {{w|Read-copy-update}}
::: {{The Linux Kernel/id|rest_init}}
:::: {{The Linux Kernel/id|kernel_init}} - deferred kernel thread #1
::::: {{The Linux Kernel/id|kernel_init_freeable}} This and following functions are defined with attribute {{The Linux Kernel/id|__init}}
:::::: {{The Linux Kernel/id|prepare_namespace}}
::::::: {{The Linux Kernel/id|initrd_load}}
::::::: {{The Linux Kernel/id|mount_root}}
::::: {{The Linux Kernel/id|run_init_process}} obviously runs the first process {{The Linux Kernel/man|1|init}}
:::: {{The Linux Kernel/id|kthreadd}} – deferred kernel thread #2
:::: {{The Linux Kernel/id|cpu_startup_entry}}
::::: {{The Linux Kernel/id|do_idle}}
{{The Linux Kernel/id|start_kernel}} executes a wide range of initialization functions. It sets up interrupt handling (IRQs), further configures memory, starts the {{The Linux Kernel/man|1|init}} process (the first user-space process), and then starts the idle task via {{The Linux Kernel/id|cpu_startup_entry}}. Notably, the kernel startup process also mounts the {{w|initial ramdisk}} (initrd) that was loaded previously as the temporary root file system during the boot phase. The initrd allows driver modules to be loaded directly from memory, without reliance upon other devices (e.g. a hard disk) and the drivers that are needed to access them (e.g. a SATA driver). This split of some drivers statically compiled into the kernel and other drivers loaded from initrd allows for a smaller kernel. The root file system is later switched via a call to {{The Linux Kernel/man|8|pivot_root}} / {{The Linux Kernel/man|2|pivot_root}} which unmounts the temporary root file system and replaces it with the use of the real one, once the latter is accessible. The memory used by the temporary root file system is then reclaimed.
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/Kconfig.debug}} – x86 debugging Kconfig options
: {{The Linux Kernel/include|linux/smpboot.h}}
: {{The Linux Kernel/source|kernel/smpboot.c}} – common SMP CPU bringup/teardown
: {{The Linux Kernel/source|arch/x86/kernel/smpboot.c}} – x86 SMP booting
: {{The Linux Kernel/include|linux/kallsyms.h}}, {{The Linux Kernel/source|kernel/kallsyms.c}} – the /proc/kallsyms kernel symbol table
===== ... =====
📖 References
: Article about [[../Booting|booting of the kernel]]
: {{The Linux Kernel/doc|Initial RAM disk|admin-guide/initrd.html}}
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=initcall_debug initcall_debug, boot argument]
: {{w|Linux startup process}}
: {{w|init}}
: [http://lwn.net/Articles/632528/ Linux (U)EFI boot process]
: {{The Linux Kernel/doc|The kernel’s command-line parameters|admin-guide/kernel-parameters.html}}
: {{The Linux Kernel/doc|The EFI Boot Stub|admin-guide/efi-stub.html}}
: {{The Linux Kernel/doc|Boot Configuration|admin-guide/bootconfig.html}}
: {{The Linux Kernel/doc|Boot time memory management|core-api/boot-time-mm.html}}
: [https://github.com/0xAX/linux-insides/blob/master/Booting/README.md Kernel booting process]
: [https://github.com/0xAX/linux-insides/blob/master/Initialization/README.md Kernel initialization process]
📚 Further reading
: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
: {{w|E820}}
💾 ''Historical''
: http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/
: http://www.tldp.org/LDP/lki/lki-1.html
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-4.html
==== Halting or rebooting ====
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/reboot.h}}
: {{The Linux Kernel/include|linux/stop_machine.h}}
:: {{The Linux Kernel/id|print_stop_info}}
:: {{The Linux Kernel/id|stop_machine}}
::: {{The Linux Kernel/id|stop_core_cpuslocked}}
: {{The Linux Kernel/man|2|reboot}} ↪ {{The Linux Kernel/id|sys_reboot}} calls
: {{The Linux Kernel/man|2|kexec_load}} ↪ {{The Linux Kernel/source|kernel/kexec.c}} – load a new kernel for later execution ({{w|kdump (Linux)|kdump}})
: {{The Linux Kernel/id|reboot_mode}}
:: {{The Linux Kernel/id|machine_restart}} or
:: {{The Linux Kernel/id|machine_halt}} or
:: {{The Linux Kernel/id|machine_power_off}}
: {{The Linux Kernel/include|linux/reboot-mode.h}}
:: {{The Linux Kernel/id|reboot_mode_driver}}
::: {{The Linux Kernel/id|devm_reboot_mode_register}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/reboot.c}} – reboot, halt and power-off
: {{The Linux Kernel/source|kernel/stop_machine.c}} – stop all CPUs for safe code patching
:: {{The Linux Kernel/id|cpu_stopper}}
:: {{The Linux Kernel/id|cpu_stop_init}}
::: {{The Linux Kernel/id|cpu_stopper_thread}} – "migration" tasks
: {{The Linux Kernel/source|arch/x86/kernel/reboot.c}} – x86 reboot methods
: [[../Softdog Driver/]]
==== Power management ====
Keyword: suspend, alarm, hibernation.
⚲ API
: /sys/power/
: /sys/kernel/debug/wakeup_sources
:: <big>⌨️</big> hands-on:
:: sudo awk '{gsub("^ ","?")} NR>1 {if ($6) {print $1}}' /sys/kernel/debug/wakeup_sources
: {{The Linux Kernel/include|linux/pm.h}}
:: {{The Linux Kernel/include|linux|dev_pm_ops}}
: {{The Linux Kernel/include|linux/pm_qos.h}}
: {{The Linux Kernel/include|linux/pm_clock.h}}
: {{The Linux Kernel/include|linux/pm_domain.h}}
: {{The Linux Kernel/include|linux/pm_wakeirq.h}}
: {{The Linux Kernel/include|linux/pm_wakeup.h}}
:: {{The Linux Kernel/id|wakeup_source}}
:: {{The Linux Kernel/id|wakeup_source_register}}
: {{The Linux Kernel/include|linux/suspend.h}}
:: {{The Linux Kernel/id|pm_suspend}} suspends the system
: {{The Linux Kernel/include|linux/freezer.h}} – process freezer for suspend/hibernate
: Suspend and wakeup depend on
:: {{The Linux Kernel/man|2|timer_create}} and {{The Linux Kernel/man|2|timerfd_create}} with clock ids {{The Linux Kernel/id|CLOCK_REALTIME_ALARM}} or {{The Linux Kernel/id|CLOCK_BOOTTIME_ALARM}} will wake the system if it is suspended.
:: {{The Linux Kernel/man|2|epoll_ctl}} with flag {{The Linux Kernel/id|EPOLLWAKEUP}} blocks suspend
:: See also {{The Linux Kernel/man|7|capabilities}} {{The Linux Kernel/id|CAP_WAKE_ALARM}}, {{The Linux Kernel/id|CAP_BLOCK_SUSPEND}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM}}
: {{The Linux Kernel/id|CONFIG_SUSPEND}}
: {{The Linux Kernel/source|kernel/power}} – suspend, hibernate and PM core
: {{The Linux Kernel/id|alarm_init}}
: {{The Linux Kernel/source|kernel/time/alarmtimer.c}} – alarm timer for wakeup events
: {{The Linux Kernel/source|drivers/base/power}}: {{The Linux Kernel/id|wakeup_sources}}
📖 References
: {{The Linux Kernel/doc|PM administration|admin-guide/pm}}
: {{The Linux Kernel/doc|CPU and Device PM|driver-api/pm}}
: {{The Linux Kernel/doc|Power Management|power}}
: {{The Linux Kernel/doc|sysfs power testing ABI|admin-guide/abi-testing.html#file-testing-sysfs-power}}
: https://lwn.net/Kernel/Index/#Power_management
: {{w|PowerTOP}}
: [https://linux.die.net/man/1/cpupower cpupower]
: [https://manpages.ubuntu.com/manpages/xenial/man8/tlp.8.html tlp] – apply laptop power management settings
: {{w|ACPI}} – Advanced Configuration and Power Interface
===== Runtime PM =====
Keywords: runtime power management, devices power management opportunistic suspend, autosuspend, autosleep.
⚲ API
: /sys/devices/.../power/:
:: async autosuspend_delay_ms control runtime_active_kids runtime_active_time runtime_enabled runtime_status runtime_suspended_time runtime_usage
: {{The Linux Kernel/include|linux/pm_runtime.h}}
:: {{The Linux Kernel/id|pm_runtime_mark_last_busy}}
:: {{The Linux Kernel/id|pm_runtime_enable}}
:: {{The Linux Kernel/id|pm_runtime_disable}}
:: {{The Linux Kernel/id|pm_runtime_get}} – asynchronous get
:: {{The Linux Kernel/id|pm_runtime_get_sync}}
:: {{The Linux Kernel/id|pm_runtime_resume_and_get}} – preferable synchronous get
:: {{The Linux Kernel/id|pm_runtime_put}}
:: {{The Linux Kernel/id|pm_runtime_put_noidle}} – just decrement usage counter
:: {{The Linux Kernel/id|pm_runtime_put_sync}}
:: {{The Linux Kernel/id|pm_runtime_put_autosuspend}}
: {{The Linux Kernel/id|SET_RUNTIME_PM_OPS}}
👁 Example: {{The Linux Kernel/id|ac97_pm}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM_AUTOSLEEP}}
=== ... ===
📖 References
: {{The Linux Kernel/doc|Runtime Power Management Framework for I/O Devices|power/runtime_pm.html}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/cpuidle CPU idle power saving methods for real-time workloads]
: [https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-power Sysfs devices PM API]
: [https://www.kernel.org/doc/Documentation/driver-api/usb/power-management.rst Power Management for USB]
: [https://lwn.net/Kernel/Index/#Power_management-Opportunistic_suspend Opportunistic suspend]
📚 Further reading
: https://deepwiki.com/torvalds/linux/5-hardware-drivers
== Building and Updating ==
: [[../Updating/]]
{{BookCat}}
nnhrhjefffusmgf4xx0ihowcbz68hyl
4641573
4641545
2026-06-28T19:52:55Z
Conan
3188
System: fix sys_reboot children indentation
4641573
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:System functionality}}</noinclude>
{| style="float: right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#edf" |system
|-
| bgcolor="#cdf" |[[#System interfaces|system interfaces]]
|-
| bgcolor=#abe |[[#Virtualization|virtualization]]
|-
| bgcolor="#aad" |[[#Driver Model|Driver Model]]
|- style=""
| bgcolor="#99c" |[[../Modules|modules]]
|-
| bgcolor="#88a" |[[#Peripheral buses|buses]], [[The Linux Kernel/PCI|PCI]]
|-
| bgcolor="#889" |[[#Hardware interfaces|hardware interfaces]], [[#Booting and halting|[re]booting]]
|}
The System functionality is named after system calls and sysfs.
It differs from other kernel functionalities.
Its subsystems are not tightly coupled across layers but instead provide infrastructure to other parts of the kernel.
For example, the System Calls subsystem offers a common interface layer for all functionalities exposed to user space.
== System interfaces ==
There are several mechanisms available in Linux for user space system interfaces.
One of the most common mechanisms is through {{w|system call}}s, which are functions that allow user space applications to request services from the kernel, such as opening files, creating processes, and accessing system resources.
Another mechanism for user space communication is through {{w|device file}}s, which are special files that represent physical or virtual devices, such as storage devices, network interfaces, and various peripheral devices.
User space applications can communicate with these devices by reading from and writing to their corresponding device files.
In summary, Linux kernel provides several mechanisms for user space communication, including system calls, device files, {{w|procfs}}, {{w|sysfs}}, and devtmpfs.
These mechanisms enable user space applications to communicate with the kernel and access system resources in a safe and controlled manner.
⚲ APIs:
: kernel space API for user space
:: {{The Linux Kernel/include|uapi}}
:: {{The Linux Kernel/source|arch/x86/include/uapi}} – x86 user-space API headers
:: {{The Linux Kernel/man|2|ioctl}}
:: [[#System calls|System calls]]
:: [[#Device files|Device files]]
: user space API for kernel space
:: {{The Linux Kernel/include|linux/uaccess.h}}:
:: {{The Linux Kernel/id|copy_to_user}}
:: {{The Linux Kernel/id|copy_from_user}}
📖 References
: {{The Linux Kernel/doc|User-space API guides|userspace-api}}
: {{w|User space}}
: {{w|Linux kernel interfaces}}
: [http://safari.oreilly.com/0596005652/understandlk-CHP-11 ULK3 Chapter 11. Signals]
===System calls===
System calls are the fundamental interface between user space applications and the Linux kernel.
They provide a way for programs to request services from the operating system, such as opening a file, allocating memory, or creating a new process.
In the Linux kernel, system calls are implemented as functions that can be invoked by user space programs using a software interrupt mechanism.
The Linux kernel provides hundreds of system calls, each with its own unique functionality.
These system calls are organized into categories such as process management, file management, network communication, and memory management.
User space applications can use these system calls to interact with the kernel and access the underlying system resources.
⚲ API
: [[../Syscalls|Table of syscalls]]
: {{The Linux Kernel/man|2|syscalls}}
⚙️ Internals
: {{The Linux Kernel/include|linux/syscalls.h}}
: {{The Linux Kernel/source|kernel/entry}} – common syscall entry/exit and exception handling
: {{The Linux Kernel/id|syscall_init}} installs {{The Linux Kernel/id|entry_SYSCALL_64}}
: {{The Linux Kernel/man|2|syscall}} ↪
:: {{The Linux Kernel/id|entry_SYSCALL_64}} ↯ call hierarchy:
::: {{The Linux Kernel/id|do_syscall_64}}
:::: {{The Linux Kernel/id|sys_call_table}}
📖 References
: {{w|System call}}
: [http://man7.org/linux/man-pages/dir_section_2.html Directory of system calls, man section 2]
: Anatomy of a system call, [https://lwn.net/Articles/604287/ part 1] and [https://lwn.net/Articles/604515/ part 2]
: {{The Linux Kernel/ltp|kernel|syscalls}}
💾 ''Historical''
: [http://safari.oreilly.com/0596005652/understandlk-CHP-10 ULK3 Chapter 10. System Calls]
=== Device files ===
Classic UNIX devices are [[../Human_interfaces#Char_devices|Char devices]] used as byte streams with {{The Linux Kernel/man|2|ioctl}}.
⚲ API
ls /dev
cat /proc/devices
cat /proc/misc
Examples: {{The Linux Kernel/id|misc_fops}} {{The Linux Kernel/id|usb_fops}} {{The Linux Kernel/id|memory_fops}}
: {{The Linux Kernel/doc|Allocated devices|admin-guide/devices.html}}
: {{The Linux Kernel/source|drivers/char}} – miscellaneous byte stream devices
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch13.html Chapter 13. I/O Architecture and Device Drivers]
==== hiddev ====
⚠️ Warning: confusion. hiddev isn't real [[../Human_interfaces#HID|human interface device]]! It reuses USBHID infrastructure. hiddev is used for example for monitor controls and Uninterruptible Power Supplies.
This module supports these devices separately using a separate event interface on /dev/usb/hiddevX (char 180:96 to 180:111) (⚙️ {{The Linux Kernel/id|HIDDEV_MINOR_BASE}})
⚲ API
: {{The Linux Kernel/include|uapi/linux/hiddev.h}}
: {{The Linux Kernel/id|HID_CONNECT_HIDDEV}}
⚙️ Internals
: [https://elixir.bootlin.com/linux/latest/K/ident/CONFIG_USB_HIDDEV CONFIG_USB_HIDDEV]
: {{The Linux Kernel/include|linux/hiddev.h}}
: {{The Linux Kernel/id|hiddev_event}}
: {{The Linux Kernel/source|drivers/hid/usbhid/hiddev.c}}, {{The Linux Kernel/id|hiddev_fops}}
📖 References
: {{The Linux Kernel/doc|HIDDEV - Care and feeding of your Human Interface Devices|hid/hiddev.html}}
📖 References
: {{w|Device file}}
===Administration===
🔧 TODO
📖 References
: {{The Linux Kernel/man|7|netlink}}
: {{The Linux Kernel/doc|The Linux kernel user’s and administrator’s guide|admin-guide}}
==== procfs ====
The ''proc filesystem'' (''procfs'') is a special filesystem that presents information about processes and other system information in a hierarchical file-like structure, providing a more convenient and standardized method for dynamically accessing process data held in the kernel than traditional tracing methods or direct access to kernel memory.
Typically, it is mapped to a mount point named <code>/proc</code> at boot time.
The proc file system acts as an interface to internal data structures in the kernel.
It can be used to obtain information about the system and to change certain kernel parameters at runtime.
<code>/proc</code> includes a directory for each running process —including kernel threads— in directories named <code>/proc/PID</code>, where <code>PID</code> is the process number. Each directory contains information about one process, including the command that originally started the process (<code>/proc/PID/cmdline</code>), the names and values of its environment variables (<code>/proc/PID/environ</code>), a symlink to its working directory (<code>/proc/PID/cwd</code>), another symlink to the original executable file —if it still exists— (<code>/proc/PID/exe</code>), a couple of directories with symlinks to each open file descriptor (<code>/proc/PID/fd</code>) and the status —position, flags, ...— of each of them (<code>/proc/PID/fdinfo</code>), information about mapped files and blocks like heap and stack (<code>/proc/PID/maps</code>), a binary image representing the process's virtual memory (<code>/proc/PID/mem</code>), a symlink to the root path as seen by the process (<code>/proc/PID/root</code>), a directory containing hard links to any child process or thread (<code>/proc/PID/task</code>), basic information about a process including its run state and memory usage (<code>/proc/PID/status</code>) and much more.
📖 References
: {{w|procfs}}
: {{The Linux Kernel/man|5|procfs}}
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|linux/proc_fs.h}}
: {{The Linux Kernel/include|linux/seq_file.h}} – sequential file interface for /proc entries
: {{The Linux Kernel/source|fs/proc}} – procfs implementation
:: {{The Linux Kernel/include|linux/sysctl.h}} – /proc/sys runtime kernel tuning:
:: {{The Linux Kernel/source|fs/proc/proc_sysctl.c}} – filesystem interface
:: {{The Linux Kernel/source|kernel/sysctl.c}} – read/write handlers (proc_dointvec, proc_dostring, ...)
==== sysfs ====
sysfs is a pseudo-file system that exports information about various kernel subsystems, hardware devices, and associated device drivers from the kernel's device model to user space through virtual files.
In addition to providing information about various devices and kernel subsystems, exported virtual files are also used for their configuring.
Sysfs is designed to export the information present in the device tree, which would then no longer clutter up procfs.
Sysfs is mounted under the <code>/sys</code> mount point.
⚲ API
: {{The Linux Kernel/include|linux/sysfs.h}}
📖 References
: {{w|sysfs}}
: {{The Linux Kernel/man|5|sysfs}}
: {{The Linux Kernel/doc|sysfs - filesystem for exporting kernel objects|filesystems/sysfs.html}}
: {{The Linux Kernel/source|fs/sysfs}} – sysfs implementation
: {{The Linux Kernel/source|fs/kernfs}} – kernfs, the backing filesystem for sysfs and cgroups
==== devtmpfs ====
devtmpfs is a hybrid {{w|User space and kernel space|kernel/user space}} approach of a device filesystem to provide nodes before udev runs for the first time.
📖 References
: {{w|Device file}}
: {{The Linux Kernel/source|drivers/base/devtmpfs.c}} – kernel-maintained tmpfs /dev
==== configfs ====
{{The Linux Kernel/doc|configfs|filesystems/configfs.html}} is a userspace-driven kernel object configuration filesystem mounted at /sys/kernel/config/.
Unlike sysfs (which exposes kernel-created objects), configfs lets userspace create and configure kernel objects via mkdir/rmdir.
Used by USB gadget, NVMe target, ACPI, null_blk, GPIO simulator and other subsystems.
⚲ API:
: {{The Linux Kernel/include|linux/configfs.h}}
:: {{The Linux Kernel/id|config_item}} – base object, created by userspace mkdir
:: {{The Linux Kernel/id|config_group}} – container for config_items
:: {{The Linux Kernel/id|configfs_attribute}} – per-item readable/writable attribute
:: {{The Linux Kernel/id|configfs_subsystem}} – top-level subsystem registration
:: {{The Linux Kernel/id|configfs_register_subsystem}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/configfs}}
== Virtualization ==
🔧 TODO
See {{w|Kernel-based Virtual Machine}}
📖 References
: {{The Linux Kernel/doc|Virtualization Support|virt/}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/3-virtualization
=== Containerization ===
{{w|OS-level virtualization|Containerization}} is a powerful technology that has revolutionized the way software applications are developed, deployed, and run.
At its core, containerization provides an isolated environment for running applications, where the application has all the necessary dependencies and can be easily moved from one environment to another without worrying about any compatibility issues.
Containerization technology has its roots in the {{w|chroot}} command, which was introduced in the Unix operating system in the 1979.
Chroot provided a way to change the root directory of a process, effectively creating a new isolated environment with its own file system hierarchy.
However, this early implementation of containerization had limited functionality, and it was difficult to manage and control the various processes running within the container.
In the early 2000s, the Linux kernel introduced {{w|Linux namespaces|namespaces}} and {{w|cgroups|control groups}} to provide a more robust and scalable containerization solution.
'''Namespaces''' allow processes to have their own isolated view of the system, including the file system, network, and process ID space, while '''control groups''' provide fine-grained control over the resources allocated to each container, such as CPU, memory, and I/O.
Using these kernel features, containerization platforms such as {{w|Docker (software)|Docker}} and {{w|Kubernetes}} have emerged as popular solutions for building and deploying containerized applications at scale.
Containerization has become an essential tool for modern software development, allowing developers to easily package applications and deploy them in a consistent and predictable manner across different environments.
==== Resources usage and limits ====
⚲ API
: {{The Linux Kernel/man|2|chroot}} – change root directory
: {{The Linux Kernel/man|2|sysinfo}} – return system information
: {{The Linux Kernel/man|2|getrusage}} – get resource usage
: get/set resource limits:
:: {{The Linux Kernel/man|2|getrlimit}}
:: {{The Linux Kernel/man|2|setrlimit}}
:: {{The Linux Kernel/man|2|prlimit64}}
📖 References
: {{w|chroot}}
==== Namespaces ====
{{w|Linux namespaces}} provide the way to isolate and virtualize different aspects of the operating system.
Namespaces allow multiple instances of an application to run in isolation from each other, without interfering with the host system or other instances.
🔧 TODO
⚲ API
: /proc/self/ns
: {{The Linux Kernel/man|8|lsns}}, {{The Linux Kernel/man|2|ioctl_ns}} ↪ {{The Linux Kernel/id|ns_ioctl}}
: {{The Linux Kernel/man|1|unshare}}, {{The Linux Kernel/man|2|unshare}}
: {{The Linux Kernel/man|1|nsenter}}, {{The Linux Kernel/man|2|setns}}
: {{The Linux Kernel/man|2|clone3}} ↪ {{The Linux Kernel/id|clone_args}}
: {{The Linux Kernel/include|linux/ns_common.h}}
: {{The Linux Kernel/include|linux/proc_ns.h}}
: namespaces definition
:: {{The Linux Kernel/id|uts_namespace}}
:: {{The Linux Kernel/id|ipc_namespace}}
:: {{The Linux Kernel/id|mnt_namespace}}
:: {{The Linux Kernel/id|pid_namespace}}
:: {{The Linux Kernel/include|net/net_namespace.h}} - struct net
:: {{The Linux Kernel/id|user_namespace}}
:: {{The Linux Kernel/id|time_namespace}}
:: {{The Linux Kernel/id|cgroup_namespace}}
⚙️ Internals
: {{The Linux Kernel/id|init_nsproxy}} - struct of namespaces
: {{The Linux Kernel/source|kernel/nsproxy.c}} – namespace proxy management
: {{The Linux Kernel/source|fs/namespace.c}} – mount namespace
: {{The Linux Kernel/source|fs/proc/namespaces.c}} – /proc namespace entries
: {{The Linux Kernel/source|net/core/net_namespace.c}} – network namespace
: {{The Linux Kernel/source|kernel/time/namespace.c}} – time namespace
: {{The Linux Kernel/source|kernel/user_namespace.c}} – user namespace
: {{The Linux Kernel/source|kernel/pid_namespace.c}} – PID namespace
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace
: {{The Linux Kernel/source|kernel/cgroup/namespace.c}} – cgroup namespace
: {{The Linux Kernel/source|ipc/namespace.c}} – IPC namespace
📖 References
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
: {{The Linux Kernel/man|7|ipc_namespaces}}
: {{The Linux Kernel/man|7|mount_namespace}}
: {{The Linux Kernel/man|7|pid_namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|user_namespaces}}
: {{The Linux Kernel/man|7|time_namespaces}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
=== Control groups ===
{{w|cgroups}} are used to limit and control the resource usage of groups of processes. They allow administrators to set limits on CPU usage, memory usage, disk I/O, network bandwidth, and other resources, which can be useful for managing system performance and preventing resource contention.
There are two versions of cgroups.
Unlike v1, cgroup v2 has only a single process hierarchy and discriminates between processes, not threads.
Here are some of the key differences between cgroups v1 and v2:
{| class="wikitable"
|+
!
!cgroups v1
!cgroups v2
|-
|Hierarchy
|each subsystem had its own hierarchy, which could lead to complexity and confusion
|unified hierarchy, which simplifies management and enables better resource allocation
|-
|Controllers
|has several subsystems that are controlled by separate controllers, each with its own set of configuration files and parameters
|controllers are consolidated into a single "cgroup2" controller, which provides a unified interface for managing resources
|-
|Resource distribution
|distributes resources among groups of processes based on proportional sharing, which can lead to unpredictable results
|resources are distributed based on a "weighted fair queuing" algorithm, which provides better predictability and fairness
|}
Cgroups v2 is not backward compatible with cgroups v1, which means that migrating from v1 to v2 can be challenging and requires careful planning.
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/cgroup.h}}
: {{The Linux Kernel/include|linux/cgroup-defs.h}}
:: {{The Linux Kernel/id|css_set}} – holds set of reference-counted pointers to {{The Linux Kernel/id|cgroup_subsys_state}} objects
:: {{The Linux Kernel/id|cgroup_subsys}}
: {{The Linux Kernel/include|linux/cgroup_subsys.h}} – list of cgroup subsystems
⚙️ Internals
: {{The Linux Kernel/id|cg_list}} – list of {{The Linux Kernel/id|css_set}} in task_struct
: {{The Linux Kernel/source|kernel/cgroup}} – cgroup core
: {{The Linux Kernel/id|cgroup_init}}
: {{The Linux Kernel/id|cgroup2_fs_type}}
: {{The Linux Kernel/source|tools/testing/selftests/cgroup}} – cgroup self-tests
📖 References
: [[The_Linux_Kernel/System/CGroup_v2|Control Groups v2]]
: {{The Linux Kernel/doc|Control Groups v1|admin-guide/cgroup-v1/}}
: {{The Linux Kernel/man|1|systemd-cgtop}}
: {{The Linux Kernel/man|5|systemd.slice}} – slice unit configuration
: {{The Linux Kernel/man|7|cgroups}}
: {{The Linux Kernel/man|7|cgroup_namespaces}}
: {{The Linux Kernel/doc|CFS Bandwidth Control for cgroups|scheduler/sched-bwc.html}}
: {{The Linux Kernel/doc|Real-Time group scheduling|scheduler/sched-rt-group.html}}
: [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/latest/html/managing_monitoring_and_updating_the_kernel/setting-limits-for-applications_managing-monitoring-and-updating-the-kernel Understanding control groups, RHEL]
📚 Further reading
: https://github.com/containers
: [https://github.com/mk-fg/fgtk#cgrc cgrc tool]
💾 Historical
: https://github.com/mk-fg/cgroup-tools for cgroup v1
== Driver Model ==
The Linux driver model (or Device Model, or just DM) is a framework that provides a consistent and standardized way for device drivers to interface with the kernel.
It defines a set of rules, interfaces, and data structures that enable device drivers to communicate with the kernel and perform various operations, such as managing resources, lifecycle and more.
DM core structure consists of DM classes, DM buses, DM drivers and DM devices.
=== kobject ===
In the Linux kernel, a {{The Linux Kernel/id|kobject}} is a fundamental data structure used to represent kernel objects and provide a standardized interface for interacting with them.
A kobject is a generic object that can represent any type of kernel object, including devices, files, modules, and more.
The kobject data structure contains several fields that describe the object, such as its name, type, parent, and operations.
Each kobject has a unique name within its parent object, and the parent-child relationships form a hierarchy of kobjects.
Kobjects are managed by the kernel's sysfs file system, which provides a virtual file system that exposes kernel objects as files and directories in the user space.
Each kobject is associated with a sysfs directory, which contains files and attributes that can be read or written to interact with the kernel object.
⚲ Infrastructure API
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/id|kobject}}
: {{The Linux Kernel/doc|Kernel objects manipulation|driver-api/basics.html#kernel-objects-manipulation}}
: 🔧 TODO
=== Classes ===
A class is a higher-level view of a device that abstracts out low-level implementation details.
Drivers may see a NVME storage or a SATA storage, but, at the class level, they are all simply {{The Linux Kernel/id|block_class}} devices.
Classes allow user space to work with devices based on what they do, rather than how they are connected or how they work.
General DM classes structure match {{w|composite pattern}}.
⚲ API
: ls /sys/class/
: {{The Linux Kernel/id|class_register}} registers {{The Linux Kernel/id|class}}
: {{The Linux Kernel/include|linux/device/class.h}}
👁 Examples: {{The Linux Kernel/id|input_class}}, {{The Linux Kernel/id|block_class}} {{The Linux Kernel/id|net_class}}
=== Buses ===
A {{w|peripheral bus}} is a channel between the processor and one or more peripheral devices.
A DM bus is {{w|Proxy pattern|proxy}} for a peripheral bus.
General DM buses structure match {{w|composite pattern}}.
For the purposes of the device model, all devices are connected via a bus, even if it is an internal, virtual, {{The Linux Kernel/id|platform_bus_type}}.
Buses can plug into each other.
A USB controller is usually a PCI device, for example.
The device model represents the actual connections between buses and the devices they control.
A bus is represented by the {{The Linux Kernel/id|bus_type}} structure.
It contains the name, the default attributes, the bus' methods, PM operations, and the driver core's private data.
⚲ API
: ls /sys/bus/
: {{The Linux Kernel/id|bus_register}} registers {{The Linux Kernel/id|bus_type}}
: {{The Linux Kernel/include|linux/device/bus.h}}
👁 Examples: {{The Linux Kernel/id|usb_bus_type}}, {{The Linux Kernel/id|hid_bus_type}}, {{The Linux Kernel/id|pci_bus_type}}, {{The Linux Kernel/id|scsi_bus_type}}, {{The Linux Kernel/id|platform_bus_type}}
: [[#Peripheral_buses|Peripheral buses]]
=== Drivers ===
⚲ API
: ls /sys/bus/:/drivers/
: {{The Linux Kernel/id|module_driver}} - simple common driver initializer, 👁 for example used in {{The Linux Kernel/id|module_pci_driver}}
: {{The Linux Kernel/id|driver_register}} registers {{The Linux Kernel/id|device_driver}} - basic device driver structure, one per all device instances.
: {{The Linux Kernel/include|linux/device/driver.h}}
👁 Examples: {{The Linux Kernel/id|hid_generic}} {{The Linux Kernel/id|usb_register_device_driver}}
'''Platform drivers'''
: {{The Linux Kernel/id|module_platform_driver}} registers {{The Linux Kernel/id|platform_driver}} (platform wrapper of {{The Linux Kernel/id|device_driver}}) with {{The Linux Kernel/id|platform_bus_type}}
: {{The Linux Kernel/include|linux/platform_device.h}}
👁 Examples: {{The Linux Kernel/id|gpio_mouse_device_driver}}
=== Devices ===
⚲ API
: ls /sys/devices/
: {{The Linux Kernel/id|device_register}} registers {{The Linux Kernel/id|device}} - the basic device structure, per each device instance
: {{The Linux Kernel/include|linux/device.h}} – {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/doc|Device Resource Management|driver-api/basics.html#device-resource-management}}, devres, devm ...
👁 Examples: {{The Linux Kernel/id|platform_bus}} mousedev_create
'''Platform devices'''
: {{The Linux Kernel/id|platform_device}} - platform wrapper of {{The Linux Kernel/doc|struct <big>device</big> - the basic device structure|driver-api/infrastructure.html#c.device}}, contains resources associated with the device
: it can be created dynamically by {{The Linux Kernel/id|platform_device_register_simple}} or {{The Linux Kernel/id|platform_device_alloc}}. Or registered with {{The Linux Kernel/id|platform_device_register}}.
: {{The Linux Kernel/id|platform_device_unregister}} - releases device and associated resources
👁 Examples: {{The Linux Kernel/id|add_pcspkr}}
⚲ API 🔧 TODO
: platform_device_info platform_device_id platform_device_register_full platform_device_add
: platform_device_add_data platform_device_register_data platform_device_add_resources
: attribute_group dev_pm_ops
<hr>
⚙️ Internals
: {{The Linux Kernel/include|linux/dev_printk.h}}
: {{The Linux Kernel/source|lib/kobject.c}} – kobject library
: {{The Linux Kernel/source|drivers/base/platform.c}} – platform bus for legacy devices
: {{The Linux Kernel/source|drivers/base/core.c}} – driver model core
: {{The Linux Kernel/include|linux/notifier.h}}, {{The Linux Kernel/source|kernel/notifier.c}} – notifier chains for event broadcasting
📖 References
: {{The Linux Kernel/doc|Device drivers infrastructure|driver-api/infrastructure.html}}
: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
: {{The Linux Kernel/doc|Driver Model|driver-api/driver-model}}
:: {{The Linux Kernel/doc|The Linux Kernel Device Model|driver-api/driver-model/overview.html}}
:: {{The Linux Kernel/doc|Platform Devices and Drivers|driver-api/driver-model/platform.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_model.html Linux Device Model, by linux-kernel-labs]
{{:The Linux Kernel/Modules}}
== {{w|Peripheral bus}}es ==
Peripheral buses are the communication channels used to connect various peripheral devices to a computer system.
These buses are used to transfer data between the peripheral devices and the system's processor or memory.
In the Linux kernel, peripheral buses are implemented as drivers that enable communication between the operating system and the hardware.
Peripheral buses in the Linux kernel include USB, PCI, SPI, I2C, and more.
Each of these buses has its own unique characteristics, and the Linux kernel provides support for a wide range of peripheral devices.
The PCI (Peripheral Component Interconnect) bus is used to connect internal hardware devices in a computer system.
It is commonly used to connect graphics cards, network cards, and other expansion cards.
The Linux kernel provides a PCI bus driver that enables communication between the operating system and the devices connected to the bus.
The USB (Universal Serial Bus) is one of the most commonly used peripheral buses in modern computer systems.
It allows devices to be hot-swapped and supports high-speed data transfer rates.
🔧 TODO: device enumeration
⚲ API
: Shell interface: ls /proc/bus/ /sys/bus/
See also [[#Buses|Buses of Driver Model]]
See [[../Human_interfaces#Input_devices|'''Input: keyboard, mouse etc''']]
'''PCI'''
⚲ Shell API
: lspci -vv
: column -t /proc/bus/pci/devices
Main article: [[The_Linux_Kernel/PCI|PCI]]
'''USB'''
⚲ Shell API
: lsusb -v
: ls /sys/bus/usb/
: cat /proc/bus/usb/devices
⚙️ Internals
: {{The Linux Kernel/source|drivers/usb}} – USB subsystem
📖 References
: {{The Linux Kernel/doc|USB|usb}}
: [http://lwn.net/images/pdf/LDD3/ch13.pdf LDD3:USB Drivers]
'''Other buses'''
: {{The Linux Kernel/source|drivers/bus}} – bus driver implementations
'''Buses for 🤖 embedded devices:'''
: {{The Linux Kernel/include|linux/gpio/driver.h}} {{The Linux Kernel/include|linux/gpio.h}} {{The Linux Kernel/source|drivers/gpio}} {{The Linux Kernel/source|tools/gpio}}
: {{The Linux Kernel/source|drivers/i2c}} – I2C bus framework, https://i2c.wiki.kernel.org
'''SPI'''
⚲ API
: {{The Linux Kernel/include|linux/spi/spi.h}}
: {{The Linux Kernel/source|tools/spi}} – SPI user-space tools
⚙️ Internals
: {{The Linux Kernel/source|drivers/spi}} – SPI bus framework
: {{The Linux Kernel/id|spi_register_controller}}
: {{The Linux Kernel/id|spi_controller_list}}🚧
📖 References
: {{The Linux Kernel/doc|SPI|spi}}
==Hardware interfaces==
Hardware interfaces are basic part of any operating, enabling communication between the processor and other HW components of a computer system: memory, peripheral devices and buses, various controllers.
[[../Multitasking/CPU#Interrupts|Interrupts]]
===I/O ports and registers===
I/O ports and registers are electronic components in computer systems that enable communication between CPU and other electronic controllers and devices.
⚲ API
{{The Linux Kernel/include|asm-generic/io.h}} — generic I/O port emulation.
: {{The Linux Kernel/id|ioport_map}}
: {{The Linux Kernel/id|ioread32}} / {{The Linux Kernel/id|iowrite32}} ...
: {{The Linux Kernel/id|readl}}/ {{The Linux Kernel/id|writel}} ...
: The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space:
: {{The Linux Kernel/id|inl}}/ {{The Linux Kernel/id|outl}} ...
{{The Linux Kernel/include|linux/ioport.h}}, {{The Linux Kernel/source|kernel/resource.c}} — I/O and memory resource management.
: {{The Linux Kernel/id|request_mem_region}}
{{The Linux Kernel/source|arch/x86/include/asm/io.h}} – x86 I/O port and MMIO access
Functions for memory mapped registers:
{{The Linux Kernel/id|ioremap}} ...
==== regmap ====
The regmap subsystem provides a standardized abstraction layer for register access in device drivers.
It simplifies interactions with hardware registers across various bus types,
such as I2C, SPI, and MMIO, by offering a consistent API.
⚲ API
{{The Linux Kernel/include|linux/regmap.h}} — register map access API
: the most frequently used functions:
: {{The Linux Kernel/id|regmap_update_bits}}
: {{The Linux Kernel/id|regmap_write}}
: {{The Linux Kernel/id|regmap_read}}
: {{The Linux Kernel/id|regmap_reg_range}}
: {{The Linux Kernel/id|regmap_bulk_read}}
: {{The Linux Kernel/id|devm_regmap_init_i2c}}
: {{The Linux Kernel/id|regmap_set_bits}}
: {{The Linux Kernel/id|regmap_field_write}}
: {{The Linux Kernel/id|regmap_bulk_write}}
: {{The Linux Kernel/id|regmap_clear_bits}}
: {{The Linux Kernel/id|regmap_write_bits}}
: {{The Linux Kernel/id|regmap_config}}
: {{The Linux Kernel/id|regmap_read_poll_timeout}}
: {{The Linux Kernel/id|devm_regmap_init_mmio}}
⚙️ Internals
{{The Linux Kernel/source|drivers/base/regmap}} – register map abstraction layer
===Hardware Device Drivers===
Keywords: firmware, hotplug, clock, mux, pin
⚙️ Internals
: {{The Linux Kernel/source|drivers/acpi}} – ACPI drivers
: {{The Linux Kernel/source|drivers/base}} – driver model core
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/hwmon}} – hardware monitoring
: {{The Linux Kernel/source|drivers/thermal}} – thermal management
: {{The Linux Kernel/source|drivers/pinctrl}} – pin control and multiplexing
: {{The Linux Kernel/source|drivers/clk}} – clock framework
📖 References
: {{The Linux Kernel/doc|Pin control subsystem|driver-api/pin-control.html}}
: {{The Linux Kernel/doc|Linux Hardware Monitoring|hwmon}}
: {{The Linux Kernel/doc|Firmware guide|firmware-guide}}
: {{The Linux Kernel/doc|Devicetree|devicetree}}
: https://hwmon.wiki.kernel.org/
: [http://lwn.net/images/pdf/LDD3/ch14.pdf LDD3:The Linux Device Model]
: http://www.tldp.org/LDP/tlk/dd/drivers.html
: http://www.xml.com/ldd/chapter/book/
: http://examples.oreilly.com/linuxdrive2/
=== Live patching ===
{{w|Kpatch|Live patching}} (since 4.0) allows applying critical fixes to a running kernel without rebooting.
⚲ API:
: {{The Linux Kernel/include|linux/livepatch.h}}
: {{The Linux Kernel/id|klp_patch}} – patch structure
: {{The Linux Kernel/id|klp_enable_patch}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/livepatch}} – live patching core
📖 References:
: {{The Linux Kernel/doc|Livepatch|livepatch}}
=== Booting and halting ===
==== Kernel booting ====
This is loaded in two stages - in the first stage the kernel (as a compressed image file) is loaded into memory and decompressed, and a few fundamental functions such as essential hardware and basic memory management (memory paging) are set up.
Control is then switched one final time to the main kernel start process calling {{The Linux Kernel/id|start_kernel}}, which then performs the majority of system setup (interrupts, the rest of memory management, device and driver initialization, etc.) before spawning separately, the idle process and scheduler, and the init process (which is executed in user space).
'''Kernel loading stage'''
The kernel as loaded is typically an image file, compressed into either zImage or bzImage formats with zlib.
A routine at the head of it does a minimal amount of hardware setup, decompresses the image fully into high memory, and takes note of any RAM disk if configured.
It then executes kernel startup via startup_64 (for x86_64 architecture).
: {{The Linux Kernel/source|arch/x86/boot/compressed/vmlinux.lds.S}} - linker script defines entry {{The Linux Kernel/id|startup_64}} in
: {{The Linux Kernel/source|arch/x86/boot/compressed/head_64.S}} - assembly of extractor
: {{The Linux Kernel/id|extract_kernel}} - extractor in language C
:: prints
Decompressing Linux... done.
Booting the kernel.
'''Kernel startup stage'''
The startup function for the kernel (also called the swapper or process 0) establishes memory management (paging tables and memory paging), detects the type of CPU and any additional functionality such as floating point capabilities, and then switches to non-architecture specific Linux kernel functionality via a call to {{The Linux Kernel/id|start_kernel}}.
↯ Startup call hierarchy:
: {{The Linux Kernel/source|arch/x86/kernel/vmlinux.lds.S}} – linker script
: {{The Linux Kernel/source|arch/x86/kernel/head_64.S}} – assembly of uncompressed startup code
: {{The Linux Kernel/source|arch/x86/kernel/head64.c}} – platform dependent startup:
:: {{The Linux Kernel/id|x86_64_start_kernel}}
:: {{The Linux Kernel/id|x86_64_start_reservations}}
: {{The Linux Kernel/source|init/main.c}} – main initialization code
:: {{The Linux Kernel/id|start_kernel}} 200 SLOC
::: {{The Linux Kernel/id|mm_init}}
:::: {{The Linux Kernel/id|mem_init}}
:::: {{The Linux Kernel/id|vmalloc_init}}
::: {{The Linux Kernel/id|sched_init}}
::: {{The Linux Kernel/id|rcu_init}} – {{w|Read-copy-update}}
::: {{The Linux Kernel/id|rest_init}}
:::: {{The Linux Kernel/id|kernel_init}} - deferred kernel thread #1
::::: {{The Linux Kernel/id|kernel_init_freeable}} This and following functions are defined with attribute {{The Linux Kernel/id|__init}}
:::::: {{The Linux Kernel/id|prepare_namespace}}
::::::: {{The Linux Kernel/id|initrd_load}}
::::::: {{The Linux Kernel/id|mount_root}}
::::: {{The Linux Kernel/id|run_init_process}} obviously runs the first process {{The Linux Kernel/man|1|init}}
:::: {{The Linux Kernel/id|kthreadd}} – deferred kernel thread #2
:::: {{The Linux Kernel/id|cpu_startup_entry}}
::::: {{The Linux Kernel/id|do_idle}}
{{The Linux Kernel/id|start_kernel}} executes a wide range of initialization functions. It sets up interrupt handling (IRQs), further configures memory, starts the {{The Linux Kernel/man|1|init}} process (the first user-space process), and then starts the idle task via {{The Linux Kernel/id|cpu_startup_entry}}. Notably, the kernel startup process also mounts the {{w|initial ramdisk}} (initrd) that was loaded previously as the temporary root file system during the boot phase. The initrd allows driver modules to be loaded directly from memory, without reliance upon other devices (e.g. a hard disk) and the drivers that are needed to access them (e.g. a SATA driver). This split of some drivers statically compiled into the kernel and other drivers loaded from initrd allows for a smaller kernel. The root file system is later switched via a call to {{The Linux Kernel/man|8|pivot_root}} / {{The Linux Kernel/man|2|pivot_root}} which unmounts the temporary root file system and replaces it with the use of the real one, once the latter is accessible. The memory used by the temporary root file system is then reclaimed.
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/Kconfig.debug}} – x86 debugging Kconfig options
: {{The Linux Kernel/include|linux/smpboot.h}}
: {{The Linux Kernel/source|kernel/smpboot.c}} – common SMP CPU bringup/teardown
: {{The Linux Kernel/source|arch/x86/kernel/smpboot.c}} – x86 SMP booting
: {{The Linux Kernel/include|linux/kallsyms.h}}, {{The Linux Kernel/source|kernel/kallsyms.c}} – the /proc/kallsyms kernel symbol table
===== ... =====
📖 References
: Article about [[../Booting|booting of the kernel]]
: {{The Linux Kernel/doc|Initial RAM disk|admin-guide/initrd.html}}
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=initcall_debug initcall_debug, boot argument]
: {{w|Linux startup process}}
: {{w|init}}
: [http://lwn.net/Articles/632528/ Linux (U)EFI boot process]
: {{The Linux Kernel/doc|The kernel’s command-line parameters|admin-guide/kernel-parameters.html}}
: {{The Linux Kernel/doc|The EFI Boot Stub|admin-guide/efi-stub.html}}
: {{The Linux Kernel/doc|Boot Configuration|admin-guide/bootconfig.html}}
: {{The Linux Kernel/doc|Boot time memory management|core-api/boot-time-mm.html}}
: [https://github.com/0xAX/linux-insides/blob/master/Booting/README.md Kernel booting process]
: [https://github.com/0xAX/linux-insides/blob/master/Initialization/README.md Kernel initialization process]
📚 Further reading
: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
: {{w|E820}}
💾 ''Historical''
: http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/
: http://www.tldp.org/LDP/lki/lki-1.html
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-4.html
==== Halting or rebooting ====
🔧 TODO
⚲ API
: {{The Linux Kernel/include|linux/reboot.h}}
: {{The Linux Kernel/include|linux/stop_machine.h}}
:: {{The Linux Kernel/id|print_stop_info}}
:: {{The Linux Kernel/id|stop_machine}}
::: {{The Linux Kernel/id|stop_core_cpuslocked}}
: {{The Linux Kernel/man|2|reboot}} ↪ {{The Linux Kernel/id|sys_reboot}}
:: {{The Linux Kernel/id|machine_restart}} or
:: {{The Linux Kernel/id|machine_halt}} or
:: {{The Linux Kernel/id|machine_power_off}}
: {{The Linux Kernel/man|2|kexec_load}} ↪ {{The Linux Kernel/source|kernel/kexec.c}} – load a new kernel for later execution ({{w|kdump (Linux)|kdump}})
: {{The Linux Kernel/id|reboot_mode}}
: {{The Linux Kernel/include|linux/reboot-mode.h}}
:: {{The Linux Kernel/id|reboot_mode_driver}}
::: {{The Linux Kernel/id|devm_reboot_mode_register}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/reboot.c}} – reboot, halt and power-off
: {{The Linux Kernel/source|kernel/stop_machine.c}} – stop all CPUs for safe code patching
:: {{The Linux Kernel/id|cpu_stopper}}
:: {{The Linux Kernel/id|cpu_stop_init}}
::: {{The Linux Kernel/id|cpu_stopper_thread}} – "migration" tasks
: {{The Linux Kernel/source|arch/x86/kernel/reboot.c}} – x86 reboot methods
: [[../Softdog Driver/]]
==== Power management ====
Keyword: suspend, alarm, hibernation.
⚲ API
: /sys/power/
: /sys/kernel/debug/wakeup_sources
:: <big>⌨️</big> hands-on:
:: sudo awk '{gsub("^ ","?")} NR>1 {if ($6) {print $1}}' /sys/kernel/debug/wakeup_sources
: {{The Linux Kernel/include|linux/pm.h}}
:: {{The Linux Kernel/include|linux|dev_pm_ops}}
: {{The Linux Kernel/include|linux/pm_qos.h}}
: {{The Linux Kernel/include|linux/pm_clock.h}}
: {{The Linux Kernel/include|linux/pm_domain.h}}
: {{The Linux Kernel/include|linux/pm_wakeirq.h}}
: {{The Linux Kernel/include|linux/pm_wakeup.h}}
:: {{The Linux Kernel/id|wakeup_source}}
:: {{The Linux Kernel/id|wakeup_source_register}}
: {{The Linux Kernel/include|linux/suspend.h}}
:: {{The Linux Kernel/id|pm_suspend}} suspends the system
: {{The Linux Kernel/include|linux/freezer.h}} – process freezer for suspend/hibernate
: Suspend and wakeup depend on
:: {{The Linux Kernel/man|2|timer_create}} and {{The Linux Kernel/man|2|timerfd_create}} with clock ids {{The Linux Kernel/id|CLOCK_REALTIME_ALARM}} or {{The Linux Kernel/id|CLOCK_BOOTTIME_ALARM}} will wake the system if it is suspended.
:: {{The Linux Kernel/man|2|epoll_ctl}} with flag {{The Linux Kernel/id|EPOLLWAKEUP}} blocks suspend
:: See also {{The Linux Kernel/man|7|capabilities}} {{The Linux Kernel/id|CAP_WAKE_ALARM}}, {{The Linux Kernel/id|CAP_BLOCK_SUSPEND}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM}}
: {{The Linux Kernel/id|CONFIG_SUSPEND}}
: {{The Linux Kernel/source|kernel/power}} – suspend, hibernate and PM core
: {{The Linux Kernel/id|alarm_init}}
: {{The Linux Kernel/source|kernel/time/alarmtimer.c}} – alarm timer for wakeup events
: {{The Linux Kernel/source|drivers/base/power}}: {{The Linux Kernel/id|wakeup_sources}}
📖 References
: {{The Linux Kernel/doc|PM administration|admin-guide/pm}}
: {{The Linux Kernel/doc|CPU and Device PM|driver-api/pm}}
: {{The Linux Kernel/doc|Power Management|power}}
: {{The Linux Kernel/doc|sysfs power testing ABI|admin-guide/abi-testing.html#file-testing-sysfs-power}}
: https://lwn.net/Kernel/Index/#Power_management
: {{w|PowerTOP}}
: [https://linux.die.net/man/1/cpupower cpupower]
: [https://manpages.ubuntu.com/manpages/xenial/man8/tlp.8.html tlp] – apply laptop power management settings
: {{w|ACPI}} – Advanced Configuration and Power Interface
===== Runtime PM =====
Keywords: runtime power management, devices power management opportunistic suspend, autosuspend, autosleep.
⚲ API
: /sys/devices/.../power/:
:: async autosuspend_delay_ms control runtime_active_kids runtime_active_time runtime_enabled runtime_status runtime_suspended_time runtime_usage
: {{The Linux Kernel/include|linux/pm_runtime.h}}
:: {{The Linux Kernel/id|pm_runtime_mark_last_busy}}
:: {{The Linux Kernel/id|pm_runtime_enable}}
:: {{The Linux Kernel/id|pm_runtime_disable}}
:: {{The Linux Kernel/id|pm_runtime_get}} – asynchronous get
:: {{The Linux Kernel/id|pm_runtime_get_sync}}
:: {{The Linux Kernel/id|pm_runtime_resume_and_get}} – preferable synchronous get
:: {{The Linux Kernel/id|pm_runtime_put}}
:: {{The Linux Kernel/id|pm_runtime_put_noidle}} – just decrement usage counter
:: {{The Linux Kernel/id|pm_runtime_put_sync}}
:: {{The Linux Kernel/id|pm_runtime_put_autosuspend}}
: {{The Linux Kernel/id|SET_RUNTIME_PM_OPS}}
👁 Example: {{The Linux Kernel/id|ac97_pm}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_PM_AUTOSLEEP}}
=== ... ===
📖 References
: {{The Linux Kernel/doc|Runtime Power Management Framework for I/O Devices|power/runtime_pm.html}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/cpuidle CPU idle power saving methods for real-time workloads]
: [https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-power Sysfs devices PM API]
: [https://www.kernel.org/doc/Documentation/driver-api/usb/power-management.rst Power Management for USB]
: [https://lwn.net/Kernel/Index/#Power_management-Opportunistic_suspend Opportunistic suspend]
📚 Further reading
: https://deepwiki.com/torvalds/linux/5-hardware-drivers
== Building and Updating ==
: [[../Updating/]]
{{BookCat}}
0i60bmo4derzdmsq0avz5iq9sx640c4
The Linux Kernel/Multitasking
0
226982
4641511
4640282
2026-06-28T14:20:27Z
Conan
3188
Multitasking: ELF binary loader binfmt_elf.c reference
4641511
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Multitasking functionality}}</noinclude>
{| style="width: 25%; float: right; text-align:center;border-spacing: 0; margin:auto;" cellpadding="5pc"
! bgcolor="#ffc" |multitasking
|-
| bgcolor="#eeb" |[[#Execution|execution]]
|-
| bgcolor="#dda" |[[#Threads_or_tasks|threads or tasks]]
|-
| bgcolor="#cc9" |[[#Synchronization|synchronization]]
|-
| bgcolor="#bb8" |[[#Scheduler|Scheduler]]
|-
| bgcolor="#aa8" |[[#Interrupts|interrupts core]]
|- style=""
| bgcolor="#997" |[[#CPU_specific|CPU specific]]
|}
Linux kernel is a preemptive {{w|Computer multitasking|multitasking}} operating system.
As a multitasking OS, it allows multiple processes to share processors (CPUs) and other system resources.
Each CPU executes a single task at a time.
However, multitasking allows each processor to switch between tasks that are being executed without having to wait for each task to finish.
For that, the kernel can, at any time, temporarily interrupt a task being carried out by the processor, and replace it by another task that can be new or a previously suspended one.
The operation involving the swapping of the running task is called ''{{w|context switch}}''.
== Execution ==
⚲ API ↪ ⚙️ implementations
{{The Linux Kernel/man|2|execve}} ↪ {{The Linux Kernel/id|do_execveat_common}} runs an executable file in the context of current process, replacing the previous executable.
This system call is used by family of functions of libc {{The Linux Kernel/man|3|exec}}.
The {{w|Executable and Linkable Format|ELF}} binary format is loaded by {{The Linux Kernel/source|fs/binfmt_elf.c}}.
{{The Linux Kernel/man|2|clone}}.
Clone creates a child process that may share parts of its execution context with the parent.
It is often used to implement threads (though programmers will typically use a higher-level interface such as {{The Linux Kernel/man|7|pthreads}}, implemented on top of clone).
{{The Linux Kernel/man|2|wait}} ↪ {{The Linux Kernel/id|kernel_waitid}} suspends the execution of the calling process until one of its child processes terminates.
Syscall {{The Linux Kernel/man|2|getpid}} ↪ {{The Linux Kernel/id|task_tgid_vnr}} returns PID of the current process which internally is called TGID - thread group id.
A process can contain many threads.
{{The Linux Kernel/man|2|gettid}} ↪ {{The Linux Kernel/id|task_pid_vnr}} returns thread id.
Which internally is historically called PID.
⚠️ Warning: confusion.
User space PID ≠ kernel space PID.
{{The Linux Kernel/man|1|ps}} -AF lists current processes and thread as {{w|Light-weight process|LWP}}.
For a single thread process all these IDs are equal.
High-resolution delays:
: {{The Linux Kernel/man|2|nanosleep}} ↪ {{The Linux Kernel/id|sys_nanosleep}}
:: {{The Linux Kernel/id|hrtimer_nanosleep}}
: {{The Linux Kernel/man|2|clock_nanosleep}} ↪ {{The Linux Kernel/id|sys_clock_nanosleep}}
Wait for a signal:
: {{The Linux Kernel/man|2|pause}} ↪ {{The Linux Kernel/id|sys_pause}}
: {{The Linux Kernel/man|2|sigsuspend}} ↪ {{The Linux Kernel/id|sys_sigsuspend}}
See [[The Linux Kernel/Processes|Processes]] for process creation and termination.
=== Inter-process communication ===
Inter-process communication (IPC) refers specifically to the mechanisms an operating system provides to allow processes it manages to share data.
Methods for achieving IPC are divided into categories which vary based on software requirements, such as performance and modularity requirements, and system circumstances.
Linux inherited from Unix the following IPC mechanisms:
Signals (⚲ API ↪ ⚙️ implementations):
: {{The Linux Kernel/man|2|kill}} sends signal to a process
: {{The Linux Kernel/man|2|tgkill}} ↪ {{The Linux Kernel/id|do_tkill}} sends a signal to a thread
: {{The Linux Kernel/man|2|process_vm_readv}} ↪ {{The Linux Kernel/id|process_vm_rw}} - zero-copy data transfer between process address spaces
: {{The Linux Kernel/man|2|sigaction}} ↪ {{The Linux Kernel/id|do_sigaction}} – examine and change a signal action
: {{The Linux Kernel/man|2|sigprocmask}} – examine and change blocked signals
: {{The Linux Kernel/man|2|sigpending}} ↪ {{The Linux Kernel/id|do_sigpending}} – examine pending signals
: {{The Linux Kernel/man|2|sigsuspend}} – wait for a signal
: {{The Linux Kernel/man|2|sigaltstack}} – set or get signal stack context
: {{The Linux Kernel/man|2|sigtimedwait}} ↪ {{The Linux Kernel/id|do_sigtimedwait}} – synchronously wait for queued signals
: {{The Linux Kernel/man|7|signal}} – overview of signals
: {{The Linux Kernel/source|kernel/signal.c}} – signal delivery and handling
: [[../Storage#Zero-copy|Anonymous pipes]] and named pipes (FIFOs) {{The Linux Kernel/man|2|mknod}} ↪ {{The Linux Kernel/id|do_mknodat}} {{The Linux Kernel/id|S_IFIFO}}
: {{w|Express Data Path}} {{The Linux Kernel/id|PF_XDP}}
: {{w|Unix domain socket}} {{The Linux Kernel/id|PF_UNIX}}
: Memory-mapped files {{The Linux Kernel/man|2|mmap}} ⤑ {{The Linux Kernel/id|ksys_mmap_pgoff}}
: {{The Linux Kernel/man|2|eventfd}} ↪ {{The Linux Kernel/id|do_eventfd}} – event notification via file descriptor
: {{The Linux Kernel/man|2|signalfd}} ↪ {{The Linux Kernel/id|do_signalfd4}} – receive signals via file descriptor
: {{The Linux Kernel/man|2|timerfd_create}} – timer notification via file descriptor
: Sys V IPC:
:: Message queues: {{The Linux Kernel/man|2|msgget}}, {{The Linux Kernel/man|2|msgsnd}}, {{The Linux Kernel/man|2|msgrcv}} ↪ {{The Linux Kernel/source|ipc/msg.c}}
:: Semaphores
:: Shared memory: {{The Linux Kernel/man|2|shmget}}, {{The Linux Kernel/man|2|shmctl}}, {{The Linux Kernel/man|2|shmat}}, {{The Linux Kernel/man|2|shmdt}} ↪ {{The Linux Kernel/source|ipc/shm.c}}
📖 References
: {{w|Inter-process communication}}
: {{The Linux Kernel/man|7|sysvipc}}
== Threads or tasks ==
In Linux kernel "thread" and "task" are almost synonyms.
⚲ API
: {{The Linux Kernel/include|linux/sched.h}} - the main scheduler API
:: {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/source|arch/x86/include/asm/current.h}} – x86 current task pointer
::{{Linux ident|current}} and {{The Linux Kernel/id|get_current}} () return current {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/include|uapi/linux/taskstats.h}} per-task statistics
: {{The Linux Kernel/include|linux/thread_info.h}}
:: {{The Linux Kernel/id|current_thread_info}}() returns {{The Linux Kernel/id|thread_info}}
:{{The Linux Kernel/include|linux/sched/task.h}} - interface between the scheduler and various task lifetime (fork()/exit()) functionality
: {{The Linux Kernel/include|linux/kthread.h}} - simple interface for creating and stopping kernel threads without mess.
::{{The Linux Kernel/id|kthread_run}} creates and wakes a thread
::{{The Linux Kernel/id|kthread_create}}
⚙️ Internals
: {{The Linux Kernel/id|kthread_run}} ↯ hierarchy:
: {{The Linux Kernel/source|kernel/kthread.c}} – kernel thread creation and management
:: {{The Linux Kernel/id|kthreadd}} – parent kernel thread and the creator of all other kernel threads.
Dequeues {{The Linux Kernel/id|kthread_create_info}} from {{The Linux Kernel/id|kthread_create_list}}.
::: {{The Linux Kernel/id|create_kthread}}
:::: {{The Linux Kernel/id|kernel_thread}}
:::: {{The Linux Kernel/id|kthread}} – invokes {{The Linux Kernel/id|threadfn}}
:: {{The Linux Kernel/id|__kthread_create_on_node}} – enqueues {{The Linux Kernel/id|kthread_create_info}} into {{The Linux Kernel/id|kthread_create_list}}
: {{The Linux Kernel/source|kernel/fork.c}} – process creation and cloning
:: {{The Linux Kernel/id|kernel_thread}}
::: {{The Linux Kernel/id|kernel_clone}}
==Scheduler==
The ''{{w|Scheduling_(computing)#Linux|scheduler}}'' is the part of the operating system that decides which process runs at a certain point in time.
It usually has the ability to pause a running process, move it to the back of the running queue and start a new process.
Active processes are placed in an array called a ''{{w|run queue}}'', or ''runqueue'' - {{The Linux Kernel/id|rq}}.
The run queue may contain priority values for each process, which will be used by the scheduler to determine which process to run next.
To ensure each program has a fair share of resources, each one is run for some time period (quantum) before it is paused and placed back into the run queue.
When a program is stopped to let another run, the program with the highest priority in the run queue is then allowed to execute.
Processes are also removed from the run queue when they ask to ''sleep'', are waiting on a resource to become available, or have been terminated.
Since version 6.6 the Linux kernel uses the {{w|Earliest eligible virtual deadline first scheduling}} (EEVDF) algorithm, which replaced the {{w|Completely Fair Scheduler}} (CFS).
While much of the CFS infrastructure remains: {{The Linux Kernel/id|sched_entity}}, {{The Linux Kernel/id|cfs_rq}}, the red-black tree, load balancing, and {{The Linux Kernel/source|kernel/sched/fair.c}} — the task selection logic is fundamentally different.
EEVDF is based on a classic scheduling algorithm originally designed for packet networks.
The scheduler has a scheduling complexity of O(log N), where N is the number of tasks in the runqueue.
Both picking and reinserting a task require O(log N) operations, because the run queue is implemented as a {{w|red–black tree}}.
The runqueue ({{The Linux Kernel/id|cfs_rq}}) is implemented as a red-black tree representing a "timeline" of future task execution.
The scheduler uses nanosecond granularity accounting and requires no heuristics or interactivity estimators.
EEVDF improves sleeper fairness over CFS by tracking ''lag'' ({{The Linux Kernel/id|vlag}}) — the difference between the service a task was entitled to and the service it actually received.
When a sleeping task wakes up, its lag determines eligibility, ensuring interactive tasks get prompt service without starving long-running tasks.
The data structure used for the scheduling algorithm is a red-black tree in which the nodes are {{The Linux Kernel/id|sched_entity}} structures, embedded in {{The Linux Kernel/id|task_struct}}.
With EEVDF, each task has a time slice ({{The Linux Kernel/id|sysctl_sched_base_slice}}, default 0.7ms) that determines its request length.
EEVDF computes a virtual deadline for each task: vd_i = ve_i + r_i/w_i, where ve_i is the eligible time, r_i is the request size, and w_i is the weight (determined by nice value).
The scheduler picks the eligible task with the earliest virtual deadline via {{The Linux Kernel/id|__pick_eevdf}}.
The Linux kernel contains different scheduler classes (or policies).
The EEVDF scheduler handles {{The Linux Kernel/id|SCHED_NORMAL}} (aka SCHED_OTHER).
The kernel also contains two additional classes {{The Linux Kernel/id|SCHED_BATCH}} and {{The Linux Kernel/id|SCHED_IDLE}}, and another two real-time scheduling classes named {{The Linux Kernel/id|SCHED_FIFO}} (realtime first-in-first-out) and {{The Linux Kernel/id|SCHED_RR}} (realtime round-robin), with a third realtime scheduling policy known as {{The Linux Kernel/id|SCHED_DEADLINE}} that implements the {{w|Earliest deadline first scheduling|earliest deadline first algorithm (EDF)}} added later.
Any realtime scheduler class takes precedence over any of the "normal" —i.e.
non realtime— classes.
The scheduler class is selected and configured through the {{The Linux Kernel/man|2|sched_setscheduler}} ↪ {{The Linux Kernel/id|do_sched_setscheduler}} system call.
Properly balancing latency, throughput, and fairness in schedulers is an open problem.<ref name="malte" >
Malte Skarupke.
[https://probablydance.com/2019/12/30/measuring-mutexes-spinlocks-and-how-bad-the-linux-scheduler-really-is/ "Measuring Mutexes, Spinlocks and how Bad the Linux Scheduler Really is"].
</ref>
⚲ API
: {{The Linux Kernel/man|1|renice}} – priority of running processes
: {{The Linux Kernel/man|1|nice}} – run a program with modified scheduling priority
: {{The Linux Kernel/man|1|chrt}} – manipulate the real-time attributes of a process
:: {{The Linux Kernel/man|2|sched_getattr}} ↪ {{The Linux Kernel/id|sys_sched_getattr}} – get scheduling policy and attributes
: {{The Linux Kernel/include|linux/sched.h}} – the main scheduler API
:: {{The Linux Kernel/id|schedule}}
: {{The Linux Kernel/man|2|getpriority}}, {{The Linux Kernel/man|2|setpriority}}
: {{The Linux Kernel/man|2|sched_setscheduler}}, {{The Linux Kernel/man|2|sched_getscheduler}}
: /sys/kernel/debug/sched/ – scheduler debugfs tuning directory
:: features – toggle scheduler feature flags
:: base_slice_ns – EEVDF base time slice (default 700000)
:: migration_cost_ns – cost threshold for task migration between CPUs
:: nr_migrate – max tasks to migrate per balancing pass
:: debug – dump detailed scheduler state
:: numa_balancing/ – NUMA balancing scan parameters
⚙️ Internals
:{{The Linux Kernel/id|sched_init}} is called from {{The Linux Kernel/id|start_kernel}}
: {{The Linux Kernel/id|__schedule}} is the main scheduler function.
: {{The Linux Kernel/id|runqueues}}, {{The Linux Kernel/id|this_rq}}
: {{The Linux Kernel/source|kernel/sched}} – scheduler subsystem
: {{The Linux Kernel/source|kernel/sched/core.c}} – core scheduling logic
: {{The Linux Kernel/source|kernel/sched/fair.c}} implements {{The Linux Kernel/id|SCHED_NORMAL}}, {{The Linux Kernel/id|SCHED_BATCH}}, {{The Linux Kernel/id|SCHED_IDLE}}
:: {{The Linux Kernel/id|__pick_eevdf}} – core of EEVDF
: {{The Linux Kernel/id|sched_setscheduler}}, {{The Linux Kernel/id|sched_getscheduler}}
: {{The Linux Kernel/id|task_struct}}::{{The Linux Kernel/id|rt_priority}} and other members with less unique identifiers
🛠️ Utilities
: {{The Linux Kernel/man|1|pidstat}}
: {{The Linux Kernel/man|1|pcp-pidstat}}
: {{The Linux Kernel/man|1|perf-sched}}
: [https://opensource.googleblog.com/2019/10/understanding-scheduling-behavior-with.html Understanding Scheduling Behavior with SchedViz]
📖 References
: {{The Linux Kernel/man|7|sched}}
: {{The Linux Kernel/doc|Scheduling|scheduler}}
:: {{The Linux Kernel/doc|EEVDF Scheduler|scheduler/sched-eevdf.html}}
::: [https://lwn.net/Kernel/Index/#Scheduler-EEVDF An EEVDF CPU scheduler for Linux LWN]
: {{The Linux Kernel/doc|Delaying and scheduling routines|driver-api/basics.html#delaying-and-scheduling-routines}}
: CFS
:: {{The Linux Kernel/doc|Completely Fair Scheduler|scheduler/sched-design-CFS.html}}
:: {{The Linux Kernel/doc|CFS Bandwidth Control|scheduler/sched-bwc.html}}
:: [[The Linux Kernel/System/CGroup v2#CPU|CPU cgroup controller]]
:: {{The Linux Kernel/doc|CPU cgroup interface files|admin-guide/cgroup-v2.html#cpu-interface-files}}
:: [https://lwn.net/Kernel/Index/#Scheduler-Completely_fair_scheduler Completely fair scheduler LWN]
:: [https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-tuning-taskscheduler.html Tuning the task scheduler]
:: [https://home.robusta.dev/blog/stop-using-cpu-limits stop using CPU limits on Kubernetes]
: {{The Linux Kernel/doc|Deadline Task Scheduler|scheduler/sched-deadline.html}}
: {{The Linux Kernel/ltp|kernel|sched}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setparam}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_getscheduler}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setscheduler}}
📚 Further reading about the scheduler
: [https://github.com/iovisor/bpftrace/blob/master/docs/tutorial_one_liners.md#lesson-10-scheduler-tracing Scheduler tracing]
: [https://github.com/iovisor/bcc/blob/master/README.md#cpu-and-scheduler-tools bcc/ebpf CPU and scheduler tools]
=== Preemption ===
Preemption refers to the ability of the system to interrupt a running task to switch to another task.
This is essential for ensuring that high-priority tasks receive the necessary CPU time and for improving the system's responsiveness.
In Linux, preemption models define how and when the kernel can preempt tasks.
Different models offer varying trade-offs between system responsiveness and throughput.
📖 References
: {{The Linux Kernel/doc|Proper Locking Under a Preemptible Kernel|locking/preempt-locking.html}}
:: {{The Linux Kernel/id|preempt_enable}} – decrement the preempt counter
:: {{The Linux Kernel/id|preempt_disable}} – increment the preempt counter
:: {{The Linux Kernel/id|preempt_enable_no_resched}} – decrement, but do not immediately preempt
:: {{The Linux Kernel/id|preempt_check_resched}} – if needed, reschedule
:: {{The Linux Kernel/id|preempt_count}} – return the preempt counter
: {{The Linux Kernel/source|kernel/Kconfig.preempt}} – preemption model configuration
:: {{The Linux Kernel/id|CONFIG_PREEMPT_NONE}} – no forced preemption for servers
:: {{The Linux Kernel/id|CONFIG_PREEMPT_VOLUNTARY}} – voluntary preemption for desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT}} – preemptible except for critical sections for low-latency desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} – real-time preemption for [[Embedded_Systems/Linux#Real-time|highly responsive applications]]
:: {{The Linux Kernel/id|CONFIG_PREEMPT_DYNAMIC}} – allows runtime switching of preemption model
::: /sys/kernel/debug/sched/preempt – shows and controls the active preemption model
=== sched_ext ===
Since version 6.12 the kernel supports {{The Linux Kernel/id|SCHED_EXT}} — an extensible scheduler class whose behavior is defined by a set of {{w|eBPF}} programs.
Any scheduling algorithm can be implemented on top of sched_ext, loaded and unloaded dynamically at runtime.
The system integrity is maintained no matter what the BPF scheduler does: the default scheduling behavior is restored on error or when a runnable task stalls.
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_SCHED_CLASS_EXT}}
: {{The Linux Kernel/source|kernel/sched/ext.c}} – extensible BPF scheduler class
: {{The Linux Kernel/id|sched_ext_ops}} – BPF scheduler operations
: {{The Linux Kernel/id|sched_ext_entity}} – per-task sched_ext data, embedded in {{The Linux Kernel/id|task_struct}}
👁 Examples
: {{The Linux Kernel/source|tools/sched_ext}} – in-tree example BPF schedulers
📖 References
: {{The Linux Kernel/doc|Extensible Scheduler Class|scheduler/sched-ext.html}}
: [https://github.com/sched-ext/scx sched-ext/scx] – production BPF schedulers
: [https://lwn.net/Kernel/Index/#Scheduler-BPF Scheduler BPF LWN]
=== Energy Aware Scheduling ===
🚀 advanced topic
Since version 5.0, Energy Aware Scheduling (EAS) gives the scheduler the ability to predict the impact of its decisions on the energy consumed by CPUs.
EAS relies on an Energy Model (EM) to select an energy efficient CPU for each task, with minimal impact on throughput.
EAS operates only on heterogeneous CPU topologies (such as ARM {{w|big.LITTLE}}) where the potential for energy savings is highest.
⚲ API
: /proc/sys/kernel/sched_energy_aware – enable or disable EAS
: {{The Linux Kernel/include|linux/energy_model.h}}
:: {{The Linux Kernel/id|em_perf_domain}} – performance domain descriptor
:: {{The Linux Kernel/id|em_cpu_get}} – get the EM for a given CPU
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_ENERGY_MODEL}}
: {{The Linux Kernel/id|find_energy_efficient_cpu}} – find most energy-efficient target CPU for a waking task
: {{The Linux Kernel/source|kernel/power/energy_model.c}} – CPU energy model framework
📖 References
: {{The Linux Kernel/doc|Energy Aware Scheduling|scheduler/sched-energy.html}}
: {{The Linux Kernel/doc|Energy Model of devices|power/energy-model.html}}
=== Wait queues ===
A ''wait queue'' in the kernel is a data structure that allows one or more processes to wait (sleep) until something of interest happens.
They are used throughout the kernel to wait for available memory, I/O completion, message arrival, and many other things.
In the early days of Linux, a wait queue was a simple list of waiting processes, but various scalability problems (including the {{w|thundering herd problem}}) have led to the addition of a fair amount of complexity since then.
⚲ API
{{The Linux Kernel/include|linux/wait.h}}
{{The Linux Kernel/id|wait_queue_head}} consists of double linked list of {{The Linux Kernel/id|wait_queue_entry}} and a spinlock.
Waiting for simple events:
: Use one of two methods for {{The Linux Kernel/id|wait_queue_head}} initialization:
:: {{The Linux Kernel/id|init_waitqueue_head}} initializes {{The Linux Kernel/id|wait_queue_head}} in function context
:: {{The Linux Kernel/id|DECLARE_WAIT_QUEUE_HEAD}} - actually defines {{The Linux Kernel/id|wait_queue_head}} in global context
: Wait alternatives:
:: {{The Linux Kernel/id|wait_event_interruptible}} - preferable wait
:: {{The Linux Kernel/id|wait_event_interruptible_timeout}}
:: {{The Linux Kernel/id|wait_event}} - uninterruptible wait. Can cause deadlock ⚠
: {{The Linux Kernel/id|wake_up}} etc
👁 For example usage see references to unique {{The Linux Kernel/id|suspend_queue}}.
Explicit use of add_wait_queue instead of simple wait_event for complex cases:
: {{The Linux Kernel/id|DECLARE_WAITQUEUE}} actually defines wait_queue_entry with {{The Linux Kernel/id|default_wake_function}}
: {{The Linux Kernel/id|add_wait_queue}} inserts process in the first position of a wait queue
: {{The Linux Kernel/id|remove_wait_queue}}
⚙️ Internals
: {{The Linux Kernel/id|___wait_event}}
: {{The Linux Kernel/id|__add_wait_queue}}
: {{The Linux Kernel/id|__wake_up_common}}, {{The Linux Kernel/id|try_to_wake_up}}
: {{The Linux Kernel/source|kernel/sched/wait.c}} – wait queue implementation
Simple wait queues – simplified version with raw spinlock, suitable for RT and restricted contexts:
: {{The Linux Kernel/include|linux/swait.h}}
:: {{The Linux Kernel/id|swait_queue_head}}, {{The Linux Kernel/id|swait_queue}}
: {{The Linux Kernel/source|kernel/sched/swait.c}} – simple wait queue implementation
📖 References
: {{The Linux Kernel/doc|Wait queues and Wake events|driver-api/basics.html#wait-queues-and-wake-events}}
=== Real-time ===
{{:The Linux Kernel/Multitasking/Real-time}}
== Synchronization ==
Thread {{w|Synchronization (computer science)|synchronization}} is defined as a mechanism which ensures that two or more concurrent processes or threads do not simultaneously execute some particular program segment known as {{w|mutual exclusion}} (mutex).
When one thread starts executing the critical section (serialized segment of the program) the other thread should wait until the first thread finishes.
If proper synchronization techniques are not applied, it may cause a race condition where, the values of variables may be unpredictable and vary depending on the timings of context switches of the processes or threads.
=== User space synchronization ===
==== POSIX Timers ====
⚲ APIs
: {{The Linux Kernel/man|2|timer_create}} – creates a POSIX timer
: {{The Linux Kernel/man|2|timer_settime}} – starts or modifies a timer
: {{The Linux Kernel/man|2|timer_gettime}} – retrieves the remaining time of a timer
: {{The Linux Kernel/man|2|timer_delete}} – deletes a POSIX timer
: {{The Linux Kernel/man|2|clock_nanosleep}} – suspends execution for a specified time
⚙️ Internals
: {{The Linux Kernel/include|linux/posix-timers.h}}
: {{The Linux Kernel/source|kernel/time/itimer.c}} – interval timer (setitimer/getitimer)
: {{The Linux Kernel/source|kernel/time/posix-timers.c}} – POSIX clock and timer operations
: {{The Linux Kernel/source|kernel/time/posix-cpu-timers.c}} – per-process/thread CPU timers
:: {{The Linux Kernel/id|posix_cpu_timer_set}} – function setting up CPU timers
==== Futex ====
A {{The Linux Kernel/man|2|futex}} ↪ {{The Linux Kernel/id|do_futex}} (short for "Fast User space muTex") is a kernel system call that programmers can use to implement basic locking, or as a building block for higher-level locking abstractions such as semaphores and POSIX mutexes or condition variables.
A futex consists of a kernel space ''wait queue'' that is attached to an aligned integer in user space.
Multiple processes or threads operate on the integer entirely in user space (using atomic operations to avoid interfering with one another), and only resort to relatively expensive system calls to request operations on the wait queue (for example to wake up waiting processes, or to put the current process on the wait queue).
A properly programmed futex-based lock will not use system calls except when the lock is contended; since most operations do not require arbitration between processes, this will not happen in most cases.
The basic operations of futexes are based on only two central operations {{The Linux Kernel/id|futex_wait}} and {{The Linux Kernel/id|futex_wake}} though implementation has more operations for more specialized cases.
: WAIT (''addr'', ''val'') checks if the value stored at the address ''addr'' is ''val'', and if it is puts the current thread to sleep.
: WAKE (''addr'', ''val'') wakes up ''val'' number of threads waiting on the address ''addr''.
⚲ API
: {{The Linux Kernel/include|uapi/linux/futex.h}}
: {{The Linux Kernel/include|linux/futex.h}}
⚙️ Internals: {{The Linux Kernel/source|kernel/futex}}
📖 References
: {{w|Futex}}
: {{The Linux Kernel/man|7|futex}}
: {{The Linux Kernel/doc|Futex API reference|kernel-hacking/locking.html#futex-api-reference}}
: {{The Linux Kernel/ltp|kernel/syscalls|futex}}
==== File locking ====
⚲ API: {{The Linux Kernel/man|2|flock}}
==== Semaphore ====
💾 ''History: Semaphore is part of System V IPC {{The Linux Kernel/man|7|sysvipc}}''
⚲ API
: {{The Linux Kernel/man|2|semget}}
: {{The Linux Kernel/man|2|semctl}}
: {{The Linux Kernel/man|2|semop}}
⚙️ Internals: {{The Linux Kernel/source|ipc/sem.c}}
=== Kernel space synchronization ===
For kernel mode synchronization Linux provides three categories of locking primitives: sleeping, per CPU local locks and spinning locks.
==== Read-Copy-Update ====
Common mechanism to solve the readers–writers problem is the {{w|read-copy-update}} (''RCU'') algorithm.
Read-copy-update implements a kind of mutual exclusion that is wait-free (non-blocking) for readers, allowing extremely low overhead.
However, RCU updates can be expensive, as they must leave the old versions of the data structure in place to accommodate pre-existing readers.
⚲ The core API in {{The Linux Kernel/include|linux/rcupdate.h}} is quite small:
: {{The Linux Kernel/id|rcu_read_lock}} marks an RCU-protected data structure so that it won't be reclaimed for the full duration of that critical section.
: {{The Linux Kernel/id|rcu_read_unlock}} is used by a reader to inform the reclaimer that the reader is exiting an RCU read-side critical section. Note that RCU read-side critical sections may be nested and/or overlapping.
: {{The Linux Kernel/id|synchronize_rcu}} blocks until all pre-existing RCU read-side critical sections on all CPUs have completed. Note that <code>synchronize_rcu</code> will ''not'' necessarily wait for any subsequent RCU read-side critical sections to complete.
For example, consider the following sequence of events:
{| class="wikitable"
!
!CPU 0
!CPU 1
!CPU 2
|-
|1.
|rcu_read_lock()
|
|
|-
|2.
|
|enters synchronize_rcu()
|
|-
|3.
|
|
| rcu_read_lock()
|-
|4.
|rcu_read_unlock()
|
|
|-
|5.
|
|exits synchronize_rcu()
|
|-
|6.
|
|
|rcu_read_unlock()
|}
[[File:Rcu api.jpg|thumb|upright=2|RCU API communications between the reader, updater, and reclaimer]]
:Since <code>synchronize_rcu</code> is the API that must figure out when readers are done, its implementation is key to RCU. For RCU to be useful in all but the most read-intensive situations, <code>synchronize_rcu</code>'s overhead must also be quite small.
:Alternatively, instead of blocking, synchronize_rcu may register a callback to be invoked after all ongoing RCU read-side critical sections have completed. This callback variant is called {{The Linux Kernel/id|call_rcu}} in the Linux kernel.
: {{The Linux Kernel/id|rcu_assign_pointer}} - The updater uses this function to assign a new value to an RCU-protected pointer, in order to safely communicate the change in value from the updater to the reader. This function returns the new value, and also executes any {{w|Memory barrier}} instructions required for a given CPU architecture. Perhaps more importantly, it serves to document which pointers are protected by RCU.
: {{The Linux Kernel/id|rcu_dereference}} - The reader uses this function to fetch an RCU-protected pointer, which returns a value that may then be safely dereferenced. It also executes any directives required by the compiler or the CPU, for example, a volatile cast for gcc, a memory_order_consume load for C/C++11 or the memory-barrier instruction required by the old DEC Alpha CPU. The value returned by <code>rcu_dereference</code> is valid only within the enclosing RCU read-side critical section. As with <code>rcu_assign_pointer</code>, an important function of <code>rcu_dereference</code> is to document which pointers are protected by RCU.
The RCU infrastructure observes the time sequence of <code>rcu_read_lock</code>, <code>rcu_read_unlock</code>, <code>synchronize_rcu</code>, and <code>call_rcu</code> invocations in order to determine when (1) <code>synchronize_rcu</code> invocations may return to their callers and (2) <code>call_rcu</code> callbacks may be invoked.
Efficient implementations of the RCU infrastructure make heavy use of batching in order to amortize their overhead over many uses of the corresponding APIs.
⚲ API
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=rcu_nocbs%5B rcu_nocbs] – no-callback CPUs
: {{The Linux Kernel/include|linux/rcupdate.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/rcu}} – read-copy-update implementation
📖 References
: {{The Linux Kernel/doc|Avoiding Locks: Read Copy Update|kernel-hacking/locking.html?#avoiding-locks-read-copy-update}}
: {{The Linux Kernel/doc|RCU concepts|RCU}}
: [https://0xax.gitbooks.io/linux-insides/content/Initialization/linux-initialization-9.html RCU initialization]
📚 Further reading
: [https://lpc.events/event/18/contributions/1906/attachments/1590/3302/LPC-2024-Vienna.pdf Reduce synchronize_rcu() latency]
==== Sleeping locks ====
===== Mutexes =====
⚲ API
: {{The Linux Kernel/include|linux/mutex.h}}
: {{The Linux Kernel/include|linux/completion.h}}
: {{The Linux Kernel/id|mutex}} has owner and usage constraints, easier to debug than semaphore
:: {{The Linux Kernel/id|rt_mutex}} blocking mutual exclusion locks with priority inheritance (PI) support
:: {{The Linux Kernel/id|ww_mutex}} Wound/Wait mutexes: blocking mutual exclusion locks with deadlock avoidance
: {{The Linux Kernel/id|rw_semaphore}} readers–writer semaphores
: {{The Linux Kernel/id|percpu_rw_semaphore}}
: {{The Linux Kernel/id|completion}} - use completion for synchronization task with ISR and task or two tasks.
:: {{The Linux Kernel/id|wait_for_completion}}
:: {{The Linux Kernel/id|complete}}
💾 ''Historical''
: {{The Linux Kernel/id|semaphore}} - use mutex instead semaphore if possible
: {{The Linux Kernel/include|linux/semaphore.h}}
: {{The Linux Kernel/include|linux/rwsem.h}}
📖 References
: {{The Linux Kernel/doc|Completions - “wait for completion” barrier APIs|scheduler/completion.html}}
: {{The Linux Kernel/doc|Mutex API reference|kernel-hacking/locking.html#mutex-api-reference}}
: [http://lwn.net/Articles/23993/ LWN: completion events]
==== per CPU local lock ====
On normal preemptible kernel local_lock calls {{The Linux Kernel/id|preempt_disable}}.
On RT preemptible kernel local_lock calls {{The Linux Kernel/id|migrate_disable}} and {{The Linux Kernel/id|spin_lock}}.
Any changes applied to spinlock_t also apply to local_lock.
⚲ API
: {{The Linux Kernel/include|linux/local_lock.h}}
:: {{The Linux Kernel/id|local_lock}}, {{The Linux Kernel/id|preempt_disable}}
:: {{The Linux Kernel/id|local_lock_irqsave}}, {{The Linux Kernel/id|local_irq_save}}
:: etc
📖 References
: {{The Linux Kernel/doc|local_lock|locking/locktypes.html#local-lock}}
: {{The Linux Kernel/doc|PREEMPT_RT caveats: spinlock_t, rwlock_t, migrate_disable and local_lock|locking/locktypes.html#spinlock-t-and-rwlock-t}}
: {{The Linux Kernel/doc|Proper locking under a preemptive kernel|locking/preempt-locking.html}}
: [https://lwn.net/Articles/828477/ Local locks in the kernel]
==== Spinning locks ====
===== {{w|Spinlock}}s =====
a ''spinlock'' is a lock which causes a thread trying to acquire it to simply wait in a loop ("spin") while repeatedly checking if the lock is available.
Since the thread remains active but is not performing a useful task, the use of such a lock is a kind of busy waiting.
Once acquired, spinlocks will usually be held until they are explicitly released, although in some implementations they may be automatically released if the thread being waited on (that which holds the lock) blocks, or "goes to sleep".
Spinlocks are commonly used inside kernels because they are efficient if threads are likely to be blocked for only short periods.
However, spinlocks become wasteful if held for longer durations, as they may prevent other threads from running and require rescheduling.
👁 For example {{The Linux Kernel/id|kobj_kset_join}} uses spinlock to protect assess to the linked list.
Enabling and disabling of kernel preemption replaced spinlocks on uniprocessor systems (disabled {{The Linux Kernel/id|CONFIG_SMP}}).
Most spinning locks becoming sleeping locks in the {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} kernels.
⚲ API
: {{The Linux Kernel/include|linux/spinlock.h}}
:: {{The Linux Kernel/id|spinlock_t}}
:: {{The Linux Kernel/id|raw_spinlock_t}}
: {{The Linux Kernel/include|linux/bit_spinlock.h}}
:: {{The Linux Kernel/id|bit_spin_lock}}
📖 References
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-1.html Introduction to spinlocks]
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-2.html Queued spinlocks]
===== {{w|Seqlock}}s =====
A ''seqlock'' (short for "sequential lock") is a special locking mechanism used in Linux for supporting fast writes of shared variables between two parallel operating system routines.
It is a special solution to the readers–writers problem when the number of writers is small.
It is a reader-writer consistent mechanism which avoids the problem of writer starvation.
A {{The Linux Kernel/id|seqlock_t}} consists of storage for saving a sequence counter {{The Linux Kernel/id|seqcount_t}}/seqcount_spinlock_t in addition to a lock.
The lock is to support synchronization between two writers and the counter is for indicating consistency in readers.
In addition to updating the shared data, the writer increments the sequence counter, both after acquiring the lock and before releasing the lock.
Readers read the sequence counter before and after reading the shared data.
If the sequence counter is odd on either occasion, a writer had taken the lock while the data was being read and it may have changed.
If the sequence counters are different, a writer has changed the data while it was being read.
In either case readers simply retry (using a loop) until they read the same even sequence counter before and after.
⚲ API
: {{The Linux Kernel/id|seqlock_t}}
:: {{The Linux Kernel/id|DEFINE_SEQLOCK}}, {{The Linux Kernel/id|seqlock_init}}, {{The Linux Kernel/id|read_seqlock_excl}}, {{The Linux Kernel/id|write_seqlock}}
: {{The Linux Kernel/id|seqcount_t}}
:: {{The Linux Kernel/id|seqcount_init}}, {{The Linux Kernel/id|read_seqcount_begin}}, {{The Linux Kernel/id|read_seqcount_retry}}, {{The Linux Kernel/id|write_seqcount_begin}}, {{The Linux Kernel/id|write_seqcount_end}}
: {{The Linux Kernel/include|linux/seqlock.h}}
👁 Example: {{The Linux Kernel/id|mount_lock}}, defined in {{The Linux Kernel/source|fs/namespace.c}}
📖 References
: {{The Linux Kernel/doc|Sequence counters and sequential locks|locking/seqlock.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-6.html SeqLock]
==== Spinning or sleeping locks ====
:{| class="wikitable"
! !! normal !! on preempt RT
|-
| spinlock_t, || raw_spinlock_t || rt_mutex_base, rt_spin_lock, sleeping
|-
| rwlock_t || spinning || sleeping
|-
| local_lock || preempt_disable|| migrate_disable, rt_spin_lock, sleeping
|}
==== Low level ====
The compiler might optimize away or reorder writes to variables leading to unexpected behavior
when variables are accessed concurrently by multiple threads.
⚲ API
: {{The Linux Kernel/include|asm-generic/rwonce.h}} – prevent the compiler from merging or refetching reads or writes.
: {{The Linux Kernel/include|linux/compiler.h}}
:: {{The Linux Kernel/id|barrier}} – prevents the compiler from reordering instructions around the barrier
: {{The Linux Kernel/include|asm-generic/barrier.h}} – generic barrier definitions
: {{The Linux Kernel/source|arch/x86/include/asm/barrier.h}} – force strict CPU ordering
:: {{The Linux Kernel/id|mb}} – ensures that all memory operations before the barrier are completed before any memory operations after the barrier are started
⚙️ Internals
: {{The Linux Kernel/doc|Atomics|driver-api/basics.html#atomics}}
:: {{The Linux Kernel/include|asm-generic/atomic.h}}
:: {{The Linux Kernel/include|linux/atomic/atomic-instrumented.h}}
::: {{The Linux Kernel/id|atomic_dec_and_test}} ...
📚 Further reading
: {{w|Volatile_(computer_programming)#In_C_and_C++|volatile}} – prevents the compiler from optimizations
: {{w|Memory barrier}} – enforces an ordering constraint on memory operations
==== ... ====
⚙️ Locking internals
: {{The Linux Kernel/include|linux/lockdep.h}} – runtime locking correctness validator
: {{The Linux Kernel/include|linux/debug_locks.h}}
: {{The Linux Kernel/source|lib/locking-selftest.c}} – locking correctness self-tests
: {{The Linux Kernel/source|kernel/locking}} – locking primitives
: {{The Linux Kernel/id|mutex_waiter}}, {{The Linux Kernel/id|timer_list}}, {{The Linux Kernel/id|wait_queue_head_t}}
:: {{The Linux Kernel/source|kernel/locking/locktorture.c}} – module-based torture test facility for locking
📖 Locking references
: {{The Linux Kernel/doc|locking|locking}}
:: {{The Linux Kernel/doc|Lock types and their rules|locking/locktypes.html}}
::: 😴 {{The Linux Kernel/doc|sleeping locks|locking/locktypes.html#sleeping-locks}}
:::: {{The Linux Kernel/id|mutex}}, {{The Linux Kernel/id|rt_mutex}}, {{The Linux Kernel/id|semaphore}}, {{The Linux Kernel/id|rw_semaphore}}, {{The Linux Kernel/id|ww_mutex}}, {{The Linux Kernel/id|percpu_rw_semaphore}}
:::: on preempt RT: local_lock, spinlock_t, rwlock_t
::: 😵💫 {{The Linux Kernel/doc|spinning locks|locking/locktypes.html#spinning-locks}}:
:::: raw_spinlock_t, bit spinlocks
:::: on non preempt RT: spinlock_t, rwlock_t
: {{The Linux Kernel/doc|Unreliable Guide To Locking|kernel-hacking/locking.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/ Synchronization primitives]
=== Time ===
⚲ UAPI
: {{The Linux Kernel/include|uapi/linux/time.h}}
:: {{The Linux Kernel/id|timespec}} – nanosecond resolution
:: {{The Linux Kernel/id|timeval}} – microsecond resolution
:: {{The Linux Kernel/id|timezone}}
:: ...
: {{The Linux Kernel/include|uapi/linux/time_types.h}}
:: {{The Linux Kernel/id|__kernel_timespec}} – nanosecond resolution, used in syscalls
:: ...
⚲ API
: {{The Linux Kernel/include|linux/delay.h}} – busy-wait delay functions for timing control
: {{The Linux Kernel/include|linux/sched/clock.h}}
:: {{The Linux Kernel/id|sched_clock}}
:: ...
: {{The Linux Kernel/include|linux/time.h}}
:: {{The Linux Kernel/id|tm}}
:: {{The Linux Kernel/id|get_timespec64}}
:: ...
: {{The Linux Kernel/include|linux/ktime.h}}
:: {{The Linux Kernel/id|ktime_t}} – nanosecond scalar representation for kernel time values
:: {{The Linux Kernel/id|ktime_sub}}
:: ...
: {{The Linux Kernel/include|linux/timekeeping.h}}
:: {{The Linux Kernel/id|ktime_get}}, {{The Linux Kernel/id|ktime_get_ns}}
:: {{The Linux Kernel/id|ktime_get_real}}
:: ...
: {{The Linux Kernel/include|linux/time64.h}}
:: {{The Linux Kernel/id|timespec64}}
:: {{The Linux Kernel/id|time64_t}}
:: {{The Linux Kernel/id|ns_to_timespec64}}
:: {{The Linux Kernel/id|timespec64_sub}}
:: {{The Linux Kernel/id|ktime_to_timespec64}}
:: ...
: {{The Linux Kernel/include|uapi/linux/rtc.h}}
: {{The Linux Kernel/include|linux/jiffies.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time}} – timekeeping, timers and clocks
📖 References
: {{The Linux Kernel/doc|ktime accessors|core-api/timekeeping.html}}
: {{The Linux Kernel/doc|Clock sources, Clock events, sched_clock() and delay timers|timers/timekeeping.html}}
: {{The Linux Kernel/doc|Time and timer routines|driver-api/basics.html#time-and-timer-routines}}
: {{w|Year 2038 problem}}
{{:The Linux Kernel/Multitasking/CPU}}
{{BookCat}}
56yhm0p6ur06da8j7kr073pfxbmj9qh
4641522
4641511
2026-06-28T15:27:24Z
Conan
3188
Multitasking: sched/signal.h, atomic.h, rculist.h header references
4641522
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Multitasking functionality}}</noinclude>
{| style="width: 25%; float: right; text-align:center;border-spacing: 0; margin:auto;" cellpadding="5pc"
! bgcolor="#ffc" |multitasking
|-
| bgcolor="#eeb" |[[#Execution|execution]]
|-
| bgcolor="#dda" |[[#Threads_or_tasks|threads or tasks]]
|-
| bgcolor="#cc9" |[[#Synchronization|synchronization]]
|-
| bgcolor="#bb8" |[[#Scheduler|Scheduler]]
|-
| bgcolor="#aa8" |[[#Interrupts|interrupts core]]
|- style=""
| bgcolor="#997" |[[#CPU_specific|CPU specific]]
|}
Linux kernel is a preemptive {{w|Computer multitasking|multitasking}} operating system.
As a multitasking OS, it allows multiple processes to share processors (CPUs) and other system resources.
Each CPU executes a single task at a time.
However, multitasking allows each processor to switch between tasks that are being executed without having to wait for each task to finish.
For that, the kernel can, at any time, temporarily interrupt a task being carried out by the processor, and replace it by another task that can be new or a previously suspended one.
The operation involving the swapping of the running task is called ''{{w|context switch}}''.
== Execution ==
⚲ API ↪ ⚙️ implementations
{{The Linux Kernel/man|2|execve}} ↪ {{The Linux Kernel/id|do_execveat_common}} runs an executable file in the context of current process, replacing the previous executable.
This system call is used by family of functions of libc {{The Linux Kernel/man|3|exec}}.
The {{w|Executable and Linkable Format|ELF}} binary format is loaded by {{The Linux Kernel/source|fs/binfmt_elf.c}}.
{{The Linux Kernel/man|2|clone}}.
Clone creates a child process that may share parts of its execution context with the parent.
It is often used to implement threads (though programmers will typically use a higher-level interface such as {{The Linux Kernel/man|7|pthreads}}, implemented on top of clone).
{{The Linux Kernel/man|2|wait}} ↪ {{The Linux Kernel/id|kernel_waitid}} suspends the execution of the calling process until one of its child processes terminates.
Syscall {{The Linux Kernel/man|2|getpid}} ↪ {{The Linux Kernel/id|task_tgid_vnr}} returns PID of the current process which internally is called TGID - thread group id.
A process can contain many threads.
{{The Linux Kernel/man|2|gettid}} ↪ {{The Linux Kernel/id|task_pid_vnr}} returns thread id.
Which internally is historically called PID.
⚠️ Warning: confusion.
User space PID ≠ kernel space PID.
{{The Linux Kernel/man|1|ps}} -AF lists current processes and thread as {{w|Light-weight process|LWP}}.
For a single thread process all these IDs are equal.
High-resolution delays:
: {{The Linux Kernel/man|2|nanosleep}} ↪ {{The Linux Kernel/id|sys_nanosleep}}
:: {{The Linux Kernel/id|hrtimer_nanosleep}}
: {{The Linux Kernel/man|2|clock_nanosleep}} ↪ {{The Linux Kernel/id|sys_clock_nanosleep}}
Wait for a signal:
: {{The Linux Kernel/man|2|pause}} ↪ {{The Linux Kernel/id|sys_pause}}
: {{The Linux Kernel/man|2|sigsuspend}} ↪ {{The Linux Kernel/id|sys_sigsuspend}}
See [[The Linux Kernel/Processes|Processes]] for process creation and termination.
=== Inter-process communication ===
Inter-process communication (IPC) refers specifically to the mechanisms an operating system provides to allow processes it manages to share data.
Methods for achieving IPC are divided into categories which vary based on software requirements, such as performance and modularity requirements, and system circumstances.
Linux inherited from Unix the following IPC mechanisms:
Signals (⚲ API ↪ ⚙️ implementations):
: {{The Linux Kernel/man|2|kill}} sends signal to a process
: {{The Linux Kernel/man|2|tgkill}} ↪ {{The Linux Kernel/id|do_tkill}} sends a signal to a thread
: {{The Linux Kernel/man|2|process_vm_readv}} ↪ {{The Linux Kernel/id|process_vm_rw}} - zero-copy data transfer between process address spaces
: {{The Linux Kernel/man|2|sigaction}} ↪ {{The Linux Kernel/id|do_sigaction}} – examine and change a signal action
: {{The Linux Kernel/man|2|sigprocmask}} – examine and change blocked signals
: {{The Linux Kernel/man|2|sigpending}} ↪ {{The Linux Kernel/id|do_sigpending}} – examine pending signals
: {{The Linux Kernel/man|2|sigsuspend}} – wait for a signal
: {{The Linux Kernel/man|2|sigaltstack}} – set or get signal stack context
: {{The Linux Kernel/man|2|sigtimedwait}} ↪ {{The Linux Kernel/id|do_sigtimedwait}} – synchronously wait for queued signals
: {{The Linux Kernel/man|7|signal}} – overview of signals
: {{The Linux Kernel/include|linux/sched/signal.h}} – signal-related task accessors
: {{The Linux Kernel/source|kernel/signal.c}} – signal delivery and handling
: [[../Storage#Zero-copy|Anonymous pipes]] and named pipes (FIFOs) {{The Linux Kernel/man|2|mknod}} ↪ {{The Linux Kernel/id|do_mknodat}} {{The Linux Kernel/id|S_IFIFO}}
: {{w|Express Data Path}} {{The Linux Kernel/id|PF_XDP}}
: {{w|Unix domain socket}} {{The Linux Kernel/id|PF_UNIX}}
: Memory-mapped files {{The Linux Kernel/man|2|mmap}} ⤑ {{The Linux Kernel/id|ksys_mmap_pgoff}}
: {{The Linux Kernel/man|2|eventfd}} ↪ {{The Linux Kernel/id|do_eventfd}} – event notification via file descriptor
: {{The Linux Kernel/man|2|signalfd}} ↪ {{The Linux Kernel/id|do_signalfd4}} – receive signals via file descriptor
: {{The Linux Kernel/man|2|timerfd_create}} – timer notification via file descriptor
: Sys V IPC:
:: Message queues: {{The Linux Kernel/man|2|msgget}}, {{The Linux Kernel/man|2|msgsnd}}, {{The Linux Kernel/man|2|msgrcv}} ↪ {{The Linux Kernel/source|ipc/msg.c}}
:: Semaphores
:: Shared memory: {{The Linux Kernel/man|2|shmget}}, {{The Linux Kernel/man|2|shmctl}}, {{The Linux Kernel/man|2|shmat}}, {{The Linux Kernel/man|2|shmdt}} ↪ {{The Linux Kernel/source|ipc/shm.c}}
📖 References
: {{w|Inter-process communication}}
: {{The Linux Kernel/man|7|sysvipc}}
== Threads or tasks ==
In Linux kernel "thread" and "task" are almost synonyms.
⚲ API
: {{The Linux Kernel/include|linux/sched.h}} - the main scheduler API
:: {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/source|arch/x86/include/asm/current.h}} – x86 current task pointer
::{{Linux ident|current}} and {{The Linux Kernel/id|get_current}} () return current {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/include|uapi/linux/taskstats.h}} per-task statistics
: {{The Linux Kernel/include|linux/thread_info.h}}
:: {{The Linux Kernel/id|current_thread_info}}() returns {{The Linux Kernel/id|thread_info}}
:{{The Linux Kernel/include|linux/sched/task.h}} - interface between the scheduler and various task lifetime (fork()/exit()) functionality
: {{The Linux Kernel/include|linux/kthread.h}} - simple interface for creating and stopping kernel threads without mess.
::{{The Linux Kernel/id|kthread_run}} creates and wakes a thread
::{{The Linux Kernel/id|kthread_create}}
⚙️ Internals
: {{The Linux Kernel/id|kthread_run}} ↯ hierarchy:
: {{The Linux Kernel/source|kernel/kthread.c}} – kernel thread creation and management
:: {{The Linux Kernel/id|kthreadd}} – parent kernel thread and the creator of all other kernel threads.
Dequeues {{The Linux Kernel/id|kthread_create_info}} from {{The Linux Kernel/id|kthread_create_list}}.
::: {{The Linux Kernel/id|create_kthread}}
:::: {{The Linux Kernel/id|kernel_thread}}
:::: {{The Linux Kernel/id|kthread}} – invokes {{The Linux Kernel/id|threadfn}}
:: {{The Linux Kernel/id|__kthread_create_on_node}} – enqueues {{The Linux Kernel/id|kthread_create_info}} into {{The Linux Kernel/id|kthread_create_list}}
: {{The Linux Kernel/source|kernel/fork.c}} – process creation and cloning
:: {{The Linux Kernel/id|kernel_thread}}
::: {{The Linux Kernel/id|kernel_clone}}
==Scheduler==
The ''{{w|Scheduling_(computing)#Linux|scheduler}}'' is the part of the operating system that decides which process runs at a certain point in time.
It usually has the ability to pause a running process, move it to the back of the running queue and start a new process.
Active processes are placed in an array called a ''{{w|run queue}}'', or ''runqueue'' - {{The Linux Kernel/id|rq}}.
The run queue may contain priority values for each process, which will be used by the scheduler to determine which process to run next.
To ensure each program has a fair share of resources, each one is run for some time period (quantum) before it is paused and placed back into the run queue.
When a program is stopped to let another run, the program with the highest priority in the run queue is then allowed to execute.
Processes are also removed from the run queue when they ask to ''sleep'', are waiting on a resource to become available, or have been terminated.
Since version 6.6 the Linux kernel uses the {{w|Earliest eligible virtual deadline first scheduling}} (EEVDF) algorithm, which replaced the {{w|Completely Fair Scheduler}} (CFS).
While much of the CFS infrastructure remains: {{The Linux Kernel/id|sched_entity}}, {{The Linux Kernel/id|cfs_rq}}, the red-black tree, load balancing, and {{The Linux Kernel/source|kernel/sched/fair.c}} — the task selection logic is fundamentally different.
EEVDF is based on a classic scheduling algorithm originally designed for packet networks.
The scheduler has a scheduling complexity of O(log N), where N is the number of tasks in the runqueue.
Both picking and reinserting a task require O(log N) operations, because the run queue is implemented as a {{w|red–black tree}}.
The runqueue ({{The Linux Kernel/id|cfs_rq}}) is implemented as a red-black tree representing a "timeline" of future task execution.
The scheduler uses nanosecond granularity accounting and requires no heuristics or interactivity estimators.
EEVDF improves sleeper fairness over CFS by tracking ''lag'' ({{The Linux Kernel/id|vlag}}) — the difference between the service a task was entitled to and the service it actually received.
When a sleeping task wakes up, its lag determines eligibility, ensuring interactive tasks get prompt service without starving long-running tasks.
The data structure used for the scheduling algorithm is a red-black tree in which the nodes are {{The Linux Kernel/id|sched_entity}} structures, embedded in {{The Linux Kernel/id|task_struct}}.
With EEVDF, each task has a time slice ({{The Linux Kernel/id|sysctl_sched_base_slice}}, default 0.7ms) that determines its request length.
EEVDF computes a virtual deadline for each task: vd_i = ve_i + r_i/w_i, where ve_i is the eligible time, r_i is the request size, and w_i is the weight (determined by nice value).
The scheduler picks the eligible task with the earliest virtual deadline via {{The Linux Kernel/id|__pick_eevdf}}.
The Linux kernel contains different scheduler classes (or policies).
The EEVDF scheduler handles {{The Linux Kernel/id|SCHED_NORMAL}} (aka SCHED_OTHER).
The kernel also contains two additional classes {{The Linux Kernel/id|SCHED_BATCH}} and {{The Linux Kernel/id|SCHED_IDLE}}, and another two real-time scheduling classes named {{The Linux Kernel/id|SCHED_FIFO}} (realtime first-in-first-out) and {{The Linux Kernel/id|SCHED_RR}} (realtime round-robin), with a third realtime scheduling policy known as {{The Linux Kernel/id|SCHED_DEADLINE}} that implements the {{w|Earliest deadline first scheduling|earliest deadline first algorithm (EDF)}} added later.
Any realtime scheduler class takes precedence over any of the "normal" —i.e.
non realtime— classes.
The scheduler class is selected and configured through the {{The Linux Kernel/man|2|sched_setscheduler}} ↪ {{The Linux Kernel/id|do_sched_setscheduler}} system call.
Properly balancing latency, throughput, and fairness in schedulers is an open problem.<ref name="malte" >
Malte Skarupke.
[https://probablydance.com/2019/12/30/measuring-mutexes-spinlocks-and-how-bad-the-linux-scheduler-really-is/ "Measuring Mutexes, Spinlocks and how Bad the Linux Scheduler Really is"].
</ref>
⚲ API
: {{The Linux Kernel/man|1|renice}} – priority of running processes
: {{The Linux Kernel/man|1|nice}} – run a program with modified scheduling priority
: {{The Linux Kernel/man|1|chrt}} – manipulate the real-time attributes of a process
:: {{The Linux Kernel/man|2|sched_getattr}} ↪ {{The Linux Kernel/id|sys_sched_getattr}} – get scheduling policy and attributes
: {{The Linux Kernel/include|linux/sched.h}} – the main scheduler API
:: {{The Linux Kernel/id|schedule}}
: {{The Linux Kernel/man|2|getpriority}}, {{The Linux Kernel/man|2|setpriority}}
: {{The Linux Kernel/man|2|sched_setscheduler}}, {{The Linux Kernel/man|2|sched_getscheduler}}
: /sys/kernel/debug/sched/ – scheduler debugfs tuning directory
:: features – toggle scheduler feature flags
:: base_slice_ns – EEVDF base time slice (default 700000)
:: migration_cost_ns – cost threshold for task migration between CPUs
:: nr_migrate – max tasks to migrate per balancing pass
:: debug – dump detailed scheduler state
:: numa_balancing/ – NUMA balancing scan parameters
⚙️ Internals
:{{The Linux Kernel/id|sched_init}} is called from {{The Linux Kernel/id|start_kernel}}
: {{The Linux Kernel/id|__schedule}} is the main scheduler function.
: {{The Linux Kernel/id|runqueues}}, {{The Linux Kernel/id|this_rq}}
: {{The Linux Kernel/source|kernel/sched}} – scheduler subsystem
: {{The Linux Kernel/source|kernel/sched/core.c}} – core scheduling logic
: {{The Linux Kernel/source|kernel/sched/fair.c}} implements {{The Linux Kernel/id|SCHED_NORMAL}}, {{The Linux Kernel/id|SCHED_BATCH}}, {{The Linux Kernel/id|SCHED_IDLE}}
:: {{The Linux Kernel/id|__pick_eevdf}} – core of EEVDF
: {{The Linux Kernel/id|sched_setscheduler}}, {{The Linux Kernel/id|sched_getscheduler}}
: {{The Linux Kernel/id|task_struct}}::{{The Linux Kernel/id|rt_priority}} and other members with less unique identifiers
🛠️ Utilities
: {{The Linux Kernel/man|1|pidstat}}
: {{The Linux Kernel/man|1|pcp-pidstat}}
: {{The Linux Kernel/man|1|perf-sched}}
: [https://opensource.googleblog.com/2019/10/understanding-scheduling-behavior-with.html Understanding Scheduling Behavior with SchedViz]
📖 References
: {{The Linux Kernel/man|7|sched}}
: {{The Linux Kernel/doc|Scheduling|scheduler}}
:: {{The Linux Kernel/doc|EEVDF Scheduler|scheduler/sched-eevdf.html}}
::: [https://lwn.net/Kernel/Index/#Scheduler-EEVDF An EEVDF CPU scheduler for Linux LWN]
: {{The Linux Kernel/doc|Delaying and scheduling routines|driver-api/basics.html#delaying-and-scheduling-routines}}
: CFS
:: {{The Linux Kernel/doc|Completely Fair Scheduler|scheduler/sched-design-CFS.html}}
:: {{The Linux Kernel/doc|CFS Bandwidth Control|scheduler/sched-bwc.html}}
:: [[The Linux Kernel/System/CGroup v2#CPU|CPU cgroup controller]]
:: {{The Linux Kernel/doc|CPU cgroup interface files|admin-guide/cgroup-v2.html#cpu-interface-files}}
:: [https://lwn.net/Kernel/Index/#Scheduler-Completely_fair_scheduler Completely fair scheduler LWN]
:: [https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-tuning-taskscheduler.html Tuning the task scheduler]
:: [https://home.robusta.dev/blog/stop-using-cpu-limits stop using CPU limits on Kubernetes]
: {{The Linux Kernel/doc|Deadline Task Scheduler|scheduler/sched-deadline.html}}
: {{The Linux Kernel/ltp|kernel|sched}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setparam}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_getscheduler}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setscheduler}}
📚 Further reading about the scheduler
: [https://github.com/iovisor/bpftrace/blob/master/docs/tutorial_one_liners.md#lesson-10-scheduler-tracing Scheduler tracing]
: [https://github.com/iovisor/bcc/blob/master/README.md#cpu-and-scheduler-tools bcc/ebpf CPU and scheduler tools]
=== Preemption ===
Preemption refers to the ability of the system to interrupt a running task to switch to another task.
This is essential for ensuring that high-priority tasks receive the necessary CPU time and for improving the system's responsiveness.
In Linux, preemption models define how and when the kernel can preempt tasks.
Different models offer varying trade-offs between system responsiveness and throughput.
📖 References
: {{The Linux Kernel/doc|Proper Locking Under a Preemptible Kernel|locking/preempt-locking.html}}
:: {{The Linux Kernel/id|preempt_enable}} – decrement the preempt counter
:: {{The Linux Kernel/id|preempt_disable}} – increment the preempt counter
:: {{The Linux Kernel/id|preempt_enable_no_resched}} – decrement, but do not immediately preempt
:: {{The Linux Kernel/id|preempt_check_resched}} – if needed, reschedule
:: {{The Linux Kernel/id|preempt_count}} – return the preempt counter
: {{The Linux Kernel/source|kernel/Kconfig.preempt}} – preemption model configuration
:: {{The Linux Kernel/id|CONFIG_PREEMPT_NONE}} – no forced preemption for servers
:: {{The Linux Kernel/id|CONFIG_PREEMPT_VOLUNTARY}} – voluntary preemption for desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT}} – preemptible except for critical sections for low-latency desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} – real-time preemption for [[Embedded_Systems/Linux#Real-time|highly responsive applications]]
:: {{The Linux Kernel/id|CONFIG_PREEMPT_DYNAMIC}} – allows runtime switching of preemption model
::: /sys/kernel/debug/sched/preempt – shows and controls the active preemption model
=== sched_ext ===
Since version 6.12 the kernel supports {{The Linux Kernel/id|SCHED_EXT}} — an extensible scheduler class whose behavior is defined by a set of {{w|eBPF}} programs.
Any scheduling algorithm can be implemented on top of sched_ext, loaded and unloaded dynamically at runtime.
The system integrity is maintained no matter what the BPF scheduler does: the default scheduling behavior is restored on error or when a runnable task stalls.
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_SCHED_CLASS_EXT}}
: {{The Linux Kernel/source|kernel/sched/ext.c}} – extensible BPF scheduler class
: {{The Linux Kernel/id|sched_ext_ops}} – BPF scheduler operations
: {{The Linux Kernel/id|sched_ext_entity}} – per-task sched_ext data, embedded in {{The Linux Kernel/id|task_struct}}
👁 Examples
: {{The Linux Kernel/source|tools/sched_ext}} – in-tree example BPF schedulers
📖 References
: {{The Linux Kernel/doc|Extensible Scheduler Class|scheduler/sched-ext.html}}
: [https://github.com/sched-ext/scx sched-ext/scx] – production BPF schedulers
: [https://lwn.net/Kernel/Index/#Scheduler-BPF Scheduler BPF LWN]
=== Energy Aware Scheduling ===
🚀 advanced topic
Since version 5.0, Energy Aware Scheduling (EAS) gives the scheduler the ability to predict the impact of its decisions on the energy consumed by CPUs.
EAS relies on an Energy Model (EM) to select an energy efficient CPU for each task, with minimal impact on throughput.
EAS operates only on heterogeneous CPU topologies (such as ARM {{w|big.LITTLE}}) where the potential for energy savings is highest.
⚲ API
: /proc/sys/kernel/sched_energy_aware – enable or disable EAS
: {{The Linux Kernel/include|linux/energy_model.h}}
:: {{The Linux Kernel/id|em_perf_domain}} – performance domain descriptor
:: {{The Linux Kernel/id|em_cpu_get}} – get the EM for a given CPU
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_ENERGY_MODEL}}
: {{The Linux Kernel/id|find_energy_efficient_cpu}} – find most energy-efficient target CPU for a waking task
: {{The Linux Kernel/source|kernel/power/energy_model.c}} – CPU energy model framework
📖 References
: {{The Linux Kernel/doc|Energy Aware Scheduling|scheduler/sched-energy.html}}
: {{The Linux Kernel/doc|Energy Model of devices|power/energy-model.html}}
=== Wait queues ===
A ''wait queue'' in the kernel is a data structure that allows one or more processes to wait (sleep) until something of interest happens.
They are used throughout the kernel to wait for available memory, I/O completion, message arrival, and many other things.
In the early days of Linux, a wait queue was a simple list of waiting processes, but various scalability problems (including the {{w|thundering herd problem}}) have led to the addition of a fair amount of complexity since then.
⚲ API
{{The Linux Kernel/include|linux/wait.h}}
{{The Linux Kernel/id|wait_queue_head}} consists of double linked list of {{The Linux Kernel/id|wait_queue_entry}} and a spinlock.
Waiting for simple events:
: Use one of two methods for {{The Linux Kernel/id|wait_queue_head}} initialization:
:: {{The Linux Kernel/id|init_waitqueue_head}} initializes {{The Linux Kernel/id|wait_queue_head}} in function context
:: {{The Linux Kernel/id|DECLARE_WAIT_QUEUE_HEAD}} - actually defines {{The Linux Kernel/id|wait_queue_head}} in global context
: Wait alternatives:
:: {{The Linux Kernel/id|wait_event_interruptible}} - preferable wait
:: {{The Linux Kernel/id|wait_event_interruptible_timeout}}
:: {{The Linux Kernel/id|wait_event}} - uninterruptible wait. Can cause deadlock ⚠
: {{The Linux Kernel/id|wake_up}} etc
👁 For example usage see references to unique {{The Linux Kernel/id|suspend_queue}}.
Explicit use of add_wait_queue instead of simple wait_event for complex cases:
: {{The Linux Kernel/id|DECLARE_WAITQUEUE}} actually defines wait_queue_entry with {{The Linux Kernel/id|default_wake_function}}
: {{The Linux Kernel/id|add_wait_queue}} inserts process in the first position of a wait queue
: {{The Linux Kernel/id|remove_wait_queue}}
⚙️ Internals
: {{The Linux Kernel/id|___wait_event}}
: {{The Linux Kernel/id|__add_wait_queue}}
: {{The Linux Kernel/id|__wake_up_common}}, {{The Linux Kernel/id|try_to_wake_up}}
: {{The Linux Kernel/source|kernel/sched/wait.c}} – wait queue implementation
Simple wait queues – simplified version with raw spinlock, suitable for RT and restricted contexts:
: {{The Linux Kernel/include|linux/swait.h}}
:: {{The Linux Kernel/id|swait_queue_head}}, {{The Linux Kernel/id|swait_queue}}
: {{The Linux Kernel/source|kernel/sched/swait.c}} – simple wait queue implementation
📖 References
: {{The Linux Kernel/doc|Wait queues and Wake events|driver-api/basics.html#wait-queues-and-wake-events}}
=== Real-time ===
{{:The Linux Kernel/Multitasking/Real-time}}
== Synchronization ==
Thread {{w|Synchronization (computer science)|synchronization}} is defined as a mechanism which ensures that two or more concurrent processes or threads do not simultaneously execute some particular program segment known as {{w|mutual exclusion}} (mutex).
When one thread starts executing the critical section (serialized segment of the program) the other thread should wait until the first thread finishes.
If proper synchronization techniques are not applied, it may cause a race condition where, the values of variables may be unpredictable and vary depending on the timings of context switches of the processes or threads.
=== User space synchronization ===
==== POSIX Timers ====
⚲ APIs
: {{The Linux Kernel/man|2|timer_create}} – creates a POSIX timer
: {{The Linux Kernel/man|2|timer_settime}} – starts or modifies a timer
: {{The Linux Kernel/man|2|timer_gettime}} – retrieves the remaining time of a timer
: {{The Linux Kernel/man|2|timer_delete}} – deletes a POSIX timer
: {{The Linux Kernel/man|2|clock_nanosleep}} – suspends execution for a specified time
⚙️ Internals
: {{The Linux Kernel/include|linux/posix-timers.h}}
: {{The Linux Kernel/source|kernel/time/itimer.c}} – interval timer (setitimer/getitimer)
: {{The Linux Kernel/source|kernel/time/posix-timers.c}} – POSIX clock and timer operations
: {{The Linux Kernel/source|kernel/time/posix-cpu-timers.c}} – per-process/thread CPU timers
:: {{The Linux Kernel/id|posix_cpu_timer_set}} – function setting up CPU timers
==== Futex ====
A {{The Linux Kernel/man|2|futex}} ↪ {{The Linux Kernel/id|do_futex}} (short for "Fast User space muTex") is a kernel system call that programmers can use to implement basic locking, or as a building block for higher-level locking abstractions such as semaphores and POSIX mutexes or condition variables.
A futex consists of a kernel space ''wait queue'' that is attached to an aligned integer in user space.
Multiple processes or threads operate on the integer entirely in user space (using atomic operations to avoid interfering with one another), and only resort to relatively expensive system calls to request operations on the wait queue (for example to wake up waiting processes, or to put the current process on the wait queue).
A properly programmed futex-based lock will not use system calls except when the lock is contended; since most operations do not require arbitration between processes, this will not happen in most cases.
The basic operations of futexes are based on only two central operations {{The Linux Kernel/id|futex_wait}} and {{The Linux Kernel/id|futex_wake}} though implementation has more operations for more specialized cases.
: WAIT (''addr'', ''val'') checks if the value stored at the address ''addr'' is ''val'', and if it is puts the current thread to sleep.
: WAKE (''addr'', ''val'') wakes up ''val'' number of threads waiting on the address ''addr''.
⚲ API
: {{The Linux Kernel/include|uapi/linux/futex.h}}
: {{The Linux Kernel/include|linux/futex.h}}
⚙️ Internals: {{The Linux Kernel/source|kernel/futex}}
📖 References
: {{w|Futex}}
: {{The Linux Kernel/man|7|futex}}
: {{The Linux Kernel/doc|Futex API reference|kernel-hacking/locking.html#futex-api-reference}}
: {{The Linux Kernel/ltp|kernel/syscalls|futex}}
==== File locking ====
⚲ API: {{The Linux Kernel/man|2|flock}}
==== Semaphore ====
💾 ''History: Semaphore is part of System V IPC {{The Linux Kernel/man|7|sysvipc}}''
⚲ API
: {{The Linux Kernel/man|2|semget}}
: {{The Linux Kernel/man|2|semctl}}
: {{The Linux Kernel/man|2|semop}}
⚙️ Internals: {{The Linux Kernel/source|ipc/sem.c}}
=== Kernel space synchronization ===
For kernel mode synchronization Linux provides three categories of locking primitives: sleeping, per CPU local locks and spinning locks.
==== Read-Copy-Update ====
Common mechanism to solve the readers–writers problem is the {{w|read-copy-update}} (''RCU'') algorithm.
Read-copy-update implements a kind of mutual exclusion that is wait-free (non-blocking) for readers, allowing extremely low overhead.
However, RCU updates can be expensive, as they must leave the old versions of the data structure in place to accommodate pre-existing readers.
⚲ The core API in {{The Linux Kernel/include|linux/rcupdate.h}} is quite small:
: {{The Linux Kernel/id|rcu_read_lock}} marks an RCU-protected data structure so that it won't be reclaimed for the full duration of that critical section.
: {{The Linux Kernel/id|rcu_read_unlock}} is used by a reader to inform the reclaimer that the reader is exiting an RCU read-side critical section. Note that RCU read-side critical sections may be nested and/or overlapping.
: {{The Linux Kernel/id|synchronize_rcu}} blocks until all pre-existing RCU read-side critical sections on all CPUs have completed. Note that <code>synchronize_rcu</code> will ''not'' necessarily wait for any subsequent RCU read-side critical sections to complete.
For example, consider the following sequence of events:
{| class="wikitable"
!
!CPU 0
!CPU 1
!CPU 2
|-
|1.
|rcu_read_lock()
|
|
|-
|2.
|
|enters synchronize_rcu()
|
|-
|3.
|
|
| rcu_read_lock()
|-
|4.
|rcu_read_unlock()
|
|
|-
|5.
|
|exits synchronize_rcu()
|
|-
|6.
|
|
|rcu_read_unlock()
|}
[[File:Rcu api.jpg|thumb|upright=2|RCU API communications between the reader, updater, and reclaimer]]
:Since <code>synchronize_rcu</code> is the API that must figure out when readers are done, its implementation is key to RCU. For RCU to be useful in all but the most read-intensive situations, <code>synchronize_rcu</code>'s overhead must also be quite small.
:Alternatively, instead of blocking, synchronize_rcu may register a callback to be invoked after all ongoing RCU read-side critical sections have completed. This callback variant is called {{The Linux Kernel/id|call_rcu}} in the Linux kernel.
: {{The Linux Kernel/id|rcu_assign_pointer}} - The updater uses this function to assign a new value to an RCU-protected pointer, in order to safely communicate the change in value from the updater to the reader. This function returns the new value, and also executes any {{w|Memory barrier}} instructions required for a given CPU architecture. Perhaps more importantly, it serves to document which pointers are protected by RCU.
: {{The Linux Kernel/id|rcu_dereference}} - The reader uses this function to fetch an RCU-protected pointer, which returns a value that may then be safely dereferenced. It also executes any directives required by the compiler or the CPU, for example, a volatile cast for gcc, a memory_order_consume load for C/C++11 or the memory-barrier instruction required by the old DEC Alpha CPU. The value returned by <code>rcu_dereference</code> is valid only within the enclosing RCU read-side critical section. As with <code>rcu_assign_pointer</code>, an important function of <code>rcu_dereference</code> is to document which pointers are protected by RCU.
The RCU infrastructure observes the time sequence of <code>rcu_read_lock</code>, <code>rcu_read_unlock</code>, <code>synchronize_rcu</code>, and <code>call_rcu</code> invocations in order to determine when (1) <code>synchronize_rcu</code> invocations may return to their callers and (2) <code>call_rcu</code> callbacks may be invoked.
Efficient implementations of the RCU infrastructure make heavy use of batching in order to amortize their overhead over many uses of the corresponding APIs.
⚲ API
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=rcu_nocbs%5B rcu_nocbs] – no-callback CPUs
: {{The Linux Kernel/include|linux/rcupdate.h}}
: {{The Linux Kernel/include|linux/rculist.h}} – RCU-protected linked list operations
⚙️ Internals
: {{The Linux Kernel/source|kernel/rcu}} – read-copy-update implementation
📖 References
: {{The Linux Kernel/doc|Avoiding Locks: Read Copy Update|kernel-hacking/locking.html?#avoiding-locks-read-copy-update}}
: {{The Linux Kernel/doc|RCU concepts|RCU}}
: [https://0xax.gitbooks.io/linux-insides/content/Initialization/linux-initialization-9.html RCU initialization]
📚 Further reading
: [https://lpc.events/event/18/contributions/1906/attachments/1590/3302/LPC-2024-Vienna.pdf Reduce synchronize_rcu() latency]
==== Sleeping locks ====
===== Mutexes =====
⚲ API
: {{The Linux Kernel/include|linux/mutex.h}}
: {{The Linux Kernel/include|linux/completion.h}}
: {{The Linux Kernel/id|mutex}} has owner and usage constraints, easier to debug than semaphore
:: {{The Linux Kernel/id|rt_mutex}} blocking mutual exclusion locks with priority inheritance (PI) support
:: {{The Linux Kernel/id|ww_mutex}} Wound/Wait mutexes: blocking mutual exclusion locks with deadlock avoidance
: {{The Linux Kernel/id|rw_semaphore}} readers–writer semaphores
: {{The Linux Kernel/id|percpu_rw_semaphore}}
: {{The Linux Kernel/id|completion}} - use completion for synchronization task with ISR and task or two tasks.
:: {{The Linux Kernel/id|wait_for_completion}}
:: {{The Linux Kernel/id|complete}}
💾 ''Historical''
: {{The Linux Kernel/id|semaphore}} - use mutex instead semaphore if possible
: {{The Linux Kernel/include|linux/semaphore.h}}
: {{The Linux Kernel/include|linux/rwsem.h}}
📖 References
: {{The Linux Kernel/doc|Completions - “wait for completion” barrier APIs|scheduler/completion.html}}
: {{The Linux Kernel/doc|Mutex API reference|kernel-hacking/locking.html#mutex-api-reference}}
: [http://lwn.net/Articles/23993/ LWN: completion events]
==== per CPU local lock ====
On normal preemptible kernel local_lock calls {{The Linux Kernel/id|preempt_disable}}.
On RT preemptible kernel local_lock calls {{The Linux Kernel/id|migrate_disable}} and {{The Linux Kernel/id|spin_lock}}.
Any changes applied to spinlock_t also apply to local_lock.
⚲ API
: {{The Linux Kernel/include|linux/local_lock.h}}
:: {{The Linux Kernel/id|local_lock}}, {{The Linux Kernel/id|preempt_disable}}
:: {{The Linux Kernel/id|local_lock_irqsave}}, {{The Linux Kernel/id|local_irq_save}}
:: etc
📖 References
: {{The Linux Kernel/doc|local_lock|locking/locktypes.html#local-lock}}
: {{The Linux Kernel/doc|PREEMPT_RT caveats: spinlock_t, rwlock_t, migrate_disable and local_lock|locking/locktypes.html#spinlock-t-and-rwlock-t}}
: {{The Linux Kernel/doc|Proper locking under a preemptive kernel|locking/preempt-locking.html}}
: [https://lwn.net/Articles/828477/ Local locks in the kernel]
==== Spinning locks ====
===== {{w|Spinlock}}s =====
a ''spinlock'' is a lock which causes a thread trying to acquire it to simply wait in a loop ("spin") while repeatedly checking if the lock is available.
Since the thread remains active but is not performing a useful task, the use of such a lock is a kind of busy waiting.
Once acquired, spinlocks will usually be held until they are explicitly released, although in some implementations they may be automatically released if the thread being waited on (that which holds the lock) blocks, or "goes to sleep".
Spinlocks are commonly used inside kernels because they are efficient if threads are likely to be blocked for only short periods.
However, spinlocks become wasteful if held for longer durations, as they may prevent other threads from running and require rescheduling.
👁 For example {{The Linux Kernel/id|kobj_kset_join}} uses spinlock to protect assess to the linked list.
Enabling and disabling of kernel preemption replaced spinlocks on uniprocessor systems (disabled {{The Linux Kernel/id|CONFIG_SMP}}).
Most spinning locks becoming sleeping locks in the {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} kernels.
⚲ API
: {{The Linux Kernel/include|linux/spinlock.h}}
:: {{The Linux Kernel/id|spinlock_t}}
:: {{The Linux Kernel/id|raw_spinlock_t}}
: {{The Linux Kernel/include|linux/bit_spinlock.h}}
:: {{The Linux Kernel/id|bit_spin_lock}}
📖 References
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-1.html Introduction to spinlocks]
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-2.html Queued spinlocks]
===== {{w|Seqlock}}s =====
A ''seqlock'' (short for "sequential lock") is a special locking mechanism used in Linux for supporting fast writes of shared variables between two parallel operating system routines.
It is a special solution to the readers–writers problem when the number of writers is small.
It is a reader-writer consistent mechanism which avoids the problem of writer starvation.
A {{The Linux Kernel/id|seqlock_t}} consists of storage for saving a sequence counter {{The Linux Kernel/id|seqcount_t}}/seqcount_spinlock_t in addition to a lock.
The lock is to support synchronization between two writers and the counter is for indicating consistency in readers.
In addition to updating the shared data, the writer increments the sequence counter, both after acquiring the lock and before releasing the lock.
Readers read the sequence counter before and after reading the shared data.
If the sequence counter is odd on either occasion, a writer had taken the lock while the data was being read and it may have changed.
If the sequence counters are different, a writer has changed the data while it was being read.
In either case readers simply retry (using a loop) until they read the same even sequence counter before and after.
⚲ API
: {{The Linux Kernel/id|seqlock_t}}
:: {{The Linux Kernel/id|DEFINE_SEQLOCK}}, {{The Linux Kernel/id|seqlock_init}}, {{The Linux Kernel/id|read_seqlock_excl}}, {{The Linux Kernel/id|write_seqlock}}
: {{The Linux Kernel/id|seqcount_t}}
:: {{The Linux Kernel/id|seqcount_init}}, {{The Linux Kernel/id|read_seqcount_begin}}, {{The Linux Kernel/id|read_seqcount_retry}}, {{The Linux Kernel/id|write_seqcount_begin}}, {{The Linux Kernel/id|write_seqcount_end}}
: {{The Linux Kernel/include|linux/seqlock.h}}
👁 Example: {{The Linux Kernel/id|mount_lock}}, defined in {{The Linux Kernel/source|fs/namespace.c}}
📖 References
: {{The Linux Kernel/doc|Sequence counters and sequential locks|locking/seqlock.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-6.html SeqLock]
==== Spinning or sleeping locks ====
:{| class="wikitable"
! !! normal !! on preempt RT
|-
| spinlock_t, || raw_spinlock_t || rt_mutex_base, rt_spin_lock, sleeping
|-
| rwlock_t || spinning || sleeping
|-
| local_lock || preempt_disable|| migrate_disable, rt_spin_lock, sleeping
|}
==== Low level ====
The compiler might optimize away or reorder writes to variables leading to unexpected behavior
when variables are accessed concurrently by multiple threads.
⚲ API
: {{The Linux Kernel/include|asm-generic/rwonce.h}} – prevent the compiler from merging or refetching reads or writes.
: {{The Linux Kernel/include|linux/compiler.h}}
:: {{The Linux Kernel/id|barrier}} – prevents the compiler from reordering instructions around the barrier
: {{The Linux Kernel/include|asm-generic/barrier.h}} – generic barrier definitions
: {{The Linux Kernel/source|arch/x86/include/asm/barrier.h}} – force strict CPU ordering
:: {{The Linux Kernel/id|mb}} – ensures that all memory operations before the barrier are completed before any memory operations after the barrier are started
⚙️ Internals
: {{The Linux Kernel/doc|Atomics|driver-api/basics.html#atomics}}
:: {{The Linux Kernel/include|linux/atomic.h}} – atomic operations wrapper
:: {{The Linux Kernel/include|asm-generic/atomic.h}}
:: {{The Linux Kernel/include|linux/atomic/atomic-instrumented.h}}
::: {{The Linux Kernel/id|atomic_dec_and_test}} ...
📚 Further reading
: {{w|Volatile_(computer_programming)#In_C_and_C++|volatile}} – prevents the compiler from optimizations
: {{w|Memory barrier}} – enforces an ordering constraint on memory operations
==== ... ====
⚙️ Locking internals
: {{The Linux Kernel/include|linux/lockdep.h}} – runtime locking correctness validator
: {{The Linux Kernel/include|linux/debug_locks.h}}
: {{The Linux Kernel/source|lib/locking-selftest.c}} – locking correctness self-tests
: {{The Linux Kernel/source|kernel/locking}} – locking primitives
: {{The Linux Kernel/id|mutex_waiter}}, {{The Linux Kernel/id|timer_list}}, {{The Linux Kernel/id|wait_queue_head_t}}
:: {{The Linux Kernel/source|kernel/locking/locktorture.c}} – module-based torture test facility for locking
📖 Locking references
: {{The Linux Kernel/doc|locking|locking}}
:: {{The Linux Kernel/doc|Lock types and their rules|locking/locktypes.html}}
::: 😴 {{The Linux Kernel/doc|sleeping locks|locking/locktypes.html#sleeping-locks}}
:::: {{The Linux Kernel/id|mutex}}, {{The Linux Kernel/id|rt_mutex}}, {{The Linux Kernel/id|semaphore}}, {{The Linux Kernel/id|rw_semaphore}}, {{The Linux Kernel/id|ww_mutex}}, {{The Linux Kernel/id|percpu_rw_semaphore}}
:::: on preempt RT: local_lock, spinlock_t, rwlock_t
::: 😵💫 {{The Linux Kernel/doc|spinning locks|locking/locktypes.html#spinning-locks}}:
:::: raw_spinlock_t, bit spinlocks
:::: on non preempt RT: spinlock_t, rwlock_t
: {{The Linux Kernel/doc|Unreliable Guide To Locking|kernel-hacking/locking.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/ Synchronization primitives]
=== Time ===
⚲ UAPI
: {{The Linux Kernel/include|uapi/linux/time.h}}
:: {{The Linux Kernel/id|timespec}} – nanosecond resolution
:: {{The Linux Kernel/id|timeval}} – microsecond resolution
:: {{The Linux Kernel/id|timezone}}
:: ...
: {{The Linux Kernel/include|uapi/linux/time_types.h}}
:: {{The Linux Kernel/id|__kernel_timespec}} – nanosecond resolution, used in syscalls
:: ...
⚲ API
: {{The Linux Kernel/include|linux/delay.h}} – busy-wait delay functions for timing control
: {{The Linux Kernel/include|linux/sched/clock.h}}
:: {{The Linux Kernel/id|sched_clock}}
:: ...
: {{The Linux Kernel/include|linux/time.h}}
:: {{The Linux Kernel/id|tm}}
:: {{The Linux Kernel/id|get_timespec64}}
:: ...
: {{The Linux Kernel/include|linux/ktime.h}}
:: {{The Linux Kernel/id|ktime_t}} – nanosecond scalar representation for kernel time values
:: {{The Linux Kernel/id|ktime_sub}}
:: ...
: {{The Linux Kernel/include|linux/timekeeping.h}}
:: {{The Linux Kernel/id|ktime_get}}, {{The Linux Kernel/id|ktime_get_ns}}
:: {{The Linux Kernel/id|ktime_get_real}}
:: ...
: {{The Linux Kernel/include|linux/time64.h}}
:: {{The Linux Kernel/id|timespec64}}
:: {{The Linux Kernel/id|time64_t}}
:: {{The Linux Kernel/id|ns_to_timespec64}}
:: {{The Linux Kernel/id|timespec64_sub}}
:: {{The Linux Kernel/id|ktime_to_timespec64}}
:: ...
: {{The Linux Kernel/include|uapi/linux/rtc.h}}
: {{The Linux Kernel/include|linux/jiffies.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time}} – timekeeping, timers and clocks
📖 References
: {{The Linux Kernel/doc|ktime accessors|core-api/timekeeping.html}}
: {{The Linux Kernel/doc|Clock sources, Clock events, sched_clock() and delay timers|timers/timekeeping.html}}
: {{The Linux Kernel/doc|Time and timer routines|driver-api/basics.html#time-and-timer-routines}}
: {{w|Year 2038 problem}}
{{:The Linux Kernel/Multitasking/CPU}}
{{BookCat}}
4vlcfyiftfmvpblj5bgj4gnxzgn9sx7
4641541
4641522
2026-06-28T16:08:26Z
Conan
3188
Multitasking: POSIX message queues (mqueue)
4641541
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Multitasking functionality}}</noinclude>
{| style="width: 25%; float: right; text-align:center;border-spacing: 0; margin:auto;" cellpadding="5pc"
! bgcolor="#ffc" |multitasking
|-
| bgcolor="#eeb" |[[#Execution|execution]]
|-
| bgcolor="#dda" |[[#Threads_or_tasks|threads or tasks]]
|-
| bgcolor="#cc9" |[[#Synchronization|synchronization]]
|-
| bgcolor="#bb8" |[[#Scheduler|Scheduler]]
|-
| bgcolor="#aa8" |[[#Interrupts|interrupts core]]
|- style=""
| bgcolor="#997" |[[#CPU_specific|CPU specific]]
|}
Linux kernel is a preemptive {{w|Computer multitasking|multitasking}} operating system.
As a multitasking OS, it allows multiple processes to share processors (CPUs) and other system resources.
Each CPU executes a single task at a time.
However, multitasking allows each processor to switch between tasks that are being executed without having to wait for each task to finish.
For that, the kernel can, at any time, temporarily interrupt a task being carried out by the processor, and replace it by another task that can be new or a previously suspended one.
The operation involving the swapping of the running task is called ''{{w|context switch}}''.
== Execution ==
⚲ API ↪ ⚙️ implementations
{{The Linux Kernel/man|2|execve}} ↪ {{The Linux Kernel/id|do_execveat_common}} runs an executable file in the context of current process, replacing the previous executable.
This system call is used by family of functions of libc {{The Linux Kernel/man|3|exec}}.
The {{w|Executable and Linkable Format|ELF}} binary format is loaded by {{The Linux Kernel/source|fs/binfmt_elf.c}}.
{{The Linux Kernel/man|2|clone}}.
Clone creates a child process that may share parts of its execution context with the parent.
It is often used to implement threads (though programmers will typically use a higher-level interface such as {{The Linux Kernel/man|7|pthreads}}, implemented on top of clone).
{{The Linux Kernel/man|2|wait}} ↪ {{The Linux Kernel/id|kernel_waitid}} suspends the execution of the calling process until one of its child processes terminates.
Syscall {{The Linux Kernel/man|2|getpid}} ↪ {{The Linux Kernel/id|task_tgid_vnr}} returns PID of the current process which internally is called TGID - thread group id.
A process can contain many threads.
{{The Linux Kernel/man|2|gettid}} ↪ {{The Linux Kernel/id|task_pid_vnr}} returns thread id.
Which internally is historically called PID.
⚠️ Warning: confusion.
User space PID ≠ kernel space PID.
{{The Linux Kernel/man|1|ps}} -AF lists current processes and thread as {{w|Light-weight process|LWP}}.
For a single thread process all these IDs are equal.
High-resolution delays:
: {{The Linux Kernel/man|2|nanosleep}} ↪ {{The Linux Kernel/id|sys_nanosleep}}
:: {{The Linux Kernel/id|hrtimer_nanosleep}}
: {{The Linux Kernel/man|2|clock_nanosleep}} ↪ {{The Linux Kernel/id|sys_clock_nanosleep}}
Wait for a signal:
: {{The Linux Kernel/man|2|pause}} ↪ {{The Linux Kernel/id|sys_pause}}
: {{The Linux Kernel/man|2|sigsuspend}} ↪ {{The Linux Kernel/id|sys_sigsuspend}}
See [[The Linux Kernel/Processes|Processes]] for process creation and termination.
=== Inter-process communication ===
Inter-process communication (IPC) refers specifically to the mechanisms an operating system provides to allow processes it manages to share data.
Methods for achieving IPC are divided into categories which vary based on software requirements, such as performance and modularity requirements, and system circumstances.
Linux inherited from Unix the following IPC mechanisms:
Signals (⚲ API ↪ ⚙️ implementations):
: {{The Linux Kernel/man|2|kill}} sends signal to a process
: {{The Linux Kernel/man|2|tgkill}} ↪ {{The Linux Kernel/id|do_tkill}} sends a signal to a thread
: {{The Linux Kernel/man|2|process_vm_readv}} ↪ {{The Linux Kernel/id|process_vm_rw}} - zero-copy data transfer between process address spaces
: {{The Linux Kernel/man|2|sigaction}} ↪ {{The Linux Kernel/id|do_sigaction}} – examine and change a signal action
: {{The Linux Kernel/man|2|sigprocmask}} – examine and change blocked signals
: {{The Linux Kernel/man|2|sigpending}} ↪ {{The Linux Kernel/id|do_sigpending}} – examine pending signals
: {{The Linux Kernel/man|2|sigsuspend}} – wait for a signal
: {{The Linux Kernel/man|2|sigaltstack}} – set or get signal stack context
: {{The Linux Kernel/man|2|sigtimedwait}} ↪ {{The Linux Kernel/id|do_sigtimedwait}} – synchronously wait for queued signals
: {{The Linux Kernel/man|7|signal}} – overview of signals
: {{The Linux Kernel/include|linux/sched/signal.h}} – signal-related task accessors
: {{The Linux Kernel/source|kernel/signal.c}} – signal delivery and handling
: [[../Storage#Zero-copy|Anonymous pipes]] and named pipes (FIFOs) {{The Linux Kernel/man|2|mknod}} ↪ {{The Linux Kernel/id|do_mknodat}} {{The Linux Kernel/id|S_IFIFO}}
: {{w|Express Data Path}} {{The Linux Kernel/id|PF_XDP}}
: {{w|Unix domain socket}} {{The Linux Kernel/id|PF_UNIX}}
: Memory-mapped files {{The Linux Kernel/man|2|mmap}} ⤑ {{The Linux Kernel/id|ksys_mmap_pgoff}}
: {{The Linux Kernel/man|2|eventfd}} ↪ {{The Linux Kernel/id|do_eventfd}} – event notification via file descriptor
: {{The Linux Kernel/man|2|signalfd}} ↪ {{The Linux Kernel/id|do_signalfd4}} – receive signals via file descriptor
: {{The Linux Kernel/man|2|timerfd_create}} – timer notification via file descriptor
: Sys V IPC:
:: Message queues: {{The Linux Kernel/man|2|msgget}}, {{The Linux Kernel/man|2|msgsnd}}, {{The Linux Kernel/man|2|msgrcv}} ↪ {{The Linux Kernel/source|ipc/msg.c}}
:: Semaphores
:: Shared memory: {{The Linux Kernel/man|2|shmget}}, {{The Linux Kernel/man|2|shmctl}}, {{The Linux Kernel/man|2|shmat}}, {{The Linux Kernel/man|2|shmdt}} ↪ {{The Linux Kernel/source|ipc/shm.c}}
: POSIX message queues:
:: {{The Linux Kernel/man|7|mq_overview}}, {{The Linux Kernel/man|3|mq_open}}, {{The Linux Kernel/man|3|mq_send}}, {{The Linux Kernel/man|3|mq_receive}} ↪ {{The Linux Kernel/source|ipc/mqueue.c}}
📖 References
: {{w|Inter-process communication}}
: {{The Linux Kernel/man|7|sysvipc}}
== Threads or tasks ==
In Linux kernel "thread" and "task" are almost synonyms.
⚲ API
: {{The Linux Kernel/include|linux/sched.h}} - the main scheduler API
:: {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/source|arch/x86/include/asm/current.h}} – x86 current task pointer
::{{Linux ident|current}} and {{The Linux Kernel/id|get_current}} () return current {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/include|uapi/linux/taskstats.h}} per-task statistics
: {{The Linux Kernel/include|linux/thread_info.h}}
:: {{The Linux Kernel/id|current_thread_info}}() returns {{The Linux Kernel/id|thread_info}}
:{{The Linux Kernel/include|linux/sched/task.h}} - interface between the scheduler and various task lifetime (fork()/exit()) functionality
: {{The Linux Kernel/include|linux/kthread.h}} - simple interface for creating and stopping kernel threads without mess.
::{{The Linux Kernel/id|kthread_run}} creates and wakes a thread
::{{The Linux Kernel/id|kthread_create}}
⚙️ Internals
: {{The Linux Kernel/id|kthread_run}} ↯ hierarchy:
: {{The Linux Kernel/source|kernel/kthread.c}} – kernel thread creation and management
:: {{The Linux Kernel/id|kthreadd}} – parent kernel thread and the creator of all other kernel threads.
Dequeues {{The Linux Kernel/id|kthread_create_info}} from {{The Linux Kernel/id|kthread_create_list}}.
::: {{The Linux Kernel/id|create_kthread}}
:::: {{The Linux Kernel/id|kernel_thread}}
:::: {{The Linux Kernel/id|kthread}} – invokes {{The Linux Kernel/id|threadfn}}
:: {{The Linux Kernel/id|__kthread_create_on_node}} – enqueues {{The Linux Kernel/id|kthread_create_info}} into {{The Linux Kernel/id|kthread_create_list}}
: {{The Linux Kernel/source|kernel/fork.c}} – process creation and cloning
:: {{The Linux Kernel/id|kernel_thread}}
::: {{The Linux Kernel/id|kernel_clone}}
==Scheduler==
The ''{{w|Scheduling_(computing)#Linux|scheduler}}'' is the part of the operating system that decides which process runs at a certain point in time.
It usually has the ability to pause a running process, move it to the back of the running queue and start a new process.
Active processes are placed in an array called a ''{{w|run queue}}'', or ''runqueue'' - {{The Linux Kernel/id|rq}}.
The run queue may contain priority values for each process, which will be used by the scheduler to determine which process to run next.
To ensure each program has a fair share of resources, each one is run for some time period (quantum) before it is paused and placed back into the run queue.
When a program is stopped to let another run, the program with the highest priority in the run queue is then allowed to execute.
Processes are also removed from the run queue when they ask to ''sleep'', are waiting on a resource to become available, or have been terminated.
Since version 6.6 the Linux kernel uses the {{w|Earliest eligible virtual deadline first scheduling}} (EEVDF) algorithm, which replaced the {{w|Completely Fair Scheduler}} (CFS).
While much of the CFS infrastructure remains: {{The Linux Kernel/id|sched_entity}}, {{The Linux Kernel/id|cfs_rq}}, the red-black tree, load balancing, and {{The Linux Kernel/source|kernel/sched/fair.c}} — the task selection logic is fundamentally different.
EEVDF is based on a classic scheduling algorithm originally designed for packet networks.
The scheduler has a scheduling complexity of O(log N), where N is the number of tasks in the runqueue.
Both picking and reinserting a task require O(log N) operations, because the run queue is implemented as a {{w|red–black tree}}.
The runqueue ({{The Linux Kernel/id|cfs_rq}}) is implemented as a red-black tree representing a "timeline" of future task execution.
The scheduler uses nanosecond granularity accounting and requires no heuristics or interactivity estimators.
EEVDF improves sleeper fairness over CFS by tracking ''lag'' ({{The Linux Kernel/id|vlag}}) — the difference between the service a task was entitled to and the service it actually received.
When a sleeping task wakes up, its lag determines eligibility, ensuring interactive tasks get prompt service without starving long-running tasks.
The data structure used for the scheduling algorithm is a red-black tree in which the nodes are {{The Linux Kernel/id|sched_entity}} structures, embedded in {{The Linux Kernel/id|task_struct}}.
With EEVDF, each task has a time slice ({{The Linux Kernel/id|sysctl_sched_base_slice}}, default 0.7ms) that determines its request length.
EEVDF computes a virtual deadline for each task: vd_i = ve_i + r_i/w_i, where ve_i is the eligible time, r_i is the request size, and w_i is the weight (determined by nice value).
The scheduler picks the eligible task with the earliest virtual deadline via {{The Linux Kernel/id|__pick_eevdf}}.
The Linux kernel contains different scheduler classes (or policies).
The EEVDF scheduler handles {{The Linux Kernel/id|SCHED_NORMAL}} (aka SCHED_OTHER).
The kernel also contains two additional classes {{The Linux Kernel/id|SCHED_BATCH}} and {{The Linux Kernel/id|SCHED_IDLE}}, and another two real-time scheduling classes named {{The Linux Kernel/id|SCHED_FIFO}} (realtime first-in-first-out) and {{The Linux Kernel/id|SCHED_RR}} (realtime round-robin), with a third realtime scheduling policy known as {{The Linux Kernel/id|SCHED_DEADLINE}} that implements the {{w|Earliest deadline first scheduling|earliest deadline first algorithm (EDF)}} added later.
Any realtime scheduler class takes precedence over any of the "normal" —i.e.
non realtime— classes.
The scheduler class is selected and configured through the {{The Linux Kernel/man|2|sched_setscheduler}} ↪ {{The Linux Kernel/id|do_sched_setscheduler}} system call.
Properly balancing latency, throughput, and fairness in schedulers is an open problem.<ref name="malte" >
Malte Skarupke.
[https://probablydance.com/2019/12/30/measuring-mutexes-spinlocks-and-how-bad-the-linux-scheduler-really-is/ "Measuring Mutexes, Spinlocks and how Bad the Linux Scheduler Really is"].
</ref>
⚲ API
: {{The Linux Kernel/man|1|renice}} – priority of running processes
: {{The Linux Kernel/man|1|nice}} – run a program with modified scheduling priority
: {{The Linux Kernel/man|1|chrt}} – manipulate the real-time attributes of a process
:: {{The Linux Kernel/man|2|sched_getattr}} ↪ {{The Linux Kernel/id|sys_sched_getattr}} – get scheduling policy and attributes
: {{The Linux Kernel/include|linux/sched.h}} – the main scheduler API
:: {{The Linux Kernel/id|schedule}}
: {{The Linux Kernel/man|2|getpriority}}, {{The Linux Kernel/man|2|setpriority}}
: {{The Linux Kernel/man|2|sched_setscheduler}}, {{The Linux Kernel/man|2|sched_getscheduler}}
: /sys/kernel/debug/sched/ – scheduler debugfs tuning directory
:: features – toggle scheduler feature flags
:: base_slice_ns – EEVDF base time slice (default 700000)
:: migration_cost_ns – cost threshold for task migration between CPUs
:: nr_migrate – max tasks to migrate per balancing pass
:: debug – dump detailed scheduler state
:: numa_balancing/ – NUMA balancing scan parameters
⚙️ Internals
:{{The Linux Kernel/id|sched_init}} is called from {{The Linux Kernel/id|start_kernel}}
: {{The Linux Kernel/id|__schedule}} is the main scheduler function.
: {{The Linux Kernel/id|runqueues}}, {{The Linux Kernel/id|this_rq}}
: {{The Linux Kernel/source|kernel/sched}} – scheduler subsystem
: {{The Linux Kernel/source|kernel/sched/core.c}} – core scheduling logic
: {{The Linux Kernel/source|kernel/sched/fair.c}} implements {{The Linux Kernel/id|SCHED_NORMAL}}, {{The Linux Kernel/id|SCHED_BATCH}}, {{The Linux Kernel/id|SCHED_IDLE}}
:: {{The Linux Kernel/id|__pick_eevdf}} – core of EEVDF
: {{The Linux Kernel/id|sched_setscheduler}}, {{The Linux Kernel/id|sched_getscheduler}}
: {{The Linux Kernel/id|task_struct}}::{{The Linux Kernel/id|rt_priority}} and other members with less unique identifiers
🛠️ Utilities
: {{The Linux Kernel/man|1|pidstat}}
: {{The Linux Kernel/man|1|pcp-pidstat}}
: {{The Linux Kernel/man|1|perf-sched}}
: [https://opensource.googleblog.com/2019/10/understanding-scheduling-behavior-with.html Understanding Scheduling Behavior with SchedViz]
📖 References
: {{The Linux Kernel/man|7|sched}}
: {{The Linux Kernel/doc|Scheduling|scheduler}}
:: {{The Linux Kernel/doc|EEVDF Scheduler|scheduler/sched-eevdf.html}}
::: [https://lwn.net/Kernel/Index/#Scheduler-EEVDF An EEVDF CPU scheduler for Linux LWN]
: {{The Linux Kernel/doc|Delaying and scheduling routines|driver-api/basics.html#delaying-and-scheduling-routines}}
: CFS
:: {{The Linux Kernel/doc|Completely Fair Scheduler|scheduler/sched-design-CFS.html}}
:: {{The Linux Kernel/doc|CFS Bandwidth Control|scheduler/sched-bwc.html}}
:: [[The Linux Kernel/System/CGroup v2#CPU|CPU cgroup controller]]
:: {{The Linux Kernel/doc|CPU cgroup interface files|admin-guide/cgroup-v2.html#cpu-interface-files}}
:: [https://lwn.net/Kernel/Index/#Scheduler-Completely_fair_scheduler Completely fair scheduler LWN]
:: [https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-tuning-taskscheduler.html Tuning the task scheduler]
:: [https://home.robusta.dev/blog/stop-using-cpu-limits stop using CPU limits on Kubernetes]
: {{The Linux Kernel/doc|Deadline Task Scheduler|scheduler/sched-deadline.html}}
: {{The Linux Kernel/ltp|kernel|sched}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setparam}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_getscheduler}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setscheduler}}
📚 Further reading about the scheduler
: [https://github.com/iovisor/bpftrace/blob/master/docs/tutorial_one_liners.md#lesson-10-scheduler-tracing Scheduler tracing]
: [https://github.com/iovisor/bcc/blob/master/README.md#cpu-and-scheduler-tools bcc/ebpf CPU and scheduler tools]
=== Preemption ===
Preemption refers to the ability of the system to interrupt a running task to switch to another task.
This is essential for ensuring that high-priority tasks receive the necessary CPU time and for improving the system's responsiveness.
In Linux, preemption models define how and when the kernel can preempt tasks.
Different models offer varying trade-offs between system responsiveness and throughput.
📖 References
: {{The Linux Kernel/doc|Proper Locking Under a Preemptible Kernel|locking/preempt-locking.html}}
:: {{The Linux Kernel/id|preempt_enable}} – decrement the preempt counter
:: {{The Linux Kernel/id|preempt_disable}} – increment the preempt counter
:: {{The Linux Kernel/id|preempt_enable_no_resched}} – decrement, but do not immediately preempt
:: {{The Linux Kernel/id|preempt_check_resched}} – if needed, reschedule
:: {{The Linux Kernel/id|preempt_count}} – return the preempt counter
: {{The Linux Kernel/source|kernel/Kconfig.preempt}} – preemption model configuration
:: {{The Linux Kernel/id|CONFIG_PREEMPT_NONE}} – no forced preemption for servers
:: {{The Linux Kernel/id|CONFIG_PREEMPT_VOLUNTARY}} – voluntary preemption for desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT}} – preemptible except for critical sections for low-latency desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} – real-time preemption for [[Embedded_Systems/Linux#Real-time|highly responsive applications]]
:: {{The Linux Kernel/id|CONFIG_PREEMPT_DYNAMIC}} – allows runtime switching of preemption model
::: /sys/kernel/debug/sched/preempt – shows and controls the active preemption model
=== sched_ext ===
Since version 6.12 the kernel supports {{The Linux Kernel/id|SCHED_EXT}} — an extensible scheduler class whose behavior is defined by a set of {{w|eBPF}} programs.
Any scheduling algorithm can be implemented on top of sched_ext, loaded and unloaded dynamically at runtime.
The system integrity is maintained no matter what the BPF scheduler does: the default scheduling behavior is restored on error or when a runnable task stalls.
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_SCHED_CLASS_EXT}}
: {{The Linux Kernel/source|kernel/sched/ext.c}} – extensible BPF scheduler class
: {{The Linux Kernel/id|sched_ext_ops}} – BPF scheduler operations
: {{The Linux Kernel/id|sched_ext_entity}} – per-task sched_ext data, embedded in {{The Linux Kernel/id|task_struct}}
👁 Examples
: {{The Linux Kernel/source|tools/sched_ext}} – in-tree example BPF schedulers
📖 References
: {{The Linux Kernel/doc|Extensible Scheduler Class|scheduler/sched-ext.html}}
: [https://github.com/sched-ext/scx sched-ext/scx] – production BPF schedulers
: [https://lwn.net/Kernel/Index/#Scheduler-BPF Scheduler BPF LWN]
=== Energy Aware Scheduling ===
🚀 advanced topic
Since version 5.0, Energy Aware Scheduling (EAS) gives the scheduler the ability to predict the impact of its decisions on the energy consumed by CPUs.
EAS relies on an Energy Model (EM) to select an energy efficient CPU for each task, with minimal impact on throughput.
EAS operates only on heterogeneous CPU topologies (such as ARM {{w|big.LITTLE}}) where the potential for energy savings is highest.
⚲ API
: /proc/sys/kernel/sched_energy_aware – enable or disable EAS
: {{The Linux Kernel/include|linux/energy_model.h}}
:: {{The Linux Kernel/id|em_perf_domain}} – performance domain descriptor
:: {{The Linux Kernel/id|em_cpu_get}} – get the EM for a given CPU
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_ENERGY_MODEL}}
: {{The Linux Kernel/id|find_energy_efficient_cpu}} – find most energy-efficient target CPU for a waking task
: {{The Linux Kernel/source|kernel/power/energy_model.c}} – CPU energy model framework
📖 References
: {{The Linux Kernel/doc|Energy Aware Scheduling|scheduler/sched-energy.html}}
: {{The Linux Kernel/doc|Energy Model of devices|power/energy-model.html}}
=== Wait queues ===
A ''wait queue'' in the kernel is a data structure that allows one or more processes to wait (sleep) until something of interest happens.
They are used throughout the kernel to wait for available memory, I/O completion, message arrival, and many other things.
In the early days of Linux, a wait queue was a simple list of waiting processes, but various scalability problems (including the {{w|thundering herd problem}}) have led to the addition of a fair amount of complexity since then.
⚲ API
{{The Linux Kernel/include|linux/wait.h}}
{{The Linux Kernel/id|wait_queue_head}} consists of double linked list of {{The Linux Kernel/id|wait_queue_entry}} and a spinlock.
Waiting for simple events:
: Use one of two methods for {{The Linux Kernel/id|wait_queue_head}} initialization:
:: {{The Linux Kernel/id|init_waitqueue_head}} initializes {{The Linux Kernel/id|wait_queue_head}} in function context
:: {{The Linux Kernel/id|DECLARE_WAIT_QUEUE_HEAD}} - actually defines {{The Linux Kernel/id|wait_queue_head}} in global context
: Wait alternatives:
:: {{The Linux Kernel/id|wait_event_interruptible}} - preferable wait
:: {{The Linux Kernel/id|wait_event_interruptible_timeout}}
:: {{The Linux Kernel/id|wait_event}} - uninterruptible wait. Can cause deadlock ⚠
: {{The Linux Kernel/id|wake_up}} etc
👁 For example usage see references to unique {{The Linux Kernel/id|suspend_queue}}.
Explicit use of add_wait_queue instead of simple wait_event for complex cases:
: {{The Linux Kernel/id|DECLARE_WAITQUEUE}} actually defines wait_queue_entry with {{The Linux Kernel/id|default_wake_function}}
: {{The Linux Kernel/id|add_wait_queue}} inserts process in the first position of a wait queue
: {{The Linux Kernel/id|remove_wait_queue}}
⚙️ Internals
: {{The Linux Kernel/id|___wait_event}}
: {{The Linux Kernel/id|__add_wait_queue}}
: {{The Linux Kernel/id|__wake_up_common}}, {{The Linux Kernel/id|try_to_wake_up}}
: {{The Linux Kernel/source|kernel/sched/wait.c}} – wait queue implementation
Simple wait queues – simplified version with raw spinlock, suitable for RT and restricted contexts:
: {{The Linux Kernel/include|linux/swait.h}}
:: {{The Linux Kernel/id|swait_queue_head}}, {{The Linux Kernel/id|swait_queue}}
: {{The Linux Kernel/source|kernel/sched/swait.c}} – simple wait queue implementation
📖 References
: {{The Linux Kernel/doc|Wait queues and Wake events|driver-api/basics.html#wait-queues-and-wake-events}}
=== Real-time ===
{{:The Linux Kernel/Multitasking/Real-time}}
== Synchronization ==
Thread {{w|Synchronization (computer science)|synchronization}} is defined as a mechanism which ensures that two or more concurrent processes or threads do not simultaneously execute some particular program segment known as {{w|mutual exclusion}} (mutex).
When one thread starts executing the critical section (serialized segment of the program) the other thread should wait until the first thread finishes.
If proper synchronization techniques are not applied, it may cause a race condition where, the values of variables may be unpredictable and vary depending on the timings of context switches of the processes or threads.
=== User space synchronization ===
==== POSIX Timers ====
⚲ APIs
: {{The Linux Kernel/man|2|timer_create}} – creates a POSIX timer
: {{The Linux Kernel/man|2|timer_settime}} – starts or modifies a timer
: {{The Linux Kernel/man|2|timer_gettime}} – retrieves the remaining time of a timer
: {{The Linux Kernel/man|2|timer_delete}} – deletes a POSIX timer
: {{The Linux Kernel/man|2|clock_nanosleep}} – suspends execution for a specified time
⚙️ Internals
: {{The Linux Kernel/include|linux/posix-timers.h}}
: {{The Linux Kernel/source|kernel/time/itimer.c}} – interval timer (setitimer/getitimer)
: {{The Linux Kernel/source|kernel/time/posix-timers.c}} – POSIX clock and timer operations
: {{The Linux Kernel/source|kernel/time/posix-cpu-timers.c}} – per-process/thread CPU timers
:: {{The Linux Kernel/id|posix_cpu_timer_set}} – function setting up CPU timers
==== Futex ====
A {{The Linux Kernel/man|2|futex}} ↪ {{The Linux Kernel/id|do_futex}} (short for "Fast User space muTex") is a kernel system call that programmers can use to implement basic locking, or as a building block for higher-level locking abstractions such as semaphores and POSIX mutexes or condition variables.
A futex consists of a kernel space ''wait queue'' that is attached to an aligned integer in user space.
Multiple processes or threads operate on the integer entirely in user space (using atomic operations to avoid interfering with one another), and only resort to relatively expensive system calls to request operations on the wait queue (for example to wake up waiting processes, or to put the current process on the wait queue).
A properly programmed futex-based lock will not use system calls except when the lock is contended; since most operations do not require arbitration between processes, this will not happen in most cases.
The basic operations of futexes are based on only two central operations {{The Linux Kernel/id|futex_wait}} and {{The Linux Kernel/id|futex_wake}} though implementation has more operations for more specialized cases.
: WAIT (''addr'', ''val'') checks if the value stored at the address ''addr'' is ''val'', and if it is puts the current thread to sleep.
: WAKE (''addr'', ''val'') wakes up ''val'' number of threads waiting on the address ''addr''.
⚲ API
: {{The Linux Kernel/include|uapi/linux/futex.h}}
: {{The Linux Kernel/include|linux/futex.h}}
⚙️ Internals: {{The Linux Kernel/source|kernel/futex}}
📖 References
: {{w|Futex}}
: {{The Linux Kernel/man|7|futex}}
: {{The Linux Kernel/doc|Futex API reference|kernel-hacking/locking.html#futex-api-reference}}
: {{The Linux Kernel/ltp|kernel/syscalls|futex}}
==== File locking ====
⚲ API: {{The Linux Kernel/man|2|flock}}
==== Semaphore ====
💾 ''History: Semaphore is part of System V IPC {{The Linux Kernel/man|7|sysvipc}}''
⚲ API
: {{The Linux Kernel/man|2|semget}}
: {{The Linux Kernel/man|2|semctl}}
: {{The Linux Kernel/man|2|semop}}
⚙️ Internals: {{The Linux Kernel/source|ipc/sem.c}}
=== Kernel space synchronization ===
For kernel mode synchronization Linux provides three categories of locking primitives: sleeping, per CPU local locks and spinning locks.
==== Read-Copy-Update ====
Common mechanism to solve the readers–writers problem is the {{w|read-copy-update}} (''RCU'') algorithm.
Read-copy-update implements a kind of mutual exclusion that is wait-free (non-blocking) for readers, allowing extremely low overhead.
However, RCU updates can be expensive, as they must leave the old versions of the data structure in place to accommodate pre-existing readers.
⚲ The core API in {{The Linux Kernel/include|linux/rcupdate.h}} is quite small:
: {{The Linux Kernel/id|rcu_read_lock}} marks an RCU-protected data structure so that it won't be reclaimed for the full duration of that critical section.
: {{The Linux Kernel/id|rcu_read_unlock}} is used by a reader to inform the reclaimer that the reader is exiting an RCU read-side critical section. Note that RCU read-side critical sections may be nested and/or overlapping.
: {{The Linux Kernel/id|synchronize_rcu}} blocks until all pre-existing RCU read-side critical sections on all CPUs have completed. Note that <code>synchronize_rcu</code> will ''not'' necessarily wait for any subsequent RCU read-side critical sections to complete.
For example, consider the following sequence of events:
{| class="wikitable"
!
!CPU 0
!CPU 1
!CPU 2
|-
|1.
|rcu_read_lock()
|
|
|-
|2.
|
|enters synchronize_rcu()
|
|-
|3.
|
|
| rcu_read_lock()
|-
|4.
|rcu_read_unlock()
|
|
|-
|5.
|
|exits synchronize_rcu()
|
|-
|6.
|
|
|rcu_read_unlock()
|}
[[File:Rcu api.jpg|thumb|upright=2|RCU API communications between the reader, updater, and reclaimer]]
:Since <code>synchronize_rcu</code> is the API that must figure out when readers are done, its implementation is key to RCU. For RCU to be useful in all but the most read-intensive situations, <code>synchronize_rcu</code>'s overhead must also be quite small.
:Alternatively, instead of blocking, synchronize_rcu may register a callback to be invoked after all ongoing RCU read-side critical sections have completed. This callback variant is called {{The Linux Kernel/id|call_rcu}} in the Linux kernel.
: {{The Linux Kernel/id|rcu_assign_pointer}} - The updater uses this function to assign a new value to an RCU-protected pointer, in order to safely communicate the change in value from the updater to the reader. This function returns the new value, and also executes any {{w|Memory barrier}} instructions required for a given CPU architecture. Perhaps more importantly, it serves to document which pointers are protected by RCU.
: {{The Linux Kernel/id|rcu_dereference}} - The reader uses this function to fetch an RCU-protected pointer, which returns a value that may then be safely dereferenced. It also executes any directives required by the compiler or the CPU, for example, a volatile cast for gcc, a memory_order_consume load for C/C++11 or the memory-barrier instruction required by the old DEC Alpha CPU. The value returned by <code>rcu_dereference</code> is valid only within the enclosing RCU read-side critical section. As with <code>rcu_assign_pointer</code>, an important function of <code>rcu_dereference</code> is to document which pointers are protected by RCU.
The RCU infrastructure observes the time sequence of <code>rcu_read_lock</code>, <code>rcu_read_unlock</code>, <code>synchronize_rcu</code>, and <code>call_rcu</code> invocations in order to determine when (1) <code>synchronize_rcu</code> invocations may return to their callers and (2) <code>call_rcu</code> callbacks may be invoked.
Efficient implementations of the RCU infrastructure make heavy use of batching in order to amortize their overhead over many uses of the corresponding APIs.
⚲ API
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=rcu_nocbs%5B rcu_nocbs] – no-callback CPUs
: {{The Linux Kernel/include|linux/rcupdate.h}}
: {{The Linux Kernel/include|linux/rculist.h}} – RCU-protected linked list operations
⚙️ Internals
: {{The Linux Kernel/source|kernel/rcu}} – read-copy-update implementation
📖 References
: {{The Linux Kernel/doc|Avoiding Locks: Read Copy Update|kernel-hacking/locking.html?#avoiding-locks-read-copy-update}}
: {{The Linux Kernel/doc|RCU concepts|RCU}}
: [https://0xax.gitbooks.io/linux-insides/content/Initialization/linux-initialization-9.html RCU initialization]
📚 Further reading
: [https://lpc.events/event/18/contributions/1906/attachments/1590/3302/LPC-2024-Vienna.pdf Reduce synchronize_rcu() latency]
==== Sleeping locks ====
===== Mutexes =====
⚲ API
: {{The Linux Kernel/include|linux/mutex.h}}
: {{The Linux Kernel/include|linux/completion.h}}
: {{The Linux Kernel/id|mutex}} has owner and usage constraints, easier to debug than semaphore
:: {{The Linux Kernel/id|rt_mutex}} blocking mutual exclusion locks with priority inheritance (PI) support
:: {{The Linux Kernel/id|ww_mutex}} Wound/Wait mutexes: blocking mutual exclusion locks with deadlock avoidance
: {{The Linux Kernel/id|rw_semaphore}} readers–writer semaphores
: {{The Linux Kernel/id|percpu_rw_semaphore}}
: {{The Linux Kernel/id|completion}} - use completion for synchronization task with ISR and task or two tasks.
:: {{The Linux Kernel/id|wait_for_completion}}
:: {{The Linux Kernel/id|complete}}
💾 ''Historical''
: {{The Linux Kernel/id|semaphore}} - use mutex instead semaphore if possible
: {{The Linux Kernel/include|linux/semaphore.h}}
: {{The Linux Kernel/include|linux/rwsem.h}}
📖 References
: {{The Linux Kernel/doc|Completions - “wait for completion” barrier APIs|scheduler/completion.html}}
: {{The Linux Kernel/doc|Mutex API reference|kernel-hacking/locking.html#mutex-api-reference}}
: [http://lwn.net/Articles/23993/ LWN: completion events]
==== per CPU local lock ====
On normal preemptible kernel local_lock calls {{The Linux Kernel/id|preempt_disable}}.
On RT preemptible kernel local_lock calls {{The Linux Kernel/id|migrate_disable}} and {{The Linux Kernel/id|spin_lock}}.
Any changes applied to spinlock_t also apply to local_lock.
⚲ API
: {{The Linux Kernel/include|linux/local_lock.h}}
:: {{The Linux Kernel/id|local_lock}}, {{The Linux Kernel/id|preempt_disable}}
:: {{The Linux Kernel/id|local_lock_irqsave}}, {{The Linux Kernel/id|local_irq_save}}
:: etc
📖 References
: {{The Linux Kernel/doc|local_lock|locking/locktypes.html#local-lock}}
: {{The Linux Kernel/doc|PREEMPT_RT caveats: spinlock_t, rwlock_t, migrate_disable and local_lock|locking/locktypes.html#spinlock-t-and-rwlock-t}}
: {{The Linux Kernel/doc|Proper locking under a preemptive kernel|locking/preempt-locking.html}}
: [https://lwn.net/Articles/828477/ Local locks in the kernel]
==== Spinning locks ====
===== {{w|Spinlock}}s =====
a ''spinlock'' is a lock which causes a thread trying to acquire it to simply wait in a loop ("spin") while repeatedly checking if the lock is available.
Since the thread remains active but is not performing a useful task, the use of such a lock is a kind of busy waiting.
Once acquired, spinlocks will usually be held until they are explicitly released, although in some implementations they may be automatically released if the thread being waited on (that which holds the lock) blocks, or "goes to sleep".
Spinlocks are commonly used inside kernels because they are efficient if threads are likely to be blocked for only short periods.
However, spinlocks become wasteful if held for longer durations, as they may prevent other threads from running and require rescheduling.
👁 For example {{The Linux Kernel/id|kobj_kset_join}} uses spinlock to protect assess to the linked list.
Enabling and disabling of kernel preemption replaced spinlocks on uniprocessor systems (disabled {{The Linux Kernel/id|CONFIG_SMP}}).
Most spinning locks becoming sleeping locks in the {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} kernels.
⚲ API
: {{The Linux Kernel/include|linux/spinlock.h}}
:: {{The Linux Kernel/id|spinlock_t}}
:: {{The Linux Kernel/id|raw_spinlock_t}}
: {{The Linux Kernel/include|linux/bit_spinlock.h}}
:: {{The Linux Kernel/id|bit_spin_lock}}
📖 References
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-1.html Introduction to spinlocks]
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-2.html Queued spinlocks]
===== {{w|Seqlock}}s =====
A ''seqlock'' (short for "sequential lock") is a special locking mechanism used in Linux for supporting fast writes of shared variables between two parallel operating system routines.
It is a special solution to the readers–writers problem when the number of writers is small.
It is a reader-writer consistent mechanism which avoids the problem of writer starvation.
A {{The Linux Kernel/id|seqlock_t}} consists of storage for saving a sequence counter {{The Linux Kernel/id|seqcount_t}}/seqcount_spinlock_t in addition to a lock.
The lock is to support synchronization between two writers and the counter is for indicating consistency in readers.
In addition to updating the shared data, the writer increments the sequence counter, both after acquiring the lock and before releasing the lock.
Readers read the sequence counter before and after reading the shared data.
If the sequence counter is odd on either occasion, a writer had taken the lock while the data was being read and it may have changed.
If the sequence counters are different, a writer has changed the data while it was being read.
In either case readers simply retry (using a loop) until they read the same even sequence counter before and after.
⚲ API
: {{The Linux Kernel/id|seqlock_t}}
:: {{The Linux Kernel/id|DEFINE_SEQLOCK}}, {{The Linux Kernel/id|seqlock_init}}, {{The Linux Kernel/id|read_seqlock_excl}}, {{The Linux Kernel/id|write_seqlock}}
: {{The Linux Kernel/id|seqcount_t}}
:: {{The Linux Kernel/id|seqcount_init}}, {{The Linux Kernel/id|read_seqcount_begin}}, {{The Linux Kernel/id|read_seqcount_retry}}, {{The Linux Kernel/id|write_seqcount_begin}}, {{The Linux Kernel/id|write_seqcount_end}}
: {{The Linux Kernel/include|linux/seqlock.h}}
👁 Example: {{The Linux Kernel/id|mount_lock}}, defined in {{The Linux Kernel/source|fs/namespace.c}}
📖 References
: {{The Linux Kernel/doc|Sequence counters and sequential locks|locking/seqlock.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-6.html SeqLock]
==== Spinning or sleeping locks ====
:{| class="wikitable"
! !! normal !! on preempt RT
|-
| spinlock_t, || raw_spinlock_t || rt_mutex_base, rt_spin_lock, sleeping
|-
| rwlock_t || spinning || sleeping
|-
| local_lock || preempt_disable|| migrate_disable, rt_spin_lock, sleeping
|}
==== Low level ====
The compiler might optimize away or reorder writes to variables leading to unexpected behavior
when variables are accessed concurrently by multiple threads.
⚲ API
: {{The Linux Kernel/include|asm-generic/rwonce.h}} – prevent the compiler from merging or refetching reads or writes.
: {{The Linux Kernel/include|linux/compiler.h}}
:: {{The Linux Kernel/id|barrier}} – prevents the compiler from reordering instructions around the barrier
: {{The Linux Kernel/include|asm-generic/barrier.h}} – generic barrier definitions
: {{The Linux Kernel/source|arch/x86/include/asm/barrier.h}} – force strict CPU ordering
:: {{The Linux Kernel/id|mb}} – ensures that all memory operations before the barrier are completed before any memory operations after the barrier are started
⚙️ Internals
: {{The Linux Kernel/doc|Atomics|driver-api/basics.html#atomics}}
:: {{The Linux Kernel/include|linux/atomic.h}} – atomic operations wrapper
:: {{The Linux Kernel/include|asm-generic/atomic.h}}
:: {{The Linux Kernel/include|linux/atomic/atomic-instrumented.h}}
::: {{The Linux Kernel/id|atomic_dec_and_test}} ...
📚 Further reading
: {{w|Volatile_(computer_programming)#In_C_and_C++|volatile}} – prevents the compiler from optimizations
: {{w|Memory barrier}} – enforces an ordering constraint on memory operations
==== ... ====
⚙️ Locking internals
: {{The Linux Kernel/include|linux/lockdep.h}} – runtime locking correctness validator
: {{The Linux Kernel/include|linux/debug_locks.h}}
: {{The Linux Kernel/source|lib/locking-selftest.c}} – locking correctness self-tests
: {{The Linux Kernel/source|kernel/locking}} – locking primitives
: {{The Linux Kernel/id|mutex_waiter}}, {{The Linux Kernel/id|timer_list}}, {{The Linux Kernel/id|wait_queue_head_t}}
:: {{The Linux Kernel/source|kernel/locking/locktorture.c}} – module-based torture test facility for locking
📖 Locking references
: {{The Linux Kernel/doc|locking|locking}}
:: {{The Linux Kernel/doc|Lock types and their rules|locking/locktypes.html}}
::: 😴 {{The Linux Kernel/doc|sleeping locks|locking/locktypes.html#sleeping-locks}}
:::: {{The Linux Kernel/id|mutex}}, {{The Linux Kernel/id|rt_mutex}}, {{The Linux Kernel/id|semaphore}}, {{The Linux Kernel/id|rw_semaphore}}, {{The Linux Kernel/id|ww_mutex}}, {{The Linux Kernel/id|percpu_rw_semaphore}}
:::: on preempt RT: local_lock, spinlock_t, rwlock_t
::: 😵💫 {{The Linux Kernel/doc|spinning locks|locking/locktypes.html#spinning-locks}}:
:::: raw_spinlock_t, bit spinlocks
:::: on non preempt RT: spinlock_t, rwlock_t
: {{The Linux Kernel/doc|Unreliable Guide To Locking|kernel-hacking/locking.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/ Synchronization primitives]
=== Time ===
⚲ UAPI
: {{The Linux Kernel/include|uapi/linux/time.h}}
:: {{The Linux Kernel/id|timespec}} – nanosecond resolution
:: {{The Linux Kernel/id|timeval}} – microsecond resolution
:: {{The Linux Kernel/id|timezone}}
:: ...
: {{The Linux Kernel/include|uapi/linux/time_types.h}}
:: {{The Linux Kernel/id|__kernel_timespec}} – nanosecond resolution, used in syscalls
:: ...
⚲ API
: {{The Linux Kernel/include|linux/delay.h}} – busy-wait delay functions for timing control
: {{The Linux Kernel/include|linux/sched/clock.h}}
:: {{The Linux Kernel/id|sched_clock}}
:: ...
: {{The Linux Kernel/include|linux/time.h}}
:: {{The Linux Kernel/id|tm}}
:: {{The Linux Kernel/id|get_timespec64}}
:: ...
: {{The Linux Kernel/include|linux/ktime.h}}
:: {{The Linux Kernel/id|ktime_t}} – nanosecond scalar representation for kernel time values
:: {{The Linux Kernel/id|ktime_sub}}
:: ...
: {{The Linux Kernel/include|linux/timekeeping.h}}
:: {{The Linux Kernel/id|ktime_get}}, {{The Linux Kernel/id|ktime_get_ns}}
:: {{The Linux Kernel/id|ktime_get_real}}
:: ...
: {{The Linux Kernel/include|linux/time64.h}}
:: {{The Linux Kernel/id|timespec64}}
:: {{The Linux Kernel/id|time64_t}}
:: {{The Linux Kernel/id|ns_to_timespec64}}
:: {{The Linux Kernel/id|timespec64_sub}}
:: {{The Linux Kernel/id|ktime_to_timespec64}}
:: ...
: {{The Linux Kernel/include|uapi/linux/rtc.h}}
: {{The Linux Kernel/include|linux/jiffies.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time}} – timekeeping, timers and clocks
📖 References
: {{The Linux Kernel/doc|ktime accessors|core-api/timekeeping.html}}
: {{The Linux Kernel/doc|Clock sources, Clock events, sched_clock() and delay timers|timers/timekeeping.html}}
: {{The Linux Kernel/doc|Time and timer routines|driver-api/basics.html#time-and-timer-routines}}
: {{w|Year 2038 problem}}
{{:The Linux Kernel/Multitasking/CPU}}
{{BookCat}}
qik46k3hubk0u938tsk212uzxmkzplk
4641633
4641541
2026-06-29T08:11:00Z
Conan
3188
stress-ng stressors distributed to subsections, resolute section anchors
4641633
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Multitasking functionality}}</noinclude>
{| style="width: 25%; float: right; text-align:center;border-spacing: 0; margin:auto;" cellpadding="5pc"
! bgcolor="#ffc" |multitasking
|-
| bgcolor="#eeb" |[[#Execution|execution]]
|-
| bgcolor="#dda" |[[#Threads_or_tasks|threads or tasks]]
|-
| bgcolor="#cc9" |[[#Synchronization|synchronization]]
|-
| bgcolor="#bb8" |[[#Scheduler|Scheduler]]
|-
| bgcolor="#aa8" |[[#Interrupts|interrupts core]]
|- style=""
| bgcolor="#997" |[[#CPU_specific|CPU specific]]
|}
Linux kernel is a preemptive {{w|Computer multitasking|multitasking}} operating system.
As a multitasking OS, it allows multiple processes to share processors (CPUs) and other system resources.
Each CPU executes a single task at a time.
However, multitasking allows each processor to switch between tasks that are being executed without having to wait for each task to finish.
For that, the kernel can, at any time, temporarily interrupt a task being carried out by the processor, and replace it by another task that can be new or a previously suspended one.
The operation involving the swapping of the running task is called ''{{w|context switch}}''.
== Execution ==
⚲ API ↪ ⚙️ implementations
{{The Linux Kernel/man|2|execve}} ↪ {{The Linux Kernel/id|do_execveat_common}} runs an executable file in the context of current process, replacing the previous executable.
This system call is used by family of functions of libc {{The Linux Kernel/man|3|exec}}.
The {{w|Executable and Linkable Format|ELF}} binary format is loaded by {{The Linux Kernel/source|fs/binfmt_elf.c}}.
{{The Linux Kernel/man|2|clone}}.
Clone creates a child process that may share parts of its execution context with the parent.
It is often used to implement threads (though programmers will typically use a higher-level interface such as {{The Linux Kernel/man|7|pthreads}}, implemented on top of clone).
{{The Linux Kernel/man|2|wait}} ↪ {{The Linux Kernel/id|kernel_waitid}} suspends the execution of the calling process until one of its child processes terminates.
Syscall {{The Linux Kernel/man|2|getpid}} ↪ {{The Linux Kernel/id|task_tgid_vnr}} returns PID of the current process which internally is called TGID - thread group id.
A process can contain many threads.
{{The Linux Kernel/man|2|gettid}} ↪ {{The Linux Kernel/id|task_pid_vnr}} returns thread id.
Which internally is historically called PID.
⚠️ Warning: confusion.
User space PID ≠ kernel space PID.
{{The Linux Kernel/man|1|ps}} -AF lists current processes and thread as {{w|Light-weight process|LWP}}.
For a single thread process all these IDs are equal.
High-resolution delays:
: {{The Linux Kernel/man|2|nanosleep}} ↪ {{The Linux Kernel/id|sys_nanosleep}}
:: {{The Linux Kernel/id|hrtimer_nanosleep}}
: {{The Linux Kernel/man|2|clock_nanosleep}} ↪ {{The Linux Kernel/id|sys_clock_nanosleep}}
Wait for a signal:
: {{The Linux Kernel/man|2|pause}} ↪ {{The Linux Kernel/id|sys_pause}}
: {{The Linux Kernel/man|2|sigsuspend}} ↪ {{The Linux Kernel/id|sys_sigsuspend}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Swapcontext stress-ng --context],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Context --switch]
See [[The Linux Kernel/Processes|Processes]] for process creation and termination.
=== Inter-process communication ===
Inter-process communication (IPC) refers specifically to the mechanisms an operating system provides to allow processes it manages to share data.
Methods for achieving IPC are divided into categories which vary based on software requirements, such as performance and modularity requirements, and system circumstances.
Linux inherited from Unix the following IPC mechanisms:
Signals (⚲ API ↪ ⚙️ implementations):
: {{The Linux Kernel/man|2|kill}} sends signal to a process
: {{The Linux Kernel/man|2|tgkill}} ↪ {{The Linux Kernel/id|do_tkill}} sends a signal to a thread
: {{The Linux Kernel/man|2|process_vm_readv}} ↪ {{The Linux Kernel/id|process_vm_rw}} - zero-copy data transfer between process address spaces
: {{The Linux Kernel/man|2|sigaction}} ↪ {{The Linux Kernel/id|do_sigaction}} – examine and change a signal action
: {{The Linux Kernel/man|2|sigprocmask}} – examine and change blocked signals
: {{The Linux Kernel/man|2|sigpending}} ↪ {{The Linux Kernel/id|do_sigpending}} – examine pending signals
: {{The Linux Kernel/man|2|sigsuspend}} – wait for a signal
: {{The Linux Kernel/man|2|sigaltstack}} – set or get signal stack context
: {{The Linux Kernel/man|2|sigtimedwait}} ↪ {{The Linux Kernel/id|do_sigtimedwait}} – synchronously wait for queued signals
: {{The Linux Kernel/man|7|signal}} – overview of signals
: {{The Linux Kernel/include|linux/sched/signal.h}} – signal-related task accessors
: {{The Linux Kernel/source|kernel/signal.c}} – signal delivery and handling
: 🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Signal~2 stress-ng --sigq]
: [[../Storage#Zero-copy|Anonymous pipes]] and named pipes (FIFOs) {{The Linux Kernel/man|2|mknod}} ↪ {{The Linux Kernel/id|do_mknodat}} {{The Linux Kernel/id|S_IFIFO}}
: {{w|Express Data Path}} {{The Linux Kernel/id|PF_XDP}}
: {{w|Unix domain socket}} {{The Linux Kernel/id|PF_UNIX}}
: Memory-mapped files {{The Linux Kernel/man|2|mmap}} ⤑ {{The Linux Kernel/id|ksys_mmap_pgoff}}
: {{The Linux Kernel/man|2|eventfd}} ↪ {{The Linux Kernel/id|do_eventfd}} – event notification via file descriptor
: {{The Linux Kernel/man|2|signalfd}} ↪ {{The Linux Kernel/id|do_signalfd4}} – receive signals via file descriptor
: {{The Linux Kernel/man|2|timerfd_create}} – timer notification via file descriptor
: Sys V IPC:
:: Message queues: {{The Linux Kernel/man|2|msgget}}, {{The Linux Kernel/man|2|msgsnd}}, {{The Linux Kernel/man|2|msgrcv}} ↪ {{The Linux Kernel/source|ipc/msg.c}}
:: Semaphores
:: Shared memory: {{The Linux Kernel/man|2|shmget}}, {{The Linux Kernel/man|2|shmctl}}, {{The Linux Kernel/man|2|shmat}}, {{The Linux Kernel/man|2|shmdt}} ↪ {{The Linux Kernel/source|ipc/shm.c}}
: POSIX message queues:
:: {{The Linux Kernel/man|7|mq_overview}}, {{The Linux Kernel/man|3|mq_open}}, {{The Linux Kernel/man|3|mq_send}}, {{The Linux Kernel/man|3|mq_receive}} ↪ {{The Linux Kernel/source|ipc/mqueue.c}} 🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mq --mq]
📖 References
: {{w|Inter-process communication}}
: {{The Linux Kernel/man|7|sysvipc}}
== Threads or tasks ==
In Linux kernel "thread" and "task" are almost synonyms.
⚲ API
: {{The Linux Kernel/include|linux/sched.h}} - the main scheduler API
:: {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/source|arch/x86/include/asm/current.h}} – x86 current task pointer
::{{Linux ident|current}} and {{The Linux Kernel/id|get_current}} () return current {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/include|uapi/linux/taskstats.h}} per-task statistics
: {{The Linux Kernel/include|linux/thread_info.h}}
:: {{The Linux Kernel/id|current_thread_info}}() returns {{The Linux Kernel/id|thread_info}}
:{{The Linux Kernel/include|linux/sched/task.h}} - interface between the scheduler and various task lifetime (fork()/exit()) functionality
: {{The Linux Kernel/include|linux/kthread.h}} - simple interface for creating and stopping kernel threads without mess.
::{{The Linux Kernel/id|kthread_run}} creates and wakes a thread
::{{The Linux Kernel/id|kthread_create}}
⚙️ Internals
: {{The Linux Kernel/id|kthread_run}} ↯ hierarchy:
: {{The Linux Kernel/source|kernel/kthread.c}} – kernel thread creation and management
:: {{The Linux Kernel/id|kthreadd}} – parent kernel thread and the creator of all other kernel threads.
Dequeues {{The Linux Kernel/id|kthread_create_info}} from {{The Linux Kernel/id|kthread_create_list}}.
::: {{The Linux Kernel/id|create_kthread}}
:::: {{The Linux Kernel/id|kernel_thread}}
:::: {{The Linux Kernel/id|kthread}} – invokes {{The Linux Kernel/id|threadfn}}
:: {{The Linux Kernel/id|__kthread_create_on_node}} – enqueues {{The Linux Kernel/id|kthread_create_info}} into {{The Linux Kernel/id|kthread_create_list}}
: {{The Linux Kernel/source|kernel/fork.c}} – process creation and cloning
:: {{The Linux Kernel/id|kernel_thread}}
::: {{The Linux Kernel/id|kernel_clone}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Clone stress-ng --clone],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#f --fork],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#pthread --pthread]
==Scheduler==
The ''{{w|Scheduling_(computing)#Linux|scheduler}}'' is the part of the operating system that decides which process runs at a certain point in time.
It usually has the ability to pause a running process, move it to the back of the running queue and start a new process.
Active processes are placed in an array called a ''{{w|run queue}}'', or ''runqueue'' - {{The Linux Kernel/id|rq}}.
The run queue may contain priority values for each process, which will be used by the scheduler to determine which process to run next.
To ensure each program has a fair share of resources, each one is run for some time period (quantum) before it is paused and placed back into the run queue.
When a program is stopped to let another run, the program with the highest priority in the run queue is then allowed to execute.
Processes are also removed from the run queue when they ask to ''sleep'', are waiting on a resource to become available, or have been terminated.
Since version 6.6 the Linux kernel uses the {{w|Earliest eligible virtual deadline first scheduling}} (EEVDF) algorithm, which replaced the {{w|Completely Fair Scheduler}} (CFS).
While much of the CFS infrastructure remains: {{The Linux Kernel/id|sched_entity}}, {{The Linux Kernel/id|cfs_rq}}, the red-black tree, load balancing, and {{The Linux Kernel/source|kernel/sched/fair.c}} — the task selection logic is fundamentally different.
EEVDF is based on a classic scheduling algorithm originally designed for packet networks.
The scheduler has a scheduling complexity of O(log N), where N is the number of tasks in the runqueue.
Both picking and reinserting a task require O(log N) operations, because the run queue is implemented as a {{w|red–black tree}}.
The runqueue ({{The Linux Kernel/id|cfs_rq}}) is implemented as a red-black tree representing a "timeline" of future task execution.
The scheduler uses nanosecond granularity accounting and requires no heuristics or interactivity estimators.
EEVDF improves sleeper fairness over CFS by tracking ''lag'' ({{The Linux Kernel/id|vlag}}) — the difference between the service a task was entitled to and the service it actually received.
When a sleeping task wakes up, its lag determines eligibility, ensuring interactive tasks get prompt service without starving long-running tasks.
The data structure used for the scheduling algorithm is a red-black tree in which the nodes are {{The Linux Kernel/id|sched_entity}} structures, embedded in {{The Linux Kernel/id|task_struct}}.
With EEVDF, each task has a time slice ({{The Linux Kernel/id|sysctl_sched_base_slice}}, default 0.7ms) that determines its request length.
EEVDF computes a virtual deadline for each task: vd_i = ve_i + r_i/w_i, where ve_i is the eligible time, r_i is the request size, and w_i is the weight (determined by nice value).
The scheduler picks the eligible task with the earliest virtual deadline via {{The Linux Kernel/id|__pick_eevdf}}.
The Linux kernel contains different scheduler classes (or policies).
The EEVDF scheduler handles {{The Linux Kernel/id|SCHED_NORMAL}} (aka SCHED_OTHER).
The kernel also contains two additional classes {{The Linux Kernel/id|SCHED_BATCH}} and {{The Linux Kernel/id|SCHED_IDLE}}, and another two real-time scheduling classes named {{The Linux Kernel/id|SCHED_FIFO}} (realtime first-in-first-out) and {{The Linux Kernel/id|SCHED_RR}} (realtime round-robin), with a third realtime scheduling policy known as {{The Linux Kernel/id|SCHED_DEADLINE}} that implements the {{w|Earliest deadline first scheduling|earliest deadline first algorithm (EDF)}} added later.
Any realtime scheduler class takes precedence over any of the "normal" —i.e.
non realtime— classes.
The scheduler class is selected and configured through the {{The Linux Kernel/man|2|sched_setscheduler}} ↪ {{The Linux Kernel/id|do_sched_setscheduler}} system call.
Properly balancing latency, throughput, and fairness in schedulers is an open problem.<ref name="malte" >
Malte Skarupke.
[https://probablydance.com/2019/12/30/measuring-mutexes-spinlocks-and-how-bad-the-linux-scheduler-really-is/ "Measuring Mutexes, Spinlocks and how Bad the Linux Scheduler Really is"].
</ref>
⚲ API
: {{The Linux Kernel/man|1|renice}} – priority of running processes
: {{The Linux Kernel/man|1|nice}} – run a program with modified scheduling priority
: {{The Linux Kernel/man|1|chrt}} – manipulate the real-time attributes of a process
:: {{The Linux Kernel/man|2|sched_getattr}} ↪ {{The Linux Kernel/id|sys_sched_getattr}} – get scheduling policy and attributes
: {{The Linux Kernel/include|linux/sched.h}} – the main scheduler API
:: {{The Linux Kernel/id|schedule}}
: {{The Linux Kernel/man|2|getpriority}}, {{The Linux Kernel/man|2|setpriority}}
: {{The Linux Kernel/man|2|sched_setscheduler}}, {{The Linux Kernel/man|2|sched_getscheduler}}
: /sys/kernel/debug/sched/ – scheduler debugfs tuning directory
:: features – toggle scheduler feature flags
:: base_slice_ns – EEVDF base time slice (default 700000)
:: migration_cost_ns – cost threshold for task migration between CPUs
:: nr_migrate – max tasks to migrate per balancing pass
:: debug – dump detailed scheduler state
:: numa_balancing/ – NUMA balancing scan parameters
⚙️ Internals
:{{The Linux Kernel/id|sched_init}} is called from {{The Linux Kernel/id|start_kernel}}
: {{The Linux Kernel/id|__schedule}} is the main scheduler function.
: {{The Linux Kernel/id|runqueues}}, {{The Linux Kernel/id|this_rq}}
: {{The Linux Kernel/source|kernel/sched}} – scheduler subsystem
: {{The Linux Kernel/source|kernel/sched/core.c}} – core scheduling logic
: {{The Linux Kernel/source|kernel/sched/fair.c}} implements {{The Linux Kernel/id|SCHED_NORMAL}}, {{The Linux Kernel/id|SCHED_BATCH}}, {{The Linux Kernel/id|SCHED_IDLE}}
:: {{The Linux Kernel/id|__pick_eevdf}} – core of EEVDF
: {{The Linux Kernel/id|sched_setscheduler}}, {{The Linux Kernel/id|sched_getscheduler}}
: {{The Linux Kernel/id|task_struct}}::{{The Linux Kernel/id|rt_priority}} and other members with less unique identifiers
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#schedpolicy stress-ng --schedpolicy]
🛠️ Utilities
: {{The Linux Kernel/man|1|pidstat}}
: {{The Linux Kernel/man|1|pcp-pidstat}}
: {{The Linux Kernel/man|1|perf-sched}}
: [https://opensource.googleblog.com/2019/10/understanding-scheduling-behavior-with.html Understanding Scheduling Behavior with SchedViz]
📖 References
: {{The Linux Kernel/man|7|sched}}
: {{The Linux Kernel/doc|Scheduling|scheduler}}
:: {{The Linux Kernel/doc|EEVDF Scheduler|scheduler/sched-eevdf.html}}
::: [https://lwn.net/Kernel/Index/#Scheduler-EEVDF An EEVDF CPU scheduler for Linux LWN]
: {{The Linux Kernel/doc|Delaying and scheduling routines|driver-api/basics.html#delaying-and-scheduling-routines}}
: CFS
:: {{The Linux Kernel/doc|Completely Fair Scheduler|scheduler/sched-design-CFS.html}}
:: {{The Linux Kernel/doc|CFS Bandwidth Control|scheduler/sched-bwc.html}}
:: [[The Linux Kernel/System/CGroup v2#CPU|CPU cgroup controller]]
:: {{The Linux Kernel/doc|CPU cgroup interface files|admin-guide/cgroup-v2.html#cpu-interface-files}}
:: [https://lwn.net/Kernel/Index/#Scheduler-Completely_fair_scheduler Completely fair scheduler LWN]
:: [https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-tuning-taskscheduler.html Tuning the task scheduler]
:: [https://home.robusta.dev/blog/stop-using-cpu-limits stop using CPU limits on Kubernetes]
: {{The Linux Kernel/doc|Deadline Task Scheduler|scheduler/sched-deadline.html}}
: {{The Linux Kernel/ltp|kernel|sched}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setparam}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_getscheduler}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setscheduler}}
📚 Further reading about the scheduler
: [https://github.com/iovisor/bpftrace/blob/master/docs/tutorial_one_liners.md#lesson-10-scheduler-tracing Scheduler tracing]
: [https://github.com/iovisor/bcc/blob/master/README.md#cpu-and-scheduler-tools bcc/ebpf CPU and scheduler tools]
=== Preemption ===
Preemption refers to the ability of the system to interrupt a running task to switch to another task.
This is essential for ensuring that high-priority tasks receive the necessary CPU time and for improving the system's responsiveness.
In Linux, preemption models define how and when the kernel can preempt tasks.
Different models offer varying trade-offs between system responsiveness and throughput.
📖 References
: {{The Linux Kernel/doc|Proper Locking Under a Preemptible Kernel|locking/preempt-locking.html}}
:: {{The Linux Kernel/id|preempt_enable}} – decrement the preempt counter
:: {{The Linux Kernel/id|preempt_disable}} – increment the preempt counter
:: {{The Linux Kernel/id|preempt_enable_no_resched}} – decrement, but do not immediately preempt
:: {{The Linux Kernel/id|preempt_check_resched}} – if needed, reschedule
:: {{The Linux Kernel/id|preempt_count}} – return the preempt counter
: {{The Linux Kernel/source|kernel/Kconfig.preempt}} – preemption model configuration
:: {{The Linux Kernel/id|CONFIG_PREEMPT_NONE}} – no forced preemption for servers
:: {{The Linux Kernel/id|CONFIG_PREEMPT_VOLUNTARY}} – voluntary preemption for desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT}} – preemptible except for critical sections for low-latency desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} – real-time preemption for [[Embedded_Systems/Linux#Real-time|highly responsive applications]]
:: {{The Linux Kernel/id|CONFIG_PREEMPT_DYNAMIC}} – allows runtime switching of preemption model
::: /sys/kernel/debug/sched/preempt – shows and controls the active preemption model
=== sched_ext ===
Since version 6.12 the kernel supports {{The Linux Kernel/id|SCHED_EXT}} — an extensible scheduler class whose behavior is defined by a set of {{w|eBPF}} programs.
Any scheduling algorithm can be implemented on top of sched_ext, loaded and unloaded dynamically at runtime.
The system integrity is maintained no matter what the BPF scheduler does: the default scheduling behavior is restored on error or when a runnable task stalls.
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_SCHED_CLASS_EXT}}
: {{The Linux Kernel/source|kernel/sched/ext.c}} – extensible BPF scheduler class
: {{The Linux Kernel/id|sched_ext_ops}} – BPF scheduler operations
: {{The Linux Kernel/id|sched_ext_entity}} – per-task sched_ext data, embedded in {{The Linux Kernel/id|task_struct}}
👁 Examples
: {{The Linux Kernel/source|tools/sched_ext}} – in-tree example BPF schedulers
📖 References
: {{The Linux Kernel/doc|Extensible Scheduler Class|scheduler/sched-ext.html}}
: [https://github.com/sched-ext/scx sched-ext/scx] – production BPF schedulers
: [https://lwn.net/Kernel/Index/#Scheduler-BPF Scheduler BPF LWN]
=== Energy Aware Scheduling ===
🚀 advanced topic
Since version 5.0, Energy Aware Scheduling (EAS) gives the scheduler the ability to predict the impact of its decisions on the energy consumed by CPUs.
EAS relies on an Energy Model (EM) to select an energy efficient CPU for each task, with minimal impact on throughput.
EAS operates only on heterogeneous CPU topologies (such as ARM {{w|big.LITTLE}}) where the potential for energy savings is highest.
⚲ API
: /proc/sys/kernel/sched_energy_aware – enable or disable EAS
: {{The Linux Kernel/include|linux/energy_model.h}}
:: {{The Linux Kernel/id|em_perf_domain}} – performance domain descriptor
:: {{The Linux Kernel/id|em_cpu_get}} – get the EM for a given CPU
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_ENERGY_MODEL}}
: {{The Linux Kernel/id|find_energy_efficient_cpu}} – find most energy-efficient target CPU for a waking task
: {{The Linux Kernel/source|kernel/power/energy_model.c}} – CPU energy model framework
📖 References
: {{The Linux Kernel/doc|Energy Aware Scheduling|scheduler/sched-energy.html}}
: {{The Linux Kernel/doc|Energy Model of devices|power/energy-model.html}}
=== Wait queues ===
A ''wait queue'' in the kernel is a data structure that allows one or more processes to wait (sleep) until something of interest happens.
They are used throughout the kernel to wait for available memory, I/O completion, message arrival, and many other things.
In the early days of Linux, a wait queue was a simple list of waiting processes, but various scalability problems (including the {{w|thundering herd problem}}) have led to the addition of a fair amount of complexity since then.
⚲ API
{{The Linux Kernel/include|linux/wait.h}}
{{The Linux Kernel/id|wait_queue_head}} consists of double linked list of {{The Linux Kernel/id|wait_queue_entry}} and a spinlock.
Waiting for simple events:
: Use one of two methods for {{The Linux Kernel/id|wait_queue_head}} initialization:
:: {{The Linux Kernel/id|init_waitqueue_head}} initializes {{The Linux Kernel/id|wait_queue_head}} in function context
:: {{The Linux Kernel/id|DECLARE_WAIT_QUEUE_HEAD}} - actually defines {{The Linux Kernel/id|wait_queue_head}} in global context
: Wait alternatives:
:: {{The Linux Kernel/id|wait_event_interruptible}} - preferable wait
:: {{The Linux Kernel/id|wait_event_interruptible_timeout}}
:: {{The Linux Kernel/id|wait_event}} - uninterruptible wait. Can cause deadlock ⚠
: {{The Linux Kernel/id|wake_up}} etc
👁 For example usage see references to unique {{The Linux Kernel/id|suspend_queue}}.
Explicit use of add_wait_queue instead of simple wait_event for complex cases:
: {{The Linux Kernel/id|DECLARE_WAITQUEUE}} actually defines wait_queue_entry with {{The Linux Kernel/id|default_wake_function}}
: {{The Linux Kernel/id|add_wait_queue}} inserts process in the first position of a wait queue
: {{The Linux Kernel/id|remove_wait_queue}}
⚙️ Internals
: {{The Linux Kernel/id|___wait_event}}
: {{The Linux Kernel/id|__add_wait_queue}}
: {{The Linux Kernel/id|__wake_up_common}}, {{The Linux Kernel/id|try_to_wake_up}}
: {{The Linux Kernel/source|kernel/sched/wait.c}} – wait queue implementation
Simple wait queues – simplified version with raw spinlock, suitable for RT and restricted contexts:
: {{The Linux Kernel/include|linux/swait.h}}
:: {{The Linux Kernel/id|swait_queue_head}}, {{The Linux Kernel/id|swait_queue}}
: {{The Linux Kernel/source|kernel/sched/swait.c}} – simple wait queue implementation
📖 References
: {{The Linux Kernel/doc|Wait queues and Wake events|driver-api/basics.html#wait-queues-and-wake-events}}
=== Real-time ===
{{:The Linux Kernel/Multitasking/Real-time}}
== Synchronization ==
Thread {{w|Synchronization (computer science)|synchronization}} is defined as a mechanism which ensures that two or more concurrent processes or threads do not simultaneously execute some particular program segment known as {{w|mutual exclusion}} (mutex).
When one thread starts executing the critical section (serialized segment of the program) the other thread should wait until the first thread finishes.
If proper synchronization techniques are not applied, it may cause a race condition where, the values of variables may be unpredictable and vary depending on the timings of context switches of the processes or threads.
=== User space synchronization ===
==== POSIX Timers ====
⚲ APIs
: {{The Linux Kernel/man|2|timer_create}} – creates a POSIX timer
: {{The Linux Kernel/man|2|timer_settime}} – starts or modifies a timer
: {{The Linux Kernel/man|2|timer_gettime}} – retrieves the remaining time of a timer
: {{The Linux Kernel/man|2|timer_delete}} – deletes a POSIX timer
: {{The Linux Kernel/man|2|clock_nanosleep}} – suspends execution for a specified time
⚙️ Internals
: {{The Linux Kernel/include|linux/posix-timers.h}}
: {{The Linux Kernel/source|kernel/time/itimer.c}} – interval timer (setitimer/getitimer)
: {{The Linux Kernel/source|kernel/time/posix-timers.c}} – POSIX clock and timer operations
: {{The Linux Kernel/source|kernel/time/posix-cpu-timers.c}} – per-process/thread CPU timers
:: {{The Linux Kernel/id|posix_cpu_timer_set}} – function setting up CPU timers
==== Futex ====
A {{The Linux Kernel/man|2|futex}} ↪ {{The Linux Kernel/id|do_futex}} (short for "Fast User space muTex") is a kernel system call that programmers can use to implement basic locking, or as a building block for higher-level locking abstractions such as semaphores and POSIX mutexes or condition variables.
A futex consists of a kernel space ''wait queue'' that is attached to an aligned integer in user space.
Multiple processes or threads operate on the integer entirely in user space (using atomic operations to avoid interfering with one another), and only resort to relatively expensive system calls to request operations on the wait queue (for example to wake up waiting processes, or to put the current process on the wait queue).
A properly programmed futex-based lock will not use system calls except when the lock is contended; since most operations do not require arbitration between processes, this will not happen in most cases.
The basic operations of futexes are based on only two central operations {{The Linux Kernel/id|futex_wait}} and {{The Linux Kernel/id|futex_wake}} though implementation has more operations for more specialized cases.
: WAIT (''addr'', ''val'') checks if the value stored at the address ''addr'' is ''val'', and if it is puts the current thread to sleep.
: WAKE (''addr'', ''val'') wakes up ''val'' number of threads waiting on the address ''addr''.
⚲ API
: {{The Linux Kernel/include|uapi/linux/futex.h}}
: {{The Linux Kernel/include|linux/futex.h}}
⚙️ Internals: {{The Linux Kernel/source|kernel/futex}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#futex stress-ng --futex]
📖 References
: {{w|Futex}}
: {{The Linux Kernel/man|7|futex}}
: {{The Linux Kernel/doc|Futex API reference|kernel-hacking/locking.html#futex-api-reference}}
: {{The Linux Kernel/ltp|kernel/syscalls|futex}}
==== File locking ====
⚲ API: {{The Linux Kernel/man|2|flock}}
==== Semaphore ====
💾 ''History: Semaphore is part of System V IPC {{The Linux Kernel/man|7|sysvipc}}''
⚲ API
: {{The Linux Kernel/man|2|semget}}
: {{The Linux Kernel/man|2|semctl}}
: {{The Linux Kernel/man|2|semop}}
⚙️ Internals: {{The Linux Kernel/source|ipc/sem.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#sem stress-ng --sem]
=== Kernel space synchronization ===
For kernel mode synchronization Linux provides three categories of locking primitives: sleeping, per CPU local locks and spinning locks.
==== Read-Copy-Update ====
Common mechanism to solve the readers–writers problem is the {{w|read-copy-update}} (''RCU'') algorithm.
Read-copy-update implements a kind of mutual exclusion that is wait-free (non-blocking) for readers, allowing extremely low overhead.
However, RCU updates can be expensive, as they must leave the old versions of the data structure in place to accommodate pre-existing readers.
⚲ The core API in {{The Linux Kernel/include|linux/rcupdate.h}} is quite small:
: {{The Linux Kernel/id|rcu_read_lock}} marks an RCU-protected data structure so that it won't be reclaimed for the full duration of that critical section.
: {{The Linux Kernel/id|rcu_read_unlock}} is used by a reader to inform the reclaimer that the reader is exiting an RCU read-side critical section. Note that RCU read-side critical sections may be nested and/or overlapping.
: {{The Linux Kernel/id|synchronize_rcu}} blocks until all pre-existing RCU read-side critical sections on all CPUs have completed. Note that <code>synchronize_rcu</code> will ''not'' necessarily wait for any subsequent RCU read-side critical sections to complete.
For example, consider the following sequence of events:
{| class="wikitable"
!
!CPU 0
!CPU 1
!CPU 2
|-
|1.
|rcu_read_lock()
|
|
|-
|2.
|
|enters synchronize_rcu()
|
|-
|3.
|
|
| rcu_read_lock()
|-
|4.
|rcu_read_unlock()
|
|
|-
|5.
|
|exits synchronize_rcu()
|
|-
|6.
|
|
|rcu_read_unlock()
|}
[[File:Rcu api.jpg|thumb|upright=2|RCU API communications between the reader, updater, and reclaimer]]
:Since <code>synchronize_rcu</code> is the API that must figure out when readers are done, its implementation is key to RCU. For RCU to be useful in all but the most read-intensive situations, <code>synchronize_rcu</code>'s overhead must also be quite small.
:Alternatively, instead of blocking, synchronize_rcu may register a callback to be invoked after all ongoing RCU read-side critical sections have completed. This callback variant is called {{The Linux Kernel/id|call_rcu}} in the Linux kernel.
: {{The Linux Kernel/id|rcu_assign_pointer}} - The updater uses this function to assign a new value to an RCU-protected pointer, in order to safely communicate the change in value from the updater to the reader. This function returns the new value, and also executes any {{w|Memory barrier}} instructions required for a given CPU architecture. Perhaps more importantly, it serves to document which pointers are protected by RCU.
: {{The Linux Kernel/id|rcu_dereference}} - The reader uses this function to fetch an RCU-protected pointer, which returns a value that may then be safely dereferenced. It also executes any directives required by the compiler or the CPU, for example, a volatile cast for gcc, a memory_order_consume load for C/C++11 or the memory-barrier instruction required by the old DEC Alpha CPU. The value returned by <code>rcu_dereference</code> is valid only within the enclosing RCU read-side critical section. As with <code>rcu_assign_pointer</code>, an important function of <code>rcu_dereference</code> is to document which pointers are protected by RCU.
The RCU infrastructure observes the time sequence of <code>rcu_read_lock</code>, <code>rcu_read_unlock</code>, <code>synchronize_rcu</code>, and <code>call_rcu</code> invocations in order to determine when (1) <code>synchronize_rcu</code> invocations may return to their callers and (2) <code>call_rcu</code> callbacks may be invoked.
Efficient implementations of the RCU infrastructure make heavy use of batching in order to amortize their overhead over many uses of the corresponding APIs.
⚲ API
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=rcu_nocbs%5B rcu_nocbs] – no-callback CPUs
: {{The Linux Kernel/include|linux/rcupdate.h}}
: {{The Linux Kernel/include|linux/rculist.h}} – RCU-protected linked list operations
⚙️ Internals
: {{The Linux Kernel/source|kernel/rcu}} – read-copy-update implementation
📖 References
: {{The Linux Kernel/doc|Avoiding Locks: Read Copy Update|kernel-hacking/locking.html?#avoiding-locks-read-copy-update}}
: {{The Linux Kernel/doc|RCU concepts|RCU}}
: [https://0xax.gitbooks.io/linux-insides/content/Initialization/linux-initialization-9.html RCU initialization]
📚 Further reading
: [https://lpc.events/event/18/contributions/1906/attachments/1590/3302/LPC-2024-Vienna.pdf Reduce synchronize_rcu() latency]
==== Sleeping locks ====
===== Mutexes =====
⚲ API
: {{The Linux Kernel/include|linux/mutex.h}}
: {{The Linux Kernel/include|linux/completion.h}}
: {{The Linux Kernel/id|mutex}} has owner and usage constraints, easier to debug than semaphore
:: {{The Linux Kernel/id|rt_mutex}} blocking mutual exclusion locks with priority inheritance (PI) support
:: {{The Linux Kernel/id|ww_mutex}} Wound/Wait mutexes: blocking mutual exclusion locks with deadlock avoidance
: {{The Linux Kernel/id|rw_semaphore}} readers–writer semaphores
: {{The Linux Kernel/id|percpu_rw_semaphore}}
: {{The Linux Kernel/id|completion}} - use completion for synchronization task with ISR and task or two tasks.
:: {{The Linux Kernel/id|wait_for_completion}}
:: {{The Linux Kernel/id|complete}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Mutex stress-ng --mutex]
💾 ''Historical''
: {{The Linux Kernel/id|semaphore}} - use mutex instead semaphore if possible
: {{The Linux Kernel/include|linux/semaphore.h}}
: {{The Linux Kernel/include|linux/rwsem.h}}
📖 References
: {{The Linux Kernel/doc|Completions - “wait for completion” barrier APIs|scheduler/completion.html}}
: {{The Linux Kernel/doc|Mutex API reference|kernel-hacking/locking.html#mutex-api-reference}}
: [http://lwn.net/Articles/23993/ LWN: completion events]
==== per CPU local lock ====
On normal preemptible kernel local_lock calls {{The Linux Kernel/id|preempt_disable}}.
On RT preemptible kernel local_lock calls {{The Linux Kernel/id|migrate_disable}} and {{The Linux Kernel/id|spin_lock}}.
Any changes applied to spinlock_t also apply to local_lock.
⚲ API
: {{The Linux Kernel/include|linux/local_lock.h}}
:: {{The Linux Kernel/id|local_lock}}, {{The Linux Kernel/id|preempt_disable}}
:: {{The Linux Kernel/id|local_lock_irqsave}}, {{The Linux Kernel/id|local_irq_save}}
:: etc
📖 References
: {{The Linux Kernel/doc|local_lock|locking/locktypes.html#local-lock}}
: {{The Linux Kernel/doc|PREEMPT_RT caveats: spinlock_t, rwlock_t, migrate_disable and local_lock|locking/locktypes.html#spinlock-t-and-rwlock-t}}
: {{The Linux Kernel/doc|Proper locking under a preemptive kernel|locking/preempt-locking.html}}
: [https://lwn.net/Articles/828477/ Local locks in the kernel]
==== Spinning locks ====
===== {{w|Spinlock}}s =====
a ''spinlock'' is a lock which causes a thread trying to acquire it to simply wait in a loop ("spin") while repeatedly checking if the lock is available.
Since the thread remains active but is not performing a useful task, the use of such a lock is a kind of busy waiting.
Once acquired, spinlocks will usually be held until they are explicitly released, although in some implementations they may be automatically released if the thread being waited on (that which holds the lock) blocks, or "goes to sleep".
Spinlocks are commonly used inside kernels because they are efficient if threads are likely to be blocked for only short periods.
However, spinlocks become wasteful if held for longer durations, as they may prevent other threads from running and require rescheduling.
👁 For example {{The Linux Kernel/id|kobj_kset_join}} uses spinlock to protect assess to the linked list.
Enabling and disabling of kernel preemption replaced spinlocks on uniprocessor systems (disabled {{The Linux Kernel/id|CONFIG_SMP}}).
Most spinning locks becoming sleeping locks in the {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} kernels.
⚲ API
: {{The Linux Kernel/include|linux/spinlock.h}}
:: {{The Linux Kernel/id|spinlock_t}}
:: {{The Linux Kernel/id|raw_spinlock_t}}
: {{The Linux Kernel/include|linux/bit_spinlock.h}}
:: {{The Linux Kernel/id|bit_spin_lock}}
📖 References
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-1.html Introduction to spinlocks]
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-2.html Queued spinlocks]
===== {{w|Seqlock}}s =====
A ''seqlock'' (short for "sequential lock") is a special locking mechanism used in Linux for supporting fast writes of shared variables between two parallel operating system routines.
It is a special solution to the readers–writers problem when the number of writers is small.
It is a reader-writer consistent mechanism which avoids the problem of writer starvation.
A {{The Linux Kernel/id|seqlock_t}} consists of storage for saving a sequence counter {{The Linux Kernel/id|seqcount_t}}/seqcount_spinlock_t in addition to a lock.
The lock is to support synchronization between two writers and the counter is for indicating consistency in readers.
In addition to updating the shared data, the writer increments the sequence counter, both after acquiring the lock and before releasing the lock.
Readers read the sequence counter before and after reading the shared data.
If the sequence counter is odd on either occasion, a writer had taken the lock while the data was being read and it may have changed.
If the sequence counters are different, a writer has changed the data while it was being read.
In either case readers simply retry (using a loop) until they read the same even sequence counter before and after.
⚲ API
: {{The Linux Kernel/id|seqlock_t}}
:: {{The Linux Kernel/id|DEFINE_SEQLOCK}}, {{The Linux Kernel/id|seqlock_init}}, {{The Linux Kernel/id|read_seqlock_excl}}, {{The Linux Kernel/id|write_seqlock}}
: {{The Linux Kernel/id|seqcount_t}}
:: {{The Linux Kernel/id|seqcount_init}}, {{The Linux Kernel/id|read_seqcount_begin}}, {{The Linux Kernel/id|read_seqcount_retry}}, {{The Linux Kernel/id|write_seqcount_begin}}, {{The Linux Kernel/id|write_seqcount_end}}
: {{The Linux Kernel/include|linux/seqlock.h}}
👁 Example: {{The Linux Kernel/id|mount_lock}}, defined in {{The Linux Kernel/source|fs/namespace.c}}
📖 References
: {{The Linux Kernel/doc|Sequence counters and sequential locks|locking/seqlock.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-6.html SeqLock]
==== Spinning or sleeping locks ====
:{| class="wikitable"
! !! normal !! on preempt RT
|-
| spinlock_t, || raw_spinlock_t || rt_mutex_base, rt_spin_lock, sleeping
|-
| rwlock_t || spinning || sleeping
|-
| local_lock || preempt_disable|| migrate_disable, rt_spin_lock, sleeping
|}
==== Low level ====
The compiler might optimize away or reorder writes to variables leading to unexpected behavior
when variables are accessed concurrently by multiple threads.
⚲ API
: {{The Linux Kernel/include|asm-generic/rwonce.h}} – prevent the compiler from merging or refetching reads or writes.
: {{The Linux Kernel/include|linux/compiler.h}}
:: {{The Linux Kernel/id|barrier}} – prevents the compiler from reordering instructions around the barrier
: {{The Linux Kernel/include|asm-generic/barrier.h}} – generic barrier definitions
: {{The Linux Kernel/source|arch/x86/include/asm/barrier.h}} – force strict CPU ordering
:: {{The Linux Kernel/id|mb}} – ensures that all memory operations before the barrier are completed before any memory operations after the barrier are started
⚙️ Internals
: {{The Linux Kernel/doc|Atomics|driver-api/basics.html#atomics}}
:: {{The Linux Kernel/include|linux/atomic.h}} – atomic operations wrapper
:: {{The Linux Kernel/include|asm-generic/atomic.h}}
:: {{The Linux Kernel/include|linux/atomic/atomic-instrumented.h}}
::: {{The Linux Kernel/id|atomic_dec_and_test}} ...
📚 Further reading
: {{w|Volatile_(computer_programming)#In_C_and_C++|volatile}} – prevents the compiler from optimizations
: {{w|Memory barrier}} – enforces an ordering constraint on memory operations
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Lock stress-ng --lockbus]
==== ... ====
⚙️ Locking internals
: {{The Linux Kernel/include|linux/lockdep.h}} – runtime locking correctness validator
: {{The Linux Kernel/include|linux/debug_locks.h}}
: {{The Linux Kernel/source|lib/locking-selftest.c}} – locking correctness self-tests
: {{The Linux Kernel/source|kernel/locking}} – locking primitives
: {{The Linux Kernel/id|mutex_waiter}}, {{The Linux Kernel/id|timer_list}}, {{The Linux Kernel/id|wait_queue_head_t}}
:: {{The Linux Kernel/source|kernel/locking/locktorture.c}} – module-based torture test facility for locking
📖 Locking references
: {{The Linux Kernel/doc|locking|locking}}
:: {{The Linux Kernel/doc|Lock types and their rules|locking/locktypes.html}}
::: 😴 {{The Linux Kernel/doc|sleeping locks|locking/locktypes.html#sleeping-locks}}
:::: {{The Linux Kernel/id|mutex}}, {{The Linux Kernel/id|rt_mutex}}, {{The Linux Kernel/id|semaphore}}, {{The Linux Kernel/id|rw_semaphore}}, {{The Linux Kernel/id|ww_mutex}}, {{The Linux Kernel/id|percpu_rw_semaphore}}
:::: on preempt RT: local_lock, spinlock_t, rwlock_t
::: 😵💫 {{The Linux Kernel/doc|spinning locks|locking/locktypes.html#spinning-locks}}:
:::: raw_spinlock_t, bit spinlocks
:::: on non preempt RT: spinlock_t, rwlock_t
: {{The Linux Kernel/doc|Unreliable Guide To Locking|kernel-hacking/locking.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/ Synchronization primitives]
=== Time ===
⚲ UAPI
: {{The Linux Kernel/include|uapi/linux/time.h}}
:: {{The Linux Kernel/id|timespec}} – nanosecond resolution
:: {{The Linux Kernel/id|timeval}} – microsecond resolution
:: {{The Linux Kernel/id|timezone}}
:: ...
: {{The Linux Kernel/include|uapi/linux/time_types.h}}
:: {{The Linux Kernel/id|__kernel_timespec}} – nanosecond resolution, used in syscalls
:: ...
⚲ API
: {{The Linux Kernel/include|linux/delay.h}} – busy-wait delay functions for timing control
: {{The Linux Kernel/include|linux/sched/clock.h}}
:: {{The Linux Kernel/id|sched_clock}}
:: ...
: {{The Linux Kernel/include|linux/time.h}}
:: {{The Linux Kernel/id|tm}}
:: {{The Linux Kernel/id|get_timespec64}}
:: ...
: {{The Linux Kernel/include|linux/ktime.h}}
:: {{The Linux Kernel/id|ktime_t}} – nanosecond scalar representation for kernel time values
:: {{The Linux Kernel/id|ktime_sub}}
:: ...
: {{The Linux Kernel/include|linux/timekeeping.h}}
:: {{The Linux Kernel/id|ktime_get}}, {{The Linux Kernel/id|ktime_get_ns}}
:: {{The Linux Kernel/id|ktime_get_real}}
:: ...
: {{The Linux Kernel/include|linux/time64.h}}
:: {{The Linux Kernel/id|timespec64}}
:: {{The Linux Kernel/id|time64_t}}
:: {{The Linux Kernel/id|ns_to_timespec64}}
:: {{The Linux Kernel/id|timespec64_sub}}
:: {{The Linux Kernel/id|ktime_to_timespec64}}
:: ...
: {{The Linux Kernel/include|uapi/linux/rtc.h}}
: {{The Linux Kernel/include|linux/jiffies.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time}} – timekeeping, timers and clocks
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Timer stress-ng --timer],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#High --hrtimers]
📖 References
: {{The Linux Kernel/doc|ktime accessors|core-api/timekeeping.html}}
: {{The Linux Kernel/doc|Clock sources, Clock events, sched_clock() and delay timers|timers/timekeeping.html}}
: {{The Linux Kernel/doc|Time and timer routines|driver-api/basics.html#time-and-timer-routines}}
: {{w|Year 2038 problem}}
{{:The Linux Kernel/Multitasking/CPU}}
{{BookCat}}
qu9wx53dvght7r1st16ro9bi2x9eyxi
4641642
4641633
2026-06-29T08:25:23Z
Conan
3188
mutex anchor #Mutex -> #mutex
4641642
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Multitasking functionality}}</noinclude>
{| style="width: 25%; float: right; text-align:center;border-spacing: 0; margin:auto;" cellpadding="5pc"
! bgcolor="#ffc" |multitasking
|-
| bgcolor="#eeb" |[[#Execution|execution]]
|-
| bgcolor="#dda" |[[#Threads_or_tasks|threads or tasks]]
|-
| bgcolor="#cc9" |[[#Synchronization|synchronization]]
|-
| bgcolor="#bb8" |[[#Scheduler|Scheduler]]
|-
| bgcolor="#aa8" |[[#Interrupts|interrupts core]]
|- style=""
| bgcolor="#997" |[[#CPU_specific|CPU specific]]
|}
Linux kernel is a preemptive {{w|Computer multitasking|multitasking}} operating system.
As a multitasking OS, it allows multiple processes to share processors (CPUs) and other system resources.
Each CPU executes a single task at a time.
However, multitasking allows each processor to switch between tasks that are being executed without having to wait for each task to finish.
For that, the kernel can, at any time, temporarily interrupt a task being carried out by the processor, and replace it by another task that can be new or a previously suspended one.
The operation involving the swapping of the running task is called ''{{w|context switch}}''.
== Execution ==
⚲ API ↪ ⚙️ implementations
{{The Linux Kernel/man|2|execve}} ↪ {{The Linux Kernel/id|do_execveat_common}} runs an executable file in the context of current process, replacing the previous executable.
This system call is used by family of functions of libc {{The Linux Kernel/man|3|exec}}.
The {{w|Executable and Linkable Format|ELF}} binary format is loaded by {{The Linux Kernel/source|fs/binfmt_elf.c}}.
{{The Linux Kernel/man|2|clone}}.
Clone creates a child process that may share parts of its execution context with the parent.
It is often used to implement threads (though programmers will typically use a higher-level interface such as {{The Linux Kernel/man|7|pthreads}}, implemented on top of clone).
{{The Linux Kernel/man|2|wait}} ↪ {{The Linux Kernel/id|kernel_waitid}} suspends the execution of the calling process until one of its child processes terminates.
Syscall {{The Linux Kernel/man|2|getpid}} ↪ {{The Linux Kernel/id|task_tgid_vnr}} returns PID of the current process which internally is called TGID - thread group id.
A process can contain many threads.
{{The Linux Kernel/man|2|gettid}} ↪ {{The Linux Kernel/id|task_pid_vnr}} returns thread id.
Which internally is historically called PID.
⚠️ Warning: confusion.
User space PID ≠ kernel space PID.
{{The Linux Kernel/man|1|ps}} -AF lists current processes and thread as {{w|Light-weight process|LWP}}.
For a single thread process all these IDs are equal.
High-resolution delays:
: {{The Linux Kernel/man|2|nanosleep}} ↪ {{The Linux Kernel/id|sys_nanosleep}}
:: {{The Linux Kernel/id|hrtimer_nanosleep}}
: {{The Linux Kernel/man|2|clock_nanosleep}} ↪ {{The Linux Kernel/id|sys_clock_nanosleep}}
Wait for a signal:
: {{The Linux Kernel/man|2|pause}} ↪ {{The Linux Kernel/id|sys_pause}}
: {{The Linux Kernel/man|2|sigsuspend}} ↪ {{The Linux Kernel/id|sys_sigsuspend}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Swapcontext stress-ng --context],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Context --switch]
See [[The Linux Kernel/Processes|Processes]] for process creation and termination.
=== Inter-process communication ===
Inter-process communication (IPC) refers specifically to the mechanisms an operating system provides to allow processes it manages to share data.
Methods for achieving IPC are divided into categories which vary based on software requirements, such as performance and modularity requirements, and system circumstances.
Linux inherited from Unix the following IPC mechanisms:
Signals (⚲ API ↪ ⚙️ implementations):
: {{The Linux Kernel/man|2|kill}} sends signal to a process
: {{The Linux Kernel/man|2|tgkill}} ↪ {{The Linux Kernel/id|do_tkill}} sends a signal to a thread
: {{The Linux Kernel/man|2|process_vm_readv}} ↪ {{The Linux Kernel/id|process_vm_rw}} - zero-copy data transfer between process address spaces
: {{The Linux Kernel/man|2|sigaction}} ↪ {{The Linux Kernel/id|do_sigaction}} – examine and change a signal action
: {{The Linux Kernel/man|2|sigprocmask}} – examine and change blocked signals
: {{The Linux Kernel/man|2|sigpending}} ↪ {{The Linux Kernel/id|do_sigpending}} – examine pending signals
: {{The Linux Kernel/man|2|sigsuspend}} – wait for a signal
: {{The Linux Kernel/man|2|sigaltstack}} – set or get signal stack context
: {{The Linux Kernel/man|2|sigtimedwait}} ↪ {{The Linux Kernel/id|do_sigtimedwait}} – synchronously wait for queued signals
: {{The Linux Kernel/man|7|signal}} – overview of signals
: {{The Linux Kernel/include|linux/sched/signal.h}} – signal-related task accessors
: {{The Linux Kernel/source|kernel/signal.c}} – signal delivery and handling
: 🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Signal~2 stress-ng --sigq]
: [[../Storage#Zero-copy|Anonymous pipes]] and named pipes (FIFOs) {{The Linux Kernel/man|2|mknod}} ↪ {{The Linux Kernel/id|do_mknodat}} {{The Linux Kernel/id|S_IFIFO}}
: {{w|Express Data Path}} {{The Linux Kernel/id|PF_XDP}}
: {{w|Unix domain socket}} {{The Linux Kernel/id|PF_UNIX}}
: Memory-mapped files {{The Linux Kernel/man|2|mmap}} ⤑ {{The Linux Kernel/id|ksys_mmap_pgoff}}
: {{The Linux Kernel/man|2|eventfd}} ↪ {{The Linux Kernel/id|do_eventfd}} – event notification via file descriptor
: {{The Linux Kernel/man|2|signalfd}} ↪ {{The Linux Kernel/id|do_signalfd4}} – receive signals via file descriptor
: {{The Linux Kernel/man|2|timerfd_create}} – timer notification via file descriptor
: Sys V IPC:
:: Message queues: {{The Linux Kernel/man|2|msgget}}, {{The Linux Kernel/man|2|msgsnd}}, {{The Linux Kernel/man|2|msgrcv}} ↪ {{The Linux Kernel/source|ipc/msg.c}}
:: Semaphores
:: Shared memory: {{The Linux Kernel/man|2|shmget}}, {{The Linux Kernel/man|2|shmctl}}, {{The Linux Kernel/man|2|shmat}}, {{The Linux Kernel/man|2|shmdt}} ↪ {{The Linux Kernel/source|ipc/shm.c}}
: POSIX message queues:
:: {{The Linux Kernel/man|7|mq_overview}}, {{The Linux Kernel/man|3|mq_open}}, {{The Linux Kernel/man|3|mq_send}}, {{The Linux Kernel/man|3|mq_receive}} ↪ {{The Linux Kernel/source|ipc/mqueue.c}} 🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mq --mq]
📖 References
: {{w|Inter-process communication}}
: {{The Linux Kernel/man|7|sysvipc}}
== Threads or tasks ==
In Linux kernel "thread" and "task" are almost synonyms.
⚲ API
: {{The Linux Kernel/include|linux/sched.h}} - the main scheduler API
:: {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/source|arch/x86/include/asm/current.h}} – x86 current task pointer
::{{Linux ident|current}} and {{The Linux Kernel/id|get_current}} () return current {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/include|uapi/linux/taskstats.h}} per-task statistics
: {{The Linux Kernel/include|linux/thread_info.h}}
:: {{The Linux Kernel/id|current_thread_info}}() returns {{The Linux Kernel/id|thread_info}}
:{{The Linux Kernel/include|linux/sched/task.h}} - interface between the scheduler and various task lifetime (fork()/exit()) functionality
: {{The Linux Kernel/include|linux/kthread.h}} - simple interface for creating and stopping kernel threads without mess.
::{{The Linux Kernel/id|kthread_run}} creates and wakes a thread
::{{The Linux Kernel/id|kthread_create}}
⚙️ Internals
: {{The Linux Kernel/id|kthread_run}} ↯ hierarchy:
: {{The Linux Kernel/source|kernel/kthread.c}} – kernel thread creation and management
:: {{The Linux Kernel/id|kthreadd}} – parent kernel thread and the creator of all other kernel threads.
Dequeues {{The Linux Kernel/id|kthread_create_info}} from {{The Linux Kernel/id|kthread_create_list}}.
::: {{The Linux Kernel/id|create_kthread}}
:::: {{The Linux Kernel/id|kernel_thread}}
:::: {{The Linux Kernel/id|kthread}} – invokes {{The Linux Kernel/id|threadfn}}
:: {{The Linux Kernel/id|__kthread_create_on_node}} – enqueues {{The Linux Kernel/id|kthread_create_info}} into {{The Linux Kernel/id|kthread_create_list}}
: {{The Linux Kernel/source|kernel/fork.c}} – process creation and cloning
:: {{The Linux Kernel/id|kernel_thread}}
::: {{The Linux Kernel/id|kernel_clone}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Clone stress-ng --clone],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#f --fork],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#pthread --pthread]
==Scheduler==
The ''{{w|Scheduling_(computing)#Linux|scheduler}}'' is the part of the operating system that decides which process runs at a certain point in time.
It usually has the ability to pause a running process, move it to the back of the running queue and start a new process.
Active processes are placed in an array called a ''{{w|run queue}}'', or ''runqueue'' - {{The Linux Kernel/id|rq}}.
The run queue may contain priority values for each process, which will be used by the scheduler to determine which process to run next.
To ensure each program has a fair share of resources, each one is run for some time period (quantum) before it is paused and placed back into the run queue.
When a program is stopped to let another run, the program with the highest priority in the run queue is then allowed to execute.
Processes are also removed from the run queue when they ask to ''sleep'', are waiting on a resource to become available, or have been terminated.
Since version 6.6 the Linux kernel uses the {{w|Earliest eligible virtual deadline first scheduling}} (EEVDF) algorithm, which replaced the {{w|Completely Fair Scheduler}} (CFS).
While much of the CFS infrastructure remains: {{The Linux Kernel/id|sched_entity}}, {{The Linux Kernel/id|cfs_rq}}, the red-black tree, load balancing, and {{The Linux Kernel/source|kernel/sched/fair.c}} — the task selection logic is fundamentally different.
EEVDF is based on a classic scheduling algorithm originally designed for packet networks.
The scheduler has a scheduling complexity of O(log N), where N is the number of tasks in the runqueue.
Both picking and reinserting a task require O(log N) operations, because the run queue is implemented as a {{w|red–black tree}}.
The runqueue ({{The Linux Kernel/id|cfs_rq}}) is implemented as a red-black tree representing a "timeline" of future task execution.
The scheduler uses nanosecond granularity accounting and requires no heuristics or interactivity estimators.
EEVDF improves sleeper fairness over CFS by tracking ''lag'' ({{The Linux Kernel/id|vlag}}) — the difference between the service a task was entitled to and the service it actually received.
When a sleeping task wakes up, its lag determines eligibility, ensuring interactive tasks get prompt service without starving long-running tasks.
The data structure used for the scheduling algorithm is a red-black tree in which the nodes are {{The Linux Kernel/id|sched_entity}} structures, embedded in {{The Linux Kernel/id|task_struct}}.
With EEVDF, each task has a time slice ({{The Linux Kernel/id|sysctl_sched_base_slice}}, default 0.7ms) that determines its request length.
EEVDF computes a virtual deadline for each task: vd_i = ve_i + r_i/w_i, where ve_i is the eligible time, r_i is the request size, and w_i is the weight (determined by nice value).
The scheduler picks the eligible task with the earliest virtual deadline via {{The Linux Kernel/id|__pick_eevdf}}.
The Linux kernel contains different scheduler classes (or policies).
The EEVDF scheduler handles {{The Linux Kernel/id|SCHED_NORMAL}} (aka SCHED_OTHER).
The kernel also contains two additional classes {{The Linux Kernel/id|SCHED_BATCH}} and {{The Linux Kernel/id|SCHED_IDLE}}, and another two real-time scheduling classes named {{The Linux Kernel/id|SCHED_FIFO}} (realtime first-in-first-out) and {{The Linux Kernel/id|SCHED_RR}} (realtime round-robin), with a third realtime scheduling policy known as {{The Linux Kernel/id|SCHED_DEADLINE}} that implements the {{w|Earliest deadline first scheduling|earliest deadline first algorithm (EDF)}} added later.
Any realtime scheduler class takes precedence over any of the "normal" —i.e.
non realtime— classes.
The scheduler class is selected and configured through the {{The Linux Kernel/man|2|sched_setscheduler}} ↪ {{The Linux Kernel/id|do_sched_setscheduler}} system call.
Properly balancing latency, throughput, and fairness in schedulers is an open problem.<ref name="malte" >
Malte Skarupke.
[https://probablydance.com/2019/12/30/measuring-mutexes-spinlocks-and-how-bad-the-linux-scheduler-really-is/ "Measuring Mutexes, Spinlocks and how Bad the Linux Scheduler Really is"].
</ref>
⚲ API
: {{The Linux Kernel/man|1|renice}} – priority of running processes
: {{The Linux Kernel/man|1|nice}} – run a program with modified scheduling priority
: {{The Linux Kernel/man|1|chrt}} – manipulate the real-time attributes of a process
:: {{The Linux Kernel/man|2|sched_getattr}} ↪ {{The Linux Kernel/id|sys_sched_getattr}} – get scheduling policy and attributes
: {{The Linux Kernel/include|linux/sched.h}} – the main scheduler API
:: {{The Linux Kernel/id|schedule}}
: {{The Linux Kernel/man|2|getpriority}}, {{The Linux Kernel/man|2|setpriority}}
: {{The Linux Kernel/man|2|sched_setscheduler}}, {{The Linux Kernel/man|2|sched_getscheduler}}
: /sys/kernel/debug/sched/ – scheduler debugfs tuning directory
:: features – toggle scheduler feature flags
:: base_slice_ns – EEVDF base time slice (default 700000)
:: migration_cost_ns – cost threshold for task migration between CPUs
:: nr_migrate – max tasks to migrate per balancing pass
:: debug – dump detailed scheduler state
:: numa_balancing/ – NUMA balancing scan parameters
⚙️ Internals
:{{The Linux Kernel/id|sched_init}} is called from {{The Linux Kernel/id|start_kernel}}
: {{The Linux Kernel/id|__schedule}} is the main scheduler function.
: {{The Linux Kernel/id|runqueues}}, {{The Linux Kernel/id|this_rq}}
: {{The Linux Kernel/source|kernel/sched}} – scheduler subsystem
: {{The Linux Kernel/source|kernel/sched/core.c}} – core scheduling logic
: {{The Linux Kernel/source|kernel/sched/fair.c}} implements {{The Linux Kernel/id|SCHED_NORMAL}}, {{The Linux Kernel/id|SCHED_BATCH}}, {{The Linux Kernel/id|SCHED_IDLE}}
:: {{The Linux Kernel/id|__pick_eevdf}} – core of EEVDF
: {{The Linux Kernel/id|sched_setscheduler}}, {{The Linux Kernel/id|sched_getscheduler}}
: {{The Linux Kernel/id|task_struct}}::{{The Linux Kernel/id|rt_priority}} and other members with less unique identifiers
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#schedpolicy stress-ng --schedpolicy]
🛠️ Utilities
: {{The Linux Kernel/man|1|pidstat}}
: {{The Linux Kernel/man|1|pcp-pidstat}}
: {{The Linux Kernel/man|1|perf-sched}}
: [https://opensource.googleblog.com/2019/10/understanding-scheduling-behavior-with.html Understanding Scheduling Behavior with SchedViz]
📖 References
: {{The Linux Kernel/man|7|sched}}
: {{The Linux Kernel/doc|Scheduling|scheduler}}
:: {{The Linux Kernel/doc|EEVDF Scheduler|scheduler/sched-eevdf.html}}
::: [https://lwn.net/Kernel/Index/#Scheduler-EEVDF An EEVDF CPU scheduler for Linux LWN]
: {{The Linux Kernel/doc|Delaying and scheduling routines|driver-api/basics.html#delaying-and-scheduling-routines}}
: CFS
:: {{The Linux Kernel/doc|Completely Fair Scheduler|scheduler/sched-design-CFS.html}}
:: {{The Linux Kernel/doc|CFS Bandwidth Control|scheduler/sched-bwc.html}}
:: [[The Linux Kernel/System/CGroup v2#CPU|CPU cgroup controller]]
:: {{The Linux Kernel/doc|CPU cgroup interface files|admin-guide/cgroup-v2.html#cpu-interface-files}}
:: [https://lwn.net/Kernel/Index/#Scheduler-Completely_fair_scheduler Completely fair scheduler LWN]
:: [https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-tuning-taskscheduler.html Tuning the task scheduler]
:: [https://home.robusta.dev/blog/stop-using-cpu-limits stop using CPU limits on Kubernetes]
: {{The Linux Kernel/doc|Deadline Task Scheduler|scheduler/sched-deadline.html}}
: {{The Linux Kernel/ltp|kernel|sched}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setparam}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_getscheduler}}
: {{The Linux Kernel/ltp|kernel/syscalls|sched_setscheduler}}
📚 Further reading about the scheduler
: [https://github.com/iovisor/bpftrace/blob/master/docs/tutorial_one_liners.md#lesson-10-scheduler-tracing Scheduler tracing]
: [https://github.com/iovisor/bcc/blob/master/README.md#cpu-and-scheduler-tools bcc/ebpf CPU and scheduler tools]
=== Preemption ===
Preemption refers to the ability of the system to interrupt a running task to switch to another task.
This is essential for ensuring that high-priority tasks receive the necessary CPU time and for improving the system's responsiveness.
In Linux, preemption models define how and when the kernel can preempt tasks.
Different models offer varying trade-offs between system responsiveness and throughput.
📖 References
: {{The Linux Kernel/doc|Proper Locking Under a Preemptible Kernel|locking/preempt-locking.html}}
:: {{The Linux Kernel/id|preempt_enable}} – decrement the preempt counter
:: {{The Linux Kernel/id|preempt_disable}} – increment the preempt counter
:: {{The Linux Kernel/id|preempt_enable_no_resched}} – decrement, but do not immediately preempt
:: {{The Linux Kernel/id|preempt_check_resched}} – if needed, reschedule
:: {{The Linux Kernel/id|preempt_count}} – return the preempt counter
: {{The Linux Kernel/source|kernel/Kconfig.preempt}} – preemption model configuration
:: {{The Linux Kernel/id|CONFIG_PREEMPT_NONE}} – no forced preemption for servers
:: {{The Linux Kernel/id|CONFIG_PREEMPT_VOLUNTARY}} – voluntary preemption for desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT}} – preemptible except for critical sections for low-latency desktops
:: {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} – real-time preemption for [[Embedded_Systems/Linux#Real-time|highly responsive applications]]
:: {{The Linux Kernel/id|CONFIG_PREEMPT_DYNAMIC}} – allows runtime switching of preemption model
::: /sys/kernel/debug/sched/preempt – shows and controls the active preemption model
=== sched_ext ===
Since version 6.12 the kernel supports {{The Linux Kernel/id|SCHED_EXT}} — an extensible scheduler class whose behavior is defined by a set of {{w|eBPF}} programs.
Any scheduling algorithm can be implemented on top of sched_ext, loaded and unloaded dynamically at runtime.
The system integrity is maintained no matter what the BPF scheduler does: the default scheduling behavior is restored on error or when a runnable task stalls.
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_SCHED_CLASS_EXT}}
: {{The Linux Kernel/source|kernel/sched/ext.c}} – extensible BPF scheduler class
: {{The Linux Kernel/id|sched_ext_ops}} – BPF scheduler operations
: {{The Linux Kernel/id|sched_ext_entity}} – per-task sched_ext data, embedded in {{The Linux Kernel/id|task_struct}}
👁 Examples
: {{The Linux Kernel/source|tools/sched_ext}} – in-tree example BPF schedulers
📖 References
: {{The Linux Kernel/doc|Extensible Scheduler Class|scheduler/sched-ext.html}}
: [https://github.com/sched-ext/scx sched-ext/scx] – production BPF schedulers
: [https://lwn.net/Kernel/Index/#Scheduler-BPF Scheduler BPF LWN]
=== Energy Aware Scheduling ===
🚀 advanced topic
Since version 5.0, Energy Aware Scheduling (EAS) gives the scheduler the ability to predict the impact of its decisions on the energy consumed by CPUs.
EAS relies on an Energy Model (EM) to select an energy efficient CPU for each task, with minimal impact on throughput.
EAS operates only on heterogeneous CPU topologies (such as ARM {{w|big.LITTLE}}) where the potential for energy savings is highest.
⚲ API
: /proc/sys/kernel/sched_energy_aware – enable or disable EAS
: {{The Linux Kernel/include|linux/energy_model.h}}
:: {{The Linux Kernel/id|em_perf_domain}} – performance domain descriptor
:: {{The Linux Kernel/id|em_cpu_get}} – get the EM for a given CPU
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_ENERGY_MODEL}}
: {{The Linux Kernel/id|find_energy_efficient_cpu}} – find most energy-efficient target CPU for a waking task
: {{The Linux Kernel/source|kernel/power/energy_model.c}} – CPU energy model framework
📖 References
: {{The Linux Kernel/doc|Energy Aware Scheduling|scheduler/sched-energy.html}}
: {{The Linux Kernel/doc|Energy Model of devices|power/energy-model.html}}
=== Wait queues ===
A ''wait queue'' in the kernel is a data structure that allows one or more processes to wait (sleep) until something of interest happens.
They are used throughout the kernel to wait for available memory, I/O completion, message arrival, and many other things.
In the early days of Linux, a wait queue was a simple list of waiting processes, but various scalability problems (including the {{w|thundering herd problem}}) have led to the addition of a fair amount of complexity since then.
⚲ API
{{The Linux Kernel/include|linux/wait.h}}
{{The Linux Kernel/id|wait_queue_head}} consists of double linked list of {{The Linux Kernel/id|wait_queue_entry}} and a spinlock.
Waiting for simple events:
: Use one of two methods for {{The Linux Kernel/id|wait_queue_head}} initialization:
:: {{The Linux Kernel/id|init_waitqueue_head}} initializes {{The Linux Kernel/id|wait_queue_head}} in function context
:: {{The Linux Kernel/id|DECLARE_WAIT_QUEUE_HEAD}} - actually defines {{The Linux Kernel/id|wait_queue_head}} in global context
: Wait alternatives:
:: {{The Linux Kernel/id|wait_event_interruptible}} - preferable wait
:: {{The Linux Kernel/id|wait_event_interruptible_timeout}}
:: {{The Linux Kernel/id|wait_event}} - uninterruptible wait. Can cause deadlock ⚠
: {{The Linux Kernel/id|wake_up}} etc
👁 For example usage see references to unique {{The Linux Kernel/id|suspend_queue}}.
Explicit use of add_wait_queue instead of simple wait_event for complex cases:
: {{The Linux Kernel/id|DECLARE_WAITQUEUE}} actually defines wait_queue_entry with {{The Linux Kernel/id|default_wake_function}}
: {{The Linux Kernel/id|add_wait_queue}} inserts process in the first position of a wait queue
: {{The Linux Kernel/id|remove_wait_queue}}
⚙️ Internals
: {{The Linux Kernel/id|___wait_event}}
: {{The Linux Kernel/id|__add_wait_queue}}
: {{The Linux Kernel/id|__wake_up_common}}, {{The Linux Kernel/id|try_to_wake_up}}
: {{The Linux Kernel/source|kernel/sched/wait.c}} – wait queue implementation
Simple wait queues – simplified version with raw spinlock, suitable for RT and restricted contexts:
: {{The Linux Kernel/include|linux/swait.h}}
:: {{The Linux Kernel/id|swait_queue_head}}, {{The Linux Kernel/id|swait_queue}}
: {{The Linux Kernel/source|kernel/sched/swait.c}} – simple wait queue implementation
📖 References
: {{The Linux Kernel/doc|Wait queues and Wake events|driver-api/basics.html#wait-queues-and-wake-events}}
=== Real-time ===
{{:The Linux Kernel/Multitasking/Real-time}}
== Synchronization ==
Thread {{w|Synchronization (computer science)|synchronization}} is defined as a mechanism which ensures that two or more concurrent processes or threads do not simultaneously execute some particular program segment known as {{w|mutual exclusion}} (mutex).
When one thread starts executing the critical section (serialized segment of the program) the other thread should wait until the first thread finishes.
If proper synchronization techniques are not applied, it may cause a race condition where, the values of variables may be unpredictable and vary depending on the timings of context switches of the processes or threads.
=== User space synchronization ===
==== POSIX Timers ====
⚲ APIs
: {{The Linux Kernel/man|2|timer_create}} – creates a POSIX timer
: {{The Linux Kernel/man|2|timer_settime}} – starts or modifies a timer
: {{The Linux Kernel/man|2|timer_gettime}} – retrieves the remaining time of a timer
: {{The Linux Kernel/man|2|timer_delete}} – deletes a POSIX timer
: {{The Linux Kernel/man|2|clock_nanosleep}} – suspends execution for a specified time
⚙️ Internals
: {{The Linux Kernel/include|linux/posix-timers.h}}
: {{The Linux Kernel/source|kernel/time/itimer.c}} – interval timer (setitimer/getitimer)
: {{The Linux Kernel/source|kernel/time/posix-timers.c}} – POSIX clock and timer operations
: {{The Linux Kernel/source|kernel/time/posix-cpu-timers.c}} – per-process/thread CPU timers
:: {{The Linux Kernel/id|posix_cpu_timer_set}} – function setting up CPU timers
==== Futex ====
A {{The Linux Kernel/man|2|futex}} ↪ {{The Linux Kernel/id|do_futex}} (short for "Fast User space muTex") is a kernel system call that programmers can use to implement basic locking, or as a building block for higher-level locking abstractions such as semaphores and POSIX mutexes or condition variables.
A futex consists of a kernel space ''wait queue'' that is attached to an aligned integer in user space.
Multiple processes or threads operate on the integer entirely in user space (using atomic operations to avoid interfering with one another), and only resort to relatively expensive system calls to request operations on the wait queue (for example to wake up waiting processes, or to put the current process on the wait queue).
A properly programmed futex-based lock will not use system calls except when the lock is contended; since most operations do not require arbitration between processes, this will not happen in most cases.
The basic operations of futexes are based on only two central operations {{The Linux Kernel/id|futex_wait}} and {{The Linux Kernel/id|futex_wake}} though implementation has more operations for more specialized cases.
: WAIT (''addr'', ''val'') checks if the value stored at the address ''addr'' is ''val'', and if it is puts the current thread to sleep.
: WAKE (''addr'', ''val'') wakes up ''val'' number of threads waiting on the address ''addr''.
⚲ API
: {{The Linux Kernel/include|uapi/linux/futex.h}}
: {{The Linux Kernel/include|linux/futex.h}}
⚙️ Internals: {{The Linux Kernel/source|kernel/futex}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#futex stress-ng --futex]
📖 References
: {{w|Futex}}
: {{The Linux Kernel/man|7|futex}}
: {{The Linux Kernel/doc|Futex API reference|kernel-hacking/locking.html#futex-api-reference}}
: {{The Linux Kernel/ltp|kernel/syscalls|futex}}
==== File locking ====
⚲ API: {{The Linux Kernel/man|2|flock}}
==== Semaphore ====
💾 ''History: Semaphore is part of System V IPC {{The Linux Kernel/man|7|sysvipc}}''
⚲ API
: {{The Linux Kernel/man|2|semget}}
: {{The Linux Kernel/man|2|semctl}}
: {{The Linux Kernel/man|2|semop}}
⚙️ Internals: {{The Linux Kernel/source|ipc/sem.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#sem stress-ng --sem]
=== Kernel space synchronization ===
For kernel mode synchronization Linux provides three categories of locking primitives: sleeping, per CPU local locks and spinning locks.
==== Read-Copy-Update ====
Common mechanism to solve the readers–writers problem is the {{w|read-copy-update}} (''RCU'') algorithm.
Read-copy-update implements a kind of mutual exclusion that is wait-free (non-blocking) for readers, allowing extremely low overhead.
However, RCU updates can be expensive, as they must leave the old versions of the data structure in place to accommodate pre-existing readers.
⚲ The core API in {{The Linux Kernel/include|linux/rcupdate.h}} is quite small:
: {{The Linux Kernel/id|rcu_read_lock}} marks an RCU-protected data structure so that it won't be reclaimed for the full duration of that critical section.
: {{The Linux Kernel/id|rcu_read_unlock}} is used by a reader to inform the reclaimer that the reader is exiting an RCU read-side critical section. Note that RCU read-side critical sections may be nested and/or overlapping.
: {{The Linux Kernel/id|synchronize_rcu}} blocks until all pre-existing RCU read-side critical sections on all CPUs have completed. Note that <code>synchronize_rcu</code> will ''not'' necessarily wait for any subsequent RCU read-side critical sections to complete.
For example, consider the following sequence of events:
{| class="wikitable"
!
!CPU 0
!CPU 1
!CPU 2
|-
|1.
|rcu_read_lock()
|
|
|-
|2.
|
|enters synchronize_rcu()
|
|-
|3.
|
|
| rcu_read_lock()
|-
|4.
|rcu_read_unlock()
|
|
|-
|5.
|
|exits synchronize_rcu()
|
|-
|6.
|
|
|rcu_read_unlock()
|}
[[File:Rcu api.jpg|thumb|upright=2|RCU API communications between the reader, updater, and reclaimer]]
:Since <code>synchronize_rcu</code> is the API that must figure out when readers are done, its implementation is key to RCU. For RCU to be useful in all but the most read-intensive situations, <code>synchronize_rcu</code>'s overhead must also be quite small.
:Alternatively, instead of blocking, synchronize_rcu may register a callback to be invoked after all ongoing RCU read-side critical sections have completed. This callback variant is called {{The Linux Kernel/id|call_rcu}} in the Linux kernel.
: {{The Linux Kernel/id|rcu_assign_pointer}} - The updater uses this function to assign a new value to an RCU-protected pointer, in order to safely communicate the change in value from the updater to the reader. This function returns the new value, and also executes any {{w|Memory barrier}} instructions required for a given CPU architecture. Perhaps more importantly, it serves to document which pointers are protected by RCU.
: {{The Linux Kernel/id|rcu_dereference}} - The reader uses this function to fetch an RCU-protected pointer, which returns a value that may then be safely dereferenced. It also executes any directives required by the compiler or the CPU, for example, a volatile cast for gcc, a memory_order_consume load for C/C++11 or the memory-barrier instruction required by the old DEC Alpha CPU. The value returned by <code>rcu_dereference</code> is valid only within the enclosing RCU read-side critical section. As with <code>rcu_assign_pointer</code>, an important function of <code>rcu_dereference</code> is to document which pointers are protected by RCU.
The RCU infrastructure observes the time sequence of <code>rcu_read_lock</code>, <code>rcu_read_unlock</code>, <code>synchronize_rcu</code>, and <code>call_rcu</code> invocations in order to determine when (1) <code>synchronize_rcu</code> invocations may return to their callers and (2) <code>call_rcu</code> callbacks may be invoked.
Efficient implementations of the RCU infrastructure make heavy use of batching in order to amortize their overhead over many uses of the corresponding APIs.
⚲ API
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=rcu_nocbs%5B rcu_nocbs] – no-callback CPUs
: {{The Linux Kernel/include|linux/rcupdate.h}}
: {{The Linux Kernel/include|linux/rculist.h}} – RCU-protected linked list operations
⚙️ Internals
: {{The Linux Kernel/source|kernel/rcu}} – read-copy-update implementation
📖 References
: {{The Linux Kernel/doc|Avoiding Locks: Read Copy Update|kernel-hacking/locking.html?#avoiding-locks-read-copy-update}}
: {{The Linux Kernel/doc|RCU concepts|RCU}}
: [https://0xax.gitbooks.io/linux-insides/content/Initialization/linux-initialization-9.html RCU initialization]
📚 Further reading
: [https://lpc.events/event/18/contributions/1906/attachments/1590/3302/LPC-2024-Vienna.pdf Reduce synchronize_rcu() latency]
==== Sleeping locks ====
===== Mutexes =====
⚲ API
: {{The Linux Kernel/include|linux/mutex.h}}
: {{The Linux Kernel/include|linux/completion.h}}
: {{The Linux Kernel/id|mutex}} has owner and usage constraints, easier to debug than semaphore
:: {{The Linux Kernel/id|rt_mutex}} blocking mutual exclusion locks with priority inheritance (PI) support
:: {{The Linux Kernel/id|ww_mutex}} Wound/Wait mutexes: blocking mutual exclusion locks with deadlock avoidance
: {{The Linux Kernel/id|rw_semaphore}} readers–writer semaphores
: {{The Linux Kernel/id|percpu_rw_semaphore}}
: {{The Linux Kernel/id|completion}} - use completion for synchronization task with ISR and task or two tasks.
:: {{The Linux Kernel/id|wait_for_completion}}
:: {{The Linux Kernel/id|complete}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mutex stress-ng --mutex]
💾 ''Historical''
: {{The Linux Kernel/id|semaphore}} - use mutex instead semaphore if possible
: {{The Linux Kernel/include|linux/semaphore.h}}
: {{The Linux Kernel/include|linux/rwsem.h}}
📖 References
: {{The Linux Kernel/doc|Completions - “wait for completion” barrier APIs|scheduler/completion.html}}
: {{The Linux Kernel/doc|Mutex API reference|kernel-hacking/locking.html#mutex-api-reference}}
: [http://lwn.net/Articles/23993/ LWN: completion events]
==== per CPU local lock ====
On normal preemptible kernel local_lock calls {{The Linux Kernel/id|preempt_disable}}.
On RT preemptible kernel local_lock calls {{The Linux Kernel/id|migrate_disable}} and {{The Linux Kernel/id|spin_lock}}.
Any changes applied to spinlock_t also apply to local_lock.
⚲ API
: {{The Linux Kernel/include|linux/local_lock.h}}
:: {{The Linux Kernel/id|local_lock}}, {{The Linux Kernel/id|preempt_disable}}
:: {{The Linux Kernel/id|local_lock_irqsave}}, {{The Linux Kernel/id|local_irq_save}}
:: etc
📖 References
: {{The Linux Kernel/doc|local_lock|locking/locktypes.html#local-lock}}
: {{The Linux Kernel/doc|PREEMPT_RT caveats: spinlock_t, rwlock_t, migrate_disable and local_lock|locking/locktypes.html#spinlock-t-and-rwlock-t}}
: {{The Linux Kernel/doc|Proper locking under a preemptive kernel|locking/preempt-locking.html}}
: [https://lwn.net/Articles/828477/ Local locks in the kernel]
==== Spinning locks ====
===== {{w|Spinlock}}s =====
a ''spinlock'' is a lock which causes a thread trying to acquire it to simply wait in a loop ("spin") while repeatedly checking if the lock is available.
Since the thread remains active but is not performing a useful task, the use of such a lock is a kind of busy waiting.
Once acquired, spinlocks will usually be held until they are explicitly released, although in some implementations they may be automatically released if the thread being waited on (that which holds the lock) blocks, or "goes to sleep".
Spinlocks are commonly used inside kernels because they are efficient if threads are likely to be blocked for only short periods.
However, spinlocks become wasteful if held for longer durations, as they may prevent other threads from running and require rescheduling.
👁 For example {{The Linux Kernel/id|kobj_kset_join}} uses spinlock to protect assess to the linked list.
Enabling and disabling of kernel preemption replaced spinlocks on uniprocessor systems (disabled {{The Linux Kernel/id|CONFIG_SMP}}).
Most spinning locks becoming sleeping locks in the {{The Linux Kernel/id|CONFIG_PREEMPT_RT}} kernels.
⚲ API
: {{The Linux Kernel/include|linux/spinlock.h}}
:: {{The Linux Kernel/id|spinlock_t}}
:: {{The Linux Kernel/id|raw_spinlock_t}}
: {{The Linux Kernel/include|linux/bit_spinlock.h}}
:: {{The Linux Kernel/id|bit_spin_lock}}
📖 References
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-1.html Introduction to spinlocks]
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-2.html Queued spinlocks]
===== {{w|Seqlock}}s =====
A ''seqlock'' (short for "sequential lock") is a special locking mechanism used in Linux for supporting fast writes of shared variables between two parallel operating system routines.
It is a special solution to the readers–writers problem when the number of writers is small.
It is a reader-writer consistent mechanism which avoids the problem of writer starvation.
A {{The Linux Kernel/id|seqlock_t}} consists of storage for saving a sequence counter {{The Linux Kernel/id|seqcount_t}}/seqcount_spinlock_t in addition to a lock.
The lock is to support synchronization between two writers and the counter is for indicating consistency in readers.
In addition to updating the shared data, the writer increments the sequence counter, both after acquiring the lock and before releasing the lock.
Readers read the sequence counter before and after reading the shared data.
If the sequence counter is odd on either occasion, a writer had taken the lock while the data was being read and it may have changed.
If the sequence counters are different, a writer has changed the data while it was being read.
In either case readers simply retry (using a loop) until they read the same even sequence counter before and after.
⚲ API
: {{The Linux Kernel/id|seqlock_t}}
:: {{The Linux Kernel/id|DEFINE_SEQLOCK}}, {{The Linux Kernel/id|seqlock_init}}, {{The Linux Kernel/id|read_seqlock_excl}}, {{The Linux Kernel/id|write_seqlock}}
: {{The Linux Kernel/id|seqcount_t}}
:: {{The Linux Kernel/id|seqcount_init}}, {{The Linux Kernel/id|read_seqcount_begin}}, {{The Linux Kernel/id|read_seqcount_retry}}, {{The Linux Kernel/id|write_seqcount_begin}}, {{The Linux Kernel/id|write_seqcount_end}}
: {{The Linux Kernel/include|linux/seqlock.h}}
👁 Example: {{The Linux Kernel/id|mount_lock}}, defined in {{The Linux Kernel/source|fs/namespace.c}}
📖 References
: {{The Linux Kernel/doc|Sequence counters and sequential locks|locking/seqlock.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/linux-sync-6.html SeqLock]
==== Spinning or sleeping locks ====
:{| class="wikitable"
! !! normal !! on preempt RT
|-
| spinlock_t, || raw_spinlock_t || rt_mutex_base, rt_spin_lock, sleeping
|-
| rwlock_t || spinning || sleeping
|-
| local_lock || preempt_disable|| migrate_disable, rt_spin_lock, sleeping
|}
==== Low level ====
The compiler might optimize away or reorder writes to variables leading to unexpected behavior
when variables are accessed concurrently by multiple threads.
⚲ API
: {{The Linux Kernel/include|asm-generic/rwonce.h}} – prevent the compiler from merging or refetching reads or writes.
: {{The Linux Kernel/include|linux/compiler.h}}
:: {{The Linux Kernel/id|barrier}} – prevents the compiler from reordering instructions around the barrier
: {{The Linux Kernel/include|asm-generic/barrier.h}} – generic barrier definitions
: {{The Linux Kernel/source|arch/x86/include/asm/barrier.h}} – force strict CPU ordering
:: {{The Linux Kernel/id|mb}} – ensures that all memory operations before the barrier are completed before any memory operations after the barrier are started
⚙️ Internals
: {{The Linux Kernel/doc|Atomics|driver-api/basics.html#atomics}}
:: {{The Linux Kernel/include|linux/atomic.h}} – atomic operations wrapper
:: {{The Linux Kernel/include|asm-generic/atomic.h}}
:: {{The Linux Kernel/include|linux/atomic/atomic-instrumented.h}}
::: {{The Linux Kernel/id|atomic_dec_and_test}} ...
📚 Further reading
: {{w|Volatile_(computer_programming)#In_C_and_C++|volatile}} – prevents the compiler from optimizations
: {{w|Memory barrier}} – enforces an ordering constraint on memory operations
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Lock stress-ng --lockbus]
==== ... ====
⚙️ Locking internals
: {{The Linux Kernel/include|linux/lockdep.h}} – runtime locking correctness validator
: {{The Linux Kernel/include|linux/debug_locks.h}}
: {{The Linux Kernel/source|lib/locking-selftest.c}} – locking correctness self-tests
: {{The Linux Kernel/source|kernel/locking}} – locking primitives
: {{The Linux Kernel/id|mutex_waiter}}, {{The Linux Kernel/id|timer_list}}, {{The Linux Kernel/id|wait_queue_head_t}}
:: {{The Linux Kernel/source|kernel/locking/locktorture.c}} – module-based torture test facility for locking
📖 Locking references
: {{The Linux Kernel/doc|locking|locking}}
:: {{The Linux Kernel/doc|Lock types and their rules|locking/locktypes.html}}
::: 😴 {{The Linux Kernel/doc|sleeping locks|locking/locktypes.html#sleeping-locks}}
:::: {{The Linux Kernel/id|mutex}}, {{The Linux Kernel/id|rt_mutex}}, {{The Linux Kernel/id|semaphore}}, {{The Linux Kernel/id|rw_semaphore}}, {{The Linux Kernel/id|ww_mutex}}, {{The Linux Kernel/id|percpu_rw_semaphore}}
:::: on preempt RT: local_lock, spinlock_t, rwlock_t
::: 😵💫 {{The Linux Kernel/doc|spinning locks|locking/locktypes.html#spinning-locks}}:
:::: raw_spinlock_t, bit spinlocks
:::: on non preempt RT: spinlock_t, rwlock_t
: {{The Linux Kernel/doc|Unreliable Guide To Locking|kernel-hacking/locking.html}}
: [https://0xax.gitbooks.io/linux-insides/content/SyncPrim/ Synchronization primitives]
=== Time ===
⚲ UAPI
: {{The Linux Kernel/include|uapi/linux/time.h}}
:: {{The Linux Kernel/id|timespec}} – nanosecond resolution
:: {{The Linux Kernel/id|timeval}} – microsecond resolution
:: {{The Linux Kernel/id|timezone}}
:: ...
: {{The Linux Kernel/include|uapi/linux/time_types.h}}
:: {{The Linux Kernel/id|__kernel_timespec}} – nanosecond resolution, used in syscalls
:: ...
⚲ API
: {{The Linux Kernel/include|linux/delay.h}} – busy-wait delay functions for timing control
: {{The Linux Kernel/include|linux/sched/clock.h}}
:: {{The Linux Kernel/id|sched_clock}}
:: ...
: {{The Linux Kernel/include|linux/time.h}}
:: {{The Linux Kernel/id|tm}}
:: {{The Linux Kernel/id|get_timespec64}}
:: ...
: {{The Linux Kernel/include|linux/ktime.h}}
:: {{The Linux Kernel/id|ktime_t}} – nanosecond scalar representation for kernel time values
:: {{The Linux Kernel/id|ktime_sub}}
:: ...
: {{The Linux Kernel/include|linux/timekeeping.h}}
:: {{The Linux Kernel/id|ktime_get}}, {{The Linux Kernel/id|ktime_get_ns}}
:: {{The Linux Kernel/id|ktime_get_real}}
:: ...
: {{The Linux Kernel/include|linux/time64.h}}
:: {{The Linux Kernel/id|timespec64}}
:: {{The Linux Kernel/id|time64_t}}
:: {{The Linux Kernel/id|ns_to_timespec64}}
:: {{The Linux Kernel/id|timespec64_sub}}
:: {{The Linux Kernel/id|ktime_to_timespec64}}
:: ...
: {{The Linux Kernel/include|uapi/linux/rtc.h}}
: {{The Linux Kernel/include|linux/jiffies.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time}} – timekeeping, timers and clocks
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Timer stress-ng --timer],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#High --hrtimers]
📖 References
: {{The Linux Kernel/doc|ktime accessors|core-api/timekeeping.html}}
: {{The Linux Kernel/doc|Clock sources, Clock events, sched_clock() and delay timers|timers/timekeeping.html}}
: {{The Linux Kernel/doc|Time and timer routines|driver-api/basics.html#time-and-timer-routines}}
: {{w|Year 2038 problem}}
{{:The Linux Kernel/Multitasking/CPU}}
{{BookCat}}
sf092b5irrnoo0fb463o26l5o7vuw07
The Linux Kernel/Memory
0
226983
4641520
4641111
2026-06-28T15:11:34Z
Conan
3188
Memory: mm/memory.c, rmap, memblock, compaction, madvise, readahead, zswap, percpu, shmem, ksm, userfaultfd
4641520
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
poir3xktok23jdbnj7rn8n7it37bvil
4641524
4641520
2026-06-28T15:27:27Z
Conan
3188
Memory: highmem.h header reference
4641524
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
9donozd5wzm0d8szi3tl1m7elbm6wto
4641533
4641524
2026-06-28T15:44:51Z
Conan
3188
Memory: TLB flush and mmu_gather reference
4641533
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
cgqvq8u7vsl0kc2koznmf4jqhr2gew5
4641538
4641533
2026-06-28T16:08:22Z
Conan
3188
Memory: mremap, msync, posix_fadvise syscalls
4641538
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
g8ivrjaoofc0j53ko0k26kil7eusukj
4641574
4641538
2026-06-28T19:52:56Z
Conan
3188
Memory: stress-ng stressors with man page links
4641574
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
🔨 [https://wiki.ubuntu.com/Kernel/Reference/stress-ng stress-ng] stressors:
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#V vm],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#M mmap],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#B brk],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#B bigheap],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#M mlock],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#M madvise],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#N numa],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#U userfaultfd],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#O oom-pipe]
{{BookCat}}
jzw7bngfvouriwbhfgyveecyhv76etm
4641575
4641574
2026-06-28T19:59:27Z
Conan
3188
Memory: stress-ng stressors with man page links
4641575
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#brk stress-ng --brk],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#bigheap --bigheap],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#m --vm],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#mmap --mmap]
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#madvise stress-ng --madvise]
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#mlock stress-ng --mlock]
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#oom stress-ng --oom-pipe]
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#userfaultfd stress-ng --userfaultfd]
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#numa stress-ng --numa]
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
35fnrmlihr5ni2dipm2dagnvx3d4u0z
4641576
4641575
2026-06-28T20:09:19Z
Conan
3188
fix stress-ng bigheap anchor #B
4641576
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#brk stress-ng --brk],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#B --bigheap],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#m --vm],
[https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#mmap --mmap]
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#madvise stress-ng --madvise]
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#mlock stress-ng --mlock]
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#oom stress-ng --oom-pipe]
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#userfaultfd stress-ng --userfaultfd]
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
🔨 [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#numa stress-ng --numa]
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
6qwe59zw7m11w5zc1ftoavsz9qi7yu3
4641577
4641576
2026-06-28T20:18:49Z
Conan
3188
stress-ng links: resolute URLs, stressor-name anchors
4641577
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#brk stress-ng --brk],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#bigheap --bigheap],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#vm --vm],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mmap --mmap]
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#madvise stress-ng --madvise]
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mlock stress-ng --mlock]
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#oom stress-ng --oom-pipe]
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#userfaultfd stress-ng --userfaultfd]
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#numa stress-ng --numa]
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
hdbznbjgqmsoscg9vrcszmmomfxtbrc
4641578
4641577
2026-06-28T20:22:21Z
Conan
3188
fix stress-ng anchors to resolute section headings
4641578
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Brk stress-ng --brk],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Big --bigheap],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Memory~20 --vm],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Memory~9 --mmap]
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#madvise stress-ng --madvise]
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mlock stress-ng --mlock]
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#oom stress-ng --oom-pipe]
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#userfaultfd stress-ng --userfaultfd]
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#numa stress-ng --numa]
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
0ac8rmf5iphjjugnf3el9qafxnamkgu
4641611
4641578
2026-06-29T06:36:14Z
Conan
3188
fix oom-pipe anchor to #Large
4641611
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Brk stress-ng --brk],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Big --bigheap],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Memory~20 --vm],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Memory~9 --mmap]
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#madvise stress-ng --madvise]
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|enable_swap_slots_cache}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mlock stress-ng --mlock]
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Large stress-ng --oom-pipe]
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#userfaultfd stress-ng --userfaultfd]
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#numa stress-ng --numa]
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
t6egge2293mi031fyhhkypldx68zx6l
4641647
4641611
2026-06-29T08:52:51Z
Conan
3188
fix swapon handler: enable_swap_slots_cache -> sys_swapon
4641647
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Memory functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#bfd" |memory
|-
| bgcolor="#aed" |[[#Processes|Processes]]
|-
| bgcolor="#9dd" |[[#Virtual_memory|virtual memory]]
|-
| bgcolor="#aca" |[[#Memory_mapping|memory mapping]]
|-
| bgcolor="#acb" | [[#Swap|demand paging and swap]]
|-
| bgcolor="#8b9" |[[#Logical_memory|logical memory]]
|-
| bgcolor="#7a7" |[[#Page Allocator|Page Allocator]]
|-
| bgcolor="#686" |[[#Pages|pages]]
|}
The kernel has full access to the system's memory and allows processes to {{w|Process isolation|safely access}} this memory as they require it.
Often the first step in doing this is {{w|Virtual address space|virtual addressing}}, usually achieved by paging and/or segmentation.
Virtual addressing allows the kernel to make a given {{w|physical address}} appear to be another address, the virtual address.
Virtual address spaces may be different for different processes; the memory that one process accesses at a particular (virtual) address may be different memory from what another process accesses at the same address.
This allows every program to behave as if it is the only one (apart from the kernel) running and thus prevents applications from crashing each other.
On many systems, a program's virtual address may refer to data which is not currently in memory.
The layer of indirection provided by virtual addressing allows the operating system to use other data stores, like a hard drive, to store what would otherwise have to remain in main {{w|random-access memory}} (RAM).
As a result, operating systems can allow programs to use more memory than the system has physically available.
When a program needs data which is not currently in RAM, the {{w|Memory management unit|MMU}} {{w|Page fault|signals}} to the kernel that this has happened, and the kernel responds by writing the contents of an inactive memory block to disk (if necessary) and replacing it with the data requested by the program.
The program can then be resumed from the point where it was stopped.
This scheme is generally known as {{w|demand paging}}.
Virtual addressing also allows creation of virtual partitions of memory in two disjointed areas, one being reserved for the kernel (kernel space) and the other for the applications (user space).
The applications are not permitted by the processor to address kernel memory, thus preventing an application from damaging the running kernel.
This fundamental partition of memory space has contributed much to the current designs of actual general-purpose kernels and is almost universal in such systems, Linux being one of them.
⚲ Shell interface
: cat /proc/meminfo
: {{The Linux Kernel/man|1|free}}
: {{The Linux Kernel/man|8|vmstat}}
{{:The Linux Kernel/Processes}}
== Memory management API ==
: ⚲ {{The Linux Kernel/man|2|brk}} ↪ {{The Linux Kernel/id|sys_brk}}, {{The Linux Kernel/id|do_brk_flags}} dynamically changes data segment size of the calling process.
The change is made by resetting the <u>program break</u> of the process, which determines the maximum space that can be allocated.
The program break is the address of the first location beyond the current end of the data region, and determines the maximum space that can be allocated by the process.
The amount of available space increases as the break value increases.
The added available space is initialized to a value of zero.
: ⚲ {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} maps files or devices into memory.
It is a method of memory-mapped file I/O.
It naturally implements demand paging, because file contents are not read from disk initially and do not use physical RAM at all.
The actual reads from disk are performed in a "lazy" manner, after a specific location is accessed.
After the memory is no longer needed it is important to {{The Linux Kernel/man|2|munmap}} the pointers to it.
Protection information can be managed using {{The Linux Kernel/man|2|mprotect}} ↪ {{The Linux Kernel/id|do_mprotect_pkey}} and special treatment can be enforced using {{The Linux Kernel/man|2|madvise}} ↪ {{The Linux Kernel/id|do_madvise}}.
In Linux, {{The Linux Kernel/man|2|mmap}} can create several types of mappings, such as ''anonymous mappings'', ''shared mappings'' and ''private mappings''.
Using the <code>MAP_ANONYMOUS</code> flag <code>mmap()</code> can map a specific area of the process's virtual memory not backed by any file, whose contents are initialized to zero.
These functions are typically called from a higher-level memory management library function such as C standard library {{The Linux Kernel/man|3|malloc}} or [[w:new and delete (C++)|C++ new operator]].
⚲ API
: {{The Linux Kernel/include|linux/uaccess.h}} – user-space memory access and validation helpers
: {{The Linux Kernel/include|linux/mm.h}} – memory management declarations and page handling APIs
: {{The Linux Kernel/include|linux/slab.h}} – memory allocation APIs for slab and kmalloc systems
💾 ''History: Two basic related to memory management system calls <code>brk</code> and <code>mmap</code> Linux inherits from Unix.''
''BTW: On Linux, {{The Linux Kernel/man|2|sbrk}} is not a separate system call, but a C library function that also calls to {{The Linux Kernel/id|sys_brk}} and keeps some internal state to return the previous break value.''
📚 References
: {{The Linux Kernel/doc|Memory Management APIs|core-api/mm-api.html}}
: {{The Linux Kernel/doc|x86_64 Memory Management|x86/x86_64/mm.html}}
: {{w|sbrk}}
: {{w|mmap}}
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
⚙️ Internals:
: '''{{The Linux Kernel/id|sys_brk}}''' ↯ call hierarchy:
: {{The Linux Kernel/id|do_brk_flags}}
:: {{The Linux Kernel/id|vm_area_alloc}}
::: {{The Linux Kernel/id|kmem_cache_alloc}}
:::: {{The Linux Kernel/id|kmem_cache_alloc_lru}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Brk stress-ng --brk],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Big --bigheap],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Memory~20 --vm],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Memory~9 --mmap]
== Virtual memory ==
🔧 TODO:
{{w|Virtual memory|Virtually contiguous memory}} on top of physical and [[#Swap|swapped]] memory pages.
🗝️ Acronyms:
: VPFN - Virtual Page Frame Number
: PFN - Physical Page Frame Number
: pgd - Page Directory
: pmd - Page Middle Directory
: pud - Page Upper Directory
: pte - {{w|Page table}} Entry
: VMA - Virtual Memory Area, see {{The Linux Kernel/id|vm_area_struct}}
: TLB - {{w|Translation Lookaside Buffer}}
: MMU - {{w|Memory Management Unit}}
⚲ API:
: {{The Linux Kernel/include|linux/vmalloc.h}}
: {{The Linux Kernel/id|vmalloc}} {{The Linux Kernel/id|vfree}}
: {{The Linux Kernel/include|linux/cleanup.h}} – scope-based cleanup helpers
:: {{The Linux Kernel/id|scoped_guard}}
: /proc/vmallocinfo
⚙️ Internals:
: {{The Linux Kernel/id|vm_struct}}
: {{The Linux Kernel/id|virt_to_page}}
: {{The Linux Kernel/id|vmalloc_init}}
: {{The Linux Kernel/id|find_vma}}
: {{The Linux Kernel/source|mm/vmalloc.c}} – virtually contiguous memory allocator
📚 References
: {{The Linux Kernel/doc|Virtually Contiguous Mappings|core-api/mm-api.html#virtually-contiguous-mappings}}
: {{The Linux Kernel/doc|Page Tables|mm/page_tables.html}}
: {{The Linux Kernel/doc|Scope-based Cleanup Helpers|core-api/cleanup.html}}
== Data types ==
=== Pointers and addresses ===
Kernel-specific address types, in addition to common C pointers.
: <big>unsigned long</big> – used to store addresses that are not intended to be dereferenced by the user
: {{The Linux Kernel/id|uintptr_t}} – to be used in ioctl
: {{The Linux Kernel/id|phys_addr_t}} – physical address
: {{The Linux Kernel/id|dma_addr_t}} – DMA address
📚 Further reading
: {{The Linux Kernel/doc|(How to avoid) Botching up ioctls|process/botching-up-ioctls.html}}
: [https://unix.org/whitepapers/64bit.html Data Size Neutrality and 64-bit Support]
=== Other types ===
⚲ API
: {{The Linux Kernel/include|linux/types.h}} – fixed-width and kernel-specific type definitions
: {{The Linux Kernel/include|linux/string.h}} – standard string manipulation functions
: bit operations
:: {{The Linux Kernel/include|linux/bitfield.h}} – defining and extracting bitfield values
:: {{The Linux Kernel/include|linux/bitops.h}} – atomic and non-atomic bit manipulation operations
:: {{The Linux Kernel/include|linux/bitmap.h}} – bit arrays that consume one or more unsigned longs
:: {{The Linux Kernel/include|linux/sbitmap.h}} – fast and scalable bitmaps
: {{The Linux Kernel/include|linux/kref.h}}
: {{The Linux Kernel/include|acpi/actypes.h}} – common data types for the entire ACPI subsystem
:: {{The Linux Kernel/include|linux/list.h}} – circular doubly linked list implementation
::: {{The Linux Kernel/id|list_head}} – common double linked list
::: {{The Linux Kernel/id|list_add}} ...
:: {{The Linux Kernel/include|linux/klist.h}} – some {{The Linux Kernel/id|klist_node}}->{{The Linux Kernel/id|kref}} helpers
::: {{The Linux Kernel/id|klist_add_tail}} ...
: {{The Linux Kernel/include|linux/kobject.h}}
: {{The Linux Kernel/include|linux/circ_buf.h}}
: {{The Linux Kernel/include|linux/kfifo.h}} – generic kernel FIFO
:: {{The Linux Kernel/id|kfifo_in}} ...
: {{The Linux Kernel/include|linux/rbtree.h}} – Red-black trees
:: {{The Linux Kernel/id|rb_node}}
: {{The Linux Kernel/include|linux/scatterlist.h}}
:: {{The Linux Kernel/id|scatterlist}}
:: 👁 Example: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/include|linux/idr.h}} – ID allocation
: {{The Linux Kernel/include|linux/container_of.h}}
📖 References
: {{The Linux Kernel/doc|List Management Functions|core-api/kernel-api.html#list-management-functions}}
: {{The Linux Kernel/doc|FIFO Buffer|core-api/kernel-api.html#fifo-buffer}}
: {{The Linux Kernel/doc|Data structures and low-level utilities|core-api#data-structures-and-low-level-utilities}}
:: {{The Linux Kernel/doc|Everything you never wanted to know about kobjects, ksets, and ktypes|core-api/kobject.html}}
:: {{The Linux Kernel/doc|Adding reference counters (krefs) to kernel objects|core-api/kref.html}}
:: {{The Linux Kernel/doc|Generic Associative Array Implementation|core-api/assoc_array.html}}
:: {{The Linux Kernel/doc|XArray|core-api/xarray.html}}
:: {{The Linux Kernel/doc|ID Allocation|core-api/idr.html}}
:: {{The Linux Kernel/doc|Circular Buffers|core-api/circular-buffers.html}}
:: {{The Linux Kernel/doc|Red-black Trees (rbtree) in Linux|core-api/rbtree.html}}
:: {{The Linux Kernel/doc|Generic radix trees/sparse arrays|core-api/generic-radix-tree.html}}
:: {{The Linux Kernel/doc|Generic bitfield packing and unpacking functions|core-api/packing.html}}
:: {{The Linux Kernel/doc|How to access I/O mapped memory from within device drivers|core-api/bus-virt-phys-mapping.html}}
:: {{The Linux Kernel/doc|this_cpu operations|core-api/this_cpu_ops.html}}
:: {{The Linux Kernel/doc|The errseq_t datatype|core-api/errseq.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/DataStructures/ Data Structures in the Linux Kernel]
: https://kernelnewbies.org/InternalKernelDataTypes
== Memory mapping ==
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|mmap}} ↪ {{The Linux Kernel/id|ksys_mmap_pgoff}} ↪ {{The Linux Kernel/id|do_mmap}}
: {{The Linux Kernel/man|2|mprotect}}
: {{The Linux Kernel/man|2|mmap2}}
: {{The Linux Kernel/man|2|mincore}}
: {{The Linux Kernel/man|2|mremap}} – remap virtual memory address
: {{The Linux Kernel/man|2|msync}} – synchronize memory-mapped file with storage
: {{The Linux Kernel/man|2|posix_fadvise}} – predeclare access pattern for file data
: {{The Linux Kernel/include|linux/mm_types.h}} – {{The Linux Kernel/id|mm_struct}}, {{The Linux Kernel/id|vm_area_struct}}
: {{The Linux Kernel/include|linux/mm.h}}
: {{The Linux Kernel/id|remap_pfn_range}}
: {{The Linux Kernel/id|SetPageReserved}}, {{The Linux Kernel/id|ClearPageReserved}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/mmap.c}} – memory mapping implementation
: {{The Linux Kernel/source|mm/madvise.c}} – {{The Linux Kernel/man|2|madvise}} memory usage hints
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#madvise stress-ng --madvise]
📚 References:
: {{w|mmap}}
: {{The Linux Kernel/doc|Maple Tree|core-api/maple_tree.html}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html Memory mapping, linux-kernel-labs]
=== vDSO ===
{{w|VDSO}} (virtual Dynamic Shared Object) is a kernel-mapped page in every process that allows userspace to call certain system functions (clock_gettime, gettimeofday) without a syscall.
The kernel updates the vDSO data page on every timekeeping tick via {{The Linux Kernel/id|update_vsyscall}}.
⚲ API
: {{The Linux Kernel/man|7|vdso}}
: {{The Linux Kernel/include|vdso/datapage.h}} – {{The Linux Kernel/id|vdso_data}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/vsyscall.c}} – vDSO time data updates
: {{The Linux Kernel/source|arch/x86/entry/vdso}} – x86 vDSO implementation
📖 References
: {{The Linux Kernel/doc|vDSO ABI|admin-guide/abi-stable.html#vdso}}
== Swap ==
🔧 TODO
⚲ API:
: cat /proc/sys/vm/swappiness ↪ {{The Linux Kernel/id|vm_swappiness}}
: {{The Linux Kernel/include|linux/swap.h}}
: {{The Linux Kernel/man|2|swapon}} ↪ {{The Linux Kernel/id|sys_swapon}}
: {{The Linux Kernel/man|2|swapoff}}
: {{The Linux Kernel/man|2|mlock}} ↪ {{The Linux Kernel/id|do_mlock}}
: {{The Linux Kernel/man|2|shmctl}} ↪ {{The Linux Kernel/id|shmctl_do_lock}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/swapfile.c}} – swap area management
: {{The Linux Kernel/source|mm/vmscan.c}} – page reclaim and scanning
: {{The Linux Kernel/source|mm/mlock.c}} – memory locking
: {{The Linux Kernel/id|VM_LOCKED}}
: {{The Linux Kernel/id|swap_info_struct}}, {{The Linux Kernel/id|si_swapinfo}}, {{The Linux Kernel/id|swap_info}}
: {{The Linux Kernel/id|handle_pte_fault}} ↪ {{The Linux Kernel/id|do_swap_page}}
: {{The Linux Kernel/id|wakeup_kswapd}} ↪ {{The Linux Kernel/id|kswapd}}
: {{The Linux Kernel/source|mm/readahead.c}} – page readahead for sequential file access
: {{The Linux Kernel/include|linux/zswap.h}}, {{The Linux Kernel/source|mm/zswap.c}} – compressed swap cache
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#mlock stress-ng --mlock]
📚 References:
: {{w|Memory_paging#Linux|Memory paging}}
: https://wiki.archlinux.org/title/swap
== Logical memory ==
⚲ {{The Linux Kernel/id|kmalloc}} is the normal method of allocating memory in the kernel for objects smaller than the page size.
It is defined in {{The Linux Kernel/include|linux/slab.h}}.
The first argument ''size'' is the size (in bytes) of the block of memory to be allocated.
The second argument ''flags'' are the allocation flags or ''GFP flags'', a set of macros that the caller provides to control the type of requested memory.
The most commonly used values for ''flags'' are GFP_KERNEL and GFP_ATOMIC, but there is more to be considered.
Memory-allocation requests in the kernel are always qualified by a set of ''GFP flags'' ("GFP" initially came from "get free page") describing what can and cannot be done to satisfy the request.
The most commonly used flags are GFP_ATOMIC and GFP_KERNEL, though they are actually built up from lower-level flags.
The full set of flags is huge; they can be found in the {{The Linux Kernel/include|linux/gfp.h}} header file.
⚲ API:
: ↯ {{w|RAII}} allocation functions hierarchy from {{The Linux Kernel/include|linux/device.h}}:
:: {{The Linux Kernel/id|devm_kcalloc}} - zeroed array
::: {{The Linux Kernel/id|devm_kmalloc_array}}
:::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
:: {{The Linux Kernel/id|devm_kzalloc}} - zeroed allocation
::: {{The Linux Kernel/id|devm_kmalloc}} - common allocation
: Classic direct API:
:: {{The Linux Kernel/include|linux/slab.h}}
:: {{The Linux Kernel/id|kmalloc}}, {{The Linux Kernel/id|kfree}}
=== Slab allocation ===
{{w|Slab allocation}} is a memory management algorithm intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type.
''' Basics '''
''This section is about the SLUB allocator implementation''
A slab can be thought of as an array of objects of certain type or with the same size, spanning through one or more contiguous pages of memory; for example, the slab named "task_struct" holds objects of <code>struct task_struct</code> type, used by the scheduling subsystem.
Other slabs store objects used by other subsystems, and there is also slabs for dynamic allocations inside the kernel, such as the "kmalloc-64" slab that holds up to 64-byte chunks requested via kmalloc() calls.
In a slab, each object can be allocated and freed separately.
The primary motivation for slab allocation is that the initialization and destruction of kernel data objects can actually outweigh the cost of allocating memory for them.
As object creation and deletion are widely employed by the kernel, overhead costs of initialization can result in significant performance drops.
The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.
With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated.
The slab allocator keeps track of these chunks, known as caches {{The Linux Kernel/id|kmalloc_caches}},
so that when a request to allocate memory for a data object of a certain type is received, it can instantly satisfy the request with an already allocated slot via {{The Linux Kernel/id|slab_alloc_node}}.
Deallocation of the object with {{The Linux Kernel/id|kfree}} does not free up the memory,
but only opens a slot which is returned to the slab allocator's free list.
The next call to allocate memory of the same size will return the now unused memory slot.
See {{The Linux Kernel/id|slab_alloc_node}}/{{The Linux Kernel/id|__slab_alloc_node}}/{{The Linux Kernel/id|___slab_alloc}}.
This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.
In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks.
Slab allocation provides a kind of front-end to the zoned buddy allocator for those sections of the kernel that require more flexible memory allocation than the standard 4KB page size.
⚲ Interface:
: sudo cat /proc/slabinfo
: {{The Linux Kernel/include|linux/slab.h}}
: {{The Linux Kernel/id|kmem_cache_alloc}}, {{The Linux Kernel/id|kmem_cache_free}}
: {{The Linux Kernel/man|1|slabtop}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/slab_common.c}} – slab allocator common code
: {{The Linux Kernel/id|mm_init}} is called from {{The Linux Kernel/id|start_kernel}}
:: {{The Linux Kernel/id|kmem_cache_init}}
::: {{The Linux Kernel/id|create_kmalloc_caches}}
: {{The Linux Kernel/id|kasan_slab_alloc}}
''' SLUB allocator ''' – default Unqueued allocator
{{w|SLUB (software)|SLUB}} is the iteration of the original SLAB allocator that replaced it and became the Linux default allocator since 2.6.23.
⚙️ Internals: {{The Linux Kernel/source|mm/slub.c}}
📚 References:
: {{The Linux Kernel/id|CONFIG_SLUB}}
💾 ''Historical: SLOB (Simple List Of Blocks) allocator for embedded devices was removed in kernel 6.4.''
''SLAB allocator, the original slab allocation implementation based on Jeff Bonwick's 1994 paper, was removed in kernel 6.8.''
''SLUB is now the only slab allocator in the kernel.''
<hr>
''' Per-CPU allocator '''
: {{The Linux Kernel/include|linux/percpu.h}}, {{The Linux Kernel/source|mm/percpu.c}} – per-CPU memory areas, used by slab and counters
📚 References for Slab allocation:
: {{The Linux Kernel/doc|KASAN - KernelAddressSANitizer|dev-tools/kasan.html}} - dynamic memory safety error detector designed to find out-of-bound and use-after-free bugs
: [https://www.youtube.com/watch?v=h0VMLXavx30 <nowiki>Video "SL[AUO]B: Kernel memory allocator design and philosophy"</nowiki>] Christopher Lameter (Linux.conf.au 2015 conference) [http://lca2015.linux.org.au/slides/167/slaballocators-auckland-2015.pdf Slides]
=== Page Allocator ===
The page allocator (or "zoned buddy allocator") is a low-level allocator that deals with physical memory.
It delivers physical pages (usually with a size of 4096 bytes) of free memory to high-level memory consumers such as the slab allocators and <code>kmalloc()</code>.
As the ultimate source of memory in the system, the page allocator must ensure that memory is always available, since a failure providing memory to a critical kernel subsystem can lead to a general system failure or a kernel panic.
The page allocator divides physical memory into "zones", each of which corresponds to {{The Linux Kernel/id|zone_type}} with specific characteristics.
ZONE_DMA contains memory at the bottom of the address range for use by severely challenged devices, for example, while {{The Linux Kernel/id|ZONE_NORMAL}} may contain most memory on the system. 32-bit systems have a ZONE_HIGHMEM for memory that is not directly mapped into the kernel's address space.
Depending on the characteristics of any given allocation request, the page allocator will search the available zones in a specific priority order.
For the curious, <code>/proc/zoneinfo</code> gives a lot of information about the zones in use on any given system.
Within a zone, memory is grouped into ''page blocks'', each of which can be marked with a ''migration type'' - {{The Linux Kernel/id|migratetype}} describing how the block should be allocated.
⚲ API:
: cat /proc/buddyinfo
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|alloc_page}}
: {{The Linux Kernel/id|devm_get_free_pages}} - {{w|RAII}} function, ↯ hierarchy of it:
:: {{The Linux Kernel/id|__get_free_pages}}
::: {{The Linux Kernel/id|alloc_pages}}
:::: {{The Linux Kernel/id|alloc_pages_node}}
::::: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
⚙️ Internals:
: {{The Linux Kernel/id|build_all_zonelists}} is called from {{The Linux Kernel/id|start_kernel}}, ↯ call hierarchy:
:: {{The Linux Kernel/id|build_all_zonelists_init}}
::: {{The Linux Kernel/id|__build_all_zonelists}}
:::: {{The Linux Kernel/id|build_zonelists}}
: {{The Linux Kernel/id|__alloc_pages}} - the 'heart' of the zoned buddy allocator
: struct {{The Linux Kernel/id|zone}}
:: {{The Linux Kernel/id|free_area}}
: {{The Linux Kernel/source|mm/mmzone.c}} – memory zone helpers
: {{The Linux Kernel/source|mm/page_alloc.c}} – buddy page allocator
📚 References:
: {{The Linux Kernel/doc|Get Free Page flags|core-api/memory-allocation.html}}
: {{w|Buddy memory allocation}}
: {{w|Page replacement algorithm}}
=== OOM killer ===
The {{w|Out of memory|Out-Of-Memory}} killer is invoked when the kernel cannot satisfy a memory allocation and all reclaim attempts have failed.
It selects a process to kill based on a badness score to free memory and keep the system running.
⚲ API:
: /proc/$pid/oom_score – current badness score
: /proc/$pid/oom_score_adj – adjust score (-1000 to 1000)
: /proc/$pid/oom_adj – deprecated, use oom_score_adj
: /proc/sys/vm/panic_on_oom
⚙️ Internals:
: {{The Linux Kernel/source|mm/oom_kill.c}} – out-of-memory killer
: {{The Linux Kernel/id|out_of_memory}} – main entry point
: {{The Linux Kernel/id|oom_badness}} – calculates badness score
: {{The Linux Kernel/id|oom_kill_process}}
📚 References:
: {{The Linux Kernel/doc|OOM|admin-guide/sysctl/vm.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Large stress-ng --oom-pipe]
=== Memory cgroup controller ===
The memory cgroup controller limits and accounts memory usage per group of processes.
It can set hard and soft limits, trigger per-cgroup OOM, and track swap usage.
⚲ API:
: memory.max – hard memory limit
: memory.high – throttling threshold
: memory.current – current usage
: memory.swap.max – swap limit
: See [[../System/CGroup v2#Memory|CGroup v2 Memory controller]] for full interface
⚙️ Internals:
: {{The Linux Kernel/source|mm/memcontrol.c}} – memory cgroup controller
: {{The Linux Kernel/id|mem_cgroup}} – main structure
: {{The Linux Kernel/id|mem_cgroup_charge}}
: {{The Linux Kernel/id|mem_cgroup_oom}}
📚 References:
: {{The Linux Kernel/doc|Memory Resource Controller|admin-guide/cgroup-v2.html#memory}}
=== tmpfs/shmem ===
{{The Linux Kernel/include|linux/shmem_fs.h}}, {{The Linux Kernel/source|mm/shmem.c}} – {{w|tmpfs}} virtual memory filesystem, also backs POSIX shared memory and {{The Linux Kernel/man|2|memfd_create}}.
=== KSM ===
{{The Linux Kernel/include|linux/ksm.h}}, {{The Linux Kernel/source|mm/ksm.c}} – Kernel Same-page Merging, deduplicates identical anonymous pages, used by {{w|Kernel-based Virtual Machine|KVM}}. {{The Linux Kernel/doc|KSM|admin-guide/mm/ksm.html}}
=== userfaultfd ===
{{The Linux Kernel/man|2|userfaultfd}} ↪ {{The Linux Kernel/source|mm/userfaultfd.c}} – handles page faults in user space, used for VM live migration. {{The Linux Kernel/doc|Userfaultfd|admin-guide/mm/userfaultfd.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#userfaultfd stress-ng --userfaultfd]
=== DAMON ===
Data Access MONitor (since 5.15) provides kernel-level data access pattern monitoring.
It can be used for memory management optimization and profiling.
⚲ API:
: /sys/kernel/mm/damon/
: {{The Linux Kernel/include|linux/damon.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/damon}} – DAMON core and operation schemes
📖 References:
: {{The Linux Kernel/doc|DAMON|mm/damon}}
<hr>
📚 References for logical memory:
: {{The Linux Kernel/doc|Memory Allocation Guide|core-api/memory-allocation.html}}
: {{The Linux Kernel/doc|Selecting memory allocator|core-api/memory-allocation.html#selecting-memory-allocator}}
== Physical memory ==
=== Memory Layout ===
A 32-bit processor can address a maximum of 4GB of memory.
Linux kernels split the 4GB address space between user processes and the kernel; under the most common configuration, the first 3GB of the 32-bit range are given over to user space, and the kernel gets the final 1GB starting at 0xc0000000.
Sharing the address space gives a number of performance benefits; in particular, the hardware's address translation buffer can be shared between the kernel and user space.
In '''x86-64''' - {{The Linux Kernel/id|CONFIG_X86_64}} with 4-level page tables ({{The Linux Kernel/id|CONFIG_X86_5LEVEL}}=n), only the least significant 48 bits of a virtual memory address would actually be used in address translation (page table lookup).
The remainder bits 48 through 63 of any virtual address must be copies of bit 47, or the processor will raise an exception.
Addresses complying with this rule are referred to as "canonical form." Canonical form addresses run from 0 through 00007FFF'FFFFFFFF, and from FFFF8000'00000000 through FFFFFFFF'FFFFFFFF, for a total of 256 TB of usable {{w|virtual address space}}.
This is still approximately 64,000 times the virtual address space on 32-bit machines.
Linux takes the higher-addressed half of the address space for itself (kernel space) and leaves the lower-addressed half for user space.
The "canonical address" design has, in effect, two memory halves: the lower half starts at 00000000'00000000 and "grows upwards" as more virtual address bits become available, while the higher half is "docked" to the top of the address space and grows downwards.
{| class="wikitable sortable"
|+
!Start addr
!class=unsortable|Offset
!End addr
!class=unsortable|Size
!class=unsortable|VM area description
|-
| <code><small>0000'</small>'''8'''<small>000'0000'0000</small></code>
| +128 TB
| <code><small>ffff'7fff'ffff'ffff</small></code>
|
| ... huge, almost 64 bits wide hole of non-canonical virtual memory addresses up to the -128 TB starting offset of kernel mappings.
|-
| <code><small>0000'0000'0000'0000</small></code>
|0
| <code><small>0000'7fff'ffff'ffff</small></code>
|128 TB=2<sup>47</sup>
|user-space virtual memory, different per mm
|-
| <code><small>ffff'ffff'ffe0'0000</small></code>
| -2 MB
| <code><small>ffff'ffff'ffff'ffff</small></code>
| 2 MB=2<sup>21</sup>
|... unused hole
|-
| <code><small>ffff'ffff'ff60'0000</small></code>
| -10 MB
| <code><small>ffff'ffff'ff60'0fff</small></code>
| 4 kB=2<sup>12</sup>
| {{The Linux Kernel/id|VSYSCALL_ADDR}} - legacy vsyscall ABI
|-
| <code><small>ffff'ffff'8000'0000</small></code>
| -2 GB
| <code><small>ffff'ffff'9fff'ffff</small></code>
| 512 MB=2<sup>29</sup>
| kernel text mapping, mapped to physical address 0
|-
|
|
|
|
|
|-
| <code><small>ffff'8880'0000'0000</small></code>
| -119.5 TB
| <code><small>ffff'c87f'ffff'ffff</small></code>
| 64 TB
| {{The Linux Kernel/id|page_offset_base}} = {{The Linux Kernel/id|__PAGE_OFFSET_BASE_L4}} - direct mapping of all physical memory
|-
|
|
|
|
|
|-
| <code><small>ffff'8000'0000'0000</small></code>
| -128 TB
| <code><small>ffff'87ff'ffff'ffff</small></code>
| 8 TB
| ... guard hole, also reserved for hypervisor
|}
[[File:Linux_Virtual_Memory_Layout_64bit.svg|border|center|x86-64 memory layout]]
⚲ API:
: {{The Linux Kernel/man|8|setarch}} --addr-no-randomize cat /proc/self/maps
⚙️ Internals:
: {{The Linux Kernel/source|arch/x86/include/asm/page_64_types.h}} – x86-64 page type definitions
: {{The Linux Kernel/source|arch/x86/mm/init_64.c}} – x86-64 memory initialization
📚 References:
: {{The Linux Kernel/doc|X86_64 memory map|x86/x86_64/mm.html}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
=== Pages ===
In Linux, different architectures have different page sizes.
The original —for x86 architecture— and still most commonly used page size is 4096 bytes (4 KB).
The page size (in bytes) of the current architecture is defined by the <code>PAGE_SIZE</code> macro included in {{The Linux Kernel/source|arch/x86/include/asm/page_types.h}} header file.
User space programs can get this value using the {{The Linux Kernel/man|2|getpagesize}} library function.
Another related macro is <code>PAGE_SHIFT</code>, that contains the number of bits to shift an address to get its page number —12 bits for 4K pages.
One of the most fundamental kernel data structures relating memory-management is <code>struct page</code>.
The kernel keeps track of the status of every page of physical memory present in the system using variables of this type.
There are millions of pages in a modern system, and therefore there are millions of these structures in memory.
The full definition of <code>struct page</code> can be found in {{The Linux Kernel/include|linux/mm_types.h}}.
⚙️ Internals:
: {{The Linux Kernel/source|mm/memory.c}} – page fault handling and page table operations ({{The Linux Kernel/id|handle_mm_fault}})
: {{The Linux Kernel/include|linux/rmap.h}}, {{The Linux Kernel/source|mm/rmap.c}} – reverse mapping, virtual-to-physical tracking for page reclaim
: {{The Linux Kernel/include|linux/compaction.h}}, {{The Linux Kernel/source|mm/compaction.c}} – memory compaction, reduces fragmentation
: {{The Linux Kernel/include|linux/memblock.h}}, {{The Linux Kernel/source|mm/memblock.c}} – early boot memory allocator, before buddy is available
: {{The Linux Kernel/include|linux/highmem.h}} – page content access and manipulation
: {{The Linux Kernel/include|asm-generic/tlb.h}}, {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush and page table teardown batching
: [https://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-1.html Pages]
=== NUMA ===
In {{w|Non-uniform memory access}} systems, physical memory is divided into nodes, each local to a group of CPUs.
Accessing local memory is faster than remote memory, so the kernel tries to allocate memory from the node closest to the requesting CPU.
Each node contains its own set of zones (DMA, Normal, etc.).
⚲ API:
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
: {{The Linux Kernel/man|2|set_mempolicy}} – set default NUMA memory policy
: {{The Linux Kernel/man|2|mbind}} – set NUMA memory policy for a memory range
: {{The Linux Kernel/man|2|get_mempolicy}}
: {{The Linux Kernel/man|2|migrate_pages}}
: {{The Linux Kernel/man|2|move_pages}}
: cat /proc/buddyinfo
: /sys/devices/system/node/
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/include|linux/mempolicy.h}}
⚙️ Internals:
: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/id|pglist_data}} (pg_data_t) – per-node memory descriptor, contains zones @ {{The Linux Kernel/include|linux/mmzone.h}}
: {{The Linux Kernel/id|numa_node_id}} – returns NUMA node of current CPU
: {{The Linux Kernel/source|mm/numa.c}} – NUMA node data allocation during boot
: {{The Linux Kernel/source|mm/mempolicy.c}} – NUMA memory allocation policies
: {{The Linux Kernel/source|mm/migrate.c}} – page migration between nodes
: {{The Linux Kernel/source|mm/memory-tiers.c}} – memory tiering (DRAM, PMEM, HBM)
: {{The Linux Kernel/source|mm/numa_memblks.c}} – memory block and distance setup
📚 References:
: {{The Linux Kernel/doc|NUMA Memory Policy|admin-guide/mm/numa_memory_policy.html}}
: {{w|Non-uniform memory access}}
: See also [[../Multitasking/CPU#SMP|SMP section]] for NUMA topology and CPU aspects
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#numa stress-ng --numa]
=== Huge pages ===
{{w|Huge pages}} use larger page sizes (2 MB or 1 GB on x86-64) to reduce TLB misses and page table overhead for memory-intensive workloads.
==== HugeTLB ====
HugeTLB provides explicitly allocated persistent huge pages, reserved at boot or runtime.
⚲ API:
: cat /proc/meminfo | grep Huge
: cat /proc/sys/vm/nr_hugepages
: {{The Linux Kernel/man|2|mmap}} with MAP_HUGETLB
: mount -t hugetlbfs nodev /dev/hugepages
: {{The Linux Kernel/include|linux/hugetlb.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/hugetlb.c}} – HugeTLB huge page allocator
: {{The Linux Kernel/id|hugetlb_init}}
: {{The Linux Kernel/id|hugetlb_fault}}
📚 References:
: {{The Linux Kernel/doc|HugeTLB Pages|admin-guide/mm/hugetlbpage.html}}
==== Transparent Huge Pages ====
THP automatically promotes regular pages to huge pages without application changes (since 2.6.38).
⚲ API:
: cat /sys/kernel/mm/transparent_hugepage/enabled
: {{The Linux Kernel/man|2|madvise}} with MADV_HUGEPAGE
: {{The Linux Kernel/include|linux/huge_mm.h}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/huge_memory.c}} – transparent huge page support
: {{The Linux Kernel/id|khugepaged}} – daemon that collapses pages into huge pages
: {{The Linux Kernel/source|mm/khugepaged.c}} – THP collapse daemon
📚 References:
: {{The Linux Kernel/doc|Transparent Hugepage Support|admin-guide/mm/transhuge.html}}
: {{The Linux Kernel/doc|Concepts overview|admin-guide/mm/concepts.html}}
=== TLB ===
{{w|Translation lookaside buffer}} is a hardware cache of virtual-to-physical address translations.
The kernel must flush TLB entries when page table mappings change.
On SMP, this requires {{w|Inter-processor interrupt|IPI}}s to other CPUs (TLB shootdowns), which can impact real-time latency on isolated CPUs.
⚲ API
: {{The Linux Kernel/include|asm-generic/tlb.h}} – generic TLB flush batching
: {{The Linux Kernel/id|flush_tlb_all}} – flush entire TLB on all CPUs via IPI (TLB shootdown)
:: {{The Linux Kernel/id|__flush_tlb_all}} – local CPU only, no IPI, calls {{The Linux Kernel/id|__flush_tlb_global}}
: {{The Linux Kernel/id|flush_tlb_mm}} – flush TLB for a specific address space
: {{The Linux Kernel/id|flush_tlb_page}} – flush single page from TLB
: {{The Linux Kernel/id|flush_tlb_range}} – flush a range of user pages for a VMA
: {{The Linux Kernel/id|flush_tlb_kernel_range}} – flush kernel mappings on all CPUs
: /sys/kernel/debug/tracing/events/tlb/tlb_flush/
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/tlb.c}} – x86 TLB flush implementation
: {{The Linux Kernel/source|mm/mmu_gather.c}} – TLB flush batching
📖 References
: {{The Linux Kernel/doc|TLB|arch/x86/tlb.html}}
: {{The Linux Kernel/doc|Cache and TLB Flushing Under Linux|core-api/cachetlb.html}}
=== CMA ===
The Contiguous Memory Allocator (CMA) reserves a region of memory at boot for large physically contiguous allocations needed by DMA devices, GPUs and multimedia hardware (since 3.5).
Unused CMA memory is available to the page allocator for movable pages.
⚲ API:
: cat /proc/meminfo | grep Cma
: {{The Linux Kernel/include|linux/cma.h}}
: {{The Linux Kernel/id|dma_alloc_contiguous}}
: {{The Linux Kernel/id|CONFIG_CMA}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/cma.c}} – contiguous memory allocator core
: {{The Linux Kernel/source|kernel/dma/contiguous.c}} – DMA-CMA integration
: {{The Linux Kernel/source|mm/cma_debug.c}} – debugfs interface
: {{The Linux Kernel/id|cma_alloc}}
: {{The Linux Kernel/id|cma_release}}
📚 References:
: {{The Linux Kernel/doc|Contiguous Memory Allocator|mm/cma.html}}
=== DMA ===
⚲ API:
: {{The Linux Kernel/id|dma_addr_t}} - bus address
: {{The Linux Kernel/include|linux/dma-mapping.h}}
: {{The Linux Kernel/id|dma_alloc_coherent}}
: {{The Linux Kernel/id|dma_alloc_pages}} {{The Linux Kernel/id|pin_user_pages}}
: {{The Linux Kernel/id|dma_map_single}} {{The Linux Kernel/id|dma_data_direction}}
: {{The Linux Kernel/id|dma_map_sg}} {{The Linux Kernel/id|scatterlist}}
: {{The Linux Kernel/id|dma_set_mask}} {{The Linux Kernel/id|dma_set_coherent_mask}} {{The Linux Kernel/id|dma_set_mask_and_coherent}}
: {{The Linux Kernel/id|dma_sync_single_for_cpu}} {{The Linux Kernel/id|dma_sync_single_for_device}}
: {{The Linux Kernel/include|linux/gfp.h}}
: {{The Linux Kernel/include|linux/dmapool.h}}
: {{The Linux Kernel/id|dma_pool_create}}
: DMA-able memory: {{The Linux Kernel/id|__get_free_page}} {{The Linux Kernel/id|kmalloc}} {{The Linux Kernel/id|kmem_cache_alloc}}
: {{The Linux Kernel/id|get_user_pages}} pins user pages in memory,
👁 Examples:
: {{The Linux Kernel/source|samples/kfifo/dma-example.c}}
: {{The Linux Kernel/id|e1000_alloc_rx_buffers}}, {{The Linux Kernel/id|e1000_alloc_ring_dma}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/dma}} – DMA subsystem core
: {{The Linux Kernel/source|mm/dmapool.c}} – small DMA-coherent allocations
: {{The Linux Kernel/source|mm/gup.c}} – get/pin user pages
: {{The Linux Kernel/source|kernel/dma/mapping.c}} – arch-independent DMA mapping
📚 References:
: {{The Linux Kernel/doc|Dynamic DMA mapping Guide|core-api/dma-api-howto.html}}
: {{The Linux Kernel/doc|Dynamic DMA mapping using the generic device|core-api/dma-api.html}}
: [https://lwn.net/Articles/787636/ LWM: get_user_pages, pinned pages, and DAX]
: {{The Linux Kernel/doc|pin_user_pages() and related calls|core-api/pin_user_pages.html}}
💾 ''Historical:''
: [http://lwn.net/images/pdf/LDD3/ch15.pdf LDD3:Memory Mapping and DMA]
: http://www.xml.com/ldd/chapter/book/ch13.html mmap and DMA
: SAC – Single Address Cycle, 32-bit DMA addressing (up to 4 GB)
: DAC – Dual Address Cycle, 64-bit DMA addressing
==== DMAEngine ====
: {{The Linux Kernel/include|linux/dmaengine.h}}
: {{The Linux Kernel/source|drivers/dma}} – DMA engine drivers
: {{The Linux Kernel/doc|driver-api/dmaengine}}
: https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/
== ... ==
📚 References for the article:
: {{The Linux Kernel/doc|Linux Memory Management Documentation|mm/}}
: [https://www.ryadel.com/en/linux-memory-management-mechanism-analysis-kernel/ Analysis of Linux Memory Management Mechanism]
: [https://0xax.gitbooks.io/linux-insides/content/MM/ Memory management]
: http://linux-mm.org/LinuxMM
: http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
: [https://lwn.net/Kernel/Index/#Memory_management Memory management, lwn]
{{BookCat}}
o5du8l4kzxym5zaeylmqjiz73q945gq
The Linux Kernel/Storage
0
226984
4641516
4640286
2026-06-28T14:59:49Z
Conan
3188
Storage: VFS core internals, page cache filemap/buffer, restructure
4641516
wikitext
text/x-wiki
{{DISPLAYTITLE:Storage functionality}}
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor=#cef | storage
|-style=""
| bgcolor=#aef | [[#Files_and_directories|files & directories access]]
|-style=""
| bgcolor=#8df | [[#Virtual File System|Virtual File System]]
|-style=""
| bgcolor=#8ce |[[#Page_cache|page cache]]
|-style=""
| bgcolor=#7ac |[[#Logical file systems|logical file systems]]
|-style=""
| bgcolor=#69a |[[#Block_device_layer|block devices]]
|-style=""
| bgcolor=#689 |[[#Storage_drivers|storage drivers]]
|}
Storage functionality provides access to various storage devices via files and directories of files.
Most of the storage is persistent as flash memory, SSD and legacy hard disks.
Another kind of storage is temporary.
The ''file system'' provides an abstraction to organize the information into separate pieces of data (called ''files'') identified by a unique name.
Each file system type defines their own structures and logic rules used to manage these groups of information and their names.
Linux supports a plethora of different file system types, local and remote, native and from other operating systems.
To accommodate such disparity the kernel defines a common top layer, the ''virtual file system'' (VFS) layer.
[[File:The Linux Storage Stack Diagram.svg|Summary of the Linux kernel's storage stack|right|800x800px]]
== Files and directories ==
Four basic files access system calls:
: {{The Linux Kernel/man|2|open}} ↪ {{The Linux Kernel/id|do_sys_open}} - opens a file by name and returns a {{w|file descriptor}} (<big>fd</big>). Below functions operates on a fd.
: {{The Linux Kernel/man|2|close}} ↪ {{The Linux Kernel/id|close_fd}}
: {{The Linux Kernel/man|2|read}} ↪ {{The Linux Kernel/id|ksys_read}}
: {{The Linux Kernel/man|2|write}} ↪ {{The Linux Kernel/id|ksys_write}}
File in Linux and UNIX is not only physical file on persistent storage.
File interface is used to access pipes, sockets and other pseudo-files.
🔧 TODO
: {{The Linux Kernel/man|2|readlink}} , {{The Linux Kernel/man|2|symlink}} , {{The Linux Kernel/man|2|link}}
: {{The Linux Kernel/man|3|readdir}} ⇾ {{The Linux Kernel/man|2|getdents}}
: {{The Linux Kernel/man|7|path_resolution}}
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
⚙️ Files and directories internals
: {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/source|fs/open.c}} – open, close and related file operations
: {{The Linux Kernel/source|fs/namei.c}} – pathname lookup and resolution
: {{The Linux Kernel/source|fs/read_write.c}} – read, write and lseek operations
: {{The Linux Kernel/source|fs/xattr.c}} – extended attributes
: {{The Linux Kernel/source|fs/notify}} – {{The Linux Kernel/man|7|inotify}} and {{The Linux Kernel/man|7|fanotify}} filesystem event notification
📚 Files and directories references
: [https://www.gnu.org/software/libc/manual/html_node/I_002fO-Overview.html Input/Output, The GNU C Library]
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
: {{w|Unix file types}}
=== File locks ===
File locks are mechanisms that allow processes to coordinate access to shared files.
These locks help prevent conflicts when multiple processes or threads attempt to access the same file simultaneously.
⚲ API
: {{The Linux Kernel/man|8|lslocks}} – list local system locks
: {{The Linux Kernel/man|3|lockf}} – apply, test or remove a POSIX lock on an open file
: {{The Linux Kernel/man|2|flock}} – apply or remove an advisory BSD lock on an open file
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
:: {{The Linux Kernel/id|F_SETLK}} – advisory record lock
:: {{The Linux Kernel/id|F_OFD_SETLK}} – Open File Description Lock
:: {{The Linux Kernel/id|flock}} – lock parameters
: ⚠️ Avoid mixing flock and fcntl locks on the same file as they don’t interact with each other.
⚙️ Internals
: {{The Linux Kernel/include|linux/filelock.h}}
: {{The Linux Kernel/source|fs/locks.c}} – POSIX and flock file locking
: {{The Linux Kernel/include|trace/events/filelock.h}}
💾 ''Historical: [https://elixir.bootlin.com/linux/v5.14/K/ident/CONFIG_MANDATORY_FILE_LOCKING Mandatory locking] feature is no longer supported at all in Linux 5.15 and above because the implementation is unreliable.''
=== Asynchronous I/O ===
🚀 advanced features
'''AIO'''
: https://lwn.net/Kernel/Index/#Asynchronous_IO
: {{The Linux Kernel/man|2|io_submit}} {{The Linux Kernel/man|2|io_setup}} {{The Linux Kernel/man|2|io_cancel}} {{The Linux Kernel/man|2|io_destroy}} {{The Linux Kernel/man|2|io_getevents}}
: {{The Linux Kernel/include|uapi/linux/aio_abi.h}}
: {{The Linux Kernel/source|fs/aio.c}} – async I/O implementation
: {{The Linux Kernel/ltp|kernel|io/aio}}
'''{{w|io_uring}}'''
🌱 ''New since release 5.1 in May 2019''
: https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
: https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/
: {{The Linux Kernel/id|io_uring_enter}} {{The Linux Kernel/id|io_uring_setup}} {{The Linux Kernel/id|io_uring_register}}
: {{The Linux Kernel/include|linux/io_uring.h}}
: {{The Linux Kernel/include|uapi/linux/io_uring.h}}
: {{The Linux Kernel/source|io_uring}}
: https://lwn.net/Kernel/Index/#io_uring
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/810414/ The rapid growth of io_uring]
:: [https://lwn.net/Articles/815491/ Automatic buffer selection for io_uring]
:: [https://lwn.net/Articles/826053/ Operations restrictions for io_uring]
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/803070/ Redesigned workqueues for io_uring]
: {{The Linux Kernel/ltp|kernel/syscalls|io_uring}}
=== {{w|Asynchronous_I/O#Forms|Non-blocking I/O}} ===
Allow non-blocking access to multiple file descriptors.
'''Efficient event polling {{w|epoll}}'''
⚲ API:
: {{The Linux Kernel/include|uapi/linux/eventpoll.h}}
: {{The Linux Kernel/man|7|epoll}}
: {{The Linux Kernel/man|2|epoll_create}} ↪ {{The Linux Kernel/id|do_epoll_create}}
: {{The Linux Kernel/man|2|epoll_ctl}} ↪ {{The Linux Kernel/id|do_epoll_ctl}}
: {{The Linux Kernel/man|2|epoll_wait}} ↪ {{The Linux Kernel/id|do_epoll_wait}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/eventpoll.c}} – efficient event polling (epoll)
'''{{w|Select (Unix)|select}} and {{w|poll (Unix)|poll}}'''
💾 ''Historical: Select and poll system calls are derived from UNIX''
⚲ API:
: {{The Linux Kernel/man|2|poll}} ↪ {{The Linux Kernel/id|do_sys_poll}}
: {{The Linux Kernel/man|2|select}} ↪ {{The Linux Kernel/id|kern_select}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/select.c}} – select and poll implementation
=== Vectored I/O ===
🚀 advanced feature
{{w|Vectored I/O}}, also known as scatter/gather I/O, is a method of input and output by which a single procedure call sequentially reads data from multiple buffers and writes it to a single data stream, or reads data from a data stream and writes it to multiple buffers, as defined in a vector of buffers. Scatter/gather refers to the process of gathering data from, or scattering data into, the given set of buffers. Vectored I/O can operate synchronously or asynchronously. The main reasons for using vectored I/O are efficiency and convenience.
⚲ API:
: {{The Linux Kernel/include|uapi/linux/uio.h}}
: {{The Linux Kernel/include|linux/uio.h}}
: {{The Linux Kernel/id|iovec}}
: {{The Linux Kernel/man|2|readv}} ↪ {{The Linux Kernel/id|do_readv}}
: {{The Linux Kernel/man|2|writev}} ↪ {{The Linux Kernel/id|do_writev}}
⚙️ Internals:
: {{The Linux Kernel/id|iov_iter}}
: {{The Linux Kernel/id|do_readv}} ↯ call hierarchy:
:: {{The Linux Kernel/id|vfs_readv}}
::: {{The Linux Kernel/id|import_iovec}}
::: {{The Linux Kernel/id|ext4_file_read_iter}}
: {{The Linux Kernel/source|lib/iov_iter.c}} – I/O vector iterator operations
=== ... ===
📖 References
: [https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html Fast Scatter-Gather I/O, The GNU C Library]
: https://lwn.net/Kernel/Index/#Vectored_IO
: https://lwn.net/Kernel/Index/#Scattergather_chaining
📚 Further reading
: https://deepwiki.com/torvalds/linux/4-filesystems
== Virtual File System ==
The {{w|virtual file system}} (VFS) is an abstract layer on top of a concrete logical file system.
The purpose of a VFS is to allow client applications to access different types of logical file systems in a uniform way.
A VFS can, for example, be used to access local and [[../Networking#Network_storage|network storage]] devices transparently without the client application noticing the difference.
It can be used to bridge the differences in Windows, classic Mac OS/macOS and Unix filesystems, so that applications can access files on local file systems of those types without having to know what type of file system they are accessing.
A VFS specifies an interface (or a "contract") between the kernel and a logical file system.
Therefore, it is easy to add support for new file system types to the kernel simply by fulfilling the contract.
🔧 TODO: {{The Linux Kernel/id|vfsmount}}, {{The Linux Kernel/id|vfs_create}}, {{The Linux Kernel/id|vfs_read}}, {{The Linux Kernel/id|vfs_write}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/inode.c}} – inode allocation and management
: {{The Linux Kernel/include|linux/dcache.h}}, {{The Linux Kernel/source|fs/dcache.c}} – dentry cache, pathname-to-inode lookup
: {{The Linux Kernel/source|fs/super.c}} – superblock operations, filesystem mount/unmount
: {{The Linux Kernel/source|fs/file.c}} – file table, fd allocation
: {{The Linux Kernel/source|fs/readdir.c}} – directory listing (getdents)
📚 VFS References
: {{The Linux Kernel/doc|VFS|filesystems/#core-vfs-documentation}}
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
== Logical file systems ==
A {{w|file system}} (or ''filesystem'') is used to control how data is stored and retrieved.
Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins.
By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified.
Each group of data is called a "file".
The structure and logic rules used to manage the groups of information and their names is called a "file system".
There are many different kinds of file systems.
Each one has different structure and logic, properties of speed, flexibility, security, size and more.
Some file systems have been designed to be used for specific applications.
For example, the ISO 9660 file system is designed specifically for optical discs.
File systems can be used on many different kinds of storage devices.
Each storage device uses a different kind of media.
The most common storage device in use today is a {{w|SSD}}.
Other media that was used are hard disk, magnetic tape and optical disc.
In some cases, the computer's main memory (RAM) is used to create a temporary file system for short-term use.
Raw storage is called a block device.
Linux supports many different file systems, but common choices for the system disk on a block device include the ext* family (such as {{w|ext2}}, {{w|ext3}} and {{w|ext4}}), {{w|XFS}}, {{w|ReiserFS}} and {{w|btrfs}}.
For raw Flash without a {{w|flash translation layer}} (FTL) or {{w|Memory Technology Device}} (MTD), there is {{w|UBIFS}}, {{w|JFFS2}}, and {{w|YAFFS}}, among others. {{w|SquashFS}} is a common compressed read-only file system.
NFS and other network FS are described further in paragraph [[../Networking#Network_storage|Network storage]].
⚲ Shell interfaces:
: cat /proc/filesystems
: ls /sys/fs/
: {{The Linux Kernel/man|8|mount}}
: {{The Linux Kernel/man|8|umount}}
: {{The Linux Kernel/man|8|findmnt}}
: {{The Linux Kernel/man|1|mountpoint}}
: {{The Linux Kernel/man|1|df}}
Infrastructure ⚲ API function {{The Linux Kernel/id|register_filesystem}} registers structs {{The Linux Kernel/id|file_system_type}} and stores them in linked list ⚙️ {{The Linux Kernel/id|file_systems}}.
Function {{The Linux Kernel/id|ext4_init_fs}} registers {{The Linux Kernel/id|ext4_fs_type}}.
Operation of ''file system opening'' is called mounting: {{The Linux Kernel/id|ext4_get_tree}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/namespace.c}} – mount and namespace operations
:: {{The Linux Kernel/man|2|mount}}
::: {{The Linux Kernel/id|do_mount}}
: {{The Linux Kernel/include|linux/buffer_head.h}}
:: {{The Linux Kernel/id|super_block}}
:: {{The Linux Kernel/id|sb_bread}}
: {{The Linux Kernel/source|fs}} – filesystem implementations
:: {{The Linux Kernel/source|fs/ext4/ext4.h}} – ext4 on-disk format and internal structures
::: {{The Linux Kernel/id|ext4_sb_bread}}
Other notable filesystems:
: {{w|FUSE (filesystem)|FUSE}} – {{The Linux Kernel/source|fs/fuse}} – filesystem in userspace
: {{w|OverlayFS}} – {{The Linux Kernel/source|fs/overlayfs}} – union mount filesystem, used by containers
: {{w|Btrfs}} – {{The Linux Kernel/source|fs/btrfs}}
: {{w|XFS}} – {{The Linux Kernel/source|fs/xfs}}
📚 References:
: {{The Linux Kernel/doc|filesystems|filesystems/#filesystems}}
== Page cache ==
A page cache or disk cache is a transparent cache for the memory pages originating from a secondary storage device such as a hard disk drive.
The operating system keeps a page cache in otherwise unused portions of the main memory, resulting in quicker access to the contents of cached pages and overall performance improvements.
The page cache is implemented by the kernel, and is mostly transparent to applications.
Usually, all physical memory not directly allocated to applications is used by the operating system for the page cache.
Since the memory would otherwise be idle and is easily reclaimed when applications request it, there is generally no associated performance penalty and the operating system might even report such memory as "free" or "available".
The page cache also aids in writing to a disk.
Pages in the main memory that have been modified during writing data to disk are marked as "dirty" and have to be flushed to disk before they can be freed.
When a file write occurs, the page backing the particular block is looked up.
If it is already found in the page cache, the write is done to that page in the main memory.
Otherwise, when the write perfectly falls on page size boundaries, the page is not even read from disk, but allocated and immediately marked dirty.
Otherwise, the page(s) are fetched from disk and requested modifications are done.
Not all cached pages can be written to as program code is often mapped as read-only or copy-on-write; in the latter case, modifications to code will only be visible to the process itself and will not be written to disk.
⚲ API:
: {{The Linux Kernel/man|2|fsync}} ↪ {{The Linux Kernel/id|do_fsync}}
: {{The Linux Kernel/man|2|sync_file_range}} ↪ {{The Linux Kernel/id|ksys_sync_file_range}}
: {{The Linux Kernel/man|2|syncfs}} ↪ {{The Linux Kernel/id|sync_filesystem}}
⚙️ Internals:
: {{The Linux Kernel/include|linux/pagemap.h}}, {{The Linux Kernel/source|mm/filemap.c}} – page cache core, read/write/mmap paths
: {{The Linux Kernel/include|linux/buffer_head.h}}, {{The Linux Kernel/source|fs/buffer.c}} – buffer heads, block-level page cache interface
: {{The Linux Kernel/include|linux/writeback.h}}, {{The Linux Kernel/source|mm/page-writeback.c}} – dirty page writeback throttling
: {{The Linux Kernel/id|address_space}} – per-inode page cache, defined in {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/id|wb_workfn}}, {{The Linux Kernel/id|do_writepages}}
📚 References
: {{w|Page cache}}
More
: [https://lwn.net/Articles/717953/ The future of DAX ] - direct access bypassing the cache
: [https://tldp.org/LDP/lki/lki-4.html Linux Page Cache in Linux Kernel 2.4 Internals]
== Zero-copy ==
🚀 advanced features
Writing data to storage and reading are very resource consuming operations.
Copying memory is time and CPU consuming operation too.
Set of methods to avoid copying operations is called {{w|zero-copy}}.
The goal of zero-copy methods is a fast and efficient data transfer within the system.
The first and simplest method is {{w|Pipeline (Unix)|Pipeline}}, invoked by operator "|" in shells.
Instead of writing data into temporary file and reading, the data is passed efficiently via a pipe bypassing a storage.
The second method is {{w|Tee_(command)|tee}}.
⚲ Syscalls:
: {{The Linux Kernel/man|2|pipe2}}
: {{The Linux Kernel/man|2|tee}}, {{The Linux Kernel/man|1|tee}}
: {{The Linux Kernel/man|2|sendfile}}
: {{The Linux Kernel/man|2|copy_file_range}}
: {{The Linux Kernel/man|2|splice}}
: {{The Linux Kernel/man|2|vmsplice}}
⚲ API and ⚙️ Internals:
: '''{{The Linux Kernel/man|2|pipe2}}''' ↪ {{The Linux Kernel/id|do_pipe2}} - creates pipe
:: uses {{The Linux Kernel/id|pipe_fs_type}}, {{The Linux Kernel/id|pipefifo_fops}}
: '''{{The Linux Kernel/man|2|tee}}''' ↪ {{The Linux Kernel/id|do_tee}} - duplicates pipe content
:: calls {{The Linux Kernel/id|link_pipe}}
: '''{{The Linux Kernel/man|2|sendfile}}''' ↪ {{The Linux Kernel/id|do_sendfile}} - transfers data between file descriptors, the output can be a socket. Used in [[../Networking#Network_storage|network storage]] and servers.
:: Calls: {{The Linux Kernel/id|do_splice_direct}}, {{The Linux Kernel/id|splice_direct_to_actor}}
: '''{{The Linux Kernel/man|2|copy_file_range}}''' ↪ {{The Linux Kernel/id|vfs_copy_file_range}} - transfers data between files
:: calls custom {{The Linux Kernel/id|remap_file_range}} like {{The Linux Kernel/id|nfs42_remap_file_range}}
:: or custom {{The Linux Kernel/id|copy_file_range}} like {{The Linux Kernel/id|fuse_copy_file_range}}
:: or {{The Linux Kernel/id|do_splice_direct}}
: '''{{The Linux Kernel/man|2|splice}}''' ↪ {{The Linux Kernel/id|do_splice}} - splices data to/from a pipe.
:: There are three cases regarding which end being a pipe:
:# {{The Linux Kernel/id|do_splice_from}} - pipe → file
:#: Calls custom {{The Linux Kernel/id|splice_write}} or {{The Linux Kernel/id|iter_file_splice_write}}
:# {{The Linux Kernel/id|do_splice_read}} - file → pipe
:#: Calls custom {{The Linux Kernel/id|splice_read}} or {{The Linux Kernel/id|copy_splice_read}}
:# {{The Linux Kernel/id|splice_pipe_to_pipe}} - both are pipes
: '''{{The Linux Kernel/man|2|vmsplice}}''' ↪
:: {{The Linux Kernel/id|vmsplice_to_pipe}} – splices user pages to a pipe
:: {{The Linux Kernel/id|vmsplice_to_user}} – splices a pipe to user pages
⚲ API
: {{The Linux Kernel/include|linux/splice.h}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/pipe.c}} – pipe and FIFO implementation
: {{The Linux Kernel/source|fs/splice.c}} – splice data transfer between file descriptors
🔧 TODO:
{{The Linux Kernel/id|zerocopy_sg_from_iter}} builds a zerocopy skb datagram from an iov_iter. Used in {{The Linux Kernel/id|tap_get_user}} and {{The Linux Kernel/id|tun_get_user}}.
{{The Linux Kernel/id|skb_zerocopy}}
{{The Linux Kernel/id|skb_zerocopy_iter_dgram}}
📚 References
: {{The Linux Kernel/man|7|pipe}}
: {{The Linux Kernel/man|7|fifo}}
: {{The Linux Kernel/doc|splice and pipes|filesystems/splice.html}}
:: {{The Linux Kernel/doc|Pipes API|filesystems/splice.html#pipes-api}}
: {{w|splice (system call)}}
: LTP: {{The Linux Kernel/ltp|kernel/syscalls|pipe}}, {{The Linux Kernel/ltp|kernel/syscalls|pipe2}}, {{The Linux Kernel/ltp|kernel/syscalls|tee}}, {{The Linux Kernel/ltp|kernel/syscalls|sendfile}}, {{The Linux Kernel/ltp|kernel/syscalls|copy_file_range}}, {{The Linux Kernel/ltp|kernel/syscalls|splice}}, {{The Linux Kernel/ltp|kernel/syscalls|vmsplice}}
== Block device layer ==
The block device layer in Linux provides an abstraction for accessing storage devices,
such as SSDs and USB drives, by presenting them as a series of fixed-size blocks.
It sits between the hardware and the file system,
allowing applications and file systems to perform read and write operations efficiently
without needing to know the specifics of the underlying hardware.
Key components include block drivers, the I/O scheduler,
and buffer management, which work together to handle requests,
optimize access patterns, and ensure data integrity.
This layer supports essential features like caching, partition management,
and queueing mechanisms to balance performance and reliability.
⚲ Interfaces:
: {{The Linux Kernel/include|linux/blk_types.h}}
:: {{The Linux Kernel/id|bio}} – main unit of I/O for the block layer and lower layers
:: {{The Linux Kernel/id|req_op}} – operations common to the bio and request structures
: {{The Linux Kernel/include|linux/bio.h}}
: {{The Linux Kernel/id|block_device}}
:: {{The Linux Kernel/id|block_size}}
: {{The Linux Kernel/id|blk_alloc_disk}} allocates {{The Linux Kernel/id|gendisk}}
: {{The Linux Kernel/id|add_disk}}
:: {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|block_device_operations}}
: {{The Linux Kernel/include|linux/blkdev.h}}
:: {{The Linux Kernel/id|gendisk}}
::: {{The Linux Kernel/id|dev_to_disk}}, {{The Linux Kernel/id|disk_to_dev}}
:: {{The Linux Kernel/id|block_class}} – block devices Driver Model class
:: {{The Linux Kernel/id|register_blkdev}}
:: {{The Linux Kernel/id|request}}
:: {{The Linux Kernel/id|request_queue}}
⚙️ Internals.
: {{The Linux Kernel/source|block}} – block layer core
: {{The Linux Kernel/source|fs/iomap}} – modern filesystem I/O mapping layer (used by xfs, ext4, btrfs)
: {{The Linux Kernel/id|block_class}}
👁 Examples:
: {{The Linux Kernel/source|drivers/block/brd.c}} - small RAM backed block device driver
: {{The Linux Kernel/source|drivers/block/null_blk}} – null block test device
=== Device mapper ===
The ''device mapper'' is a framework provided by the kernel for mapping physical block devices onto higher-level "virtual block devices".
It forms the foundation of LVM2, software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device.
Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption.
User space applications that need to create new mapped devices talk to the device mapper via the <code>libdevmapper.so</code> shared library, which in turn issues ioctls to the <code>/dev/mapper/control</code> device node.
Functions provided by the device mapper include linear, striped and error ''mappings,'' as well as crypt and multipath ''targets.''
For example, two disks may be concatenated into one logical volume with a pair of ''linear'' mappings, one for each disk.
As another example, ''crypt'' target encrypts the data passing through the specified device, by using the Linux kernel's Crypto API.
The following mapping targets are available:
: ''cache'' - allows the creation of hybrid volumes, by using solid-state drives (SSDs) as caches for hard disk drives (HDDs)
: ''crypt'' - provides data encryption, by using the Linux kernel's Crypto API
: ''delay'' - delays reads and/or writes to different devices (used for testing)
: ''era'' - behaves in a way similar to the linear target, while it keeps track of blocks that were written to within a user-defined period of time
: ''error'' - simulates I/O errors for all mapped blocks (used for testing)
: ''flakey'' - simulates periodic unreliable behaviour (used for testing)
: ''linear'' - maps a continuous range of blocks onto another block device
: ''mirror'' - maps a mirrored logical device, while providing data redundancy
: ''multipath'' - supports the mapping of multipathed devices, through usage of their path groups
: ''raid'' - offers an interface to the Linux kernel's software RAID driver (md)
: ''snapshot'' and ''snapshot-origin'' - used for creation of LVM snapshots, as part of the underlining copy-on-write scheme
: ''striped'' - strips the data across physical devices, with the number of stripes and the striping chunk size as parameters
: ''zero'' - an equivalent of <code>/dev/zero</code>, all reads return blocks of zeros, and writes are discarded
📚 References
: {{w|Device mapper}}
: {{The Linux Kernel/doc|Device mapper|admin-guide/device-mapper}}
: {{The Linux Kernel/include|linux/device-mapper.h}}
: {{The Linux Kernel/source|drivers/md}} – device mapper and software RAID
: https://lwn.net/Kernel/Index/#Device_mapper
=== Multi-Queue Block IO Queueing ===
The blk-mq API enhances IO performance
by leveraging multiple queues for parallel processing,
addressing bottlenecks from traditional single-queue designs.
It uses software queues for scheduling,
merging, and reordering requests,
and hardware queues to interface directly with devices.
If hardware resources are limited,
requests are temporarily queued for later dispatch.
⚲ Interfaces:
: /sys/devices/.../mq/
: {{The Linux Kernel/include|linux/blk-mq.h}}
:: Structures:
::: {{The Linux Kernel/id|blk_mq_hw_ctx}} – hardware dispatch queue context
::: {{The Linux Kernel/id|blk_mq_tag_set}} – shared between request queues
:::: {{The Linux Kernel/id|blk_mq_ops}}
:::: {{The Linux Kernel/id|blk_mq_tags}}
:::: {{The Linux Kernel/id|blk_mq_queue_map}} – map software queues to hardware queues
::: {{The Linux Kernel/id|request}}
👁️ Example
: {{The Linux Kernel/source|drivers/block/null_blk}} – multi-queue aware block test driver
⚙️ Internals
: /sys/kernel/debug/block/*/hctx*
: {{The Linux Kernel/source|block/blk-mq.h}} – blk-mq internal definitions
:: {{The Linux Kernel/id|blk_mq_ctx}} – software staging queue context
: {{The Linux Kernel/source|block/blk-mq.c}} – block multi-queue core code
: {{The Linux Kernel/source|block/blk-mq-tag.c}} – tag allocation using scalable bitmaps
: ...
📖 References
: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
=== I/O scheduler ===
I/O scheduling (or disk scheduling) is the method chosen by the kernel to decide in which order the block I/O operations will be submitted to the storage volumes.
I/O scheduling usually has to work with hard disk drives that have long access times for requests placed far away from the current position of the disk head (this operation is called a seek).
To minimize the effect this has on system performance, most I/O schedulers implement a variant of the elevator algorithm that reorders the incoming randomly ordered requests so the associated data would be accessed with minimal arm/head movement.
The particular I/O scheduler used with certain block device can be switched at run time by modifying the corresponding <code>/sys/block/<block_device>/queue/scheduler</code> file in the sysfs filesystem.
Some I/O schedulers also have tunable parameters that can be set through files in <code>/sys/block/<block_device>/queue/iosched/</code>.
⚲ Interfaces:
: {{The Linux Kernel/man|1|ionice}} – set or get process I/O scheduling class and priority
:: {{The Linux Kernel/man|2|ioprio_get}}, ioprio_set
: {{The Linux Kernel/include|linux/elevator.h}}
: Function {{The Linux Kernel/id|elv_register}} registers struct {{The Linux Kernel/id|elevator_type}}.
: {{The Linux Kernel/id|elevator_queue}}
⚙️ Internals:
: {{The Linux Kernel/source|block/ioprio.c}} – I/O priority system call
: {{The Linux Kernel/source|block/elevator.c}} – I/O scheduler framework
: {{The Linux Kernel/source|block/Kconfig.iosched}} – I/O scheduler Kconfig options
: {{The Linux Kernel/source|block/bfq-iosched.c}} – Budget Fair Queueing scheduler
: {{The Linux Kernel/source|block/kyber-iosched.c}} – Kyber multiqueue scheduler
: {{The Linux Kernel/source|block/mq-deadline.c}} – deadline multiqueue scheduler
: {{The Linux Kernel/include|trace/events/block.h}}
📖 References:
: {{w|I/O scheduling}}
: {{w|Elevator algorithm}}
: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
: {{The Linux Kernel/doc|Deadline IO scheduler tunables|deadline-iosched.html}}
: https://www.cloudbees.com/blog/linux-io-scheduler-tuning/
: https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers
=== ... ===
📖 References
: {{The Linux Kernel/doc|Block devices|block}}
:: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
::: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
::: {{The Linux Kernel/doc|Deadline IO scheduler tunables|block/deadline-iosched.html}}
::: {{The Linux Kernel/doc|Kyber I/O scheduler tunables|block/kyber-iosched.html}}
:: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
📚 Further reading
: /sys/kernel/debug/block/*/
: https://lwn.net/Kernel/Index/#Block_layer
: [https://lore.kernel.org/linux-block/ block devices ML]
: [http://lwn.net/images/pdf/LDD3/ch16.pdf LDD3:Block Drivers]
: [http://www.xml.com/ldd/chapter/book/ch12.html LDD1:Loading Block Drivers]
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch14.html ULK3 Chapter 14. Block Device Drivers]
: [https://sg.danny.cz/sg/The Linux SCSI Generic (sg) Driver]
:: [https://sg.danny.cz/sg/scsi_debug.html Scsi_debug adapter driver for Linux]
:: https://github.com/doug-gilbert/sg3_utils
== {{w|Computer data storage|Storage}} drivers ==
🔧 TODO
⚙️ Internals
: {{The Linux Kernel/source|drivers/nvmem}} – {{w|Non-volatile memory}}
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/scsi}} – {{w|SCSI|Small Computer System Interface}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/mtd}} – {{w|Memory Technology Device}} for 🤖 embedded devices
=== NVMe ===
{{w|NVM Express}} drivers provide accesses a computer's {{w|non-volatile storage}}.
Local storage is attached via {{w|PCIe|PCI Express}} bus.
PCI NVMe device driver entry point is {{The Linux Kernel/id|nvme_init}}.
Remote storage driver is called target and local {{w|Proxy_pattern|proxy}} driver is called host. {{w|Switched fabric|Fabrics}} connect remote targets with local host.
A fabric can be based on {{w|Remote direct memory access|RDMA}}, {{w|Transmission Control Protocol|TCP}} or {{w|Fibre Channel}} protocols.
⚲ API:
: [https://github.com/linux-nvme/nvme-cli nvme-cli]
: {{The Linux Kernel/include|uapi/linux/nvme_ioctl.h}}
: {{The Linux Kernel/include|linux/nvme.h}}
⚙️ '''Internals:'''
: {{The Linux Kernel/source|drivers/nvme}} – NVMe drivers
'''Host''' {{The Linux Kernel/source|drivers/nvme/host}}:
⚲ Interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/nvme.h}} – NVMe host common definitions
:: {{The Linux Kernel/id|nvme_init_ctrl}} initializes a NVMe controller structures {{The Linux Kernel/id|nvme_ctrl}} with operations {{The Linux Kernel/id|nvme_ctrl_ops}}
::: a subroutine of {{The Linux Kernel/id|nvme_scan_work}} adds a new disk with {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|nvme_init}} - local PCI nvme module init
:: {{The Linux Kernel/id|nvme_probe}}
::: {{The Linux Kernel/id|nvme_init_ctrl}} ...
::: {{The Linux Kernel/id|nvme_pci_ctrl_ops}}
: {{The Linux Kernel/id|nvme_core_init}} - module init
'''Fabrics'''
⚲ interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/fabrics.h}} – NVMe over Fabrics host common definitions
:: {{The Linux Kernel/id|nvmf_register_transport}} registers {{The Linux Kernel/id|nvmf_transport_ops}}
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
⚙️ internals:
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
:: {{The Linux Kernel/id|nvmf_misc}}
::: {{The Linux Kernel/id|nvmf_dev_fops}}
:::: {{The Linux Kernel/id|nvmf_dev_write}}
::::: {{The Linux Kernel/id|nvmf_create_ctrl}} binds {{The Linux Kernel/id|nvmf_transport_ops}}
'''Target''' {{The Linux Kernel/source|drivers/nvme/target}}:
⚲ Interfaces: {{The Linux Kernel/source|drivers/nvme/target/nvmet.h}}
: {{The Linux Kernel/id|nvmet_register_transport}} registers {{The Linux Kernel/id|nvmet_fabrics_ops}}
: {{The Linux Kernel/id|nvmet_init}} - module init
: {{The Linux Kernel/id|fcloop_init}} - loopback test module init which can be useful to test NVMe-FC transport interfaces.
{| class="wikitable"
|-
!
! colspan="3" |NVMe over {{w|Switched fabric|Fabrics}}
|-
!<div style='text-align:left'>Layers</div>
!{{w|Transmission Control Protocol|TCP}}
![[../Networking#RDMA|RDMA]]
!{{w|Fibre Channel}}
|-
!<div style='text-align:left'>Host modules</div>
|{{The Linux Kernel/id|nvme_tcp_init_module}}
|{{The Linux Kernel/id|nvme_rdma_init_module}}
|{{The Linux Kernel/id|nvme_fc_init_module}}
|-
!<div style='text-align:left'>Fabrics protocols</div>
|{{The Linux Kernel/include|linux/nvme-tcp.h}}
|{{The Linux Kernel/include|linux/nvme-rdma.h}}
|{{The Linux Kernel/include|linux/nvme-fc.h}}
{{The Linux Kernel/include|linux/nvme-fc-driver.h}}
|-
!<div style='text-align:left'>Target modules</div>
|{{The Linux Kernel/id|nvmet_tcp_init}}
|{{The Linux Kernel/id|nvmet_rdma_init}}
|{{The Linux Kernel/id|nvmet_fc_init_module}}
|}
👁 Example: {{The Linux Kernel/id|nvme_loop_init_module}} nvme loopback
: {{The Linux Kernel/id|nvme_loop_transport}} - fabrics operations
:: {{The Linux Kernel/id|nvme_loop_create_ctrl}}
::: {{The Linux Kernel/id|nvme_loop_create_io_queues}}
: {{The Linux Kernel/id|nvme_loop_ops}} - target operation
:: {{The Linux Kernel/id|nvme_loop_add_port}}
:: {{The Linux Kernel/id|nvme_loop_queue_response}}
== ... ==
🚀 Advanced
: {{The Linux Kernel/man|1|pidstat}} – reports task statistics
: /proc/self/io – I/O statistics for the process (see {{The Linux Kernel/man|5|proc}})
💾 Historical storage drivers
: {{The Linux Kernel/source|drivers/ata}} - {{w|Parallel ATA}}
📖 Further reading about storage
: [https://github.com/iovisor/bcc/blob/master/README.md#storage-and-filesystems-tools bcc/ebpf storage and filesystems tools]
{{BookCat}}
iupiksaxbdssd7k18c997z0hjzehore
4641525
4641516
2026-06-28T15:27:29Z
Conan
3188
Storage: file.h, mount.h, namei.h, fs_context.h, backing-dev.h header references
4641525
wikitext
text/x-wiki
{{DISPLAYTITLE:Storage functionality}}
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor=#cef | storage
|-style=""
| bgcolor=#aef | [[#Files_and_directories|files & directories access]]
|-style=""
| bgcolor=#8df | [[#Virtual File System|Virtual File System]]
|-style=""
| bgcolor=#8ce |[[#Page_cache|page cache]]
|-style=""
| bgcolor=#7ac |[[#Logical file systems|logical file systems]]
|-style=""
| bgcolor=#69a |[[#Block_device_layer|block devices]]
|-style=""
| bgcolor=#689 |[[#Storage_drivers|storage drivers]]
|}
Storage functionality provides access to various storage devices via files and directories of files.
Most of the storage is persistent as flash memory, SSD and legacy hard disks.
Another kind of storage is temporary.
The ''file system'' provides an abstraction to organize the information into separate pieces of data (called ''files'') identified by a unique name.
Each file system type defines their own structures and logic rules used to manage these groups of information and their names.
Linux supports a plethora of different file system types, local and remote, native and from other operating systems.
To accommodate such disparity the kernel defines a common top layer, the ''virtual file system'' (VFS) layer.
[[File:The Linux Storage Stack Diagram.svg|Summary of the Linux kernel's storage stack|right|800x800px]]
== Files and directories ==
Four basic files access system calls:
: {{The Linux Kernel/man|2|open}} ↪ {{The Linux Kernel/id|do_sys_open}} - opens a file by name and returns a {{w|file descriptor}} (<big>fd</big>). Below functions operates on a fd.
: {{The Linux Kernel/man|2|close}} ↪ {{The Linux Kernel/id|close_fd}}
: {{The Linux Kernel/man|2|read}} ↪ {{The Linux Kernel/id|ksys_read}}
: {{The Linux Kernel/man|2|write}} ↪ {{The Linux Kernel/id|ksys_write}}
File in Linux and UNIX is not only physical file on persistent storage.
File interface is used to access pipes, sockets and other pseudo-files.
🔧 TODO
: {{The Linux Kernel/man|2|readlink}} , {{The Linux Kernel/man|2|symlink}} , {{The Linux Kernel/man|2|link}}
: {{The Linux Kernel/man|3|readdir}} ⇾ {{The Linux Kernel/man|2|getdents}}
: {{The Linux Kernel/man|7|path_resolution}}
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
⚙️ Files and directories internals
: {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/source|fs/open.c}} – open, close and related file operations
: {{The Linux Kernel/include|linux/namei.h}}, {{The Linux Kernel/source|fs/namei.c}} – pathname lookup and resolution
: {{The Linux Kernel/source|fs/read_write.c}} – read, write and lseek operations
: {{The Linux Kernel/source|fs/xattr.c}} – extended attributes
: {{The Linux Kernel/source|fs/notify}} – {{The Linux Kernel/man|7|inotify}} and {{The Linux Kernel/man|7|fanotify}} filesystem event notification
📚 Files and directories references
: [https://www.gnu.org/software/libc/manual/html_node/I_002fO-Overview.html Input/Output, The GNU C Library]
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
: {{w|Unix file types}}
=== File locks ===
File locks are mechanisms that allow processes to coordinate access to shared files.
These locks help prevent conflicts when multiple processes or threads attempt to access the same file simultaneously.
⚲ API
: {{The Linux Kernel/man|8|lslocks}} – list local system locks
: {{The Linux Kernel/man|3|lockf}} – apply, test or remove a POSIX lock on an open file
: {{The Linux Kernel/man|2|flock}} – apply or remove an advisory BSD lock on an open file
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
:: {{The Linux Kernel/id|F_SETLK}} – advisory record lock
:: {{The Linux Kernel/id|F_OFD_SETLK}} – Open File Description Lock
:: {{The Linux Kernel/id|flock}} – lock parameters
: ⚠️ Avoid mixing flock and fcntl locks on the same file as they don’t interact with each other.
⚙️ Internals
: {{The Linux Kernel/include|linux/filelock.h}}
: {{The Linux Kernel/source|fs/locks.c}} – POSIX and flock file locking
: {{The Linux Kernel/include|trace/events/filelock.h}}
💾 ''Historical: [https://elixir.bootlin.com/linux/v5.14/K/ident/CONFIG_MANDATORY_FILE_LOCKING Mandatory locking] feature is no longer supported at all in Linux 5.15 and above because the implementation is unreliable.''
=== Asynchronous I/O ===
🚀 advanced features
'''AIO'''
: https://lwn.net/Kernel/Index/#Asynchronous_IO
: {{The Linux Kernel/man|2|io_submit}} {{The Linux Kernel/man|2|io_setup}} {{The Linux Kernel/man|2|io_cancel}} {{The Linux Kernel/man|2|io_destroy}} {{The Linux Kernel/man|2|io_getevents}}
: {{The Linux Kernel/include|uapi/linux/aio_abi.h}}
: {{The Linux Kernel/source|fs/aio.c}} – async I/O implementation
: {{The Linux Kernel/ltp|kernel|io/aio}}
'''{{w|io_uring}}'''
🌱 ''New since release 5.1 in May 2019''
: https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
: https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/
: {{The Linux Kernel/id|io_uring_enter}} {{The Linux Kernel/id|io_uring_setup}} {{The Linux Kernel/id|io_uring_register}}
: {{The Linux Kernel/include|linux/io_uring.h}}
: {{The Linux Kernel/include|uapi/linux/io_uring.h}}
: {{The Linux Kernel/source|io_uring}}
: https://lwn.net/Kernel/Index/#io_uring
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/810414/ The rapid growth of io_uring]
:: [https://lwn.net/Articles/815491/ Automatic buffer selection for io_uring]
:: [https://lwn.net/Articles/826053/ Operations restrictions for io_uring]
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/803070/ Redesigned workqueues for io_uring]
: {{The Linux Kernel/ltp|kernel/syscalls|io_uring}}
=== {{w|Asynchronous_I/O#Forms|Non-blocking I/O}} ===
Allow non-blocking access to multiple file descriptors.
'''Efficient event polling {{w|epoll}}'''
⚲ API:
: {{The Linux Kernel/include|uapi/linux/eventpoll.h}}
: {{The Linux Kernel/man|7|epoll}}
: {{The Linux Kernel/man|2|epoll_create}} ↪ {{The Linux Kernel/id|do_epoll_create}}
: {{The Linux Kernel/man|2|epoll_ctl}} ↪ {{The Linux Kernel/id|do_epoll_ctl}}
: {{The Linux Kernel/man|2|epoll_wait}} ↪ {{The Linux Kernel/id|do_epoll_wait}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/eventpoll.c}} – efficient event polling (epoll)
'''{{w|Select (Unix)|select}} and {{w|poll (Unix)|poll}}'''
💾 ''Historical: Select and poll system calls are derived from UNIX''
⚲ API:
: {{The Linux Kernel/man|2|poll}} ↪ {{The Linux Kernel/id|do_sys_poll}}
: {{The Linux Kernel/man|2|select}} ↪ {{The Linux Kernel/id|kern_select}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/select.c}} – select and poll implementation
=== Vectored I/O ===
🚀 advanced feature
{{w|Vectored I/O}}, also known as scatter/gather I/O, is a method of input and output by which a single procedure call sequentially reads data from multiple buffers and writes it to a single data stream, or reads data from a data stream and writes it to multiple buffers, as defined in a vector of buffers. Scatter/gather refers to the process of gathering data from, or scattering data into, the given set of buffers. Vectored I/O can operate synchronously or asynchronously. The main reasons for using vectored I/O are efficiency and convenience.
⚲ API:
: {{The Linux Kernel/include|uapi/linux/uio.h}}
: {{The Linux Kernel/include|linux/uio.h}}
: {{The Linux Kernel/id|iovec}}
: {{The Linux Kernel/man|2|readv}} ↪ {{The Linux Kernel/id|do_readv}}
: {{The Linux Kernel/man|2|writev}} ↪ {{The Linux Kernel/id|do_writev}}
⚙️ Internals:
: {{The Linux Kernel/id|iov_iter}}
: {{The Linux Kernel/id|do_readv}} ↯ call hierarchy:
:: {{The Linux Kernel/id|vfs_readv}}
::: {{The Linux Kernel/id|import_iovec}}
::: {{The Linux Kernel/id|ext4_file_read_iter}}
: {{The Linux Kernel/source|lib/iov_iter.c}} – I/O vector iterator operations
=== ... ===
📖 References
: [https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html Fast Scatter-Gather I/O, The GNU C Library]
: https://lwn.net/Kernel/Index/#Vectored_IO
: https://lwn.net/Kernel/Index/#Scattergather_chaining
📚 Further reading
: https://deepwiki.com/torvalds/linux/4-filesystems
== Virtual File System ==
The {{w|virtual file system}} (VFS) is an abstract layer on top of a concrete logical file system.
The purpose of a VFS is to allow client applications to access different types of logical file systems in a uniform way.
A VFS can, for example, be used to access local and [[../Networking#Network_storage|network storage]] devices transparently without the client application noticing the difference.
It can be used to bridge the differences in Windows, classic Mac OS/macOS and Unix filesystems, so that applications can access files on local file systems of those types without having to know what type of file system they are accessing.
A VFS specifies an interface (or a "contract") between the kernel and a logical file system.
Therefore, it is easy to add support for new file system types to the kernel simply by fulfilling the contract.
🔧 TODO: {{The Linux Kernel/id|vfsmount}}, {{The Linux Kernel/id|vfs_create}}, {{The Linux Kernel/id|vfs_read}}, {{The Linux Kernel/id|vfs_write}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/inode.c}} – inode allocation and management
: {{The Linux Kernel/include|linux/dcache.h}}, {{The Linux Kernel/source|fs/dcache.c}} – dentry cache, pathname-to-inode lookup
: {{The Linux Kernel/source|fs/super.c}} – superblock operations, filesystem mount/unmount
: {{The Linux Kernel/include|linux/file.h}}, {{The Linux Kernel/source|fs/file.c}} – file table, fd allocation
: {{The Linux Kernel/include|linux/mount.h}} – filesystem mount structures
: {{The Linux Kernel/include|linux/fs_context.h}} – filesystem mount context (replaces old mount API)
: {{The Linux Kernel/source|fs/readdir.c}} – directory listing (getdents)
📚 VFS References
: {{The Linux Kernel/doc|VFS|filesystems/#core-vfs-documentation}}
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
== Logical file systems ==
A {{w|file system}} (or ''filesystem'') is used to control how data is stored and retrieved.
Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins.
By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified.
Each group of data is called a "file".
The structure and logic rules used to manage the groups of information and their names is called a "file system".
There are many different kinds of file systems.
Each one has different structure and logic, properties of speed, flexibility, security, size and more.
Some file systems have been designed to be used for specific applications.
For example, the ISO 9660 file system is designed specifically for optical discs.
File systems can be used on many different kinds of storage devices.
Each storage device uses a different kind of media.
The most common storage device in use today is a {{w|SSD}}.
Other media that was used are hard disk, magnetic tape and optical disc.
In some cases, the computer's main memory (RAM) is used to create a temporary file system for short-term use.
Raw storage is called a block device.
Linux supports many different file systems, but common choices for the system disk on a block device include the ext* family (such as {{w|ext2}}, {{w|ext3}} and {{w|ext4}}), {{w|XFS}}, {{w|ReiserFS}} and {{w|btrfs}}.
For raw Flash without a {{w|flash translation layer}} (FTL) or {{w|Memory Technology Device}} (MTD), there is {{w|UBIFS}}, {{w|JFFS2}}, and {{w|YAFFS}}, among others. {{w|SquashFS}} is a common compressed read-only file system.
NFS and other network FS are described further in paragraph [[../Networking#Network_storage|Network storage]].
⚲ Shell interfaces:
: cat /proc/filesystems
: ls /sys/fs/
: {{The Linux Kernel/man|8|mount}}
: {{The Linux Kernel/man|8|umount}}
: {{The Linux Kernel/man|8|findmnt}}
: {{The Linux Kernel/man|1|mountpoint}}
: {{The Linux Kernel/man|1|df}}
Infrastructure ⚲ API function {{The Linux Kernel/id|register_filesystem}} registers structs {{The Linux Kernel/id|file_system_type}} and stores them in linked list ⚙️ {{The Linux Kernel/id|file_systems}}.
Function {{The Linux Kernel/id|ext4_init_fs}} registers {{The Linux Kernel/id|ext4_fs_type}}.
Operation of ''file system opening'' is called mounting: {{The Linux Kernel/id|ext4_get_tree}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/namespace.c}} – mount and namespace operations
:: {{The Linux Kernel/man|2|mount}}
::: {{The Linux Kernel/id|do_mount}}
: {{The Linux Kernel/include|linux/buffer_head.h}}
:: {{The Linux Kernel/id|super_block}}
:: {{The Linux Kernel/id|sb_bread}}
: {{The Linux Kernel/source|fs}} – filesystem implementations
:: {{The Linux Kernel/source|fs/ext4/ext4.h}} – ext4 on-disk format and internal structures
::: {{The Linux Kernel/id|ext4_sb_bread}}
Other notable filesystems:
: {{w|FUSE (filesystem)|FUSE}} – {{The Linux Kernel/source|fs/fuse}} – filesystem in userspace
: {{w|OverlayFS}} – {{The Linux Kernel/source|fs/overlayfs}} – union mount filesystem, used by containers
: {{w|Btrfs}} – {{The Linux Kernel/source|fs/btrfs}}
: {{w|XFS}} – {{The Linux Kernel/source|fs/xfs}}
📚 References:
: {{The Linux Kernel/doc|filesystems|filesystems/#filesystems}}
== Page cache ==
A page cache or disk cache is a transparent cache for the memory pages originating from a secondary storage device such as a hard disk drive.
The operating system keeps a page cache in otherwise unused portions of the main memory, resulting in quicker access to the contents of cached pages and overall performance improvements.
The page cache is implemented by the kernel, and is mostly transparent to applications.
Usually, all physical memory not directly allocated to applications is used by the operating system for the page cache.
Since the memory would otherwise be idle and is easily reclaimed when applications request it, there is generally no associated performance penalty and the operating system might even report such memory as "free" or "available".
The page cache also aids in writing to a disk.
Pages in the main memory that have been modified during writing data to disk are marked as "dirty" and have to be flushed to disk before they can be freed.
When a file write occurs, the page backing the particular block is looked up.
If it is already found in the page cache, the write is done to that page in the main memory.
Otherwise, when the write perfectly falls on page size boundaries, the page is not even read from disk, but allocated and immediately marked dirty.
Otherwise, the page(s) are fetched from disk and requested modifications are done.
Not all cached pages can be written to as program code is often mapped as read-only or copy-on-write; in the latter case, modifications to code will only be visible to the process itself and will not be written to disk.
⚲ API:
: {{The Linux Kernel/man|2|fsync}} ↪ {{The Linux Kernel/id|do_fsync}}
: {{The Linux Kernel/man|2|sync_file_range}} ↪ {{The Linux Kernel/id|ksys_sync_file_range}}
: {{The Linux Kernel/man|2|syncfs}} ↪ {{The Linux Kernel/id|sync_filesystem}}
⚙️ Internals:
: {{The Linux Kernel/include|linux/pagemap.h}}, {{The Linux Kernel/source|mm/filemap.c}} – page cache core, read/write/mmap paths
: {{The Linux Kernel/include|linux/buffer_head.h}}, {{The Linux Kernel/source|fs/buffer.c}} – buffer heads, block-level page cache interface
: {{The Linux Kernel/include|linux/writeback.h}}, {{The Linux Kernel/source|mm/page-writeback.c}} – dirty page writeback throttling
: {{The Linux Kernel/id|address_space}} – per-inode page cache, defined in {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/include|linux/backing-dev.h}} – backing device info, writeback bandwidth
: {{The Linux Kernel/id|wb_workfn}}, {{The Linux Kernel/id|do_writepages}}
📚 References
: {{w|Page cache}}
More
: [https://lwn.net/Articles/717953/ The future of DAX ] - direct access bypassing the cache
: [https://tldp.org/LDP/lki/lki-4.html Linux Page Cache in Linux Kernel 2.4 Internals]
== Zero-copy ==
🚀 advanced features
Writing data to storage and reading are very resource consuming operations.
Copying memory is time and CPU consuming operation too.
Set of methods to avoid copying operations is called {{w|zero-copy}}.
The goal of zero-copy methods is a fast and efficient data transfer within the system.
The first and simplest method is {{w|Pipeline (Unix)|Pipeline}}, invoked by operator "|" in shells.
Instead of writing data into temporary file and reading, the data is passed efficiently via a pipe bypassing a storage.
The second method is {{w|Tee_(command)|tee}}.
⚲ Syscalls:
: {{The Linux Kernel/man|2|pipe2}}
: {{The Linux Kernel/man|2|tee}}, {{The Linux Kernel/man|1|tee}}
: {{The Linux Kernel/man|2|sendfile}}
: {{The Linux Kernel/man|2|copy_file_range}}
: {{The Linux Kernel/man|2|splice}}
: {{The Linux Kernel/man|2|vmsplice}}
⚲ API and ⚙️ Internals:
: '''{{The Linux Kernel/man|2|pipe2}}''' ↪ {{The Linux Kernel/id|do_pipe2}} - creates pipe
:: uses {{The Linux Kernel/id|pipe_fs_type}}, {{The Linux Kernel/id|pipefifo_fops}}
: '''{{The Linux Kernel/man|2|tee}}''' ↪ {{The Linux Kernel/id|do_tee}} - duplicates pipe content
:: calls {{The Linux Kernel/id|link_pipe}}
: '''{{The Linux Kernel/man|2|sendfile}}''' ↪ {{The Linux Kernel/id|do_sendfile}} - transfers data between file descriptors, the output can be a socket. Used in [[../Networking#Network_storage|network storage]] and servers.
:: Calls: {{The Linux Kernel/id|do_splice_direct}}, {{The Linux Kernel/id|splice_direct_to_actor}}
: '''{{The Linux Kernel/man|2|copy_file_range}}''' ↪ {{The Linux Kernel/id|vfs_copy_file_range}} - transfers data between files
:: calls custom {{The Linux Kernel/id|remap_file_range}} like {{The Linux Kernel/id|nfs42_remap_file_range}}
:: or custom {{The Linux Kernel/id|copy_file_range}} like {{The Linux Kernel/id|fuse_copy_file_range}}
:: or {{The Linux Kernel/id|do_splice_direct}}
: '''{{The Linux Kernel/man|2|splice}}''' ↪ {{The Linux Kernel/id|do_splice}} - splices data to/from a pipe.
:: There are three cases regarding which end being a pipe:
:# {{The Linux Kernel/id|do_splice_from}} - pipe → file
:#: Calls custom {{The Linux Kernel/id|splice_write}} or {{The Linux Kernel/id|iter_file_splice_write}}
:# {{The Linux Kernel/id|do_splice_read}} - file → pipe
:#: Calls custom {{The Linux Kernel/id|splice_read}} or {{The Linux Kernel/id|copy_splice_read}}
:# {{The Linux Kernel/id|splice_pipe_to_pipe}} - both are pipes
: '''{{The Linux Kernel/man|2|vmsplice}}''' ↪
:: {{The Linux Kernel/id|vmsplice_to_pipe}} – splices user pages to a pipe
:: {{The Linux Kernel/id|vmsplice_to_user}} – splices a pipe to user pages
⚲ API
: {{The Linux Kernel/include|linux/splice.h}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/pipe.c}} – pipe and FIFO implementation
: {{The Linux Kernel/source|fs/splice.c}} – splice data transfer between file descriptors
🔧 TODO:
{{The Linux Kernel/id|zerocopy_sg_from_iter}} builds a zerocopy skb datagram from an iov_iter. Used in {{The Linux Kernel/id|tap_get_user}} and {{The Linux Kernel/id|tun_get_user}}.
{{The Linux Kernel/id|skb_zerocopy}}
{{The Linux Kernel/id|skb_zerocopy_iter_dgram}}
📚 References
: {{The Linux Kernel/man|7|pipe}}
: {{The Linux Kernel/man|7|fifo}}
: {{The Linux Kernel/doc|splice and pipes|filesystems/splice.html}}
:: {{The Linux Kernel/doc|Pipes API|filesystems/splice.html#pipes-api}}
: {{w|splice (system call)}}
: LTP: {{The Linux Kernel/ltp|kernel/syscalls|pipe}}, {{The Linux Kernel/ltp|kernel/syscalls|pipe2}}, {{The Linux Kernel/ltp|kernel/syscalls|tee}}, {{The Linux Kernel/ltp|kernel/syscalls|sendfile}}, {{The Linux Kernel/ltp|kernel/syscalls|copy_file_range}}, {{The Linux Kernel/ltp|kernel/syscalls|splice}}, {{The Linux Kernel/ltp|kernel/syscalls|vmsplice}}
== Block device layer ==
The block device layer in Linux provides an abstraction for accessing storage devices,
such as SSDs and USB drives, by presenting them as a series of fixed-size blocks.
It sits between the hardware and the file system,
allowing applications and file systems to perform read and write operations efficiently
without needing to know the specifics of the underlying hardware.
Key components include block drivers, the I/O scheduler,
and buffer management, which work together to handle requests,
optimize access patterns, and ensure data integrity.
This layer supports essential features like caching, partition management,
and queueing mechanisms to balance performance and reliability.
⚲ Interfaces:
: {{The Linux Kernel/include|linux/blk_types.h}}
:: {{The Linux Kernel/id|bio}} – main unit of I/O for the block layer and lower layers
:: {{The Linux Kernel/id|req_op}} – operations common to the bio and request structures
: {{The Linux Kernel/include|linux/bio.h}}
: {{The Linux Kernel/id|block_device}}
:: {{The Linux Kernel/id|block_size}}
: {{The Linux Kernel/id|blk_alloc_disk}} allocates {{The Linux Kernel/id|gendisk}}
: {{The Linux Kernel/id|add_disk}}
:: {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|block_device_operations}}
: {{The Linux Kernel/include|linux/blkdev.h}}
:: {{The Linux Kernel/id|gendisk}}
::: {{The Linux Kernel/id|dev_to_disk}}, {{The Linux Kernel/id|disk_to_dev}}
:: {{The Linux Kernel/id|block_class}} – block devices Driver Model class
:: {{The Linux Kernel/id|register_blkdev}}
:: {{The Linux Kernel/id|request}}
:: {{The Linux Kernel/id|request_queue}}
⚙️ Internals.
: {{The Linux Kernel/source|block}} – block layer core
: {{The Linux Kernel/source|fs/iomap}} – modern filesystem I/O mapping layer (used by xfs, ext4, btrfs)
: {{The Linux Kernel/id|block_class}}
👁 Examples:
: {{The Linux Kernel/source|drivers/block/brd.c}} - small RAM backed block device driver
: {{The Linux Kernel/source|drivers/block/null_blk}} – null block test device
=== Device mapper ===
The ''device mapper'' is a framework provided by the kernel for mapping physical block devices onto higher-level "virtual block devices".
It forms the foundation of LVM2, software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device.
Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption.
User space applications that need to create new mapped devices talk to the device mapper via the <code>libdevmapper.so</code> shared library, which in turn issues ioctls to the <code>/dev/mapper/control</code> device node.
Functions provided by the device mapper include linear, striped and error ''mappings,'' as well as crypt and multipath ''targets.''
For example, two disks may be concatenated into one logical volume with a pair of ''linear'' mappings, one for each disk.
As another example, ''crypt'' target encrypts the data passing through the specified device, by using the Linux kernel's Crypto API.
The following mapping targets are available:
: ''cache'' - allows the creation of hybrid volumes, by using solid-state drives (SSDs) as caches for hard disk drives (HDDs)
: ''crypt'' - provides data encryption, by using the Linux kernel's Crypto API
: ''delay'' - delays reads and/or writes to different devices (used for testing)
: ''era'' - behaves in a way similar to the linear target, while it keeps track of blocks that were written to within a user-defined period of time
: ''error'' - simulates I/O errors for all mapped blocks (used for testing)
: ''flakey'' - simulates periodic unreliable behaviour (used for testing)
: ''linear'' - maps a continuous range of blocks onto another block device
: ''mirror'' - maps a mirrored logical device, while providing data redundancy
: ''multipath'' - supports the mapping of multipathed devices, through usage of their path groups
: ''raid'' - offers an interface to the Linux kernel's software RAID driver (md)
: ''snapshot'' and ''snapshot-origin'' - used for creation of LVM snapshots, as part of the underlining copy-on-write scheme
: ''striped'' - strips the data across physical devices, with the number of stripes and the striping chunk size as parameters
: ''zero'' - an equivalent of <code>/dev/zero</code>, all reads return blocks of zeros, and writes are discarded
📚 References
: {{w|Device mapper}}
: {{The Linux Kernel/doc|Device mapper|admin-guide/device-mapper}}
: {{The Linux Kernel/include|linux/device-mapper.h}}
: {{The Linux Kernel/source|drivers/md}} – device mapper and software RAID
: https://lwn.net/Kernel/Index/#Device_mapper
=== Multi-Queue Block IO Queueing ===
The blk-mq API enhances IO performance
by leveraging multiple queues for parallel processing,
addressing bottlenecks from traditional single-queue designs.
It uses software queues for scheduling,
merging, and reordering requests,
and hardware queues to interface directly with devices.
If hardware resources are limited,
requests are temporarily queued for later dispatch.
⚲ Interfaces:
: /sys/devices/.../mq/
: {{The Linux Kernel/include|linux/blk-mq.h}}
:: Structures:
::: {{The Linux Kernel/id|blk_mq_hw_ctx}} – hardware dispatch queue context
::: {{The Linux Kernel/id|blk_mq_tag_set}} – shared between request queues
:::: {{The Linux Kernel/id|blk_mq_ops}}
:::: {{The Linux Kernel/id|blk_mq_tags}}
:::: {{The Linux Kernel/id|blk_mq_queue_map}} – map software queues to hardware queues
::: {{The Linux Kernel/id|request}}
👁️ Example
: {{The Linux Kernel/source|drivers/block/null_blk}} – multi-queue aware block test driver
⚙️ Internals
: /sys/kernel/debug/block/*/hctx*
: {{The Linux Kernel/source|block/blk-mq.h}} – blk-mq internal definitions
:: {{The Linux Kernel/id|blk_mq_ctx}} – software staging queue context
: {{The Linux Kernel/source|block/blk-mq.c}} – block multi-queue core code
: {{The Linux Kernel/source|block/blk-mq-tag.c}} – tag allocation using scalable bitmaps
: ...
📖 References
: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
=== I/O scheduler ===
I/O scheduling (or disk scheduling) is the method chosen by the kernel to decide in which order the block I/O operations will be submitted to the storage volumes.
I/O scheduling usually has to work with hard disk drives that have long access times for requests placed far away from the current position of the disk head (this operation is called a seek).
To minimize the effect this has on system performance, most I/O schedulers implement a variant of the elevator algorithm that reorders the incoming randomly ordered requests so the associated data would be accessed with minimal arm/head movement.
The particular I/O scheduler used with certain block device can be switched at run time by modifying the corresponding <code>/sys/block/<block_device>/queue/scheduler</code> file in the sysfs filesystem.
Some I/O schedulers also have tunable parameters that can be set through files in <code>/sys/block/<block_device>/queue/iosched/</code>.
⚲ Interfaces:
: {{The Linux Kernel/man|1|ionice}} – set or get process I/O scheduling class and priority
:: {{The Linux Kernel/man|2|ioprio_get}}, ioprio_set
: {{The Linux Kernel/include|linux/elevator.h}}
: Function {{The Linux Kernel/id|elv_register}} registers struct {{The Linux Kernel/id|elevator_type}}.
: {{The Linux Kernel/id|elevator_queue}}
⚙️ Internals:
: {{The Linux Kernel/source|block/ioprio.c}} – I/O priority system call
: {{The Linux Kernel/source|block/elevator.c}} – I/O scheduler framework
: {{The Linux Kernel/source|block/Kconfig.iosched}} – I/O scheduler Kconfig options
: {{The Linux Kernel/source|block/bfq-iosched.c}} – Budget Fair Queueing scheduler
: {{The Linux Kernel/source|block/kyber-iosched.c}} – Kyber multiqueue scheduler
: {{The Linux Kernel/source|block/mq-deadline.c}} – deadline multiqueue scheduler
: {{The Linux Kernel/include|trace/events/block.h}}
📖 References:
: {{w|I/O scheduling}}
: {{w|Elevator algorithm}}
: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
: {{The Linux Kernel/doc|Deadline IO scheduler tunables|deadline-iosched.html}}
: https://www.cloudbees.com/blog/linux-io-scheduler-tuning/
: https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers
=== ... ===
📖 References
: {{The Linux Kernel/doc|Block devices|block}}
:: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
::: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
::: {{The Linux Kernel/doc|Deadline IO scheduler tunables|block/deadline-iosched.html}}
::: {{The Linux Kernel/doc|Kyber I/O scheduler tunables|block/kyber-iosched.html}}
:: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
📚 Further reading
: /sys/kernel/debug/block/*/
: https://lwn.net/Kernel/Index/#Block_layer
: [https://lore.kernel.org/linux-block/ block devices ML]
: [http://lwn.net/images/pdf/LDD3/ch16.pdf LDD3:Block Drivers]
: [http://www.xml.com/ldd/chapter/book/ch12.html LDD1:Loading Block Drivers]
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch14.html ULK3 Chapter 14. Block Device Drivers]
: [https://sg.danny.cz/sg/The Linux SCSI Generic (sg) Driver]
:: [https://sg.danny.cz/sg/scsi_debug.html Scsi_debug adapter driver for Linux]
:: https://github.com/doug-gilbert/sg3_utils
== {{w|Computer data storage|Storage}} drivers ==
🔧 TODO
⚙️ Internals
: {{The Linux Kernel/source|drivers/nvmem}} – {{w|Non-volatile memory}}
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/scsi}} – {{w|SCSI|Small Computer System Interface}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/mtd}} – {{w|Memory Technology Device}} for 🤖 embedded devices
=== NVMe ===
{{w|NVM Express}} drivers provide accesses a computer's {{w|non-volatile storage}}.
Local storage is attached via {{w|PCIe|PCI Express}} bus.
PCI NVMe device driver entry point is {{The Linux Kernel/id|nvme_init}}.
Remote storage driver is called target and local {{w|Proxy_pattern|proxy}} driver is called host. {{w|Switched fabric|Fabrics}} connect remote targets with local host.
A fabric can be based on {{w|Remote direct memory access|RDMA}}, {{w|Transmission Control Protocol|TCP}} or {{w|Fibre Channel}} protocols.
⚲ API:
: [https://github.com/linux-nvme/nvme-cli nvme-cli]
: {{The Linux Kernel/include|uapi/linux/nvme_ioctl.h}}
: {{The Linux Kernel/include|linux/nvme.h}}
⚙️ '''Internals:'''
: {{The Linux Kernel/source|drivers/nvme}} – NVMe drivers
'''Host''' {{The Linux Kernel/source|drivers/nvme/host}}:
⚲ Interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/nvme.h}} – NVMe host common definitions
:: {{The Linux Kernel/id|nvme_init_ctrl}} initializes a NVMe controller structures {{The Linux Kernel/id|nvme_ctrl}} with operations {{The Linux Kernel/id|nvme_ctrl_ops}}
::: a subroutine of {{The Linux Kernel/id|nvme_scan_work}} adds a new disk with {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|nvme_init}} - local PCI nvme module init
:: {{The Linux Kernel/id|nvme_probe}}
::: {{The Linux Kernel/id|nvme_init_ctrl}} ...
::: {{The Linux Kernel/id|nvme_pci_ctrl_ops}}
: {{The Linux Kernel/id|nvme_core_init}} - module init
'''Fabrics'''
⚲ interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/fabrics.h}} – NVMe over Fabrics host common definitions
:: {{The Linux Kernel/id|nvmf_register_transport}} registers {{The Linux Kernel/id|nvmf_transport_ops}}
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
⚙️ internals:
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
:: {{The Linux Kernel/id|nvmf_misc}}
::: {{The Linux Kernel/id|nvmf_dev_fops}}
:::: {{The Linux Kernel/id|nvmf_dev_write}}
::::: {{The Linux Kernel/id|nvmf_create_ctrl}} binds {{The Linux Kernel/id|nvmf_transport_ops}}
'''Target''' {{The Linux Kernel/source|drivers/nvme/target}}:
⚲ Interfaces: {{The Linux Kernel/source|drivers/nvme/target/nvmet.h}}
: {{The Linux Kernel/id|nvmet_register_transport}} registers {{The Linux Kernel/id|nvmet_fabrics_ops}}
: {{The Linux Kernel/id|nvmet_init}} - module init
: {{The Linux Kernel/id|fcloop_init}} - loopback test module init which can be useful to test NVMe-FC transport interfaces.
{| class="wikitable"
|-
!
! colspan="3" |NVMe over {{w|Switched fabric|Fabrics}}
|-
!<div style='text-align:left'>Layers</div>
!{{w|Transmission Control Protocol|TCP}}
![[../Networking#RDMA|RDMA]]
!{{w|Fibre Channel}}
|-
!<div style='text-align:left'>Host modules</div>
|{{The Linux Kernel/id|nvme_tcp_init_module}}
|{{The Linux Kernel/id|nvme_rdma_init_module}}
|{{The Linux Kernel/id|nvme_fc_init_module}}
|-
!<div style='text-align:left'>Fabrics protocols</div>
|{{The Linux Kernel/include|linux/nvme-tcp.h}}
|{{The Linux Kernel/include|linux/nvme-rdma.h}}
|{{The Linux Kernel/include|linux/nvme-fc.h}}
{{The Linux Kernel/include|linux/nvme-fc-driver.h}}
|-
!<div style='text-align:left'>Target modules</div>
|{{The Linux Kernel/id|nvmet_tcp_init}}
|{{The Linux Kernel/id|nvmet_rdma_init}}
|{{The Linux Kernel/id|nvmet_fc_init_module}}
|}
👁 Example: {{The Linux Kernel/id|nvme_loop_init_module}} nvme loopback
: {{The Linux Kernel/id|nvme_loop_transport}} - fabrics operations
:: {{The Linux Kernel/id|nvme_loop_create_ctrl}}
::: {{The Linux Kernel/id|nvme_loop_create_io_queues}}
: {{The Linux Kernel/id|nvme_loop_ops}} - target operation
:: {{The Linux Kernel/id|nvme_loop_add_port}}
:: {{The Linux Kernel/id|nvme_loop_queue_response}}
== ... ==
🚀 Advanced
: {{The Linux Kernel/man|1|pidstat}} – reports task statistics
: /proc/self/io – I/O statistics for the process (see {{The Linux Kernel/man|5|proc}})
💾 Historical storage drivers
: {{The Linux Kernel/source|drivers/ata}} - {{w|Parallel ATA}}
📖 Further reading about storage
: [https://github.com/iovisor/bcc/blob/master/README.md#storage-and-filesystems-tools bcc/ebpf storage and filesystems tools]
{{BookCat}}
nipyayr20ljthxdp6wjalu9tuvv6vkg
4641528
4641525
2026-06-28T15:36:25Z
Conan
3188
Storage: xattr.h header reference
4641528
wikitext
text/x-wiki
{{DISPLAYTITLE:Storage functionality}}
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor=#cef | storage
|-style=""
| bgcolor=#aef | [[#Files_and_directories|files & directories access]]
|-style=""
| bgcolor=#8df | [[#Virtual File System|Virtual File System]]
|-style=""
| bgcolor=#8ce |[[#Page_cache|page cache]]
|-style=""
| bgcolor=#7ac |[[#Logical file systems|logical file systems]]
|-style=""
| bgcolor=#69a |[[#Block_device_layer|block devices]]
|-style=""
| bgcolor=#689 |[[#Storage_drivers|storage drivers]]
|}
Storage functionality provides access to various storage devices via files and directories of files.
Most of the storage is persistent as flash memory, SSD and legacy hard disks.
Another kind of storage is temporary.
The ''file system'' provides an abstraction to organize the information into separate pieces of data (called ''files'') identified by a unique name.
Each file system type defines their own structures and logic rules used to manage these groups of information and their names.
Linux supports a plethora of different file system types, local and remote, native and from other operating systems.
To accommodate such disparity the kernel defines a common top layer, the ''virtual file system'' (VFS) layer.
[[File:The Linux Storage Stack Diagram.svg|Summary of the Linux kernel's storage stack|right|800x800px]]
== Files and directories ==
Four basic files access system calls:
: {{The Linux Kernel/man|2|open}} ↪ {{The Linux Kernel/id|do_sys_open}} - opens a file by name and returns a {{w|file descriptor}} (<big>fd</big>). Below functions operates on a fd.
: {{The Linux Kernel/man|2|close}} ↪ {{The Linux Kernel/id|close_fd}}
: {{The Linux Kernel/man|2|read}} ↪ {{The Linux Kernel/id|ksys_read}}
: {{The Linux Kernel/man|2|write}} ↪ {{The Linux Kernel/id|ksys_write}}
File in Linux and UNIX is not only physical file on persistent storage.
File interface is used to access pipes, sockets and other pseudo-files.
🔧 TODO
: {{The Linux Kernel/man|2|readlink}} , {{The Linux Kernel/man|2|symlink}} , {{The Linux Kernel/man|2|link}}
: {{The Linux Kernel/man|3|readdir}} ⇾ {{The Linux Kernel/man|2|getdents}}
: {{The Linux Kernel/man|7|path_resolution}}
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
⚙️ Files and directories internals
: {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/source|fs/open.c}} – open, close and related file operations
: {{The Linux Kernel/include|linux/namei.h}}, {{The Linux Kernel/source|fs/namei.c}} – pathname lookup and resolution
: {{The Linux Kernel/source|fs/read_write.c}} – read, write and lseek operations
: {{The Linux Kernel/include|linux/xattr.h}}, {{The Linux Kernel/source|fs/xattr.c}} – extended attributes
: {{The Linux Kernel/source|fs/notify}} – {{The Linux Kernel/man|7|inotify}} and {{The Linux Kernel/man|7|fanotify}} filesystem event notification
📚 Files and directories references
: [https://www.gnu.org/software/libc/manual/html_node/I_002fO-Overview.html Input/Output, The GNU C Library]
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
: {{w|Unix file types}}
=== File locks ===
File locks are mechanisms that allow processes to coordinate access to shared files.
These locks help prevent conflicts when multiple processes or threads attempt to access the same file simultaneously.
⚲ API
: {{The Linux Kernel/man|8|lslocks}} – list local system locks
: {{The Linux Kernel/man|3|lockf}} – apply, test or remove a POSIX lock on an open file
: {{The Linux Kernel/man|2|flock}} – apply or remove an advisory BSD lock on an open file
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
:: {{The Linux Kernel/id|F_SETLK}} – advisory record lock
:: {{The Linux Kernel/id|F_OFD_SETLK}} – Open File Description Lock
:: {{The Linux Kernel/id|flock}} – lock parameters
: ⚠️ Avoid mixing flock and fcntl locks on the same file as they don’t interact with each other.
⚙️ Internals
: {{The Linux Kernel/include|linux/filelock.h}}
: {{The Linux Kernel/source|fs/locks.c}} – POSIX and flock file locking
: {{The Linux Kernel/include|trace/events/filelock.h}}
💾 ''Historical: [https://elixir.bootlin.com/linux/v5.14/K/ident/CONFIG_MANDATORY_FILE_LOCKING Mandatory locking] feature is no longer supported at all in Linux 5.15 and above because the implementation is unreliable.''
=== Asynchronous I/O ===
🚀 advanced features
'''AIO'''
: https://lwn.net/Kernel/Index/#Asynchronous_IO
: {{The Linux Kernel/man|2|io_submit}} {{The Linux Kernel/man|2|io_setup}} {{The Linux Kernel/man|2|io_cancel}} {{The Linux Kernel/man|2|io_destroy}} {{The Linux Kernel/man|2|io_getevents}}
: {{The Linux Kernel/include|uapi/linux/aio_abi.h}}
: {{The Linux Kernel/source|fs/aio.c}} – async I/O implementation
: {{The Linux Kernel/ltp|kernel|io/aio}}
'''{{w|io_uring}}'''
🌱 ''New since release 5.1 in May 2019''
: https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
: https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/
: {{The Linux Kernel/id|io_uring_enter}} {{The Linux Kernel/id|io_uring_setup}} {{The Linux Kernel/id|io_uring_register}}
: {{The Linux Kernel/include|linux/io_uring.h}}
: {{The Linux Kernel/include|uapi/linux/io_uring.h}}
: {{The Linux Kernel/source|io_uring}}
: https://lwn.net/Kernel/Index/#io_uring
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/810414/ The rapid growth of io_uring]
:: [https://lwn.net/Articles/815491/ Automatic buffer selection for io_uring]
:: [https://lwn.net/Articles/826053/ Operations restrictions for io_uring]
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/803070/ Redesigned workqueues for io_uring]
: {{The Linux Kernel/ltp|kernel/syscalls|io_uring}}
=== {{w|Asynchronous_I/O#Forms|Non-blocking I/O}} ===
Allow non-blocking access to multiple file descriptors.
'''Efficient event polling {{w|epoll}}'''
⚲ API:
: {{The Linux Kernel/include|uapi/linux/eventpoll.h}}
: {{The Linux Kernel/man|7|epoll}}
: {{The Linux Kernel/man|2|epoll_create}} ↪ {{The Linux Kernel/id|do_epoll_create}}
: {{The Linux Kernel/man|2|epoll_ctl}} ↪ {{The Linux Kernel/id|do_epoll_ctl}}
: {{The Linux Kernel/man|2|epoll_wait}} ↪ {{The Linux Kernel/id|do_epoll_wait}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/eventpoll.c}} – efficient event polling (epoll)
'''{{w|Select (Unix)|select}} and {{w|poll (Unix)|poll}}'''
💾 ''Historical: Select and poll system calls are derived from UNIX''
⚲ API:
: {{The Linux Kernel/man|2|poll}} ↪ {{The Linux Kernel/id|do_sys_poll}}
: {{The Linux Kernel/man|2|select}} ↪ {{The Linux Kernel/id|kern_select}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/select.c}} – select and poll implementation
=== Vectored I/O ===
🚀 advanced feature
{{w|Vectored I/O}}, also known as scatter/gather I/O, is a method of input and output by which a single procedure call sequentially reads data from multiple buffers and writes it to a single data stream, or reads data from a data stream and writes it to multiple buffers, as defined in a vector of buffers. Scatter/gather refers to the process of gathering data from, or scattering data into, the given set of buffers. Vectored I/O can operate synchronously or asynchronously. The main reasons for using vectored I/O are efficiency and convenience.
⚲ API:
: {{The Linux Kernel/include|uapi/linux/uio.h}}
: {{The Linux Kernel/include|linux/uio.h}}
: {{The Linux Kernel/id|iovec}}
: {{The Linux Kernel/man|2|readv}} ↪ {{The Linux Kernel/id|do_readv}}
: {{The Linux Kernel/man|2|writev}} ↪ {{The Linux Kernel/id|do_writev}}
⚙️ Internals:
: {{The Linux Kernel/id|iov_iter}}
: {{The Linux Kernel/id|do_readv}} ↯ call hierarchy:
:: {{The Linux Kernel/id|vfs_readv}}
::: {{The Linux Kernel/id|import_iovec}}
::: {{The Linux Kernel/id|ext4_file_read_iter}}
: {{The Linux Kernel/source|lib/iov_iter.c}} – I/O vector iterator operations
=== ... ===
📖 References
: [https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html Fast Scatter-Gather I/O, The GNU C Library]
: https://lwn.net/Kernel/Index/#Vectored_IO
: https://lwn.net/Kernel/Index/#Scattergather_chaining
📚 Further reading
: https://deepwiki.com/torvalds/linux/4-filesystems
== Virtual File System ==
The {{w|virtual file system}} (VFS) is an abstract layer on top of a concrete logical file system.
The purpose of a VFS is to allow client applications to access different types of logical file systems in a uniform way.
A VFS can, for example, be used to access local and [[../Networking#Network_storage|network storage]] devices transparently without the client application noticing the difference.
It can be used to bridge the differences in Windows, classic Mac OS/macOS and Unix filesystems, so that applications can access files on local file systems of those types without having to know what type of file system they are accessing.
A VFS specifies an interface (or a "contract") between the kernel and a logical file system.
Therefore, it is easy to add support for new file system types to the kernel simply by fulfilling the contract.
🔧 TODO: {{The Linux Kernel/id|vfsmount}}, {{The Linux Kernel/id|vfs_create}}, {{The Linux Kernel/id|vfs_read}}, {{The Linux Kernel/id|vfs_write}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/inode.c}} – inode allocation and management
: {{The Linux Kernel/include|linux/dcache.h}}, {{The Linux Kernel/source|fs/dcache.c}} – dentry cache, pathname-to-inode lookup
: {{The Linux Kernel/source|fs/super.c}} – superblock operations, filesystem mount/unmount
: {{The Linux Kernel/include|linux/file.h}}, {{The Linux Kernel/source|fs/file.c}} – file table, fd allocation
: {{The Linux Kernel/include|linux/mount.h}} – filesystem mount structures
: {{The Linux Kernel/include|linux/fs_context.h}} – filesystem mount context (replaces old mount API)
: {{The Linux Kernel/source|fs/readdir.c}} – directory listing (getdents)
📚 VFS References
: {{The Linux Kernel/doc|VFS|filesystems/#core-vfs-documentation}}
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
== Logical file systems ==
A {{w|file system}} (or ''filesystem'') is used to control how data is stored and retrieved.
Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins.
By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified.
Each group of data is called a "file".
The structure and logic rules used to manage the groups of information and their names is called a "file system".
There are many different kinds of file systems.
Each one has different structure and logic, properties of speed, flexibility, security, size and more.
Some file systems have been designed to be used for specific applications.
For example, the ISO 9660 file system is designed specifically for optical discs.
File systems can be used on many different kinds of storage devices.
Each storage device uses a different kind of media.
The most common storage device in use today is a {{w|SSD}}.
Other media that was used are hard disk, magnetic tape and optical disc.
In some cases, the computer's main memory (RAM) is used to create a temporary file system for short-term use.
Raw storage is called a block device.
Linux supports many different file systems, but common choices for the system disk on a block device include the ext* family (such as {{w|ext2}}, {{w|ext3}} and {{w|ext4}}), {{w|XFS}}, {{w|ReiserFS}} and {{w|btrfs}}.
For raw Flash without a {{w|flash translation layer}} (FTL) or {{w|Memory Technology Device}} (MTD), there is {{w|UBIFS}}, {{w|JFFS2}}, and {{w|YAFFS}}, among others. {{w|SquashFS}} is a common compressed read-only file system.
NFS and other network FS are described further in paragraph [[../Networking#Network_storage|Network storage]].
⚲ Shell interfaces:
: cat /proc/filesystems
: ls /sys/fs/
: {{The Linux Kernel/man|8|mount}}
: {{The Linux Kernel/man|8|umount}}
: {{The Linux Kernel/man|8|findmnt}}
: {{The Linux Kernel/man|1|mountpoint}}
: {{The Linux Kernel/man|1|df}}
Infrastructure ⚲ API function {{The Linux Kernel/id|register_filesystem}} registers structs {{The Linux Kernel/id|file_system_type}} and stores them in linked list ⚙️ {{The Linux Kernel/id|file_systems}}.
Function {{The Linux Kernel/id|ext4_init_fs}} registers {{The Linux Kernel/id|ext4_fs_type}}.
Operation of ''file system opening'' is called mounting: {{The Linux Kernel/id|ext4_get_tree}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/namespace.c}} – mount and namespace operations
:: {{The Linux Kernel/man|2|mount}}
::: {{The Linux Kernel/id|do_mount}}
: {{The Linux Kernel/include|linux/buffer_head.h}}
:: {{The Linux Kernel/id|super_block}}
:: {{The Linux Kernel/id|sb_bread}}
: {{The Linux Kernel/source|fs}} – filesystem implementations
:: {{The Linux Kernel/source|fs/ext4/ext4.h}} – ext4 on-disk format and internal structures
::: {{The Linux Kernel/id|ext4_sb_bread}}
Other notable filesystems:
: {{w|FUSE (filesystem)|FUSE}} – {{The Linux Kernel/source|fs/fuse}} – filesystem in userspace
: {{w|OverlayFS}} – {{The Linux Kernel/source|fs/overlayfs}} – union mount filesystem, used by containers
: {{w|Btrfs}} – {{The Linux Kernel/source|fs/btrfs}}
: {{w|XFS}} – {{The Linux Kernel/source|fs/xfs}}
📚 References:
: {{The Linux Kernel/doc|filesystems|filesystems/#filesystems}}
== Page cache ==
A page cache or disk cache is a transparent cache for the memory pages originating from a secondary storage device such as a hard disk drive.
The operating system keeps a page cache in otherwise unused portions of the main memory, resulting in quicker access to the contents of cached pages and overall performance improvements.
The page cache is implemented by the kernel, and is mostly transparent to applications.
Usually, all physical memory not directly allocated to applications is used by the operating system for the page cache.
Since the memory would otherwise be idle and is easily reclaimed when applications request it, there is generally no associated performance penalty and the operating system might even report such memory as "free" or "available".
The page cache also aids in writing to a disk.
Pages in the main memory that have been modified during writing data to disk are marked as "dirty" and have to be flushed to disk before they can be freed.
When a file write occurs, the page backing the particular block is looked up.
If it is already found in the page cache, the write is done to that page in the main memory.
Otherwise, when the write perfectly falls on page size boundaries, the page is not even read from disk, but allocated and immediately marked dirty.
Otherwise, the page(s) are fetched from disk and requested modifications are done.
Not all cached pages can be written to as program code is often mapped as read-only or copy-on-write; in the latter case, modifications to code will only be visible to the process itself and will not be written to disk.
⚲ API:
: {{The Linux Kernel/man|2|fsync}} ↪ {{The Linux Kernel/id|do_fsync}}
: {{The Linux Kernel/man|2|sync_file_range}} ↪ {{The Linux Kernel/id|ksys_sync_file_range}}
: {{The Linux Kernel/man|2|syncfs}} ↪ {{The Linux Kernel/id|sync_filesystem}}
⚙️ Internals:
: {{The Linux Kernel/include|linux/pagemap.h}}, {{The Linux Kernel/source|mm/filemap.c}} – page cache core, read/write/mmap paths
: {{The Linux Kernel/include|linux/buffer_head.h}}, {{The Linux Kernel/source|fs/buffer.c}} – buffer heads, block-level page cache interface
: {{The Linux Kernel/include|linux/writeback.h}}, {{The Linux Kernel/source|mm/page-writeback.c}} – dirty page writeback throttling
: {{The Linux Kernel/id|address_space}} – per-inode page cache, defined in {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/include|linux/backing-dev.h}} – backing device info, writeback bandwidth
: {{The Linux Kernel/id|wb_workfn}}, {{The Linux Kernel/id|do_writepages}}
📚 References
: {{w|Page cache}}
More
: [https://lwn.net/Articles/717953/ The future of DAX ] - direct access bypassing the cache
: [https://tldp.org/LDP/lki/lki-4.html Linux Page Cache in Linux Kernel 2.4 Internals]
== Zero-copy ==
🚀 advanced features
Writing data to storage and reading are very resource consuming operations.
Copying memory is time and CPU consuming operation too.
Set of methods to avoid copying operations is called {{w|zero-copy}}.
The goal of zero-copy methods is a fast and efficient data transfer within the system.
The first and simplest method is {{w|Pipeline (Unix)|Pipeline}}, invoked by operator "|" in shells.
Instead of writing data into temporary file and reading, the data is passed efficiently via a pipe bypassing a storage.
The second method is {{w|Tee_(command)|tee}}.
⚲ Syscalls:
: {{The Linux Kernel/man|2|pipe2}}
: {{The Linux Kernel/man|2|tee}}, {{The Linux Kernel/man|1|tee}}
: {{The Linux Kernel/man|2|sendfile}}
: {{The Linux Kernel/man|2|copy_file_range}}
: {{The Linux Kernel/man|2|splice}}
: {{The Linux Kernel/man|2|vmsplice}}
⚲ API and ⚙️ Internals:
: '''{{The Linux Kernel/man|2|pipe2}}''' ↪ {{The Linux Kernel/id|do_pipe2}} - creates pipe
:: uses {{The Linux Kernel/id|pipe_fs_type}}, {{The Linux Kernel/id|pipefifo_fops}}
: '''{{The Linux Kernel/man|2|tee}}''' ↪ {{The Linux Kernel/id|do_tee}} - duplicates pipe content
:: calls {{The Linux Kernel/id|link_pipe}}
: '''{{The Linux Kernel/man|2|sendfile}}''' ↪ {{The Linux Kernel/id|do_sendfile}} - transfers data between file descriptors, the output can be a socket. Used in [[../Networking#Network_storage|network storage]] and servers.
:: Calls: {{The Linux Kernel/id|do_splice_direct}}, {{The Linux Kernel/id|splice_direct_to_actor}}
: '''{{The Linux Kernel/man|2|copy_file_range}}''' ↪ {{The Linux Kernel/id|vfs_copy_file_range}} - transfers data between files
:: calls custom {{The Linux Kernel/id|remap_file_range}} like {{The Linux Kernel/id|nfs42_remap_file_range}}
:: or custom {{The Linux Kernel/id|copy_file_range}} like {{The Linux Kernel/id|fuse_copy_file_range}}
:: or {{The Linux Kernel/id|do_splice_direct}}
: '''{{The Linux Kernel/man|2|splice}}''' ↪ {{The Linux Kernel/id|do_splice}} - splices data to/from a pipe.
:: There are three cases regarding which end being a pipe:
:# {{The Linux Kernel/id|do_splice_from}} - pipe → file
:#: Calls custom {{The Linux Kernel/id|splice_write}} or {{The Linux Kernel/id|iter_file_splice_write}}
:# {{The Linux Kernel/id|do_splice_read}} - file → pipe
:#: Calls custom {{The Linux Kernel/id|splice_read}} or {{The Linux Kernel/id|copy_splice_read}}
:# {{The Linux Kernel/id|splice_pipe_to_pipe}} - both are pipes
: '''{{The Linux Kernel/man|2|vmsplice}}''' ↪
:: {{The Linux Kernel/id|vmsplice_to_pipe}} – splices user pages to a pipe
:: {{The Linux Kernel/id|vmsplice_to_user}} – splices a pipe to user pages
⚲ API
: {{The Linux Kernel/include|linux/splice.h}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/pipe.c}} – pipe and FIFO implementation
: {{The Linux Kernel/source|fs/splice.c}} – splice data transfer between file descriptors
🔧 TODO:
{{The Linux Kernel/id|zerocopy_sg_from_iter}} builds a zerocopy skb datagram from an iov_iter. Used in {{The Linux Kernel/id|tap_get_user}} and {{The Linux Kernel/id|tun_get_user}}.
{{The Linux Kernel/id|skb_zerocopy}}
{{The Linux Kernel/id|skb_zerocopy_iter_dgram}}
📚 References
: {{The Linux Kernel/man|7|pipe}}
: {{The Linux Kernel/man|7|fifo}}
: {{The Linux Kernel/doc|splice and pipes|filesystems/splice.html}}
:: {{The Linux Kernel/doc|Pipes API|filesystems/splice.html#pipes-api}}
: {{w|splice (system call)}}
: LTP: {{The Linux Kernel/ltp|kernel/syscalls|pipe}}, {{The Linux Kernel/ltp|kernel/syscalls|pipe2}}, {{The Linux Kernel/ltp|kernel/syscalls|tee}}, {{The Linux Kernel/ltp|kernel/syscalls|sendfile}}, {{The Linux Kernel/ltp|kernel/syscalls|copy_file_range}}, {{The Linux Kernel/ltp|kernel/syscalls|splice}}, {{The Linux Kernel/ltp|kernel/syscalls|vmsplice}}
== Block device layer ==
The block device layer in Linux provides an abstraction for accessing storage devices,
such as SSDs and USB drives, by presenting them as a series of fixed-size blocks.
It sits between the hardware and the file system,
allowing applications and file systems to perform read and write operations efficiently
without needing to know the specifics of the underlying hardware.
Key components include block drivers, the I/O scheduler,
and buffer management, which work together to handle requests,
optimize access patterns, and ensure data integrity.
This layer supports essential features like caching, partition management,
and queueing mechanisms to balance performance and reliability.
⚲ Interfaces:
: {{The Linux Kernel/include|linux/blk_types.h}}
:: {{The Linux Kernel/id|bio}} – main unit of I/O for the block layer and lower layers
:: {{The Linux Kernel/id|req_op}} – operations common to the bio and request structures
: {{The Linux Kernel/include|linux/bio.h}}
: {{The Linux Kernel/id|block_device}}
:: {{The Linux Kernel/id|block_size}}
: {{The Linux Kernel/id|blk_alloc_disk}} allocates {{The Linux Kernel/id|gendisk}}
: {{The Linux Kernel/id|add_disk}}
:: {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|block_device_operations}}
: {{The Linux Kernel/include|linux/blkdev.h}}
:: {{The Linux Kernel/id|gendisk}}
::: {{The Linux Kernel/id|dev_to_disk}}, {{The Linux Kernel/id|disk_to_dev}}
:: {{The Linux Kernel/id|block_class}} – block devices Driver Model class
:: {{The Linux Kernel/id|register_blkdev}}
:: {{The Linux Kernel/id|request}}
:: {{The Linux Kernel/id|request_queue}}
⚙️ Internals.
: {{The Linux Kernel/source|block}} – block layer core
: {{The Linux Kernel/source|fs/iomap}} – modern filesystem I/O mapping layer (used by xfs, ext4, btrfs)
: {{The Linux Kernel/id|block_class}}
👁 Examples:
: {{The Linux Kernel/source|drivers/block/brd.c}} - small RAM backed block device driver
: {{The Linux Kernel/source|drivers/block/null_blk}} – null block test device
=== Device mapper ===
The ''device mapper'' is a framework provided by the kernel for mapping physical block devices onto higher-level "virtual block devices".
It forms the foundation of LVM2, software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device.
Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption.
User space applications that need to create new mapped devices talk to the device mapper via the <code>libdevmapper.so</code> shared library, which in turn issues ioctls to the <code>/dev/mapper/control</code> device node.
Functions provided by the device mapper include linear, striped and error ''mappings,'' as well as crypt and multipath ''targets.''
For example, two disks may be concatenated into one logical volume with a pair of ''linear'' mappings, one for each disk.
As another example, ''crypt'' target encrypts the data passing through the specified device, by using the Linux kernel's Crypto API.
The following mapping targets are available:
: ''cache'' - allows the creation of hybrid volumes, by using solid-state drives (SSDs) as caches for hard disk drives (HDDs)
: ''crypt'' - provides data encryption, by using the Linux kernel's Crypto API
: ''delay'' - delays reads and/or writes to different devices (used for testing)
: ''era'' - behaves in a way similar to the linear target, while it keeps track of blocks that were written to within a user-defined period of time
: ''error'' - simulates I/O errors for all mapped blocks (used for testing)
: ''flakey'' - simulates periodic unreliable behaviour (used for testing)
: ''linear'' - maps a continuous range of blocks onto another block device
: ''mirror'' - maps a mirrored logical device, while providing data redundancy
: ''multipath'' - supports the mapping of multipathed devices, through usage of their path groups
: ''raid'' - offers an interface to the Linux kernel's software RAID driver (md)
: ''snapshot'' and ''snapshot-origin'' - used for creation of LVM snapshots, as part of the underlining copy-on-write scheme
: ''striped'' - strips the data across physical devices, with the number of stripes and the striping chunk size as parameters
: ''zero'' - an equivalent of <code>/dev/zero</code>, all reads return blocks of zeros, and writes are discarded
📚 References
: {{w|Device mapper}}
: {{The Linux Kernel/doc|Device mapper|admin-guide/device-mapper}}
: {{The Linux Kernel/include|linux/device-mapper.h}}
: {{The Linux Kernel/source|drivers/md}} – device mapper and software RAID
: https://lwn.net/Kernel/Index/#Device_mapper
=== Multi-Queue Block IO Queueing ===
The blk-mq API enhances IO performance
by leveraging multiple queues for parallel processing,
addressing bottlenecks from traditional single-queue designs.
It uses software queues for scheduling,
merging, and reordering requests,
and hardware queues to interface directly with devices.
If hardware resources are limited,
requests are temporarily queued for later dispatch.
⚲ Interfaces:
: /sys/devices/.../mq/
: {{The Linux Kernel/include|linux/blk-mq.h}}
:: Structures:
::: {{The Linux Kernel/id|blk_mq_hw_ctx}} – hardware dispatch queue context
::: {{The Linux Kernel/id|blk_mq_tag_set}} – shared between request queues
:::: {{The Linux Kernel/id|blk_mq_ops}}
:::: {{The Linux Kernel/id|blk_mq_tags}}
:::: {{The Linux Kernel/id|blk_mq_queue_map}} – map software queues to hardware queues
::: {{The Linux Kernel/id|request}}
👁️ Example
: {{The Linux Kernel/source|drivers/block/null_blk}} – multi-queue aware block test driver
⚙️ Internals
: /sys/kernel/debug/block/*/hctx*
: {{The Linux Kernel/source|block/blk-mq.h}} – blk-mq internal definitions
:: {{The Linux Kernel/id|blk_mq_ctx}} – software staging queue context
: {{The Linux Kernel/source|block/blk-mq.c}} – block multi-queue core code
: {{The Linux Kernel/source|block/blk-mq-tag.c}} – tag allocation using scalable bitmaps
: ...
📖 References
: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
=== I/O scheduler ===
I/O scheduling (or disk scheduling) is the method chosen by the kernel to decide in which order the block I/O operations will be submitted to the storage volumes.
I/O scheduling usually has to work with hard disk drives that have long access times for requests placed far away from the current position of the disk head (this operation is called a seek).
To minimize the effect this has on system performance, most I/O schedulers implement a variant of the elevator algorithm that reorders the incoming randomly ordered requests so the associated data would be accessed with minimal arm/head movement.
The particular I/O scheduler used with certain block device can be switched at run time by modifying the corresponding <code>/sys/block/<block_device>/queue/scheduler</code> file in the sysfs filesystem.
Some I/O schedulers also have tunable parameters that can be set through files in <code>/sys/block/<block_device>/queue/iosched/</code>.
⚲ Interfaces:
: {{The Linux Kernel/man|1|ionice}} – set or get process I/O scheduling class and priority
:: {{The Linux Kernel/man|2|ioprio_get}}, ioprio_set
: {{The Linux Kernel/include|linux/elevator.h}}
: Function {{The Linux Kernel/id|elv_register}} registers struct {{The Linux Kernel/id|elevator_type}}.
: {{The Linux Kernel/id|elevator_queue}}
⚙️ Internals:
: {{The Linux Kernel/source|block/ioprio.c}} – I/O priority system call
: {{The Linux Kernel/source|block/elevator.c}} – I/O scheduler framework
: {{The Linux Kernel/source|block/Kconfig.iosched}} – I/O scheduler Kconfig options
: {{The Linux Kernel/source|block/bfq-iosched.c}} – Budget Fair Queueing scheduler
: {{The Linux Kernel/source|block/kyber-iosched.c}} – Kyber multiqueue scheduler
: {{The Linux Kernel/source|block/mq-deadline.c}} – deadline multiqueue scheduler
: {{The Linux Kernel/include|trace/events/block.h}}
📖 References:
: {{w|I/O scheduling}}
: {{w|Elevator algorithm}}
: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
: {{The Linux Kernel/doc|Deadline IO scheduler tunables|deadline-iosched.html}}
: https://www.cloudbees.com/blog/linux-io-scheduler-tuning/
: https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers
=== ... ===
📖 References
: {{The Linux Kernel/doc|Block devices|block}}
:: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
::: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
::: {{The Linux Kernel/doc|Deadline IO scheduler tunables|block/deadline-iosched.html}}
::: {{The Linux Kernel/doc|Kyber I/O scheduler tunables|block/kyber-iosched.html}}
:: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
📚 Further reading
: /sys/kernel/debug/block/*/
: https://lwn.net/Kernel/Index/#Block_layer
: [https://lore.kernel.org/linux-block/ block devices ML]
: [http://lwn.net/images/pdf/LDD3/ch16.pdf LDD3:Block Drivers]
: [http://www.xml.com/ldd/chapter/book/ch12.html LDD1:Loading Block Drivers]
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch14.html ULK3 Chapter 14. Block Device Drivers]
: [https://sg.danny.cz/sg/The Linux SCSI Generic (sg) Driver]
:: [https://sg.danny.cz/sg/scsi_debug.html Scsi_debug adapter driver for Linux]
:: https://github.com/doug-gilbert/sg3_utils
== {{w|Computer data storage|Storage}} drivers ==
🔧 TODO
⚙️ Internals
: {{The Linux Kernel/source|drivers/nvmem}} – {{w|Non-volatile memory}}
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/scsi}} – {{w|SCSI|Small Computer System Interface}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/mtd}} – {{w|Memory Technology Device}} for 🤖 embedded devices
=== NVMe ===
{{w|NVM Express}} drivers provide accesses a computer's {{w|non-volatile storage}}.
Local storage is attached via {{w|PCIe|PCI Express}} bus.
PCI NVMe device driver entry point is {{The Linux Kernel/id|nvme_init}}.
Remote storage driver is called target and local {{w|Proxy_pattern|proxy}} driver is called host. {{w|Switched fabric|Fabrics}} connect remote targets with local host.
A fabric can be based on {{w|Remote direct memory access|RDMA}}, {{w|Transmission Control Protocol|TCP}} or {{w|Fibre Channel}} protocols.
⚲ API:
: [https://github.com/linux-nvme/nvme-cli nvme-cli]
: {{The Linux Kernel/include|uapi/linux/nvme_ioctl.h}}
: {{The Linux Kernel/include|linux/nvme.h}}
⚙️ '''Internals:'''
: {{The Linux Kernel/source|drivers/nvme}} – NVMe drivers
'''Host''' {{The Linux Kernel/source|drivers/nvme/host}}:
⚲ Interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/nvme.h}} – NVMe host common definitions
:: {{The Linux Kernel/id|nvme_init_ctrl}} initializes a NVMe controller structures {{The Linux Kernel/id|nvme_ctrl}} with operations {{The Linux Kernel/id|nvme_ctrl_ops}}
::: a subroutine of {{The Linux Kernel/id|nvme_scan_work}} adds a new disk with {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|nvme_init}} - local PCI nvme module init
:: {{The Linux Kernel/id|nvme_probe}}
::: {{The Linux Kernel/id|nvme_init_ctrl}} ...
::: {{The Linux Kernel/id|nvme_pci_ctrl_ops}}
: {{The Linux Kernel/id|nvme_core_init}} - module init
'''Fabrics'''
⚲ interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/fabrics.h}} – NVMe over Fabrics host common definitions
:: {{The Linux Kernel/id|nvmf_register_transport}} registers {{The Linux Kernel/id|nvmf_transport_ops}}
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
⚙️ internals:
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
:: {{The Linux Kernel/id|nvmf_misc}}
::: {{The Linux Kernel/id|nvmf_dev_fops}}
:::: {{The Linux Kernel/id|nvmf_dev_write}}
::::: {{The Linux Kernel/id|nvmf_create_ctrl}} binds {{The Linux Kernel/id|nvmf_transport_ops}}
'''Target''' {{The Linux Kernel/source|drivers/nvme/target}}:
⚲ Interfaces: {{The Linux Kernel/source|drivers/nvme/target/nvmet.h}}
: {{The Linux Kernel/id|nvmet_register_transport}} registers {{The Linux Kernel/id|nvmet_fabrics_ops}}
: {{The Linux Kernel/id|nvmet_init}} - module init
: {{The Linux Kernel/id|fcloop_init}} - loopback test module init which can be useful to test NVMe-FC transport interfaces.
{| class="wikitable"
|-
!
! colspan="3" |NVMe over {{w|Switched fabric|Fabrics}}
|-
!<div style='text-align:left'>Layers</div>
!{{w|Transmission Control Protocol|TCP}}
![[../Networking#RDMA|RDMA]]
!{{w|Fibre Channel}}
|-
!<div style='text-align:left'>Host modules</div>
|{{The Linux Kernel/id|nvme_tcp_init_module}}
|{{The Linux Kernel/id|nvme_rdma_init_module}}
|{{The Linux Kernel/id|nvme_fc_init_module}}
|-
!<div style='text-align:left'>Fabrics protocols</div>
|{{The Linux Kernel/include|linux/nvme-tcp.h}}
|{{The Linux Kernel/include|linux/nvme-rdma.h}}
|{{The Linux Kernel/include|linux/nvme-fc.h}}
{{The Linux Kernel/include|linux/nvme-fc-driver.h}}
|-
!<div style='text-align:left'>Target modules</div>
|{{The Linux Kernel/id|nvmet_tcp_init}}
|{{The Linux Kernel/id|nvmet_rdma_init}}
|{{The Linux Kernel/id|nvmet_fc_init_module}}
|}
👁 Example: {{The Linux Kernel/id|nvme_loop_init_module}} nvme loopback
: {{The Linux Kernel/id|nvme_loop_transport}} - fabrics operations
:: {{The Linux Kernel/id|nvme_loop_create_ctrl}}
::: {{The Linux Kernel/id|nvme_loop_create_io_queues}}
: {{The Linux Kernel/id|nvme_loop_ops}} - target operation
:: {{The Linux Kernel/id|nvme_loop_add_port}}
:: {{The Linux Kernel/id|nvme_loop_queue_response}}
== ... ==
🚀 Advanced
: {{The Linux Kernel/man|1|pidstat}} – reports task statistics
: /proc/self/io – I/O statistics for the process (see {{The Linux Kernel/man|5|proc}})
💾 Historical storage drivers
: {{The Linux Kernel/source|drivers/ata}} - {{w|Parallel ATA}}
📖 Further reading about storage
: [https://github.com/iovisor/bcc/blob/master/README.md#storage-and-filesystems-tools bcc/ebpf storage and filesystems tools]
{{BookCat}}
g5t2c5s0xbwrk52vu9df01c3msri5p4
4641537
4641528
2026-06-28T16:08:20Z
Conan
3188
Storage: file ops syscalls, inotify/fanotify API
4641537
wikitext
text/x-wiki
{{DISPLAYTITLE:Storage functionality}}
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor=#cef | storage
|-style=""
| bgcolor=#aef | [[#Files_and_directories|files & directories access]]
|-style=""
| bgcolor=#8df | [[#Virtual File System|Virtual File System]]
|-style=""
| bgcolor=#8ce |[[#Page_cache|page cache]]
|-style=""
| bgcolor=#7ac |[[#Logical file systems|logical file systems]]
|-style=""
| bgcolor=#69a |[[#Block_device_layer|block devices]]
|-style=""
| bgcolor=#689 |[[#Storage_drivers|storage drivers]]
|}
Storage functionality provides access to various storage devices via files and directories of files.
Most of the storage is persistent as flash memory, SSD and legacy hard disks.
Another kind of storage is temporary.
The ''file system'' provides an abstraction to organize the information into separate pieces of data (called ''files'') identified by a unique name.
Each file system type defines their own structures and logic rules used to manage these groups of information and their names.
Linux supports a plethora of different file system types, local and remote, native and from other operating systems.
To accommodate such disparity the kernel defines a common top layer, the ''virtual file system'' (VFS) layer.
[[File:The Linux Storage Stack Diagram.svg|Summary of the Linux kernel's storage stack|right|800x800px]]
== Files and directories ==
Four basic files access system calls:
: {{The Linux Kernel/man|2|open}} ↪ {{The Linux Kernel/id|do_sys_open}} - opens a file by name and returns a {{w|file descriptor}} (<big>fd</big>). Below functions operates on a fd.
: {{The Linux Kernel/man|2|close}} ↪ {{The Linux Kernel/id|close_fd}}
: {{The Linux Kernel/man|2|read}} ↪ {{The Linux Kernel/id|ksys_read}}
: {{The Linux Kernel/man|2|write}} ↪ {{The Linux Kernel/id|ksys_write}}
File in Linux and UNIX is not only physical file on persistent storage.
File interface is used to access pipes, sockets and other pseudo-files.
Other file operations:
: {{The Linux Kernel/man|2|lseek}} – reposition read/write file offset
: {{The Linux Kernel/man|2|dup}} – duplicate a file descriptor
: {{The Linux Kernel/man|2|truncate}}, {{The Linux Kernel/man|2|ftruncate}} – truncate a file
: {{The Linux Kernel/man|2|fallocate}} – preallocate file space
: {{The Linux Kernel/man|2|mkdir}}, {{The Linux Kernel/man|2|rmdir}} – create/remove directory
: {{The Linux Kernel/man|2|rename}} – rename a file
: {{The Linux Kernel/man|2|unlink}} – delete a name from the filesystem
: {{The Linux Kernel/man|2|readlink}}, {{The Linux Kernel/man|2|symlink}}, {{The Linux Kernel/man|2|link}}
: {{The Linux Kernel/man|3|readdir}} ⇾ {{The Linux Kernel/man|2|getdents}}
: {{The Linux Kernel/man|7|path_resolution}}
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
⚙️ Files and directories internals
: {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/source|fs/open.c}} – open, close and related file operations
: {{The Linux Kernel/include|linux/namei.h}}, {{The Linux Kernel/source|fs/namei.c}} – pathname lookup and resolution
: {{The Linux Kernel/source|fs/read_write.c}} – read, write and lseek operations
: {{The Linux Kernel/include|linux/xattr.h}}, {{The Linux Kernel/source|fs/xattr.c}} – extended attributes
: {{The Linux Kernel/source|fs/notify}} – filesystem event notification
:: {{The Linux Kernel/man|2|inotify_init}}, {{The Linux Kernel/man|2|inotify_add_watch}}, {{The Linux Kernel/man|2|inotify_rm_watch}} – {{The Linux Kernel/man|7|inotify}}
:: {{The Linux Kernel/man|2|fanotify_init}}, {{The Linux Kernel/man|2|fanotify_mark}} – {{The Linux Kernel/man|7|fanotify}}
📚 Files and directories references
: [https://www.gnu.org/software/libc/manual/html_node/I_002fO-Overview.html Input/Output, The GNU C Library]
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
: {{w|Unix file types}}
=== File locks ===
File locks are mechanisms that allow processes to coordinate access to shared files.
These locks help prevent conflicts when multiple processes or threads attempt to access the same file simultaneously.
⚲ API
: {{The Linux Kernel/man|8|lslocks}} – list local system locks
: {{The Linux Kernel/man|3|lockf}} – apply, test or remove a POSIX lock on an open file
: {{The Linux Kernel/man|2|flock}} – apply or remove an advisory BSD lock on an open file
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
:: {{The Linux Kernel/id|F_SETLK}} – advisory record lock
:: {{The Linux Kernel/id|F_OFD_SETLK}} – Open File Description Lock
:: {{The Linux Kernel/id|flock}} – lock parameters
: ⚠️ Avoid mixing flock and fcntl locks on the same file as they don’t interact with each other.
⚙️ Internals
: {{The Linux Kernel/include|linux/filelock.h}}
: {{The Linux Kernel/source|fs/locks.c}} – POSIX and flock file locking
: {{The Linux Kernel/include|trace/events/filelock.h}}
💾 ''Historical: [https://elixir.bootlin.com/linux/v5.14/K/ident/CONFIG_MANDATORY_FILE_LOCKING Mandatory locking] feature is no longer supported at all in Linux 5.15 and above because the implementation is unreliable.''
=== Asynchronous I/O ===
🚀 advanced features
'''AIO'''
: https://lwn.net/Kernel/Index/#Asynchronous_IO
: {{The Linux Kernel/man|2|io_submit}} {{The Linux Kernel/man|2|io_setup}} {{The Linux Kernel/man|2|io_cancel}} {{The Linux Kernel/man|2|io_destroy}} {{The Linux Kernel/man|2|io_getevents}}
: {{The Linux Kernel/include|uapi/linux/aio_abi.h}}
: {{The Linux Kernel/source|fs/aio.c}} – async I/O implementation
: {{The Linux Kernel/ltp|kernel|io/aio}}
'''{{w|io_uring}}'''
🌱 ''New since release 5.1 in May 2019''
: https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
: https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/
: {{The Linux Kernel/id|io_uring_enter}} {{The Linux Kernel/id|io_uring_setup}} {{The Linux Kernel/id|io_uring_register}}
: {{The Linux Kernel/include|linux/io_uring.h}}
: {{The Linux Kernel/include|uapi/linux/io_uring.h}}
: {{The Linux Kernel/source|io_uring}}
: https://lwn.net/Kernel/Index/#io_uring
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/810414/ The rapid growth of io_uring]
:: [https://lwn.net/Articles/815491/ Automatic buffer selection for io_uring]
:: [https://lwn.net/Articles/826053/ Operations restrictions for io_uring]
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/803070/ Redesigned workqueues for io_uring]
: {{The Linux Kernel/ltp|kernel/syscalls|io_uring}}
=== {{w|Asynchronous_I/O#Forms|Non-blocking I/O}} ===
Allow non-blocking access to multiple file descriptors.
'''Efficient event polling {{w|epoll}}'''
⚲ API:
: {{The Linux Kernel/include|uapi/linux/eventpoll.h}}
: {{The Linux Kernel/man|7|epoll}}
: {{The Linux Kernel/man|2|epoll_create}} ↪ {{The Linux Kernel/id|do_epoll_create}}
: {{The Linux Kernel/man|2|epoll_ctl}} ↪ {{The Linux Kernel/id|do_epoll_ctl}}
: {{The Linux Kernel/man|2|epoll_wait}} ↪ {{The Linux Kernel/id|do_epoll_wait}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/eventpoll.c}} – efficient event polling (epoll)
'''{{w|Select (Unix)|select}} and {{w|poll (Unix)|poll}}'''
💾 ''Historical: Select and poll system calls are derived from UNIX''
⚲ API:
: {{The Linux Kernel/man|2|poll}} ↪ {{The Linux Kernel/id|do_sys_poll}}
: {{The Linux Kernel/man|2|select}} ↪ {{The Linux Kernel/id|kern_select}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/select.c}} – select and poll implementation
=== Vectored I/O ===
🚀 advanced feature
{{w|Vectored I/O}}, also known as scatter/gather I/O, is a method of input and output by which a single procedure call sequentially reads data from multiple buffers and writes it to a single data stream, or reads data from a data stream and writes it to multiple buffers, as defined in a vector of buffers. Scatter/gather refers to the process of gathering data from, or scattering data into, the given set of buffers. Vectored I/O can operate synchronously or asynchronously. The main reasons for using vectored I/O are efficiency and convenience.
⚲ API:
: {{The Linux Kernel/include|uapi/linux/uio.h}}
: {{The Linux Kernel/include|linux/uio.h}}
: {{The Linux Kernel/id|iovec}}
: {{The Linux Kernel/man|2|readv}} ↪ {{The Linux Kernel/id|do_readv}}
: {{The Linux Kernel/man|2|writev}} ↪ {{The Linux Kernel/id|do_writev}}
⚙️ Internals:
: {{The Linux Kernel/id|iov_iter}}
: {{The Linux Kernel/id|do_readv}} ↯ call hierarchy:
:: {{The Linux Kernel/id|vfs_readv}}
::: {{The Linux Kernel/id|import_iovec}}
::: {{The Linux Kernel/id|ext4_file_read_iter}}
: {{The Linux Kernel/source|lib/iov_iter.c}} – I/O vector iterator operations
=== ... ===
📖 References
: [https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html Fast Scatter-Gather I/O, The GNU C Library]
: https://lwn.net/Kernel/Index/#Vectored_IO
: https://lwn.net/Kernel/Index/#Scattergather_chaining
📚 Further reading
: https://deepwiki.com/torvalds/linux/4-filesystems
== Virtual File System ==
The {{w|virtual file system}} (VFS) is an abstract layer on top of a concrete logical file system.
The purpose of a VFS is to allow client applications to access different types of logical file systems in a uniform way.
A VFS can, for example, be used to access local and [[../Networking#Network_storage|network storage]] devices transparently without the client application noticing the difference.
It can be used to bridge the differences in Windows, classic Mac OS/macOS and Unix filesystems, so that applications can access files on local file systems of those types without having to know what type of file system they are accessing.
A VFS specifies an interface (or a "contract") between the kernel and a logical file system.
Therefore, it is easy to add support for new file system types to the kernel simply by fulfilling the contract.
🔧 TODO: {{The Linux Kernel/id|vfsmount}}, {{The Linux Kernel/id|vfs_create}}, {{The Linux Kernel/id|vfs_read}}, {{The Linux Kernel/id|vfs_write}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/inode.c}} – inode allocation and management
: {{The Linux Kernel/include|linux/dcache.h}}, {{The Linux Kernel/source|fs/dcache.c}} – dentry cache, pathname-to-inode lookup
: {{The Linux Kernel/source|fs/super.c}} – superblock operations, filesystem mount/unmount
: {{The Linux Kernel/include|linux/file.h}}, {{The Linux Kernel/source|fs/file.c}} – file table, fd allocation
: {{The Linux Kernel/include|linux/mount.h}} – filesystem mount structures
: {{The Linux Kernel/include|linux/fs_context.h}} – filesystem mount context (replaces old mount API)
: {{The Linux Kernel/source|fs/readdir.c}} – directory listing (getdents)
📚 VFS References
: {{The Linux Kernel/doc|VFS|filesystems/#core-vfs-documentation}}
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
== Logical file systems ==
A {{w|file system}} (or ''filesystem'') is used to control how data is stored and retrieved.
Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins.
By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified.
Each group of data is called a "file".
The structure and logic rules used to manage the groups of information and their names is called a "file system".
There are many different kinds of file systems.
Each one has different structure and logic, properties of speed, flexibility, security, size and more.
Some file systems have been designed to be used for specific applications.
For example, the ISO 9660 file system is designed specifically for optical discs.
File systems can be used on many different kinds of storage devices.
Each storage device uses a different kind of media.
The most common storage device in use today is a {{w|SSD}}.
Other media that was used are hard disk, magnetic tape and optical disc.
In some cases, the computer's main memory (RAM) is used to create a temporary file system for short-term use.
Raw storage is called a block device.
Linux supports many different file systems, but common choices for the system disk on a block device include the ext* family (such as {{w|ext2}}, {{w|ext3}} and {{w|ext4}}), {{w|XFS}}, {{w|ReiserFS}} and {{w|btrfs}}.
For raw Flash without a {{w|flash translation layer}} (FTL) or {{w|Memory Technology Device}} (MTD), there is {{w|UBIFS}}, {{w|JFFS2}}, and {{w|YAFFS}}, among others. {{w|SquashFS}} is a common compressed read-only file system.
NFS and other network FS are described further in paragraph [[../Networking#Network_storage|Network storage]].
⚲ Shell interfaces:
: cat /proc/filesystems
: ls /sys/fs/
: {{The Linux Kernel/man|8|mount}}
: {{The Linux Kernel/man|8|umount}}
: {{The Linux Kernel/man|8|findmnt}}
: {{The Linux Kernel/man|1|mountpoint}}
: {{The Linux Kernel/man|1|df}}
Infrastructure ⚲ API function {{The Linux Kernel/id|register_filesystem}} registers structs {{The Linux Kernel/id|file_system_type}} and stores them in linked list ⚙️ {{The Linux Kernel/id|file_systems}}.
Function {{The Linux Kernel/id|ext4_init_fs}} registers {{The Linux Kernel/id|ext4_fs_type}}.
Operation of ''file system opening'' is called mounting: {{The Linux Kernel/id|ext4_get_tree}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/namespace.c}} – mount and namespace operations
:: {{The Linux Kernel/man|2|mount}}
::: {{The Linux Kernel/id|do_mount}}
: {{The Linux Kernel/include|linux/buffer_head.h}}
:: {{The Linux Kernel/id|super_block}}
:: {{The Linux Kernel/id|sb_bread}}
: {{The Linux Kernel/source|fs}} – filesystem implementations
:: {{The Linux Kernel/source|fs/ext4/ext4.h}} – ext4 on-disk format and internal structures
::: {{The Linux Kernel/id|ext4_sb_bread}}
Other notable filesystems:
: {{w|FUSE (filesystem)|FUSE}} – {{The Linux Kernel/source|fs/fuse}} – filesystem in userspace
: {{w|OverlayFS}} – {{The Linux Kernel/source|fs/overlayfs}} – union mount filesystem, used by containers
: {{w|Btrfs}} – {{The Linux Kernel/source|fs/btrfs}}
: {{w|XFS}} – {{The Linux Kernel/source|fs/xfs}}
📚 References:
: {{The Linux Kernel/doc|filesystems|filesystems/#filesystems}}
== Page cache ==
A page cache or disk cache is a transparent cache for the memory pages originating from a secondary storage device such as a hard disk drive.
The operating system keeps a page cache in otherwise unused portions of the main memory, resulting in quicker access to the contents of cached pages and overall performance improvements.
The page cache is implemented by the kernel, and is mostly transparent to applications.
Usually, all physical memory not directly allocated to applications is used by the operating system for the page cache.
Since the memory would otherwise be idle and is easily reclaimed when applications request it, there is generally no associated performance penalty and the operating system might even report such memory as "free" or "available".
The page cache also aids in writing to a disk.
Pages in the main memory that have been modified during writing data to disk are marked as "dirty" and have to be flushed to disk before they can be freed.
When a file write occurs, the page backing the particular block is looked up.
If it is already found in the page cache, the write is done to that page in the main memory.
Otherwise, when the write perfectly falls on page size boundaries, the page is not even read from disk, but allocated and immediately marked dirty.
Otherwise, the page(s) are fetched from disk and requested modifications are done.
Not all cached pages can be written to as program code is often mapped as read-only or copy-on-write; in the latter case, modifications to code will only be visible to the process itself and will not be written to disk.
⚲ API:
: {{The Linux Kernel/man|2|fsync}} ↪ {{The Linux Kernel/id|do_fsync}}
: {{The Linux Kernel/man|2|sync_file_range}} ↪ {{The Linux Kernel/id|ksys_sync_file_range}}
: {{The Linux Kernel/man|2|syncfs}} ↪ {{The Linux Kernel/id|sync_filesystem}}
⚙️ Internals:
: {{The Linux Kernel/include|linux/pagemap.h}}, {{The Linux Kernel/source|mm/filemap.c}} – page cache core, read/write/mmap paths
: {{The Linux Kernel/include|linux/buffer_head.h}}, {{The Linux Kernel/source|fs/buffer.c}} – buffer heads, block-level page cache interface
: {{The Linux Kernel/include|linux/writeback.h}}, {{The Linux Kernel/source|mm/page-writeback.c}} – dirty page writeback throttling
: {{The Linux Kernel/id|address_space}} – per-inode page cache, defined in {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/include|linux/backing-dev.h}} – backing device info, writeback bandwidth
: {{The Linux Kernel/id|wb_workfn}}, {{The Linux Kernel/id|do_writepages}}
📚 References
: {{w|Page cache}}
More
: [https://lwn.net/Articles/717953/ The future of DAX ] - direct access bypassing the cache
: [https://tldp.org/LDP/lki/lki-4.html Linux Page Cache in Linux Kernel 2.4 Internals]
== Zero-copy ==
🚀 advanced features
Writing data to storage and reading are very resource consuming operations.
Copying memory is time and CPU consuming operation too.
Set of methods to avoid copying operations is called {{w|zero-copy}}.
The goal of zero-copy methods is a fast and efficient data transfer within the system.
The first and simplest method is {{w|Pipeline (Unix)|Pipeline}}, invoked by operator "|" in shells.
Instead of writing data into temporary file and reading, the data is passed efficiently via a pipe bypassing a storage.
The second method is {{w|Tee_(command)|tee}}.
⚲ Syscalls:
: {{The Linux Kernel/man|2|pipe2}}
: {{The Linux Kernel/man|2|tee}}, {{The Linux Kernel/man|1|tee}}
: {{The Linux Kernel/man|2|sendfile}}
: {{The Linux Kernel/man|2|copy_file_range}}
: {{The Linux Kernel/man|2|splice}}
: {{The Linux Kernel/man|2|vmsplice}}
⚲ API and ⚙️ Internals:
: '''{{The Linux Kernel/man|2|pipe2}}''' ↪ {{The Linux Kernel/id|do_pipe2}} - creates pipe
:: uses {{The Linux Kernel/id|pipe_fs_type}}, {{The Linux Kernel/id|pipefifo_fops}}
: '''{{The Linux Kernel/man|2|tee}}''' ↪ {{The Linux Kernel/id|do_tee}} - duplicates pipe content
:: calls {{The Linux Kernel/id|link_pipe}}
: '''{{The Linux Kernel/man|2|sendfile}}''' ↪ {{The Linux Kernel/id|do_sendfile}} - transfers data between file descriptors, the output can be a socket. Used in [[../Networking#Network_storage|network storage]] and servers.
:: Calls: {{The Linux Kernel/id|do_splice_direct}}, {{The Linux Kernel/id|splice_direct_to_actor}}
: '''{{The Linux Kernel/man|2|copy_file_range}}''' ↪ {{The Linux Kernel/id|vfs_copy_file_range}} - transfers data between files
:: calls custom {{The Linux Kernel/id|remap_file_range}} like {{The Linux Kernel/id|nfs42_remap_file_range}}
:: or custom {{The Linux Kernel/id|copy_file_range}} like {{The Linux Kernel/id|fuse_copy_file_range}}
:: or {{The Linux Kernel/id|do_splice_direct}}
: '''{{The Linux Kernel/man|2|splice}}''' ↪ {{The Linux Kernel/id|do_splice}} - splices data to/from a pipe.
:: There are three cases regarding which end being a pipe:
:# {{The Linux Kernel/id|do_splice_from}} - pipe → file
:#: Calls custom {{The Linux Kernel/id|splice_write}} or {{The Linux Kernel/id|iter_file_splice_write}}
:# {{The Linux Kernel/id|do_splice_read}} - file → pipe
:#: Calls custom {{The Linux Kernel/id|splice_read}} or {{The Linux Kernel/id|copy_splice_read}}
:# {{The Linux Kernel/id|splice_pipe_to_pipe}} - both are pipes
: '''{{The Linux Kernel/man|2|vmsplice}}''' ↪
:: {{The Linux Kernel/id|vmsplice_to_pipe}} – splices user pages to a pipe
:: {{The Linux Kernel/id|vmsplice_to_user}} – splices a pipe to user pages
⚲ API
: {{The Linux Kernel/include|linux/splice.h}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/pipe.c}} – pipe and FIFO implementation
: {{The Linux Kernel/source|fs/splice.c}} – splice data transfer between file descriptors
🔧 TODO:
{{The Linux Kernel/id|zerocopy_sg_from_iter}} builds a zerocopy skb datagram from an iov_iter. Used in {{The Linux Kernel/id|tap_get_user}} and {{The Linux Kernel/id|tun_get_user}}.
{{The Linux Kernel/id|skb_zerocopy}}
{{The Linux Kernel/id|skb_zerocopy_iter_dgram}}
📚 References
: {{The Linux Kernel/man|7|pipe}}
: {{The Linux Kernel/man|7|fifo}}
: {{The Linux Kernel/doc|splice and pipes|filesystems/splice.html}}
:: {{The Linux Kernel/doc|Pipes API|filesystems/splice.html#pipes-api}}
: {{w|splice (system call)}}
: LTP: {{The Linux Kernel/ltp|kernel/syscalls|pipe}}, {{The Linux Kernel/ltp|kernel/syscalls|pipe2}}, {{The Linux Kernel/ltp|kernel/syscalls|tee}}, {{The Linux Kernel/ltp|kernel/syscalls|sendfile}}, {{The Linux Kernel/ltp|kernel/syscalls|copy_file_range}}, {{The Linux Kernel/ltp|kernel/syscalls|splice}}, {{The Linux Kernel/ltp|kernel/syscalls|vmsplice}}
== Block device layer ==
The block device layer in Linux provides an abstraction for accessing storage devices,
such as SSDs and USB drives, by presenting them as a series of fixed-size blocks.
It sits between the hardware and the file system,
allowing applications and file systems to perform read and write operations efficiently
without needing to know the specifics of the underlying hardware.
Key components include block drivers, the I/O scheduler,
and buffer management, which work together to handle requests,
optimize access patterns, and ensure data integrity.
This layer supports essential features like caching, partition management,
and queueing mechanisms to balance performance and reliability.
⚲ Interfaces:
: {{The Linux Kernel/include|linux/blk_types.h}}
:: {{The Linux Kernel/id|bio}} – main unit of I/O for the block layer and lower layers
:: {{The Linux Kernel/id|req_op}} – operations common to the bio and request structures
: {{The Linux Kernel/include|linux/bio.h}}
: {{The Linux Kernel/id|block_device}}
:: {{The Linux Kernel/id|block_size}}
: {{The Linux Kernel/id|blk_alloc_disk}} allocates {{The Linux Kernel/id|gendisk}}
: {{The Linux Kernel/id|add_disk}}
:: {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|block_device_operations}}
: {{The Linux Kernel/include|linux/blkdev.h}}
:: {{The Linux Kernel/id|gendisk}}
::: {{The Linux Kernel/id|dev_to_disk}}, {{The Linux Kernel/id|disk_to_dev}}
:: {{The Linux Kernel/id|block_class}} – block devices Driver Model class
:: {{The Linux Kernel/id|register_blkdev}}
:: {{The Linux Kernel/id|request}}
:: {{The Linux Kernel/id|request_queue}}
⚙️ Internals.
: {{The Linux Kernel/source|block}} – block layer core
: {{The Linux Kernel/source|fs/iomap}} – modern filesystem I/O mapping layer (used by xfs, ext4, btrfs)
: {{The Linux Kernel/id|block_class}}
👁 Examples:
: {{The Linux Kernel/source|drivers/block/brd.c}} - small RAM backed block device driver
: {{The Linux Kernel/source|drivers/block/null_blk}} – null block test device
=== Device mapper ===
The ''device mapper'' is a framework provided by the kernel for mapping physical block devices onto higher-level "virtual block devices".
It forms the foundation of LVM2, software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device.
Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption.
User space applications that need to create new mapped devices talk to the device mapper via the <code>libdevmapper.so</code> shared library, which in turn issues ioctls to the <code>/dev/mapper/control</code> device node.
Functions provided by the device mapper include linear, striped and error ''mappings,'' as well as crypt and multipath ''targets.''
For example, two disks may be concatenated into one logical volume with a pair of ''linear'' mappings, one for each disk.
As another example, ''crypt'' target encrypts the data passing through the specified device, by using the Linux kernel's Crypto API.
The following mapping targets are available:
: ''cache'' - allows the creation of hybrid volumes, by using solid-state drives (SSDs) as caches for hard disk drives (HDDs)
: ''crypt'' - provides data encryption, by using the Linux kernel's Crypto API
: ''delay'' - delays reads and/or writes to different devices (used for testing)
: ''era'' - behaves in a way similar to the linear target, while it keeps track of blocks that were written to within a user-defined period of time
: ''error'' - simulates I/O errors for all mapped blocks (used for testing)
: ''flakey'' - simulates periodic unreliable behaviour (used for testing)
: ''linear'' - maps a continuous range of blocks onto another block device
: ''mirror'' - maps a mirrored logical device, while providing data redundancy
: ''multipath'' - supports the mapping of multipathed devices, through usage of their path groups
: ''raid'' - offers an interface to the Linux kernel's software RAID driver (md)
: ''snapshot'' and ''snapshot-origin'' - used for creation of LVM snapshots, as part of the underlining copy-on-write scheme
: ''striped'' - strips the data across physical devices, with the number of stripes and the striping chunk size as parameters
: ''zero'' - an equivalent of <code>/dev/zero</code>, all reads return blocks of zeros, and writes are discarded
📚 References
: {{w|Device mapper}}
: {{The Linux Kernel/doc|Device mapper|admin-guide/device-mapper}}
: {{The Linux Kernel/include|linux/device-mapper.h}}
: {{The Linux Kernel/source|drivers/md}} – device mapper and software RAID
: https://lwn.net/Kernel/Index/#Device_mapper
=== Multi-Queue Block IO Queueing ===
The blk-mq API enhances IO performance
by leveraging multiple queues for parallel processing,
addressing bottlenecks from traditional single-queue designs.
It uses software queues for scheduling,
merging, and reordering requests,
and hardware queues to interface directly with devices.
If hardware resources are limited,
requests are temporarily queued for later dispatch.
⚲ Interfaces:
: /sys/devices/.../mq/
: {{The Linux Kernel/include|linux/blk-mq.h}}
:: Structures:
::: {{The Linux Kernel/id|blk_mq_hw_ctx}} – hardware dispatch queue context
::: {{The Linux Kernel/id|blk_mq_tag_set}} – shared between request queues
:::: {{The Linux Kernel/id|blk_mq_ops}}
:::: {{The Linux Kernel/id|blk_mq_tags}}
:::: {{The Linux Kernel/id|blk_mq_queue_map}} – map software queues to hardware queues
::: {{The Linux Kernel/id|request}}
👁️ Example
: {{The Linux Kernel/source|drivers/block/null_blk}} – multi-queue aware block test driver
⚙️ Internals
: /sys/kernel/debug/block/*/hctx*
: {{The Linux Kernel/source|block/blk-mq.h}} – blk-mq internal definitions
:: {{The Linux Kernel/id|blk_mq_ctx}} – software staging queue context
: {{The Linux Kernel/source|block/blk-mq.c}} – block multi-queue core code
: {{The Linux Kernel/source|block/blk-mq-tag.c}} – tag allocation using scalable bitmaps
: ...
📖 References
: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
=== I/O scheduler ===
I/O scheduling (or disk scheduling) is the method chosen by the kernel to decide in which order the block I/O operations will be submitted to the storage volumes.
I/O scheduling usually has to work with hard disk drives that have long access times for requests placed far away from the current position of the disk head (this operation is called a seek).
To minimize the effect this has on system performance, most I/O schedulers implement a variant of the elevator algorithm that reorders the incoming randomly ordered requests so the associated data would be accessed with minimal arm/head movement.
The particular I/O scheduler used with certain block device can be switched at run time by modifying the corresponding <code>/sys/block/<block_device>/queue/scheduler</code> file in the sysfs filesystem.
Some I/O schedulers also have tunable parameters that can be set through files in <code>/sys/block/<block_device>/queue/iosched/</code>.
⚲ Interfaces:
: {{The Linux Kernel/man|1|ionice}} – set or get process I/O scheduling class and priority
:: {{The Linux Kernel/man|2|ioprio_get}}, ioprio_set
: {{The Linux Kernel/include|linux/elevator.h}}
: Function {{The Linux Kernel/id|elv_register}} registers struct {{The Linux Kernel/id|elevator_type}}.
: {{The Linux Kernel/id|elevator_queue}}
⚙️ Internals:
: {{The Linux Kernel/source|block/ioprio.c}} – I/O priority system call
: {{The Linux Kernel/source|block/elevator.c}} – I/O scheduler framework
: {{The Linux Kernel/source|block/Kconfig.iosched}} – I/O scheduler Kconfig options
: {{The Linux Kernel/source|block/bfq-iosched.c}} – Budget Fair Queueing scheduler
: {{The Linux Kernel/source|block/kyber-iosched.c}} – Kyber multiqueue scheduler
: {{The Linux Kernel/source|block/mq-deadline.c}} – deadline multiqueue scheduler
: {{The Linux Kernel/include|trace/events/block.h}}
📖 References:
: {{w|I/O scheduling}}
: {{w|Elevator algorithm}}
: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
: {{The Linux Kernel/doc|Deadline IO scheduler tunables|deadline-iosched.html}}
: https://www.cloudbees.com/blog/linux-io-scheduler-tuning/
: https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers
=== ... ===
📖 References
: {{The Linux Kernel/doc|Block devices|block}}
:: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
::: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
::: {{The Linux Kernel/doc|Deadline IO scheduler tunables|block/deadline-iosched.html}}
::: {{The Linux Kernel/doc|Kyber I/O scheduler tunables|block/kyber-iosched.html}}
:: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
📚 Further reading
: /sys/kernel/debug/block/*/
: https://lwn.net/Kernel/Index/#Block_layer
: [https://lore.kernel.org/linux-block/ block devices ML]
: [http://lwn.net/images/pdf/LDD3/ch16.pdf LDD3:Block Drivers]
: [http://www.xml.com/ldd/chapter/book/ch12.html LDD1:Loading Block Drivers]
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch14.html ULK3 Chapter 14. Block Device Drivers]
: [https://sg.danny.cz/sg/The Linux SCSI Generic (sg) Driver]
:: [https://sg.danny.cz/sg/scsi_debug.html Scsi_debug adapter driver for Linux]
:: https://github.com/doug-gilbert/sg3_utils
== {{w|Computer data storage|Storage}} drivers ==
🔧 TODO
⚙️ Internals
: {{The Linux Kernel/source|drivers/nvmem}} – {{w|Non-volatile memory}}
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/scsi}} – {{w|SCSI|Small Computer System Interface}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/mtd}} – {{w|Memory Technology Device}} for 🤖 embedded devices
=== NVMe ===
{{w|NVM Express}} drivers provide accesses a computer's {{w|non-volatile storage}}.
Local storage is attached via {{w|PCIe|PCI Express}} bus.
PCI NVMe device driver entry point is {{The Linux Kernel/id|nvme_init}}.
Remote storage driver is called target and local {{w|Proxy_pattern|proxy}} driver is called host. {{w|Switched fabric|Fabrics}} connect remote targets with local host.
A fabric can be based on {{w|Remote direct memory access|RDMA}}, {{w|Transmission Control Protocol|TCP}} or {{w|Fibre Channel}} protocols.
⚲ API:
: [https://github.com/linux-nvme/nvme-cli nvme-cli]
: {{The Linux Kernel/include|uapi/linux/nvme_ioctl.h}}
: {{The Linux Kernel/include|linux/nvme.h}}
⚙️ '''Internals:'''
: {{The Linux Kernel/source|drivers/nvme}} – NVMe drivers
'''Host''' {{The Linux Kernel/source|drivers/nvme/host}}:
⚲ Interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/nvme.h}} – NVMe host common definitions
:: {{The Linux Kernel/id|nvme_init_ctrl}} initializes a NVMe controller structures {{The Linux Kernel/id|nvme_ctrl}} with operations {{The Linux Kernel/id|nvme_ctrl_ops}}
::: a subroutine of {{The Linux Kernel/id|nvme_scan_work}} adds a new disk with {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|nvme_init}} - local PCI nvme module init
:: {{The Linux Kernel/id|nvme_probe}}
::: {{The Linux Kernel/id|nvme_init_ctrl}} ...
::: {{The Linux Kernel/id|nvme_pci_ctrl_ops}}
: {{The Linux Kernel/id|nvme_core_init}} - module init
'''Fabrics'''
⚲ interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/fabrics.h}} – NVMe over Fabrics host common definitions
:: {{The Linux Kernel/id|nvmf_register_transport}} registers {{The Linux Kernel/id|nvmf_transport_ops}}
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
⚙️ internals:
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
:: {{The Linux Kernel/id|nvmf_misc}}
::: {{The Linux Kernel/id|nvmf_dev_fops}}
:::: {{The Linux Kernel/id|nvmf_dev_write}}
::::: {{The Linux Kernel/id|nvmf_create_ctrl}} binds {{The Linux Kernel/id|nvmf_transport_ops}}
'''Target''' {{The Linux Kernel/source|drivers/nvme/target}}:
⚲ Interfaces: {{The Linux Kernel/source|drivers/nvme/target/nvmet.h}}
: {{The Linux Kernel/id|nvmet_register_transport}} registers {{The Linux Kernel/id|nvmet_fabrics_ops}}
: {{The Linux Kernel/id|nvmet_init}} - module init
: {{The Linux Kernel/id|fcloop_init}} - loopback test module init which can be useful to test NVMe-FC transport interfaces.
{| class="wikitable"
|-
!
! colspan="3" |NVMe over {{w|Switched fabric|Fabrics}}
|-
!<div style='text-align:left'>Layers</div>
!{{w|Transmission Control Protocol|TCP}}
![[../Networking#RDMA|RDMA]]
!{{w|Fibre Channel}}
|-
!<div style='text-align:left'>Host modules</div>
|{{The Linux Kernel/id|nvme_tcp_init_module}}
|{{The Linux Kernel/id|nvme_rdma_init_module}}
|{{The Linux Kernel/id|nvme_fc_init_module}}
|-
!<div style='text-align:left'>Fabrics protocols</div>
|{{The Linux Kernel/include|linux/nvme-tcp.h}}
|{{The Linux Kernel/include|linux/nvme-rdma.h}}
|{{The Linux Kernel/include|linux/nvme-fc.h}}
{{The Linux Kernel/include|linux/nvme-fc-driver.h}}
|-
!<div style='text-align:left'>Target modules</div>
|{{The Linux Kernel/id|nvmet_tcp_init}}
|{{The Linux Kernel/id|nvmet_rdma_init}}
|{{The Linux Kernel/id|nvmet_fc_init_module}}
|}
👁 Example: {{The Linux Kernel/id|nvme_loop_init_module}} nvme loopback
: {{The Linux Kernel/id|nvme_loop_transport}} - fabrics operations
:: {{The Linux Kernel/id|nvme_loop_create_ctrl}}
::: {{The Linux Kernel/id|nvme_loop_create_io_queues}}
: {{The Linux Kernel/id|nvme_loop_ops}} - target operation
:: {{The Linux Kernel/id|nvme_loop_add_port}}
:: {{The Linux Kernel/id|nvme_loop_queue_response}}
== ... ==
🚀 Advanced
: {{The Linux Kernel/man|1|pidstat}} – reports task statistics
: /proc/self/io – I/O statistics for the process (see {{The Linux Kernel/man|5|proc}})
💾 Historical storage drivers
: {{The Linux Kernel/source|drivers/ata}} - {{w|Parallel ATA}}
📖 Further reading about storage
: [https://github.com/iovisor/bcc/blob/master/README.md#storage-and-filesystems-tools bcc/ebpf storage and filesystems tools]
{{BookCat}}
esob25v6ffruoaqa2ga906hsu66gksf
4641542
4641537
2026-06-28T16:08:28Z
Conan
3188
Storage: file/dir/name ops, sync, readahead, inotify/fanotify syscalls
4641542
wikitext
text/x-wiki
{{DISPLAYTITLE:Storage functionality}}
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor=#cef | storage
|-style=""
| bgcolor=#aef | [[#Files_and_directories|files & directories access]]
|-style=""
| bgcolor=#8df | [[#Virtual File System|Virtual File System]]
|-style=""
| bgcolor=#8ce |[[#Page_cache|page cache]]
|-style=""
| bgcolor=#7ac |[[#Logical file systems|logical file systems]]
|-style=""
| bgcolor=#69a |[[#Block_device_layer|block devices]]
|-style=""
| bgcolor=#689 |[[#Storage_drivers|storage drivers]]
|}
Storage functionality provides access to various storage devices via files and directories of files.
Most of the storage is persistent as flash memory, SSD and legacy hard disks.
Another kind of storage is temporary.
The ''file system'' provides an abstraction to organize the information into separate pieces of data (called ''files'') identified by a unique name.
Each file system type defines their own structures and logic rules used to manage these groups of information and their names.
Linux supports a plethora of different file system types, local and remote, native and from other operating systems.
To accommodate such disparity the kernel defines a common top layer, the ''virtual file system'' (VFS) layer.
[[File:The Linux Storage Stack Diagram.svg|Summary of the Linux kernel's storage stack|right|800x800px]]
== Files and directories ==
Four basic files access system calls:
: {{The Linux Kernel/man|2|open}} ↪ {{The Linux Kernel/id|do_sys_open}} - opens a file by name and returns a {{w|file descriptor}} (<big>fd</big>). Below functions operates on a fd.
: {{The Linux Kernel/man|2|close}} ↪ {{The Linux Kernel/id|close_fd}}
: {{The Linux Kernel/man|2|read}} ↪ {{The Linux Kernel/id|ksys_read}}
: {{The Linux Kernel/man|2|write}} ↪ {{The Linux Kernel/id|ksys_write}}
File in Linux and UNIX is not only physical file on persistent storage.
File interface is used to access pipes, sockets and other pseudo-files.
Other file operations:
: {{The Linux Kernel/man|2|lseek}} – reposition read/write file offset
: {{The Linux Kernel/man|2|dup}} – duplicate a file descriptor
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
: {{The Linux Kernel/man|2|truncate}}, {{The Linux Kernel/man|2|ftruncate}} – truncate a file
: {{The Linux Kernel/man|2|fallocate}} – preallocate file space
: {{The Linux Kernel/man|2|readahead}} ↪ {{The Linux Kernel/source|mm/readahead.c}} – prefetch file data into page cache
Directory operations:
: {{The Linux Kernel/man|2|mkdir}}, {{The Linux Kernel/man|2|rmdir}} – create/remove directory
: {{The Linux Kernel/man|2|getcwd}} ↪ {{The Linux Kernel/id|sys_getcwd}} – get current working directory
: {{The Linux Kernel/man|2|chdir}} ↪ {{The Linux Kernel/id|sys_chdir}} – change working directory
: {{The Linux Kernel/man|3|readdir}} ⇾ {{The Linux Kernel/man|2|getdents}}
: {{The Linux Kernel/man|7|path_resolution}}
Name operations:
: {{The Linux Kernel/man|2|rename}} – rename a file or directory
: {{The Linux Kernel/man|2|unlink}} – delete a name from the filesystem
: {{The Linux Kernel/man|2|readlink}}, {{The Linux Kernel/man|2|symlink}}, {{The Linux Kernel/man|2|link}}
⚙️ Files and directories internals
: {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/source|fs/open.c}} – open, close and related file operations
: {{The Linux Kernel/include|linux/namei.h}}, {{The Linux Kernel/source|fs/namei.c}} – pathname lookup and resolution
: {{The Linux Kernel/source|fs/read_write.c}} – read, write and lseek operations
: {{The Linux Kernel/include|linux/xattr.h}}, {{The Linux Kernel/source|fs/xattr.c}} – extended attributes
: {{The Linux Kernel/source|fs/notify}} – filesystem event notification
:: {{The Linux Kernel/man|2|inotify_init}}, {{The Linux Kernel/man|2|inotify_add_watch}}, {{The Linux Kernel/man|2|inotify_rm_watch}} – {{The Linux Kernel/man|7|inotify}}
:: {{The Linux Kernel/man|2|fanotify_init}}, {{The Linux Kernel/man|2|fanotify_mark}} – {{The Linux Kernel/man|7|fanotify}}
📚 Files and directories references
: [https://www.gnu.org/software/libc/manual/html_node/I_002fO-Overview.html Input/Output, The GNU C Library]
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
: {{w|Unix file types}}
=== File locks ===
File locks are mechanisms that allow processes to coordinate access to shared files.
These locks help prevent conflicts when multiple processes or threads attempt to access the same file simultaneously.
⚲ API
: {{The Linux Kernel/man|8|lslocks}} – list local system locks
: {{The Linux Kernel/man|3|lockf}} – apply, test or remove a POSIX lock on an open file
: {{The Linux Kernel/man|2|flock}} – apply or remove an advisory BSD lock on an open file
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
:: {{The Linux Kernel/id|F_SETLK}} – advisory record lock
:: {{The Linux Kernel/id|F_OFD_SETLK}} – Open File Description Lock
:: {{The Linux Kernel/id|flock}} – lock parameters
: ⚠️ Avoid mixing flock and fcntl locks on the same file as they don’t interact with each other.
⚙️ Internals
: {{The Linux Kernel/include|linux/filelock.h}}
: {{The Linux Kernel/source|fs/locks.c}} – POSIX and flock file locking
: {{The Linux Kernel/include|trace/events/filelock.h}}
💾 ''Historical: [https://elixir.bootlin.com/linux/v5.14/K/ident/CONFIG_MANDATORY_FILE_LOCKING Mandatory locking] feature is no longer supported at all in Linux 5.15 and above because the implementation is unreliable.''
=== Asynchronous I/O ===
🚀 advanced features
'''AIO'''
: https://lwn.net/Kernel/Index/#Asynchronous_IO
: {{The Linux Kernel/man|2|io_submit}} {{The Linux Kernel/man|2|io_setup}} {{The Linux Kernel/man|2|io_cancel}} {{The Linux Kernel/man|2|io_destroy}} {{The Linux Kernel/man|2|io_getevents}}
: {{The Linux Kernel/include|uapi/linux/aio_abi.h}}
: {{The Linux Kernel/source|fs/aio.c}} – async I/O implementation
: {{The Linux Kernel/ltp|kernel|io/aio}}
'''{{w|io_uring}}'''
🌱 ''New since release 5.1 in May 2019''
: https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
: https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/
: {{The Linux Kernel/id|io_uring_enter}} {{The Linux Kernel/id|io_uring_setup}} {{The Linux Kernel/id|io_uring_register}}
: {{The Linux Kernel/include|linux/io_uring.h}}
: {{The Linux Kernel/include|uapi/linux/io_uring.h}}
: {{The Linux Kernel/source|io_uring}}
: https://lwn.net/Kernel/Index/#io_uring
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/810414/ The rapid growth of io_uring]
:: [https://lwn.net/Articles/815491/ Automatic buffer selection for io_uring]
:: [https://lwn.net/Articles/826053/ Operations restrictions for io_uring]
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/803070/ Redesigned workqueues for io_uring]
: {{The Linux Kernel/ltp|kernel/syscalls|io_uring}}
=== {{w|Asynchronous_I/O#Forms|Non-blocking I/O}} ===
Allow non-blocking access to multiple file descriptors.
'''Efficient event polling {{w|epoll}}'''
⚲ API:
: {{The Linux Kernel/include|uapi/linux/eventpoll.h}}
: {{The Linux Kernel/man|7|epoll}}
: {{The Linux Kernel/man|2|epoll_create}} ↪ {{The Linux Kernel/id|do_epoll_create}}
: {{The Linux Kernel/man|2|epoll_ctl}} ↪ {{The Linux Kernel/id|do_epoll_ctl}}
: {{The Linux Kernel/man|2|epoll_wait}} ↪ {{The Linux Kernel/id|do_epoll_wait}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/eventpoll.c}} – efficient event polling (epoll)
'''{{w|Select (Unix)|select}} and {{w|poll (Unix)|poll}}'''
💾 ''Historical: Select and poll system calls are derived from UNIX''
⚲ API:
: {{The Linux Kernel/man|2|poll}} ↪ {{The Linux Kernel/id|do_sys_poll}}
: {{The Linux Kernel/man|2|select}} ↪ {{The Linux Kernel/id|kern_select}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/select.c}} – select and poll implementation
=== Vectored I/O ===
🚀 advanced feature
{{w|Vectored I/O}}, also known as scatter/gather I/O, is a method of input and output by which a single procedure call sequentially reads data from multiple buffers and writes it to a single data stream, or reads data from a data stream and writes it to multiple buffers, as defined in a vector of buffers. Scatter/gather refers to the process of gathering data from, or scattering data into, the given set of buffers. Vectored I/O can operate synchronously or asynchronously. The main reasons for using vectored I/O are efficiency and convenience.
⚲ API:
: {{The Linux Kernel/include|uapi/linux/uio.h}}
: {{The Linux Kernel/include|linux/uio.h}}
: {{The Linux Kernel/id|iovec}}
: {{The Linux Kernel/man|2|readv}} ↪ {{The Linux Kernel/id|do_readv}}
: {{The Linux Kernel/man|2|writev}} ↪ {{The Linux Kernel/id|do_writev}}
⚙️ Internals:
: {{The Linux Kernel/id|iov_iter}}
: {{The Linux Kernel/id|do_readv}} ↯ call hierarchy:
:: {{The Linux Kernel/id|vfs_readv}}
::: {{The Linux Kernel/id|import_iovec}}
::: {{The Linux Kernel/id|ext4_file_read_iter}}
: {{The Linux Kernel/source|lib/iov_iter.c}} – I/O vector iterator operations
=== ... ===
📖 References
: [https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html Fast Scatter-Gather I/O, The GNU C Library]
: https://lwn.net/Kernel/Index/#Vectored_IO
: https://lwn.net/Kernel/Index/#Scattergather_chaining
📚 Further reading
: https://deepwiki.com/torvalds/linux/4-filesystems
== Virtual File System ==
The {{w|virtual file system}} (VFS) is an abstract layer on top of a concrete logical file system.
The purpose of a VFS is to allow client applications to access different types of logical file systems in a uniform way.
A VFS can, for example, be used to access local and [[../Networking#Network_storage|network storage]] devices transparently without the client application noticing the difference.
It can be used to bridge the differences in Windows, classic Mac OS/macOS and Unix filesystems, so that applications can access files on local file systems of those types without having to know what type of file system they are accessing.
A VFS specifies an interface (or a "contract") between the kernel and a logical file system.
Therefore, it is easy to add support for new file system types to the kernel simply by fulfilling the contract.
🔧 TODO: {{The Linux Kernel/id|vfsmount}}, {{The Linux Kernel/id|vfs_create}}, {{The Linux Kernel/id|vfs_read}}, {{The Linux Kernel/id|vfs_write}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/inode.c}} – inode allocation and management
: {{The Linux Kernel/include|linux/dcache.h}}, {{The Linux Kernel/source|fs/dcache.c}} – dentry cache, pathname-to-inode lookup
: {{The Linux Kernel/source|fs/super.c}} – superblock operations, filesystem mount/unmount
: {{The Linux Kernel/include|linux/file.h}}, {{The Linux Kernel/source|fs/file.c}} – file table, fd allocation
: {{The Linux Kernel/include|linux/mount.h}} – filesystem mount structures
: {{The Linux Kernel/include|linux/fs_context.h}} – filesystem mount context (replaces old mount API)
: {{The Linux Kernel/source|fs/readdir.c}} – directory listing (getdents)
📚 VFS References
: {{The Linux Kernel/doc|VFS|filesystems/#core-vfs-documentation}}
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
== Logical file systems ==
A {{w|file system}} (or ''filesystem'') is used to control how data is stored and retrieved.
Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins.
By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified.
Each group of data is called a "file".
The structure and logic rules used to manage the groups of information and their names is called a "file system".
There are many different kinds of file systems.
Each one has different structure and logic, properties of speed, flexibility, security, size and more.
Some file systems have been designed to be used for specific applications.
For example, the ISO 9660 file system is designed specifically for optical discs.
File systems can be used on many different kinds of storage devices.
Each storage device uses a different kind of media.
The most common storage device in use today is a {{w|SSD}}.
Other media that was used are hard disk, magnetic tape and optical disc.
In some cases, the computer's main memory (RAM) is used to create a temporary file system for short-term use.
Raw storage is called a block device.
Linux supports many different file systems, but common choices for the system disk on a block device include the ext* family (such as {{w|ext2}}, {{w|ext3}} and {{w|ext4}}), {{w|XFS}}, {{w|ReiserFS}} and {{w|btrfs}}.
For raw Flash without a {{w|flash translation layer}} (FTL) or {{w|Memory Technology Device}} (MTD), there is {{w|UBIFS}}, {{w|JFFS2}}, and {{w|YAFFS}}, among others. {{w|SquashFS}} is a common compressed read-only file system.
NFS and other network FS are described further in paragraph [[../Networking#Network_storage|Network storage]].
⚲ Shell interfaces:
: cat /proc/filesystems
: ls /sys/fs/
: {{The Linux Kernel/man|8|mount}}
: {{The Linux Kernel/man|8|umount}}
: {{The Linux Kernel/man|8|findmnt}}
: {{The Linux Kernel/man|1|mountpoint}}
: {{The Linux Kernel/man|1|df}}
Infrastructure ⚲ API function {{The Linux Kernel/id|register_filesystem}} registers structs {{The Linux Kernel/id|file_system_type}} and stores them in linked list ⚙️ {{The Linux Kernel/id|file_systems}}.
Function {{The Linux Kernel/id|ext4_init_fs}} registers {{The Linux Kernel/id|ext4_fs_type}}.
Operation of ''file system opening'' is called mounting: {{The Linux Kernel/id|ext4_get_tree}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/namespace.c}} – mount and namespace operations
:: {{The Linux Kernel/man|2|mount}}
::: {{The Linux Kernel/id|do_mount}}
: {{The Linux Kernel/include|linux/buffer_head.h}}
:: {{The Linux Kernel/id|super_block}}
:: {{The Linux Kernel/id|sb_bread}}
: {{The Linux Kernel/source|fs}} – filesystem implementations
:: {{The Linux Kernel/source|fs/ext4/ext4.h}} – ext4 on-disk format and internal structures
::: {{The Linux Kernel/id|ext4_sb_bread}}
Other notable filesystems:
: {{w|FUSE (filesystem)|FUSE}} – {{The Linux Kernel/source|fs/fuse}} – filesystem in userspace
: {{w|OverlayFS}} – {{The Linux Kernel/source|fs/overlayfs}} – union mount filesystem, used by containers
: {{w|Btrfs}} – {{The Linux Kernel/source|fs/btrfs}}
: {{w|XFS}} – {{The Linux Kernel/source|fs/xfs}}
📚 References:
: {{The Linux Kernel/doc|filesystems|filesystems/#filesystems}}
== Page cache ==
A page cache or disk cache is a transparent cache for the memory pages originating from a secondary storage device such as a hard disk drive.
The operating system keeps a page cache in otherwise unused portions of the main memory, resulting in quicker access to the contents of cached pages and overall performance improvements.
The page cache is implemented by the kernel, and is mostly transparent to applications.
Usually, all physical memory not directly allocated to applications is used by the operating system for the page cache.
Since the memory would otherwise be idle and is easily reclaimed when applications request it, there is generally no associated performance penalty and the operating system might even report such memory as "free" or "available".
The page cache also aids in writing to a disk.
Pages in the main memory that have been modified during writing data to disk are marked as "dirty" and have to be flushed to disk before they can be freed.
When a file write occurs, the page backing the particular block is looked up.
If it is already found in the page cache, the write is done to that page in the main memory.
Otherwise, when the write perfectly falls on page size boundaries, the page is not even read from disk, but allocated and immediately marked dirty.
Otherwise, the page(s) are fetched from disk and requested modifications are done.
Not all cached pages can be written to as program code is often mapped as read-only or copy-on-write; in the latter case, modifications to code will only be visible to the process itself and will not be written to disk.
⚲ API:
: {{The Linux Kernel/man|2|fsync}} ↪ {{The Linux Kernel/id|do_fsync}}
: {{The Linux Kernel/man|2|sync_file_range}} ↪ {{The Linux Kernel/id|ksys_sync_file_range}}
: {{The Linux Kernel/man|2|syncfs}} ↪ {{The Linux Kernel/id|sync_filesystem}}
: {{The Linux Kernel/man|2|sync}} ↪ {{The Linux Kernel/id|ksys_sync}} – flush all filesystem caches to disk
⚙️ Internals:
: {{The Linux Kernel/include|linux/pagemap.h}}, {{The Linux Kernel/source|mm/filemap.c}} – page cache core, read/write/mmap paths
: {{The Linux Kernel/include|linux/buffer_head.h}}, {{The Linux Kernel/source|fs/buffer.c}} – buffer heads, block-level page cache interface
: {{The Linux Kernel/include|linux/writeback.h}}, {{The Linux Kernel/source|mm/page-writeback.c}} – dirty page writeback throttling
: {{The Linux Kernel/id|address_space}} – per-inode page cache, defined in {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/include|linux/backing-dev.h}} – backing device info, writeback bandwidth
: {{The Linux Kernel/id|wb_workfn}}, {{The Linux Kernel/id|do_writepages}}
📚 References
: {{w|Page cache}}
More
: [https://lwn.net/Articles/717953/ The future of DAX ] - direct access bypassing the cache
: [https://tldp.org/LDP/lki/lki-4.html Linux Page Cache in Linux Kernel 2.4 Internals]
== Zero-copy ==
🚀 advanced features
Writing data to storage and reading are very resource consuming operations.
Copying memory is time and CPU consuming operation too.
Set of methods to avoid copying operations is called {{w|zero-copy}}.
The goal of zero-copy methods is a fast and efficient data transfer within the system.
The first and simplest method is {{w|Pipeline (Unix)|Pipeline}}, invoked by operator "|" in shells.
Instead of writing data into temporary file and reading, the data is passed efficiently via a pipe bypassing a storage.
The second method is {{w|Tee_(command)|tee}}.
⚲ Syscalls:
: {{The Linux Kernel/man|2|pipe2}}
: {{The Linux Kernel/man|2|tee}}, {{The Linux Kernel/man|1|tee}}
: {{The Linux Kernel/man|2|sendfile}}
: {{The Linux Kernel/man|2|copy_file_range}}
: {{The Linux Kernel/man|2|splice}}
: {{The Linux Kernel/man|2|vmsplice}}
⚲ API and ⚙️ Internals:
: '''{{The Linux Kernel/man|2|pipe2}}''' ↪ {{The Linux Kernel/id|do_pipe2}} - creates pipe
:: uses {{The Linux Kernel/id|pipe_fs_type}}, {{The Linux Kernel/id|pipefifo_fops}}
: '''{{The Linux Kernel/man|2|tee}}''' ↪ {{The Linux Kernel/id|do_tee}} - duplicates pipe content
:: calls {{The Linux Kernel/id|link_pipe}}
: '''{{The Linux Kernel/man|2|sendfile}}''' ↪ {{The Linux Kernel/id|do_sendfile}} - transfers data between file descriptors, the output can be a socket. Used in [[../Networking#Network_storage|network storage]] and servers.
:: Calls: {{The Linux Kernel/id|do_splice_direct}}, {{The Linux Kernel/id|splice_direct_to_actor}}
: '''{{The Linux Kernel/man|2|copy_file_range}}''' ↪ {{The Linux Kernel/id|vfs_copy_file_range}} - transfers data between files
:: calls custom {{The Linux Kernel/id|remap_file_range}} like {{The Linux Kernel/id|nfs42_remap_file_range}}
:: or custom {{The Linux Kernel/id|copy_file_range}} like {{The Linux Kernel/id|fuse_copy_file_range}}
:: or {{The Linux Kernel/id|do_splice_direct}}
: '''{{The Linux Kernel/man|2|splice}}''' ↪ {{The Linux Kernel/id|do_splice}} - splices data to/from a pipe.
:: There are three cases regarding which end being a pipe:
:# {{The Linux Kernel/id|do_splice_from}} - pipe → file
:#: Calls custom {{The Linux Kernel/id|splice_write}} or {{The Linux Kernel/id|iter_file_splice_write}}
:# {{The Linux Kernel/id|do_splice_read}} - file → pipe
:#: Calls custom {{The Linux Kernel/id|splice_read}} or {{The Linux Kernel/id|copy_splice_read}}
:# {{The Linux Kernel/id|splice_pipe_to_pipe}} - both are pipes
: '''{{The Linux Kernel/man|2|vmsplice}}''' ↪
:: {{The Linux Kernel/id|vmsplice_to_pipe}} – splices user pages to a pipe
:: {{The Linux Kernel/id|vmsplice_to_user}} – splices a pipe to user pages
⚲ API
: {{The Linux Kernel/include|linux/splice.h}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/pipe.c}} – pipe and FIFO implementation
: {{The Linux Kernel/source|fs/splice.c}} – splice data transfer between file descriptors
🔧 TODO:
{{The Linux Kernel/id|zerocopy_sg_from_iter}} builds a zerocopy skb datagram from an iov_iter. Used in {{The Linux Kernel/id|tap_get_user}} and {{The Linux Kernel/id|tun_get_user}}.
{{The Linux Kernel/id|skb_zerocopy}}
{{The Linux Kernel/id|skb_zerocopy_iter_dgram}}
📚 References
: {{The Linux Kernel/man|7|pipe}}
: {{The Linux Kernel/man|7|fifo}}
: {{The Linux Kernel/doc|splice and pipes|filesystems/splice.html}}
:: {{The Linux Kernel/doc|Pipes API|filesystems/splice.html#pipes-api}}
: {{w|splice (system call)}}
: LTP: {{The Linux Kernel/ltp|kernel/syscalls|pipe}}, {{The Linux Kernel/ltp|kernel/syscalls|pipe2}}, {{The Linux Kernel/ltp|kernel/syscalls|tee}}, {{The Linux Kernel/ltp|kernel/syscalls|sendfile}}, {{The Linux Kernel/ltp|kernel/syscalls|copy_file_range}}, {{The Linux Kernel/ltp|kernel/syscalls|splice}}, {{The Linux Kernel/ltp|kernel/syscalls|vmsplice}}
== Block device layer ==
The block device layer in Linux provides an abstraction for accessing storage devices,
such as SSDs and USB drives, by presenting them as a series of fixed-size blocks.
It sits between the hardware and the file system,
allowing applications and file systems to perform read and write operations efficiently
without needing to know the specifics of the underlying hardware.
Key components include block drivers, the I/O scheduler,
and buffer management, which work together to handle requests,
optimize access patterns, and ensure data integrity.
This layer supports essential features like caching, partition management,
and queueing mechanisms to balance performance and reliability.
⚲ Interfaces:
: {{The Linux Kernel/include|linux/blk_types.h}}
:: {{The Linux Kernel/id|bio}} – main unit of I/O for the block layer and lower layers
:: {{The Linux Kernel/id|req_op}} – operations common to the bio and request structures
: {{The Linux Kernel/include|linux/bio.h}}
: {{The Linux Kernel/id|block_device}}
:: {{The Linux Kernel/id|block_size}}
: {{The Linux Kernel/id|blk_alloc_disk}} allocates {{The Linux Kernel/id|gendisk}}
: {{The Linux Kernel/id|add_disk}}
:: {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|block_device_operations}}
: {{The Linux Kernel/include|linux/blkdev.h}}
:: {{The Linux Kernel/id|gendisk}}
::: {{The Linux Kernel/id|dev_to_disk}}, {{The Linux Kernel/id|disk_to_dev}}
:: {{The Linux Kernel/id|block_class}} – block devices Driver Model class
:: {{The Linux Kernel/id|register_blkdev}}
:: {{The Linux Kernel/id|request}}
:: {{The Linux Kernel/id|request_queue}}
⚙️ Internals.
: {{The Linux Kernel/source|block}} – block layer core
: {{The Linux Kernel/source|fs/iomap}} – modern filesystem I/O mapping layer (used by xfs, ext4, btrfs)
: {{The Linux Kernel/id|block_class}}
👁 Examples:
: {{The Linux Kernel/source|drivers/block/brd.c}} - small RAM backed block device driver
: {{The Linux Kernel/source|drivers/block/null_blk}} – null block test device
=== Device mapper ===
The ''device mapper'' is a framework provided by the kernel for mapping physical block devices onto higher-level "virtual block devices".
It forms the foundation of LVM2, software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device.
Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption.
User space applications that need to create new mapped devices talk to the device mapper via the <code>libdevmapper.so</code> shared library, which in turn issues ioctls to the <code>/dev/mapper/control</code> device node.
Functions provided by the device mapper include linear, striped and error ''mappings,'' as well as crypt and multipath ''targets.''
For example, two disks may be concatenated into one logical volume with a pair of ''linear'' mappings, one for each disk.
As another example, ''crypt'' target encrypts the data passing through the specified device, by using the Linux kernel's Crypto API.
The following mapping targets are available:
: ''cache'' - allows the creation of hybrid volumes, by using solid-state drives (SSDs) as caches for hard disk drives (HDDs)
: ''crypt'' - provides data encryption, by using the Linux kernel's Crypto API
: ''delay'' - delays reads and/or writes to different devices (used for testing)
: ''era'' - behaves in a way similar to the linear target, while it keeps track of blocks that were written to within a user-defined period of time
: ''error'' - simulates I/O errors for all mapped blocks (used for testing)
: ''flakey'' - simulates periodic unreliable behaviour (used for testing)
: ''linear'' - maps a continuous range of blocks onto another block device
: ''mirror'' - maps a mirrored logical device, while providing data redundancy
: ''multipath'' - supports the mapping of multipathed devices, through usage of their path groups
: ''raid'' - offers an interface to the Linux kernel's software RAID driver (md)
: ''snapshot'' and ''snapshot-origin'' - used for creation of LVM snapshots, as part of the underlining copy-on-write scheme
: ''striped'' - strips the data across physical devices, with the number of stripes and the striping chunk size as parameters
: ''zero'' - an equivalent of <code>/dev/zero</code>, all reads return blocks of zeros, and writes are discarded
📚 References
: {{w|Device mapper}}
: {{The Linux Kernel/doc|Device mapper|admin-guide/device-mapper}}
: {{The Linux Kernel/include|linux/device-mapper.h}}
: {{The Linux Kernel/source|drivers/md}} – device mapper and software RAID
: https://lwn.net/Kernel/Index/#Device_mapper
=== Multi-Queue Block IO Queueing ===
The blk-mq API enhances IO performance
by leveraging multiple queues for parallel processing,
addressing bottlenecks from traditional single-queue designs.
It uses software queues for scheduling,
merging, and reordering requests,
and hardware queues to interface directly with devices.
If hardware resources are limited,
requests are temporarily queued for later dispatch.
⚲ Interfaces:
: /sys/devices/.../mq/
: {{The Linux Kernel/include|linux/blk-mq.h}}
:: Structures:
::: {{The Linux Kernel/id|blk_mq_hw_ctx}} – hardware dispatch queue context
::: {{The Linux Kernel/id|blk_mq_tag_set}} – shared between request queues
:::: {{The Linux Kernel/id|blk_mq_ops}}
:::: {{The Linux Kernel/id|blk_mq_tags}}
:::: {{The Linux Kernel/id|blk_mq_queue_map}} – map software queues to hardware queues
::: {{The Linux Kernel/id|request}}
👁️ Example
: {{The Linux Kernel/source|drivers/block/null_blk}} – multi-queue aware block test driver
⚙️ Internals
: /sys/kernel/debug/block/*/hctx*
: {{The Linux Kernel/source|block/blk-mq.h}} – blk-mq internal definitions
:: {{The Linux Kernel/id|blk_mq_ctx}} – software staging queue context
: {{The Linux Kernel/source|block/blk-mq.c}} – block multi-queue core code
: {{The Linux Kernel/source|block/blk-mq-tag.c}} – tag allocation using scalable bitmaps
: ...
📖 References
: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
=== I/O scheduler ===
I/O scheduling (or disk scheduling) is the method chosen by the kernel to decide in which order the block I/O operations will be submitted to the storage volumes.
I/O scheduling usually has to work with hard disk drives that have long access times for requests placed far away from the current position of the disk head (this operation is called a seek).
To minimize the effect this has on system performance, most I/O schedulers implement a variant of the elevator algorithm that reorders the incoming randomly ordered requests so the associated data would be accessed with minimal arm/head movement.
The particular I/O scheduler used with certain block device can be switched at run time by modifying the corresponding <code>/sys/block/<block_device>/queue/scheduler</code> file in the sysfs filesystem.
Some I/O schedulers also have tunable parameters that can be set through files in <code>/sys/block/<block_device>/queue/iosched/</code>.
⚲ Interfaces:
: {{The Linux Kernel/man|1|ionice}} – set or get process I/O scheduling class and priority
:: {{The Linux Kernel/man|2|ioprio_get}}, ioprio_set
: {{The Linux Kernel/include|linux/elevator.h}}
: Function {{The Linux Kernel/id|elv_register}} registers struct {{The Linux Kernel/id|elevator_type}}.
: {{The Linux Kernel/id|elevator_queue}}
⚙️ Internals:
: {{The Linux Kernel/source|block/ioprio.c}} – I/O priority system call
: {{The Linux Kernel/source|block/elevator.c}} – I/O scheduler framework
: {{The Linux Kernel/source|block/Kconfig.iosched}} – I/O scheduler Kconfig options
: {{The Linux Kernel/source|block/bfq-iosched.c}} – Budget Fair Queueing scheduler
: {{The Linux Kernel/source|block/kyber-iosched.c}} – Kyber multiqueue scheduler
: {{The Linux Kernel/source|block/mq-deadline.c}} – deadline multiqueue scheduler
: {{The Linux Kernel/include|trace/events/block.h}}
📖 References:
: {{w|I/O scheduling}}
: {{w|Elevator algorithm}}
: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
: {{The Linux Kernel/doc|Deadline IO scheduler tunables|deadline-iosched.html}}
: https://www.cloudbees.com/blog/linux-io-scheduler-tuning/
: https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers
=== ... ===
📖 References
: {{The Linux Kernel/doc|Block devices|block}}
:: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
::: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
::: {{The Linux Kernel/doc|Deadline IO scheduler tunables|block/deadline-iosched.html}}
::: {{The Linux Kernel/doc|Kyber I/O scheduler tunables|block/kyber-iosched.html}}
:: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
📚 Further reading
: /sys/kernel/debug/block/*/
: https://lwn.net/Kernel/Index/#Block_layer
: [https://lore.kernel.org/linux-block/ block devices ML]
: [http://lwn.net/images/pdf/LDD3/ch16.pdf LDD3:Block Drivers]
: [http://www.xml.com/ldd/chapter/book/ch12.html LDD1:Loading Block Drivers]
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch14.html ULK3 Chapter 14. Block Device Drivers]
: [https://sg.danny.cz/sg/The Linux SCSI Generic (sg) Driver]
:: [https://sg.danny.cz/sg/scsi_debug.html Scsi_debug adapter driver for Linux]
:: https://github.com/doug-gilbert/sg3_utils
== {{w|Computer data storage|Storage}} drivers ==
🔧 TODO
⚙️ Internals
: {{The Linux Kernel/source|drivers/nvmem}} – {{w|Non-volatile memory}}
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/scsi}} – {{w|SCSI|Small Computer System Interface}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/mtd}} – {{w|Memory Technology Device}} for 🤖 embedded devices
=== NVMe ===
{{w|NVM Express}} drivers provide accesses a computer's {{w|non-volatile storage}}.
Local storage is attached via {{w|PCIe|PCI Express}} bus.
PCI NVMe device driver entry point is {{The Linux Kernel/id|nvme_init}}.
Remote storage driver is called target and local {{w|Proxy_pattern|proxy}} driver is called host. {{w|Switched fabric|Fabrics}} connect remote targets with local host.
A fabric can be based on {{w|Remote direct memory access|RDMA}}, {{w|Transmission Control Protocol|TCP}} or {{w|Fibre Channel}} protocols.
⚲ API:
: [https://github.com/linux-nvme/nvme-cli nvme-cli]
: {{The Linux Kernel/include|uapi/linux/nvme_ioctl.h}}
: {{The Linux Kernel/include|linux/nvme.h}}
⚙️ '''Internals:'''
: {{The Linux Kernel/source|drivers/nvme}} – NVMe drivers
'''Host''' {{The Linux Kernel/source|drivers/nvme/host}}:
⚲ Interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/nvme.h}} – NVMe host common definitions
:: {{The Linux Kernel/id|nvme_init_ctrl}} initializes a NVMe controller structures {{The Linux Kernel/id|nvme_ctrl}} with operations {{The Linux Kernel/id|nvme_ctrl_ops}}
::: a subroutine of {{The Linux Kernel/id|nvme_scan_work}} adds a new disk with {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|nvme_init}} - local PCI nvme module init
:: {{The Linux Kernel/id|nvme_probe}}
::: {{The Linux Kernel/id|nvme_init_ctrl}} ...
::: {{The Linux Kernel/id|nvme_pci_ctrl_ops}}
: {{The Linux Kernel/id|nvme_core_init}} - module init
'''Fabrics'''
⚲ interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/fabrics.h}} – NVMe over Fabrics host common definitions
:: {{The Linux Kernel/id|nvmf_register_transport}} registers {{The Linux Kernel/id|nvmf_transport_ops}}
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
⚙️ internals:
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
:: {{The Linux Kernel/id|nvmf_misc}}
::: {{The Linux Kernel/id|nvmf_dev_fops}}
:::: {{The Linux Kernel/id|nvmf_dev_write}}
::::: {{The Linux Kernel/id|nvmf_create_ctrl}} binds {{The Linux Kernel/id|nvmf_transport_ops}}
'''Target''' {{The Linux Kernel/source|drivers/nvme/target}}:
⚲ Interfaces: {{The Linux Kernel/source|drivers/nvme/target/nvmet.h}}
: {{The Linux Kernel/id|nvmet_register_transport}} registers {{The Linux Kernel/id|nvmet_fabrics_ops}}
: {{The Linux Kernel/id|nvmet_init}} - module init
: {{The Linux Kernel/id|fcloop_init}} - loopback test module init which can be useful to test NVMe-FC transport interfaces.
{| class="wikitable"
|-
!
! colspan="3" |NVMe over {{w|Switched fabric|Fabrics}}
|-
!<div style='text-align:left'>Layers</div>
!{{w|Transmission Control Protocol|TCP}}
![[../Networking#RDMA|RDMA]]
!{{w|Fibre Channel}}
|-
!<div style='text-align:left'>Host modules</div>
|{{The Linux Kernel/id|nvme_tcp_init_module}}
|{{The Linux Kernel/id|nvme_rdma_init_module}}
|{{The Linux Kernel/id|nvme_fc_init_module}}
|-
!<div style='text-align:left'>Fabrics protocols</div>
|{{The Linux Kernel/include|linux/nvme-tcp.h}}
|{{The Linux Kernel/include|linux/nvme-rdma.h}}
|{{The Linux Kernel/include|linux/nvme-fc.h}}
{{The Linux Kernel/include|linux/nvme-fc-driver.h}}
|-
!<div style='text-align:left'>Target modules</div>
|{{The Linux Kernel/id|nvmet_tcp_init}}
|{{The Linux Kernel/id|nvmet_rdma_init}}
|{{The Linux Kernel/id|nvmet_fc_init_module}}
|}
👁 Example: {{The Linux Kernel/id|nvme_loop_init_module}} nvme loopback
: {{The Linux Kernel/id|nvme_loop_transport}} - fabrics operations
:: {{The Linux Kernel/id|nvme_loop_create_ctrl}}
::: {{The Linux Kernel/id|nvme_loop_create_io_queues}}
: {{The Linux Kernel/id|nvme_loop_ops}} - target operation
:: {{The Linux Kernel/id|nvme_loop_add_port}}
:: {{The Linux Kernel/id|nvme_loop_queue_response}}
== ... ==
🚀 Advanced
: {{The Linux Kernel/man|1|pidstat}} – reports task statistics
: /proc/self/io – I/O statistics for the process (see {{The Linux Kernel/man|5|proc}})
💾 Historical storage drivers
: {{The Linux Kernel/source|drivers/ata}} - {{w|Parallel ATA}}
📖 Further reading about storage
: [https://github.com/iovisor/bcc/blob/master/README.md#storage-and-filesystems-tools bcc/ebpf storage and filesystems tools]
{{BookCat}}
cav5iuq6kw45l0m3hikguqaxu9witwi
4641646
4641542
2026-06-29T08:43:57Z
Conan
3188
stress-ng text fragment anchors
4641646
wikitext
text/x-wiki
{{DISPLAYTITLE:Storage functionality}}
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor=#cef | storage
|-style=""
| bgcolor=#aef | [[#Files_and_directories|files & directories access]]
|-style=""
| bgcolor=#8df | [[#Virtual File System|Virtual File System]]
|-style=""
| bgcolor=#8ce |[[#Page_cache|page cache]]
|-style=""
| bgcolor=#7ac |[[#Logical file systems|logical file systems]]
|-style=""
| bgcolor=#69a |[[#Block_device_layer|block devices]]
|-style=""
| bgcolor=#689 |[[#Storage_drivers|storage drivers]]
|}
Storage functionality provides access to various storage devices via files and directories of files.
Most of the storage is persistent as flash memory, SSD and legacy hard disks.
Another kind of storage is temporary.
The ''file system'' provides an abstraction to organize the information into separate pieces of data (called ''files'') identified by a unique name.
Each file system type defines their own structures and logic rules used to manage these groups of information and their names.
Linux supports a plethora of different file system types, local and remote, native and from other operating systems.
To accommodate such disparity the kernel defines a common top layer, the ''virtual file system'' (VFS) layer.
[[File:The Linux Storage Stack Diagram.svg|Summary of the Linux kernel's storage stack|right|800x800px]]
== Files and directories ==
Four basic files access system calls:
: {{The Linux Kernel/man|2|open}} ↪ {{The Linux Kernel/id|do_sys_open}} - opens a file by name and returns a {{w|file descriptor}} (<big>fd</big>). Below functions operates on a fd.
: {{The Linux Kernel/man|2|close}} ↪ {{The Linux Kernel/id|close_fd}}
: {{The Linux Kernel/man|2|read}} ↪ {{The Linux Kernel/id|ksys_read}}
: {{The Linux Kernel/man|2|write}} ↪ {{The Linux Kernel/id|ksys_write}}
File in Linux and UNIX is not only physical file on persistent storage.
File interface is used to access pipes, sockets and other pseudo-files.
Other file operations:
: {{The Linux Kernel/man|2|lseek}} – reposition read/write file offset
: {{The Linux Kernel/man|2|dup}} – duplicate a file descriptor
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
: {{The Linux Kernel/man|2|truncate}}, {{The Linux Kernel/man|2|ftruncate}} – truncate a file
: {{The Linux Kernel/man|2|fallocate}} – preallocate file space
: {{The Linux Kernel/man|2|readahead}} ↪ {{The Linux Kernel/source|mm/readahead.c}} – prefetch file data into page cache
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dopen stress-ng --open],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dclose --close],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dfallocate --fallocate]
Directory operations:
: {{The Linux Kernel/man|2|mkdir}}, {{The Linux Kernel/man|2|rmdir}} – create/remove directory
: {{The Linux Kernel/man|2|getcwd}} ↪ {{The Linux Kernel/id|sys_getcwd}} – get current working directory
: {{The Linux Kernel/man|2|chdir}} ↪ {{The Linux Kernel/id|sys_chdir}} – change working directory
: {{The Linux Kernel/man|3|readdir}} ⇾ {{The Linux Kernel/man|2|getdents}}
: {{The Linux Kernel/man|7|path_resolution}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Ddentry stress-ng --dentry],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Ddir --dir]
Name operations:
: {{The Linux Kernel/man|2|rename}} – rename a file or directory
: {{The Linux Kernel/man|2|unlink}} – delete a name from the filesystem
: {{The Linux Kernel/man|2|readlink}}, {{The Linux Kernel/man|2|symlink}}, {{The Linux Kernel/man|2|link}}
⚙️ Files and directories internals
: {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/source|fs/open.c}} – open, close and related file operations
: {{The Linux Kernel/include|linux/namei.h}}, {{The Linux Kernel/source|fs/namei.c}} – pathname lookup and resolution
: {{The Linux Kernel/source|fs/read_write.c}} – read, write and lseek operations
: {{The Linux Kernel/include|linux/xattr.h}}, {{The Linux Kernel/source|fs/xattr.c}} – extended attributes
: {{The Linux Kernel/source|fs/notify}} – filesystem event notification
:: {{The Linux Kernel/man|2|inotify_init}}, {{The Linux Kernel/man|2|inotify_add_watch}}, {{The Linux Kernel/man|2|inotify_rm_watch}} – {{The Linux Kernel/man|7|inotify}}
:: {{The Linux Kernel/man|2|fanotify_init}}, {{The Linux Kernel/man|2|fanotify_mark}} – {{The Linux Kernel/man|7|fanotify}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dinotify stress-ng --inotify]
📚 Files and directories references
: [https://www.gnu.org/software/libc/manual/html_node/I_002fO-Overview.html Input/Output, The GNU C Library]
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
: {{w|Unix file types}}
=== File locks ===
File locks are mechanisms that allow processes to coordinate access to shared files.
These locks help prevent conflicts when multiple processes or threads attempt to access the same file simultaneously.
⚲ API
: {{The Linux Kernel/man|8|lslocks}} – list local system locks
: {{The Linux Kernel/man|3|lockf}} – apply, test or remove a POSIX lock on an open file
: {{The Linux Kernel/man|2|flock}} – apply or remove an advisory BSD lock on an open file
: {{The Linux Kernel/man|2|fcntl}} – manipulate file descriptor
:: {{The Linux Kernel/id|F_SETLK}} – advisory record lock
:: {{The Linux Kernel/id|F_OFD_SETLK}} – Open File Description Lock
:: {{The Linux Kernel/id|flock}} – lock parameters
: ⚠️ Avoid mixing flock and fcntl locks on the same file as they don’t interact with each other.
⚙️ Internals
: {{The Linux Kernel/include|linux/filelock.h}}
: {{The Linux Kernel/source|fs/locks.c}} – POSIX and flock file locking
: {{The Linux Kernel/include|trace/events/filelock.h}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dflock stress-ng --flock]
💾 ''Historical: [https://elixir.bootlin.com/linux/v5.14/K/ident/CONFIG_MANDATORY_FILE_LOCKING Mandatory locking] feature is no longer supported at all in Linux 5.15 and above because the implementation is unreliable.''
=== Asynchronous I/O ===
🚀 advanced features
'''AIO'''
: https://lwn.net/Kernel/Index/#Asynchronous_IO
: {{The Linux Kernel/man|2|io_submit}} {{The Linux Kernel/man|2|io_setup}} {{The Linux Kernel/man|2|io_cancel}} {{The Linux Kernel/man|2|io_destroy}} {{The Linux Kernel/man|2|io_getevents}}
: {{The Linux Kernel/include|uapi/linux/aio_abi.h}}
: {{The Linux Kernel/source|fs/aio.c}} – async I/O implementation
: {{The Linux Kernel/ltp|kernel|io/aio}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Daio stress-ng --aio]
'''{{w|io_uring}}'''
🌱 ''New since release 5.1 in May 2019''
: https://blogs.oracle.com/linux/an-introduction-to-the-io_uring-asynchronous-io-framework
: https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/
: {{The Linux Kernel/id|io_uring_enter}} {{The Linux Kernel/id|io_uring_setup}} {{The Linux Kernel/id|io_uring_register}}
: {{The Linux Kernel/include|linux/io_uring.h}}
: {{The Linux Kernel/include|uapi/linux/io_uring.h}}
: {{The Linux Kernel/source|io_uring}}
: https://lwn.net/Kernel/Index/#io_uring
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/810414/ The rapid growth of io_uring]
:: [https://lwn.net/Articles/815491/ Automatic buffer selection for io_uring]
:: [https://lwn.net/Articles/826053/ Operations restrictions for io_uring]
:: [https://lwn.net/Articles/779472/ io_uring, SCM_RIGHTS, and reference-count cycles]
:: [https://lwn.net/Articles/803070/ Redesigned workqueues for io_uring]
: {{The Linux Kernel/ltp|kernel/syscalls|io_uring}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dio%2During stress-ng --io-uring]
=== {{w|Asynchronous_I/O#Forms|Non-blocking I/O}} ===
Allow non-blocking access to multiple file descriptors.
'''Efficient event polling {{w|epoll}}'''
⚲ API:
: {{The Linux Kernel/include|uapi/linux/eventpoll.h}}
: {{The Linux Kernel/man|7|epoll}}
: {{The Linux Kernel/man|2|epoll_create}} ↪ {{The Linux Kernel/id|do_epoll_create}}
: {{The Linux Kernel/man|2|epoll_ctl}} ↪ {{The Linux Kernel/id|do_epoll_ctl}}
: {{The Linux Kernel/man|2|epoll_wait}} ↪ {{The Linux Kernel/id|do_epoll_wait}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/eventpoll.c}} – efficient event polling (epoll)
'''{{w|Select (Unix)|select}} and {{w|poll (Unix)|poll}}'''
💾 ''Historical: Select and poll system calls are derived from UNIX''
⚲ API:
: {{The Linux Kernel/man|2|poll}} ↪ {{The Linux Kernel/id|do_sys_poll}}
: {{The Linux Kernel/man|2|select}} ↪ {{The Linux Kernel/id|kern_select}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/select.c}} – select and poll implementation
=== Vectored I/O ===
🚀 advanced feature
{{w|Vectored I/O}}, also known as scatter/gather I/O, is a method of input and output by which a single procedure call sequentially reads data from multiple buffers and writes it to a single data stream, or reads data from a data stream and writes it to multiple buffers, as defined in a vector of buffers. Scatter/gather refers to the process of gathering data from, or scattering data into, the given set of buffers. Vectored I/O can operate synchronously or asynchronously. The main reasons for using vectored I/O are efficiency and convenience.
⚲ API:
: {{The Linux Kernel/include|uapi/linux/uio.h}}
: {{The Linux Kernel/include|linux/uio.h}}
: {{The Linux Kernel/id|iovec}}
: {{The Linux Kernel/man|2|readv}} ↪ {{The Linux Kernel/id|do_readv}}
: {{The Linux Kernel/man|2|writev}} ↪ {{The Linux Kernel/id|do_writev}}
⚙️ Internals:
: {{The Linux Kernel/id|iov_iter}}
: {{The Linux Kernel/id|do_readv}} ↯ call hierarchy:
:: {{The Linux Kernel/id|vfs_readv}}
::: {{The Linux Kernel/id|import_iovec}}
::: {{The Linux Kernel/id|ext4_file_read_iter}}
: {{The Linux Kernel/source|lib/iov_iter.c}} – I/O vector iterator operations
=== ... ===
📖 References
: [https://www.gnu.org/software/libc/manual/html_node/Scatter_002dGather.html Fast Scatter-Gather I/O, The GNU C Library]
: https://lwn.net/Kernel/Index/#Vectored_IO
: https://lwn.net/Kernel/Index/#Scattergather_chaining
📚 Further reading
: https://deepwiki.com/torvalds/linux/4-filesystems
== Virtual File System ==
The {{w|virtual file system}} (VFS) is an abstract layer on top of a concrete logical file system.
The purpose of a VFS is to allow client applications to access different types of logical file systems in a uniform way.
A VFS can, for example, be used to access local and [[../Networking#Network_storage|network storage]] devices transparently without the client application noticing the difference.
It can be used to bridge the differences in Windows, classic Mac OS/macOS and Unix filesystems, so that applications can access files on local file systems of those types without having to know what type of file system they are accessing.
A VFS specifies an interface (or a "contract") between the kernel and a logical file system.
Therefore, it is easy to add support for new file system types to the kernel simply by fulfilling the contract.
🔧 TODO: {{The Linux Kernel/id|vfsmount}}, {{The Linux Kernel/id|vfs_create}}, {{The Linux Kernel/id|vfs_read}}, {{The Linux Kernel/id|vfs_write}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/inode.c}} – inode allocation and management
: {{The Linux Kernel/include|linux/dcache.h}}, {{The Linux Kernel/source|fs/dcache.c}} – dentry cache, pathname-to-inode lookup
: {{The Linux Kernel/source|fs/super.c}} – superblock operations, filesystem mount/unmount
: {{The Linux Kernel/include|linux/file.h}}, {{The Linux Kernel/source|fs/file.c}} – file table, fd allocation
: {{The Linux Kernel/include|linux/mount.h}} – filesystem mount structures
: {{The Linux Kernel/include|linux/fs_context.h}} – filesystem mount context (replaces old mount API)
: {{The Linux Kernel/source|fs/readdir.c}} – directory listing (getdents)
📚 VFS References
: {{The Linux Kernel/doc|VFS|filesystems/#core-vfs-documentation}}
: [https://tldp.org/LDP/lki/lki-3.html VFS in Linux Kernel 2.4 Internals]
== Logical file systems ==
A {{w|file system}} (or ''filesystem'') is used to control how data is stored and retrieved.
Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins.
By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified.
Each group of data is called a "file".
The structure and logic rules used to manage the groups of information and their names is called a "file system".
There are many different kinds of file systems.
Each one has different structure and logic, properties of speed, flexibility, security, size and more.
Some file systems have been designed to be used for specific applications.
For example, the ISO 9660 file system is designed specifically for optical discs.
File systems can be used on many different kinds of storage devices.
Each storage device uses a different kind of media.
The most common storage device in use today is a {{w|SSD}}.
Other media that was used are hard disk, magnetic tape and optical disc.
In some cases, the computer's main memory (RAM) is used to create a temporary file system for short-term use.
Raw storage is called a block device.
Linux supports many different file systems, but common choices for the system disk on a block device include the ext* family (such as {{w|ext2}}, {{w|ext3}} and {{w|ext4}}), {{w|XFS}}, {{w|ReiserFS}} and {{w|btrfs}}.
For raw Flash without a {{w|flash translation layer}} (FTL) or {{w|Memory Technology Device}} (MTD), there is {{w|UBIFS}}, {{w|JFFS2}}, and {{w|YAFFS}}, among others. {{w|SquashFS}} is a common compressed read-only file system.
NFS and other network FS are described further in paragraph [[../Networking#Network_storage|Network storage]].
⚲ Shell interfaces:
: cat /proc/filesystems
: ls /sys/fs/
: {{The Linux Kernel/man|8|mount}}
: {{The Linux Kernel/man|8|umount}}
: {{The Linux Kernel/man|8|findmnt}}
: {{The Linux Kernel/man|1|mountpoint}}
: {{The Linux Kernel/man|1|df}}
Infrastructure ⚲ API function {{The Linux Kernel/id|register_filesystem}} registers structs {{The Linux Kernel/id|file_system_type}} and stores them in linked list ⚙️ {{The Linux Kernel/id|file_systems}}.
Function {{The Linux Kernel/id|ext4_init_fs}} registers {{The Linux Kernel/id|ext4_fs_type}}.
Operation of ''file system opening'' is called mounting: {{The Linux Kernel/id|ext4_get_tree}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/namespace.c}} – mount and namespace operations
:: {{The Linux Kernel/man|2|mount}}
::: {{The Linux Kernel/id|do_mount}}
: {{The Linux Kernel/include|linux/buffer_head.h}}
:: {{The Linux Kernel/id|super_block}}
:: {{The Linux Kernel/id|sb_bread}}
: {{The Linux Kernel/source|fs}} – filesystem implementations
:: {{The Linux Kernel/source|fs/ext4/ext4.h}} – ext4 on-disk format and internal structures
::: {{The Linux Kernel/id|ext4_sb_bread}}
Other notable filesystems:
: {{w|FUSE (filesystem)|FUSE}} – {{The Linux Kernel/source|fs/fuse}} – filesystem in userspace
: {{w|OverlayFS}} – {{The Linux Kernel/source|fs/overlayfs}} – union mount filesystem, used by containers
: {{w|Btrfs}} – {{The Linux Kernel/source|fs/btrfs}}
: {{w|XFS}} – {{The Linux Kernel/source|fs/xfs}}
📚 References:
: {{The Linux Kernel/doc|filesystems|filesystems/#filesystems}}
== Page cache ==
A page cache or disk cache is a transparent cache for the memory pages originating from a secondary storage device such as a hard disk drive.
The operating system keeps a page cache in otherwise unused portions of the main memory, resulting in quicker access to the contents of cached pages and overall performance improvements.
The page cache is implemented by the kernel, and is mostly transparent to applications.
Usually, all physical memory not directly allocated to applications is used by the operating system for the page cache.
Since the memory would otherwise be idle and is easily reclaimed when applications request it, there is generally no associated performance penalty and the operating system might even report such memory as "free" or "available".
The page cache also aids in writing to a disk.
Pages in the main memory that have been modified during writing data to disk are marked as "dirty" and have to be flushed to disk before they can be freed.
When a file write occurs, the page backing the particular block is looked up.
If it is already found in the page cache, the write is done to that page in the main memory.
Otherwise, when the write perfectly falls on page size boundaries, the page is not even read from disk, but allocated and immediately marked dirty.
Otherwise, the page(s) are fetched from disk and requested modifications are done.
Not all cached pages can be written to as program code is often mapped as read-only or copy-on-write; in the latter case, modifications to code will only be visible to the process itself and will not be written to disk.
⚲ API:
: {{The Linux Kernel/man|2|fsync}} ↪ {{The Linux Kernel/id|do_fsync}}
: {{The Linux Kernel/man|2|sync_file_range}} ↪ {{The Linux Kernel/id|ksys_sync_file_range}}
: {{The Linux Kernel/man|2|syncfs}} ↪ {{The Linux Kernel/id|sync_filesystem}}
: {{The Linux Kernel/man|2|sync}} ↪ {{The Linux Kernel/id|ksys_sync}} – flush all filesystem caches to disk
⚙️ Internals:
: {{The Linux Kernel/include|linux/pagemap.h}}, {{The Linux Kernel/source|mm/filemap.c}} – page cache core, read/write/mmap paths
: {{The Linux Kernel/include|linux/buffer_head.h}}, {{The Linux Kernel/source|fs/buffer.c}} – buffer heads, block-level page cache interface
: {{The Linux Kernel/include|linux/writeback.h}}, {{The Linux Kernel/source|mm/page-writeback.c}} – dirty page writeback throttling
: {{The Linux Kernel/id|address_space}} – per-inode page cache, defined in {{The Linux Kernel/include|linux/fs.h}}
: {{The Linux Kernel/include|linux/backing-dev.h}} – backing device info, writeback bandwidth
: {{The Linux Kernel/id|wb_workfn}}, {{The Linux Kernel/id|do_writepages}}
📚 References
: {{w|Page cache}}
More
: [https://lwn.net/Articles/717953/ The future of DAX ] - direct access bypassing the cache
: [https://tldp.org/LDP/lki/lki-4.html Linux Page Cache in Linux Kernel 2.4 Internals]
== Zero-copy ==
🚀 advanced features
Writing data to storage and reading are very resource consuming operations.
Copying memory is time and CPU consuming operation too.
Set of methods to avoid copying operations is called {{w|zero-copy}}.
The goal of zero-copy methods is a fast and efficient data transfer within the system.
The first and simplest method is {{w|Pipeline (Unix)|Pipeline}}, invoked by operator "|" in shells.
Instead of writing data into temporary file and reading, the data is passed efficiently via a pipe bypassing a storage.
The second method is {{w|Tee_(command)|tee}}.
⚲ Syscalls:
: {{The Linux Kernel/man|2|pipe2}}
: {{The Linux Kernel/man|2|tee}}, {{The Linux Kernel/man|1|tee}}
: {{The Linux Kernel/man|2|sendfile}}
: {{The Linux Kernel/man|2|copy_file_range}}
: {{The Linux Kernel/man|2|splice}}
: {{The Linux Kernel/man|2|vmsplice}}
⚲ API and ⚙️ Internals:
: '''{{The Linux Kernel/man|2|pipe2}}''' ↪ {{The Linux Kernel/id|do_pipe2}} - creates pipe
:: uses {{The Linux Kernel/id|pipe_fs_type}}, {{The Linux Kernel/id|pipefifo_fops}}
: '''{{The Linux Kernel/man|2|tee}}''' ↪ {{The Linux Kernel/id|do_tee}} - duplicates pipe content
:: calls {{The Linux Kernel/id|link_pipe}}
: '''{{The Linux Kernel/man|2|sendfile}}''' ↪ {{The Linux Kernel/id|do_sendfile}} - transfers data between file descriptors, the output can be a socket. Used in [[../Networking#Network_storage|network storage]] and servers.
:: Calls: {{The Linux Kernel/id|do_splice_direct}}, {{The Linux Kernel/id|splice_direct_to_actor}}
: '''{{The Linux Kernel/man|2|copy_file_range}}''' ↪ {{The Linux Kernel/id|vfs_copy_file_range}} - transfers data between files
:: calls custom {{The Linux Kernel/id|remap_file_range}} like {{The Linux Kernel/id|nfs42_remap_file_range}}
:: or custom {{The Linux Kernel/id|copy_file_range}} like {{The Linux Kernel/id|fuse_copy_file_range}}
:: or {{The Linux Kernel/id|do_splice_direct}}
: '''{{The Linux Kernel/man|2|splice}}''' ↪ {{The Linux Kernel/id|do_splice}} - splices data to/from a pipe.
:: There are three cases regarding which end being a pipe:
:# {{The Linux Kernel/id|do_splice_from}} - pipe → file
:#: Calls custom {{The Linux Kernel/id|splice_write}} or {{The Linux Kernel/id|iter_file_splice_write}}
:# {{The Linux Kernel/id|do_splice_read}} - file → pipe
:#: Calls custom {{The Linux Kernel/id|splice_read}} or {{The Linux Kernel/id|copy_splice_read}}
:# {{The Linux Kernel/id|splice_pipe_to_pipe}} - both are pipes
: '''{{The Linux Kernel/man|2|vmsplice}}''' ↪
:: {{The Linux Kernel/id|vmsplice_to_pipe}} – splices user pages to a pipe
:: {{The Linux Kernel/id|vmsplice_to_user}} – splices a pipe to user pages
⚲ API
: {{The Linux Kernel/include|linux/splice.h}}
⚙️ Internals:
: {{The Linux Kernel/source|fs/pipe.c}} – pipe and FIFO implementation
: {{The Linux Kernel/source|fs/splice.c}} – splice data transfer between file descriptors
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dsplice stress-ng --splice],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dsendfile --sendfile]
🔧 TODO:
{{The Linux Kernel/id|zerocopy_sg_from_iter}} builds a zerocopy skb datagram from an iov_iter. Used in {{The Linux Kernel/id|tap_get_user}} and {{The Linux Kernel/id|tun_get_user}}.
{{The Linux Kernel/id|skb_zerocopy}}
{{The Linux Kernel/id|skb_zerocopy_iter_dgram}}
📚 References
: {{The Linux Kernel/man|7|pipe}}
: {{The Linux Kernel/man|7|fifo}}
: {{The Linux Kernel/doc|splice and pipes|filesystems/splice.html}}
:: {{The Linux Kernel/doc|Pipes API|filesystems/splice.html#pipes-api}}
: {{w|splice (system call)}}
: LTP: {{The Linux Kernel/ltp|kernel/syscalls|pipe}}, {{The Linux Kernel/ltp|kernel/syscalls|pipe2}}, {{The Linux Kernel/ltp|kernel/syscalls|tee}}, {{The Linux Kernel/ltp|kernel/syscalls|sendfile}}, {{The Linux Kernel/ltp|kernel/syscalls|copy_file_range}}, {{The Linux Kernel/ltp|kernel/syscalls|splice}}, {{The Linux Kernel/ltp|kernel/syscalls|vmsplice}}
== Block device layer ==
The block device layer in Linux provides an abstraction for accessing storage devices,
such as SSDs and USB drives, by presenting them as a series of fixed-size blocks.
It sits between the hardware and the file system,
allowing applications and file systems to perform read and write operations efficiently
without needing to know the specifics of the underlying hardware.
Key components include block drivers, the I/O scheduler,
and buffer management, which work together to handle requests,
optimize access patterns, and ensure data integrity.
This layer supports essential features like caching, partition management,
and queueing mechanisms to balance performance and reliability.
⚲ Interfaces:
: {{The Linux Kernel/include|linux/blk_types.h}}
:: {{The Linux Kernel/id|bio}} – main unit of I/O for the block layer and lower layers
:: {{The Linux Kernel/id|req_op}} – operations common to the bio and request structures
: {{The Linux Kernel/include|linux/bio.h}}
: {{The Linux Kernel/id|block_device}}
:: {{The Linux Kernel/id|block_size}}
: {{The Linux Kernel/id|blk_alloc_disk}} allocates {{The Linux Kernel/id|gendisk}}
: {{The Linux Kernel/id|add_disk}}
:: {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|block_device_operations}}
: {{The Linux Kernel/include|linux/blkdev.h}}
:: {{The Linux Kernel/id|gendisk}}
::: {{The Linux Kernel/id|dev_to_disk}}, {{The Linux Kernel/id|disk_to_dev}}
:: {{The Linux Kernel/id|block_class}} – block devices Driver Model class
:: {{The Linux Kernel/id|register_blkdev}}
:: {{The Linux Kernel/id|request}}
:: {{The Linux Kernel/id|request_queue}}
⚙️ Internals.
: {{The Linux Kernel/source|block}} – block layer core
: {{The Linux Kernel/source|fs/iomap}} – modern filesystem I/O mapping layer (used by xfs, ext4, btrfs)
: {{The Linux Kernel/id|block_class}}
👁 Examples:
: {{The Linux Kernel/source|drivers/block/brd.c}} - small RAM backed block device driver
: {{The Linux Kernel/source|drivers/block/null_blk}} – null block test device
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dhdd stress-ng --hdd],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Diomix --iomix],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dseek --seek]
=== Device mapper ===
The ''device mapper'' is a framework provided by the kernel for mapping physical block devices onto higher-level "virtual block devices".
It forms the foundation of LVM2, software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device.
Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption.
User space applications that need to create new mapped devices talk to the device mapper via the <code>libdevmapper.so</code> shared library, which in turn issues ioctls to the <code>/dev/mapper/control</code> device node.
Functions provided by the device mapper include linear, striped and error ''mappings,'' as well as crypt and multipath ''targets.''
For example, two disks may be concatenated into one logical volume with a pair of ''linear'' mappings, one for each disk.
As another example, ''crypt'' target encrypts the data passing through the specified device, by using the Linux kernel's Crypto API.
The following mapping targets are available:
: ''cache'' - allows the creation of hybrid volumes, by using solid-state drives (SSDs) as caches for hard disk drives (HDDs)
: ''crypt'' - provides data encryption, by using the Linux kernel's Crypto API
: ''delay'' - delays reads and/or writes to different devices (used for testing)
: ''era'' - behaves in a way similar to the linear target, while it keeps track of blocks that were written to within a user-defined period of time
: ''error'' - simulates I/O errors for all mapped blocks (used for testing)
: ''flakey'' - simulates periodic unreliable behaviour (used for testing)
: ''linear'' - maps a continuous range of blocks onto another block device
: ''mirror'' - maps a mirrored logical device, while providing data redundancy
: ''multipath'' - supports the mapping of multipathed devices, through usage of their path groups
: ''raid'' - offers an interface to the Linux kernel's software RAID driver (md)
: ''snapshot'' and ''snapshot-origin'' - used for creation of LVM snapshots, as part of the underlining copy-on-write scheme
: ''striped'' - strips the data across physical devices, with the number of stripes and the striping chunk size as parameters
: ''zero'' - an equivalent of <code>/dev/zero</code>, all reads return blocks of zeros, and writes are discarded
📚 References
: {{w|Device mapper}}
: {{The Linux Kernel/doc|Device mapper|admin-guide/device-mapper}}
: {{The Linux Kernel/include|linux/device-mapper.h}}
: {{The Linux Kernel/source|drivers/md}} – device mapper and software RAID
: https://lwn.net/Kernel/Index/#Device_mapper
=== Multi-Queue Block IO Queueing ===
The blk-mq API enhances IO performance
by leveraging multiple queues for parallel processing,
addressing bottlenecks from traditional single-queue designs.
It uses software queues for scheduling,
merging, and reordering requests,
and hardware queues to interface directly with devices.
If hardware resources are limited,
requests are temporarily queued for later dispatch.
⚲ Interfaces:
: /sys/devices/.../mq/
: {{The Linux Kernel/include|linux/blk-mq.h}}
:: Structures:
::: {{The Linux Kernel/id|blk_mq_hw_ctx}} – hardware dispatch queue context
::: {{The Linux Kernel/id|blk_mq_tag_set}} – shared between request queues
:::: {{The Linux Kernel/id|blk_mq_ops}}
:::: {{The Linux Kernel/id|blk_mq_tags}}
:::: {{The Linux Kernel/id|blk_mq_queue_map}} – map software queues to hardware queues
::: {{The Linux Kernel/id|request}}
👁️ Example
: {{The Linux Kernel/source|drivers/block/null_blk}} – multi-queue aware block test driver
⚙️ Internals
: /sys/kernel/debug/block/*/hctx*
: {{The Linux Kernel/source|block/blk-mq.h}} – blk-mq internal definitions
:: {{The Linux Kernel/id|blk_mq_ctx}} – software staging queue context
: {{The Linux Kernel/source|block/blk-mq.c}} – block multi-queue core code
: {{The Linux Kernel/source|block/blk-mq-tag.c}} – tag allocation using scalable bitmaps
: ...
📖 References
: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
=== I/O scheduler ===
I/O scheduling (or disk scheduling) is the method chosen by the kernel to decide in which order the block I/O operations will be submitted to the storage volumes.
I/O scheduling usually has to work with hard disk drives that have long access times for requests placed far away from the current position of the disk head (this operation is called a seek).
To minimize the effect this has on system performance, most I/O schedulers implement a variant of the elevator algorithm that reorders the incoming randomly ordered requests so the associated data would be accessed with minimal arm/head movement.
The particular I/O scheduler used with certain block device can be switched at run time by modifying the corresponding <code>/sys/block/<block_device>/queue/scheduler</code> file in the sysfs filesystem.
Some I/O schedulers also have tunable parameters that can be set through files in <code>/sys/block/<block_device>/queue/iosched/</code>.
⚲ Interfaces:
: {{The Linux Kernel/man|1|ionice}} – set or get process I/O scheduling class and priority
:: {{The Linux Kernel/man|2|ioprio_get}}, ioprio_set
: {{The Linux Kernel/include|linux/elevator.h}}
: Function {{The Linux Kernel/id|elv_register}} registers struct {{The Linux Kernel/id|elevator_type}}.
: {{The Linux Kernel/id|elevator_queue}}
⚙️ Internals:
: {{The Linux Kernel/source|block/ioprio.c}} – I/O priority system call
: {{The Linux Kernel/source|block/elevator.c}} – I/O scheduler framework
: {{The Linux Kernel/source|block/Kconfig.iosched}} – I/O scheduler Kconfig options
: {{The Linux Kernel/source|block/bfq-iosched.c}} – Budget Fair Queueing scheduler
: {{The Linux Kernel/source|block/kyber-iosched.c}} – Kyber multiqueue scheduler
: {{The Linux Kernel/source|block/mq-deadline.c}} – deadline multiqueue scheduler
: {{The Linux Kernel/include|trace/events/block.h}}
📖 References:
: {{w|I/O scheduling}}
: {{w|Elevator algorithm}}
: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
: {{The Linux Kernel/doc|Deadline IO scheduler tunables|deadline-iosched.html}}
: https://www.cloudbees.com/blog/linux-io-scheduler-tuning/
: https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers
=== ... ===
📖 References
: {{The Linux Kernel/doc|Block devices|block}}
:: {{The Linux Kernel/doc|Switching Scheduler|block/switching-sched.html}}
::: {{The Linux Kernel/doc|BFQ - Budget Fair Queueing|block/bfq-iosched.html}}
::: {{The Linux Kernel/doc|Deadline IO scheduler tunables|block/deadline-iosched.html}}
::: {{The Linux Kernel/doc|Kyber I/O scheduler tunables|block/kyber-iosched.html}}
:: {{The Linux Kernel/doc|Multi-Queue Block IO Queueing Mechanism (blk-mq)|block/blk-mq.html}}
📚 Further reading
: /sys/kernel/debug/block/*/
: https://lwn.net/Kernel/Index/#Block_layer
: [https://lore.kernel.org/linux-block/ block devices ML]
: [http://lwn.net/images/pdf/LDD3/ch16.pdf LDD3:Block Drivers]
: [http://www.xml.com/ldd/chapter/book/ch12.html LDD1:Loading Block Drivers]
: [https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch14.html ULK3 Chapter 14. Block Device Drivers]
: [https://sg.danny.cz/sg/The Linux SCSI Generic (sg) Driver]
:: [https://sg.danny.cz/sg/scsi_debug.html Scsi_debug adapter driver for Linux]
:: https://github.com/doug-gilbert/sg3_utils
== {{w|Computer data storage|Storage}} drivers ==
🔧 TODO
⚙️ Internals
: {{The Linux Kernel/source|drivers/nvmem}} – {{w|Non-volatile memory}}
: {{The Linux Kernel/source|drivers/sdio}} – {{w|Secure Digital#SDIO cards|Secure Digital Input Output}}
: {{The Linux Kernel/source|drivers/scsi}} – {{w|SCSI|Small Computer System Interface}}
: {{The Linux Kernel/source|drivers/virtio}} – virtio guest drivers
: {{The Linux Kernel/source|drivers/mtd}} – {{w|Memory Technology Device}} for 🤖 embedded devices
=== NVMe ===
{{w|NVM Express}} drivers provide accesses a computer's {{w|non-volatile storage}}.
Local storage is attached via {{w|PCIe|PCI Express}} bus.
PCI NVMe device driver entry point is {{The Linux Kernel/id|nvme_init}}.
Remote storage driver is called target and local {{w|Proxy_pattern|proxy}} driver is called host. {{w|Switched fabric|Fabrics}} connect remote targets with local host.
A fabric can be based on {{w|Remote direct memory access|RDMA}}, {{w|Transmission Control Protocol|TCP}} or {{w|Fibre Channel}} protocols.
⚲ API:
: [https://github.com/linux-nvme/nvme-cli nvme-cli]
: {{The Linux Kernel/include|uapi/linux/nvme_ioctl.h}}
: {{The Linux Kernel/include|linux/nvme.h}}
⚙️ '''Internals:'''
: {{The Linux Kernel/source|drivers/nvme}} – NVMe drivers
'''Host''' {{The Linux Kernel/source|drivers/nvme/host}}:
⚲ Interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/nvme.h}} – NVMe host common definitions
:: {{The Linux Kernel/id|nvme_init_ctrl}} initializes a NVMe controller structures {{The Linux Kernel/id|nvme_ctrl}} with operations {{The Linux Kernel/id|nvme_ctrl_ops}}
::: a subroutine of {{The Linux Kernel/id|nvme_scan_work}} adds a new disk with {{The Linux Kernel/id|device_add_disk}}
: {{The Linux Kernel/id|nvme_init}} - local PCI nvme module init
:: {{The Linux Kernel/id|nvme_probe}}
::: {{The Linux Kernel/id|nvme_init_ctrl}} ...
::: {{The Linux Kernel/id|nvme_pci_ctrl_ops}}
: {{The Linux Kernel/id|nvme_core_init}} - module init
'''Fabrics'''
⚲ interfaces:
: {{The Linux Kernel/source|drivers/nvme/host/fabrics.h}} – NVMe over Fabrics host common definitions
:: {{The Linux Kernel/id|nvmf_register_transport}} registers {{The Linux Kernel/id|nvmf_transport_ops}}
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
⚙️ internals:
: {{The Linux Kernel/id|nvmf_init}} - fabrics module init
:: {{The Linux Kernel/id|nvmf_misc}}
::: {{The Linux Kernel/id|nvmf_dev_fops}}
:::: {{The Linux Kernel/id|nvmf_dev_write}}
::::: {{The Linux Kernel/id|nvmf_create_ctrl}} binds {{The Linux Kernel/id|nvmf_transport_ops}}
'''Target''' {{The Linux Kernel/source|drivers/nvme/target}}:
⚲ Interfaces: {{The Linux Kernel/source|drivers/nvme/target/nvmet.h}}
: {{The Linux Kernel/id|nvmet_register_transport}} registers {{The Linux Kernel/id|nvmet_fabrics_ops}}
: {{The Linux Kernel/id|nvmet_init}} - module init
: {{The Linux Kernel/id|fcloop_init}} - loopback test module init which can be useful to test NVMe-FC transport interfaces.
{| class="wikitable"
|-
!
! colspan="3" |NVMe over {{w|Switched fabric|Fabrics}}
|-
!<div style='text-align:left'>Layers</div>
!{{w|Transmission Control Protocol|TCP}}
![[../Networking#RDMA|RDMA]]
!{{w|Fibre Channel}}
|-
!<div style='text-align:left'>Host modules</div>
|{{The Linux Kernel/id|nvme_tcp_init_module}}
|{{The Linux Kernel/id|nvme_rdma_init_module}}
|{{The Linux Kernel/id|nvme_fc_init_module}}
|-
!<div style='text-align:left'>Fabrics protocols</div>
|{{The Linux Kernel/include|linux/nvme-tcp.h}}
|{{The Linux Kernel/include|linux/nvme-rdma.h}}
|{{The Linux Kernel/include|linux/nvme-fc.h}}
{{The Linux Kernel/include|linux/nvme-fc-driver.h}}
|-
!<div style='text-align:left'>Target modules</div>
|{{The Linux Kernel/id|nvmet_tcp_init}}
|{{The Linux Kernel/id|nvmet_rdma_init}}
|{{The Linux Kernel/id|nvmet_fc_init_module}}
|}
👁 Example: {{The Linux Kernel/id|nvme_loop_init_module}} nvme loopback
: {{The Linux Kernel/id|nvme_loop_transport}} - fabrics operations
:: {{The Linux Kernel/id|nvme_loop_create_ctrl}}
::: {{The Linux Kernel/id|nvme_loop_create_io_queues}}
: {{The Linux Kernel/id|nvme_loop_ops}} - target operation
:: {{The Linux Kernel/id|nvme_loop_add_port}}
:: {{The Linux Kernel/id|nvme_loop_queue_response}}
== ... ==
🚀 Advanced
: {{The Linux Kernel/man|1|pidstat}} – reports task statistics
: /proc/self/io – I/O statistics for the process (see {{The Linux Kernel/man|5|proc}})
💾 Historical storage drivers
: {{The Linux Kernel/source|drivers/ata}} - {{w|Parallel ATA}}
📖 Further reading about storage
: [https://github.com/iovisor/bcc/blob/master/README.md#storage-and-filesystems-tools bcc/ebpf storage and filesystems tools]
{{BookCat}}
cz2m4n4waa1u66smdmnigvetgfpk44c
The Linux Kernel/Networking
0
226986
4641523
4640300
2026-06-28T15:27:25Z
Conan
3188
Networking: ip.h, ipv6.h, netlink.h, rtnetlink.h, x_tables.h header references
4641523
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Network functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#dff" |networking
|-
| bgcolor="#bff" |[[#Sockets|sockets access]]
|-
| bgcolor="#adf" |[[#Address_families|address families: inet, unix, ...]]
|-
| bgcolor="#9cd" |[[#Network_storage|network storage]]
|-
| bgcolor="#8bb" |[[#Protocols|protocols]]
|-
| bgcolor="#7a9" |[[#Network_device_interfaces|network interfaces]]
|-
| bgcolor="#798" |[[#Network_drivers|network drivers]]
|}
Linux kernel network functionality spans from sockets interface through protocols to network cards.
⚲ Shell interfaces:
: {{The Linux Kernel/man|8|netstat}} prints network connections, routing tables, interface statistics and other details
: {{The Linux Kernel/man|8|ip}} shows and configures routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|ss}} - socket statistics utility
== Sockets ==
⚲ API:
[https://man7.org/linux/man-pages/man0/sys_socket.h.0p.html sys/socket.h – main user mode sockets header]
Basic common and client side interface:
: {{The Linux Kernel/man|2|socket}} ↪ {{The Linux Kernel/id|__sys_socket}} creates an endpoint for communication
: struct {{The Linux Kernel/id|sockaddr}} - abstract socket address
: {{The Linux Kernel/man|2|connect}} ↪ {{The Linux Kernel/id|__sys_connect}};
: {{The Linux Kernel/man|2|shutdown}} shuts down part of a full-duplex connection
: {{The Linux Kernel/man|2|send}} ↪ {{The Linux Kernel/id|__sys_sendto}} sends a message on a socket
: {{The Linux Kernel/man|2|recv}} ↪ {{The Linux Kernel/id|__sys_recvfrom}}, {{The Linux Kernel/id|__sys_recvmsg}} receives a message from a socket
Additional server side interface:
: {{The Linux Kernel/man|2|bind}} ↪ {{The Linux Kernel/id|__sys_bind}} - binds a sockaddr to a socket
: {{The Linux Kernel/man|2|listen}} ↪ {{The Linux Kernel/id|__sys_listen}} - listens for connections on a socket
: {{The Linux Kernel/man|2|accept}} ↪ {{The Linux Kernel/id|__sys_accept4}} - accepts a connection on a socket
⚙️ Internals
: struct '''{{The Linux Kernel/id|socket}}''' @ {{The Linux Kernel/include|linux/net.h}} contains
:: struct {{The Linux Kernel/id|proto_ops}} - abstract protocols interface
:: struct {{The Linux Kernel/id|sock}} - network layer representation of sockets {{The Linux Kernel/include|net/sock.h}}
: '''{{The Linux Kernel/id|__sys_socket}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|sock_create}}
::: {{The Linux Kernel/id|__sock_create}}
:::: {{The Linux Kernel/id|security_socket_create}}
:::: {{The Linux Kernel/id|sock_alloc}}
::::: {{The Linux Kernel/id|net_proto_family}}->create.
:::::: for example {{The Linux Kernel/id|inet_create}}. See [[#Address_families|Address families]] for other options.
: '''{{The Linux Kernel/id|__sys_connect}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|move_addr_to_kernel}}
::: {{The Linux Kernel/id|audit_sockaddr}}
::: {{The Linux Kernel/id|__sys_connect_file}}
:::: {{The Linux Kernel/id|sock_from_file}}
:::: {{The Linux Kernel/id|security_socket_connect}}
:::: {{The Linux Kernel/id|proto_ops}}->connect.
::::: for example {{The Linux Kernel/id|inet_stream_connect}}. See [[#Protocols|Protocols]] for other options.
: {{The Linux Kernel/source|net/socket.c}} – socket system calls implementation
📚 References
: {{The Linux Kernel/man|7|socket}}
: {{The Linux Kernel/include|linux/socket.h}}
: {{w|Berkeley sockets}}
== Network storage ==
🚀 advanced topic
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|sendfile}} ↪ {{The Linux Kernel/id|do_sendfile}}.
See also [[../Storage#Zero-copy|Zero-copy between file descriptors]]
:{{w|Application layer|Application layer}}: {{w|Network File System}}
: {{The Linux Kernel/doc|NFS|filesystems/nfs}}
:: {{The Linux Kernel/id|init_nfs_fs}}, {{The Linux Kernel/id|nfs4_fs_type}}, {{The Linux Kernel/id|nfs_fs_type}},
:: {{The Linux Kernel/id|init_nfsd}}, {{The Linux Kernel/id|nfsd_fs_type}}
: {{The Linux Kernel/doc|CIFS|admin-guide/cifs}}
:: {{The Linux Kernel/id|init_cifs}}
:: {{The Linux Kernel/id|cifs_fs_type}}, {{The Linux Kernel/id|smb3_fs_type}} {{The Linux Kernel/id|cifs_smb3_do_mount}}
: {{The Linux Kernel/doc|target and iSCSI Interfaces Guide|driver-api/target.html}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/4.3-network-filesystems-(cifssmb)
== Transport and Network ==
=== Names ===
⚲ API: {{The Linux Kernel/man|2|uname}}, {{The Linux Kernel/man|2|sethostname}}, {{The Linux Kernel/man|2|gethostname}}, {{The Linux Kernel/man|2|setdomainname}} {{The Linux Kernel/man|2|getdomainname}}
: ↪ {{The Linux Kernel/id|utsname}}
⚙️ Details
: {{The Linux Kernel/id|utsname}} returns writable pointer to {{The Linux Kernel/id|new_utsname}} from {{The Linux Kernel/id|uts_namespace}} from {{The Linux Kernel/id|nsproxy}} from {{The Linux Kernel/id|current}} {{The Linux Kernel/id|task_struct}}.
: {{The Linux Kernel/id|CLONE_NEWUTS}}, {{The Linux Kernel/id|setns}}
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace management
📚 References:
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
=== Address families ===
⚲ API
: {{The Linux Kernel/man|2|getsockname}}
: {{The Linux Kernel/man|2|getpeername}}
: Address Family (AF) <big>domain</big> defines address format and address length <big>socklen_t</big>.
: {{The Linux Kernel/man|3|inet_ntop}}, {{The Linux Kernel/man|3|inet_pton}} (derive socklen_t from AF)
Common AF: {{The Linux Kernel/id|AF_UNIX}}, {{The Linux Kernel/id|AF_INET}}, {{The Linux Kernel/id|AF_NETLINK}}.
''PF - Protocol Family index ({{The Linux Kernel/id|PF_MAX}}) actually is the same as Address Family index (AF).''
⚙️ Internals of some AF
: {{The Linux Kernel/man|7|unix}} ↪ {{The Linux Kernel/id|unix_family_ops}} - sockets for local IPC, {{The Linux Kernel/source|net/unix}}
:: {{The Linux Kernel/id|unix_create}}
: {{The Linux Kernel/man|7|ip}} ↪ {{The Linux Kernel/id|inet_family_ops}} - IPv4
:: {{The Linux Kernel/id|inet_create}}
: {{The Linux Kernel/man|7|netlink}} ↪ {{The Linux Kernel/id|netlink_family_ops}} - communication between kernel and user space, {{The Linux Kernel/source|net/netlink}}
:: {{The Linux Kernel/include|linux/netlink.h}}, {{The Linux Kernel/include|linux/rtnetlink.h}} – netlink and routing netlink messages
:: {{The Linux Kernel/id|netlink_create}}
: {{The Linux Kernel/man|7|vsock}} ↪ {{The Linux Kernel/id|vsock_family_ops}} - communication between VM and hypervisor
:: {{The Linux Kernel/id|vsock_create}}
: {{The Linux Kernel/man|7|packet}} ↪ {{The Linux Kernel/id|packet_family_ops}} - device level interface
:: {{The Linux Kernel/id|packet_create}}
: {{The Linux Kernel/id|bt_sock_family_ops}} - Bluetooth
:: {{The Linux Kernel/id|bt_sock_create}}
There are more than 40 AFs in total (see {{The Linux Kernel/id|AF_MAX}})
⚙️ Internals
: {{The Linux Kernel/id|sock_register}} - registers {{The Linux Kernel/id|net_proto_family}}. See references to this identifiers to find more than 30 protocol families.
: {{The Linux Kernel/id|__sock_create}}
📚 Further reading
: {{The Linux Kernel/man|8|ip-address}} – protocol address management
: {{w|Internet layer}}
: {{The Linux Kernel/man|7|address_families}}
=== Protocols ===
Each Protocol Family (PF, ''same index as Address Family AF'') consists of several protocol implementations.
Directory /proc/net contains various files and subdirectories containing information about the networking layer.
File /proc/net/protocols lists available and used protocols.
In each PF protocols are classified to different types {{The Linux Kernel/id|sock_type}}, for example stream, datagram and raw socket.
TCP is type of stream, UDP is type of datagram, raw and ping are type of raw.
: {{The Linux Kernel/id|proto_register}} - registers struct {{The Linux Kernel/id|proto}} - protocol implementations:
: In {{The Linux Kernel/id|inet_init}} initcall, {{The Linux Kernel/id|inetsw_array}}, {{The Linux Kernel/id|proto_ops}} and {{The Linux Kernel/id|proto}} :
:: {{The Linux Kernel/id|inet_stream_ops}} & {{The Linux Kernel/id|tcp_prot}} {{The Linux Kernel/id|tcp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_dgram_ops}} & {{The Linux Kernel/id|udp_prot}} {{The Linux Kernel/id|udp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_sockraw_ops}}
::: {{The Linux Kernel/id|raw_prot}} {{The Linux Kernel/id|raw_sendmsg}} ...
::: {{The Linux Kernel/id|ping_prot}} {{The Linux Kernel/id|ping_v4_sendmsg}} ...
: In {{The Linux Kernel/id|af_unix_init}} initcall:
:: {{The Linux Kernel/id|unix_family_ops}}
::: {{The Linux Kernel/id|unix_create}}
:::: {{The Linux Kernel/id|unix_stream_ops}} {{The Linux Kernel/id|unix_stream_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_dgram_ops}} {{The Linux Kernel/id|unix_dgram_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_seqpacket_ops}} {{The Linux Kernel/id|unix_seqpacket_sendmsg}} ...
⚙️ Internals:
: {{The Linux Kernel/include|linux/in.h}}, {{The Linux Kernel/include|linux/ip.h}} – IPv4 address, protocol and header definitions
: {{The Linux Kernel/source|net/ipv4}} – IPv4 protocol stack
: {{The Linux Kernel/include|linux/ipv6.h}} – IPv6 definitions
: {{The Linux Kernel/source|net/ipv6}} – IPv6 protocol stack
: {{The Linux Kernel/source|net/tls}} – kernel TLS (since 4.13)
: {{The Linux Kernel/source|net/xdp}} – {{w|Express Data Path}} fast packet processing (since 4.8)
: {{The Linux Kernel/source|net/sched}} – traffic control and QoS
📚 References:
: {{The Linux Kernel/man|7|tcp}}
: {{The Linux Kernel/man|7|udp}}
: {{The Linux Kernel/man|7|raw}}
: {{The Linux Kernel/man|8|tc}} – traffic control
: {{w|Transport layer}} and {{w|Transmission_Control_Protocol|TCP}}
=== RDMA ===
🚀 advanced topic
🗝️ Acronyms:
: IB — {{w|InfiniBand}}, an interconnect standard, competes with {{w|Ethernet}}, {{w|Fibre Channel}}
: IPoIB — IP network emulation layer over InfiniBand networks
: SRP — {{w|SCSI RDMA Protocol}}
: ULP — Upper-layer protocols
: iSER — {{w|iSCSI Extensions for RDMA}}
⚲ Interfaces:
: https://github.com/linux-rdma/rdma-core
: {{The Linux Kernel/man|8|rdma}}
: {{The Linux Kernel/man|7|rdma_cm}} — RDMA communication manager
: {{The Linux Kernel/source|include/uapi/rdma}} – user-space RDMA API definitions
: {{The Linux Kernel/source|include/rdma}} – kernel RDMA API definitions
⚙️ Internals:
: {{The Linux Kernel/source|drivers/infiniband}} – InfiniBand core and drivers
:: {{The Linux Kernel/source|drivers/infiniband/ulp}} — Upper-layer protocols
:: {{The Linux Kernel/source|drivers/infiniband/sw}} — software drivers
:: {{The Linux Kernel/source|drivers/infiniband/hw}} — hardware device drivers
📚 References:
: {{The Linux Kernel/doc|InfiniBand|infiniband}}
: {{The Linux Kernel/doc|InfiniBand and RDMA Interfaces|driver-api/infiniband.html}}
== {{w|Netfilter}} ==
🚀 advanced topic
⚲ Interface:
: {{The Linux Kernel/man|8|ebtables-nft}}
: {{The Linux Kernel/man|8|arptables-nft}}
: {{The Linux Kernel/man|8|xtables-nft}}
: {{The Linux Kernel/man|8|iptables}}
: {{The Linux Kernel/man|8|ip6tables}}
: {{The Linux Kernel/man|8|ebtables}}
: {{The Linux Kernel/man|8|arptables}}
: ipset
: {{The Linux Kernel/include|linux/netfilter.h}}
: {{The Linux Kernel/include|uapi/linux/netfilter}}
: {{The Linux Kernel/include|net/netfilter}}
: {{The Linux Kernel/include|net/netns/netfilter.h}}
: {{The Linux Kernel/include|linux/netfilter}}
: {{The Linux Kernel/include|linux/netfilter/x_tables.h}} – xtables match/target registration
⚙️ Internals:
: {{The Linux Kernel/source|net/netfilter}} – packet filtering framework
📚 References:
: {{The Linux Kernel/doc|Netfilter Sysfs variables|networking/netfilter-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter Conntrack Sysfs variables|networking/nf_conntrack-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter’s flowtable infrastructure|networking/nf_flowtable.html}}
: {{w|nftables}}
: https://wiki.nftables.org/
: https://lwn.net/Kernel/Index/#Networking-Packet_filtering
== Network device {{w|Network interface|interfaces}} ==
⚲ Interfaces
: <code>ip -brief link show</code>
: <code>ls -l /sys/class/net</code>
: {{The Linux Kernel/id|devm_register_netdev}} registers {{The Linux Kernel/id|net_device}}, net_device_ops
: {{The Linux Kernel/id|sk_buff}} socket buffer (skb)
:: {{The Linux Kernel/id|dev_queue_xmit}} queues socket buffers into transmit queue
: {{The Linux Kernel/include|linux/netdevice.h}}
: {{The Linux Kernel/include|linux/skbuff.h}}
👁 Example: {{The Linux Kernel/source|drivers/net/loopback.c}} - the most famous and simple interface '''lo'''
⚙️ Internals
: {{The Linux Kernel/source|net/core/dev.c}} – network device operations core
: function {{The Linux Kernel/id|loopback_xmit}} receives skb and passes it back with {{The Linux Kernel/id|netif_rx}}
📚 Further reading
: {{The Linux Kernel/man|8|ip-link}} – network device configuration
: {{The Linux Kernel/man|8|ip-stats}} – manage and show interface statistics
: {{The Linux Kernel/man|7|netdevice}} – low-level access to Linux network devices
: {{The Linux Kernel/man|7|packet}} – packet interface on device level
: [https://www.coverfire.com/articles/queueing-in-the-linux-network-stack/ Queueing in the Linux Network Stack]
💾 Historical
: [http://www.tldp.org/LDP/tlk/net/net.html LDP TLK Chapter 10 Networks]
== Network drivers==
:{{The Linux Kernel/include|linux/etherdevice.h}}
: {{The Linux Kernel/id|netif_rx}} - before NAPI
: {{The Linux Kernel/id|input_pkt_queue}}
: {{w|New_API|NAPI}}
: [https://wiki.linuxfoundation.org/networking/napi NAPI Driver design]
:: ⚲ API:
::: {{The Linux Kernel/id|netif_napi_add}} adds {{The Linux Kernel/id|napi_struct}}
::: {{The Linux Kernel/id|napi_schedule}} - called by an IRQ handler to schedule a poll
::: {{The Linux Kernel/id|netif_receive_skb}} - instead netif_rx, finally calls {{The Linux Kernel/id|ip_rcv}}
::: {{The Linux Kernel/id|napi_complete_done}} - called from custom napi->poll()
:: ⚙️ Internals:
::: {{The Linux Kernel/id|net_dev_init}}
:::: {{The Linux Kernel/id|net_rx_action}}
::::: {{The Linux Kernel/id|napi_poll}} calls custom napi->poll()
:: 👁 example
::: {{The Linux Kernel/id|e1000_intr}} calls {{The Linux Kernel/id|__napi_schedule}}
::: custom napi->poll() {{The Linux Kernel/id|e1000e_poll}} calls {{The Linux Kernel/id|napi_complete_done}}
: {{The Linux Kernel/id|ether_setup}} setups Ethernet network device
: 👁 An example of Ethernet driver: {{The Linux Kernel/id|e1000_probe}}
⚙️ Internals:
: {{The Linux Kernel/source|drivers/net}} – network device drivers
: {{The Linux Kernel/source|drivers/net/wireless}} – wireless drivers
: {{The Linux Kernel/source|drivers/net/ethernet}} – Ethernet drivers
: {{The Linux Kernel/source|net/wireless}} – cfg80211, wireless configuration API and userspace interface via {{The Linux Kernel/man|8|iw}}
: {{The Linux Kernel/source|net/mac80211}} – mac80211, software 802.11 MAC layer used by most WiFi drivers
: {{The Linux Kernel/source|net/bluetooth}} – {{w|Bluetooth}} protocol stack
: {{The Linux Kernel/source|net/bridge}} – {{The Linux Kernel/doc|Ethernet bridging|networking/bridge.html}}
📚 References:
: {{The Linux Kernel/man|8|ethtool}} – query or control network driver and hardware settings
: [[w:Data link layer|Data link layer]]: [[w:Ethernet|Ethernet]]
: [https://lwn.net/Articles/358910/ GRO - Generic Receive Offload]
: {{The Linux Kernel/doc|Segmentation Offloads|networking/segmentation-offloads.html}}
: https://wireless.wiki.kernel.org
<hr>
💾 ''Historical'':
: [http://www.xml.com/ldd/chapter/book/ch14.html LDD2:Network Drivers]
: [http://lwn.net/images/pdf/LDD3/ch17.pdf LDD3:Network Drivers]
: [http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-8.html Kernel Analysis: Networking, 2003]
: [https://web.archive.org/web/20111030030517/http://www.linuxfoundation.org/collaborate/workgroups/networking/networkoverview network_overview]
📖 Further reading about networking
: {{The Linux Kernel/doc|Networking interfaces|subsystem-apis.html#networking-interfaces}}
:: {{The Linux Kernel/doc|Networking|networking}}
: https://lwn.net/Kernel/Index/#Networking
: https://lartc.org/ – Linux Advanced Routing & Traffic Control
: {{The Linux Kernel/man|8|ip}} – show / manipulate routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|tc}} – show / manipulate traffic control settings
: [https://github.com/iovisor/bcc/blob/master/README.md#network-and-sockets-tools bcc/ebpf networking tools]
: [https://github.com/cilium/cilium eBPF-based Networking, Security, and Observability]
: [https://retis.readthedocs.io/ Retis – tracing packets in the Linux networking stack & friends]
{{BookCat}}
7ilq50x5pgisoyr01littqwryakc3to
4641531
4641523
2026-06-28T15:36:29Z
Conan
3188
Networking: if_ether.h, nfs_fs.h and fs/nfs references
4641531
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Network functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#dff" |networking
|-
| bgcolor="#bff" |[[#Sockets|sockets access]]
|-
| bgcolor="#adf" |[[#Address_families|address families: inet, unix, ...]]
|-
| bgcolor="#9cd" |[[#Network_storage|network storage]]
|-
| bgcolor="#8bb" |[[#Protocols|protocols]]
|-
| bgcolor="#7a9" |[[#Network_device_interfaces|network interfaces]]
|-
| bgcolor="#798" |[[#Network_drivers|network drivers]]
|}
Linux kernel network functionality spans from sockets interface through protocols to network cards.
⚲ Shell interfaces:
: {{The Linux Kernel/man|8|netstat}} prints network connections, routing tables, interface statistics and other details
: {{The Linux Kernel/man|8|ip}} shows and configures routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|ss}} - socket statistics utility
== Sockets ==
⚲ API:
[https://man7.org/linux/man-pages/man0/sys_socket.h.0p.html sys/socket.h – main user mode sockets header]
Basic common and client side interface:
: {{The Linux Kernel/man|2|socket}} ↪ {{The Linux Kernel/id|__sys_socket}} creates an endpoint for communication
: struct {{The Linux Kernel/id|sockaddr}} - abstract socket address
: {{The Linux Kernel/man|2|connect}} ↪ {{The Linux Kernel/id|__sys_connect}};
: {{The Linux Kernel/man|2|shutdown}} shuts down part of a full-duplex connection
: {{The Linux Kernel/man|2|send}} ↪ {{The Linux Kernel/id|__sys_sendto}} sends a message on a socket
: {{The Linux Kernel/man|2|recv}} ↪ {{The Linux Kernel/id|__sys_recvfrom}}, {{The Linux Kernel/id|__sys_recvmsg}} receives a message from a socket
Additional server side interface:
: {{The Linux Kernel/man|2|bind}} ↪ {{The Linux Kernel/id|__sys_bind}} - binds a sockaddr to a socket
: {{The Linux Kernel/man|2|listen}} ↪ {{The Linux Kernel/id|__sys_listen}} - listens for connections on a socket
: {{The Linux Kernel/man|2|accept}} ↪ {{The Linux Kernel/id|__sys_accept4}} - accepts a connection on a socket
⚙️ Internals
: struct '''{{The Linux Kernel/id|socket}}''' @ {{The Linux Kernel/include|linux/net.h}} contains
:: struct {{The Linux Kernel/id|proto_ops}} - abstract protocols interface
:: struct {{The Linux Kernel/id|sock}} - network layer representation of sockets {{The Linux Kernel/include|net/sock.h}}
: '''{{The Linux Kernel/id|__sys_socket}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|sock_create}}
::: {{The Linux Kernel/id|__sock_create}}
:::: {{The Linux Kernel/id|security_socket_create}}
:::: {{The Linux Kernel/id|sock_alloc}}
::::: {{The Linux Kernel/id|net_proto_family}}->create.
:::::: for example {{The Linux Kernel/id|inet_create}}. See [[#Address_families|Address families]] for other options.
: '''{{The Linux Kernel/id|__sys_connect}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|move_addr_to_kernel}}
::: {{The Linux Kernel/id|audit_sockaddr}}
::: {{The Linux Kernel/id|__sys_connect_file}}
:::: {{The Linux Kernel/id|sock_from_file}}
:::: {{The Linux Kernel/id|security_socket_connect}}
:::: {{The Linux Kernel/id|proto_ops}}->connect.
::::: for example {{The Linux Kernel/id|inet_stream_connect}}. See [[#Protocols|Protocols]] for other options.
: {{The Linux Kernel/source|net/socket.c}} – socket system calls implementation
📚 References
: {{The Linux Kernel/man|7|socket}}
: {{The Linux Kernel/include|linux/socket.h}}
: {{w|Berkeley sockets}}
== Network storage ==
🚀 advanced topic
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|sendfile}} ↪ {{The Linux Kernel/id|do_sendfile}}.
See also [[../Storage#Zero-copy|Zero-copy between file descriptors]]
:{{w|Application layer|Application layer}}: {{w|Network File System}}
: {{The Linux Kernel/doc|NFS|filesystems/nfs}}, {{The Linux Kernel/include|linux/nfs_fs.h}}, {{The Linux Kernel/source|fs/nfs}}
:: {{The Linux Kernel/id|init_nfs_fs}}, {{The Linux Kernel/id|nfs4_fs_type}}, {{The Linux Kernel/id|nfs_fs_type}},
:: {{The Linux Kernel/id|init_nfsd}}, {{The Linux Kernel/id|nfsd_fs_type}}
: {{The Linux Kernel/doc|CIFS|admin-guide/cifs}}
:: {{The Linux Kernel/id|init_cifs}}
:: {{The Linux Kernel/id|cifs_fs_type}}, {{The Linux Kernel/id|smb3_fs_type}} {{The Linux Kernel/id|cifs_smb3_do_mount}}
: {{The Linux Kernel/doc|target and iSCSI Interfaces Guide|driver-api/target.html}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/4.3-network-filesystems-(cifssmb)
== Transport and Network ==
=== Names ===
⚲ API: {{The Linux Kernel/man|2|uname}}, {{The Linux Kernel/man|2|sethostname}}, {{The Linux Kernel/man|2|gethostname}}, {{The Linux Kernel/man|2|setdomainname}} {{The Linux Kernel/man|2|getdomainname}}
: ↪ {{The Linux Kernel/id|utsname}}
⚙️ Details
: {{The Linux Kernel/id|utsname}} returns writable pointer to {{The Linux Kernel/id|new_utsname}} from {{The Linux Kernel/id|uts_namespace}} from {{The Linux Kernel/id|nsproxy}} from {{The Linux Kernel/id|current}} {{The Linux Kernel/id|task_struct}}.
: {{The Linux Kernel/id|CLONE_NEWUTS}}, {{The Linux Kernel/id|setns}}
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace management
📚 References:
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
=== Address families ===
⚲ API
: {{The Linux Kernel/man|2|getsockname}}
: {{The Linux Kernel/man|2|getpeername}}
: Address Family (AF) <big>domain</big> defines address format and address length <big>socklen_t</big>.
: {{The Linux Kernel/man|3|inet_ntop}}, {{The Linux Kernel/man|3|inet_pton}} (derive socklen_t from AF)
Common AF: {{The Linux Kernel/id|AF_UNIX}}, {{The Linux Kernel/id|AF_INET}}, {{The Linux Kernel/id|AF_NETLINK}}.
''PF - Protocol Family index ({{The Linux Kernel/id|PF_MAX}}) actually is the same as Address Family index (AF).''
⚙️ Internals of some AF
: {{The Linux Kernel/man|7|unix}} ↪ {{The Linux Kernel/id|unix_family_ops}} - sockets for local IPC, {{The Linux Kernel/source|net/unix}}
:: {{The Linux Kernel/id|unix_create}}
: {{The Linux Kernel/man|7|ip}} ↪ {{The Linux Kernel/id|inet_family_ops}} - IPv4
:: {{The Linux Kernel/id|inet_create}}
: {{The Linux Kernel/man|7|netlink}} ↪ {{The Linux Kernel/id|netlink_family_ops}} - communication between kernel and user space, {{The Linux Kernel/source|net/netlink}}
:: {{The Linux Kernel/include|linux/netlink.h}}, {{The Linux Kernel/include|linux/rtnetlink.h}} – netlink and routing netlink messages
:: {{The Linux Kernel/id|netlink_create}}
: {{The Linux Kernel/man|7|vsock}} ↪ {{The Linux Kernel/id|vsock_family_ops}} - communication between VM and hypervisor
:: {{The Linux Kernel/id|vsock_create}}
: {{The Linux Kernel/man|7|packet}} ↪ {{The Linux Kernel/id|packet_family_ops}} - device level interface
:: {{The Linux Kernel/id|packet_create}}
: {{The Linux Kernel/id|bt_sock_family_ops}} - Bluetooth
:: {{The Linux Kernel/id|bt_sock_create}}
There are more than 40 AFs in total (see {{The Linux Kernel/id|AF_MAX}})
⚙️ Internals
: {{The Linux Kernel/id|sock_register}} - registers {{The Linux Kernel/id|net_proto_family}}. See references to this identifiers to find more than 30 protocol families.
: {{The Linux Kernel/id|__sock_create}}
📚 Further reading
: {{The Linux Kernel/man|8|ip-address}} – protocol address management
: {{w|Internet layer}}
: {{The Linux Kernel/man|7|address_families}}
=== Protocols ===
Each Protocol Family (PF, ''same index as Address Family AF'') consists of several protocol implementations.
Directory /proc/net contains various files and subdirectories containing information about the networking layer.
File /proc/net/protocols lists available and used protocols.
In each PF protocols are classified to different types {{The Linux Kernel/id|sock_type}}, for example stream, datagram and raw socket.
TCP is type of stream, UDP is type of datagram, raw and ping are type of raw.
: {{The Linux Kernel/id|proto_register}} - registers struct {{The Linux Kernel/id|proto}} - protocol implementations:
: In {{The Linux Kernel/id|inet_init}} initcall, {{The Linux Kernel/id|inetsw_array}}, {{The Linux Kernel/id|proto_ops}} and {{The Linux Kernel/id|proto}} :
:: {{The Linux Kernel/id|inet_stream_ops}} & {{The Linux Kernel/id|tcp_prot}} {{The Linux Kernel/id|tcp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_dgram_ops}} & {{The Linux Kernel/id|udp_prot}} {{The Linux Kernel/id|udp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_sockraw_ops}}
::: {{The Linux Kernel/id|raw_prot}} {{The Linux Kernel/id|raw_sendmsg}} ...
::: {{The Linux Kernel/id|ping_prot}} {{The Linux Kernel/id|ping_v4_sendmsg}} ...
: In {{The Linux Kernel/id|af_unix_init}} initcall:
:: {{The Linux Kernel/id|unix_family_ops}}
::: {{The Linux Kernel/id|unix_create}}
:::: {{The Linux Kernel/id|unix_stream_ops}} {{The Linux Kernel/id|unix_stream_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_dgram_ops}} {{The Linux Kernel/id|unix_dgram_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_seqpacket_ops}} {{The Linux Kernel/id|unix_seqpacket_sendmsg}} ...
⚙️ Internals:
: {{The Linux Kernel/include|linux/in.h}}, {{The Linux Kernel/include|linux/ip.h}} – IPv4 address, protocol and header definitions
: {{The Linux Kernel/source|net/ipv4}} – IPv4 protocol stack
: {{The Linux Kernel/include|linux/ipv6.h}} – IPv6 definitions
: {{The Linux Kernel/source|net/ipv6}} – IPv6 protocol stack
: {{The Linux Kernel/source|net/tls}} – kernel TLS (since 4.13)
: {{The Linux Kernel/source|net/xdp}} – {{w|Express Data Path}} fast packet processing (since 4.8)
: {{The Linux Kernel/source|net/sched}} – traffic control and QoS
📚 References:
: {{The Linux Kernel/man|7|tcp}}
: {{The Linux Kernel/man|7|udp}}
: {{The Linux Kernel/man|7|raw}}
: {{The Linux Kernel/man|8|tc}} – traffic control
: {{w|Transport layer}} and {{w|Transmission_Control_Protocol|TCP}}
=== RDMA ===
🚀 advanced topic
🗝️ Acronyms:
: IB — {{w|InfiniBand}}, an interconnect standard, competes with {{w|Ethernet}}, {{w|Fibre Channel}}
: IPoIB — IP network emulation layer over InfiniBand networks
: SRP — {{w|SCSI RDMA Protocol}}
: ULP — Upper-layer protocols
: iSER — {{w|iSCSI Extensions for RDMA}}
⚲ Interfaces:
: https://github.com/linux-rdma/rdma-core
: {{The Linux Kernel/man|8|rdma}}
: {{The Linux Kernel/man|7|rdma_cm}} — RDMA communication manager
: {{The Linux Kernel/source|include/uapi/rdma}} – user-space RDMA API definitions
: {{The Linux Kernel/source|include/rdma}} – kernel RDMA API definitions
⚙️ Internals:
: {{The Linux Kernel/source|drivers/infiniband}} – InfiniBand core and drivers
:: {{The Linux Kernel/source|drivers/infiniband/ulp}} — Upper-layer protocols
:: {{The Linux Kernel/source|drivers/infiniband/sw}} — software drivers
:: {{The Linux Kernel/source|drivers/infiniband/hw}} — hardware device drivers
📚 References:
: {{The Linux Kernel/doc|InfiniBand|infiniband}}
: {{The Linux Kernel/doc|InfiniBand and RDMA Interfaces|driver-api/infiniband.html}}
== {{w|Netfilter}} ==
🚀 advanced topic
⚲ Interface:
: {{The Linux Kernel/man|8|ebtables-nft}}
: {{The Linux Kernel/man|8|arptables-nft}}
: {{The Linux Kernel/man|8|xtables-nft}}
: {{The Linux Kernel/man|8|iptables}}
: {{The Linux Kernel/man|8|ip6tables}}
: {{The Linux Kernel/man|8|ebtables}}
: {{The Linux Kernel/man|8|arptables}}
: ipset
: {{The Linux Kernel/include|linux/netfilter.h}}
: {{The Linux Kernel/include|uapi/linux/netfilter}}
: {{The Linux Kernel/include|net/netfilter}}
: {{The Linux Kernel/include|net/netns/netfilter.h}}
: {{The Linux Kernel/include|linux/netfilter}}
: {{The Linux Kernel/include|linux/netfilter/x_tables.h}} – xtables match/target registration
⚙️ Internals:
: {{The Linux Kernel/source|net/netfilter}} – packet filtering framework
📚 References:
: {{The Linux Kernel/doc|Netfilter Sysfs variables|networking/netfilter-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter Conntrack Sysfs variables|networking/nf_conntrack-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter’s flowtable infrastructure|networking/nf_flowtable.html}}
: {{w|nftables}}
: https://wiki.nftables.org/
: https://lwn.net/Kernel/Index/#Networking-Packet_filtering
== Network device {{w|Network interface|interfaces}} ==
⚲ Interfaces
: <code>ip -brief link show</code>
: <code>ls -l /sys/class/net</code>
: {{The Linux Kernel/id|devm_register_netdev}} registers {{The Linux Kernel/id|net_device}}, net_device_ops
: {{The Linux Kernel/id|sk_buff}} socket buffer (skb)
:: {{The Linux Kernel/id|dev_queue_xmit}} queues socket buffers into transmit queue
: {{The Linux Kernel/include|linux/netdevice.h}}
: {{The Linux Kernel/include|linux/skbuff.h}}
👁 Example: {{The Linux Kernel/source|drivers/net/loopback.c}} - the most famous and simple interface '''lo'''
⚙️ Internals
: {{The Linux Kernel/source|net/core/dev.c}} – network device operations core
: function {{The Linux Kernel/id|loopback_xmit}} receives skb and passes it back with {{The Linux Kernel/id|netif_rx}}
📚 Further reading
: {{The Linux Kernel/man|8|ip-link}} – network device configuration
: {{The Linux Kernel/man|8|ip-stats}} – manage and show interface statistics
: {{The Linux Kernel/man|7|netdevice}} – low-level access to Linux network devices
: {{The Linux Kernel/man|7|packet}} – packet interface on device level
: [https://www.coverfire.com/articles/queueing-in-the-linux-network-stack/ Queueing in the Linux Network Stack]
💾 Historical
: [http://www.tldp.org/LDP/tlk/net/net.html LDP TLK Chapter 10 Networks]
== Network drivers==
: {{The Linux Kernel/include|linux/if_ether.h}} – IEEE 802.3 Ethernet constants and header
:{{The Linux Kernel/include|linux/etherdevice.h}}
: {{The Linux Kernel/id|netif_rx}} - before NAPI
: {{The Linux Kernel/id|input_pkt_queue}}
: {{w|New_API|NAPI}}
: [https://wiki.linuxfoundation.org/networking/napi NAPI Driver design]
:: ⚲ API:
::: {{The Linux Kernel/id|netif_napi_add}} adds {{The Linux Kernel/id|napi_struct}}
::: {{The Linux Kernel/id|napi_schedule}} - called by an IRQ handler to schedule a poll
::: {{The Linux Kernel/id|netif_receive_skb}} - instead netif_rx, finally calls {{The Linux Kernel/id|ip_rcv}}
::: {{The Linux Kernel/id|napi_complete_done}} - called from custom napi->poll()
:: ⚙️ Internals:
::: {{The Linux Kernel/id|net_dev_init}}
:::: {{The Linux Kernel/id|net_rx_action}}
::::: {{The Linux Kernel/id|napi_poll}} calls custom napi->poll()
:: 👁 example
::: {{The Linux Kernel/id|e1000_intr}} calls {{The Linux Kernel/id|__napi_schedule}}
::: custom napi->poll() {{The Linux Kernel/id|e1000e_poll}} calls {{The Linux Kernel/id|napi_complete_done}}
: {{The Linux Kernel/id|ether_setup}} setups Ethernet network device
: 👁 An example of Ethernet driver: {{The Linux Kernel/id|e1000_probe}}
⚙️ Internals:
: {{The Linux Kernel/source|drivers/net}} – network device drivers
: {{The Linux Kernel/source|drivers/net/wireless}} – wireless drivers
: {{The Linux Kernel/source|drivers/net/ethernet}} – Ethernet drivers
: {{The Linux Kernel/source|net/wireless}} – cfg80211, wireless configuration API and userspace interface via {{The Linux Kernel/man|8|iw}}
: {{The Linux Kernel/source|net/mac80211}} – mac80211, software 802.11 MAC layer used by most WiFi drivers
: {{The Linux Kernel/source|net/bluetooth}} – {{w|Bluetooth}} protocol stack
: {{The Linux Kernel/source|net/bridge}} – {{The Linux Kernel/doc|Ethernet bridging|networking/bridge.html}}
📚 References:
: {{The Linux Kernel/man|8|ethtool}} – query or control network driver and hardware settings
: [[w:Data link layer|Data link layer]]: [[w:Ethernet|Ethernet]]
: [https://lwn.net/Articles/358910/ GRO - Generic Receive Offload]
: {{The Linux Kernel/doc|Segmentation Offloads|networking/segmentation-offloads.html}}
: https://wireless.wiki.kernel.org
<hr>
💾 ''Historical'':
: [http://www.xml.com/ldd/chapter/book/ch14.html LDD2:Network Drivers]
: [http://lwn.net/images/pdf/LDD3/ch17.pdf LDD3:Network Drivers]
: [http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-8.html Kernel Analysis: Networking, 2003]
: [https://web.archive.org/web/20111030030517/http://www.linuxfoundation.org/collaborate/workgroups/networking/networkoverview network_overview]
📖 Further reading about networking
: {{The Linux Kernel/doc|Networking interfaces|subsystem-apis.html#networking-interfaces}}
:: {{The Linux Kernel/doc|Networking|networking}}
: https://lwn.net/Kernel/Index/#Networking
: https://lartc.org/ – Linux Advanced Routing & Traffic Control
: {{The Linux Kernel/man|8|ip}} – show / manipulate routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|tc}} – show / manipulate traffic control settings
: [https://github.com/iovisor/bcc/blob/master/README.md#network-and-sockets-tools bcc/ebpf networking tools]
: [https://github.com/cilium/cilium eBPF-based Networking, Security, and Observability]
: [https://retis.readthedocs.io/ Retis – tracing packets in the Linux networking stack & friends]
{{BookCat}}
l65qcqrme847a5cqxzga6gzwm510s49
4641543
4641531
2026-06-28T16:08:30Z
Conan
3188
Networking: setsockopt, getsockopt, socketpair syscalls
4641543
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Network functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#dff" |networking
|-
| bgcolor="#bff" |[[#Sockets|sockets access]]
|-
| bgcolor="#adf" |[[#Address_families|address families: inet, unix, ...]]
|-
| bgcolor="#9cd" |[[#Network_storage|network storage]]
|-
| bgcolor="#8bb" |[[#Protocols|protocols]]
|-
| bgcolor="#7a9" |[[#Network_device_interfaces|network interfaces]]
|-
| bgcolor="#798" |[[#Network_drivers|network drivers]]
|}
Linux kernel network functionality spans from sockets interface through protocols to network cards.
⚲ Shell interfaces:
: {{The Linux Kernel/man|8|netstat}} prints network connections, routing tables, interface statistics and other details
: {{The Linux Kernel/man|8|ip}} shows and configures routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|ss}} - socket statistics utility
== Sockets ==
⚲ API:
[https://man7.org/linux/man-pages/man0/sys_socket.h.0p.html sys/socket.h – main user mode sockets header]
Basic common and client side interface:
: {{The Linux Kernel/man|2|socket}} ↪ {{The Linux Kernel/id|__sys_socket}} creates an endpoint for communication
: struct {{The Linux Kernel/id|sockaddr}} - abstract socket address
: {{The Linux Kernel/man|2|connect}} ↪ {{The Linux Kernel/id|__sys_connect}};
: {{The Linux Kernel/man|2|shutdown}} shuts down part of a full-duplex connection
: {{The Linux Kernel/man|2|send}} ↪ {{The Linux Kernel/id|__sys_sendto}} sends a message on a socket
: {{The Linux Kernel/man|2|recv}} ↪ {{The Linux Kernel/id|__sys_recvfrom}}, {{The Linux Kernel/id|__sys_recvmsg}} receives a message from a socket
: {{The Linux Kernel/man|2|setsockopt}}, {{The Linux Kernel/man|2|getsockopt}} ↪ {{The Linux Kernel/id|__sys_setsockopt}} – set/get socket options
: {{The Linux Kernel/man|2|socketpair}} ↪ {{The Linux Kernel/id|__sys_socketpair}} – create a pair of connected sockets
Additional server side interface:
: {{The Linux Kernel/man|2|bind}} ↪ {{The Linux Kernel/id|__sys_bind}} - binds a sockaddr to a socket
: {{The Linux Kernel/man|2|listen}} ↪ {{The Linux Kernel/id|__sys_listen}} - listens for connections on a socket
: {{The Linux Kernel/man|2|accept}} ↪ {{The Linux Kernel/id|__sys_accept4}} - accepts a connection on a socket
⚙️ Internals
: struct '''{{The Linux Kernel/id|socket}}''' @ {{The Linux Kernel/include|linux/net.h}} contains
:: struct {{The Linux Kernel/id|proto_ops}} - abstract protocols interface
:: struct {{The Linux Kernel/id|sock}} - network layer representation of sockets {{The Linux Kernel/include|net/sock.h}}
: '''{{The Linux Kernel/id|__sys_socket}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|sock_create}}
::: {{The Linux Kernel/id|__sock_create}}
:::: {{The Linux Kernel/id|security_socket_create}}
:::: {{The Linux Kernel/id|sock_alloc}}
::::: {{The Linux Kernel/id|net_proto_family}}->create.
:::::: for example {{The Linux Kernel/id|inet_create}}. See [[#Address_families|Address families]] for other options.
: '''{{The Linux Kernel/id|__sys_connect}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|move_addr_to_kernel}}
::: {{The Linux Kernel/id|audit_sockaddr}}
::: {{The Linux Kernel/id|__sys_connect_file}}
:::: {{The Linux Kernel/id|sock_from_file}}
:::: {{The Linux Kernel/id|security_socket_connect}}
:::: {{The Linux Kernel/id|proto_ops}}->connect.
::::: for example {{The Linux Kernel/id|inet_stream_connect}}. See [[#Protocols|Protocols]] for other options.
: {{The Linux Kernel/source|net/socket.c}} – socket system calls implementation
📚 References
: {{The Linux Kernel/man|7|socket}}
: {{The Linux Kernel/include|linux/socket.h}}
: {{w|Berkeley sockets}}
== Network storage ==
🚀 advanced topic
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|sendfile}} ↪ {{The Linux Kernel/id|do_sendfile}}.
See also [[../Storage#Zero-copy|Zero-copy between file descriptors]]
:{{w|Application layer|Application layer}}: {{w|Network File System}}
: {{The Linux Kernel/doc|NFS|filesystems/nfs}}, {{The Linux Kernel/include|linux/nfs_fs.h}}, {{The Linux Kernel/source|fs/nfs}}
:: {{The Linux Kernel/id|init_nfs_fs}}, {{The Linux Kernel/id|nfs4_fs_type}}, {{The Linux Kernel/id|nfs_fs_type}},
:: {{The Linux Kernel/id|init_nfsd}}, {{The Linux Kernel/id|nfsd_fs_type}}
: {{The Linux Kernel/doc|CIFS|admin-guide/cifs}}
:: {{The Linux Kernel/id|init_cifs}}
:: {{The Linux Kernel/id|cifs_fs_type}}, {{The Linux Kernel/id|smb3_fs_type}} {{The Linux Kernel/id|cifs_smb3_do_mount}}
: {{The Linux Kernel/doc|target and iSCSI Interfaces Guide|driver-api/target.html}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/4.3-network-filesystems-(cifssmb)
== Transport and Network ==
=== Names ===
⚲ API: {{The Linux Kernel/man|2|uname}}, {{The Linux Kernel/man|2|sethostname}}, {{The Linux Kernel/man|2|gethostname}}, {{The Linux Kernel/man|2|setdomainname}} {{The Linux Kernel/man|2|getdomainname}}
: ↪ {{The Linux Kernel/id|utsname}}
⚙️ Details
: {{The Linux Kernel/id|utsname}} returns writable pointer to {{The Linux Kernel/id|new_utsname}} from {{The Linux Kernel/id|uts_namespace}} from {{The Linux Kernel/id|nsproxy}} from {{The Linux Kernel/id|current}} {{The Linux Kernel/id|task_struct}}.
: {{The Linux Kernel/id|CLONE_NEWUTS}}, {{The Linux Kernel/id|setns}}
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace management
📚 References:
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
=== Address families ===
⚲ API
: {{The Linux Kernel/man|2|getsockname}}
: {{The Linux Kernel/man|2|getpeername}}
: Address Family (AF) <big>domain</big> defines address format and address length <big>socklen_t</big>.
: {{The Linux Kernel/man|3|inet_ntop}}, {{The Linux Kernel/man|3|inet_pton}} (derive socklen_t from AF)
Common AF: {{The Linux Kernel/id|AF_UNIX}}, {{The Linux Kernel/id|AF_INET}}, {{The Linux Kernel/id|AF_NETLINK}}.
''PF - Protocol Family index ({{The Linux Kernel/id|PF_MAX}}) actually is the same as Address Family index (AF).''
⚙️ Internals of some AF
: {{The Linux Kernel/man|7|unix}} ↪ {{The Linux Kernel/id|unix_family_ops}} - sockets for local IPC, {{The Linux Kernel/source|net/unix}}
:: {{The Linux Kernel/id|unix_create}}
: {{The Linux Kernel/man|7|ip}} ↪ {{The Linux Kernel/id|inet_family_ops}} - IPv4
:: {{The Linux Kernel/id|inet_create}}
: {{The Linux Kernel/man|7|netlink}} ↪ {{The Linux Kernel/id|netlink_family_ops}} - communication between kernel and user space, {{The Linux Kernel/source|net/netlink}}
:: {{The Linux Kernel/include|linux/netlink.h}}, {{The Linux Kernel/include|linux/rtnetlink.h}} – netlink and routing netlink messages
:: {{The Linux Kernel/id|netlink_create}}
: {{The Linux Kernel/man|7|vsock}} ↪ {{The Linux Kernel/id|vsock_family_ops}} - communication between VM and hypervisor
:: {{The Linux Kernel/id|vsock_create}}
: {{The Linux Kernel/man|7|packet}} ↪ {{The Linux Kernel/id|packet_family_ops}} - device level interface
:: {{The Linux Kernel/id|packet_create}}
: {{The Linux Kernel/id|bt_sock_family_ops}} - Bluetooth
:: {{The Linux Kernel/id|bt_sock_create}}
There are more than 40 AFs in total (see {{The Linux Kernel/id|AF_MAX}})
⚙️ Internals
: {{The Linux Kernel/id|sock_register}} - registers {{The Linux Kernel/id|net_proto_family}}. See references to this identifiers to find more than 30 protocol families.
: {{The Linux Kernel/id|__sock_create}}
📚 Further reading
: {{The Linux Kernel/man|8|ip-address}} – protocol address management
: {{w|Internet layer}}
: {{The Linux Kernel/man|7|address_families}}
=== Protocols ===
Each Protocol Family (PF, ''same index as Address Family AF'') consists of several protocol implementations.
Directory /proc/net contains various files and subdirectories containing information about the networking layer.
File /proc/net/protocols lists available and used protocols.
In each PF protocols are classified to different types {{The Linux Kernel/id|sock_type}}, for example stream, datagram and raw socket.
TCP is type of stream, UDP is type of datagram, raw and ping are type of raw.
: {{The Linux Kernel/id|proto_register}} - registers struct {{The Linux Kernel/id|proto}} - protocol implementations:
: In {{The Linux Kernel/id|inet_init}} initcall, {{The Linux Kernel/id|inetsw_array}}, {{The Linux Kernel/id|proto_ops}} and {{The Linux Kernel/id|proto}} :
:: {{The Linux Kernel/id|inet_stream_ops}} & {{The Linux Kernel/id|tcp_prot}} {{The Linux Kernel/id|tcp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_dgram_ops}} & {{The Linux Kernel/id|udp_prot}} {{The Linux Kernel/id|udp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_sockraw_ops}}
::: {{The Linux Kernel/id|raw_prot}} {{The Linux Kernel/id|raw_sendmsg}} ...
::: {{The Linux Kernel/id|ping_prot}} {{The Linux Kernel/id|ping_v4_sendmsg}} ...
: In {{The Linux Kernel/id|af_unix_init}} initcall:
:: {{The Linux Kernel/id|unix_family_ops}}
::: {{The Linux Kernel/id|unix_create}}
:::: {{The Linux Kernel/id|unix_stream_ops}} {{The Linux Kernel/id|unix_stream_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_dgram_ops}} {{The Linux Kernel/id|unix_dgram_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_seqpacket_ops}} {{The Linux Kernel/id|unix_seqpacket_sendmsg}} ...
⚙️ Internals:
: {{The Linux Kernel/include|linux/in.h}}, {{The Linux Kernel/include|linux/ip.h}} – IPv4 address, protocol and header definitions
: {{The Linux Kernel/source|net/ipv4}} – IPv4 protocol stack
: {{The Linux Kernel/include|linux/ipv6.h}} – IPv6 definitions
: {{The Linux Kernel/source|net/ipv6}} – IPv6 protocol stack
: {{The Linux Kernel/source|net/tls}} – kernel TLS (since 4.13)
: {{The Linux Kernel/source|net/xdp}} – {{w|Express Data Path}} fast packet processing (since 4.8)
: {{The Linux Kernel/source|net/sched}} – traffic control and QoS
📚 References:
: {{The Linux Kernel/man|7|tcp}}
: {{The Linux Kernel/man|7|udp}}
: {{The Linux Kernel/man|7|raw}}
: {{The Linux Kernel/man|8|tc}} – traffic control
: {{w|Transport layer}} and {{w|Transmission_Control_Protocol|TCP}}
=== RDMA ===
🚀 advanced topic
🗝️ Acronyms:
: IB — {{w|InfiniBand}}, an interconnect standard, competes with {{w|Ethernet}}, {{w|Fibre Channel}}
: IPoIB — IP network emulation layer over InfiniBand networks
: SRP — {{w|SCSI RDMA Protocol}}
: ULP — Upper-layer protocols
: iSER — {{w|iSCSI Extensions for RDMA}}
⚲ Interfaces:
: https://github.com/linux-rdma/rdma-core
: {{The Linux Kernel/man|8|rdma}}
: {{The Linux Kernel/man|7|rdma_cm}} — RDMA communication manager
: {{The Linux Kernel/source|include/uapi/rdma}} – user-space RDMA API definitions
: {{The Linux Kernel/source|include/rdma}} – kernel RDMA API definitions
⚙️ Internals:
: {{The Linux Kernel/source|drivers/infiniband}} – InfiniBand core and drivers
:: {{The Linux Kernel/source|drivers/infiniband/ulp}} — Upper-layer protocols
:: {{The Linux Kernel/source|drivers/infiniband/sw}} — software drivers
:: {{The Linux Kernel/source|drivers/infiniband/hw}} — hardware device drivers
📚 References:
: {{The Linux Kernel/doc|InfiniBand|infiniband}}
: {{The Linux Kernel/doc|InfiniBand and RDMA Interfaces|driver-api/infiniband.html}}
== {{w|Netfilter}} ==
🚀 advanced topic
⚲ Interface:
: {{The Linux Kernel/man|8|ebtables-nft}}
: {{The Linux Kernel/man|8|arptables-nft}}
: {{The Linux Kernel/man|8|xtables-nft}}
: {{The Linux Kernel/man|8|iptables}}
: {{The Linux Kernel/man|8|ip6tables}}
: {{The Linux Kernel/man|8|ebtables}}
: {{The Linux Kernel/man|8|arptables}}
: ipset
: {{The Linux Kernel/include|linux/netfilter.h}}
: {{The Linux Kernel/include|uapi/linux/netfilter}}
: {{The Linux Kernel/include|net/netfilter}}
: {{The Linux Kernel/include|net/netns/netfilter.h}}
: {{The Linux Kernel/include|linux/netfilter}}
: {{The Linux Kernel/include|linux/netfilter/x_tables.h}} – xtables match/target registration
⚙️ Internals:
: {{The Linux Kernel/source|net/netfilter}} – packet filtering framework
📚 References:
: {{The Linux Kernel/doc|Netfilter Sysfs variables|networking/netfilter-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter Conntrack Sysfs variables|networking/nf_conntrack-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter’s flowtable infrastructure|networking/nf_flowtable.html}}
: {{w|nftables}}
: https://wiki.nftables.org/
: https://lwn.net/Kernel/Index/#Networking-Packet_filtering
== Network device {{w|Network interface|interfaces}} ==
⚲ Interfaces
: <code>ip -brief link show</code>
: <code>ls -l /sys/class/net</code>
: {{The Linux Kernel/id|devm_register_netdev}} registers {{The Linux Kernel/id|net_device}}, net_device_ops
: {{The Linux Kernel/id|sk_buff}} socket buffer (skb)
:: {{The Linux Kernel/id|dev_queue_xmit}} queues socket buffers into transmit queue
: {{The Linux Kernel/include|linux/netdevice.h}}
: {{The Linux Kernel/include|linux/skbuff.h}}
👁 Example: {{The Linux Kernel/source|drivers/net/loopback.c}} - the most famous and simple interface '''lo'''
⚙️ Internals
: {{The Linux Kernel/source|net/core/dev.c}} – network device operations core
: function {{The Linux Kernel/id|loopback_xmit}} receives skb and passes it back with {{The Linux Kernel/id|netif_rx}}
📚 Further reading
: {{The Linux Kernel/man|8|ip-link}} – network device configuration
: {{The Linux Kernel/man|8|ip-stats}} – manage and show interface statistics
: {{The Linux Kernel/man|7|netdevice}} – low-level access to Linux network devices
: {{The Linux Kernel/man|7|packet}} – packet interface on device level
: [https://www.coverfire.com/articles/queueing-in-the-linux-network-stack/ Queueing in the Linux Network Stack]
💾 Historical
: [http://www.tldp.org/LDP/tlk/net/net.html LDP TLK Chapter 10 Networks]
== Network drivers==
: {{The Linux Kernel/include|linux/if_ether.h}} – IEEE 802.3 Ethernet constants and header
:{{The Linux Kernel/include|linux/etherdevice.h}}
: {{The Linux Kernel/id|netif_rx}} - before NAPI
: {{The Linux Kernel/id|input_pkt_queue}}
: {{w|New_API|NAPI}}
: [https://wiki.linuxfoundation.org/networking/napi NAPI Driver design]
:: ⚲ API:
::: {{The Linux Kernel/id|netif_napi_add}} adds {{The Linux Kernel/id|napi_struct}}
::: {{The Linux Kernel/id|napi_schedule}} - called by an IRQ handler to schedule a poll
::: {{The Linux Kernel/id|netif_receive_skb}} - instead netif_rx, finally calls {{The Linux Kernel/id|ip_rcv}}
::: {{The Linux Kernel/id|napi_complete_done}} - called from custom napi->poll()
:: ⚙️ Internals:
::: {{The Linux Kernel/id|net_dev_init}}
:::: {{The Linux Kernel/id|net_rx_action}}
::::: {{The Linux Kernel/id|napi_poll}} calls custom napi->poll()
:: 👁 example
::: {{The Linux Kernel/id|e1000_intr}} calls {{The Linux Kernel/id|__napi_schedule}}
::: custom napi->poll() {{The Linux Kernel/id|e1000e_poll}} calls {{The Linux Kernel/id|napi_complete_done}}
: {{The Linux Kernel/id|ether_setup}} setups Ethernet network device
: 👁 An example of Ethernet driver: {{The Linux Kernel/id|e1000_probe}}
⚙️ Internals:
: {{The Linux Kernel/source|drivers/net}} – network device drivers
: {{The Linux Kernel/source|drivers/net/wireless}} – wireless drivers
: {{The Linux Kernel/source|drivers/net/ethernet}} – Ethernet drivers
: {{The Linux Kernel/source|net/wireless}} – cfg80211, wireless configuration API and userspace interface via {{The Linux Kernel/man|8|iw}}
: {{The Linux Kernel/source|net/mac80211}} – mac80211, software 802.11 MAC layer used by most WiFi drivers
: {{The Linux Kernel/source|net/bluetooth}} – {{w|Bluetooth}} protocol stack
: {{The Linux Kernel/source|net/bridge}} – {{The Linux Kernel/doc|Ethernet bridging|networking/bridge.html}}
📚 References:
: {{The Linux Kernel/man|8|ethtool}} – query or control network driver and hardware settings
: [[w:Data link layer|Data link layer]]: [[w:Ethernet|Ethernet]]
: [https://lwn.net/Articles/358910/ GRO - Generic Receive Offload]
: {{The Linux Kernel/doc|Segmentation Offloads|networking/segmentation-offloads.html}}
: https://wireless.wiki.kernel.org
<hr>
💾 ''Historical'':
: [http://www.xml.com/ldd/chapter/book/ch14.html LDD2:Network Drivers]
: [http://lwn.net/images/pdf/LDD3/ch17.pdf LDD3:Network Drivers]
: [http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-8.html Kernel Analysis: Networking, 2003]
: [https://web.archive.org/web/20111030030517/http://www.linuxfoundation.org/collaborate/workgroups/networking/networkoverview network_overview]
📖 Further reading about networking
: {{The Linux Kernel/doc|Networking interfaces|subsystem-apis.html#networking-interfaces}}
:: {{The Linux Kernel/doc|Networking|networking}}
: https://lwn.net/Kernel/Index/#Networking
: https://lartc.org/ – Linux Advanced Routing & Traffic Control
: {{The Linux Kernel/man|8|ip}} – show / manipulate routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|tc}} – show / manipulate traffic control settings
: [https://github.com/iovisor/bcc/blob/master/README.md#network-and-sockets-tools bcc/ebpf networking tools]
: [https://github.com/cilium/cilium eBPF-based Networking, Security, and Observability]
: [https://retis.readthedocs.io/ Retis – tracing packets in the Linux networking stack & friends]
{{BookCat}}
9n9f9wqybjusdh8b5c62abv1v8io1yp
4641645
4641543
2026-06-29T08:40:52Z
Conan
3188
stress-ng stressors distributed to subsections, text fragment anchors
4641645
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Network functionality}}</noinclude>
{|style="width: 25%; float: right; text-align:center;border-spacing: 0; color:black; margin:auto;" cellpadding=5pc
! bgcolor="#dff" |networking
|-
| bgcolor="#bff" |[[#Sockets|sockets access]]
|-
| bgcolor="#adf" |[[#Address_families|address families: inet, unix, ...]]
|-
| bgcolor="#9cd" |[[#Network_storage|network storage]]
|-
| bgcolor="#8bb" |[[#Protocols|protocols]]
|-
| bgcolor="#7a9" |[[#Network_device_interfaces|network interfaces]]
|-
| bgcolor="#798" |[[#Network_drivers|network drivers]]
|}
Linux kernel network functionality spans from sockets interface through protocols to network cards.
⚲ Shell interfaces:
: {{The Linux Kernel/man|8|netstat}} prints network connections, routing tables, interface statistics and other details
: {{The Linux Kernel/man|8|ip}} shows and configures routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|ss}} - socket statistics utility
== Sockets ==
⚲ API:
[https://man7.org/linux/man-pages/man0/sys_socket.h.0p.html sys/socket.h – main user mode sockets header]
Basic common and client side interface:
: {{The Linux Kernel/man|2|socket}} ↪ {{The Linux Kernel/id|__sys_socket}} creates an endpoint for communication
: struct {{The Linux Kernel/id|sockaddr}} - abstract socket address
: {{The Linux Kernel/man|2|connect}} ↪ {{The Linux Kernel/id|__sys_connect}};
: {{The Linux Kernel/man|2|shutdown}} shuts down part of a full-duplex connection
: {{The Linux Kernel/man|2|send}} ↪ {{The Linux Kernel/id|__sys_sendto}} sends a message on a socket
: {{The Linux Kernel/man|2|recv}} ↪ {{The Linux Kernel/id|__sys_recvfrom}}, {{The Linux Kernel/id|__sys_recvmsg}} receives a message from a socket
: {{The Linux Kernel/man|2|setsockopt}}, {{The Linux Kernel/man|2|getsockopt}} ↪ {{The Linux Kernel/id|__sys_setsockopt}} – set/get socket options
: {{The Linux Kernel/man|2|socketpair}} ↪ {{The Linux Kernel/id|__sys_socketpair}} – create a pair of connected sockets
Additional server side interface:
: {{The Linux Kernel/man|2|bind}} ↪ {{The Linux Kernel/id|__sys_bind}} - binds a sockaddr to a socket
: {{The Linux Kernel/man|2|listen}} ↪ {{The Linux Kernel/id|__sys_listen}} - listens for connections on a socket
: {{The Linux Kernel/man|2|accept}} ↪ {{The Linux Kernel/id|__sys_accept4}} - accepts a connection on a socket
⚙️ Internals
: struct '''{{The Linux Kernel/id|socket}}''' @ {{The Linux Kernel/include|linux/net.h}} contains
:: struct {{The Linux Kernel/id|proto_ops}} - abstract protocols interface
:: struct {{The Linux Kernel/id|sock}} - network layer representation of sockets {{The Linux Kernel/include|net/sock.h}}
: '''{{The Linux Kernel/id|__sys_socket}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|sock_create}}
::: {{The Linux Kernel/id|__sock_create}}
:::: {{The Linux Kernel/id|security_socket_create}}
:::: {{The Linux Kernel/id|sock_alloc}}
::::: {{The Linux Kernel/id|net_proto_family}}->create.
:::::: for example {{The Linux Kernel/id|inet_create}}. See [[#Address_families|Address families]] for other options.
: '''{{The Linux Kernel/id|__sys_connect}}''' ↯ call hierarchy:
:: {{The Linux Kernel/id|move_addr_to_kernel}}
::: {{The Linux Kernel/id|audit_sockaddr}}
::: {{The Linux Kernel/id|__sys_connect_file}}
:::: {{The Linux Kernel/id|sock_from_file}}
:::: {{The Linux Kernel/id|security_socket_connect}}
:::: {{The Linux Kernel/id|proto_ops}}->connect.
::::: for example {{The Linux Kernel/id|inet_stream_connect}}. See [[#Protocols|Protocols]] for other options.
: {{The Linux Kernel/source|net/socket.c}} – socket system calls implementation
📚 References
: {{The Linux Kernel/man|7|socket}}
: {{The Linux Kernel/include|linux/socket.h}}
: {{w|Berkeley sockets}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dsock stress-ng --sock],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dsockpair --sockpair]
== Network storage ==
🚀 advanced topic
🔧 TODO
⚲ API:
: {{The Linux Kernel/man|2|sendfile}} ↪ {{The Linux Kernel/id|do_sendfile}}.
See also [[../Storage#Zero-copy|Zero-copy between file descriptors]]
:{{w|Application layer|Application layer}}: {{w|Network File System}}
: {{The Linux Kernel/doc|NFS|filesystems/nfs}}, {{The Linux Kernel/include|linux/nfs_fs.h}}, {{The Linux Kernel/source|fs/nfs}}
:: {{The Linux Kernel/id|init_nfs_fs}}, {{The Linux Kernel/id|nfs4_fs_type}}, {{The Linux Kernel/id|nfs_fs_type}},
:: {{The Linux Kernel/id|init_nfsd}}, {{The Linux Kernel/id|nfsd_fs_type}}
: {{The Linux Kernel/doc|CIFS|admin-guide/cifs}}
:: {{The Linux Kernel/id|init_cifs}}
:: {{The Linux Kernel/id|cifs_fs_type}}, {{The Linux Kernel/id|smb3_fs_type}} {{The Linux Kernel/id|cifs_smb3_do_mount}}
: {{The Linux Kernel/doc|target and iSCSI Interfaces Guide|driver-api/target.html}}
📚 Further reading
: https://deepwiki.com/torvalds/linux/4.3-network-filesystems-(cifssmb)
== Transport and Network ==
=== Names ===
⚲ API: {{The Linux Kernel/man|2|uname}}, {{The Linux Kernel/man|2|sethostname}}, {{The Linux Kernel/man|2|gethostname}}, {{The Linux Kernel/man|2|setdomainname}} {{The Linux Kernel/man|2|getdomainname}}
: ↪ {{The Linux Kernel/id|utsname}}
⚙️ Details
: {{The Linux Kernel/id|utsname}} returns writable pointer to {{The Linux Kernel/id|new_utsname}} from {{The Linux Kernel/id|uts_namespace}} from {{The Linux Kernel/id|nsproxy}} from {{The Linux Kernel/id|current}} {{The Linux Kernel/id|task_struct}}.
: {{The Linux Kernel/id|CLONE_NEWUTS}}, {{The Linux Kernel/id|setns}}
: {{The Linux Kernel/source|kernel/utsname.c}} – UTS namespace management
📚 References:
: {{The Linux Kernel/man|7|namespaces}}
: {{The Linux Kernel/man|7|network_namespaces}}
: {{The Linux Kernel/man|7|uts_namespaces}}
=== Address families ===
⚲ API
: {{The Linux Kernel/man|2|getsockname}}
: {{The Linux Kernel/man|2|getpeername}}
: Address Family (AF) <big>domain</big> defines address format and address length <big>socklen_t</big>.
: {{The Linux Kernel/man|3|inet_ntop}}, {{The Linux Kernel/man|3|inet_pton}} (derive socklen_t from AF)
Common AF: {{The Linux Kernel/id|AF_UNIX}}, {{The Linux Kernel/id|AF_INET}}, {{The Linux Kernel/id|AF_NETLINK}}.
''PF - Protocol Family index ({{The Linux Kernel/id|PF_MAX}}) actually is the same as Address Family index (AF).''
⚙️ Internals of some AF
: {{The Linux Kernel/man|7|unix}} ↪ {{The Linux Kernel/id|unix_family_ops}} - sockets for local IPC, {{The Linux Kernel/source|net/unix}}
:: {{The Linux Kernel/id|unix_create}}
: {{The Linux Kernel/man|7|ip}} ↪ {{The Linux Kernel/id|inet_family_ops}} - IPv4
:: {{The Linux Kernel/id|inet_create}}
: {{The Linux Kernel/man|7|netlink}} ↪ {{The Linux Kernel/id|netlink_family_ops}} - communication between kernel and user space, {{The Linux Kernel/source|net/netlink}}
:: {{The Linux Kernel/include|linux/netlink.h}}, {{The Linux Kernel/include|linux/rtnetlink.h}} – netlink and routing netlink messages
:: {{The Linux Kernel/id|netlink_create}}
:: 🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dnetlink%2Dproc stress-ng --netlink-proc]
: {{The Linux Kernel/man|7|vsock}} ↪ {{The Linux Kernel/id|vsock_family_ops}} - communication between VM and hypervisor
:: {{The Linux Kernel/id|vsock_create}}
: {{The Linux Kernel/man|7|packet}} ↪ {{The Linux Kernel/id|packet_family_ops}} - device level interface
:: {{The Linux Kernel/id|packet_create}}
: {{The Linux Kernel/id|bt_sock_family_ops}} - Bluetooth
:: {{The Linux Kernel/id|bt_sock_create}}
There are more than 40 AFs in total (see {{The Linux Kernel/id|AF_MAX}})
⚙️ Internals
: {{The Linux Kernel/id|sock_register}} - registers {{The Linux Kernel/id|net_proto_family}}. See references to this identifiers to find more than 30 protocol families.
: {{The Linux Kernel/id|__sock_create}}
📚 Further reading
: {{The Linux Kernel/man|8|ip-address}} – protocol address management
: {{w|Internet layer}}
: {{The Linux Kernel/man|7|address_families}}
=== Protocols ===
Each Protocol Family (PF, ''same index as Address Family AF'') consists of several protocol implementations.
Directory /proc/net contains various files and subdirectories containing information about the networking layer.
File /proc/net/protocols lists available and used protocols.
In each PF protocols are classified to different types {{The Linux Kernel/id|sock_type}}, for example stream, datagram and raw socket.
TCP is type of stream, UDP is type of datagram, raw and ping are type of raw.
: {{The Linux Kernel/id|proto_register}} - registers struct {{The Linux Kernel/id|proto}} - protocol implementations:
: In {{The Linux Kernel/id|inet_init}} initcall, {{The Linux Kernel/id|inetsw_array}}, {{The Linux Kernel/id|proto_ops}} and {{The Linux Kernel/id|proto}} :
:: {{The Linux Kernel/id|inet_stream_ops}} & {{The Linux Kernel/id|tcp_prot}} {{The Linux Kernel/id|tcp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_dgram_ops}} & {{The Linux Kernel/id|udp_prot}} {{The Linux Kernel/id|udp_sendmsg}} ...
:: {{The Linux Kernel/id|inet_sockraw_ops}}
::: {{The Linux Kernel/id|raw_prot}} {{The Linux Kernel/id|raw_sendmsg}} ...
::: {{The Linux Kernel/id|ping_prot}} {{The Linux Kernel/id|ping_v4_sendmsg}} ...
: In {{The Linux Kernel/id|af_unix_init}} initcall:
:: {{The Linux Kernel/id|unix_family_ops}}
::: {{The Linux Kernel/id|unix_create}}
:::: {{The Linux Kernel/id|unix_stream_ops}} {{The Linux Kernel/id|unix_stream_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_dgram_ops}} {{The Linux Kernel/id|unix_dgram_sendmsg}} ...
:::: {{The Linux Kernel/id|unix_seqpacket_ops}} {{The Linux Kernel/id|unix_seqpacket_sendmsg}} ...
⚙️ Internals:
: {{The Linux Kernel/include|linux/in.h}}, {{The Linux Kernel/include|linux/ip.h}} – IPv4 address, protocol and header definitions
: {{The Linux Kernel/source|net/ipv4}} – IPv4 protocol stack
: {{The Linux Kernel/include|linux/ipv6.h}} – IPv6 definitions
: {{The Linux Kernel/source|net/ipv6}} – IPv6 protocol stack
: {{The Linux Kernel/source|net/tls}} – kernel TLS (since 4.13)
: {{The Linux Kernel/source|net/xdp}} – {{w|Express Data Path}} fast packet processing (since 4.8)
: {{The Linux Kernel/source|net/sched}} – traffic control and QoS
📚 References:
: {{The Linux Kernel/man|7|tcp}}
: {{The Linux Kernel/man|7|udp}}
: {{The Linux Kernel/man|7|raw}}
: {{The Linux Kernel/man|8|tc}} – traffic control
: {{w|Transport layer}} and {{w|Transmission_Control_Protocol|TCP}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dudp stress-ng --udp],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dudp%2Dflood --udp-flood],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dsctp --sctp]
=== RDMA ===
🚀 advanced topic
🗝️ Acronyms:
: IB — {{w|InfiniBand}}, an interconnect standard, competes with {{w|Ethernet}}, {{w|Fibre Channel}}
: IPoIB — IP network emulation layer over InfiniBand networks
: SRP — {{w|SCSI RDMA Protocol}}
: ULP — Upper-layer protocols
: iSER — {{w|iSCSI Extensions for RDMA}}
⚲ Interfaces:
: https://github.com/linux-rdma/rdma-core
: {{The Linux Kernel/man|8|rdma}}
: {{The Linux Kernel/man|7|rdma_cm}} — RDMA communication manager
: {{The Linux Kernel/source|include/uapi/rdma}} – user-space RDMA API definitions
: {{The Linux Kernel/source|include/rdma}} – kernel RDMA API definitions
⚙️ Internals:
: {{The Linux Kernel/source|drivers/infiniband}} – InfiniBand core and drivers
:: {{The Linux Kernel/source|drivers/infiniband/ulp}} — Upper-layer protocols
:: {{The Linux Kernel/source|drivers/infiniband/sw}} — software drivers
:: {{The Linux Kernel/source|drivers/infiniband/hw}} — hardware device drivers
📚 References:
: {{The Linux Kernel/doc|InfiniBand|infiniband}}
: {{The Linux Kernel/doc|InfiniBand and RDMA Interfaces|driver-api/infiniband.html}}
== {{w|Netfilter}} ==
🚀 advanced topic
⚲ Interface:
: {{The Linux Kernel/man|8|ebtables-nft}}
: {{The Linux Kernel/man|8|arptables-nft}}
: {{The Linux Kernel/man|8|xtables-nft}}
: {{The Linux Kernel/man|8|iptables}}
: {{The Linux Kernel/man|8|ip6tables}}
: {{The Linux Kernel/man|8|ebtables}}
: {{The Linux Kernel/man|8|arptables}}
: ipset
: {{The Linux Kernel/include|linux/netfilter.h}}
: {{The Linux Kernel/include|uapi/linux/netfilter}}
: {{The Linux Kernel/include|net/netfilter}}
: {{The Linux Kernel/include|net/netns/netfilter.h}}
: {{The Linux Kernel/include|linux/netfilter}}
: {{The Linux Kernel/include|linux/netfilter/x_tables.h}} – xtables match/target registration
⚙️ Internals:
: {{The Linux Kernel/source|net/netfilter}} – packet filtering framework
📚 References:
: {{The Linux Kernel/doc|Netfilter Sysfs variables|networking/netfilter-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter Conntrack Sysfs variables|networking/nf_conntrack-sysctl.html}}
: {{The Linux Kernel/doc|Netfilter’s flowtable infrastructure|networking/nf_flowtable.html}}
: {{w|nftables}}
: https://wiki.nftables.org/
: https://lwn.net/Kernel/Index/#Networking-Packet_filtering
== Network device {{w|Network interface|interfaces}} ==
⚲ Interfaces
: <code>ip -brief link show</code>
: <code>ls -l /sys/class/net</code>
: {{The Linux Kernel/id|devm_register_netdev}} registers {{The Linux Kernel/id|net_device}}, net_device_ops
: {{The Linux Kernel/id|sk_buff}} socket buffer (skb)
:: {{The Linux Kernel/id|dev_queue_xmit}} queues socket buffers into transmit queue
: {{The Linux Kernel/include|linux/netdevice.h}}
: {{The Linux Kernel/include|linux/skbuff.h}}
👁 Example: {{The Linux Kernel/source|drivers/net/loopback.c}} - the most famous and simple interface '''lo'''
⚙️ Internals
: {{The Linux Kernel/source|net/core/dev.c}} – network device operations core
: function {{The Linux Kernel/id|loopback_xmit}} receives skb and passes it back with {{The Linux Kernel/id|netif_rx}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Drawsock stress-ng --rawsock],
[https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dicmp%2Dflood --icmp-flood]
📚 Further reading
: {{The Linux Kernel/man|8|ip-link}} – network device configuration
: {{The Linux Kernel/man|8|ip-stats}} – manage and show interface statistics
: {{The Linux Kernel/man|7|netdevice}} – low-level access to Linux network devices
: {{The Linux Kernel/man|7|packet}} – packet interface on device level
: [https://www.coverfire.com/articles/queueing-in-the-linux-network-stack/ Queueing in the Linux Network Stack]
💾 Historical
: [http://www.tldp.org/LDP/tlk/net/net.html LDP TLK Chapter 10 Networks]
== Network drivers==
: {{The Linux Kernel/include|linux/if_ether.h}} – IEEE 802.3 Ethernet constants and header
:{{The Linux Kernel/include|linux/etherdevice.h}}
: {{The Linux Kernel/id|netif_rx}} - before NAPI
: {{The Linux Kernel/id|input_pkt_queue}}
: {{w|New_API|NAPI}}
: [https://wiki.linuxfoundation.org/networking/napi NAPI Driver design]
:: ⚲ API:
::: {{The Linux Kernel/id|netif_napi_add}} adds {{The Linux Kernel/id|napi_struct}}
::: {{The Linux Kernel/id|napi_schedule}} - called by an IRQ handler to schedule a poll
::: {{The Linux Kernel/id|netif_receive_skb}} - instead netif_rx, finally calls {{The Linux Kernel/id|ip_rcv}}
::: {{The Linux Kernel/id|napi_complete_done}} - called from custom napi->poll()
:: ⚙️ Internals:
::: {{The Linux Kernel/id|net_dev_init}}
:::: {{The Linux Kernel/id|net_rx_action}}
::::: {{The Linux Kernel/id|napi_poll}} calls custom napi->poll()
:: 👁 example
::: {{The Linux Kernel/id|e1000_intr}} calls {{The Linux Kernel/id|__napi_schedule}}
::: custom napi->poll() {{The Linux Kernel/id|e1000e_poll}} calls {{The Linux Kernel/id|napi_complete_done}}
: {{The Linux Kernel/id|ether_setup}} setups Ethernet network device
: 👁 An example of Ethernet driver: {{The Linux Kernel/id|e1000_probe}}
⚙️ Internals:
: {{The Linux Kernel/source|drivers/net}} – network device drivers
: {{The Linux Kernel/source|drivers/net/wireless}} – wireless drivers
: {{The Linux Kernel/source|drivers/net/ethernet}} – Ethernet drivers
: {{The Linux Kernel/source|net/wireless}} – cfg80211, wireless configuration API and userspace interface via {{The Linux Kernel/man|8|iw}}
: {{The Linux Kernel/source|net/mac80211}} – mac80211, software 802.11 MAC layer used by most WiFi drivers
: {{The Linux Kernel/source|net/bluetooth}} – {{w|Bluetooth}} protocol stack
: {{The Linux Kernel/source|net/bridge}} – {{The Linux Kernel/doc|Ethernet bridging|networking/bridge.html}}
📚 References:
: {{The Linux Kernel/man|8|ethtool}} – query or control network driver and hardware settings
: [[w:Data link layer|Data link layer]]: [[w:Ethernet|Ethernet]]
: [https://lwn.net/Articles/358910/ GRO - Generic Receive Offload]
: {{The Linux Kernel/doc|Segmentation Offloads|networking/segmentation-offloads.html}}
: https://wireless.wiki.kernel.org
<hr>
💾 ''Historical'':
: [http://www.xml.com/ldd/chapter/book/ch14.html LDD2:Network Drivers]
: [http://lwn.net/images/pdf/LDD3/ch17.pdf LDD3:Network Drivers]
: [http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-8.html Kernel Analysis: Networking, 2003]
: [https://web.archive.org/web/20111030030517/http://www.linuxfoundation.org/collaborate/workgroups/networking/networkoverview network_overview]
📖 Further reading about networking
: {{The Linux Kernel/doc|Networking interfaces|subsystem-apis.html#networking-interfaces}}
:: {{The Linux Kernel/doc|Networking|networking}}
: https://lwn.net/Kernel/Index/#Networking
: https://lartc.org/ – Linux Advanced Routing & Traffic Control
: {{The Linux Kernel/man|8|ip}} – show / manipulate routing, network devices, interfaces and tunnels
: {{The Linux Kernel/man|8|tc}} – show / manipulate traffic control settings
: [https://github.com/iovisor/bcc/blob/master/README.md#network-and-sockets-tools bcc/ebpf networking tools]
: [https://github.com/cilium/cilium eBPF-based Networking, Security, and Observability]
: [https://retis.readthedocs.io/ Retis – tracing packets in the Linux networking stack & friends]
{{BookCat}}
jmzo8cedvjq1mc5t2sah4q8k4t4rx90
Aros/User/Applications
0
237399
4641565
4640767
2026-06-28T18:05:24Z
Jeff1138
301139
4641565
wikitext
text/x-wiki
==Introduction==
[[#Graphical Image Editing Art]]
[[#Office Application]]
[[#Audio]]
[[#Misc Application]]
[[#Games & Emulation]]
[[#Application Guides]]
[[#top|...to the top]]
[[#top|...to the top]]
Most apps can be opened on the Workbench (aka publicscreen pubscreen) which is the default display option but can offer a custom one set to your configurations (aka custom screen mode promotion). These custom ones tend to stack so the possible use of A-M/A-N method of switching between full screens and the ability to pull down screens as well
If you are interested in creating or porting new software, see [http://en.wikibooks.org/wiki/Aros/Developer/Docs here]
{| class="wikitable sortable"
|-
!width:30%;|Internet Applications
!width:10%;|AROS(x86)
!width:10%;|Commodore-Amiga OS 3.1 (68k)
!width:10%;|Hyperion OS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->Web Online Browser [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/browser Odyssey 2.0], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1175&highlight=odyssey&rowstart=100 Odyssey 3.0],
|<!--Amiga OS-->[https://aminet.net/comm/www Amelinium], [https://blog.alb42.de/programs/amifox/ amifox] with [https://github.com/alb42/wrp wrp server], IBrowse*, Voyager*, [https://github.com/amigazen/aweb3/ AWeb 3.6 src], [https://github.com/matjam/aweb AWeb Src], [http://aminet.net/package/comm/www/NetSurf-m68k-sources Netsurf], [],
|<!--AmigaOS4-->[ Odyssey OWB], [ Timberwolf (Firefox port 2011)], [http://amigaworld.net/modules/newbb/viewtopic.php?forum=32&topic_id=32847 OWB-mui], [http://strohmayer.org/owb/ OWB-Reaction], IBrowse*, [http://os4depot.net/index.php?function=showfile&file=network/browser/aweb.lha AWeb], Voyager, [http://www.os4depot.net/index.php?function=browse&cat=network/browser Netsurf],
|<!--MorphOS-->Wayfarer, [http://fabportnawak.free.fr/owb/ Odyssey OWB], [ Netsurf], IBrowse*, AWeb, [],
|-
|<!--Sub Menu-->YouTube, Dailymotion website downloading videos audio [https://github.com/yt-dlp/yt-dlp yt-dlp], [],
|<!--AROS-->[], [https://blog.alb42.de/amitube/ Amitube],
|<!--Amiga OS-->[https://blog.alb42.de/amitube/ Amitube], [ smtube],
|<!--AmigaOS4-->[https://blog.alb42.de/amitube/ Amitube], getVideo, Tubexx, [https://github.com/walkero-gr/aiostreams aiostreams],
|<!--MorphOS-->[ ytsearch], [https://blog.alb42.de/amitube/ Amitube], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 getVideo], Tubexx
|-
|<!--Sub Menu-->E-mailing SMTP POP3 IMAP based
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/email SimpleMail], [http://sourceforge.net/projects/simplemail/files/ src], [https://github.com/jens-maus/yam YAM]
|<!--Amiga OS-->[http://sourceforge.net/projects/simplemail/files/ SimpleMail], [https://github.com/jens-maus/yam YAM]
|<!--AmigaOS4-->SimpleMail, YAM,
|<!--MorphOS--> SimpleMail, YAM
|-
|<!--Sub Menu-->IRC
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/chat WookieChat], [https://sourceforge.net/projects/wookiechat/ Wookiechat src], [http://archives.arosworld.org/index.php?function=browse&cat=network/chat AiRcOS], Jabberwocky,
|<!--Amiga OS-->Wookiechat, AmIRC
|<!--AmigaOS4-->Wookiechat
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=5 Wookiechat], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 AmIRC],
|-
|<!--Sub Menu-->Instant Messaging IM like [https://github.com/BlitterStudio/amidon Hollywood lang based Mastodon client], BlueSky AT protocol, Facebook(TM), Twitter X (TM), Bitlbee IRC Gateway and others
|<!--AROS-->[https://github.com/kaffeine1/telegram-amiga telegram-amiga], [http://archives.arosworld.org/index.php?function=browse&cat=network/chat jabberwocky],
|<!--Amiga OS-->[http://amitwitter.sourceforge.net/ AmiTwitter], CLIMM, SabreMSN, jabberwocky,
|<!--AmigaOS4-->[http://amitwitter.sourceforge.net/ AmiTwitter], SabreMSN,
|<!--MorphOS-->[http://amitwitter.sourceforge.net/ AmiTwitter], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 PolyglotNG], SabreMSN,
|-
|<!--Sub Menu-->Torrents
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/p2p ArTorr],
|<!--Amiga OS-->
|<!--AmigaOS4-->CTorrent, Transmission
|<!--MorphOS-->MLDonkey, Beehive, [http://morphos.lukysoft.cz/en/vypis.php?kat=5 Transmission], CTorrent,
|-
|<!--Sub Menu-->FTP
|<!--AROS-->Plugin included with Dopus Magellan, MarranoFTP,
|<!--Amiga OS-->[http://aminet.net/package/comm/tcp/AmiFTP AmiFTP], AmiTradeCenter, ncFTP,
|<!--AmigaOS4-->
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=5 Pftp], [http://aminet.net/package/comm/tcp/AmiFTP-1.935-OS4 AmiFTP],
|-
|<!--Sub Menu-->WYSIWYG Web Site Editor
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Internet Radio Streaming Audio [http://www.gnu.org/software/gnump3d/ gnump3d], [http://www.icecast.org/ Icecast2] Server (Broadcast) and Client (Listen), [ mpd], [http://darkice.sourceforge.net/ DarkIce], [http://www.dyne.org/software/muse/ Muse],
|<!--AROS-->Mplayer (Icecast Client only),
|<!--Amiga OS-->[https://github.com/sandlbn/TuneFinder TuneFinder C Src], [https://github.com/sandlbn/TuneFinderMUI TuneFinderMUI], [http://amigazeux.net/anr/ AmiNetRadio], [], [],
|<!--AmigaOS4-->[http://www.tunenet.co.uk/ Tunenet],
|<!--MorphOS-->Mplayer, AmiNetRadio,
|-
|<!--Sub Menu-->VoIP (Voice over IP) with SIP Client (Session Initiation Protocol) or Asterisk IAX2 Clients Softphone (skype like)
|<!--AROS-->
|<!--Amiga OS-->AmiPhone with Speak Freely,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Weather Forecast
|<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ WeatherBar], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench AWeather], []
|<!--Amiga OS-->[http://amigazeux.net/wetter/ Wetter], [https://github.com/emartisoft/AmiWeatherForecasts AmiWeatherForecasts src],
|<!--AmigaOS4-->[http://os4depot.net/?function=showfile&file=utility/workbench/flipclock.lha FlipClock],
|<!--MorphOS-->[http://amigazeux.net/wetter/ Wetter],
|-
|<!--Sub Menu-->Street Road Maps Route Planning GPS Tracking
|<!--AROS-->[https://blog.alb42.de/programs/muimapparium/ MuiMapparium] [https://build.alb42.de/ Build of MuiMapp versions],
|<!--Amiga OS-->AmiAtlas*, UKRoutePlus*, [http://blog.alb42.de/ AmOSM],
|<!--AmigaOS4-->
|<!--MorphOS-->[http://blog.alb42.de/programs/mapparium/ Mapparium],
|-
|<!--Sub Menu-->Clock and Date setting from the internet (either ntp or websites) [https://www.timeanddate.com/worldclock/ World Clock], [http://www.time.gov/ NIST], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/misc ntpsync],
|<!--Amiga OS-->ntpsync
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Newsgroups
|<!--AROS-->
|<!--Amiga OS-->[http://newscoaster.sourceforge.net/ Newscoaster], [https://github.com/jens-maus/newsrog NewsRog], [ WorldNews],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|}
<nowiki>*</nowiki> Commercial product.
==Graphical Image Editing Art==
{| class="wikitable sortable"
|-
!width:30%;|Image Editing
!width:10%;|AROS(x86)
!width:10%;|Commodore-Amiga OS 3.1(68k)
!width:10%;|Hyperion OS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->Pixel Raster Artwork [https://github.com/LibreSprite/LibreSprite LibreSprite based on GPL aseprite], [https://github.com/abetusk/hsvhero hsvhero], [],
|<!--AROS-->[https://sourceforge.net/projects/zunetools/files/ZunePaint/ ZunePaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit LunaPaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit GrafX2], [ LodePaint needs OpenGL],
|<!--Amiga OS-->[http://www.amigaforever.com/classic/download.html PPaint], GrafX2, [https://github.com/grovdata/Amiga_Sources/blob/master/software.md DeluxePaint], [http://www.amiforce.de/perfectpaint/perfectpaint.php PerfectPaint], Zoetrope, Brilliance2*,
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/edit LodePaint], GrafX2,
|<!--MorphOS-->Sketch, Pixel*, GrafX2, [http://morphos.lukysoft.cz/en/vypis.php?kat=3 LunaPaint]
|-
|<!--Sub Menu-->Image viewing
|<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LookHere], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LoView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer PicShow] , [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album],
|<!--Amiga OS-->PicShow, PicView, Photoalbum,
|<!--AmigaOS4-->WarpView, PicShow, flPhoto, Thumbs, [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album],
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album]
|-
|<!--Sub Menu-->Photography retouching / Image Manipulation like Photoshop(tm)
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOEffects], [https://sourceforge.net/projects/zunetools/files/ ZunePaint], [http://sourceforge.net/projects/zunetools/files/ ZuneView],
|<!--Amiga OS-->[ Tecsoft Video Paint aka TVPaint], Photogenics*, ArtEffect*, ImageFX*, XiPaint, fxPaint, ImageMasterRT, Opalpaint,
|<!--AmigaOS4-->WarpView, flPhoto, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit Photocrop]
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], ImageFX*,
|-
|<!--Sub Menu-->Manage RAW picture folder galleries like Darktable, RAWtherapy, etc
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Graphic Format Converter - ICC profile support sRGB, Adobe RGB, XYZ and linear RGB
|<!--AROS-->
|<!--Amiga OS-->GraphicsConverter, ImageStudio, [http://www.coplabs.org/artpro.html ArtPro]
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Thumbnail Generator [],
|<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=utility/shell Thumbnail Generator]
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Icon Editor
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/iconedit Archives], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench Icon Toolbox],
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/iconedit IconEditor]
|<!--MorphOS-->
|-
|<!--Sub Menu-->2D Pixel Art Animation
|<!--AROS-->Lunapaint
|<!--Amiga OS-->PPaint, AnimatED, Scala*, GoldDisk MovieSetter*, Walt Disney's Animation Studio*, ProDAD*, [https://github.com/historicalsource/DeluxePaint DeluxePaint src], Brilliance
|<!--AmigaOS4-->
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 Titler]
|-
|<!--Sub Menu-->2D SVG based MovieSetter type
|<!--AROS-->
|<!--Amiga OS-->MovieSetter*, Fantavision*
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Morphing
|<!--AROS-->[ GLMorph]
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->2D Cad (qcad->LibreCAD, etc.)
|<!--AROS-->
|<!--Amiga OS-->Xcad, MaxonCAD
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->3D Cad like FreeCad, BRL-CAD, OpenSCAD, AvoCADo, etc. using dxf, obj (vertices), blend,
|<!--AROS-->
|<!--Amiga OS-->XCad3d*, DynaCADD*, Cycas,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->3D Model Rendering of glft (json) gbl (png jpg), usdz (USD files with materials, textures, and animations), FBX Filmbox is a proprietary Autodesk format,
|<!--AROS-->POV-Ray
|<!--Amiga OS-->[http://www.discreetfx.com./amigaproducts.html CINEMA 4D]*, POV-Ray, Lightwave3D*, Real3D*, Caligari24*, Reflections/Monzoom*, [https://github.com/privatosan/RayStorm Raystorm src], Tornado 3D
|<!--AmigaOS4-->Blender, POV-Ray, Yafray
|<!--MorphOS-->Blender, POV-Ray, Yafray
|-
|<!--Sub Menu-->3D Format Converter [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=showfile&file=graphics/convert/ivcon.lha IVCon]
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Screen grabbing display
|<!--AROS-->[ Screengrabber], [http://archives.arosworld.org/index.php?function=browse&cat=utility/misc snapit], [http://archives.arosworld.org/index.php?function=browse&cat=video/record screen recorder], []
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Grab graphics music from apps [https://github.com/Malvineous/ripper6 ripper6], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|}
<nowiki>*</nowiki> Commercial product.
[[#top|...to the top]]
==Office Application==
{| class="wikitable sortable"
|-
!width:30%;|Office
!width:10%;|AROS (x86)
!width:10%;|[http://en.wikipedia.org/wiki/Amiga_software Commodore-Amiga OS 3.1] (68k)
!width:10%;|[http://en.wikipedia.org/wiki/AmigaOS_4 Hyperion OS4] (PPC)
!width:10%;|[http://en.wikipedia.org/wiki/MorphOS MorphOS] (PPC)
|-
|<!--Sub Menu-->Word-processing
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=office/wordprocessing Cinnamon Writer], [https://finalwriter.godaddysites.com/ Final Writer 7*], [https://github.com/sodero/MUI-Vim/releases MUI-Vim], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1995&rowstart=20&pid=12668#post_12668 Slovo], [],
|<!--AmigaOS-->[ Softwood FinalCopy II*], Haage AmigaWriter*, Digita WordWorth*, Softwood FinalWriter*, Micro-Systems Excellence 3*, Arnor Protext, Rashumon, [ InterWord], [ KindWords], [WordPerfect], [ New Horizons Flow], [ CygnusEd Pro], [ Micro-systems Scribble],
|<!--AmigaOS4-->AbiWord, [ CinnamonWriter]
|<!--MorphOS-->[ Cinnamon Writer], [http://www.meta-morphos.org/viewtopic.php?topic=1246&forum=53 scriba], [http://morphos.lukysoft.cz/en/index.php Papyrus Office],
|-
|<!--Sub Menu-->Spreadsheets
|<!--AROS-->[https://blog.alb42.de/programs/leu/ Leu], [https://archives.arosworld.org/index.php?function=browse&cat=office/spreadsheet],
|<!--AmigaOS-->[https://aminet.net/package/biz/spread/ignition-src Ignition Src 1.3], [MaxiPlan 500 Plus], [OXXI Plan/IT v2.0 Speadsheet], [ Superplan], [ Creative Developments TurboCalc], [ ProCalc], [ InterSpread], [Digita DGCalc], [ Gold Disk Advantage], [ Micro-systems Analyze!]
|<!--AmigaOS4-->Gnumeric, [https://ignition-amiga.sourceforge.net/ Ignition],
|<!--MorphOS-->[ ignition], [http://morphos.lukysoft.cz/en/vypis.php Papyrus Office],
|-
|<!--Sub Menu-->Presentations
|<!--AROS-->[http://www.hollywoood-mal.com/ Hollywood]*,
|<!--Amiga OS-->[http://www.hollywoood-mal.com/ Hollywood]*, MediaPoint, PointRider, Scala*,
|<!--Amiga OS4-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider
|<!--MorphOS-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider
|-
|<!--Sub Menu-->Databases
|<!--AROS-->[http://sdb.freeforums.org/ SDB], [http://archives.arosworld.org/index.php?function=browse&cat=office/database BeeBase],
|<!--Amiga OS-->Precision Superbase 4 Pro*, Arnor Prodata*, BeeBase, Datastore, FinalData*, AmigaBase, Fiasco, Twist2*, [Digita DGBase], [],
|<!--AmigaOS4-->BeeBase, SQLite,
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=6 BeeBase],
|-
|<!--Sub Menu-->PDF Viewing and editing digital signatures
|<!--AROS-->[http://sourceforge.net/projects/arospdf/ ArosPDF via splash], [https://github.com/wattoc/AROS-vpdf vpdf wip],
|<!--Amiga OS-->APDF
|<!--AmigaOS4-->AmiPDF
|<!--MorphOS-->APDF, vPDF,
|-
|<!--Sub Menu-->Printing
|<!--AROS-->Postscript 3 laser printers and Ghostscript internal, [ GutenPrint],
|<!--Amiga OS-->[http://www.irseesoft.de/tp_what.htm TurboPrint]*
|<!--AmigaOS4-->(some native drivers),
|<!--MorphOS-->early TurboPrint included,
|-
|<!--Sub Menu-->Note Taking markdown support like Obsidian like, joplin, OneNote, EverNotes, xournalpp, etc
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Study and analyse, collect, organize, annotate, cite, and share
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->PIM Personal Information Manager - Day Diary Planner Calendar App
|<!--AROS-->[ ], [ ], [ ],
|<!--Amiga OS-->Digita Organiser*, On The Ball, Everyday Organiser, [ Contact Manager],
|<!--AmigaOS4-->AOrganiser,
|<!--MorphOS-->[http://polymere.free.fr/orga_en.html PolyOrga],
|-
|<!--Sub Menu-->Accounting
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=office/misc ETB], LoanCalc, [ ], [ ], [ ],
|[ Digita Home Accounts2], Accountant, Small Business Accounts, Account Master, [ Amigabok],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Project Management Research
|<!--AROS-->
|<!--Amiga OS-->SuperGantt, SuperPlan,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->System Wide Search
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=utility/filetool Finder], [], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->System Wide Dictionary - multilingual [http://sourceforge.net/projects/babiloo/ Babiloo], [http://code.google.com/p/stardict-3/ StarDict],
|<!--AROS-->[ ],
|<!--AmigaOS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->System wide Thesaurus - multi lingual
|<!--AROS-->[ ],
|Kuma K-Roget*,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Sticky Desktop Notes (post it type)
|<!--AROS-->[http://aminet.net/package/util/wb/amimemos.i386-aros AmiMemos], [https://aminet.net/package/util/wb/amimemos.src-aros AmiMemos Src], [],
|<!--Amiga OS-->[http://aminet.net/package/util/wb/StickIt-2.00 StickIt v2],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->DTP Desktop Publishing
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOPublisher],
|<!--Amiga OS-->[http://pagestream.org/ Pagestream]*, Professional Pro Page*, Saxon Publisher, Pagesetter, PenPal,
|<!--AmigaOS4-->[http://pagestream.org/ Pagestream]*
|<!--MorphOS-->[http://pagestream.org/ Pagestream]*
|-
|<!--Sub Menu-->Scanning
|<!--AROS-->[ SCANdal], [],
|<!--Amiga OS-->FxScan*, ScanQuix*
|<!--AmigaOS4-->SCANdal (Sane)
|<!--MorphOS-->SCANdal
|-
|<!--Sub Menu-->OCR
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/convert gOCR]
|<!--AmigaOS-->
|<!--AmigaOS4-->
|<!--MorphOS-->[http://morphos-files.net/categories/office/text Tesseract]
|-
|<!--Sub Menu-->Text Editing
|<!--AROS-->Jano Editor (already installed as Editor), [http://archives.arosworld.org/index.php?function=browse&cat=development/edit EdiSyn], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit Annotate], [https://archives.arosworld.org/index.php?function=browse&cat=development/edit Vim], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd] [https://github.com/vidarh/FrexxEd src], [ NoWinEd],
|<!--Amiga OS-->[https://aminet.net/package/text/edit/TurboText20 TurboText20 ttx], Annotate, MicroGoldED/CubicIDE*, CygnusED*, Protext*, NoWinED,
|<!--AmigaOS4-->Notepad, Annotate, CygnusED*, NoWinED,
|<!--MorphOS-->MorphOS ED, NoWinED, GoldED/CubicIDE*, CygnusED*, Annotate,
|-
|<!--Sub Menu-->Office Fonts [http://sourceforge.net/projects/fontforge/files/fontforge-source/ Font Designer]
|<!--AROS-->[ ], [ ],
|<!--Amiga OS-->TypeSmith*, SaxonScript (GetFont Adobe Type 1),
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Drawing Vector
|<!--AROS-->[http://sourceforge.net/projects/amifig/ ZuneFIG previously AmiFIG]
|<!--Amiga OS-->Drawstudio*, ProVector*, ArtExpression*, Professional Draw*, AmiFIG, MetaView, [https://gitlab.com/amigasourcecodepreservation/designworks Design Works Src], [],
|<!--AmigaOS4-->MindSpace, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit amifig],
|<!--MorphOS-->SteamDraw, [http://aminet.net/package/gfx/edit/amifig amiFIG],
|-
|<!--Sub Menu-->video conferencing (jitsi)
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->source code hosting
|<!--AROS-->Gitlab,
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Remote Desktop (server)
|<!--AROS-->[http://sourceforge.net/projects/zunetools/files/VNC_Server ArosVNCServer],
|<!--Amiga OS-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC], [http://dspach.free.fr/amiga/avnc/index.html AVNC]
|<!--AmigaOS4-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC]
|MorphVNC, vncserver
|-
|<!--Sub Menu-->Remote Desktop (client) login and connect to another machine
|<!--AROS-->[https://sourceforge.net/projects/zunetools/files/VNC_Client/ ArosVNC], [http://archives.arosworld.org/index.php?function=browse&cat=network/misc rdesktop],
|<!--Amiga OS-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://dspach.free.fr/amiga/vva/index.html VVA], [http://www.hd-zone.com/ RDesktop]
|<!--AmigaOS4-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop]
|[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop]
|-
|<!--Sub Menu-->notifications
|<!--AROS-->
|<!--Amiga OS-->Ranchero
|<!--AmigaOS4-->Ringhio
|<!--MorphOS-->MagicBeacon
|-
|<!--Sub Menu-->Biometric facial logins and fingerprint security features
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|}
<nowiki>*</nowiki> Commercial product.
[[#top|...to the top]]
==Audio==
{| class="wikitable sortable"
|-
!width:30%;|Audio
!width:10%;|AROS(x86)
!width:10%;|Commodore-Amiga OS 3.1(68k)
!width:10%;|Hyperion OS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->Playing playback Audio like MP3, [https://github.com/chrg127/gmplayer NSF], [https://github.com/kode54/lazyusf miniusf .usflib], [], etc
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer], [ HarmonyPlayer hp], [http://www.a500.org/downloads/audio/index.xhtml playcdda] CDs, [ WildMidi Player], [https://bszili.morphos.me/ UADE mod player], [], [RNOTunes ], [ mp3Player], [],
|<!--Amiga OS-->AmiNetRadio, AmigaAmp, playOGG,
|<!--AmigaOS4-->TuneNet, SimplePlay, AmigaAmp, TKPlayer
|AmiNetRadio, Mplayer, Kaya, AmigaAmp
|-
|<!--Sub Menu-->Editing Audio
|<!--AROS-->[ Audio Evolution 4]
|<!--Amiga OS-->[ Samplitude Opus Key], [https://sourceforge.net/projects/hd-rec/ HD-Rec Src], [http://www.sonicpulse.de/eng/news.html SoundFX],
|<!--AmigaOS4-->[https://sourceforge.net/projects/hd-rec/ HD-Rec], AmiSoundED, [http://os4depot.net/?function=showfile&file=audio/record/audioevolution4.lha Audio Evolution 4]
|[http://www.hd-rec.de/HD-Rec/index.php?site=home HD-Rec],
|-
|<!--Sub Menu-->Editing Tracker Music
|<!--AROS-->[https://github.com/hitchhikr/protrekkr Protrekkr], [ Schism Tracker], [http://archives.arosworld.org/index.php?function=browse&cat=audio/tracker MilkyTracker], [http://www.hivelytracker.com/ HivelyTracker], [ Radium in AROS already], [http://www.a500.org/downloads/development/index.xhtml libMikMod],
|<!--Amiga OS-->MilkyTracker, HivelyTracker, DigiBooster, Octamed SoundStudio,
|<!--AmigaOS4-->MilkyTracker, HivelyTracker, GoatTracker
|MilkyTracker, GoatTracker, DigiBooster,
|-
|<!--Sub Menu-->Editing Music [], [https://github.com/kmatheussen/camd CAMD] and/or staves and notes manuscript
|<!--AROS-->[http://bnp.hansfaust.de/ Bars and Pipes for AROS], [ Audio Evolution], [],
|<!--Amiga OS-->[http://bnp.hansfaust.de/ Bars'n'Pipes], MusicX* David "Talin" Joiner & Craig Weeks (for Notator-X), Deluxe Music Construction 2*, [https://github.com/timoinutilis/midi-sequencer-amigaos Horny c Src], HD-Rec, [https://aminet.net/package/mus/midi/dominatorV1_51 Dominator],
|<!--AmigaOS4-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Rockbeat, [http://bnp.hansfaust.de/download.html Bars'n'Pipes], [http://os4depot.net/index.php?function=browse&cat=audio/edit Horny], Audio Evolution 4,
|<!--MorphOS-->Bars'n'Pipes,
|-
|<!--Sub Menu-->Sound Sampling
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/record Audio Evolution 4], [http://www.imica.net/SitePortalPage.aspx?siteid=1&did=162 Quick Record], [https://archives.arosworld.org/index.php?function=browse&cat=audio/misc SOX to get AIFF 16bit files], [https://github.com/aros-development-team/AROS/tree/master/workbench/tools/AHIRecord AHIRecord],
|<!--Amiga OS-->[https://aminet.net/package/mus/edit/AudioEvolution3_src Audio Evolution 3 c src], [ Samplitude-MS Opus Key], Audiomaster IV*,
|<!--AmigaOS4-->[https://github.com/timoinutilis/phonolith-amigaos phonolith c src], HD-Rec, Audio Evolution 4,
|<!--MorphOS-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Audio Evolution 4,
|-
|<!--Sub Menu-->Live Looping or Audio Misc - Groovebox like
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->CD/DVD burn
|[https://code.google.com/p/amiga-fryingpan/ FryingPan],
|<!--Amiga OS-->FryingPan, [http://www.estamos.de/makecd/#CurrentVersion MakeCD],
|<!--AmigaOS4-->FryingPan, AmiDVD,
|[http://www.amiga.org/forums/printthread.php?t=58736 FryingPan], Jalopeano,
|-
|<!--Sub Menu-->CD/DVD audio rip
|Lame, [http://www.imica.net/SitePortalPage.aspx?siteid=1&cfid=0&did=167 Quick CDrip],
|<!--Amiga OS-->Lame,
|<!--AmigaOS4-->Lame,
|Lame,
|-
|<!--Sub Menu-->MP3 v1 and v2 Tagger
|<!--AROS-->id3ren (v1), [http://archives.arosworld.org/index.php?function=browse&cat=audio/edit mp3info],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|
|-
|<!--Sub Menu-->Audio Convert
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/misc Sox], [],
|<!--Amiga OS-->[http://aminet.net/package/mus/misc/SoundBox SoundBox], [http://aminet.net/package/mus/misc/SoundBoxKey SoundBox Key], [http://aminet.net/package/mus/edit/SampleE SampleE], sox
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->DJ mixing jamming
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Radio Automation Software [http://www.rivendellaudio.org/ Rivendell], [http://code.campware.org/projects/livesupport/report/3 Campware LiveSupport], [http://www.sourcefabric.org/en/airtime/ SourceFabric AirTime], [http://www.ohloh.net/p/mediabox404 MediaBox404],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Speakers Audio Sonos Mains AC networked wired controlled
*2005 ZP100 with ZP80
*2008 Zoneplayer ZP120 (multi-room wireless amp) ZP90 receiver only with CR100 controller,
*2009 ZonePlayer S5,
*2010 BR100 wireless Bridge (no support),
*2011 Play:3
*2013 Bridge (no support), Play:1,
*2016 Arc, Play:1,
*Beam (Gen 2), Playbar, Ray, Era 100, Era 300, Roam, Move 2,
*Sub (Gen 3), Sub Mini, Five, Amp S2
|<!--AROS-->SonosController
|<!--Amiga OS-->SonosController
|<!--AmigaOS4-->SonosController
|<!--MorphOS-->SonosController
|-
|<!--Sub Menu-->Smart Speakers
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|}
<nowiki>*</nowiki> Commercial product.
[[#top|...to the top]]
==Video Creativity and Production==
{| class="wikitable sortable"
|-
!width:30%;|Video
!width:10%;|AROS(x86)
!width:10%;|Commodore-Amiga OS 3.1(68k)
!width:10%;|Hyperion OS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->Playing Video
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer VAMP], [http://www.a500.org/downloads/video/index.xhtml CDXL player], [http://www.a500.org/downloads/video/index.xhtml IffAnimPlay], [],
|<!--Amiga OS-->Frogger*, AMP2, MPlayer, RiVA*, MooViD*,
|<!--AmigaOS4-->DvPlayer, MPlayer
|<!--MorphOS-->MPlayer, Frogger, AMP2, VLC
|-
|<!--Sub Menu-->Streaming Video and game streaming like OBS studio, Parsec, [https://github.com/lizardbyte/sunshine sunshine], [https://github.com/moonlight-stream/moonlight-qt moonlight], etc
|<!--AROS-->Mplayer,
|<!--Amiga OS-->
|<!--AmigaOS4-->Mplayer, Gnash, Tubexx
|<!--MorphOS-->Mplayer, OWB, Tubexx
|-
|<!--Sub Menu-->Playing DVD
|<!--AROS-->[http://a-mc.biz/ AMC]*, Mplayer
|<!--Amiga OS-->AMP2, Frogger
|<!--AmigaOS4-->[http://a-mc.biz/ AMC]*, DvPlayer*, AMP2,
|<!--MorphOS-->Mplayer
|-
|<!--Sub Menu-->Screen Recording
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/record Screenrecorder], [ ], [ ], [ ], [ ],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->Screenrecorder,
|-
|<!--Sub Menu-->Create and Edit Individual Video NLE
|<!--AROS-->[ Mencoder], [ Quick Videos], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit AVIbuild], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/misc FrameBuild], FFMPEG,
|<!--Amiga OS-->[ MainConcept Mainactor Broadcast*], [http://en.wikipedia.org/wiki/Video_Toaster Video Toaster*], MacroSystem MovieShop 4.3*, proDAD Adorage*, [ IOSpirit VHI studio]*, [Gold Disk ShowMaker], [],
|<!--AmigaOS4-->FFMpeg/GUI
|<!--MorphOS-->Blender, Mencoder, FFmpeg
|-
|<!--Sub Menu-->Subtitle editor
|<!--AROS-->[https://aminet.net/package/text/edit/Slarti_Arosx86ABIv0 Slarti_Arosx86ABIv0], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->IP-based video production workflows with High Dynamic Range (HDR), 10-bit color collaborative NDI,
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Blogging like Lemmy or kbin
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->VR face recognition for Vtubers
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->VR chatting Live 2D models with Cubism type editor
<pre>
Model data (cmo3)
Basic motions (can3)
Background image (png)
Set of files for embedding (runtime folder)
• Model data (moc3)
• Motion data (motion3.json)
• Model settings file (model3.json)
• Physics settings file (physics3.json)
• Display auxiliary file (cdi3.json)
</pre>
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->VR chatting chatters .VRML models - standardized 3D file format for VR avatars
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->V-tubers V-tubing like Vseeface with Openseeface tracker or Vpuppr (virtual puppet project) for 2d / 3d art models rigging rigged LIV
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|}
<nowiki>*</nowiki> Commercial product.
[[#top|...to the top]]
==Misc Application==
{| class="wikitable sortable"
|-
!width:30%;|Misc Application
!width:10%;|AROS(x86)
!width:10%;|Commodore-Amiga OS 3.1 (68k)
!width:10%;|Hyperion OS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->File Management
|<!--AROS-->DOpus4, [https://github.com/BlitterStudio/dopus5 DOpus Magellan aka DOpus 5], [ Scalos], [ ],
|<!--Amiga OS-->DOpus2, DOpus 4, [http://sourceforge.net/projects/dopus5allamigas/files/?source=navbar DOpus Magellan DOpus5], ClassAction, FileMaster, [http://www.amiga.org/forums/showthread.php?t=4897 DirWork 2]*, [https://github.com/RudolphRiedel/DiskMaster2 DiskMaster2 src],
|<!--AmigaOS4-->DOpus4, DOpus5, Filer, AmiDisk
|<!--MorphOS-->DOpus4, DOpus5
|-
|<!--Sub Menu-->File Verification / Repair
|<!--AROS-->md5 (works in linux compiling shell), [http://archives.arosworld.org/index.php?function=browse&cat=utility/filetool workpar2] (PAR2), [http://zakalwe.fi/~shd/foss/cksfv/files/ compile cksfv from website],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->Par2,
|-
|Application Installer
|<!--AROS-->[], [ InstallerNG],
|<!--Amiga OS-->InstallerNG, Grunch,
|<!--AmigaOS4-->Jack
|<!--MorphOS-->Jack
|-
|<!--Sub Menu-->Compression archiver [https://github.com/FS-make-simple/paq9a paq9a], [],
|<!--AROS-->XAD system is a toolkit designed for handling various file and disk archiver
|<!--Amiga OS-->
|<!--AmigaOS4-->[https://aminet.net/package/util/pack/decrunchmania_os4 Crunchmania CrM2 depacker],
|<!--MorphOS-->
|-
|<!--Sub Menu-->Binary Hexadecimal Editor
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/edit Zaphod], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Repository
|<!--AROS-->[ Git]
|<!--Amiga OS-->
|<!--AmigaOS4-->Git
|<!--MorphOS-->
|-
|<!--Sub Menu-->Filesystem Partition Editor formatter
|<!--AROS-->[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1440&highlight=partition&pid=8821#post_8821 QuickPart], [HDToolBox]
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Filesystem Repair
|<!--AROS-->ArSFSDoctor,
|<!--Amiga OS--> Quarterback Tools, [ ], [ ], [ ],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Multiple File renaming
|<!--AROS-->DOpus 4 or 5,
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Anti Virus
|<!--AROS-->
|<!--Amiga OS-->VChecker,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Random Wallpaper Desktop changer [ DOpus5], [ Scalos],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Alarm Clock, Timer, Stopwatch, Countdown
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench DClock], [http://aminet.net/util/time/AlarmClockAROS.lha AlarmClock], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Fortune Cookie Quotes Sayings
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/misc AFortune],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->C/C++ IDE
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd], [https://github.com/vidarh/FrexxEd FrexxEd src], Annotate, Murks,
|<!--Amiga OS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, Annotate,
|<!--AmigaOS4-->CodeBench , [https://gitlab.com/boemann/codecraft CodeCraft],
|<!--MorphOS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, Anontate,
|-
|<!--Sub Menu-->Computer Languages Translation [https://tetracorp.github.io/guide/reverse-engineering-amiga.html ], [https://amigasourcecodepreservation.gitlab.io/amiga-assembler-insider-guide/ ],
|<!--AROS-->
|<!--Amiga OS-->[https://bitbucket.org/rhinoid/convert68000toc/src/main/ convert m68k seka asm-one to c],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Gui Creators
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/guitool MuiBuilder],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->[ MuiBuilder],
|-
|<!--Sub Menu-->Catalog .cd .ct Editors
|<!--AROS-->FlexCat
|<!--Amiga OS-->[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat
|<!--AmigaOS4-->[http://aminet.net/package/dev/misc/simplecat SimpleCat], FlexCat
|[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|}
<nowiki>*</nowiki> Commercial product.
==Misc Application 2==
{| class="wikitable sortable"
|-
!width:30%;|Misc Application
!width:10%;|AROS(x86)
!width:10%;|Commodore-Amiga OS 3.1(68k)
!width:10%;|Hyperion OS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->System
|<!--AROS-->[ SysExplorer], [ SysMon], [ Scout], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->OSK On Screen Keyboard
|<!--AROS-->[],
|<!--Amiga OS-->[https://aminet.net/util/wb/OSK.lha OSK]
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Screen Magnifier Magnifying Glass Magnification
|<!--AROS-->[http://www.onyxsoft.se/files/zoomit.lha ZoomIT],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Comic Book CBR CBZ format reader viewer
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comics], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comicon], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Ebook Reader
|<!--AROS-->[https://blog.alb42.de/programs/#legadon Legadon EPUB],[]
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Ebook Converter
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Text to Speech tts [https://github.com/JonathanFly/bark-installer Bark], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=audio/misc flite],
|<!--Amiga OS-->[http://www.text2speech.com translator],
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=search&tool=simple FLite]
|<!--MorphOS-->[http://se.aminet.net/pub/aminet/mus/misc/ FLite]
|-
|<!--Sub Menu-->Speech Voice Recognition Dictation - [http://sourceforge.net/projects/cmusphinx/files/ CMU Sphinx], [http://julius.sourceforge.jp/en_index.php?q=en/index.html Julius], [http://www.isip.piconepress.com/projects/speech/index.html ISIP],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Speech Voice Changer [], [], [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Screen Display Blanker screensaver
|<!--AROS-->Blanker Commodity (built in), [https://archives.arosworld.org/index.php?function=browse&cat=graphics/screenblanker GarshneBlanker], [http://sourceforge.net/projects/gblanker/ GBlanker Src], [],
|<!--Amiga OS-->MultiCX,
|<!--AmigaOS4-->
|<!--MorphOS-->ModernArt Blanker,
|-
|}
==Misc Application 3==
{| class="wikitable sortable"
|-
!width:30%;|Misc Application
!width:10%;|AROS(x86)
!width:10%;|Commodore-Amiga OS 3.1(68k)
!width:10%;|Hyperion OS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->Fractals mandelbrot, etc
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/misc ],
|<!--Amiga OS-->ZoneXplorer,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Landscape Rendering
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/raytrace WCS World Construction Set],
|<!--Amiga OS-->[ Vista Pro], [http://en.wikipedia.org/wiki/World_Construction_Set World Construction Set]
|<!--AmigaOS4-->[ WCS World Construction Set],
|<!--MorphOS-->[ WCS World Construction Set],
|-
|<!--Sub Menu-->Astronomy [https://sourceforge.net/projects/skychart/ skychart freepascal], [], [],
|<!--AROS-->[ Digital Almanac (ABIv0 only)],
|<!--Amiga OS-->[http://aminet.net/search?query=planetarium Aminet search], [http://aminet.net/misc/sci/DA3V56ISO.zip Digital Almanac], [https://aminet.net/package/misc/sci/da3sourceV58 Src c V58], [ Galileo renamed to Distant Suns]*, [],
|<!--AmigaOS4-->[http://sourceforge.net/projects/digital-almanac/ Digital Almanac], Distant Suns*, [http://www.digitaluniverse.org.uk/ Digital Universe]*,
|<!--MorphOS-->[http://www.aminet.net/misc/sci/da3.lha Digital Almanac], [http://www.aminet.net/package/misc/sci/da3-mos-src Src c V56],
|-
|<!--Sub Menu-->Astrology [https://sourceforge.net/projects/skylendar/ skylendar], [https://github.com/CruiserOne/Astrolog Astrolog], [https://www.astrolog.org/astrolog/astfile.htm Astrology alt site], [https://saravali.github.io/download.html Maitreya], [https://github.com/alamahant/Asteria Asteria],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->PCB design
|<!--AROS-->
|<!--Amiga OS-->[ ], [ ], [ ],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Digital Signage
|<!--AROS-->Hollywood, Hollywood Designer
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Genealogy History Family Tree Ancestry Records (FreeBMD, FreeREG, and FreeCEN file formats or GEDCOM GenTree)
|<!--AROS-->
|<!--Amiga OS--> [ Origins], [ Your Family Tree], [ ], [ ], [ ],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Languages
|<!--AROS-->
|<!--Amiga OS-->Fun School,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Mathematics ([http://www-fourier.ujf-grenoble.fr/~parisse/install_en.html Xcas], etc.),
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/scientific mathX]
|<!--Amiga OS-->Maple V, mathX, Fun School, GCSE Maths, [ ], [ ], [ ],
|<!--AmigaOS4-->Yacas
|<!--MorphOS-->Yacas
|-
|<!--Sub Menu-->Maths Graph Function Plotting
|<!--AROS-->[https://blog.alb42.de/programs/#MUIPlot MUIPlot],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->App Utility Launcher Dock toolbar
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/docky BoingBar], [],
|<!--Amiga OS-->[https://github.com/adkennan/DockBot Dockbot],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->3D Printer [https://github.com/OrcaSlicer/OrcaSlicer OrcaSlicer]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->BASIC Computer Language
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/language Basic4SDL], [ Ace Basic], [ X-AMOS], [SDLBasic], [ Alvyn],
|<!--Amiga OS-->[http://www.amiforce.de/main.php Amiblitz 3], [http://amos.condor.serverpro3.com/AmosProManual/contents/c1.html Amos Pro], [http://aminet.net/package/dev/basic/ace24dist ACE Basic],
|<!--AmigaOS4-->
|<!--MorphOS-->sdlBasic
|-
|<!--Sub Menu-->HAM amateur radio [], [], [], [https://cemaxecuter.com/ Dragon OS], [https://github.com/km4ack/73Linux with 73 link update], [https://www.youtube.com/watch?v=YAL5KNePRSg video for],
|<!--AROS-->
|<!--Amiga OS-->[https://www.amigarealm.com/amiga/amicomms/comm4.htm Comm4], [https://www.amigarealm.com/archives/comms/aarug/ TNC Terminal Node Controller with packets over serial connections on Yaesu or Woxum handheld], [https://aminet.net/comm/misc AmiCom], [ with 7Plus file encoder/decoder], [ mksstv], [ RTTYam],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|}
<nowiki>*</nowiki> Commercial product.
==Games & Emulation==
Some emulators/games require OpenGL to function and to adjust ahi prefs channels, frequency and unit0 and unit1 and
[http://aros.sourceforge.net/documentation/users/shell/changetaskpri.php changetaskpri -1]
Rom patching https://www.marcrobledo.com/RomPatcher.js/ https://www.romhacking.net/patch/ (ips, ups, bps, etc) and this other site supports the latter formats https://hack64.net/tools/patcher.php
Free public domain roms for use with emulators can be found [http://www.pdroms.de/ here] as most of the rest are covered by copyright rules. If you like to read about old games see [http://retrogamingtimes.com/ here] and [http://www.armchairarcade.com/neo/ here] and a [http://www.vintagecomputing.com/ blog] about old computers. Possibly some of the [http://www.answers.com/topic/list-of-best-selling-computer-and-video-games best selling] of all time. [http://en.wikipedia.org/wiki/List_of_computer_system_emulators Wiki] with emulated systems list.
[https://archive.gamehistory.org/ Archive of VGHF], [https://library.gamehistory.org/ Video Game History Foundation Library search]
{| class="wikitable sortable"
|-
!width:10%;|Games [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Emulation]
!width:10%;|AROS(x86)
!width:10%;|AmigaOS3(68k)
!width:10%;|AmigaOS4(PPC)
!width:10%;|MorphOS(PPC)
|-
|<!--Sub Menu-->Games Emulation Amstrad CPC
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [ Caprice32 (OpenGL & pure SDL)], [ Arnold], [https://retroshowcase.gr/cpcbox-master/],
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer]
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2],
|-
|<!--Sub Menu-->Games Emulation Apple2 and 2GS
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Arcade
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Mame], [ SI Emu (ABIv0 only)],
|<!--Amiga OS-->Mame,
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem xmame], amiarcadia,
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 Mame],
|-
|<!--Sub Menu-->Games Emulation Atari 2600 [], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Stella],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Atari 5200 [https://github.com/wavemotion-dave/A5200DS A5200DS], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Atari 7800
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Atari 400 800 130XL [https://github.com/wavemotion-dave/A8DS A8DS], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Atari800],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Atari Lynx
|<!--AROS-->[http://myfreefilehosting.com/f/6366e11bdf_1.93MB Handy (ABIv0 only)],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Atari Jaguar
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Bandai Wonderswan
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation BBC Micro and Acorn Electron [http://beehttps://bem-unix.bbcmicro.com/download.html BeebEm], [http://b-em.bbcmicro.com/ B-Em], [http://elkulator.acornelectron.co.uk/ Elkulator], [http://electrem.emuunlim.com/ ElectrEm],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Dragon 32 and Tandy CoCo [http://www.6809.org.uk/xroar/ xroar], [],
|<!--AROS-->[], [], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Commodore C16 Plus4
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Commodore C64
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Vice (ABIv0 only)], [],
|<!--Amiga OS-->Frodo,
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem viceplus],
|<!--MorphOS-->Vice,
|-
|<!--Sub Menu-->Games Emulation Commodore Amiga
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Janus UAE], Emumiga,
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer UAE],
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 UAE],
|-
|<!--Sub Menu-->Games Emulation Japanese MSX MSX2
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Mattel Intelivision
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Mattel Colecovision and Adam
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Milton Bradley (MB) Vectrex [ Vectrex OpenGL],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation PICO8 Pico-8 fantasy video game console [https://github.com/egordorichev/pemsa-sdl/ pemsa-sdl], [https://github.com/jtothebell/fake-08 fake-08], [https://github.com/Epicpkmn11/fake-08/tree/wip fake-08 fork],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Nintendo Gameboy
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem vba no sound], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem vba]
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Nintendo NES
|<!--AROS-->[ EmiNES], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Fceu], [https://github.com/takahirox/nes-js?tab=readme-ov-file nes-js], [https://github.com/bfirsh/jsnes jsnes], [https://github.com/angelo-wf/NesJs NesJs],
|<!--Amiga OS-->AmiNES, [http://www.dridus.com/~nyef/darcnes/ darcNES],
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem amines]
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Nintendo SNES
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Zsnes],
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem warpsnes]
|<!--MorphOS-->[http://fabportnawak.free.fr/snes/ Snes9x],
|-
|<!--Sub Menu-->Games Emulation Nintendo N64
*HLE and plugins [ mupen64], [https://github.com/ares-emulator/ares ares], [https://github.com/N64Recomp/N64Recomp N64Recomp], [https://github.com/rt64/rt64 rt64], [https://github.com/simple64/simple64 Simple64],
*LLE [],
|<!--AROS-->[http://code.google.com/p/mupen64plus/ Mupen64+],
|<!--Amiga OS-->[http://code.google.com/p/mupen64plus/ Mupen64+], [http://aminet.net/package/misc/emu/tr-981125_src TR64],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->[ Nintendo Gamecube Wii]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->[ Nintendo Wii U]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->[https://github.com/yuzu-emu Nintendo Switch]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation NEC PC Engine
|<!--AROS-->[], [], [https://github.com/yhzmr442/jspce js-pce],
|[http://www.hugo.fr.fm/ Hugo], [http://mednafen.sourceforge.net/ Mednafen],
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem tgemu]
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sega Master System (SMS)
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Dega], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem sms],
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem osmose]
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sega Genesis/Megadrive
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem gp no sound], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem DGen],
|<!--Amiga OS-->[http://code.google.com/p/genplus-gx/ Genplus],
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem genesisplus]
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sega Saturn
*HLE [https://mednafen.github.io/ mednafen], [http://yabause.org/ yabause], [],
*LLE [], [],
|<!--AROS-->?
|<!--Amiga OS-->[http://yabause.org/ Yabause],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sega Dreamcast
*HLE [https://github.com/flyinghead/flycast flycast], [https://code.google.com/archive/p/nulldc/downloads NullDC],
*LLE [], [],
|<!--AROS-->?
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sinclair ZX80 and ZX81
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sinclair Spectrum
|[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Fuse (crackly sound)], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer SimCoupe], [ FBZX slow], [https://jsspeccy.zxdemo.org/ jsspeccy], [http://torinak.com/qaop/games qaop],
|<!--Amiga OS-->[http://www.lasernet.plus.com/ Asp], [http://www.zophar.net/sinclair.html Speculator], [http://www.worldofspectrum.org/x128/index.html X128],
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/computer]
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sinclair QL
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [],
|<!--Amiga OS-->[http://aminet.net/package/misc/emu/QDOS4amiga1 QDOS4amiga]
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation SNK NeoGeo Pocket
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem],
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem gngeo], NeoPop,
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation Sony PlayStation
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem FPSE],
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem FPSE]
|<!--MorphOS-->
|-
|<!--Sub Menu-->[ Sony PS2]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->[ Sony PS3]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->[https://vita3k.org/ Sony Vita]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->[https://github.com/shadps4-emu/shadPS4 PS4]
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation [http://en.wikipedia.org/wiki/Tangerine_Computer_Systems Tangerine] Oric and Atmos
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Oricutron]
|<!--Amiga OS-->
|<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem Oricutron]
|<!--MorphOS-->[http://aminet.net/package/misc/emu/oricutron Oricutron]
|-
|<!--Sub Menu-->Games Emulation TI 99/4 99/4A [https://github.com/wavemotion-dave/DS994a DS994a], [], [https://js99er.net/#/ js99er], [], [http://aminet.net/package/misc/emu/TI4Amiga TI4Amiga], [http://aminet.net/package/misc/emu/TI4Amiga_src TI4Amiga src in c],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation HP 38G 40GS 48 49G/50G Graphing Calculators
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Emulation TI 58 83 84 85 86 - 89 92 Graphing Calculators
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|}
{| class="wikitable sortable"
|-
!width:10%;|Games [https://www.rockpapershotgun.com/ General]
!width:10%;|AROS(x86)
!width:10%;|AmigaOS3(68k)
!width:10%;|AmigaOS4(PPC)
!width:10%;|MorphOS(PPC)
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Games [https://www.trackawesomelist.com/michelpereira/awesome-open-source-games/ Open Source and others] || AROS || Amiga OS || Amiga OS4 || Morphos
|-
|<!--Sub Menu-->Games Action like [https://github.com/opentomb/OpenTomb opentomb], [https://github.com/LostArtefacts/TRX TRX formerly Tomb1Main], [https://github.com/TombEngine TombEngine], [http://archives.arosworld.org/index.php?function=browse&cat=game/action Thrust], [https://github.com/fragglet/sdl-sopwith sdl sopwith],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/action], [https://archives.arosworld.org/index.php?function=browse&cat=game/action BOH], [],
|<!--Amiga OS-->[https://github.com/BSzili/OpenLara/tree/amiga/src source of openlara SDL2],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Adventure like [http://dotg.sourceforge.net/ DMJ], [https://github.com/kromenak/gengine Gabriel Knight 3], [http://www.sarien.net/ Sierra Sarien], [https://github.com/klembot/twinejs twine js], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/adventure dmagnetic], [https://archives.arosworld.org/?function=browse&cat=emulation/misc ScummVM], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying frotz infocom], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Board like [https://github.com/aperture-software/colditz-escape escape from colditz], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/board], [http://amigan.1emu.net/releases Africa]
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Cards
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/card ], [],
|<!--AmigaOS-->[http://home.arcor.de/amigasolitaire/e/welcome.html Reko], [https://github.com/samskivert/beschei-en beschei Src],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Misc [https://github.com/michelpereira/awesome-open-source-games Awesome open], [https://github.com/bobeff/open-source-games General Open Source], [https://github.com/SAT-R/sa2 Sonic Advance 2], [https://github.com/velorek1/cwordle Wordle type],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/misc], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games FPS like [https://aminet.net/package/game/shoot/D1X_Rebirth_AGA Descent D1X src], [https://github.com/DescentDevelopers/Descent3 Descent 3], [https://github.com/Fewnity/Counter-Strike-Nintendo-DS Counter-Strike-Nintendo-DS], [https://github.com/Aleph-One-Marathon/alephone Bungie Marathon 1994], [https://zdoom.org/downloads UzDoom opengl 3.3], [https://github.com/ZDoom/gzdoom gzdoom opengl 3+], [https://zdoom.org/downloads LZDoom opengl 2.1],
|<!--AROS-->Doom, Quake, [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Quake 3 Arena (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Assault Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube 2 Sauerbraten (OpenGL)], [http://fodquake.net/test/ FodQuake QuakeWorld], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Duke Nukem 3D], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Darkplaces Nexuiz Xonotic], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Doom 3 SDL (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Hexenworld and Hexen 2], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Aliens vs Predator Gold 2000 avp (openGL)], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Odamex (openGL doom)], [https://archives.arosworld.org/?function=showfile&file=game/fps/ zgloom], [], [https://archives.arosworld.org/?function=showfile&file=game/fps/ ab3dhd], [],
|<!--Amiga OS-->Doom, Quake, AB3D, Fears, Breathless, Gloom,
|<!--AmigaOS4-->Doom, Quake,
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12 Doom], Quake, Quake 3 Arena, [https://github.com/OpenXRay/xray-16 S.T.A.L.K.E.R Xray]
|-
|<!--Sub Menu-->Games MMORG like
|<!--AROS-->[ Eternal Lands (OpenGL)],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Platform like
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/platform], [ Maze of Galious], [ Gish]*(openGL), [ Mega Mario], [https://archives.arosworld.org/?function=showfile&file=game/platform/ thextech SMBX], [http://www.gianas-return.de/ Giana's Return], [http://www.sqrxz.de/ Sqrxz], [www.sqrxz2.de/ Sqrxz 2], [http://www.sqrxz.de/sqrxz-3/ Sqrxz 3], [http://www.sqrxz.de/sqrxz-4/ Sqrxz 4], [http://archives.arosworld.org/index.php?function=browse&cat=game/platform Cave Story], [https://bszili.morphos.me/ Frogatto], [https://bszili.morphos.me/ OpenJazz], [https://archives.arosworld.org/?function=showfile&file=game/platform/ pekkakana2], [ Aquaria], [https://archives.arosworld.org/?function=showfile&file=game/platform/ sonic CD], [],
|<!--Amiga OS-->[ Giana Sisters], [],
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Puzzle [https://github.com/mariopartyrd/marioparty4/tree/port Party], [https://github.com/mdodis/OpenSolomonsKey OpenSolomonsKey], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle], [ Cubosphere (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle Candy Crisis], [http://bszili.morphos.me/ TailTale],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Racing [ Trigger Rally], [ VDrift], [http://www.ultimatestunts.nl/index.php?page=2&lang=en Ultimate Stunts], [http://maniadrive.raydium.org/ Mania Drive], [https://github.com/plowteam/donut Simpsons Hit and Run], [],
|<!--AROS-->[ Super Tux Kart (OpenGL)], [http://www.dusabledanslherbe.eu/AROSPage/F1Spirit.30.html F1 Spirit (OpenGL)], [http://bszili.morphos.me/index.html MultiRacer], [https://bszili.morphos.me/ Speed Dreams], [],
|<!--AmigaOS-->
|<!--AmigaOS4-->[http://bszili.morphos.me/index.html Speed Dreams],
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12], [http://bszili.morphos.me/index.html TORCS],
|-
|<!--Sub Menu-->Games 1st first person DRPG [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/OpenEnroth/OpenEnroth OpenEnroth MM], []
|<!--AROS-->[https://github.com/BSzili/aros-stuff Arx Libertatis], [http://www.playfuljs.com/a-first-person-engine-in-265-lines/ js raycaster], [https://github.com/Dorthu/es6-crpg webgl], [https://github.com/sonountaleban/AmiShockolate System Shock], [], [],
|<!--AmigaOS-->Phantasie, Faery Tale, Dungeon Master,
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games 3rd third person action CRPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/alexbatalov/fallout1-ce fallout ce], [],
|<!--AROS-->[https://archives.arosworld.org/?function=showfile&file=game/strategy/ fheroes2 homm2], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ breakhack], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ devilutionx diablo 1 hellfire], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ fallout 1], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ stratagus], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ hostile-takeover], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games isometric RPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/topics/dungeon?l=javascript Dungeon], [], [https://github.com/clintbellanger/heroine-dusk JS Dusk],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying nethack], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying GemRB], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games card based RPG [https://github.com/open-duelyst/duelyst Duelyst], [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games turn based tactics RPG [], [], [], [], [], [],
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/strategy UFO AI], [http://play.freeciv.org/ FreeCiv], [], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Strategy [http://rtsgus.org/ RTSgus], [http://stargus.sourceforge.net/ Stargus], [https://github.com/KD-lab-Open-Source/Perimeter Perimeter], [https://matty77.itch.io/conflict-3049 conflict-3049], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/strategy MegaGlest (OpenGL)], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ signus], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=140&pid=12446#post_12446 Wargus warcraft 2 setup],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12]
|-
|<!--Sub Menu-->Games Rhythm, Beat, Step [], [], [https://clonehero.net/ clonehero], [https://github.com/MatteoGodzilla/Dj-Engine Dj-Engine],
|<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/misc Frets on Fire], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Shoot Em Ups [http://www.mhgames.org/oldies/formido/ Formido], [http://code.google.com/p/violetland/ Violetland],
||<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/action Open Tyrian], [http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ Alien Blaster], [https://github.com/OpenFodder/openfodder OpenFodder], [https://archives.arosworld.org/?function=showfile&file=game/action/ tbftss The Battle for the Solar System: the Pandora War]
|<!--AmigaOS-->
|<!--AmigaOS4-->[http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ The Battle for the Solar System: the Pandora War]
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Simulations [http://scp.indiegames.us/ Freespace 2], [http://www.heptargon.de/gl-117/gl-117.html GL117], [http://code.google.com/p/corsix-th/ Theme Hospital], [http://code.google.com/p/freerct/ Rollercoaster Tycoon], [http://hedgewars.org/ Hedgewars], [https://github.com/raceintospace/raceintospace raceintospace], [https://github.com/Return-To-The-Roots RTTR Settlers 2], [https://github.com/OoliteProject/oolite oolite elite], [https://github.com/fesh0r/newkind newkind elite], [],
|<!--AROS-->
|<!--Amiga OS-->SimCity, SimAnt, Sim Hospital, Theme Park,
|<!--AmigaOS4-->
|<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12]
|-
|<!--Sub Menu-->Games Life Sim [https://github.com/ACreTeam/forest Animal Crossing], [ ], [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Horror [https://github.com/Mikompilation/MikuPan Fatal Frame], [ ], [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Sandbox Voxel Open World Exploration [https://github.com/ClassiCube/ Classicube],[http://www.michaelfogleman.com/craft/ Craft], [https://github.com/tothpaul/DelphiCraft DelphiCraft],[https://www.minetest.net/ Luanti formerly Minetest], [ infiniminer],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Battle Royale [https://bruh.io/ Play.Bruh.io], [https://www.coolmathgames.com/0-copter Copter Royale], [https://surviv.io/ Surviv.io], [https://nuggetroyale.io/#Ketchup Nugget Royale], [https://miniroyale2.io/ Miniroyale2.io],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Tower Defense [https://chriscourses.github.io/tower-defense/ HTML5], [https://github.com/SBardak/Tower-Defense-Game TD C++], [https://github.com/bdoms/love_defense LUA and LOVE], [https://github.com/HyOsori/Osori-WebGame HTML5], [https://github.com/PascalCorpsman/ConfigTD ConfigTD Pascal], [https://github.com/GloriousEggroll/wine-ge-custom Wine], []
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Visual Novel Engines [https://github.com/Kirilllive/tuesday-js Tuesday JS], [ Lua + LOVE], [https://github.com/weetabix-su/renpsp-dev RenPSP], [https://github.com/Galladite27/ONScripter-EN ONScripter-EN], [https://www.renpy.org/ renpy ren'py], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Virtual Reality VR [https://gitlab.com/madsbuvi/openmw openmw vr], [https://github.com/Team-Beef-Studios/BeefRaiderXR BeefRaiderXR],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Virtual Table Top VTT [ Roll20], [https://www.owlbear.rodeo/ owlbear rodeo], [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Computer assisted TableTop TTRPG OSR [https://www.rpgsolo.com/play.php RPGSolo], [https://github.com/fpsvogel/solo-ttrpgs Solo TTRPG], [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games 2D 3D Engines [https://github.com/fegennari/3DWorld 3DWorld], [https://github.com/GarageGames/Torque3D Torque3D], [https://github.com/gameplay3d/GamePlay GamePlay 3D], [https://www.babylonjs.com/ BabylonJS ], [ Godot], [ Ogre], [ Crystal Space], [https://github.com/JacobHess03/ Dragon-Quest like], [https://github.com/bjornbytes/lovr Lua LOVE for 2D LOVR for 3D], [],
|<!--AROS-->[https://www.arkhamdev.net/wiki.htm?id=agx Arkham Development antiryadgx 8.9 lts with register], [],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games C based game frameworks [https://github.com/orangeduck/Corange Corange], [https://github.com/scottcgi/Mojoc Mojoc], [https://orx-project.org/ Orx], [https://github.com/ioquake/ioq3 Quake 3], [https://www.mapeditor.org/ Tiled], [https://www.raylib.com/ 2d Raylib], [https://github.com/Rabios/awesome-raylib other raylib], [https://github.com/MrFrenik/gunslinger Gunslinger], [https://o3de.org/ o3d], [http://archives.aros-exec.org/index.php?function=browse&cat=development/library GLFW], [],
|<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/library Raylib 5],
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games RPGMaker MV/MZ-compatible projects [https://github.com/Psychronic-Games/RPGReactor RPGReactor js],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games Virtual Pinball [https://github.com/vpinball/vpinball vpinball], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->Games unpack unarc [], [],
|<!--AROS-->
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|}
==Application Guides==
[[#top|...to the top]]
===Web Browser===
OWB is now at version 2.0 (which got an engine refresh, from July 2015 to February 2019) and 3.0.
This latest version has a good support for many/most web sites, even YouTube web page now works.
This improved compatibility comes at the expense of higher RAM usage (now 1GB RAM is the absolute minimum).
Also, keep in mind that the lack of a JIT (Just-In-Time) JS compiler on the 32 bit version, makes the web surfing a bit slow.
Only the 64 bit version of OWB 2.0 will have JIT enabled, thus benefitting of more speed. There are tooltypes that can be added to the icon to provide further features JIT, MSE etc
Certificates from [https://curl.se/docs/caextract.html ca certs],
DNS tracking blocking with [https://easylist.to/easylist/easylist.txt easylist.txt] in PROGDIR:Conf before starting browser with enabled AdBlock [https://github.com/easylist/easylist/tree/master easylist], [https://gitlab.com/eyeo anti abp], [https://firebog.net/ big blocklist], [https://github.com/StevenBlack/hosts Steves], [], [],
This can be enabled with OWB Odyssey with Windows -> Content Blocking and Windows -> Messages and enter
https://www.youtube.com/api/stats/ads*
https://www.youtube.com/pagead/adview*
https://www.youtube.com#@##player-ads*
into your custom filters
Element blocker browser extension might be needed for [https://github.com/easylist/easylist/wiki/Youtube-Issues youtube], [ mid roll], [ pre roll], [ ],
OWB speed is much better when running from RAM Disk, the best way is to add the below into your S:User-Startup which copies OWB drawer from Extras:Internet/OWB to RAM Disk:
So add this :
<pre>
copy Extras:Internet/OWB Ram:OWB/ ALL CLONE >NIL:
copy Extras:Internet/OWB.info Ram: >NIL:
</pre>
Open RAM Disk and open OWB drawer and double click on OWB icon so that the above icon tooltypes are activated
Problems are that the copy time is long (around 20 seconds added in the background), but we can make it faster if we delete useless files from the OWB drawer (docs, …)
If you don’t copy the drawer back onto the HD, you won’t save your cache, cookies, passwords… So you need a script for it.
Error messages
SSL error "cant verify with ca-certificates", check bios clock time date is correct
Error 6, try checking networking prefs settings and Save / Use preferences again or a '''few times''' otherwise the network chipset may not be compatible with Aros
[https://www.google.com/search?q=%s&udm=14 Google search without AI overview]
===E-mail===
YAM does not support SSL and most mail providers now switched to encrypted SMTP/POP3 connections
====SimpleMail====
SimpleMail supports IMAP and appears to work with GMail, but it's never been reliable enough, it can crash with large mailboxes.
Please read more on this [http://www.freelists.org/list/simplemail-usr User list]
GMail
Be sure to activate the pop3 usage in your gmail account setup / configuration first.
pop3:
pop.gmail.com
Use SSL: Yes
Port: 995
smtp:
smtp.gmail.com (with authentication)
Use Authentication: Yes
Use SSL: Yes
Port: 465 or 587
Hotmail/MSN/outlook/Microsoft Mail mid-2017, all outlook.com accounts will be migrated to Office 365 / Exchange
Most users are currently on POP which does not allow showing folders and many other features (technical limitations of POP3). With Microsoft IMAP you will get folders, sync read/unread, and show flags. You still won't get push though, as Microsoft has not turned on the IMAP Idle command as at Sept 2013.
If you want to try it, you need to first remove (you can't edit) your pop account (long-press the account on the accounts screen, delete account). Then set it up this way:
1. Email/Password
2. Manual
3. IMAP
4.
* Incoming: imap-mail.outlook.com, port 993, SSL/TLS should be checked
* Outgoing: smtp-mail.outlook.com, port 587, SSL/TLS should be checked
* POP server name pop-mail.outlook.com, port 995, POP encryption method SSL
Yahoo Mail
On April 24, 2002 Yahoo ceased to offer POP access to its free mail service. Introducing instead a yearly payment feature, allowing users POP3 and IMAP server support, along with such benefits as larger file attachment sizes and no adverts.
Sorry to see Yahoo leaving its users to cough up for the privilege of accessing their mail. Understandable, when competing against rivals such as Gmail and Hotmail who hold a large majority of users and were hacked in 2014 as well.
Incoming Mail (IMAP) Server
* Server - imap.mail.yahoo.com
* Port - 993
* Requires SSL - Yes
Outgoing Mail (SMTP) Server
* Server - smtp.mail.yahoo.com
* Port - 465 or 587
* Requires SSL - Yes
* Requires authentication - Yes
Your login info
* Email address - Your full email address (name@domain.com)
* Password - Your account's password
* Requires authentication - Yes
Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program.
You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client.
Cannot be done since 2002 unless the customer pays Yahoo a subscription subs fee to have access to SMTP and POP3
* Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port.
* “Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”.
* “Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com
* “Password” – Your Yahoo Mail password.
Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com.
* Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work.
====YAM Yet Another Mailer====
YAM does not support SSL and most mail providers have now switched to encrypted SMTP/POP3 connections
This email client is POP3 only if the SSL library is available [http://www.freelists.org/list/yam YAM Freelists]
One of the downsides of using a POP3 mailer unfortunately - you have to set an option not to delete the mail if you want it left on the server. IMAP keeps all the emails on the server.
Possible issues
Sending mail issues is probably a matter of using your ISP's SMTP server, though it could also be an SSL issue.
getting a "Couldn't initialise TLSv1 / SSL error
Use of on-line e-mail accounts with this email client is not possible as it lacks the OpenSSL AmiSSl v3 compatible library
GMail
Incoming Mail (POP3) Server - requires SSL: pop.gmail.com
Use SSL: Yes
Port: 995
Outgoing Mail (SMTP) Server - requires TLS: smtp.gmail.com (use authentication)
Use Authentication: Yes
Use STARTTLS: Yes (some clients call this SSL)
Port: 465 or 587
Account Name: your Gmail username (including '@gmail.com')
Email Address: your full Gmail email address (username@gmail.com)
Password: your Gmail password
Anyway, the SMTP is pop.gmail.com port 465 and it uses SSLLv3 Authentication. The POP3 settings are for the same server (pop.gmail.com), only on port 995 instead.
Outlook.com access
<pre >
Outlook.com SMTP server address: smtp.live.com
Outlook.com SMTP user name: Your full Outlook.com email address (not an alias)
Outlook.com SMTP password: Your Outlook.com password
Outlook.com SMTP port: 587
Outlook.com SMTP TLS/SSL encryption required: yes
</pre >
Yahoo Mail
<pre >
“POP3 Server” – Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port.
“SMTP Server” – Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work.
“Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”.
“Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com
“Password” – Your Yahoo Mail password.
</pre >
Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com.
Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program.
You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client.
Cannot be done since 2002 unless the customer pays Yahoo a monthly fee to have access to SMTP and POP3
Microsoft Outlook Express Mail
1. Get the files to your PC.
By whatever method get the files off your Amiga onto your PC. In the YAM folder you have a number of different folders, one for each of your folders in YAM. Inside that is a file usually some numbers such as 332423.283. YAM created a new file for every single email you received.
2. Open up a brand new Outlook Express. Just configure the account to use 127.0.0.1 as mail servers. It doesn't really matter. You will need to manually create any subfolders you used in YAM.
3. You will need to do a mass rename on all your email files from YAM. Just add a .eml to the end of it. Amazing how PCs still rely mostly on the file name so it knows what sort of file it is rather than just looking at it! There are a number of multiple renamers online to download and free too.
4. Go into each of your folders, inbox, sent items etc. And do a select all then drag the files into Outlook Express (to the relevant folder obviously) Amazingly the file format that YAM used is very compatible with .eml standard and viola your emails appear. With correct dates and working attachments.
5. If you want your email into Microsoft Outlook. Open that up and create a new profile and a new blank PST file. Then go into File Import and choose to import from Outlook Express. And the mail will go into there. And viola.. you have your old email from your Amiga in a more modern day format.
===FTP===
Magellan has a great FTP module. It allows transferring files from/to a FTP server over the Internet or the local network and, even if FTP is perceived as a "thing of the past", its usability is all inside the client. The FTP thing has a nice side effect too, since every Icaros machine can be a FTP server as well, and our files can be easily transferred from an Icaros machine to another with a little configuration effort.
First of all, we need to know the 'server' IP address. Server is the Icaros machine with the file we are about to download on another Icaros machine, that we're going to call 'client'. To do that, move on the server machine and 1) run Prefs/Services to be sure "FTP file transfer" is enabled (if not, enable it and restart Icaros); 2) run a shell and enter this command:
ifconfig -a
Make a note of the IP address for the network interface used by the local area network. For cabled devices, it usually is net0:. Now go on the client machine and run Magellan:
Perform these actions: 1) click on FTP; 2) click on ADDRESS BOOK; 3) click on "New".
You can now add a new entry for your Icaros server machine:
1) Choose a name for your server, in order to spot it immediately in the address book. Enter the IP address you got before.
2) click on Custom Options:
1) go to Miscellaneous in the left menu;
2) Ensure "Passive Transfers" is NOT selected;
3) click on Use. We need to deactivate Passive Transfers because YAFS, the FTP server included in Icaros, only allows active transfers at the current stage. Now, we can finally connect to our new file source:
1) Look into the address book for the newly introduced server, be sure that name and IP address are right, and
2) click on Connect. A new lister with server's "MyWorkspace" contents will appear. You can now transfer files over the network choosing a destination among your local (client's) volumes.
Can be adapted to any FTP client on any platform of your choice, just be sure your client allows Active Transfers as well.
===IRC Internet Relay Chat===
Jabberwocky is ideal for one-to-one social media communication, use IRC if you require one to many.
Just type a message in ''lowercase''' letters and it will be posted to all in the [ AROS irc channel]. Please do not use UPPER CASE as it is a sign of SHOUTING which is annoying.
Other things to type in - replace <message> with a line of text and <nick> with a person's name
<pre>
/help
/list
/who
/whois <nick>
/msg <nick> <message>
/query <nick>
<message>s
/query
/away <message>
/away
/quit <going away message>
</pre>
[http://irchelp.org/irchelp/new2irc.html#smiley Intro guide here]. IRC Primer can be found here in [http://www.irchelp.org/irchelp/ircprimer.html html], [http://www.irchelp.org/irchelp/text/ircprimer.txt TXT], [http://www.kei.com/irc/IRCprimer1.1.ps PostScript].
Issue the command /me <text> where <text> is the text that should follow your nickname.
Example: /me slaps ajk around a bit with a large trout
/nick <newNick>
/nickserv register <password> <email address>
/ns instead of /nickserv, while others might need /msg nickserv
/nickserv identify <password>
Alternatives:
/ns identify <password>
/msg nickserv identify <password>
==== IRC WookieChat ====
WookieChat is the most complete internet client for communication across the IRC Network. WookieChat allows you to swap ideas and communicate in real-time, you can also exchange Files, Documents, Images and everything else using the application's DCC capabilities.
add smilies drawer/directory
run wookiechat from the shell and set stack to 1000000 e.g. wookiechat stack 1000000
select a server / server window
* nickname
* user name
* real name - optional
Once you configure the client with your preferred screen name, you'll want to find a channel to talk in.
servers
* New Server - click on this to add / add extra - change details in section below this click box
* New Group
* Delete Entry
* Connect to server
* connect in new tab
* perform on connect
Change details
* Servername - change text in this box to one of the below Server:
* Port number - no need to change
* Server password
* Channel - add #channel from below
* auto join - can click this
* nick registration password,
Click Connect to server button above
<pre>
Server: irc.freenode.net
Channel: #aros
</pre>
irc://irc.freenode.net/aros
<pre>
Server: chat.amigaworld.net
Channel: #amigaworld or #amigans
</pre>
<pre>
On Sunday evenings USA time usually starting around 3PM EDT (1900 UTC)
Server:irc.superhosts.net
Channel #team*amiga
</pre>
<pre>
BitlBee and Minbif are IRCd-like gateways to multiple IM networks
Server: im.bitlbee.org
Port 6667
Seems to be most useful on WookieChat as you can be connected to several servers at once. One for Bitlbee and any messages that might come through that. One for your normal IRC chat server.
</pre>
[http://www.bitlbee.org/main.php/servers.html Other servers],
<pre>
#Amiga.org - irc.synirc.net eu.synirc.net dissonance.nl.eu.synirc.net (IPv6: 2002:5511:1356:0:216:17ff:fe84:68a)
twilight.de.eu.synirc.net zero.dk.eu.synirc.net us.synirc.net avarice.az.us.synirc.net envy.il.us.synirc.net harpy.mi.us.synirc.net
liberty.nj.us.synirc.net snowball.mo.us.synirc.net - Ports 6660-6669 7001 (SSL)
</pre>
<pre>
Multiple server support
"Perform on connect" scripts and channel auto-joins
Automatic Nickserv login
Tabs for channels and private conversations
CTCP PING, TIME, VERSION, SOUND
Incoming and Outgoing DCC SEND file transfers
Colours for different events
Logging and automatic reloading of logs
mIRC colour code filters
Configurable timestamps
GUI for changing channel modes easily
Configurable highlight keywords
URL Grabber window
Optional outgoing swear word filter
Event sounds for tabs opening, highlighted words, and private messages
DCC CHAT support
Doubleclickable URL's
Support for multiple languages using LOCALE
Clone detection
Auto reconnection to Servers upon disconnection
Command aliases
Chat display can be toggled between AmIRC and mIRC style
Counter for Unread messages
Graphical nicklist and graphical smileys with a popup chooser
</pre>
====IRC Aircos ====
Double click on Aircos icon in Extras:Networking/Apps/Aircos. It has been set up with a guest account for trial purposes. Though ideally, choose a nickname and password for frequent use of irc.
====IRC and XMPP Jabberwocky====
Servers are setup and close down at random
You sign up to a server that someone else has setup and access chat services through them.
The two ways to access chat from jabberwocky
<pre >
Jabberwocky -> Server -> XMPP -> open and ad-free
Jabberwocky -> Server -> Transports (Gateways) -> Proprietary closed systems
</pre >
The Jabber.org service connects with all IM services that use XMPP, the open standard for instant messaging and presence over the Internet. The services we connect with include Google Talk (closed), Live Journal Talk, Nimbuzz, Ovi, and thousands more. However, you can not connect from Jabber.org to proprietary services like AIM, ICQ, MSN, Skype, or Yahoo because they don’t yet use XMPP components (XEP-0114) '''but''' you can use Jabber.com's servers and IM gateways (MSN, ICQ, Yahoo etc.) instead.
The best way to use jabberwocky is in conjunction with a public jabber server with '''transports''' to your favorite services, like gtalk, Facebook, yahoo, ICQ, AIM, etc.
You have to register with one of the servers, [https://list.jabber.at/ this list] or [http://www.jabberes.org/servers/ another list], [http://xmpp.net/ this security XMPP list],
Unfortunately jabberwocky can only connect to one server at a time so it is best to check what services each server offers. If you set it up with separate Facebook and google talk accounts, for example, sometimes you'll only get one or the other.
Jabberwocky open a window where the Jabber server part is typed in as well as your Nickname and Password.
Jabber ID (JID) identifies you to the server and other users.
Once registered the next step is to goto Jabberwocky's "Windows" menu and select the "Agents" option. The "Agents List" window will open.
Roster (contacts list)
[http://search.wensley.org.uk/ Chatrooms] (MUC) are available
File Transfer - can send and receive files through the Jabber service but not with other services like IRC, ICQ, AIM or Yahoo. All you need is an installed webbrowser and OpenURL.
Clickable URLs - The message window uses Mailtext.mcc and you can set a URL action in the MUI mailtext prefs like SYS:Utils/OpenURL %s NEWWIN.
There is no consistent Skype like (H.323 VoIP) video conferencing available over Jabber. The move from xmpp to Jingle should help but no support on any amiga-like systems at the moment. [http://aminet.net/package/dev/src/AmiPhoneSrc192 AmiPhone] and [http://www.lysator.liu.se/%28frame,faq,nobg,useframes%29/ahi/v4-site/ Speak Freely] was an early attempt voice only contact. SIP and Asterisk are other PBX options.
Facebook
If you're using the XMPP transport provided by Facebook themselves, chat.facebook.com, it looks like they're now requiring SSL transport. This means jabberwocky method below will no longer work. The best thing to do is to create an ID on a public jabber server which has a Facebook gateway.
<pre >
1. launch jabberwocky
2. if the login window doesn't appear on launch, select 'account' from the jabberwocky menu
3. your jabber ID will be user@chat.facebook.com where user is your user ID
4. your password is your normal facebook password
5. to save this for next time, click the popup gadget next to the ID field
6. click the 'add' button
7. click the 'close' button
8. click the 'connect' button
</pre >
you're done. you can also click the 'save as default account' button if you want. jabberwocky configured to auto-connect when launching the program, but you can configure as you like. there is amigaguide documentation included with jabberwocky.
[http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=37085&forum=32 Read more here]
for Facebook users, you can log-in directly to Facebook with jabberwocky. just sign in as @chat.facebook.com with your Facebook password as the password
Twitter
For a few years, there has been added a twitter transport. Servers include [http://jabber.hot-chilli.net/ jabber.hot-chili.net], and .
An [http://jabber.hot-chilli.net/tag/how-tos/ How-to]
:Read [http://jabber.hot-chilli.net/2010/05/09/twitter-transport-working/ more]
Instagram
no support at the moment best to use a web browser based client
ICQ
The new version (beta) of StriCQ uses a newer ICQ protocol. Most of the ICQ Jabber Transports still use an older ICQ protocol. You can only talk one-way to StriCQ using the older Transports. Only the newer ICQv7 Transport lets you talk both ways to StriCQ. Look at the server lists in the first section to check.
Register on a Jabber server, e.g. this one works: http://www.jabber.de/
Then login into Jabberwocky with the following login data e.g. xxx@jabber.de / Password: xxx Now add your ICQ account under the window->Agents->"Register". Now Jabberwocky connects via the Jabber.de server with your ICQ account.
Yahoo Messenger
although yahoo! does not use xmpp protocol, you should be able to use the transport methods to gain access and post your replies
MSN
early months of 2013 Microsoft will ditch MSN Messenger client and force everyone to use Skype...but MSN protocol and servers will keep working as usual for quite a long time....
Occasionally the Messenger servers have been experiencing problems signing in. You may need to sign in at www.outlook.com and then try again. It may also take multiple tries to sign in. (This also affects you if you’re using Skype.)
You have to check each servers' Agents List to see what transports (MSN protocol, ICQ protocol, etc.) are supported or use the list address' provided in the section above. Then register with each transport (IRC, MSN, ICQ, etc.) to which you need access. After registering you can Connect to start chatting.
msn.jabber.com/registered should appear in the window.
From this [http://tech.dir.groups.yahoo.com/group/amiga-jabberwocky/message/1378 JW group] guide which helps with this process in a clear, step by step procedure.
1. Sign up on MSN's site for a passport account. This typically involves getting a Hotmail address.
2. Log on to the Jabber server of your choice and do the following:
* Select the "Windows/Agents" menu option in Jabberwocky.
* Select the MSN Agent from the list presented by the server.
* Click the Register button to open a new window asking for:
**Username = passort account email address, typically your hotmail address.
**Nick = Screen name to be shown to anyone you add to your buddy list.
**Password = Password for your passport account/hotmail address.
* Click the Register button at the bottom of the new window.
3. If all goes well, you will see the MSN Gateway added to your buddy list. If not, repeat part 2 on another server. Some servers may show MSN in their list of available agents, but have not updated their software for the latest protocols used by MSN.
4. Once you are registered, you can now add people to your buddy list. Note that you need to include the '''msn.''' ahead of the servername so that it knows what gateway agent to use. Some servers may use a slight variation and require '''msg.gate.''' before the server name, so try both to see what works.
If my friend's msn was amiga@hotmail.co.uk and my jabber server was @jabber.meta.net.nz..
then amiga'''%'''hotmail.com@'''msn.'''jabber.meta.net.nz
or another the trick to import MSN contacts is that you don't type the hotmail URL but the passport URL... e.g. Instead of: goodvibe%hotmail.com@msn.jabber.com You type: goodvibe%passport.com@msn.jabber.com
And the thing about importing contacts I'm afraid you'll have to do it by hand, one at the time...
Google Talk
any XMPP server will work, but you have to add your contacts manually. a google talk user is typically either @gmail.com or @talk.google.com. a true gtalk transport is nice because it brings your contacts to you and (can) also support file transfers to/from google talk users.
implement Jingle a set of extensions to the IETF's Extensible Messaging and Presence Protocol (XMPP)
support ended early 2014 as Google moved to Google+ Hangouts which uses it own proprietary format
===Video Player MPlayer===
Many of the menu features (such as doubling) do not work with the current version of mplayer but using
4:3
mplayer -vf scale=800:600 file.avi
16:9
mplayer -vf scale=854:480 file.avi
if you want gui use;
mplayer -gui 1 <other params> file.avi
<pre >
stack 1000000
; using AspireOS 1.xx
; copy FROM SYS:Extras/Multimedia/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil:
; using Icaros Desktop 1.x
; copy FROM SYS:Tools/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil:
; using Icaros Desktop 2.x
; copy FROM SYS:Utilities/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil:
cd RAM:MPlayer
run MPlayer -gui > Nil:
;run MPlayer -gui -ao ahi_dev -playlist http://www.radio-paralax.de/listen.pls > Nil:
</pre >
$ mplayer rtsp://127.0.0.1:554/sample_300kbit.mp4
MPlayer supports multicast streaming, and rtp/rtsp protocols (it might require [http://www.live555.com/openRTSP/ live555 library] to work with some streams). But you might have to build it where it's disabled. Also, multicast won't work with some AmiTCP-likes. MIAMI supported it, though.
AROS supports IPv4 (old but works) and this includes the needed address space for RTP.
If you mean multicast via RTP - mplayer handles it. You can even force UDP over TCP
-rtsp-stream-over-tcp
If the rtsp Real Time Streaming Protocol server needs authentification:
-user -passwd
MPlayer - Menu - Open Playlist and load already downloaded .pls or .m3u file - auto starts around 4 percent cache
MPlayer - Menu - Open Stream and copy one of the .pls lines below into space allowed, press OK and press play button on main gui interface
Old 8bit 16bit remixes chip tune game music
http://www.radio-paralax.de/listen.pls
http://scenesat.com/
http://www.shoutcast.com/radio/Amiga
http://www.theoldcomputer.com/retro_radio/RetroRadio_Main.htm
http://www.kohina.com/
http://www.remix64.com/
http://retrogamer.net/forum/
http://retroasylum.podomatic.com/rss2.xml
http://retrogamesquad.com/
http://www.retronauts.com/
http://monsterfeet.com/noquarter/
http://www.retrogamingradio.com/
http://www.radiofeeds.co.uk/mp3.asp
[[#top|...to the top]]
====ZunePaint====
simplified typical workflow
* importing and organizing and photo management
* making global and regional local correction(s) - recalculation is necessary after each adjustment as it is not in real-time
* exporting your images in the best format available with the preservation of metadata
Whilst achieving 80% of a great photo with just a filter, the remaining 20% comes from a manual fine-tuning of specific image attributes.
For photojournalism, documentary, and event coverage, minimal touching is recommended. Stick to Camera Raw for such shots, and limit changes to level adjustment, sharpness, noise reduction, and white balance correction.
For fashion or portrait shoots, a large amount of adjustment is allowed and usually ends up far from the original. Skin smoothing, blemish removal, eye touch-ups, etc. are common. Might alter the background a bit to emphasize the subject.
Product photography usually requires a lot of sharpening, spot removal, and focus stacking.
For landscape shots, best results are achieved by doing the maximum amount of preparation before/while taking the shot. No amount of processing can match timing, proper lighting, correct gear, optimal settings, etc. Excessive post-processing might give you a dramatic shot but best avoided in the long term.
* White Balance - Left Amiga or F12 and K and under "Misc color effects" tab with a pull down for White Balance - color temperature also known as AKA tint (movies) or tones (painting) - warm temp raise red reduce green blue - cool raise blue lower red green
* Exposure - exposure compensation, highlight/shadow recovery
* Noise Reduction - during RAW development or using external software
* Lens Corrections - distortion, vignetting, chromatic aberrations
* Detail - capture sharpening and local contrast enhancement
* Contrast - black point, levels (sliders) and curves tools (F12 and K)
* Framing - straighten () and crop (F12 and F)
* Refinements - color adjustments and selective enhancements - Left Amiga or F12 and K for RGB and YUV histogram tabs -
* Resizing - enlarge for a print or downsize for the web or email (F12 and D)
* Output Sharpening - customized for your subject matter and print/screen size
White Balance - F12 and K
scan your image for a shade which was meant to be white (neutral with each RGB value being equal) like paper or plastic which is in the same light as the subject of the picture. Use the dropper tool to select this color, similar colours will shift and you will have selected the perfect white balance for your part of the image - for the whole picture make sure RAZ or CLR button at the bottom is pressed before applying to the image above.
Exposure correction
F12 and K - YUV Y luminosity - RGB extra red tint - move red curve slightly down and move blue green curves slightly up
Workflows in practice
* Undo - Right AROS key or F12 and Z
* Redo - Right AROS key or F12 and R
First flatten your image (if necessary) and then do a rotation until the picture looks level.
* Crop the picture. Click the selection button and drag a box over the area of the picture you want to keep. Press the crop button and the rest of the photo will be gone.
* Adjust your saturation, exposure, hue levels, etc., (right AROS Key and K for color correction) until you are happy with the photo. Make sure you zoom in all of the way to 100% and look the photo over, zoom back out and move around. Look for obvious problems with the picture.
* After coloring and exposure do a sharpen (Right AROS key and E for Convolution and select drop down option needed), e.g. set the matrix to 5x5 (roughly equivalent Amount to 60%) and set the Radius to 1.0. Click OK.
And save your picture
Implemented or would like to see for simplification and ease of use
basic filters (presets) like black and white, monochrome, edge detection (sobel), motion/gaussian blur,
* negative, sepiatone, retro vintage, night vision, colour tint, color gradient, color temperature, glows, fire, lightning, lens flare, emboss, filmic, pixelate mezzotint, antialias, etc.
adjust / cosmetic tools such as crop,
* reshaping tools, straighten, smear, smooth, perspective, liquify, bloat, pucker, push pixels in any direction, dispersion, transform like warp, blending with soft light, page-curl, whirl, ripple, fisheye, neon, etc.
* red eye fixing, blemish remover, skin smoothing, teeth whitener, make eyes look brighter, desaturate,
effects like oil paint, cartoon, pencil sketch, charcoal, noise/matrix like sharpen/unsharpen, (right AROS key with A for Artistic effects)
* blend two image, gradient blend, masking blend, explode, implode, custom collage, surreal painting, comic book style, needlepoint, stained glass, watercolor, mosaic, stencil/outline, crayon, chalk, etc.
borders such as
* dropshadow, rounded, blurred, color tint, picture frame, film strip polaroid, bevelled edge, etc.
brushes e.g.
* frost, smoke, etc.
and manual control of
fix lens issues including vignetting (darkening), color fringing and barrel distortion, and chromatic and geometric aberration - lens and body profiles
perspective correction
levels - directly modify the levels of the tone-values of an image, by using sliders for highlights, midtones and shadows
curves - Color Adjustment and Brightness/Contrast
color balance
one single color transparent (alpha channel (color information/selections) for masking and/or blending ) for backgrounds, etc.
Threshold indicates how much other colors will be considered mixture of the removed color and non-removed colors
decompose layer into a set of layers with each holding a different type of pattern that is visible within the image
any selection using any selecting tools like lasso tool, marquee tool etc. the selection will temporarily be save to alpha
If you create your image without transparency then the Alpha channel is not present, but you can add later.
File formats like .psd (Photoshop file has layers, masks etc. contains edited sensor data. The original sensor data is no longer available) .xcf .raw .hdr
Image Picture Formats
* low dynamic range (JPEG, PNG, TIFF 8-bit), 16-bit (PPM, TIFF), typically as a 16-bit TIFF in either ProPhoto or AdobeRGB colorspace - TIFF files are also fairly universal – although, if they contain proprietary data, such as Photoshop Adjustment Layers or Smart Filters, then they can only be opened by Photoshop making them proprietary.
* linear high dynamic range (HDR) images (PFM, [http://www.openexr.com/ ILM .EXR], jpg, [http://aminet.net/util/dtype cr2] (canon tiff based), hdr, NEF, CRW, ARW, MRW, ORF, RAF (Fuji), PEF, DCR, SRF, ERF, DNG files are RAW converted to an Adobe proprietary format - a container that can embed the raw file as well as the information needed to open it)
An old version of [http://archives.aros-exec.org/index.php?function=browse&cat=graphics/convert dcraw]
There is no single RAW file format. Each camera manufacturer has one or more unique RAW formats. RAW files contain the brightness levels data captured by the camera sensor. This data cannot be modified. A second smaller file, separate XML file, or within a database with instructions for the RAW processor to change exposure, saturation etc. The extra data can be changed but the original sensor data is still there. RAW is technically least compatible.
A raw file is high-bit (usually 12 or 14 bits of information) but a camera-generated TIFF file will be usually converted by the camera (compressed, downsampled) to 8 bits. The raw file has no embedded color balance or color space, but the TIFF has both. These three things (smaller bit depth, embedded color balance, and embedded color space) make it so that the TIFF will lose quality more quickly with image adjustments than the raw file. The camera-generated TIFF image is much more like a camera processed JPEG than a raw file. A strong advantage goes to the raw file. The power of RAW files, such as the ability to set any color temperature non-destructively and will contain more tonal values.
The principle of preserving the maximum amount of information to as late as possible in the process. The final conversion - which will always effectively represent a "downsampling" - should prevent as much loss as possible.
Once you save it as TIFF, you throw away some of that data irretrievably. When saving in the lossy JPEG format, you get tremendous file size savings, but you've irreversibly thrown away a lot of image data. As long as you have the RAW file, original or otherwise, you have access to all of the image data as captured.
Keyboard equivalence with Photoshop(tm) would help
File
PHOTOSHOP SHORTCUT GIMP
New Ctrl+n New
Open Ctrl+o Open
Close Ctrl+w Close
Save Ctrl+s Save
Save as Shift+Ctrl+s Save as
Revert F12 Revert
Print Ctrl+p Print
Exit Ctrl+q Quit
Edit
PHOTOSHOP SHORTCUT GIMP
Undo/Redo (1 level) Ctrl+z Undo (Redo is Shift+Ctrl+z)
Cut Ctrl+x Cut
Copy Ctrl+c Copy
Paste Ctrl+v Paste
Paste Into Shift+Ctrl+v Paste Into
Fill with FG color Alt+Backspace Fill with FG color
Fill with BG color Control+Backspace Fill with BG color
Image/Colors
PHOTOSHOP SHORTCUT GIMP
Levels Ctrl+l Levels
Auto Contrast Shift+Ctrl+Alt+l Stretch Contrast (same?)
Curves Ctrl+m Curves
Color Balance Ctrl+b Color Balance
Hue/Saturation Ctrl+u Hue-Saturation
Desaturate Shift+Ctrl+u Desaturate
Invert Ctrl+i Invert
Default Colors d Default Colors
Switch Colors x Switch Colors
Layer
PHOTOSHOP SHORTCUT GIMP
New Layer Shift+Ctrl+n New Layer
Layer via Copy Ctrl+j Duplicate Layer
Bring (layer) to Front Shift+Ctrl+] Layer to Top
Send (layer) to Back Shift+Ctrl+[ Layer to Bottom
Bring (layer) Forward Ctrl+] Raise Layer
Send (layer) Backward Ctrl+[ Lower Layer
Select Top Layer Shift+Alt+] Select Top Layer
Select Bottom Layer Shift+Alt+[ Select Bottom Layer
Select One Layer Forward Alt+] Select Previous Layer
Select One Layer Backward Alt+[ Select Next Layer
Merge Down Ctrl+e Merge Down
Merge Visible Shift+Ctrl+e Merge Visible
Preserve Transparency / Keep Transparency
Cycle Modes Forwards Shift+= Next Layer Mode
Cycle Modes Backwards Shift+- Previous Layer Mode
Select
PHOTOSHOP SHORTCUT GIMP
Select All Ctrl+a Select All
Deselect Ctrl+d Select None
Inverse Shift+Ctrl+i Invert
Feather Ctrl+Alt+d Feather
View
PHOTOSHOP SHORTCUT GIMP
Zoom In Ctrl+= Zoom In
Zoom Out Ctrl+- Zoom Out
Fit on Screen Ctrl+0 Zoom to Fit Window
Actual Pixels Ctrl+Alt+0 Zoom 1:1
Show/Hide Extras Ctrl+h Toggle Show Selection (close enough?)
Show/Hide Guides Ctrl+' Toggle Show Guides
Show/Hide Grid Ctrl+Alt+' Toggle Show Grid
Show/Hide Rulers Ctrl+r Toggle Show Rulers
Snap Ctrl+; Snap to Guides
Scroll View Up Page Up Scroll Page Up
Scroll View Down Page Down Scroll Page Down
Scroll View Left Ctrl+Page Up Scroll Page Left
Scroll View Right Ctrl+Page Down Scroll Page Right
Window/Dialogs
PHOTOSHOP SHORTCUT GIMP
? F5 Tools Dialog
Color Tab F6 Colors Dialog
Layers Tab F7 Layers Dialog
Info Tab F8 Image Information
Tools
PHOTOSHOP SHORTCUT GIMP
Rectangular Marquee Tool m Rect Select Tool
Elliptical Marquee Tool Shift+m Ellipse Select Tool
*This is a toggle between 'Elliptical Marquee Tool' and 'Rectangular Marquee Tool' in Photoshop
Move Tool v Move Tool
Lasso Tool l Free Select Tool
Magic Wand Tool w Fuzzy Select Tool
Crop Tool c Crop & Resize Tool
Airbrush Tool j Airbrush Tool
Paintbrush Tool b Paintbrush Tool
Clone Stamp Tool s Clone Stamp Tool
Eraser Tool e Eraser Tool
Gradient Tool g Blend Tool
Paint Bucket Tool Shift+g Bucket Fill Tool
*This is a toggle between 'Paint Bucket Tool' and 'Gradient Tool' in Photoshop
Blur Tool r Convolve Tool
Dodge Tool o DodgeBurn Tool
Type Tool t Text Tool
Pen Tool p Bezier Select Tool
Eye Dropper Tool i Color Picker Tool
Zoom Tool z Magnify Tool
Previous Brush , Previous Brush
Next Brush . Next Brush
First Brush Shift+< First Brush
Last Brush Shift+> Last Brush
Decrease Brush Size [ Decrease Brush Size
Increase Brush Size ] Increase Brush Size
Decrease Brush Hardness { Decrease Brush Hardness
Increase Brush Hardness } Increase Brush Hardness
Help
PHOTOSHOP SHORTCUT GIMP
Help F1 Help
Context Help Shift+F1 Context Help
Misc.
PHOTOSHOP SHORTCUT GIMP
Last Filter Ctrl+f Repeat Last Filter
? Shift+Ctrl+f Reshow Last Filter
Preferences Ctrl+k Preferences
Liquify Shift+Ctrl+x IWarp (close enough?)
Toggle Quick Mask q Toggle Quick Mask
Spotlights - triangle of white opaque shape
Cutting out and/or replacing unwanted background or features - select large areas with the selection option like the Magic Wand tool (aka Color Range) or the Lasso (quick and fast) with feather 2 to soften edge or the pen tool which adds points/lines/Bézier curves (better control but slower), hold down the shift button as you click to add extra points/areas of the subject matter to remove. Increase the tolerance to cover more areas. To subtract from your selection hold down alt as you're clicking.
* Layer masks are a better way of working than Erase they clip (black hides/hidden white visible/reveal). Clone Stamp can be simulated by and brushes for other areas.
* Leave the fine details like hair, fur, etc. to later with lasso and the shift key to draw a line all the way around your subject. Gradient Mapping - Inverse - Mask. i.e. Refine your selected image with edge detection and using the radius and edge options / adjuster (increase/decrease contrast) so that you will capture more fine detail from the background allowing easier removal.
Remove fringe/halo
saving image as png rather than jpg/jpeg to keep transparency background intact.
Implemented [http://colorizer.org/ colour model representations] [http://paulbourke.net/texture_colour/colourspace/ Mathematical approach] - Photo stills are spatially 2d (h and w), but are colorimetrically 3d (r g and b, or H L S, or Y U V etc.) as well.
* RGB - split cubed mapped color model for photos and computer graphics hardware using the light spectrum (adding and subtracting)
* YUV - Y-Lightness U-blue/yellow V-red/cyan (similar to YPbPr and YCbCr) used in the PAL, NTSC, and SECAM composite digital TV color [http://crewofone.com/2012/chroma-subsampling-and-transcoding/#comment-7299 video]
Histograms
White balanced (neutral) if the spike happens in the same place in each channel of the RGB graphs. If not, you're not balanced.
If you have sky you'll see the blue channel further off to the right.
RGB is best one to change colours. These elements RGB is a 3-channel format containing data for Red, Green, and Blue in your photo scale between 0 and 255. The area in a picture that appears to be brighter/whiter contains more red color as compared to the area which is relatively darker. Similarly in the green channel the area that appears to be darker contains less amount of green color as compared to the area that appears to be brighter. Similarly in the blue channel the area appears to be darker contains less amount of blue color as compared to the area that appears to be brighter. Brightness luminance histogram also matches the green histogram more than any other color - human eye interprets green better e.g. RGB rough ratio 15/55/30%
RGBA (RGB+A, A means alpha channel) . The alpha channel is used for "alpha compositing", which can mostly be associated as "opacity". AROS deals in RGB with two digits for every color (red, green, blue), in ARGB you have two additional hex digits for the alpha channel.
The shadows are represented by the left third of the graph. The highlights are represented by the right third. And the midtones are, of course, in the middle. The higher the black peaks in the graph, the more pixels are concentrated in that tonal range (total black area).
By moving the black endpoint, which identifies the shadows (darkness) and a white light endpoint (brightness) up and down either sides of the graph, colors are adjusted based on these points.
By dragging the central one, can increased the midtones and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative .
RGB Curves
* Move left endpoint (black point) up or right endpoint (white point) up brightens
* Move left endpoint down or right endpoint down darkens
Color Curves
* Dragging up on the Red Curve increases the intensity of the reds in the image but
* Dragging down on the Red Curve decreases the intensity of the reds and thus increases the apparent intensity of its complimentary color, cyan. Green’s complimentary color is magenta, and blue’s is yellow.
<pre>
Red <-> Cyan
Green <->Magenta
Blue <->Yellow
</pre>
YUV Best option to analyse and pull out statistical elements of any picture (i.e. separate luminance data from color data). The line in Y luma tone box represents the brightness of the image with the point in the bottom left been black, and the point in the top right as white. A low-contrast image has a concentrated clump of values nearer to the center of the graph. By comparison, a high-contrast image has a wider distribution of values across the entire width of the Histogram. A histogram that is skewed to the right would indicate a picture that is a bit overexposed because most of the color data is on the lighter side (increase exposure with higher value F), while a histogram with the curve on the left shows a picture that is underexposed. This is good information to have when using post-processing software because it shows you not only where the color data exists for a given picture, but also where any data has been clipped (extremes on edges of either side): that is, it does not exist and, therefore, cannot be edited. By dragging the endpoints of the line and as well as the central one, can increased the dark/shadows, midtones and light/bright parts and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative .
The U and V chroma parts show color difference components of the image. It’s useful for checking whether or not the overall chroma is too high, and also whether it’s being limited too much
Can be used to create a negative image but also
With U (Cb), the higher value you are, the more you're on the blue primary color. If you go to the low values then you're on blue complementary color, i.e. yellow.
With V (Cr), this is the same principle but with Red and Cyan.
e.g. If you push U full blue and V full red, you get magenta. If you push U full yellow and V full Cyan then you get green.
YUV simultaneously adds to one side of the color equation while subtracting from the other.
using YUV to do color correction can be very problematic because each curve alters the result of each other: the mutual influence between U and V often makes things tricky. You may also be careful in what you do to avoid the raise of noise (which happens very easily). Best results are obtained with little adjustments
sunset that looks uninspiring and needs some color pop especially for the rays over the hill, a subtle contrast raise while setting luma values back to the legal range without hard clipping.
Free royalty pictures, [www.freeimages.com ], [http://imageshack.us/ ], [http://photobucket.com/ ], [http://rawpixels.net/], [], [], [],
====Lunapaint====
Pixel based drawing app with onion-skin animation function
Blocking, Shading, Coloring, adding detail
<pre>
b BRUSH
e ERASER
alt eyedropper
v layer tool
z ZOOM / MAGNIFY < > n
spc panning
m marque
q lasso
w same color selection / region
</pre>
<pre>
, LM RM
v
V
f filter
F
. size
p
, pick color
[] last / next color
</pre>
There is not much missing in Lunapaint to be as good as FlipBook and then you have to take into account that Flipbook is considered to be amongst the best and easiest to use animation software out there. Ok to be honest Flipbook has some nice features that require more heavy work but those aren't so much needed right away, things like camera effects, sound, smart fill, export to different movie file formats etc.
Tried Flipbook with my tablet and compared it to Luna. The feeling is the same when sketching. LunaPaint is very responsive/fluent to draw with. Just as Flipbook is, and that responsiveness is something its users have mentioned as one of the positive sides of said software.
author was learning MUI. Some parts just have to be rewritten with proper MUI classes before new features can be added.
* add [Frame Add] / [Frame Del]
* whole animation feature is impossible to use. If you draw 2 color maybe but if you start coloring your cells then you get in trouble
* pickup the entire image as a brush, not just a selection ? And consequently remove the brush from memory when one doesn't need it anymore. can pick up a brush and put it onto a new image but cropping isn't possible, nor to load/save brushes.
* Undo is something I longed for ages in Lunapaint.
* to import into the current layer, other types of images (e.g. JPEG) besides RAW64.
* implement graphic tablet features support
**GENERAL DRAWING**
Miss it very much:
UNDO
ERASER
COLORPICKER - has to show on palette too which color got picked.
BACKGROUND COLOR -Possibility to select from "New project screen"
Miss it somewhat:
ICON for UNDO
ICON for ERASER
ICON for CLEAR SCREEN ( What can I say? I start over from scratch very often )
BRUSH - possibility to cut out as brush not just copy off image to brush
**ANIMATING**
Miss it very much:
NUMBER OF CELLS - Possibity to change total no. of cells during project
ANIM BRUSH - Possibility to pick up a selected part of cells into an animbrush
Miss it somewhat:
ADD/REMOVE FRAMES: Add/remove single frame
In general LunaPaint is really well done and it feels like a new DeluxePaint version. It works with my tablet. Sure there's much missing of course but things can always be added over time. So there is great potential in LunaPaint that's for sure. Animations could be made in it and maybe put together in QuickVideo, saving in .gif or .mng etc some day.
LAYERS
-Layers names don't get saved globally in animation frames
-Layers order don't change globally in an animation (perhaps as default?).
EXPORTING IMAGES
-Exporting frames to JPG/PNG gives problems with colors. (wrong colors. See my animatiopn --> My robot was blue now it's "gold" ) I think this only happens if you have layers.
-Trying to flatten the layers before export doesn't work if you have animation frames only the one you have visible will flatten properly all other frames are destroyed. (Only one of the layers are visible on them)
-Exporting images filenames should be for example e.g. file0001, file0002...file0010 instead as of now file1, file2...file10
LOAD/SAVE (Preferences)
-Make a setting for the default "Work" folder.
* Destroyed colors if exported image/frame has layers
* mystic color cycling of the selected color while stepping frames back/forth (annoying)
<pre>
Deluxe Paint II enhanced key shortcuts
NOTE: @ denotes the ALT key
[Technique]
F1 - Paint
F2 - Single Colour
F3 - Replace
F4 - Smear
F5 - Shade
F6 - Cycle
F7 - Smooth
M - Colour Cycle
[Brush]
B - Restore
O - Outline
h - Halve brush size
H - Double brush size
x - Flip brush on X axis
X - Double brush size on X axis only
y - Flip on Y
Y - Double on Y
z - Rotate brush 90 degrees
Z - Stretch
[Stencil]
` - Stencil On
[Miscellaneous]
F9 - Info Bar
F10 - Selection Bar
@o - Co-Ordinates
@a - Anti-alias
@r - Colourise
@t - Translucent
TAB - Colour Cycle
[Picture]
L - Load
S - Save
j - Page to Spare(Flip)
J - Page to Spare(Copy)
V - View Page
Q - Quit
[General Keys]
m - Magnify
< - Zoom In
> - Zoom Out
[ - Palette Colour Up
] - Palette Colour Down
( - Palette Colour Left
) - Palette Colour Right
, - Eye Dropper
. - Pixel / Brush Toggle
/ - Symmetry
| - Co-Ordinates
INS - Perspective Control
+/- - Brush Size (Fine Control)
w - Unfilled Polygon
W - Filled Polygon
e - Unfilled Ellipse
E - Filled Ellipse
r - Unfilled Rectangle
R - Filled Rectangle
t - Type/text tool
a - Select Font
u/U - Undo
d - Brush
D - Filled Non-Uniform Polygon
f/F - Fill Options
g/G - Grid
h/H - Brush Size (Coarse Control)
K - Clear
c - Unfilled Circle
C - Filled Circle
v - Line
b - Scissor Select and Toggle
B - Brush
{,} - Toggle between two background colours
</pre>
====Lodepaint====
Pixel based painting artwork app
====Grafx2====
Pixel based painting artwork app aesprite like
[https://www.youtube.com/watch?v=59Y6OTzNrhk aesprite workflow keys and tablet use], [],
====Vector Graphics ZuneFIG====
Vector Image Editing of files .svg .ps .eps
*Objects - raise lower rotate flip aligning snapping
*Path - unify subtract intersect exclude divide
*Colour - fill stroke
*Stroke - size
*Brushes -
*Layers -
*Effects - gaussian bevels glows shadows
*Text -
*Transform -
AmiFIG ([http://epb.lbl.gov/xfig/frm_introduction.html xfig manual])
[[File:MyScreen.png|thumb|left|alt=Showing all Windows open in AmiFIG.|All windows available to AmiFIG.]]
for drawing simple to intermediate vector graphic images for scientific and technical uses and for illustration purposes for those with talent
;Menu options
* Load - fig format but import(s) SVG
* Save - fig format but export(s) eps, ps, pdf, svg and png
* PAN = Ctrl + Arrow keys
* Deselect all points
There is no selected object until you apply the tool, and the selected object is not highlighted.
;Metrics - to set up page and styles - first window to open on new drawings
;Tools - Drawing Primitives - set Attributes window first before clicking any Tools button(s)
* Shapes - circles, ellipses, arcs, splines, boxes, polygon
* Lines - polylines
* Text "T" button
* Photos - bitmaps
* Compound - Glue, Break, Scale
* POINTs - Move, Add, Remove
* Objects - Move, Copy, Delete, Mirror, Rotate, Paste
use right mouse button to stop extra lines, shapes being formed and the left mouse to select/deselect tools button(s)
* Rotate - moves in 90 degree turns centered on clicked POINT of a polygon or square
;Attributes which provide change(s) to the above primitives
* Color
* Line Width
* Line Style
* arrowheads
;Modes
Choose from freehand, charts, figures, magnet, etc.
;Library - allows .fig clip-art to be stored
* compound tools to add .fig(s) together
;FIG 3.2 [http://epb.lbl.gov/xfig/fig-format.html Format] as produced by xfig version 3.2.5
<pre>
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
4 0 0 50 -1 0 12 0.0000 4 135 1050 1050 2475 This is a test.01
</pre>
# change the text alignment within the textbox. I can choose left, center, or right aligned by either changing the integer in the second column from 0 (left) to 1 or 2 (center, or right).
# The third integer in the row specifies fontcolor. For instance, 0 is black, but blue is 1 and Green3 is 13.
# The sixth integer in the bottom row specifies fontface. 0 is Times-Roman, but 16 is Helvetica (a MATLAB default).
# The seventh number is fontsize. 12 represents a 12pt fontsize. Changing the fontsize of an item really is as easy as changing that number to 20.
# The next number is the counter-clockwise angle of the text. Notice that I have changed the angle to .7854 (pi/4 rounded to four digits=45 degrees).
# twelfth number is the position according to the standard “x-axis” in Xfig units from the left. Note that 1200 Xfig units is equivalent to once inch.
# thirteenth number is the “y-position” from the top using the same unit convention as before.
* The nested text string is what you entered into the textbox.
* The “01″ present at the end of that line in the .fig file is the closing tag. For instance, a change to \100 appends a @ symbol at the end of the period of that sentence.
; Just to note there are no layers, no 3d functions, no shading, no transparency, no animation
[[#top|...to the top]]
===Audio===
# AHI uses linear panning/balance, which means that in the center, you will get -6dB. If an app uses panning, this is what you will get. Note that apps like Audio Evolution need panning, so they will have this problem.
# When using AHI Hifi modes, mixing is done in 32-bit and sent as 32-bit data to the driver. The Envy24HT driver uses that to output at 24-bit (always).
# For the Envy24/Envy24HT, I've made 16-bit and 24-bit inputs (called Line-in 16-bit, Line-in 24-bit etc.). There is unfortunately no app that can handle 24-bit recording.
====Music Mods====
Digital module (mods) trackers are music creation software using samples and sometimes soundfonts, audio plugins (VST, AU or RTAS), MIDI.
Generally, MODs are similar to MIDI in that they contain note on/off and other sequence messages that control the mod player. Unlike (most) midi files, however, they also contain sound samples that the sequence information actually plays. MOD files can have many channels (classic amiga mods have 4, corresponding to the inbuilt sound channels), but unlike MIDI, each channel can typically play only one note at once. However, since that note might be a sample of a chord, a drumloop or other complex sound, this is not as limiting as it sounds.
Like MIDI, notes will play indefinitely if they're not instructed to end. Most trackers record this information automatically if you play your music in live. If you're using manual note entry, you can enter a note-off command with a keyboard shortcut - usually Caps Lock.
In fact when considering file size MOD is not always the best option. Even a dummy song wastes few kilobytes for nothing when a simple SID tune could be few hundreds bytes and not bigger than 64kB. AHX is another small format, AHX tunes are never larger than 64kB excluding comments.
[https://www.youtube.com/watch?v=rXXsZfwgil Protrekkr] (previously aka [w:Juan_Antonio_Arguelles_Rius|NoiseTrekkr])
If Protrekkr does not start, please check if the Unit 0 has been setup in the AHI prefs and still not, go to the directory utilities/protrekkr and double click on the Protrekkr icon
*Sample
*Note - Effect
*Track (column) - Pattern - Order
It all starts with the Sample which is used to create Note(s) in a Track (column of a tracker)
The Note can be changed with an Effect. A Track of Note(s) can be collected into a Pattern (section of a song) and these can be given Order to create the whole song.
Patience (notes have to be entered one at a time) or playing the bassline on a midi controller (faster - see midi section above). Best approach is to wait until a melody popped into your head.
*Up-tempo means the track should be reasonably fast, but not super-fast.
*Groovy and funky imply the track should have some sort of "swing" feel, with plenty of syncopation or off beat emphasis and a recognizable, melodic bass line.
*Sweet and happy mean upbeat melodies, a major key and avoiding harsh sounds.
*Moody - minor key
First, create a quick bass sound, which is basically a sine wave, but can be hand drawn for a little more variance. It could also work for the melody part, too.
This is usually a bass guitar or some kind of synthesizer bass. The bass line is often forgotten by inexperienced composers, but it plays an important role in a musical piece. Together with the rhythm section the bass line forms the groove of a song. It's the glue between the rhythm section and the melodic layer of a song.
The drums are just pink noise samples, played at different frequencies to get a slightly different sound for the kick, snare, and hihats.
Instruments that fall into the rhythm category are bass drums, snares, hi-hats, toms, cymbals, congas, tambourines, shakers, etc. Any percussive instrument can be used to form part of the rhythm section.
The lead is the instrument that plays the main melody, on top of the chords. There are many instruments that can play a lead section, like a guitar, a piano, a saxophone or a flute. The list is almost endless. There is a lot of overlap with instruments that play chords. Often in one piece an instrument serves both roles. The lead melody is often played at a higher pitch than the chords.
Listened back to what was produced so far, and a counter-melody can be imagined, which can be added with a triangle wave.
To give the ends of phrases some life, you can add a solo part with a crunchy synth. By hitting random notes in the key of G, then edited a few of them.
For the climax of the song, filled out the texture with a gentle high-pitch pad… …and a grungy bass synth.
The arrow at A points at the pattern order list. As you see, the patterns don't have to be in numerical order. This song starts with pattern "00", then pattern "02", then "03", then "01", etcetera. Patterns may be repeated throughout a song.
The B arrow points at the song title. Below it are the global BPM and speed parameters. These determine the tempo of the song, unless the tempo is altered through effect commands during the song.
The C arrow points at the list of instruments. An instrument may consist of multiple samples. Which sample will be played depends on the note. This can be set in the Instrument Editing screen. Most instruments will consist of just one sample, though. The sample list for the selected instrument can be found under arrow D.
Here's a part of the main editing screen. This is where you put in actual notes. Up to 32 channels can be used, meaning 32 sounds can play simultaneously. The first six channels of pattern "03" at order "02" are shown here. The arrow at A points at the row number. The B arrow points at the note to play, in this case a C4. The column pointed at by the C arrow tells us which instrument is associated with that note, in this case instrument #1 "Kick".
The column at D is used (mainly) for volume commands. In this case it is left empty which means the instrument should play at its default volume. You can see the volume column being used in channel #6.
The E column tells us which effect to use and any parameters for that effect. In this case it holds the "F" effect, which is a tempo command. The "04" means it should play at tempo 4 (a smaller number means faster).
Base pattern
When I create a new track I start with what I call the base pattern. It is worthwhile to spend some time polishing it as a lot of the ideas in the base pattern will be copied and used in other patterns. At least, that's how I work. Every musician will have his own way of working. In "Wild Bunnies" the base pattern is pattern "03" at order "02".
In the section about selecting samples I talked about the four different categories of instruments: drums, bass, chords and leads. That's also how I usually go about making the base pattern. I start by making a drum pattern, then add a bass line, place some chords and top it off with a lead. This forms the base pattern from which the rest of the song will grow.
Drums
Here's a screenshot of the first four rows of the base pattern. I usually reserve the first four channels or so for the drum instruments. Right away there are a couple of tricks shown here. In the first channel the kick, or bass drum, plays some notes. Note the alternating F04 and F02 commands. The "F" command alters the tempo of the song and by quickly alternating the tempo; the song will get some kind of "swing" feel.
In the second channel the closed hi-hat plays a fairly simple pattern. Further down in the channel, not shown here, some open hi-hat notes are added for a bit of variation.
In the third and fourth channel the snare sample plays. The "8" command is for panning. One note is panned hard to the left and the other hard to the right. One sample is played a semitone lower than the other. This results in a cool flanging effect. It makes the snare stand out a little more in the mix.
Bass line
There are two different instruments used for the bass line. Instrument #6 is a pretty standard synthesized bass sound. Instrument #A sounds a bit like a slap bass when used with a quick fade out. By using two different instruments the bass line sounds a bit more ”human”. The volume command is used to cut off the notes. However, it is never set to zero. Setting the volume to a very small value will result in a reverb-like effect. This makes the song sound more "live".
The bass line hints at the chords that will be played and the key the song will be in. In this case the key of the song is D-major, a positive and happy key.
Chords
The D major chords that are being played here are chords stabs; short sounds with a quick decay (fade out). Two different instruments (#8 and #9) are used to form the chords. These instruments are quite similar, but have a slightly different sound, panning and volume decay. Again, the reason for this is to make the sound more human. The volume command is used on some chords to simulate a delay, to achieve more of a live feel. The chords are placed off-beat making for a funky rhythm.
Lead
Finally the lead melody is added. The other instruments are invaluable in holding the track together, but the lead melody is usually what catches people's attention.
A lot of notes and commands are used here, but it looks more complex than it is. A stepwise ascending melody plays in channel 13. Channel 14 and 15 copy this melody, but play it a few rows later at a lower volume. This creates an echo effect. A bit of panning is used on the notes to create some stereo depth. Like with the bass line, instead of cutting off notes the volume is set to low values for a reverb effect. The "461" effect adds a little vibrato to the note, which sounds nice on sustained notes.
Those paying close attention may notice the instrument used here for the lead melody is the same as the one used for the bass line (#6 "Square"), except played two or three octaves higher. This instrument is a looped square wave sample. Each type of wave has its own quirks, but the square wave (shown below) is a really versatile wave form.
Song structure
Good, catchy songs are often carefully structured into sections, some of which are repeated throughout the song with small variations.
A typical pop-song structure is: Intro - Verse - Chorus - Verse - Chorus - Bridge - Chorus.
Other single sectional song structures are
<pre>
Strophic or AAA Song Form - oldest story telling with refrain (often title of the song) repeated in every verse section melody
AABA Song Form - early popular, jazz and gospel fading during the 1960s
AB or Verse/Chorus Song Form - songwriting format of choice for modern popular music since the 1960s
Verse/Chorus/Bridge Song Form
ABAB Song Form
ABAC Song Form
ABCD Song Form
AAB 12-Bar Song Form - three four-bar lines or sub-sections
8-Bar Song Form
16-Bar Song Form
Hybrid / Compound Song Forms
</pre>
The most common building blocks are:
#INTRODUCTION(INTRO)
#VERSE
#REFRAIN
#PRE-CHORUS / RISE / CLIMB
#CHORUS
#BRIDGE
#MIDDLE EIGHT
#SOLO / INSTRUMENTAL BREAK
#COLLISION
#CODA / OUTRO
#AD LIB (OFTEN IN CODA / OUTRO)
The chorus usually has more energy than the verse and often has a memorable melody line. As the chorus is repeated the most often during the song, it will be the part that people will remember.
The bridge often marks a change of direction in the song. It is not uncommon to change keys in the bridge, or at least to use a different chord sequence. The bridge is used to build up tension towards the big finale, the last repetition of chorus.
Playing
RCTRL: Play song from row 0.
LSHIFT + RCTRL: Play song from current row.
RALT: Play pattern from row 0.
LSHIFT + RALT: Play pattern from current row.
Left mouse on '>': Play song from row 0.
Right mouse on '>': Play song from current row.
Left mouse on '|>': Play pattern from row 0.
Right mouse on '|>': Play pattern from current row.
Left mouse on 'Edit/Record': Edit mode on/off.
Right mouse on 'Edit/Record': Record mode on/off.
Editing
LSHIFT + ESCAPE: Switch large patterns view on/off
TAB: Go to next track
LSHIFT + TAB: Go to prev. track
LCTRL + TAB: Go to next note in track
LCTRL + LSHIFT + TAB: Go to prev. note in track
SPACE: Toggle Edit mode On & Off
(Also stop if the song is being played)
SHIFT SPACE: Toggle Record mode On & Off
(Wait for a key note to be pressed
or a midi in message to be received)
DOWN ARROW: 1 Line down
UP ARROW: 1 Line up
LEFT ARROW: 1 Row left
RIGHT ARROW: 1 Row right
PREV. PAGE: 16 Arrows Up
NEXT PAGE: 16 Arrows Down
HOME / END: Top left / Bottom right of pattern
LCTRL + HOME / END: First / last track
F5, F6, F7, F8, F9: Jump to 0, 1/4, 2/4, 3/4, 4/4 lines of the patterns
+ - (Numeric keypad): Next / Previous pattern
LCTRL + LEFT / RIGHT: Next / Previous pattern
LCTRL + LALT + LEFT / RIGHT: Next / Previous position
LALT + LEFT / RIGHT: Next / Previous instrument
LSHIFT + M: Toggle mute state of the current channel
LCTRL + LSHIFT + M: Solo the current track / Unmute all
LSHIFT + F1 to F11: Select a tab/panel
LCTRL + 1 to 4: Select a copy buffer
Tracking
1st and 2nd keys rows: Upper octave row
3rd and 4th keys rows: Lower octave row
RSHIFT: Insert a note off
/ and * (Numeric keypad)
or F1 F2: -1 or +1 octave
INSERT / BACKSPACE: Insert or Delete a line in current track
or current selected block.
LSHIFT + INSERT / BACKSPACE: Insert or Delete a line in current pattern
DELETE (NOT BACKSPACE): Empty a column or a selected block.
Blocks
(Blocks can also be selected with the mouse by holding the right button and scrolling the pattern with the mouse wheel).
LCTRL + A: Select entire current track
LCTRL + LSHIFT + A: Select entire current pattern
LALT + A: Select entire column note in a track
LALT + LSHIFT + A: Select all notes of a track
LCTRL + X: Cut the selected block and copy it into the block-buffer
LCTRL + C: Copy the selected block into the block-buffer
LCTRL + V: Paste the data from the block buffer into the pattern
LCTRL + I: Interpolate selected data from the first to the last row of a selection
LSHIFT + ARROWS
PREV. PAGE
NEXT PAGE: Select a block
LCTRL + R: Randomize the select columns of a selection, works similar to CTRL + I (interpolating them)
LCTRL + U: Transpose the note of a selection to 1 seminote higher
LCTRL + D: Transpose the note of a selection to 1 seminote lower
LCTRL + LSHIFT + U: Transpose the note of a selection to 1 seminote higher (only for the current instrument)
LCTRL + LSHIFT + D: Transpose the note of a selection to 1 seminote lower (only for the current instrument)
LCTRL + H: Transpose the note of a selection to 1 octave higher
LCTRL + L: Transpose the note of a selection to 1 octave lower
LCTRL + LSHIFT + H: Transpose the note of a selection to 1 octave higher (only for the current instrument)
LCTRL + LSHIFT + L: Transpose the note of a selection to 1 octave lower (only for the current instrument)
LCTRL + W: Save the current selection into a file
Misc
LALT + ENTER: Switch between full screen / windowed mode
LALT + F4: Exit program (Windows only)
LCTRL + S: Save current module
LSHIFT + S: Switch top right panel to synths list
LSHIFT + I: Switch top right panel to instruments list
<pre>
C-x xh xx xx hhhh Volume
B-x xh xx xx hhhh Jump to
A#x xh xx xx hhhh hhhh Slide
F-x xh xx xx hhhh Tempo
D-x xh xx xx hhhh Pattern Break
G#x xh xx xx hhhh
</pre>
h Hex 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
d Dec 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
The Set Volume command: C. Input a note, then move the cursor to the effects command column and type a C. Play the pattern, and you shouldn't be able to hear the note you placed the C by. This is because the effect parameters are 00. Change the two zeros to a 40(Hex)/64(Dec), depending on what your tracker uses. Play back the pattern again, and the note should come in at full volume.
The Position Jump command next. This is just a B followed by the position in the playing list that you want to jump to. One thing to remember is that the playing list always starts at 0, not 1. This command is usually in Hex.
Onto the volume slide command: A. This is slightly more complex (much more if you're using a newer tracker, if you want to achieve the results here, then set slides to Amiga, not linear), due to the fact it depends on the secondary tempo. For now set a secondary tempo of 06 (you can play around later), load a long or looped sample and input a note or two. A few rows after a note type in the effect command A. For the parameters use 0F. Play back the pattern, and you should notice that when the effect kicks in, the sample drops to a very low volume very quickly. Change the effect parameters to F0, and use a low volume command on the note. Play back the pattern, and when the slide kicks in the volume of the note should increase very quickly.
This because each part of the effect parameters for command A does a different thing. The first number slides the volume up, and the second slides it down. It's not recommended that you use both a volume up and volume down at the same time, due to the fact the tracker only looks for the first number that isn't set to 0. If you specify parameters of 8F, the tracker will see the 8, ignore the F, and slide the volume up. Using a slide up and down at same time just makes you look stupid. Don't do it...
The Set Tempo command: F, is pretty easy to understand. You simply specify the BPM (in Hex) that you want to change to. One important thing to note is that values of lower than 20 (Hex) sets the secondary tempo rather than the primary.
Another useful command is the Pattern Break: D. This will stop the playing of the current pattern and skip to the next one in the playing list. By using parameters of more than 00 you can also specify which line to begin playing from.
Command 3 is Portamento to Note. This slides the currently playing note to another note, at a specified speed. The slide then stops when it reaches the desired note.
<pre>
C-2 1 000 - Starts the note playing
--- 000
C-3 330 - Starts the slide to C-3 at a speed of 30.
--- 300 - Continues the slide
--- 300 - Continues the slide
</pre>
Once the parameters have been set, the command can be input again without any parameters, and it'll still perform the same function unless you change the parameters. This memory function allows certain commands to function correctly, such as command 5, which is the Portamento to Note and Volume Slide command. Once command 3 has been set up command 5 will simply take the parameters from that and perform a Portamento to Note. Any parameters set up for command 5 itself simply perform a Volume Slide identical to command A at the same time as the Portamento to Note.
This memory function will only operate in the same channel where the original parameters were set up.
There are various other commands which perform two functions at once. They will be described as we come across them.
C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 00
C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 02
C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 05
C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 08
C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0A
C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0D
C-3 04 .. .. 09 10 ---> C-3 04 .. .. 09 10
(You can also switch on the Slider Rec to On, and perform parameter-live-recording, such as cutoff transitions, resonance or panning tweaking, etc..) Note: this command only works for volume/panning and fx datas columns.
The next command we'll look at is the Portamento up/down: 1 and 2. Command 1 slides the pitch up at a specified speed, and 2 slides it down. This command works in a similar way to the volume slide, in that it is dependent on the secondary tempo. Both these commands have a memory dependent on each other, if you set the slide to a speed of 3 with the 1 command, a 2 command with no parameters will use the speed of 3 from the 1 command, and vice versa.
Command 4 is Vibrato. Vibrato is basically rapid changes in pitch, just try it, and you'll see what I mean. Parameters are in the format of xy, where x is the speed of the slide, and y is the depth of the slide. One important point to remember is to keep your vibratos subtle and natural so a depth of 3 or less and a reasonably fast speed, around 8, is usually used. Setting the depth too high can make the part sound out of tune from the rest.
Following on from command 4 is command 6. This is the Vibrato and Volume Slide command, and it has a memory like command 5, which you already know how to use.
Command 7 is Tremolo. This is similar to vibrato. Rather than changing the pitch it slides the volume. The effect parameters are in exactly the same format. vibrato effect (0x1dxy) x = speed y = depth (can't be used if arpeggio (0x1b) is turned on)
<pre>
C-7 00 .. .. 1B37 <- Turn Arpeggio effect on
--- .. .. .. 0000
--- .. .. .. 0000
--- .. .. .. 0000
--- .. .. .. 1B38 <- Change datas
--- .. .. .. 0000
--- .. .. .. 0000
--- .. .. .. 0000
--- .. .. .. 1B00 <- Turn it off
</pre>
Command 9 is Sample Offset. This starts the playback of the sample from a different place than the start. The effect parameters specify the sample offset, but only very roughly. Say you have a sample which is 8765(Hex) bytes long, and you wanted it to play from position 4321(Hex). The effect parameter could only be as accurate as the 43 part, and it would ignore the 21.
Command B is the Playing List/Order Jump command. The parameters specify the position in the Playing List/Order to jump to. When used in conjunction with command D you can specify the position and the line to play from.
Command E is pretty complex, as it is used for a lot of different things, depending on what the first parameter is. Let's take a trip through each effect in order.
Command E0 controls the hardware filter on an Amiga, which, as a low pass filter, cuts off the highest frequencies being played back. There are very few players and trackers on other system that simulate this function, not that you should need to use it. The second parameter, if set to 1, turns on the filter. If set to 0, the filter gets turned off.
Commands E1/E2 are Fine Portamento Up/Down. Exactly the same functions as commands 1/2, except that they only slide the pitch by a very small amount. These commands have a memory the same as 1/2 as well.
Command E3 sets the Glissando control. If parameters are set to 1 then when using command 3, any sliding will only use the notes in between the original note and the note being slid to. This produces a somewhat jumpier slide than usual. The best way to understand is to try it out for yourself. Produce a slow slide with command 3, listen to it, and then try using E31.
Command E4 is the Set Vibrato Waveform control. This command controls how the vibrato command slides the pitch. Parameters are 0 - Sine, 1 - Ramp Down (Saw), 2 - Square. By adding 4 to the parameters, the waveform will not be restarted when a new note is played e.g. 5 - Sine without restart.
Command E5 sets the Fine Tune of the instrument being played, but only for the particular note being played. It will override the default Fine Tune for the instrument. The parameters range from 0 to F, with 0 being -8 and F being +8 Fine Tune. A parameter of 8 gives no Fine Tune. If you're using a newer tracker that supports more than -8 to +8 e.g. -128 to +128, these parameters will give a rough Fine Tune, accurate to the nearest 16.
Command E6 is the Jump Loop command. You mark the beginning of the part of a pattern that you want to loop with E60, and then specify with E6x the end of the loop, where x is the number of times you want it to loop.
Command E7 is the Set Tremolo Waveform control. This has exactly the same parameters as command E4, except that it works for Tremolo rather than Vibrato.
Command E9 is for Retriggering the note quickly. The parameter specifies the interval between the retrigs. Use a value of less than the current secondary tempo, or else the note will not get retrigged.
Command EA/B are for Fine Volume Slide Up/Down. Much the same as the normal Volume Slides, except that these are easier to control since they don't depend on the secondary tempo. The parameters specify the amount to slide by e.g. if you have a sample playing at a volume of 08 (Hex) then the effect EA1 will slide this volume to 09 (Hex). A subsequent effect of EB4 would slide this volume down to 05 (Hex).
Command EC is the Note Cut. This sets the volume of the currently playing note to 0 at a specified tick. The parameters should be lower than the secondary tempo or else the effect won't work.
Command ED is the Note Delay. This should be used at the same time as a note is to be played, and the parameters will specify the number of ticks to delay playing the note. Again, keep the parameters lower than the secondary tempo, or the note won't get played!
Command EE is the Pattern Delay. This delays the pattern for the amount of time it would take to play a certain number of rows. The parameters specify how many rows to delay for.
Command EF is the Funk Repeat command. Set the sample loop to 0-1000. When EFx is used, the loop will be moved to 1000- 2000, then to 2000-3000 etc. After 9000-10000 the loop is set back to 0- 1000. The speed of the loop "movement" is defined by x. E is two times as slow as F, D is three times as slow as F etc. EF0 will turn the Funk Repeat off and reset the loop (to 0-1000).
effects 0x41 and 0x42 to control the volumes of the 2 303 units
There is a dedicated panel for synth parameter editing with coherent sections (osc, filter modulation, routing, so on) the interface is much nicer, much better to navigate with customizable colors, the reverb is now customizable (10 delay lines), It accepts newer types of Waves (higher bit rates, at least 24). Has a replay routine.
It's pretty much your basic VA synth. The problem isn't with the sampler being to high it's the synth is tuned two octaves too low, but if you want your samples tuned down just set the base note down 2 octaves (in the instrument panel).
so the synth is basically divided into 3 sections from left to right: oscillators/envelopes, then filter and LFO's, and in the right column you have mod routings and global settings.
for the oscillator section you have two normal oscillators (sine, saw, square, noise), the second of which is tunable, the first one tunes with the key pressed. Attached to OSC 1 is a sub-oscillator, which is a sawtooth wave tuned one octave down. The phase modulation controls the point in the duty cycle at which the oscillator starts. The ADSR envelope sliders (grouped with oscs) are for modulation envelope 1 and 2 respectively. you can use the synth as a sampler by choosing the instrument at the top.
In the filter column, the filter settings are: 1 = lowpass, 2 = highpass, 3 = off. cutoff and resonance. For the LFOs they are LFO 1 and LFO 2, the ADSR sliders in those are for the LFO itself.
For the modulation routings you have ENV 1, LFO 1 for the first slider and ENV 2, LFO 2 for the second, you can cycle through the individual routings there, and you can route each modulation source to multiple destinations of course, which is another big plus for this synth. Finally the glide time is for portamento and master volume, well, the master volume... it can go quite loud.
The sequencer is changed too, It's more like the one in AXS if you've used that, where you can mute tracks to re-use patterns with variation.
<pre>
Support for the following modules formats:
669 (Composer 669, Unis 669),
AMF (DSMI Advanced Module Format),
AMF (ASYLUM Music Format V1.0),
APUN (APlayer), DSM (DSIK internal format),
FAR (Farandole Composer),
GDM (General DigiMusic),
IT (Impulse Tracker),
IMF (Imago Orpheus),
MOD (15 and 31 instruments),
MED (OctaMED),
MTM (MultiTracker Module editor),
OKT (Amiga Oktalyzer),
S3M (Scream Tracker 3),
STM (Scream Tracker),
STX (Scream Tracker Music Interface Kit),
ULT (UltraTracker),
UNI (MikMod),
XM (FastTracker 2),
Mid (midi format via timidity)
</pre>
Possible plugin options include [http://lv2plug.in/ LV2],
====Midi - Musical Instrument Digital Interface====
A midi file typically contains music that plays on up to 16 channels (as per the midi standard), but many notes can simultaneously play on each channel (depending on the limit of the midi hardware playing it).
'''Timidity'''
Although usually already installed, you can uncompress the [http://www.libsdl.org/projects/SDL_mixer/ timidity.tar.gz (14MB)] into a suitable drawer like below's SYS:Extras/Audio/
assign timidity: SYS:Extras/Audio/timidity
added to SYSːs/User-Startup
'''WildMidi playback'''
'''Audio Evolution 4 (2003) 4.0.23 (from 2012)'''
*Sync Menu - CAMD Receive, Send checked
*Options Menu - MIDI Machine Control - Midi Bar Display - Select CAMD MIDI in / out - Midi Remote Setup
MCB Master Control Bus
*Sending a MIDI start-command and a Song Position Pointer, you can synchronize audio with an external MIDI sequencer (like B&P).
*B&P Receive, start AE, add AudioEvolution.ptool in Bars&Pipes track, press play / record in AE then press play in Pipes
*CAMD Receive, receive MIDI start or continue commands via camd.library sync to AE
*MIDI Machine Control
*Midi Bar Display
*Select CAMD MIDI in / out
*Midi Remote Setup - open requester for external MIDI controllers to control app mixer and transport controls cc remotely
Channel - mixer(vol, pan, mute, solo), eq, aux, fx,
Subgroup - Volume, Mute, Solo
Transport - Start, End, Play, Stop, Record, Rewind, Forward
Misc - Master vol., Bank Down, Bank up
<pre>
q - quit
First 3 already opened when AE started
F1 - timeline window
F2 - mixer
F3 - control
F4 - subgroups
F5 - aux returns
F6 - sample list
i - Load sample to use
space - start/stop play
b - reset time 0:00
s - split mode
r - open recording window
a - automation edit mode with p panning, m mute and v volume
[ / ] - zoom in / out
: - previous track
* - next track
x c v f - cut copy paste cross-fade
g - snap grid
</pre>
'''[http://bnp.hansfaust.de/ Bars n Pipes sequencer]'''
BarsnPipes debug ... in shell
Menu (right mouse)
*Song - Songs load and save in .song format but option here to load/save Midi_Files .mid in FORMAT0 or FORMAT1
*Track -
*Edit -
*Tool -
*Timing - SMTPE Synchronizing
*Windows -
*Preferences - Multiple MIDI-in option
Windows (some of these are usually already opened when Bars n Pipes starts up for the first time)
*Workflow -> Tracks, .... Song Construction, Time-line Scoring, Media Madness, Mix Maestro,
*Control -> Transport (or mini one), Windows (which collects all the Windows icons together-shortcut), .... Toolbox, Accessories, Metronome,
Once you have your windows placed on the screen that suits your workflow, Song -> Save as Default will save the positions, colors, icons, etc as you'd like them
If you need a particular setup of Tracks, Tools, Tempos etc, you save them all as a new song you can load each time
Right mouse menu -> Preferences -> Environment... -> ScreenMode - Linkages for Synch (to Slave) usbmidi.out.0 and Send (Master) usbmidi.in.0 - Clock MTC
'''Tracks'''
#Double-click on B&P's icon. B&P will then open with an empty Song. You can also double-click on a song icon to open a song in B&P.
#Choose a track. The B&P screen will contain a Tracks Window with a number of tracks shown as pipelines (Track 1, Track 2, etc...). To choose a track, simply click on the gray box to show an arrow-icon to highlight it. This icon show whether a track is chosen or not. To the right of the arrow-icon, you can see the icon for the midi-input. If you double-click on this icon you can change the MIDI-in setup.
#Choose Record for the track. To the right of the MIDI-input channel icon you can see a pipe. This leads to another clickable icon with that shows either P, R or M. This stands for Play, Record or Merge. To change the icon, simply click on it. If you choose P, this track can only play the track (you can't record anything). If you choose R, you can record what you play and it overwrites old stuff in the track. If you choose M, you merge new records with old stuff in the track. Choose R now to be able to make a record.
#Chose MIDI-channel. On the most right part of the track you can see an icon with a number in it. This is the MIDI-channel selector. Here you must choose a MIDI-channel that is available on your synthesizer/keyboard. If you choose General MIDI channel 10, most synthesizer will play drum sounds. To the left of this icon is the MIDI-output icon. Double-click on this icon to change the MIDI-output configuration.
#Start recording. The next step is to start recording. You must then find the control buttons (they look like buttons on a CD-player). To be able to make a record. you must click on the R icon. You can simply now press the play button (after you have pressed the R button) and play something on you keyboard. To playback your composition, press the Play button on the control panel.
#Edit track. To edit a track, you simply double click in the middle part of a track. You will then get a new window containing the track, where you can change what you have recorded using tools provided. Take also a look in the drop-down menus for more features.
Videos to help understand [https://www.youtube.com/watch?v=A6gVTX-9900 small intro], [https://www.youtube.com/watch?v=abq_rUTiSA4&t=3s Overview], [https://www.youtube.com/watch?v=ixOVutKsYQo Workplace Setup CC PC Sysex], [https://www.youtube.com/watch?v=dDnJLYPaZTs Import Song], [https://www.youtube.com/watch?v=BC3kkzPLkv4 Tempo Mapping], [https://www.youtube.com/watch?v=sd23kqMYPDs ptool Arpeggi-8], [https://www.youtube.com/watch?v=LDJq-YxgwQg PlayMidi Song], [https://www.youtube.com/watch?v=DY9Pu5P9TaU Amiga Midi], [https://www.youtube.com/watch?v=abq_rUTiSA4 Learning Amiga bars and Pipes],
Groups like [https://groups.io/g/barsnpipes/topics this] could help
'''Tracks window'''
* blue "1 2 3 4 5 6 7 8 Group" and transport tape deck VCR-type controls
* Flags
* [http://theproblem.alco-rhythm.com/org/bp.html Track 1, Track2, to Track 16, on each Track there are many options that can be activated]
Each Track has a
*Left LHS - Click in grey box to select what Track to work on, Midi-In ptool icon should be here (5pin plug icon), and many more from the Toolbox on the Input Pipeline
*Middle - (P, R, M) Play, Record, Merge/Multi before the sequencer line and a blue/red/yellow (Thru Mute Play) Tap
*Right RHS - Output pipeline, can have icons placed uopn it with the final ptool icon(s) being the 5pin icon symbol for Midi-OUT
Clogged pipelines may need Esc pressed several times
'''Toolbox (tools affect the chosen pipeline)'''
After opening the Toolbox window you can add extra Tools (.ptool) for the pipelines like keyboard(virtual), midimonitor, quick patch, transpose, triad, (un)quantize, feedback in/out, velocity etc
right mouse -> Toolbox menu option -> Install Tool... and navigate to Tool drawer (folder) and select requried .ptool
Accompany B tool to get some sort of rythmic accompaniment, Rythm Section and Groove Quantize are examples of other tools that make use of rythms
[https://aminet.net/search?query=bars Bars & Pipes pattern format .ptrn] for drawer (folder). Load from the Menu as Track or Group
'''Accessories (affect the whole app)'''
Accessories -> Install... and goto the Accessories drawer for .paccess like adding ARexx scripting support
'''Song Construction'''
<pre>
F1 Pencil
F2 Magic Wand
F3 Hand
F4 Duplicator
F5 Eraser
F6 Toolpad
F7 Bounding box
F8 Lock to A-B-A
A-B-A strip, section, edit flags, white boxes,
</pre>
Bars&Pipes Professional offers three track formats; basic song tracks, linear tracks — which don't loop — and finally real‑time tracks. The difference between them is that both song and linear tracks respond to tempo changes, while real‑time tracks use absolute timing, always trigger at the same instant regardless of tempo alterations
'''Tempo Map'''
F1 Pencil
F2 Magic Wand
F3 Hand
F4 Eraser
F5 Curve
F6 Toolpad
Compositions
Lyrics, Key, Rhythm, Time Signature
'''Master Parameters'''
Key, Scale/Mode
'''Track Parameters'''
Dynamics
'''Time-line Scoring'''
'''Media Madness'''
'''Mix Maestro'''
*ACCESSORIES Allows the importation of other packages and additional modules
*CLIPBOARD Full cut, copy and paste operations, enabling user‑definable clips to be shared between tracks.
*INFORMATION A complete rundown on the state of the current production and your machine.
*MASTER PARAMETERS Enables global definition of time signatures, lyrics, scales, chords, dynamics and rhythm changes.
*MEDIA MADNESS A complete multimedia sequencer which allows samples, stills, animation, etc
*METRONOME Tempo feedback via MIDI, internal Amiga audio and colour cycling — all three can be mixed and matched as required.
*MIX MAESTRO Completely automated mixdown with control for both volume and pan. All fader alterations are memorised by the software
*RECORD ACTIVATION Complete specification of the data to be recorded/merged. Allows overdubbing of pitch‑bend, program changes, modulation etc
*SET FLAGS Numeric positioning of location and edit flags in either SMPTE or musical time
*SONG CONSTRUCTION Large‑scale cut and paste of individual measures, verses or chorus, by means of bounding box and drag‑n‑drop mouse selections
*TEMPO MAP Tempo change using a variety of linear and non‑linear transition curves
*TEMPO PALETTE Instant tempo changes courtesy of four user‑definable settings.
*TIMELINE SCORING Sequencing of a selection of songs over a defined period — ideal for planning an entire set for a live performance.
*TOOLBOX Selection screen for the hundreds of signal‑processing tools available
*TRACKS Opens the main track window to enable recording, editing and the use of tools.
*TRANSPORT Main playback control window, which also provides access to user‑ defined flags, loop and punch‑in record modes.
Bars and Pipes Pro 2.5 is using internal 4-Byte IDs, to check which kind of data are currently processed.
Especially in all its files the IDs play an important role. The IDs are stored into the file in the same order they are laid out in the memory.
In a Bars 'N' Pipes file (no matter which kind) the ID "NAME" (saved as its ANSI-values) is stored on a big endian system (68k-computer) as "NAME". On a little endian system (x86 PC computer) as "EMAN". The target is to make the AROS-BnP compatible to songs, which were stored on a 68k computer (AMIGA).
If possible, setting MIDI channels for Local Control for your keyboard
http://www.fromwithin.com/liquidmidi/archive.shtml
MIDI files are essentially a stream of event data. An event can be many things, but typically "note on", "note off", "program change", "controller change", or messages that instruct a MIDI compatible synth how to play a given bit of music.
* Channel - 1 to 16 -
* Messages - PC presets, CC effects like delays, reverbs, etc
* Sequencing - MIDI instruments, Drums, Sound design,
* Recording -
* GUI - Piano roll or Tracker, Staves and Notes
MIDI events/messages like step entry e.g. Note On, Note Off
MIDI events/messages like PB, PC, CC, Mono and Poly After-Touch, Sysex, etc
MIDI sync - Midi Clocks (SPS Measures), Midi Time Code (h, m, s and frames) SMPTE
Individual track editing with audition edits so easier to test any changes. Possible to stop track playback, mix clips from the right edit flag and scroll the display using arrow keys.
Step entry, to extend a selected note hit the space bar and the note grows accordingly. Ability to cancel mouse‑driven edits by simply clicking the right mouse button — at which point everything snaps back into its original form. Lyrics can now be put in with syllable dividers, even across an entire measure or section. Autoranging when you open a edit window, the notes are automatically displayed — working from the lowest upwards.
Flag editing, shift‑click on a flag immediately open the bounds window, ready for numeric input. Ability to cancel edits using the right‑hand mouse button, plus much improved Bounding Box operations.
Icons other than the BarsnPipes icon -> PUBSCREEN=BarsnPipes (cannot choose modes higher than 8bit 256 colors)
Preferences -> Menu in Tracks window - Send MIDI defaults OFF
Prefs -> Environment -> screenmode (saved to BarsnPipes.prefs binary file)
Customization -> pics in gui drawer (folder) -
Can save as .song files and .mid General Midi
SMF is a “Standard Midi File” ([http://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html SMF0, SMF1 and SMF2]), [https://github.com/stump/libsmf libsmf], [https://github.com/markc/midicomp MIDIcomp], [https://github.com/MajicDesigns/MD_MIDIFile C++ src], [], [https://github.com/newdigate/midi-smf-reader Midi player],
* SMF0 All MIDI data is stored in one track only, separated exclusively by the MIDI channel.
* SMF1 The MIDI data is stored in separate tracks/channels.
* SMF2 (rarely used) The MIDI data is stored in separate tracks, which are additionally wrapped in containers, so it's possible to have e.g. several tracks using the same MIDI channels.
Would it be possible to enrich Bars N’Pipes with software synth and sample support along with audio recording and mastering tools like in the named MAC or PC music sequencers?
On the classic AMIGA-OS this is not possible because of missing CPU-power. The hardware of the classic AMIGA is not further developed. So we must say (unfortunately) that those dreams can’t become reality
BarsnPipes is best used with external MIDI-equipment. This can be a keyboard or synthesizer with MIDI-connectors.
<pre>
MIDI can control 16 channels
There are USB-MIDI-Interfaces on the market with 16 independent MIDI-lines (multi-port), which can handle 16 MIDI devices independently – 16×16 = 256 independent MIDI-channels or instruments
handle up to 16 different USB-MIDI-Interfaces (multi-device). That is: 16X16X16 = 4096 independent MIDI-channels – theoretically
</pre>
<pre>
Librarian MIDI SYStem EXplorer (sysex) - PatchEditor and used to be supplied as a separate program like PatchMeister but currently not at present
It should support MIDI.library (PD), BlueRibbon.library (B&P), TriplePlayPlus, and CAMD.library (DeluxeMusic) and
MIDI information from a device's user manual and configure a custom interface to access parameters for all MIDI products connected to the system
Supports ALL MIDI events and the Patch/Librarian data is stored in MIDI standard format
Annette M.Crowling, Missing Link Software, Inc.
</pre>
Composers
<pre>
[https://x.com/hirasawa/status/1403686519899054086 Susumu Hirasawa]
</pre>
<pre>
1988 Todor Fay and his wife Melissa Jordan Gray, who founded the Blue Ribbon Inc
1992 Bars&Pipes Pro published
November 2000, Todor Fay announcement to release the sourcecode of Bars&Pipes Pro 2.5c beta
end of May 2001, the source of the main program and the sources of some tools and accessories were in a complete and compileable state
end of October 2009 stop further development of BarsnPipes New for now on all supported systems and made freeware
2013 Alfred Faust diagnosed with incureable illness, called „Myastenia gravis“ (weak muscles)
</pre>
Protrekkr
How to use Midi In/Out in Protrekkr ?
First of all, midi in & out capabilities of this program are rather limited.
# Go to Misc. Setup section and select a midi in or out device to use (ptk only supports one device at a time).
# Go to instrument section, and select a MIDI PRG (the default is N/A, which means no midi program selected).
# Go to track section and here you can assign a midi channel to each track of ptk.
# Play notes :]. Note off works. F'x' note cut command also works too, and note-volume command (speed) is supported.
Also, you can change midicontrollers in the tracker, using '90' in the panning row:
<pre>
C-3 02 .. .. 0000....
--- .. .. 90 xxyy.... << This will set the value
--- .. .. .. 0000.... of the controller n.'xx' to 'yy' (both in hex)
--- .. .. .. 0000....
</pre>
So "--- .. .. 90 2040...." will set the controller number $20(32) to $40(64).
You will need the midi implementation table of your gear to know what you can change with midi controller messages.
N.B. Not all MIDI devices are created equal!
Although the MIDI specification defines a large range of MIDI messages of various kinds, not every MIDI device is required to work in exactly the same way and respond to all the available messages and ways of working. For example, we don't expect a wind synthesiser to work in the same way as a home keyboard.
Some devices, the older ones perhaps, are only able to respond to a single channel. With some of those devices that channel can be altered from the default of 1 (probably) to another channel of the 16 possible.
Other devices, for instance monophonic synthesisers, are capable of producing just one note at a time, on one MIDI channel. Others can produce many notes spread across many channels.
Further devices can respond to, and transmit, "breath controller" data (MIDI controller number 2 (CC#2)) others may respond to the reception of CC#2 but not be able to create and to send it.
A controller keyboard may be capable of sending "expression pedal" data, but another device may not be capable of responding to that message.
Some devices just have the basic GM sound set. The "voice" or "instrument" is selected using a "Program Change" message on its own.
Other devices have a greater selection of voices, usually arranged in "banks", and the choice of instrument is made by responding to "Bank Select MSB" (MIDI controller 0 (CC#0)), others use "Bank Select LSB" (MIDI controller number 32 (CC#32)), yet others use both MSB and LSB sent one after the other, all followed by the Program Change message. The detailed information about all the different voices will usually be available in a published MIDI Data List.
MIDI Implementation Chart
But in the User Manual there is sometimes a summary of how the device works, in terms of MIDI, in the chart at the back of the manual, the MIDI Implementation Chart.
If you require two devices to work together you can compare the two implementation charts to see if they are "compatible". In order to do this we will need to interpret that chart.
The chart is divided into four columns headed "Function", "Transmitted" (or "Tx"), "Received" (or "Rx"), or more correctly "Recognised", and finally, "Remarks".
<pre>
The left hand column defines which MIDI functions are being described.
The 2nd column defines what the device in question is capable of transmitting to another device.
The 3rd column defines what the device is capable of responding to.
The 4th column is for explanations of the values contained within these previous two columns.
</pre>
There should then be twelve sections, with possibly a thirteenth containing extra "Notes". Finally there should be an explanation of the four MIDI "modes" and what the "X" and the "O" mean.
<pre>
Mode 1: Omni On, Poly;
Mode 2: Omni On, Mono;
Mode 3: Omni Off, Poly;
Mode 4: Omni Off, Mono.
</pre>
O means "yes" (implemented), X means "no" (not implemented).
Sometimes you will find a row of asterisks "**************", these seem to indicate that the data is not applicable in this case. Seen in the transmitted field only (unless you've seen otherwise).
Lastly you may find against some entries an asterisk followed by a number e.g. *1, these will refer you to further information, often on a following page, giving more detail.
Basic Channel
But the very first set of boxes will tell us the "Basic Channel(s)" that the device sends or receives on.
"Default" is what happens when the device is first turned on, "changed" is what a switch of some kind may allow the device to be set to.
For many devices e.g. a GM sound module or a home keyboard, this would be 1-16 for both. That is it can handle sending and receiving on all MIDI channels.
On other devices, for example a synthesiser, it may by default only work on channel 1. But the keyboard could be "split" with the lower notes e.g. on channel 2. If the synth has an arppegiator, this may be able to be set to transmit and or receive on yet another channel.
So we might see the default as "1" but the changed as "1-16".
Modes.
We need to understand Omni On and Off, and Mono and Poly, then we can decipher the four modes.
But first we need to understand that any of these four Mode messages can be sent to any MIDI channel. They don't necessarily apply to the whole device.
If we send an "Omni On" message (CC#125) to a MIDI channel of a device, we are, in effect, asking it to respond to e.g. a Note On / Off message pair, received on any of the sixteen channels. Sound strange? Read it again. Still strange? It certainly is. We normally want a MIDI channel to respond only to Note On / Off messages sent on that channel, not any other. In other words, "Omni Off".
So "Omni Off" (CC#124) tells a channel of our MIDI device to respond only to messages sent on that MIDI channel.
"Poly" (CC#127) is for e.g. a channel of a polyphonic sound module, or a home keyboard, to be able to respond to many simultaneous Note On / Off message pairs at once and produce musical chords.
"Mono" (CC#126) allows us to set a channel to respond as if it were e.g. a flute or a trumpet, playing just one note at a time. If the device is capable of it, then the overlapping of notes will produce legato playing, that is the attack portion of the second note of two overlapping notes will be removed resulting in a "smoother" transition.
So a channel with a piano voice assigned to it will have Omni Off, Poly On (Mode 3), a channel with a saxophone voice assigned could be Omni Off, Mono On (Mode 4).
We call these combinations the four modes, 1 to 4, as defined above.
Most modern devices will have their channels set to Mode 3 (Omni Off, Poly) but be switchable, on a per channel basis, to Mode 4 (Omni Off, Mono).
This second section of data will include first its default value i.e. upon device switch on. Then what Mode messages are acceptable, or X if none.
Finally, in the "Altered" field, how a Mode message that can't be implemented will be interpreted. Usually there will just be a row of asterisks effectively meaning nothing will be done if you try to switch to an unimplemented mode.
Note Number
<pre>
The next row will tell us which MIDI notes the device can send or receive, normally 0-127.
The second line, "True Voice" has the following in the MIDI specification:
"Range of received note numbers falling within the range of true notes produced by the instrument."
My interpretation is that, for instance, a MIDI piano may be capable of sending all MIDI notes (0 to 127) by transposition, but only responding to the 88 notes (21 to 108) of a real piano.
</pre>
Velocity
This will tell us whether the device we're looking at will handle note velocity, and what range from 1-127, or maybe just 64, it transmits or will recognise. So usually "O" plus a range or "X" for not implemented.
After touch
This may have one or two lines two it.
If a one liner the either "O" or "X", yes or no.
If a two liner then it may include "Keys" or "Poly" and "Channel".
This will show whether the device will respond to Polyphonic after touch or channel after touch or neither.
Pitch Bend
Again "O" for implemented, "X" for not implemented.
(Many stage pianos will have no pitch bend capability.)
It may also, in the notes section, state whether it will respond to the full 14 bits, or not, as usually encoded by the pitch bend wheel.
Control Change
This is likely to be the largest section of the chart.
It will list all those controllers, starting from CC#0, Bank Select MSB, which the device is capable of sending, and those that it will respond to using "O" or "X" respectively.
You will, almost certainly, get some further explanation of functionality in the remarks column, or in more detail elsewhere in the documentation.
Of course you will need to know what all the various controller numbers do. Lots of the official technical specifications can be found at the [www.midi.org/techspecs/ MMA], with the table of messages and control change [www.midi.org/techspecs/midimessages.php message numbers]
Program Change
Again "O" or "X" in the Transmitted or Recognised column to indicate whether or not the feature is implemented. In addition a range of numbers is shown, typically 0-127, to show what is available.
True # (number): "The range of the program change numbers which correspond to the actual number of patches selected."
System Exclusive
Used to indicate whether or not the device can send or recognise System Exclusive messages. A short description is often given in the Remarks field followed by a detailed explanation elsewhere in the documentation.
System Common - These include the following:
<pre>
MIDI Time Code Quarter Frame messages (device synchronisation).
Song Position Pointer
Song Select
Tune Request
</pre>
The section will indicate whether or not the device can send or respond to any of these messages.
System Real Time
These include the following:
<pre>
Timing Clock - often just written as "Clock"
Start
Stop
Continue
</pre>
These three are usually just referred to as "Commands" and listed.
Again the section will indicate which, if any, of these messages the device can send or respond to.
<pre>
Aux. Messages
Again "O" or "X" for implemented or not.
Aux. = Auxiliary.
Active Sense = Active Sensing.
</pre>
Often with an explanation of the action of the device.
Notes
The "Notes" section can contain any additional comments to clarify the particular implementation.
Some of the explanations have been drawn directly from the MMA MIDI 1.0 Detailed Specification.
And the detailed explanation of some of the functions will be found there, or in the General MIDI System Level 1 or General MIDI System Level 2 documents also published by the MMA.
OFFICIAL MIDI SPECIFICATIONS
SUMMARY OF MIDI MESSAGES
Table 1 - Summary of MIDI Messages
The following table lists the major MIDI messages in numerical (binary) order (adapted from "MIDI by the Numbers" by D. Valenti, Electronic Musician 2/88, and updated by the MIDI Manufacturers Association.). This table is intended as an overview of MIDI, and is by no means complete.
WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the official MIDI Specifications for additional information.
MIDI 1.0 Specification
Message Summary Channel Voice Messages [nnnn = 0-15 (MIDI Channel Number 1-16)]
{| class="wikitable sortable" width="90%"
! width="10%" |Status D7----D0
! width="10%" |Data Byte(s) D7----D0
! width="20%" |Description
|-
|<!--Status-->1000nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note Off event.
This message is sent when a note is released (ended). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity.
|-
|<!--Status-->1001nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note On event.
This message is sent when a note is depressed (start). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity.
|-
|<!--Status-->1010nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Polyphonic Key Pressure (Aftertouch).
This message is most often sent by pressing down on the key after it "bottoms out". (kkkkkkk) is the key (note) number. (vvvvvvv) is the pressure value.
|-
|<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Control Change.
This message is sent when a controller value changes. Controllers include devices such as pedals and levers. Controller numbers 120-127 are reserved as "Channel Mode Messages" (below). (ccccccc) is the controller number (0-119). (vvvvvvv) is the controller value (0-127).
|-
|<!--Status-->1100nnnn || <!--Data-->0ppppppp || <!--Description-->Program Change. This message sent when the patch number changes. (ppppppp) is the new program number.
|-
|<!--Status-->1101nnnn || <!--Data-->0vvvvvvv || <!--Description-->Channel Pressure (After-touch). This message is most often sent by pressing down on the key after it "bottoms out". This message is different from polyphonic after-touch. Use this message to send the single greatest pressure value (of all the current depressed keys). (vvvvvvv) is the pressure value.
|-
|<!--Status-->1110nnnn || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Pitch Bend Change. This message is sent to indicate a change in the pitch bender (wheel or lever, typically). The pitch bender is measured by a fourteen bit value. Center (no pitch change) is 2000H. Sensitivity is a function of the receiver, but may be set using RPN 0. (lllllll) are the least significant 7 bits. (mmmmmmm) are the most significant 7 bits.
|}
Channel Mode Messages (See also Control Change, above)
{| class="wikitable sortable" width="90%"
! width="10%" |Status D7----D0
! width="10%" |Data Byte(s) D7----D0
! width="20%" |Description
|-
|<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Channel Mode Messages.
This the same code as the Control Change (above), but implements Mode control and special message by using reserved controller numbers 120-127. The commands are:
*All Sound Off. When All Sound Off is received all oscillators will turn off, and their volume envelopes are set to zero as soon as possible c = 120, v = 0: All Sound Off
*Reset All Controllers. When Reset All Controllers is received, all controller values are reset to their default values. (See specific Recommended Practices for defaults) c = 121, v = x: Value must only be zero unless otherwise allowed in a specific Recommended Practice.
*Local Control. When Local Control is Off, all devices on a given channel will respond only to data received over MIDI. Played data, etc. will be ignored. Local Control On restores the functions of the normal controllers.
c = 122, v = 0: Local Control Off
c = 122, v = 127: Local Control On
* All Notes Off. When an All Notes Off is received, all oscillators will turn off.
c = 123, v = 0: All Notes Off (See text for description of actual mode commands.)
c = 124, v = 0: Omni Mode Off
c = 125, v = 0: Omni Mode On
c = 126, v = M: Mono Mode On (Poly Off) where M is the number of channels (Omni Off) or 0 (Omni On)
c = 127, v = 0: Poly Mode On (Mono Off) (Note: These four messages also cause All Notes Off)
|}
System Common Messages
System Messages (0xF0)
The final status nybble is a “catch all” for data that doesn’t fit the other statuses. They all use the most significant nybble (4bits) of 0xF, with the least significant nybble indicating the specific category.
The messages are denoted when the MSB of the second nybble is 1. When that bit is a 0, the messages fall into two other subcategories.
System Common
If the MSB of the second second nybble (4 bits) is not set, this indicates a System Common message. Most of these are messages that include some additional data bytes.
System Common Messages
Type Status Byte Number of Data Bytes Usage
<pre>
Time Code Quarter Frame 0xF1 1 Indicates timing using absolute time code, primarily for synthronization with video playback systems. A single location requires eight messages to send the location in an encoded hours:minutes:seconds:frames format*.
Song Position 0xF2 2 Instructs a sequencer to jump to a new position in the song. The data bytes form a 14-bit value that expresses the location as the number of sixteenth notes from the start of the song.
Song Select 0xF3 1 Instructs a sequencer to select a new song. The data byte indicates the song.
Undefined 0xF4 0
Undefined 0xF5 0
Tune Request 0xF6 0 Requests that the receiver retunes itself**.
</pre>
*MIDI Time Code (MTC) is significantly complex. Please see the MIDI Specification
**While modern digital instruments are good at staying in tune, older analog synthesizers were prone to tuning drift. Some analog synthesizers had an automatic tuning operation that could be initiated with this command.
System Exclusive
If you’ve been keeping track, you’ll notice there are two status bytes not yet defined: 0xf0 and 0xf7. These are used by the System Exclusive message, often abbreviated at SysEx. SysEx provides a path to send arbitrary data over a MIDI connection. There is a group of predefined messages for complex data, like fine grained control of MIDI Time code machinery. SysEx is also used to send manufacturer defined data, such as patches, or even firmware updates.
System Exclusive messages are longer than other MIDI messages, and can be any length. The messages are of the following format:
0xF0, 0xID, 0xdd, ...... 0xF7
The message is bookended with distinct bytes.
It opens with the Start Of Exclusive (SOX) data byte, 0xF0.
The next one to three bytes after the start are an identifier.
Values from 0x01 to 0x7C are one-byte vendor IDs, assigned to manufacturers who were involved with MIDI at the beginning.
If the ID is 0x00, it’s a three-byte vendor ID - the next two bytes of the message are the value.
<pre>
ID 0x7D is a placeholder for non-commercial entities.
ID 0x7E indicates a predefined Non-realtime SysEx message.
ID 0x7F indicates a predefined Realtime SysEx message.
</pre>
After the ID is the data payload, sent as a stream of bytes.
The transfer concludes with the End of Exclusive (EOX) byte, 0xF7.
The payload data must follow the guidelines for MIDI data bytes – the MSB must not be set, so only 7 bits per byte are actually usable. If the MSB is set, it falls into three possible scenarios.
An End of Exclusive byte marks the ordinary termination of the SysEx transfer.
System Real Time messages may occur within the transfer without interrupting it. The recipient should handle them independently of the SysEx transfer.
Other status bytes implicitly terminate the SysEx transfer and signal the start of new messages.
Some inexpensive USB-to-MIDI interfaces aren’t capable of handling messages longer than four bytes.
{| class="wikitable sortable" width="90%"
! width="10%" |Status D7----D0
! width="10%" |Data Byte(s) D7----D0
! width="20%" |Description
|-
|<!--Status-->11110000 || <!--Data-->0iiiiiii [0iiiiiii 0iiiiiii] 0ddddddd --- --- 0ddddddd 11110111 || <!--Description-->System Exclusive.
This message type allows manufacturers to create their own messages (such as bulk dumps, patch parameters, and other non-spec data) and provides a mechanism for creating additional MIDI Specification messages. The Manufacturer's ID code (assigned by MMA or AMEI) is either 1 byte (0iiiiiii) or 3 bytes (0iiiiiii 0iiiiiii 0iiiiiii). Two of the 1 Byte IDs are reserved for extensions called Universal Exclusive Messages, which are not manufacturer-specific. If a device recognizes the ID code as its own (or as a supported Universal message) it will listen to the rest of the message (0ddddddd). Otherwise, the message will be ignored. (Note: Only Real-Time messages may be interleaved with a System Exclusive.)
|-
|<!--Status-->11110001 || <!--Data-->0nnndddd || <!--Description-->MIDI Time Code Quarter Frame.
nnn = Message Type
dddd = Values
|-
|<!--Status-->11110010 || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Song Position Pointer.
This is an internal 14 bit register that holds the number of MIDI beats (1 beat= six MIDI clocks) since the start of the song. l is the LSB, m the MSB.
|-
|<!--Status-->11110011 || <!--Data-->0sssssss || <!--Description-->Song Select.
The Song Select specifies which sequence or song is to be played.
|-
|<!--Status-->11110100 || <!--Data--> || <!--Description-->Undefined. (Reserved)
|-
|<!--Status-->11110101 || <!--Data--> || <!--Description-->Undefined. (Reserved)
|-
|<!--Status-->11110110 || <!--Data--> || <!--Description-->Tune Request. Upon receiving a Tune Request, all analog synthesizers should tune their oscillators.
|-
|<!--Status-->11110111 || <!--Data--> || <!--Description-->End of Exclusive. Used to terminate a System Exclusive dump.
|}
System Real-Time Messages
{| class="wikitable sortable" width="90%"
! width="10%" |Status D7----D0
! width="10%" |Data Byte(s) D7----D0
! width="20%" |Description
|-
|<!--Status-->11111000 || <!--Data--> || <!--Description-->Timing Clock. Sent 24 times per quarter note when synchronization is required.
|-
|<!--Status-->11111001 || <!--Data--> || <!--Description-->Undefined. (Reserved)
|-
|<!--Status-->11111010 || <!--Data--> || <!--Description-->Start. Start the current sequence playing. (This message will be followed with Timing Clocks).
|-
|<!--Status-->11111011 || <!--Data--> || <!--Description-->Continue. Continue at the point the sequence was Stopped.
|-
|<!--Status-->11111100 || <!--Data--> || <!--Description-->Stop. Stop the current sequence.
|-
|<!--Status-->11111101 || <!--Data--> || <!--Description-->Undefined. (Reserved)
|-
|<!--Status-->11111110 || <!--Data--> || <!--Description-->Active Sensing. This message is intended to be sent repeatedly to tell the receiver that a connection is alive. Use of this message is optional. When initially received, the receiver will expect to receive another Active Sensing message each 300ms (max), and if it does not then it will assume that the connection has been terminated. At termination, the receiver will turn off all voices and return to normal (non- active sensing) operation.
|-
|<!--Status-->11111111 || <!--Data--> || <!--Description-->Reset. Reset all receivers in the system to power-up status. This should be used sparingly, preferably under manual control. In particular, it should not be sent on power-up.
|}
Advanced Messages
Polyphonic Pressure (0xA0) and Channel Pressure (0xD0)
Some MIDI controllers include a feature known as Aftertouch. While a key is being held down, the player can press harder on the key. The controller measures this, and converts it into MIDI messages.
Aftertouch comes in two flavors, with two different status messages.
The first flavor is polyphonic aftertouch, where every key on the controller is capable of sending its own independent pressure information. The messages are of the following format:
<pre>
0xnc, 0xkk, 0xpp
n is the status (0xA)
c is the channel nybble
kk is the key number (0 to 127)
pp is the pressure value (0 to 127)
</pre>
Polyphonic aftertouch is an uncommon feature, usually found on premium quality instruments, because every key requires a separate pressure sensor, plus the circuitry to read them all.
Much more commonly found is channel aftertouch. Instead of needing a discrete sensor per key, it uses a single, larger sensor to measure pressure on all of the keys as a group. The messages omit the key number, leaving a two-byte format
<pre>
0xnc, 0xpp
n is the status (0xD)
c is the channel number
pp is the pressure value (0 to 127)
</pre>
Pitch Bend (0xE0)
Many keyboards have a wheel or lever towards the left of the keys for pitch bend control. This control is usually spring-loaded, so it snaps back to the center of its range when released. This allows for both upward and downward bends.
Pitch Bend Wheel
The wheel sends pitch bend messages, of the format
<pre>
0xnc, 0xLL, 0xMM
n is the status (0xE)
c is the channel number
LL is the 7 least-significant bits of the value
MM is the 7 most-significant bits of the value
</pre>
You’ll notice that the bender data is actually 14 bits long, transmitted as two 7-bit data bytes. This means that the recipient needs to reassemble those bytes using binary manipulation. 14 bits results in an overall range of 214, or 0 to 16,383. Because it defaults to the center of the range, the default value for the bender is halfway through that range, at 8192 (0x2000).
Control Change (0xB0)
In addition to pitch bend, MIDI has provisions for a wider range of expressive controls, sometimes known as continuous controllers, often abbreviated CC. These are transmitted by the remaining knobs and sliders on the keyboard controller shown below.
Continuous Controllers
These controls send the following message format:
<pre>
0xnc, 0xcc, 0xvv
n is the status (0xB)
c is the MIDI channel
cc is the controller number (0-127)
vv is the controller value (0-127)
</pre>
Typically, the wheel next to the bender sends controller number one, assigned to modulation (or vibrato) depth. It is implemented by most instruments.
The remaining controller number assignments are another point of confusion. The MIDI specification was revised in version 2.0 to assign uses for many of the controllers. However, this implementation is not universal, and there are ranges of unassigned controllers.
On many modern MIDI devices, the controllers are assignable. On the controller keyboard shown in the photos, the various controls can be configured to transmit different controller numbers. Controller numbers can be mapped to particular parameters. Virtual synthesizers frequently allow the user to assign CCs to the on-screen controls. This is very flexible, but it might require configuration on both ends of the link and completely bypasses the assignments in the standard.
Program Change (0xC0)
Most synthesizers have patch storage memory, and can be told to change patches using the following command:
<pre>
0xnc, 0xpp
n is the status (0xc)
c is the channel
pp is the patch number (0-127)
</pre>
This allows for 128 sounds to be selected, but modern instruments contain many more than 128 patches. Controller #0 is used as an additional layer of addressing, interpreted as a “bank select” command. Selecting a sound on such an instrument might involve two messages: a bank select controller message, then a program change.
Audio & Midi are not synchronized, what I can do ?
Buy a commercial software package but there is a nasty trick to synchronize both. It's a bit hardcore but works for me:
Simply put one line down to all midi notes on your pattern (use Insert key)
and go to 'Misc. Setup', adjust the latency and just search a value
that will make sound sync both audio/midi.
The stock Sin/Saw/Pulse and Rnd waveforms are too simple/common, is there a way to use something more complex/rich ?
You have to ability to redirect the waveforms of the instruments through the synth pipe by selecting the "wav" option for the oscillator you're using for this synth instrument, samples can be used as wavetables to replace the stock signals.
Sound banks like soundfont (sf2) or Kontakt2 are not supported at the moment
====DAW Audio Evolution 4====
Audio Evolution 4 gives you unsurpassed power for digital audio recording and editing on the Amiga. The latest release focusses on time-saving non-linear and non-destructive editing, as seen on other platforms. Besides editing, Audio Evolution 4 offers a wide range of realtime effects, including compression, noise gate, delays, reverb, chorus and 3-band EQ.
Whether you put them as inserts on a channel or use them as auxillaries, the effect parameters are realtime adjustable and can be fully automated. Together with all other mixing parameters, they can even be controlled remotely, using more ergonomic MIDI hardware.
Non-linear editing on the time line, including cut, copy, paste, move, split, trim and crossfade actions
The number of tracks per project(s) is unlimited .... AHI limits you to recording only two at a time. i.e. not on 8 track sound cards like the Juli@ or Phase 88.
sample file import is limited to 16bit AIFF (not AIFC, important distinction as some files from other sources can be AIFC with aiff file extention). and 16bit WAV (pcm only)
Most apps use the Music Unit only but a few apps also use Unit (0-3) instead or as well.
* Set up AHI prefs so that microphone is available. (Input option near the bottom)
stereo++ allows the audio piece to be placed anywhere and the left-right adjusted to sound positionally right
hifi best for music playback if driver supports this option
Load 16bit .aif .aiff only sample(s) to use not AIFC which can have the same ending. AIFF stands for Audio Interchange File Format
sox recital.wav recital.aiff
sox recital.wav −b 16 recital.aiff channels 1 rate 16k fade 3 norm
sox input.wav output.aiff bass −b 16 rate 48k
performs the same format translation, but also applies four effects (down-mix to one channel, sample rate change, fade-in, nomalize), and stores the result at a bit-depth of 16.
rec −c 2 radio.aiff trim 0 30:00
records half an hour of stereo audio
play existing-file.wav
24bit PCM WAV or AIFF do not work
*No stream format handling. So no way to pass on an AC3 encoded stream unmodified to the digital outputs through AHI.
*No master volume handling. Each application has to set its own volume. So each driver implements its own custom driver-mixer interface for handling master volumes, mute and preamps.
*Only one output stream. So all input gets mixed into one output.
*No automatic handling of output direction based on connected cables.
*No monitor input selection. Only monitor volume control.
select the correct input (Don't mistake enabled sound for the correct input.)
The monitor will feedback audio to the lineout and hp out no matter if you have selected the correct input to the ADC. The monitor will provide sound for any valid input. This will result in free mixing when recording from the monitor input instead of mic/line because the monitor itself will provide the hardware mixing for you. Be aware that MIC inputs will give two channel mono. Only Linein will give real stereo.
Now for the not working part. Attempt to record from linein in the AE4 record window, the right channel is noise and the left channel is distorted. Even with the recommended HIFI 16bit Stereo++ mode at 48kHz.
Channels
Monitor
Gain
Inout
Output
Advanced settings - Debugging via serial port
* Options -> Soundcard In/Out
* Options -> SampleRate
* Options -> Preferences
F6 for Sample File List
Setting a grid is easy as is measuring the BPM by marking a section of the sample. Is your kick drum track "not in time" ? If so, you're stumped in AE4 as it has no fancy variable time signatures and definitely no 'track this dodgy rhythm' function like software of the nature of Logic has. So if your drum beat is freeform you will need to work in freeform mode. (Real music is free form anyway).
If the drum *is* accurate and you are just having trouble measuring the time, I usually measure over a range of bars and set the number of beats in range to say 16 as this is more accurate, Then you will need to shift the drum track to match your grid *before* applying the grid. (probably an iterative process as when the grid is active samples snap to it, and when inactive you cannot see it).
AE4 does have ARexx but the functions are more for adding samples at set offsets and starting playback / recording.
These are the usual features found in DAWs...
* Recording digital audio, midi sequencer and mixer
* virtual VST instruments and plug-ins
* automation, group channels, MIDI channels, FX sends and returns, audio and MIDI editors and music notation editor
* different track views
* mixer and track layout (but not the same as below)
* traditional two windows (track and mixer)
Mixing - mixdown
Could not figure out how to select what part I wanted to send to the aux, set it to echo and return. Pretty much the whole echo effect. Or any effect.
Take look at page17 of the manual.
When you open the EQ / Aux send popup window you will see 4 sends. Now from the menu choose the windows menu.
Menus->Windows-> Aux Returns Window
or press F5
You will see a small window with 4 volume controls and an effects button for each. Click a button and add an effects to that aux channel, then set it up as desired (note the reverb effect has a special AUX setting that improves its use with the aux channel, not compulsory but highly useful). You set the amount of 'return' on the main mix in the Aux Return window, and the amount sent from each main mixer channel in the popup for that channel. Again the aux sends are "prefade" so the volume faders on each channel do not affect them.
Tracking
Effects - fade in
To add some echoes to some vocals, tried to add an effect on a track but did not come out. This is made more complicated as I wanted to mute a vocal but then make it echo at the muting point. Want to have one word of a vocal heard and then echoed off. But when the track is mute the echo is cancelled out.
To correctly understand what is happening here you need to study the figure at the bottom of page 15 on the manual. You will see from that that the effects are applied 'prefade' So the automation you applied will naturally mute the entire signal.
There would be a number of ways to achieve the goal,
You have three real time effects slots, one for smoothing like so
Sample -> Amplify -> Delay
Then automate the gain of the amplify block so that it effectively mutes the sample just before the delay at the appropriate moment, the echo effect should then be heard.
Getting the effects in the right order will require experimentation as they can only be added top down and it's not obvious which order they are applied to the signal, but there only two possibilities, so it wont take long to find out.
Using MUTE can cause clicks to the Amplify can be used to mute more smoothly so that's a secondary advantage.
Signal Processing -
Overdub
[[#top|...to the top]]
===Office===
====Spreadsheet Leu====
Support for some xlsx, and ods functions
====Spreadsheet Ignition====
; Needs ABIv1 to be completed before more can be done
File formats supported
* ascii #?.txt and #?.csv (single sheets with data only).
* igs and TurboCalc(WIP) #?.tc for all sheets with data, formats and formulas.
There is '''no''' support for xls, xlsx, ods or uos ([http://en.wikipedia.org/wiki/Uniform_Office_Format Uniform Unified Office Format]) at the moment.
* Always use Esc key after editing Spreadsheet cells.
* copy/paste seems to copy the first instance only so go to Edit -> Clipboard to manage the list of remembered actions.
* Right mouse click on row (1 or 2 or 3) or column header (a or b or c) to access optimal height or width of the row or column respectively
* Edit -> Insert -> Row seems to clear the spreadsheet or clears the rows after the inserted row until undo restores as it should be...
Change Sheet name by Object -> Sheet -> Properties
Click in the cell which will contain the result, and click '''down arrow button''' to the right of the formula box at the bottom of the spreadsheet and choose the function required from the list provided. Then click on the start cell and click on the bottom right corner, a '''very''' small blob, which allows stretching a bounding box (thick grey outlines) across many cells This grey bounding box can be used to '''copy a formula''' to other cells.
Object -> Cell -> Properties to change cell format - Currency only covers DM and not $, Euro, Renminbi, Yen or Pound etc.
Shift key and arrow keys selects a range of cells, so that '''formatting can be done to all highlighted cells'''.
View -> Overview then select ALL with one click (in empty cell in the top left hand corner of the sheet).
Default mode is relative cell referencing e.g. a1+a2 but absolute e.g. $a$1+$a$2 can be entered.
* #sheet-name to '''absolute''' reference another sheet-name cell unless reference() function used.
;Graphs
use shift key and arrow keys to select a bunch of cells to be graph'ed making sure that x axes represents and y axes represents
* value() - 0 value, 1 percent, 2 date, 3 time, 4 unit ...
;Dates
* Excel starts a running count from the 1st Jan 1900 and Ignition starts from 1st Jan 1AD '''(maybe this needs to change)'''
Set formatting Object -> Cell -> Properties and put date in days
;Time
Set formatting Object -> Cell -> Properties and put time in seconds taken
;Database (to be done by someone else)
type - standard, reference (bezug), search criterion (suchkriterium),
* select a bunch of cells and Object -> Database -> Define to set Datenbank (database) and Felder (fields not sure how?)
* Neu (new) or loschen (delete) to add/remove database headings e.g. Personal, Start Date, Finish Date (one per row?)
* Object -> Database -> Index to add fields (felder) like Surname, First Name, Employee ID, etc. to ?
Filtering done with dbfilter(), dbproduct() and dbposition().
Activities with dbsum(), dbaverage(), dbmin() and dbmax().
Table sorting -
;Scripts (Arexx)
;Excel(TM) to Ignition - commas ''',''' replaced by semi-colons ''';''' to separate values within functions
*SUM(),
*AVERAGE(), MAX(), MIN(), INT(), PRODUCT(), MEDIAN(), VAR() becomes Variance(), Percentile(),
*IF(), AND, OR, NOT
*LEFT(), RIGHT(), MID() becomes MIDDLE(), LEN() becomes LENGTH(),
*LOWER() becomes LOWERCASE(), UPPER() becomes UPPERCASE(),
* DATE(yyyy,mm,dd) becomes COMPUTEDATE(dd;mm;yyyy),
*TODAY(), DAY(),WEEK(), MONTH(),=YEAR(TODAY()),
*EOMONTH() becomes MONTHLENGTH(),
*NOW() should be date and time becomes time only, SECOND(), MINUTE(), HOUR(),
*DBSUM() becomes DSUM(),
;Missing and possibly useful features/functions needed for ignition to have better support of Excel files
There is no Merge and Join Text over many cells, no protect and/or freeze row or columns or books but can LOCK sheets, no define bunch of cells as a name, Macros (Arexx?), conditional formatting, no Solver, no Goal Seek, no Format Painter, no AutoFill, no AutoSum function button, no pivot tables, (30 argument limit applies to Excel)
*HLOOKUP(), VLOOKUP(), [http://production-scheduling.com/excel-index-function-most-useful/ INDEX(), MATCH()], CHOOSE(), TEXT(),
*TRIM(), FIND(), SUBSTITUTE(), CONCATENATE() or &, PROPER(), REPT(),
*[https://acingexcel.com/excel-sumproduct-function/ SUMPRODUCT()], ROUND(), ROUNDUP(), *ROUNDDOWN(), COUNT(), COUNTA(), SUMIF(), COUNTIF(), COUNTBLANK(), TRUNC(),
*PMT(), PV(), FV(), POWER(), SQRT(), MODE(), TRUE, FALSE,
*MODE(), LARGE(), SMALL(), RANK(), STDEV(),
*DCOUNT(), DCOUNTA(), WEEKDAY(),
;Excel Keyboard [http://dmcritchie.mvps.org/excel/shortx2k.htm shortcuts needed to aid usability in Ignition]
<pre>
Ctrl Z - Undo
Ctrl D - Fill Down
Ctrl R - Fill right
Ctrl F - Find
Ctrl H - Replace
Ctrl 1 - Formatting of Cells
CTRL SHIFT ~ Apply General Formatting ie a number
Ctrl ; - Todays Date
F2 - Edit cell
F4 - toggle cell absolute / relative cell references
</pre>
====Document Scanning - Scandal====
Scanner usually needs to be connected via a USB port and not via a hub or extension lead.
Check in Trident Prefs -> Devices that the USB Scanner is not bound to anything (e.g. Bindings None)
If not found then reboot the computer and recheck.
Start Scandal, choose Settings from Menu strip at top of screen and in Scanner Driver choose the ?#.device of the scanner (e.g. epson2.device).
The next two boxes - leave empty as they are for morphos SCSI use only
or put ata.device (use the selection option in bigger box below) and Unit as 0 this is needed for gt68xx
* gt68xx - no editing needed in s/gt68xx.conf but needs a firmware file that corresponds to the scanner [http://www.meier-geinitz.de/sane/gt68xx-backend/ gt68xx firmwares] in sys:s/gt68xx.
* epson2 - Need to edit the file epson2.conf in sys/s that corresponds to the scanner being used
'''Save''' the settings but do not press the Use button (aros freezes)
Back to the Picture Scan window and the right-hand sections.
Click on the '''Information''' tab and press Connect button and the scanner should now be detected.
Go next to the '''Scanner''' tab next to Information Tab should have Color, Black and White, etc. and dpi settings now. Selecting an option Color, B/W etc. can cause dpi settings corruption (especially if the settings are in one line) so set '''dpi first'''. Make sure if Preview is set or not.
In the '''Scan''' Tab, press Scan and the scanner will do its duty.
Be aware that nothing is saved to disk yet.
In the Save tab, change format JPEG, PNG or IFF DEEP. Tick incremental and base filename if necessary and then click the Save button. The image will now be saved to permanent storage.
The driver ignores a device if it is already bond to another USB class, rejects it from being usable. However, open Trident prefs, select your device and use the right mouse button to open. Select "NONE" to prevent poseidon from touching the device. Now save settings. It should always work now.
[[#top|...to the top]]
===Emulators===
==== Amiberry ====
==== Amiga Emu - Janus UAE ====
With Amibridge, AROS attempts to make the UAE emulator seem embedded within but it still is acting as an app
There is no dynarec m68k for each hardware that Aros supports or direct patching of motorola calls to AROS hardware accelerated ones unless the emulator has that included
Try starting Janus with a priority of -1 like this little script:
<pre>
cd sys:system/AmiBridge/emulator
changetaskpri -1
run janus-uae -f my_uaerc.config >nil:
cd sys:prefs
endcli
</pre>
This stops Janus hogging all the CPU time.
===Miscellaneous===
====Screensaver Blanker====
Most blankers on the amiga (i.e. aros) run as commodities (they are in the tools/commodities drawer). Double click on blanker.
Control is with an app called Exchange, which you need to run first (double click on app) or run QUIET sys:tools/commodities/Exchange >NIL: but subsequently can use (Cntrl Alt h).
Icon tool types (may be broken) or command line options
<pre>
seconds=number
</pre>
Once the timing is right then add the following to s:icaros-sequence or s:user-startup
e.g. for 5 minutes
run QUIET sys:tools/commodities/Blanker seconds=300 >NIL:
*[http://archives.aros-exec.org/index.php?function=showfile&file=graphics/screenblanker/gblanker.i386-aros.zip Garshneblanker] can make Aros unstable or slow. Certain blankers crashes in Icaros 2.0.x like Dragon, Executor.
*[ Acuario AROS version], the aquarium screen saver.
Startup: extras:acuariofv-aros/acuario
Kill: c:break name=extras:acuariofv-aros/acuario
Managed to start Acuario by the Executor blanker.
<pre>
cx_priority=
cx_popkey= ie CX_POPKEY="Shift F1"
cx_popup=Yes or No
</pre>
<pre>
Qualifier String Input Event Class
---------------- -----------------
"lshift" IEQUALIFIER_LSHIFT
"rshift" IEQUALIFIER_RSHIFT
"capslock" IEQUALIFIER_CAPSLOCK
"control" IEQUALIFIER_CONTROL
"lalt" IEQUALIFIER_LALT
"ralt" IEQUALIFIER_RALT
"lcommand" IEQUALIFIER_LCOMMAND
"rcommand" IEQUALIFIER_RCOMMAND
"numericpad" IEQUALIFIER_NUMERICPAD
"repeat" IEQUALIFIER_REPEAT
"midbutton" IEQUALIFIER_MIDBUTTON
"rbutton" IEQUALIFIER_RBUTTON
"leftbutton" IEQUALIFIER_LEFTBUTTON
"relativemouse" IEQUALIFIER_RELATIVEMOUSE
</pre>
<pre>
Synonym Synonym
String Identifier
------- ----------
"shift" IXSYM_SHIFT /* look for either shift key */
"caps" IXSYM_CAPS /* look for either shift key or capslock */
"alt" IXSYM_ALT /* look for either alt key */
Highmap is one of the following strings:
"space", "backspace", "tab", "enter", "return", "esc", "del",
"up", "down", "right", "left", "f1", "f2", "f3", "f4", "f5",
"f6", "f7", "f8", "f9", "f10", "help".
</pre>
[[#top|...to the top]]
==== World Construction Set WCS (Version 2.031) ====
WCS is a fractal landscape software such as Scenery Animator, Vista Pro and Panorama. Open sourced February 2022, World Construction Set [https://3dnature.com/downloads/legacy-software/ legally and for free] and [https://github.com/AlphaPixel/3DNature c source].
Announced August 1994 this version dates from April 1996 developed by Gary R. Huber and Chris "Xenon" Hanson" from Questar
<pre>
Assign "WCSProjects:" "Volume:Dir/Dir/WCSProjects"
Assign "WCSFrames:" "Volume:Dir/Dir/WCSFrames"
</pre>
<pre>
Load projects .proj by accessing pull down menu Project -> Open then click on CanyonSunset.proj
OK to changing .par file and enlarge Status Log window to show what is happening
Render by pull down menu Modules -> Render with End equal 1 not 300 then click bottom middle button Render
</pre>
[https://www.youtube.com/watch?v=CxQDmf1ZWG0 Youtube walkthrough of above], [], [],
Also try working with the already built file ColoDemo - Then open with the drop-down menu: Project/Open, then WCSProject:ColoDemo.proj
Which allows you to use altimetric DEM files already included and Loading scene parameters from ColoDemo.par
Once this is done, save everything with a new name to start working exclusively on your project.
Then drop-down menu and select Save As ("NewName".proj name), then drop-down menu to open parameter and select Save All ( .par name)
After launching the software, there is a the Module Control Panel composed of five icons.
It is a dock type shortcut of the first few functions of the drop-down menu
*Database - Load (#?.proj), Append, Create, Edit, Save, Dir List (of WCSProject drawer),
*Data Ops - Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats
*Map View - Database file Loader leading to Map View Control with option to the Database Editor
*Parameters - Editor for Motion, Color, Ecosystem, Clouds, Waves, management of altimeter files DEM, sclock settings etc
*Render - rendering terrain
These are more in the pull down menu but not in the dock
*Motion Editor
*Color Editor
*Ecosys Editor
Simple minimal workflow
*Load database (1st icon - 1st)
*Set parameters and save .par file (4th icon)
*Render scene (5th icon)
[https://www.youtube.com/watch?v=ZbTwwR2qcc4 Youtube], [],
<pre>
.proj new project name which creates a drawer of additional files
.binary array, ascii array .xyz , z buffer, DTED .dt0, vista 1990s dem, iff conversion
.Obj with .elev, .frd with .hdr maps, - digital elevation model (DEM) is a 3D representation of elevation data in various formats
USGS 7.5MinDEM,
.par
</pre>
Since for the time being no project is loaded, a query window indicates a procedural error when clicking on the rendering icon (right end of the bar). The menu is quite traditional; it varies according to the activity of the windows. To display any altimetric file in the "Mapview" (third icon of the panel), There are three possibilities:
* Loading of a demonstration project.
* The import of a DEM file, followed by texturing and packaging from the "Database-Editor" and the "Color-Editor".
* The creation of an altimetric file in WCS format, then texturing.
The altimeter file editing (display in the menu) is only made possible if the "Mapview" window is active.
The software is made up of many windows and won't be able to describe them all. Know that "Color-Editor" and the "Data-Editor" comprise sufficient functions for obtaining an almost real rendering quality. You have the possibility of inserting vector objects in the "Data-Editor" (creation of roads, railways, etc.)
The Map View (MapView) window
*Database - Objects and Topos
*View - Align, Center, Zoom, Pan, Move
*Draw - Maps and distance
*Object - Find, highlight, add points, conform topo, duplicate
*Motion - Camera, Focus, path, elevation
*Windows - DEM designer, Cloud (.cld) and wave (.wve) editor,
You will notice that by selecting this window and simply moving the pointer to various points on the map you will see latitude and longitude values change, along with the height.
Drop-down menu and Modules, then select MapView and change the width of the window with the map to arrange it in the best way on the screen. With the Auto button the center. Window that then displays the contents of my DEM file, in this case the Grand Canyon. MapView allows you to observe the shape of the landscape from above
ZOOM button
Press the Zoom button and then with the pointer position on a point on the map, press the left mouse button and then move to the opposite corner to circumscribe the chosen area and press the left mouse button again, then we will see the enlarged area selected on the map.
Would add that there is a box next to the Zoom button that allows the direct insertion of a value which, the larger it is, the smaller the magnification and the smaller the value, the stronger the magnification. At each numerical change you will need to press the DRAW button to update the view.
PAN button
Under Zoom you will find the PAN button which allows you to move the map at will in all directions by the amount you want. This is done by drawing a line in one direction, then press PAN and point to an area on the map with the pointer and press the left mouse button. At this point, leave it and move the pointer in one direction by drawing a line and press the left mouse button again to trigger the movement of the map on the screen (origin and end points). Do some experiments and then use the Auto button immediately below to recenter everything.
There are parameters such as TOPO, VEC to be left checked and immediately below one that allows different views of the map with the Style command (Single, Multi, Surface, Emboss, Slope, Contour), each with its own particularities to highlight different details.
Now you have the first basics to manage your project visually on the map. Close the MapView window and go further...
Let's start working on ECOSYSTEMS
If we select Emboss from the MapView Style command we will have a clear idea of how the landscape appears, realizing that it is a predominantly desert region of our planet. Therefore we will begin to act on any vegetation present and the appearance of the landscape.
With WCS we will begin to break down the elements of the landscape by assigning defined characteristics. It will be necessary to determine the classes of the ecosystem (Class) with parameters of Elevation Line (maximum altitude), Relative Elevation (arrangement on basins or convexities with respectively positive or negative parameters), Min Slope and Max Slope (slope). WCS offers the possibility of making ecosystems coexist on the same terrain with the UnderEco function, by setting a Density value.
Ecosys Ecosystem Editor
Let's open it from Modules, then Ecosys Editor. In the left pane you will find the list of ecosystems referring to the files present in our project. It will be necessary to clean up that box to leave only the Water and Snow landscapes and a few other predefined ones. We can do this by selecting the items and pressing the Remove button (be careful not for all elements the button is activated, therefore they cannot all be eliminated).
Once this is done we can start adding new ecosystems. Scroll through the various Unused and as soon as the Name item at the top is activated allowing you to write, type the name of your ecosystem, adding the necessary parameters.
<pre>
Ecosystem1: Name: RockBase Class: Rock Density: 80 MinSlope: 15 UnderEco: Terrain
Ecosystem2: Name: RockIncl Clss: Rock Density: 80 MinSlope: 30 UnderEco: Terrain
Ecosystem3: Name: Grass Class Low Veg Density: 50 Height: 1 Elev Line : 1500 Rel El Eff: 5
Max Slope: 10 – Min Slope: 0 UnderEco: Terrain
Ecosistema4: Name: Shrubs Class: Low Veg Density: 40 Height: 8 Elev Line: 3000
Rel El Eff: -2 Max Slope: 20 Min Slope : 5 UnderEco: Terrain
Ecosistema5: Name: Terrain Class: Ground Density: 100 UnderEco: Terrain
</pre>
Now we need to identify an intermediate ecosystem that guarantees a smooth transition between all, therefore we select as Understory Ecosystem the one called Terrain in all ecosystems, except Snow and Water .
Now we need to 'emerge' the Colorado River in the Canyon and we can do this by raising the sea level to 900 (Sea Level) in the Ecosystem called Water.
Please note that the order of the ecosystem list gives priority to those that come after. So our list must have the following order: Water, Snow, Shrubs, RockIncl, RockBase, Terrain. It is possible to carry out all movements with the Swap button at the bottom. To put order you can also press Short List. Press Keep to confirm all the work done so far with Ecosystem Editor.
Remember every now and then to save both the Project 'Modules/Save' and 'Parameter/Save All'
EcoModels are made up of .etp .fgp .iff8 for each model
Color Editor
Now it's time to define the colors of our scene and we can do this by going to Modules and then Color Editor. In the list we focus on our ecosystems, created first.
Let's go to the bottom of the list and select the first white space, assigning the name 'empty1', with a color we like and then we will find this element again in other environments... It could serve as an example for other situations!
So we move to 'grass' which already exists and assign the following colors: R 60 G 70 B50
<pre>
'shrubs': R 60 G 80 B 30
'RockIncl' R 110 G 65 B 60
'RockBase' R 110 G 80 B 80
' Terrain' R 150 G 30 B 30
<pre>
Now we can work on pre-existing colors
<pre>
'SunLight' R 150 G 130 B 130
'Haze and Fog' R 190 G 170 B 170
'Horizon' R 209 G 185 B 190
'Zenith' R 140 G 150 B 200
'Water' R 90 G 125 B 170
</pre>
Ambient R 0 G 0 B 0
So don't forget to close Color Editor by pressing Keep.
Go once again to Ecosystem Editor and assign the corresponding color to each environment by selecting it using the Ecosystem Color button. Press it several times until the correct one appears. Then save the project and parameters again, as done previously.
Motion Editor
Now it's time to take care of the framing, so let's go to Modules and then to Motion Editor. An extremely feature-rich window will open. Following is the list of parameters regarding the Camera, position and other characteristics:
<pre>
-Camera Altitude: 7.0
-Camera Latitude: 36.075
-Camera Longitude: 112.133
-Focus Attitude: -2.0
-Focus Latitude: 36.275
-Focus Longitude: 112.386
-Camera : 512 → rendering window
-Camera Y: 384 → rendering window
-View Arc: 80 → View width in degrees
-Sun Longitude: 172
-Sun Latitude: -0.9
-Haze Start: 3.8
-Haze Range: 78, 5
</pre>
As soon as the values shown in the relevant sliders have been modified, we will be ready to open the CamView window to observe the wireframe preview. Let's not consider all the controls that will appear.
Well from the Motion Editor if you have selected Camera Altitude and open the CamView panel, you can change the height of the camera by holding down the right mouse button and moving the mouse up and down. To update the view, press the Terrain button in the adjacent window. As soon as you are convinced of the position, confirm again with Keep. You can carry out the same work with the other functions of the camera, such as Focus Altitude...
Let's now see the next positioning step on the Camera map, but let's leave the CamView preview window open while we go to Modules to open the window at the same time MapView. We will thus be able to take advantage of the view from the other together with a subjective one.
From the MapView window, select with the left mouse button and while it is pressed, move the Camera as desired. To update the subjective preview, always click on Terrain.
While with the same procedure you can intervene on the direction of the camera lens, by selecting the cross and with the left button pressed you can choose the desired view. So with the pressure of Terrain I update the Preview. Possibly can enlarge or reduce the Map View using the Zoom button, for greater precision.
Also write that the circle around the cameras indicates the beginning of the haze, there are two types (haze and fog) linked to the altitude. Would also add that the camera height is editable through the Motion Editor panel.
The sun
Let's see that changing the position of the sun from the Motion Editor. Press the SUN button at the bottom right and set the time and the date. Longitude and latitude are automatically obtained by the program. Always open the View Arc command from the Motion Editor panel, an item present in the Parameter List box.
Once again confirm everything with Keep and then save again.
Animation
The animation part is not left-back and also occupies a window. The settings possibilities are enormous. A time line with dragging functions ("slide", "drag"...) comparable to that of LightWave completes this window.
A small window is available for positioning the stars as a function of a date, in order to vary the seasons and their various events (and yes...).
At the bottom of the "Motion-Editor", a "cam-view" function will give you access to a control panel. Different preview modes are possible. The rendering is also accessible through a window. No less than nine pages compose it. At this level, you will be able to determine the backup name of your images ("path"), the type of texture to be calculated, the resolution of the images, activate or deactivate functions such as the depth buffer ("zbuffer"), the blur, the background image, etc.
Once all these parameters have been set, all you have to do is click on the "Render" button.
For rendering go to Modules and then Render. Select the resolution, then under IMA select the name of the image. Move to FRA and indicate the level of fractal detail which of 4 is quite good. Then Keep to confirm and then reopen the window, pressing Render you will see the result. The image will be opened with any viewing program.
Strengths:
* Multi-window.
* Quality of rendering.
* Accuracy.
* Opening, preview and rendering on CyberGraphX screen.
* Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats
* The "zbuffer" function.
Weaknesses:
* No OpenGL management
* Calculation time.
* No network computing tool.
====Writing CD / DVD - Frying Pan====
Can be backup DVDs (4GB ISO size limit due to use of FileInfoBlock), create audio cds from mp3's, and put .iso files on discs
If using for the first time - click Drive button and Device set to ata.device and unit to 0 (zero)
Click Tracks Button - Drive 1 - Create New Disc or Import Existing Disc Image (iso bin/cue etc.) - Session File open cue file
If you're making a data cd, with files and drawers from your hard drive, you should be using the ISO Builder.. which is the MUI page on the left. ("Data/Audio Tracks" is on the right).
You should use the "Data/Audio tracks" page if you want to create music cds with AIFF/WAV/MP3 files, or if you download an .iso file, and you want to put it on a cd.
Click WRITE Button - set write speed - click on long Write button
Examples
Easiest way would be to burn a DATA CD, simply go to "Tracks" page "ISO Builder" and "ADD" everything you need to burn.
On the "Write" page i have "Masterize Disc (DAO)", "Close Disc" and "Eject after Write" set.
One must not "Blank disc before write" if one uses a CDR
AUDIO CD from MP3's are as easy but tricky to deal with. FP only understands one MP3 format, Layer II, everything else will just create empty tracks
Burning bootable CD's works only with .iso files. Go to "Tracks" page and "Data/Audio Tracks" and add the .iso
====odf====
Every ODF file is a collection of several subdocuments within a package (ZIP file), each of which stores part of the complete document.
* content.xml – Document content and automatic styles used in the content.
* styles.xml – Styles used in the document content and automatic styles used in the styles themselves.
* meta.xml – Document meta information, such as the author or the time of the last save action.
* settings.xml – Application-specific settings, such as the window size or printer information.
To read document follow these steps:
* Extracting .ods file.
* Getting content.xml file (which contains sheets data).
* Creating XmlDocument object from content.xml file.
* Creating DataSet (that represent Spreadsheet file).
* With XmlDocument select “table:table” elements, and then create adequate DataTables.
* Parse child’s of “table:table” element and fill DataTables with those data.
* At the end, return DataSet and show it in application’s interface.
To write document follow these steps:
* Extracting template.ods file (.ods file that we use as template).
* Getting content.xml file.
* Creating XmlDocument object from content.xml file.
* Erasing all “table:table” elements from the content.xml file.
* Reading data from our DataSet and composing adequate “table:table” elements.
* Adding “table:table” elements to content.xml file.
* Zipping that file as new .ods file.
XLS file format
The XLS file format contains streams, substreams, and records.
These sheet substreams include worksheets, macro sheets, chart sheets, dialog sheets, and VBA module sheets.
All the records in an XLS document start with a 2-byte unsigned integer to specify Record Type (rt), and another for Count of Bytes (cb). A record cannot exceed 8224 bytes. If larger than the rest is stored in one or more continue records.
* Workbook stream
**Globals substream
***BoundSheet8 record - info for Worksheet substream i.e. name, location, type, and visibility. (4bytes the lbPlyPos FilePointer, specifies the position in the Workbook stream where the sheet substream starts)
**Worksheet substream (sheet) - Cell Table - Row record - Cells (2byte=row 2byte=column 2byte=XF format)
***Blank cell record
***RK cell record 32-bit number.
***BoolErr cell record (2-byte Bes structure that may be either a Boolean value or an error code)
***Number cell record (64-bit floating-point number)
***LabelSst cell record (4-byte integer that specifies a string in the Shared Strings Table (SST). Specifically, the integer corresponds to the array index in the RGB field of the SST)
***Formula cell record (FormulaValue structure in the 8 bytes that follow the cell structure. The next 6 bytes can be ignored, and the rest of the record is a CellParsedFormula structure that contains the formula itself)
***MulBlank record (first 2 bytes give the row, and the next 2 bytes give the column that the series of blanks starts at. Next, a variable length array of cell structures follows to store formatting information, and the last 2 bytes show what column the series of blanks ends on)
***MulRK record
***Shared String Table (SST) contains all of the string values in the workbook.
ACCRINT(), ACCRINTM(), AMORDEGRC(), AMORLINC(),
COUPDAYBS(), COUPDAYS(), COUPDAYSNC(), COUPNCD(), COUPNUM(), COUPPCD(),
CUMIPMT(), CUMPRINC(),
DB(), DDB(), DISC(),
DOLLARDE(), DOLLARFR(),
DURATION(), EFFECT(), FV(), FVSCHEDULE(),
INTRATE(), IPMT(), IRR(), ISPMT(), MDURATION(), MIRR(), NOMINAL(), NPER(), NPV(),
ODDFPRICE(), ODDFYIELD(), ODDLPRICE(), ODDLYIELD(),
PMT(), PPMT(), PRICE(), PRICEDISC(), PRICEMAT(), PV(), RATE(),
RECEIVED(), SLN(), SYD(), TBILLEQ(), TBILLPRICE(), TBILLYIELD(),
VDB(), XIRR(), XNPV(), YIELD(), YIELDDISC(), YIELDMAT(),
<pre>
</pre>
<pre>
</pre>
<pre>
</pre>
{{BookCat}}
0dm4gl1jbwbptkdrk5or2abucdcpu28
OpenSCAD User Manual/First Steps/Creating a simple model
0
245077
4641594
4641354
2026-06-29T01:00:15Z
JackBot
396820
Formatting, [[Special:UncategorizedPages]]
4641594
wikitext
text/x-wiki
// ============================================================
// КОРПУС ДРОН-ДЕТЕКТОРА (TinySA Ultra + RPi Zero/4)
// Версия: v1.0 | Дата: 2026-06-28
// ============================================================
$fn = 60; // Качество скруглений
// --- ГЛОБАЛЬНЫЕ ПАРАМЕТРЫ ---
CASE_W = 95; // Ширина корпуса
CASE_H = 185; // Высота корпуса
CASE_D = 42; // Глубина корпуса
WALL_T = 2.5; // Толщина стенки
CORNER_R = 12; // Радиус скругления углов
BUMPER_H = 8; // Высота защитного бампера
BUMPER_T = 3; // Толщина бампера
// --- ПАРАМЕТРЫ ЭКРАНА (ILI9341 3.2") ---
SCR_X = 19; // Отступ экрана слева
SCR_Y = 25; // Отступ экрана сверху
SCR_W = 57; // Видимая ширина экрана
SCR_H = 77; // Видимая высота экрана
SCR_BEZEL = 2; // Рамка вокруг экрана
// --- ОРГАНЫ УПРАВЛЕНИЯ ---
ENCODER_D = 12; // Диаметр энкодера
ENCODER_X = CASE_W / 2;
ENCODER_Y = SCR_Y + SCR_H + 25;
BTN_MUTE_D = 8; // Диаметр кнопки MUTE
BTN_SCAN_D = 8; // Диаметр кнопки SCAN
SMA_HOLE_D = 10; // Отверстие под SMA разъем
SMA_X = CASE_W / 2;
SMA_Y = CASE_H - 15;
// --- СБОРКА ---
difference() {
union() {
// Основное тело
hull() {
translate([CORNER_R, CORNER_R, 0]) cylinder(r=CORNER_R, h=CASE_D);
translate([CASE_W-CORNER_R, CORNER_R, 0]) cylinder(r=CORNER_R, h=CASE_D);
translate([CORNER_R, CASE_H-CORNER_R, 0]) cylinder(r=CORNER_R, h=CASE_D);
translate([CASE_W-CORNER_R, CASE_H-CORNER_R, 0]) cylinder(r=CORNER_R, h=CASE_D);
}
// Защитные бамперы (угловые усиления)
bumper(0, 0);
bumper(CASE_W-BUMPER_T, 0);
bumper(0, CASE_H-BUMPER_T);
bumper(CASE_W-BUMPER_T, CASE_H-BUMPER_T);
// Ребра жесткости снизу
translate([15, CASE_H/2, 0]) cube([5, CASE_H-30, WALL_T]);
translate([CASE_W-20, CASE_H/2, 0]) cube([5, CASE_H-30, WALL_T]);
}
// Выемка под экран
translate([SCR_X, SCR_Y, WALL_T])
cube([SCR_W + SCR_BEZEL*2, SCR_H + SCR_BEZEL*2, CASE_D]);
// Отверстие под энкодер
translate([ENCODER_X, ENCODER_Y, WALL_T])
cylinder(d=ENCODER_D+1, h=CASE_D);
// Отверстия под кнопки
translate([ENCODER_X - 20, ENCODER_Y, WALL_T])
cylinder(d=BTN_MUTE_D+1, h=CASE_D);
translate([ENCODER_X + 20, ENCODER_Y, WALL_T])
cylinder(d=BTN_SCAN_D+1, h=CASE_D);
// Отверстие под SMA антенну
translate([SMA_X, SMA_Y, 0])
cylinder(d=SMA_HOLE_D, h=CASE_D);
// Пазы для крепления плат (внутренние стойки)
translate([10, 10, WALL_T]) cube([4, 4, CASE_D-WALL_T*2]);
translate([CASE_W-14, 10, WALL_T]) cube([4, 4, CASE_D-WALL_T*2]);
}
// Модуль защитного бампера
module bumper(x, y) {
translate([x, y, 0])
hull() {
cylinder(r=BUMPER_T, h=BUMPER_H);
translate([BUMPER_T*2, BUMPER_T*2, 0]) cylinder(r=BUMPER_T, h=BUMPER_H);
translate([BUMPER_T*2, 0, 0]) cylinder(r=BUMPER_T, h=BUMPER_H);
translate([0, BUMPER_T*2, 0]) cylinder(r=BUMPER_T, h=BUMPER_H);
}
}
}
{{BookCat}}
3tscxah52vdpifkbxegy6rovmkt380h
Diablo Canyon Nuclear Power Plant: The WikiBook/Light water reactor
0
252423
4641620
4412657
2026-06-29T07:24:24Z
Kai Burghardt
153973
remove remnants from incomplete dewikification, remove {{[[Template: citation needed|citation needed]]}} unresolved, emphasize that a lot of information could be outdated by adding more {{[[Template: as of|as of]]}}, use term “thermal energy” because heat is the transfer of thermal energy due to a temperature difference, fix typo [parenthesis: it is either endash surrounded by spaces, or emdash not surrounded by spaces], consistently use abbreviations
4641620
wikitext
text/x-wiki
{{Nav}}[[File:Pumpless light water reactor.jpg|thumb|right|200px|A pumpless light water reactor]]
The '''light water reactor (LWR)''' is a type of thermal reactor that uses normal water as its coolant and neutron moderator. {{tooltip|Thermal reactors|nuclear energy primarily utilized to increase a medium’s thermal energy}} are the most common type of nuclear reactor, and light water reactors are the most common type of thermal reactor. There are three varieties of light water reactors: the pressurized water reactor (PWR), the boiling water reactor (BWR), and (most designs of) the supercritical water reactor (SCWR).
==Overview==
[[Image:Koebergnps.jpg|thumb|300px|The Koeberg nuclear power station, consisting of two {{abbr|PWR|pressurized water reactor}}s fueled with uranium.]]
The family of nuclear reactors known as light water reactors (LWR), cooled and moderated using ordinary water, tend to be simpler and cheaper to build than other types of nuclear reactor; due to these factors, they make up the vast majority of civil nuclear reactors and naval propulsion reactors in service throughout the world {{as of|2009|lc=lc}}. {{abbr|LWR|light water reactor}}s can be subdivided into three categories - pressurized water reactors (PWRs), boiling water reactors (BWRs), and supercritical water reactors (SWRs). Various agencies of the United States Federal Government were responsible for the initial development of the {{abbr|PWR|pressurized water reactor}} and {{abbr|BWR|boiling water reactor}}. An effort by the {{abbr|US|United States}} Navy, starting immediately after the end of {{abbr|WWII|World War II}}, and led by (then) Captain Hyman Rickover, developed the first {{abbr|PWR|pressurized water reactor}}s in the early 1950s, building the first nuclear submarine (the {{abbr|USS|United States Ship}} ''Nautilus'' SSN-571) while researcher Samuel Untermyer II led the effort to develop the {{abbr|BWR|boiling water reactor}} at the {{abbr|US|United States}} National Reactor Testing Station ({{as of|2009|lc=lc}} the Idaho National Laboratory) in a series of tests called the {{abbr|BORAX|boiling water reactor experiment}} experiments. The former Soviet Union also independently developed their version of the {{abbr|PWR|pressurized water reactor}} in the late 1950s, and it became known as the {{abbr|VVER|vodo-vodyanoi enyergeticheskiy reaktor}}; because of this, Russian-designed {{abbr|PWR|pressurized water reactor}}s are known in the West as {{abbr|VVER|vodo-vodyanoi enyergeticheskiy reaktor}}s, to denote their independent origin, and certain national design distinctions from Western {{abbr|PWR|pressurized water reactor}}s. The {{abbr|SWR|supercritical water reactor}} remains hypothetical {{as of|2009|lc=lc}}; it is a Generation IV design that is still a {{abbr|LWR|light water reactor}}, but it is only partially moderated by light water and exhibits certain characteristics of a fast neutron reactor.
The leaders in national experience with {{abbr|PWR|pressurized water reactor}}s, offering reactors for export, are
* the United States (which offers the passively-safe AP1000, a {{tooltip|Westinghouse|Westinghouse Electric Company}} design, as well as several smaller, modular, passively-safe {{abbr|PWR|pressurized water reactor}}s, such as the {{tooltip|MPower|Babcock and Wilcox B&W mPower}}, and the NuScale MASLWR),
* the Russian Federation (offering both the {{abbr|VVER|vodo-vodyanoi enyergeticheskiy reaktor}}-1000 and the {{abbr|VVER|vodo-vodyanoi enyergeticheskiy reaktor}}-1200 for export),
* the Republic of France (offering the AREVA {{abbr|EPR|Evolutionary Power Reactor}} for export),
* and Japan (offering the Mitsubishi Advanced Pressurized Water Reactor for export);
in addition, both the {{abbr|PRC|People's Republic of China}} and the {{abbr|ROK|Republic of Korea}} are both noted to be rapidly ascending into the front rank of {{abbr|PWR|pressurized water reactor}}-constructing nations as well, with the Chinese being engaged in a massive program of nuclear power expansion, and the Koreans {{as of|2009|lc=lc}} designing and constructing their second generation of indigenous designs. The leaders in national experience with {{abbr|BWR|boiling water reactor}}s, offering reactors for export, are the United States and Japan, with the alliance of General Electric (of the US) and Hitachi (of Japan), offering both the {{abbr|ABWR|Advanced Boiling Water Reactor}} and the {{abbr|ESBWR|Economic Simplified Boiling Water Reactor}} for construction and export, in addition, Toshiba also offers an {{abbr|ABWR|Advanced Boiling Water Reactor}} variant for construction in Japan, as well. Though the {{abbr|FRG|Federal Republic of Germany}} was once a major player with {{abbr|BWR|boiling water reactor}}s, that nation has moved towards other pursuits, such as their massive expansion of coal power plants. The other types of nuclear reactor in use for power generation are the heavy water moderated reactor, built by Canada ({{abbr|CANDU|Canada deuterium uranium}}) and the Republic of India ({{abbr|AHWR|Advanced Heavy-Water Reactor}}), the advanced gas cooled reactor (AGCR), built by the {{abbr|UK|United Kingdom}}, the liquid metal cooled reactor (LMFBR), built by the Russian Federation, the Republic of France, and Japan, and the graphite-moderated, water-cooled reactor ({{abbr|RBMK|reaktor bolshoy moshchnosti kanalnyy}}), found exclusively within the Russian Federation and former Soviet states.
Though electricity generation capabilities are comparable between all these types of reactor, due to the aforementioned features, and the extensive experience with operations of the {{abbr|LWR|light water reactor}}, it is favored in the vast majority of new {{abbr|NPP|nuclear power plant}}s, though the {{abbr|CANDU|Canada deuterium uranium}}/{{abbr|AHWR|Advanced Heavy-Water Reactor}} has a comparatively small (but quite dedicated) following. In addition, {{abbr|LWR|light water reactor}}s make up the vast majority of reactors that power naval nuclear powered vessels. Four out of the five great powers with nuclear naval propulsion capacity use {{abbr|LWR|light water reactor}}s exclusively: the British Royal Navy, the Chinese {{abbr|PLA|People's Liberation Army}} Navy, the French Marine nationale, and the {{abbr|US|United States of America}} Navy. Only the Russian Federation's Navy has used a relative handful of liquid-metal cooled reactors in production vessels, specifically the Alfa class submarine, which used lead-bismuth {{tooltip|eutectic|substance with well-defined melting point}} as a reactor moderator and coolant, but the vast majority of Russian nuclear-powered boats and ships use {{abbr|LWR|light water reactor}}s exclusively. The reason for near exclusive {{abbr|LWR|light water reactor}} use aboard nuclear naval vessels is the level of inherent safety built in to these types of reactors. Since light water is used as both a coolant and a neutron moderator in these reactors, if one of these reactors suffers damage due to military action, leading to a compromise of the reactor core's integrity, the resulting release of the light water moderator will act to stop the nuclear reaction and shut the reactor down. This capability is known as a negative void coefficient of reactivity.
'''{{abbr|LWR|light water reactor}}s offered {{as of|2009|lc=lc}} include the following''':
* {{abbr|ABWR|Advanced Boiling Water Reactor}}
* AP1000
* {{abbr|ESBWR|Economic Simplified Boiling Water Reactor}}
* European Pressurized Reactor
* {{abbr|VVER|vodo-vodyanoi enyergeticheskiy reaktor}}
===LWR Statistics===
Data from the International Atomic Energy Agency.<ref name="IAEA - LWR">{{cite web|url=http://www.iaea.org/NuclearPower/WCR/LWR/|title=IAEA - LWR|accessdate=2009-01-18}}</ref>
{| class="wikitable" style="text-align: right; margin: auto;" border="1"
|+ {{abbr|LWR|light water reactor}} statistics {{as of|2009|lc=lc}}
|-
! scope="row" style="text-align: left;" | Reactors in operation
| 359
|-
! scope="row" style="text-align: left;" | Reactors under construction
| 27
|-
! scope="row" style="text-align: left;" | Number of countries with {{abbr|LWR|light water reactors}}s
| 27
|-
! scope="row" style="text-align: left;" | Generating capacity (in {{abbr|GW|gigawatt}})
| 328.4
|}
==Reactor design==
The {{abbr|LWR|light water reactor}} releases thermal energy by controlled nuclear fission. The nuclear reactor core is the portion of a nuclear reactor where the nuclear reactions take place. It mainly consists of nuclear fuel and control elements. The pencil-thin nuclear fuel rods, each about 12 feet (3.7 m) long, are grouped by the hundreds in bundles called fuel assemblies. Inside each fuel rod, pellets of uranium, or more commonly uranium oxide, are stacked end to end. The control elements, called control rods, are filled with pellets of substances like hafnium or cadmium that readily capture neutrons. When the control rods are lowered into the core, they absorb neutrons, which thus cannot take part in the chain reaction. On the converse, when the control rods are lifted out of the way, more neutrons strike the fissile {{abbr|U|uranium}}-235 or {{abbr|Pu|plutonium}}-239 nuclei in nearby fuel rods, and the chain reaction intensifies. All of this is enclosed in a water-filled steel pressure vessel, called the reactor vessel.
In the {{abbr|BWR|boiling water reactor}}, the thermal energy released by fission turns the water into steam, which directly drives the power-generating turbines. But in the {{abbr|PWR|pressurized water reactor}}, the thermal energy released by fission is transferred to a secondary loop via a heat exchanger. Steam is produced in the secondary loop, and the secondary loop drives the power-generating turbines. In either case, after flowing through the turbines, the steam turns back into water in the condenser.<ref name="European Nuclear Society - Light water reactor">{{cite web|url=http://www.euronuclear.org/info/encyclopedia/l/lightwaterreactor.htm|title=European Nuclear Society - Light water reactor|accessdate=2009-01-18}}</ref>
{{multiple image
| align = center
| direction = horizontal
| image1 = PressurizedWaterReactor.gif
| width1 = 350
| alt1 = Animated diagram of a pressurized water reactor
| caption1 = Animated diagram of a pressurized water reactor
| image2 = BoilingWaterReactor.gif
| width2 = 350
| alt2 = Animated Diagram of a boiling water reactor
| caption2 = Animated Diagram of a boiling water reactor
}}
The water required to cool the condenser is taken from a nearby river or ocean. It is then pumped back into the river or ocean, in warmed condition. The thermal energy could also be dissipated via a cooling tower into the atmosphere. The {{abbr|US|United States}} uses {{abbr|LWR|light water reactor}}s for electric power production, in comparison to the {{abbr|HWR|heavy water reactor}}s used in Canada.<ref name="Light Water Reactors">{{cite web|url=http://hyperphysics.phy-astr.gsu.edu/Hbase/NucEne/ligwat.html|title=Light Water Reactors|accessdate=2009-01-18}}</ref>
===Control===
[[Image:Reactor Vessel head.jpg|thumb|250px|A pressurized water reactor head, with the control rod nozzles visible on the top.]]
Control rods are usually combined into control rod assemblies – typically 20 rods for a commercial pressurized water reactor assembly – and inserted into guide tubes within a fuel element. A control rod is removed from or inserted into the central core of a nuclear reactor in order to control the number of neutrons which will split further uranium atoms. This in turn affects the thermal power of the reactor, the amount of steam generated, and hence the electricity produced. The control rods are partially removed from the core to allow a chain reaction to occur. The number of control rods inserted and the distance by which they are inserted can be varied to control the reactivity of the reactor.
Usually there are also other means of controlling reactivity. In the {{abbr|PWR|pressurized water reactor}} design a soluble neutron absorber, usually {{tooltip|boric acid|B(OH)₃}}, is added to the reactor coolant allowing the complete extraction of the control rods during stationary power operation ensuring an even power and flux distribution over the entire core. Operators of the {{abbr|BWR|boiling water reactor}} design use the coolant flow through the core to control reactivity by varying the speed of the reactor recirculation pumps. An increase in the coolant flow through the core improves the removal of steam bubbles, thus increasing the density of the coolant/moderator with the result of increasing power.
===Coolant===
The {{abbr|LWR|light water reactor}} also uses ordinary water to keep the reactor cooled. The cooling source, light water, is circulated past the reactor core to absorb the heat that it generates. The heat is carried away from the reactor and is then used to generate steam. Most reactor systems employ a cooling system that is physically separate from the water that will be boiled to produce pressurized steam for the turbines, like the {{abbr|PWR|pressurized water reactor}}. But in some reactors the water for the steam turbines is boiled directly by the reactor core, for example the {{abbr|BWR|boiling water reactor}}.
Many other reactors are also light water cooled, notably the {{abbr|RBMK|reaktor bolshoy moshchnosti kanalnyy}} and some military plutonium production reactors. These are not regarded as {{abbr|LWR|light water reactor}}s, as they are moderated by graphite, and as a result their nuclear characteristics are very different. Although the coolant flow rate in commercial {{abbr|PWR|pressurized water reactor}}s is constant, it is not in nuclear reactors used on U.S. Navy ships.
===Fuel===
[[Image:Fuel Pellet.jpg|thumb|250px|A nuclear fuel pellet.]]
[[Image:Pellet rod.jpg|thumb|250px|Nuclear fuel pellets that are ready for fuel assembly completion.]]
The use of ordinary water makes it necessary to do a certain amount of enrichment of the uranium fuel before the necessary criticality of the reactor can be maintained. The light water reactor uses {{abbr|U|uranium}}‑235 as a fuel, enriched to approximately 3 percent. Although this is its major fuel, the {{abbr|U|uranium}}‑238 atoms also contribute to the fission process by converting to {{abbr|Pu|plutonium}}‑239; about one-half of which is consumed in the reactor. Light-water reactors are generally refueled every 12 to 18 months, at which time, about 25 percent of the fuel is replaced.
The enriched {{tooltip|UF<sub>6</sub>|uranium hexafluoride}} is converted into {{tooltip|UO<sub>2</sub>|uranium dioxide}} powder that is then processed into pellet form. The pellets are then fired in a high-temperature, sintering furnace to create hard, ceramic pellets of enriched uranium. The cylindrical pellets then undergo a grinding process to achieve a uniform pellet size. The uranium oxide is dried before inserting into the tubes to try to eliminate moisture in the ceramic fuel that can lead to corrosion and hydrogen embrittlement. The pellets are stacked, according to each nuclear core's design specifications, into tubes of corrosion-resistant metal alloy. The tubes are sealed to contain the fuel pellets: these tubes are called fuel rods.
The finished fuel rods are grouped in special fuel assemblies that are then used to build up the nuclear fuel core of a power reactor. The metal used for the tubes depends on the design of the reactor - stainless steel was used in the past, but most reactors now use a zirconium alloy. For the most common types of reactors the tubes are assembled into bundles with the tubes spaced precise distances apart. These bundles are then given a unique identification number, which enables them to be tracked from manufacture through use and into disposal.
{{abbr|PWR|Pressurized water reactor}} fuel consists of cylindrical rods put into bundles. A uranium oxide ceramic is formed into pellets and inserted into Zircaloy tubes that are bundled together. The Zircaloy tubes are about 1 cm in diameter, and the fuel cladding gap is filled with {{abbr|He|helium}} gas to improve the conduction of heat from the fuel to the cladding. There are about 179 – 264 fuel rods per fuel bundle and about 121 to 193 fuel bundles are loaded into a reactor core. Generally, the fuel bundles consist of fuel rods bundled 14 × 14 to 17 × 17. {{abbr|PWR|Pressurized water reactor}} fuel bundles are about 4 meters in length. The Zircaloy tubes are pressurized with {{abbr|He|helium}} to try to minimize pellet cladding interaction which can lead to fuel rod failure over long periods.
In {{abbr|BWR|boiling water reactor}}s, the fuel is similar to {{abbr|PWR|pressurized water reactor}} fuel except that the bundles are "canned"; that is, there is a thin tube surrounding each bundle. This is primarily done to prevent local density variations from effecting neutronics and thermal hydraulics of the nuclear core on a global scale. In modern {{abbr|BWR|boiling water reactor}} fuel bundles, there are either 91, 92, or 96 fuel rods per assembly depending on the manufacturer. A range between 368 assemblies for the smallest and 800 assemblies for the largest {{abbr|U.S.|United States}} {{abbr|BWR|boiling water reactor}} forms the reactor core. Each {{abbr|BWR|boiling water reactor}} fuel rod is back filled with {{abbr|He|helium}} to a pressure of about three atmospheres (300 {{abbr|kPa|kilopascal}}).
===Moderator===
A neutron moderator is a medium which reduces the velocity of {{abbr|fast|in nuclear reactor engineering “fast” means 10–15 Mm/s}} neutrons, thereby turning them into {{tooltip|thermal|possessing only the thermal energy of the environment}} neutrons capable of sustaining a nuclear chain reaction involving uranium-235. A good neutron moderator is a material full of atoms with light nuclei which do not easily absorb neutrons. The neutrons strike the nuclei and bounce off. After sufficient impacts, the velocity of the neutron will be comparable to the thermal velocities of the nuclei; this neutron is then called a thermal neutron.
The {{abbr|LWR|light water reactor}} uses ordinary water, also called light water, as its neutron moderator. The light water absorbs too many neutrons to be used with unenriched natural uranium, and therefore uranium enrichment or nuclear reprocessing becomes necessary to operate such reactors, increasing overall costs. This differentiates it from a {{abbr|HWR|heavy water reactor}}, which uses heavy water as a neutron moderator. While ordinary water has ''some'' heavy water molecules in it, it is not enough to be important in most applications. In practice all {{abbr|LWR|light water reactor}}s are also water-cooled. In {{abbr|PWR|pressurized water reactor}}s the coolant water is used as a moderator by letting the neutrons undergo multiple collisions with light hydrogen atoms in the water, losing speed in the process. This moderating of neutrons will happen more often when the water is denser, because more collisions will occur.
The use of water as a moderator is an important safety feature of {{abbr|PWR|pressurized water reactor}}s, as any increase in temperature causes the water to expand and become less dense; thereby reducing the extent to which neutrons are slowed down and hence reducing the reactivity in the reactor. Therefore, if reactivity increases beyond normal, the reduced moderation of neutrons will cause the chain reaction to slow down, producing less heat. This property, known as the negative temperature coefficient of reactivity, makes {{abbr|PWR|pressurized water reactor}} reactors very stable. In event of a loss-of-coolant accident, the moderator is also lost and the active fission reaction will stop leaving just a 5% power level for 1 to 3 years called the "decay heat". This 5% "decay heat" will continue for 1 to 3 years after shut down, where upon it finally reaches "full cold shutdown". "Decay heat" while dangerous and strong enough to melt the core, is not nearly as dangerous as an active fission reaction. During this "decay heat" post shutdown period the reactor requires water pumped cooling or the reactor will overheat to above 2200 {{abbr|°C|degrees celsius}} where upon the heat separates the cooling water in to its constituent parts {{abbr|H|hydrogen}} and {{abbr|O|oxygen}} which can cause hydrogen explosions, threatening structural damage or even the possible exposure of highly radioactive stored fuel rods stored ready for use in surrounding nuclear storage pools ({{abbr|approx.|approximately}} 15 {{abbr|Mg|megagramm = 10⁶ gramm}} of fuel is replenished each year to maintain normal {{abbr|PWR|pressurized water reactor}} operation). This decay heat is the major risk factor in {{abbr|LWR|light water reactor}} safety record.
==PIUS reactor==
PIUS, standing for ''Process Inherent Ultimate Safety'', was a Swedish design concept for a light-water reactor system. <ref> National Research Council (U.S.). Committee on Future Nuclear Power, ''Nuclear power: technical and institutional options for the future'' National Academies Press, 1992, {{ISBN|0309043956 }} page 122 </ref> It relied on passive measures, not requiring operator actions or external energy supplies, to provide safe operation. No units were ever built.
==References==
{{reflist}}
==External links==
*[https://inlportal.inl.gov/portal/server.pt?open=512&objID=442&mode=2&in_hi_userid=2279&cached=true Light Water Reactor Sustainability (LWRS) Program]
{{BookCat}}
1mha4lc1hh83di8ggkeafpn8fqqruhu
Diablo Canyon Nuclear Power Plant: The WikiBook/Nuclear power plants made simple
0
252641
4641602
4583844
2026-06-29T04:55:03Z
Kai Burghardt
153973
clean up some leftovers from dewikification, fix [[:Category: CS1 errors: dates|Category: CS1 errors: dates]] by delinking “[[2004-09-20]]” to “2004-09-20”, unify source code style [no spaces around headings], resolve [[:Category: CS1 errors: empty unknown parameters|Category: CS1 errors: empty unknown parameters]] by deleting some empty template parameters, consistently use American month day year date format, replace ambiguous “By now” with {{[[Template: as of|as of]]|2025|alt=By 2025}}
4641602
wikitext
text/x-wiki
{{Nav}}[[File:Hydrogen explosion Fukushima Unit 1 cg visualization.png|thumb|390px|Fukushima I Unit 1 nuclear reactor before and after the hydrogen explosion.]]
{{as of|2025|alt=By 2025}}, the most serious '''nuclear accident''' has been the Chernobyl disaster in 1986. Other serious nuclear accidents include the Fukushima I accident, Three Mile Island accident, the Windscale fire, Mayak accident, and the SL-1 accident. In the period to 2007, 63 major nuclear accidents have occurred at nuclear power plants. Twenty-nine of these have occurred since the Chernobyl disaster, and 71 percent of all nuclear accidents (45 out of 63) occurred in the United States.<ref>Benjamin K. Sovacool. The Costs of Failing Infrastructure ''Energybiz'', September/October 2008, pp. 32-33.</ref><ref>Benjamin K. Sovacool. The costs of failure: A preliminary assessment of major energy accidents, 1907–2007, ''Energy Policy'' 36 (2008), pp. 1802-1820.</ref>
==Fukushima, Onagawa and Tōkai==
On March 11, 2011, the Magnitude 9.0 devastating 2011 Sendai earthquake and tsunami took place in Japan. As a result, ''Fukushima I Nuclear Power Station'', ''Fukushima II Nuclear Power Plant II'', ''Onagawa Nuclear Power Plant'' and ''Tōkai Nuclear Power Plant stations'' consisting of eleven (11) reactors were automatically shut down following the earthquake.<ref name="11plants">{{cite web |url= http://www.news.com.au/world/japan-earthquake-evacuations-ordered-as-fears-grow-of-radiation-leak-at-nuclear-plant/story-e6frfkyi-1226020473244 |title=Japan earthquake: Evacuations ordered as fears grow of radiation leak at nuclear plant; News.com.au |first= |last=|work= News | location = AU |year=2011|quote=According to the industry ministry, a total of 11 nuclear reactors automatically shut down at the Onagawa plant, the Fukushima No. 1 and No. 2 plants and the Tokai No. 2 plant after the strongest recorded earthquake in the country's history|accessdate=March 13, 2011}}</ref>
At Fukushima I and II tsunami waves overtopped seawalls and destroyed diesel backup power systems, leading to severe problems including two large explosions at Fukushima I and leakage of radiation.<ref>[http://www.iaea.org/newscenter/news/2011/tsunamiupdate01.html IAEA Update on Japan Earthquake]</ref> Over 200,000 people have been evacuated.<ref>{{Cite news |url=http://www.guardian.co.uk/world/2011/mar/13/japan-nuclear-plants-fukushima-earthquake |title=Japan's nuclear fears intensify at two Fukushima power stations |publisher=The Guardian |date=13 March 2011 |accessdate=March 13, 2011}}</ref> Seismic recordings at six assessed nuclear power plant facilities indicated the plants had been exposed to ''peak ground accelerations'' of 0.037–0.383 ''g'' and ''peak ground velocities'' of 6.18–52.62 ''cm/sec.''<ref>{{cite web|url=http://issc.iaea.org/shakecast/index.php?event=c0001xgp&sid=a44d2471cc77903a3040626f6154dd6b|title=Shake Cast Summary, M 8.9 – Near the East coast of Honshu, Japan |work= ShakeCast2|publisher=International Atomic Energy Agency|accessdate=March 14, 2011}}</ref>
==Chernobyl disaster==
The Chernobyl disaster was a major accident at the Chernobyl Nuclear Power Plant on April 26, 1986, with an explosion at the plant and later radioactive contamination of the surrounding area. It is so far the worst nuclear accident in the history of nuclear power. A plume of radioactive fallout drifted over parts of the western Soviet Union, Eastern and Western Europe, Scandinavia, the UK, Ireland and eastern North America. Large areas of Ukraine, Belarus, and Russia were badly damaged, forcing the people in charge to have to evacuate and resettle more than 336,000 people. About 60% of the radioactive fallout landed in Belarus, according to official post-Soviet data.<ref name="Chernobyl.info">{{cite web |title=Geographical location and extent of radioactive contamination| publisher=Swiss Agency for Development and Cooperation|url=http://www.chernobyl.info/index.php?navID=2}} (quoting the "Committee on the Problems of the Consequences of the Catastrophe at the Chernobyl NPP: 15 Years after Chernobyl Disaster", Minsk, 2001, p. 5/6 ff., and the "Chernobyl Interinform Agency, Kiev und", and "Chernobyl Committee: MailTable of official data on the reactor accident") </ref>
The accident made many people worried about the safety of the Soviet nuclear power industry. As a result, plans for more nuclear plants were put on hold and the Soviet government, who were not very open with its data, had to make public more of its data. The now-independent countries of Russia, Ukraine, and Belarus have had to spend a lot of money and time on decontamination and health care costs of the Chernobyl accident. Nobody knows how many people died because of this accident. This is because the Soviets covered up information, did not fully complete lists, and did not let doctors list "radiation" as the reason why some people died. Most of the expected long-term deaths, such as that from cancer, have not yet happened and it is hard to say that Chernobyl was the full reason for their deaths.
==Three Mile Island accident==
[[Image:3MileIsland.jpg|thumb|right|Three Mile Island Nuclear Generating Station consisted of two pressurized water reactors each inside its own containment building and connected cooling towers. TMI-2 is in the background.]]
On March 28, 1979, the Unit 2 – nuclear power plant on the Three Mile Island Nuclear Generating Station (TMI-2) in Dauphin County, Pennsylvania near Harrisburg, Pennsylvania – suffered a partial core nuclear meltdown.
The Three Mile Island accident was ({{as of|2025|lc=lc}}) the worst accident in United States commercial nuclear power generating history, even though it led to no deaths or injuries to plant workers or members of the nearby community.<ref name=FactSheet>U.S. Nuclear Regulatory Commission Fact Sheet on the Accident at Three Mile Island. Available at http://www.nrc.gov/reading-rm/doc-collections/fact-sheets/3mile-isle.html/ </ref>
The '''accident''' unfolded over the course of five tense days, as a number of agencies at local, state and federal level tried to diagnose the problem and decide whether or not the on-going accident required a full emergency evacuation of the population. The full details of the accident were not discovered until much later. In the end, the reactor was brought under control. Although approximately 25,000 people lived within five miles of the island at the time of the accident,<ref name=Kemeny>President's Commission on the Accident at Three Mile Island, ''The need for change, the legacy of TMI : report of the President's Commission on the Accident at Three Mile Island'' (Washington, D.C.: The Commission, 1979). [Aka “Kemeny Commission report.”] Available at http://www.threemileisland.org/ </ref> no identifiable injuries due to radiation occurred, and a government report concluded that "the projected number of excess fatal cancers due to the accident... is approximately one". But the accident had serious economic and public relations consequences, and the cleanup process was slow and costly. It also furthered a major decline in the public popularity of nuclear power, exemplifying for many the worst fears about nuclear technology and, until the Chernobyl disaster seven years later, it was considered the world's worst civilian nuclear accident.
[[File:Davis-Besse ReactorHeadInspection.jpg|thumb|Davis Besse Reactor Head Inspection.]]
==Davis-Besse==
Davis-Besse Nuclear Power Station is a single reactor located on the southwest shore of Lake Erie near Oak Harbor, Ohio. According to the Nuclear Regulatory Commission, Davis-Besse has been the source of two of the top five most dangerous nuclear incidents in the United States since 1979.<ref>{{cite_web | author=Nuclear Regulatory Commission | date=2004-09-16 | title=Davis-Besse preliminary accident sequence precursor analysis | format=PDF | url=http://www.nrc.gov/reactors/operating/ops-experience/vessel-head-degradation/news/2004/09-16-04-ml0426005320.pdf| accessdate=2006-06-14}} and {{cite_web | author=Nuclear Regulatory Commission | date=2004-09-20 | title=NRC issues preliminary risk analysis of the combined safety issues at Davis-Besse | url=http://www.nrc.gov/reading-rm/doc-collections/news/2004/04-117.html | accessdate=2006-06-14}}</ref>
==SL-1 accident==
The SL-1, or Stationary Low-Power Reactor Number One, was a United States Army experimental nuclear reactor which underwent a steam explosion and meltdown in January 1961, killing its three operators. The direct cause was the improper withdrawal by a maintenance team of a single reactor control rod. The event is the only reported fatal reactor accident in the United States.<ref name=ProvePrinciple>{{cite book
| last =Stacy
| first =Susan
| title =Proving the Principle
| publisher =
| date =
| location =
| pages =
| url =http://www.inl.gov/proving-the-principle/chapter_16.pdf
| isbn = }}</ref><ref name=radiationworks>{{cite web
| last =
| first =
| title =The SL-1 Reactor Accident
| work =
| publisher =
| date =
| url =http://www.radiationworks.com/sl1reactor.htm
| accessdate = }}</ref>
==Windscale fire==
On October 10, 1957, the graphite core of a British nuclear reactor at Windscale, Cumbria, caught fire, releasing substantial amounts of radioactive contamination into the surrounding area. The event, known as the Windscale fire, was considered the world's worst nuclear accident until the Three Mile Island accident in 1979.
The fire itself released an estimated 20,000 curies -(700 becquerel/terabecquerels) of radioactive material into the nearby countryside. Of particular concern was the radioactive isotope iodine-131, which has a Half-life of only 8 days but is taken up by the human body and stored in the thyroid. As a result, consumption of iodine-131 often leads to cancer of the thyroid.
No one was evacuated from the surrounding area, but there was concern that milk might be dangerously contaminated. Milk from about 500km² of nearby countryside was destroyed (diluted a thousandfold and dumped in the Irish Sea) for about a month.
==Mayak accident==
Mayak is the name of a nuclear fuel reprocessing plants 150 km northwest of Chelyabinsk in Russia. Working conditions at Mayak resulted in severe health hazards and many accidents,<ref>[http://www.thebulletin.org/issues/1999/so99/so99larin.html]</ref> with a serious accident occurring in 1957.
The 1957 Kyshtym disaster occurred when the failure of the cooling system for a tank storing tens of thousands of tons of dissolved nuclear waste resulted in a non-nuclear explosion having a force estimated at about 75 tons of {{abbr|TNT|trinitrotoluene}} (310 {{abbr|GJ|gigajoules}}), which released some 20 MCi (740 petabecquerels) of radiation.<ref>[http://www.american.edu/projects/mandala/TED/ural.htm]</ref> Subsequently, at least 200 people died of radiation sickness, 10,000 people were evacuated from their homes, and 470,000 people were exposed to radiation.
==Notes==
<references/>
{{BookCat}}
2gccbyfgtk4cj8imh8wp40pgy3fvn8d
Aros/Platforms/Storage support
0
274498
4641662
4640745
2026-06-29T11:16:50Z
Jeff1138
301139
4641662
wikitext
text/x-wiki
{{ArosNav}}
==Introduction==
AROS supports hard disks and optical drives attached to several interfaces:
* [[#NVMe M.2 SSD (M key)]] on the pci-e bus
* [[#SATA]] aka Serial ATA or AHCI (IDE compatibility mode used in most cases)
* [[#PATA]] IDE (also known as ATA or Parallel ATA)
* USB
* [[#SCSI]]
==PCI-e==
===NVMe M.2 SSD (M key)===
*Controller and firmware
*DRAM better having if heavy workloads but not necessary for gaming
*Cache like SLC HMB techniques
*NAND (Main storage area with MLC, TLC or QLC versions of varying life expectancy)
SSDs, USB flash drive, SD and Micro SD Cards have a limited amount of write cycles, therefore guaranteed to fail randomly and suddenly at any time. All SSDs are prone to corrupt firmware due to poor quality NAND where both the data and the firmware resides. The drive tends to go read only when too many errors occur before complete failure. That is up to 10 years for things like memory cards and USB sticks.
In general, unless there is a firmware design issue, cheap materials used, stress like bending or overheating causing cold solder joints, an SSD can last a long time if minimal writing activity takes place but eventually if flash isn't written to, it degrades. Catch 22.
Dram and cache are not the same thing. Dram stores the ssds indexes and metadata for faster data retrieval and wear leveling. The cache keeps part of the nand memory as SLC storage which can be written to faster. Basically all ssds will have a dynamic SLC cache where it will decrease as the drive fills up. Cache controller designs that are DRAM less use the internal SRAM cache in the controller to cache the NAND mapping table. It just requires a different mapping table design since SRAM caches are much smaller than DRAM. Ultimately the mapping table is still stored in NAND.
General rule of thumb: the cheaper an SSD, the higher the likelihood it uses lower quality flash chips so sudden failing NAND, problematic controller chips (e.g. SandForce), outsourced firmware. Generic brand like old SP, Corsair or Crucial may be recoverable whilst major brands Samsung, Intel and Western Digital are impossible due to firmware encryption and customizations. Recommend sticking with older Silicon Motion or Phison controllers if possible.
A ssd isn't good because it has dram or bad because it doesn't. Other things should be taken into account like sustained writes so check the TPU write intensive usage
See [https://www.techpowerup.com/ssd-specs/ here] for more information
{| class="wikitable" width="100%"
! width="15%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="30%" |Tested Distribution
|-
| <!--Brand-->Unnamed
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 to - SM2259XT2 SM2263XT MAS0902 MAP1202 YS9082HP RM1135 RTS5765 PS3111
|-
| <!--Brand-->Unnamed OEMs
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 to date - Realtek RTS5765/66 controller + Micron 96L (B27A)
|-
| <!--Brand-->Acer Predator GM7
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Acer drives built by Biwin, that also supplies HP, Maxio MAP1602A no DRAM so HMB, YMTC 128L TLC,
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->ADATA M.2 NVME IM2P33F8, IM2S3168 SSD
| <!--Model-->IM2P33F8-512GD
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - industrial 12L 3D TLC NAND flash Supports LDPC ECC, RAID Engine, and SLC Cache End-to-End (E2E) Data Path Protection with Host Memory Buffer (HMB) i.e. DRAMless
|-
| <!--Brand-->ADATA XPG SX8200 Pro M.2 nvme
| <!--Model-->ASX8200PNP1TTC
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 NVM Express 1.3 SN2262G later SN2262EN chipset -
|-
| <!--Brand-->ADATA 256GB GEN4 x4 NVMe PCIe M2 2230 SSD
| <!--Model-->SM2P41C3-256GC2 DP/N 0KM1Y6
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 consumer
|-
| <!--Brand-->ADATA XPG GAMMIX S50 Lite
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 controller Silicon Motion SM2267XT dramless
|-
| <!--Brand-->ADATA XPG ATOM 50
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 controller Innogrit RainierQX IG5220
|-
| <!--Brand-->Adata Legend 710
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->ADATA Legend 900
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->BiWin PCIe Gen3
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Innogrit IG5216 controller, no DRAM so HMB which appears to be the standard -
|-
| <!--Brand-->BiWin NV7200 PCIe 4.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 SM2263XT
|-
| <!--Brand-->Biwin NV7400
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 multiple variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Corsair Force LE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Corsair Force Series MP500 MP510 M.2 NVMe PCIe Gen 3 x4 SSD
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 PS5012-E12-27 from Phison, 64-layer TLC Toshiba BiCS flash, may have dram cache - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Corsair Force MP400
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 Phison E16 on DRAM DDR4 with Micron 96L QLC - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Corsair Force MP
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Corsair Force MP
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Corsair MP600 Elite
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E16 and Bics DDR4 DRAM buffer and TLC-based with SLC-mode cache - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Corsair MP600 Pro XT, PRO LPX, PRO NH PCIe4
| <!--Model-->CSSD-F1000GBMP600ECS Elite,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 DRAMless SSD controller Phison PS5026-E26, BiCS6 162L QLC NAND
|-
| <!--Brand-->Corsair MP600 Core XT
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison and Bics QLC-based with SLC-mode cache -
|-
| <!--Brand-->Corsair MP700 Pro PCIe 5.0
| <!--Model-->CSSD-F1000GBMP700PNH
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Crucial P1
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 QLC NAND but a controller with a DRAM cache -
|-
| <!--Brand-->Crucial P2 M.2 2280 Gen3 x4 NVM-express
| <!--Model-->CT1000P2SSD8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 dram-less Phison PS5013-E13-31 on 96-layer QLC NAND -
|-
| <!--Brand-->Crucial P3 Plus M.2 2280
| <!--Model-->CT1000P3PSSD8 CT2000P3PSSD801
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E21T with Host Memory Buffer HMB tech to use a small bit of system RAM as DRAM cache and Micron 176-layer QLC NAND -
|-
| <!--Brand-->Crucial P3 M.2 nvme SSD
| <!--Model-->CT2000P3SSD8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E21T with no DRAM so HMB and 176-Layer Micron QLC (N48R) -
|-
| <!--Brand-->Crucial P5 m.2 nvme PCIe 4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 runs hot - Crucial NVMe with DRAM LPDDR4 and Micron 96L TLC
|-
| <!--Brand-->Crucial P5 Plus
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 some have DRAM cache
|-
| <!--Brand-->Crucial T500 Gen4.0 nvme 2.0
| <!--Model-->CT1000T500SSD8, CT2000T500SSD8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison PS5025-E25 with micron B58R 232-layer 3D TLC NAND and Micron LPDDR4 DRAM cache - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Crucial T700 Gen5 SSD
| <!--Model-->CT1000T700SSD3, CT2000T700SSD3
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 SSD controller Phison PS5026-E26, Micron 232-layer NAND with no dram as standard -
|-
| <!--Brand-->Crucial P310 M.2 2280 NVMe PCIe Gen4 SSD
| <!--Model-->CT2000P310SSD801 (2Tb),
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 DRAM-less Phison E27T Micron 232-layer NAND -
|-
| <!--Brand-->Crucial T705
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 dramless Phison SSD controller
|-
| <!--Brand-->Crucial T710
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 SMI SM2508 SSD controller dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Ediloca EN605 PCIe Gen3 x4 interface, NVMe 1.3 support
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Ediloca EN660 PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Ediloca EN760 PCIe Gen4 x4 M.2 NVMe 1.4 interface
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 gets hot
|-
| <!--Brand-->Ediloca EN870
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 no dram Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->Ediloca EN855
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dram Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->Ediloca
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Ediloca
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fanxiang S500 pro PCIe Gen3
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 MaxioTech MAP1202A-F1C with YMTC 128L and pseudo-SLC cache
|-
| <!--Brand-->Fanxiang S660
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fanxiang S880/R
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->Fanxiang S770
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Fikwot
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->Fikwot founded in 2018
|-
| <!--Brand-->Fikwot FX550 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->Fikwot FN501 Pro m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->FIKWOT FN950 FN955
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 MAP1602 (at 1600 MT/s) flash YMTC TLC no dram
|-
| <!--Brand-->Fikwot FX991 m.2 nvme
| <!--Model-->FW-FX991-2TB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Fikwot FN960
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->Fikwot FN970 m.2 nvme pcie
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Geil ZEN ITH m.2 nvme
| <!--Model-->S3-240GB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Gigabyte Aorus Gen4 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 Phison E16 and Toshiba 96-layer TLC (triple-level cell) BiCS4 NAND flash - DDR4 DRAM buffer and TLC-based with SLC-mode cache -
|-
| <!--Brand-->Gigabyte Aorus 10000 PCIe 5.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E26 on DRAM LPDDR4 with 232-Layer Micron TLC
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->HP EX950 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->HP FX900 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dram less
|-
| <!--Brand-->HP
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Integral M2 Series NVME M.2 2280 PCIe Gen 3x4
| <!--Model-->INSSD500GM280NM2
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Inland Professional TLC E12S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison E18
|-
| <!--Brand-->Inland Gaming performance Plus m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E16 controller and TLC flash
|-
| <!--Brand-->Inland TD510
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E26 on DRAM DDR4 with 232-Layer Micron TLC
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intel
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->intel SSD Pro 7600p Series M.2 80mm 2280 PCIe 3.0 x4, 3D TLC
| <!--Model-->SSDPEKKF512GB, SSDPEKKF256G8L,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Intel 660p m.2 nvme
| <!--Model-->ssdpeknw010tb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 SMI SM2263 controller with 1GB DRAM cache and 1TB of Intel QLC NAND similar to crucial P1
|-
| <!--Brand-->[https://www.solidigm.com/support-page/warranty-rma/ka-00032.html Solidigm formerly Intel] 670p
| <!--Model-->SSDPEKNU010TZ, SSDPEKNU512GZH,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 256 MB DDR3L cache and 12-140 GB SLC-Cache QLC NAND
|-
| <!--Brand-->Intel P4511 m.2 nvme PCIe3.1 x4 22110 110mm
| <!--Model-->SSDPELKX020T8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 very long
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston A1000 NVME PCIE M2 2280 SSD
| <!--Model-->SA1000M8/480G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Kingston A2000 NVME PCIE M2 2280 SSD
| <!--Model-->SA2000M8/250G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->Kingston KC3000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison’s [https://www.kingston.com/en/support/technical/ksm-firmware-update Firmware Rev. EIFK31.7 (07-08-2024) update for] PS5018-E18 PCIe 4.0 x4 NVMe controller and Micron’s 176L TLC NAND flash -
|-
| <!--Brand-->Kingston NV1 m.2 nvme pcie
| <!--Model-->SNV1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 entry-level consumer DRAMless Phison E13T or Silicon Motion 4-channel SM2263XT - one brand TLC up to 1Tb and QLC after -
|-
| <!--Brand-->Kingston NV2
| <!--Model-->SNV2
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 entry-level, first SMI SM2267XT or Phison E19T and later SMI SM2269XT or Phison E21T with various flash memory
|-
| <!--Brand-->Kingston FURY Renegade m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 [https://www.kingston.com/en/support/technical/ksm-firmware-update Firmware Rev. EIFK31.7 (07-08-2024) update for] Phison E18 controller, Micron 176L nand and ddr4 dram -
|-
| <!--Brand-->Kingston NV3
| <!--Model-->SNV3S/500G, SNV3S/1000G, SNV3S/2000G, SNV3S/4000G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 entry-level, SMI SM2268XT2 or Phison E27T controller with BiCS6 TLC or QLC flash - dramless so hmb -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kioxia (Toshiba) XG4? M2 2280 NVMe PCIe SSD
| <!--Model-->THNSF5512GPUK, THNSN51T02DUK,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 Phison has done custom controller work for Kioxia, and Kioxia has also worked with SMI and InnoGrit (the latter more recently). Kioxia label their controllers as their own but these are largely rebadged.
|-
| <!--Brand-->Kioxia (Toshiba) XG5 for Data Centres
| <!--Model-->KXG5 KXG50ZNV1T02
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 nanya ddr3 dram? with 64-layer BiCS 3D flash memory
|-
| <!--Brand-->Kioxia XG6 OEM m.2 nvme
| <!--Model-->KXG60ZNV512G, KXG60ZNV1T02,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 TC58NCP090GSD with DRAM NANYA LPDDR3 and Toshiba BiCS FLASH 96-layer 3D TLC -
|-
| <!--Brand-->Kioxia (Toshiba) BG4 m.2 nvme
| <!--Model-->
*KBG40ZNS128G, KBG40ZNS256G, KBG40ZNS512G, KBG40ZNS1T02
*KBG40ZNT256G,
*KBG40ZNV1T02
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 - no dram but NVMe's Host Memory Buffer (HMB) i.e. portion of the system's RAM for caching - Toshiba's 96-Layer BiCS FLASH - seems Windows UASP driver and the JMS583 chipset interacts badly with the Kioxia BG4 - early firmware upgrade to prevent overheating hot -
|-
| <!--Brand-->Kioxia XG7
| <!--Model-->KXG70ZNV1T0G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 - might need firmware update on early 2tb 4tb versions - controller with sk hynix dram and tlc nand
|-
| <!--Brand-->KIOXIA EXCERIA PLUS G2 SSD series PCIe 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison PS5012-E12S-32 aka TC58NC1201GST 4-channel controller along with KIOXIA proprietary 96-layer 3D TLC and "MG2h" version has BiCS4.5 which is faster than launch BiCS4 - -
|-
| <!--Brand-->Kioxia XG8 OEM m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 TC58NC0L1XGSD with DRAM LPDDR4 and 112-Layer Kioxia BiCS5 TLC -
|-
| <!--Brand-->Kioxia (Toshiba) BG5
| <!--Model-->KGB50ZNV256G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 HMB buffer
|-
| <!--Brand-->Kioxia (Toshiba) BG6 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 dramless
|-
| <!--Brand-->KIOXIA EXCERIA PLUS G3 SSD series PCIe 4.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 has hmb, like most dram-less nvmes KIOXIA
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lexar 1TB SSD M.2 NVME 1.4 Gen3x4 M.2 2280
| <!--Model-->NM610Pro
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Lexar NM620
*IG5216 (worse?) not great original 96L
*MAP1202 YMTC up to 232L, or 176L Micron, TLC for the 1TB
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 a few versions all DRAM-less,
|-
| <!--Brand-->Lexar NM790 SSD M.2 PCIe Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Maxio MAP1602 no DRAM so HMB with 232-Layer YMTC TLC
|-
| <!--Brand-->Lexar m.2 nvme
| <!--Model-->EQ790
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Maxio MAP1602, no DRAM so HMB, Flash Memory 232-Layer YMTC TLC,
|-
| <!--Brand-->Lexar
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Liteon M.2 NVME 512GB SSD 2280
| <!--Model-->CAZ-51282512-Q11 DP/N 0K64PG
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 SMI controller
|-
| <!--Brand-->Micron 2200S m.2 nvme 2200 series
| <!--Model-->MTFDHBA256TCK, MTFDHBA512TCK
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 for a time, Micron controller with 64L TLC 3D Nand [https://www.dell.com/support/home/en-uk/drivers/driversdetails?driverid=3jg3g BSOD occurred as CRITICAL_PROCESS_DIED] before self applied firmware [https://support.lenovo.com/us/en/downloads/ds119265-nvme-solid-state-drive-firmware-update-utility-for-windows-10-64-bit-thinkpad apparently it is related to the power management that disconnects the Micron SSD]
|-
| <!--Brand-->Micron 2300 m.2 nvme Gen 3 x4
| <!--Model-->MTFDHBA256TDV P/N M02626-001,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->Micron 3400 M.2 NVME SSD Gen4
| <!--Model-->MTFDKBA512TFH
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 - no cache
|-
| <!--Brand-->Micron 2450
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 E19T
|-
| <!--Brand-->Micron 2600 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Phison's PS5029-E29T SSD controller with Micron 276-layer G9 QLC NAND in a DRAMless - Adaptive Write Technology (AWT) using various NAND modes (SLC, TLC, and QLC) as a dynamic cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->MSI Spatium S270
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->MSI Spatium M450 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison’s E19T controller
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac NV2000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac NV5000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac NV7000 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Orico J10 J-10 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->Orico D10 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Orico e3500
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->Orico O7000 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Patriot P300 m.2 nvme pcie 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Patriot Viper VP4300 Lite M.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 multiple variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->PNY CS2230 Gen3 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->PNY CS2140 CS2342 Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Raydisk 1T 2280 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 no dram, Memory QLC Intel 144 layer. Chip Realtek
|-
| <!--Brand-->Raydisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sabrent Rocket Nano 2242 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sabrent Rocket 4.0 m.2 nvme
| <!--Model-->SB-2130-512, SB-2280-1TB, SB-Rocket-NVME4-HTSK-2TB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E16 controller and TLC flash -
|-
| <!--Brand-->Sabrent Rocket 4.0 PLUS m.2 nvme
| <!--Model-->SB-RKT4P-1TB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E1? controller and TLC flash -
|-
| <!--Brand-->Sabrent Rocket 5
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Phison E25
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Samsung PM951 m.2 nvme
| <!--Model-->MZVLV1T
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung 950 PRO PM961 M.2 2280 NVMe 1.3 PCI-Express 3.0 x4
| <!--Model-->
*MZ-VKW5120
*MZ-VLW2560 MZVLW256HEHP-000L7, MZ-VLW5120, MZ-SLW1T00
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - possibly 512M LPDDR3 Samsung K4E4E324EE-ECCF cache - Polaris (S4LP077X01-8030) unit with Samsung 48-layer TLC V-NAND V3 flash Samsung K90MGY8S7M-CCK0 -
|-
| <!--Brand-->Samsung 960 Pro SM961 M.2 PCi-e NVMe SSD 2280
| <!--Model-->MZ-V6P1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 Polaris (S4LP077X01-8030) controller Samsung 48-layer multi-level cell (MLC) V-NAND, pseudo-SLC cache or LPDDR3-1866 Samsung K4E8E304EE-EGCF
|-
| <!--Brand-->Samsung PM981 2280 PCI-Express 3.0 x4
| <!--Model-->
*Rev 0 MZ-VLB256A, MZ-VLB512A, MZ-VLB1T0A,
*Rev 0 MZ-VLB2560, MZ-VLB5120 P/N MZVLB512HAJQ, MZ-VLB1T00,
*Rev ? MZ-VLB256B, MZ-VLB512B, MZ-VLB1T0B,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 - tlc flash with SSD controller Samsung Phoenix (S4LR020) - pseudo-SLC cache hybrid SLC Samsung’s TurboWrite -
|-
| <!--Brand-->Samsung PM981a 2280 PCI-Express 3.0 x4
| <!--Model-->MZ-VLB5120 P/N MZVLB512HBJQ-000L7,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 - tlc flash with SSD controller Samsung Phoenix (S4LR020) - pseudo-SLC cache
|-
| <!--Brand-->SAMSUNG PM991 NVMe M.2 SSD 2242 2280
| <!--Model-->MZ-VLQ2560 MZVLQ256HBJD-000H1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->SAMSUNG PM991a NVMe M.2 SSD 2242 2280
| <!--Model-->MZ-VLQ256B MZVLQ256HBJD-00BH1, MZ-9LQ256C, MZ-VLQ512B MZVLQ512HBLU,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->Samsung 970 EVO Plus m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 Samsung Phoenix on Samsung LPDDR4 dram and 2 Samsung 9x-layer V-NAND TLC
|-
| <!--Brand-->Samsung 980 EVO Plus
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Samsung 980 Pro m.2 nvme
| <!--Model-->MZ-V8P1T0BW,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 originally made in Korea ([https://semiconductor.samsung.com/consumer-storage/support/tools/ 2tb firmware issues] with versions starting with 3) and year later Vietnam - DRAM
|-
| <!--Brand-->Samsung 990 EVO m.2 nvme
| <!--Model-->MZ-V9E2T0BW, MZ-V9E1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Samsung Piccolo no DRAM so HMB Samsung 133-Layer TLC (V6P) and Samsung 133-Layer TLC (V6P) -
|-
| <!--Brand-->SAMSUNG PM9A1 SSD M.2 2280 PCIe NVME Gen4x4
| <!--Model-->MZ-VL25120 MZVL2512HCJQ, MZVL21T00 MZVL21T0HCLR-00BL2,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 might be OEM variant of the 980 Pro
|-
| <!--Brand-->Samsung PM9B1 SSD M.2 2280 PCIe NVME Gen4x4
| <!--Model-->
*2023 MZ9L4256HCJQ-00BD1 MZ-9L4256A, ,
*2025 MZ-VL42560, MZ-VL45120, MZ-VL421T,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 SSD controller is Marvell 88SS1322 Whistler Plus, no DRAM cache and Samsung 128-layer TLC NAND flash
|-
| <!--Brand-->Samsung 990 EVO Plus m.2 nvme2.0
| <!--Model-->MZ-V9S2T0BW, MZ-V9S1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Samsung Piccolo with no DRAM so HMB and Samsung 236-Layer (V8) TLC -
|-
| <!--Brand-->Samsung 990 Pro m.2 nvme
| <!--Model-->MZ-V9P2T0BW, MZ-V9P1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 2tb early firmware issue - Samsung Pascal with DRAM LPDDR4 and 176-Layer V-NAND TLC - has had firmware design issues, causing premature failure -
|-
| <!--Brand-->Samsung 9100 PRO PCIe Gen5 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Seagate Firecuda 510 G3 x4 nvme
| <!--Model-->
*ZP1000GM30001,
*ZP500GM30021 P/N 2NT308-300,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 bad early batch - Phison E12 STXYP0160031 on SK Hynix DRAM DDR4 with Kioxia BiCS3 64L TLC
|-
| <!--Brand-->Seagate Firecuda Q5
| <!--Model-->ZP500CV30001,ZP250CV30001,ZP1000CV30001 P/N 2ZK307-881,ZP2000CV30001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 PS5013-E13-31 from Phison, no DRAM cache and QLC nand
|-
| <!--Brand-->Seagate Firecuda 515
| <!--Model-->ZP500GV30001,ZP250GV30001,ZP1000GV30001,ZP2000GV30001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 no dram and qlc nand
|-
| <!--Brand-->Seagate FireCuda 520 SSD M.2 PCIe Gen4 ×4 NVMe 1.4
| <!--Model-->ZP2000GM30002, ZP1000GM30002, ZP500GM30002
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison E16 and Toshiba 96-layer TLC (triple-level cell) BiCS4 NAND flash DDR4 DRAM buffer and TLC-based with SLC-mode cache -
|-
| <!--Brand-->Seagate Firecuda 520N m.2 nvme
| <!--Model-->ZP2000GV3A012, ZP1000GV3A012 and ZP500GV3A012
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless
|-
| <!--Brand-->Seagate Firecuda 530 m.2 nvme
| <!--Model-->ZP500GM3A013,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison PS5018-E18 on DRAM DDR4 with Micron 176L TLC
|-
| <!--Brand-->Seagate
| <!--Model-->ZP1000CV3A002,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless
|-
| <!--Brand-->Seagate Firecuda 540
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E26 on DRAM LPDDR4 with 232-Layer Micron TLC
|-
| <!--Brand-->Seagate Firecuda 530R
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power UD85 m.2 nvme PCIe 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 [http://vlo.name:3000/ssdtool/ firmware tools]
|-
| <!--Brand-->Silicon Power UD90 PCIe 4.0 nvme
| <!--Model-->SP250GBP44UD9005, SP500GBP44UD9005, SP01KGBP44UD9005, SP02KGBP44UD9005,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E21T with no DRAM so HMB and 176-Layer Micron TLC (B47R) but later no name QLC nand instead -
|-
| <!--Brand-->Silicon Power A60 A80
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 various originally an E12 drive with 64L Toshiba NAND, then had variations with E12S and SM2262EN as well as random 64L/96L, now it comes with a MAP1001A controller by Maxio and some YMTC NAND -
|-
| <!--Brand-->Silicon Power US75 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 multiple variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->Silicon Power m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SK Hynix BC501 M.2 m.2 NVMe PCIe Gen3 SSD
| <!--Model-->
*Rev0 HFM256GDHTNG-8510B SSS0L24764, HFM256GDJTNG-8310A,
*Rev1 HFM256GDHTNG-8310A SSS0Q68673,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 bad batch early -
|-
| <!--Brand-->SK Hynix BC511 512GB NVMe PCIe M2 2230 SSD
| <!--Model-->HFM256GDJTNI-82A0A HFM512GDGTNI-82A0A D P/N 0TG8T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 no dram cache
|-
| <!--Brand-->SK hynix BC711 PCIe Gen3 x4
| <!--Model-->HFM001TD3JX013N, HFM512GD3JX013N, HFM256GD3JX013N
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 okay but no dram cache
|-
| <!--Brand-->SK hynix PC711 m.2 2280 PCIe Gen3 x4
| <!--Model-->
*HFS001TDE9X073N, HFS512GDE9X073N, HFS256GDE9X073N
*HFS001TDE9X080N, HFS512GDE9X080N, HFS256GDE9X081N
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->SK Hynix SC210 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->SK Hynix PC601 PCIe 3.0 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 - Cepheus Plus YCN34PTA0FR Controller and 48L TLC Flash, pseudo-SLC cache and LPDDR4-3733 SK Hynix H9HCNNN8KUMLHR-NME dram -
|-
| <!--Brand-->SK Hynix PC401 3rd gen PCIe
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 bad batch early -
|-
| <!--Brand-->SK hynix Gold P31 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 SK hynix’s proprietary Cepheus controller
|-
| <!--Brand-->Sk Hynix SK500 Gen 4 (x4)
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->SK hynix Platinum P41 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Aries SSD controller with 176-Layer TLC flash - SK hynix LPDDR4 dram -
|-
| <!--Brand-->Sk Hynix PC801 PCIe Gen4 x4 m.2 nvme
| <!--Model-->HFS001TEJ9X101N, HFS512GEJ9X101N, HFS256GEJ9X101N, HFS002TEJ9X101N
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->SK Hynix BC901 m.2 nvme PCIe Gen4 2230
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Silicon Motion SM2269XT with no DRAM so HMB buffer cache - SK Hynix 176-layer TLC NAND flash 1TB only -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Team
| <!--Model-->TM8PS7512G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->TeamGroup MP34
| <!--Model-->MP34 256GB, MP34 512GB, MP34 1TB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 good Phison E12 with DRAM NANYA DDR3L and Toshiba BiCS 3 64L TLC -
|-
| <!--Brand-->Team Group T-Force Cardea A440 PCIe Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison PS5018-E18 NVMe 1.4 controller and Micron’s 96L TLC with SK hynix 8Gb DDR4 chips but not OPAL-compliant AES 256-bit
|-
| <!--Brand-->Team Group TForce Cardea A440 Lite PCIe Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 dram-less E27T controller and 162L TLC but not OPAL-compliant AES 256-bit
|-
| <!--Brand-->teamgroup Team Z44L m.2 nvme pcie
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison’s E19T controller
|-
| <!--Brand-->teamgroup Team MP44L m.2 nvme pcie
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison E21T no DRAM so HMB with 176-Layer Micron TLC
|-
| <!--Brand-->Team MP33Q
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 - dramless maxio MAP1202 with TLC (MP33) or QLC (MP33Q) -
|-
| <!--Brand-->Team Group QX GE Pro m.2 nvme PCIe5
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 innogit IG5666 with QLC 3D 232L nand with DRAM -
|-
| <!--Brand-->Team Group T-Force G70 Pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 InnoGrit IG5236 (Rainier) with DRAM and NAND YMTC TLC -
|-
| <!--Brand-->Team Group T-Force Cardea Z540 m.2 nvme PCIe 5.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Phison E26 controller and 232L TLC and DRAM -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend MTE110S PCIe Gen3 x4 M.2 2280 TS128GMTE110S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 3D TLC NAND
|-
| <!--Brand-->Transcend MTE220S PCIe Gen3 x4 M.2 2280 TS2TMTE220S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 3D TLC NAND with DRAM Cache
|-
| <!--Brand-->Transcend MTE300
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->Transcend MTE300S PCIe Gen3 x4 M.2 2230 TS256GMTE300S TS512GMTE300S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 3D TLC NAND, 1G and 2G get hot
|-
| <!--Brand-->Transcend
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend MTE400S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 mlc nand
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TWSC
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TWSC
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Union Memory (Shenzhen) AM6672
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->union memory AM6A0 Gen4 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Verbatim V15000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->WD Blue SN500
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Western digital SN720 M.2 2280 NVME PCIE for Data Centers
| <!--Model-->SDAQNTW-512G-1001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 to 2021
|-
| <!--Brand-->WDC SN520 2230 Gen3 x2
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 to 2020
|-
| <!--Brand-->Western digital ix sn530 M.2 NVME PCIE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 industrial sandisk controller and firmware, as well as 96-layer 3D TLC NAND memory that can work in TLC or SLC mode -
|-
| <!--Brand-->Western digital SN730 Gen3 x4 M.2 2280 M.2 NVME
| <!--Model-->SDBPNTY-1T00, SDBPNTY-512G-1012,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 to 2021 DRAM Cache DDR4-2666 CL18 Micron MT40A512M16LY-075:E (D9WFH) with Controller WD 20-82-00705-A2 Triton MP28 and NAND Flash Toshiba BiCS4 60082 512G (Rebranded by SanDisk) TLC 96-layer
|-
| <!--Brand-->WD Black SN750
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 64-layer 3D stacked NAND with 3 bits per cell TLC (Triple Level Cell) with 256MB of skhynix DRAM cache for every 250GB
|-
| <!--Brand-->WD Black SN850 m.2 nvme Gen4 PHY
| <!--Model-->WDS100T1X0E,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Sandisk G2 controller with Micron DDR4 cache - new nCache 4.0 slc cache total dynamic capacity spans one-third (300GB on 1TB) with a small static SLC cache (12GB on 1TB) from the Kioxia BiCS4 96L TLC 96-layer NAND flash -
|-
| <!--Brand-->Western digital SN550 Blue M.2 NVME PCIE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 - various controllers and NANDs
|-
| <!--Brand-->Western Digital SN810 NVMe SSD 2280 Gen4 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 slc cache - laptop oem only no retail version -
|-
| <!--Brand-->WD SN850X
| <!--Model-->WDS100T2X0E, WDS200T2X0E, WDS400T2X0E, WDS800T2X0E,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 issues with early ssd firmware and AMD Zen 3 X570 and X670E chipsets - Sandisk A101000291-82 controller with 112-layer TLC and DDR4 DRAM cache
|-
| <!--Brand-->WD_Blue SN570 single-sided M.2 2280 (80mm) PCIe 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless - WD/SanDisk SSD controller with BiCS 5 3D NAND TLC 112-layer NAND flash memory -
|-
| <!--Brand-->WD_Black SN770 m.2 nvme
| <!--Model-->WDS100T3X0E,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless cache with TLC
|-
| <!--Brand-->WD Green SN350 m.2 NVMe SSD
| <!--Model-->WDS100T3G0C,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 DRAM-less cache with SanDisk controller and QLC (quad-level cell) NAND
|-
| <!--Brand-->WD_BLACK SN750 SE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 controller Phison E19T, dramless
|-
| <!--Brand-->WD SN740 M.2 (2230) PCIe 4.0 x4 2280
| <!--Model-->SDDQTQD-1T00, SDDPNQD-, SDDPNQD-256G-2006,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless with SSD controller WD Sandisk 20-82-10081-A1 Polaris MP16+ with Toshiba BiCS5 112-layer TLC NAND flash
|-
| <!--Brand-->WD_Blue SN580
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 dramless SanDisk controller with (HMB) and 112-Layer Kioxia TLC (BiCS5)
|-
| <!--Brand-->WD Blue SN5000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Black SN8100 / Sandisk Optimus GX Pro 8100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk Optimus GX 5100 7100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2026
|-
| <!--Brand-->Sandisk Optimus GX Pro 850X
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2026
|-
| <!--Brand-->Sandisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Zhitai (Yangtze Memory)
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== Mini SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->Biwin PCIe 4×2 NVMe 1.3
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 GPDwin5 and Oneplayer Superx hybrid - 3D TLC - LGA packaging - V1 slide tray mechanism -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
|}
==SATA==
Advanced Host Controller Interface (AHCI), a programming interface for SATA host controllers. Platforms supporting AHCI may take advantage of performance features such as no master/slave designation for SATA devices — each device is treated as a master — and hardware-assisted native command queuing. AHCI may but not often also provides usability enhancements such as Hot-Plug (Desktop and Mobile Only). AHCI requires appropriate software support (e.g., an AHCI driver)
AHCI, the underlying protocol for SATA, only supports one queue with 32 commands.
The issue with AHCI is that it's going to take a pile of test hardware just to figure out all the different bugs in all the motherboard chipsets and add-on PCI cards that 'kinda' implement AHCI. Not to mention Silicon Image, which took a very different approach from Intel's AHCI in their SATA controllers.
=== SATA 7mm 2.5inch SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->ADATA 240GB Ultimate SU630 2.5"
| <!--Model-->ASU630SS-240GQ-R
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->ADATA Ultimate Su650 2.5in
| <!--Model-->ASU650SS240GTR
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->ADATA Ultimate Su800 2.5in
| <!--Model-->ASU800
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 SMI SM2258 controller with Micron 3D TLC NAND but low performance when data fills the SLC cache - slow write speed -
|-
| <!--Brand-->ADATA Ultimate Su680 2.5in
| <!--Model-->ASU680SS240GTR
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Apacer AS340 Panther
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Apacer AS350
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Crucial M4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2011 Marvell 88SS9174-BKK2 processor, 25nm MLC NAND flash and 128MB dram cache
|-
| <!--Brand-->Crucial M500 120Gb to 960Gb
| <!--Model-->CT250M500SSD1, CT500M500SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 dram cache
|-
| <!--Brand-->Crucial M550 120G to 1T
| <!--Model-->CT250M550SSD1, CT500M550SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 dram cache
|-
| <!--Brand-->Crucial (Micron) BX100
| <!--Model-->CT500BX100SSD1, CT1000BX100SSD1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 - no dram - Silicon Motion SM2246EN and ATA version ACS-2 -
|-
| <!--Brand-->Crucial (Micron) MX100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 dram cache Micron controller and nand -
|-
| <!--Brand-->Crucial MX200
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 MLC NAND
|-
| <!--Brand-->Crucial (Micron) BX300 2.5in
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 dramless cache - Micron ex Tidal controller and TLC nand -
|-
| <!--Brand-->Crucial (Micron) MX300
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 dram cache
|-
| <!--Brand-->Crucial (Micron) bx500 2.5inch
| <!--Model-->CT240BX500SSD1, CT480BX500SSD1, CT960BX500SSD1, CT1000BX500SSD1, CT2000BX500SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 SM2258XT 4channel later SM2259XT paired with Micron’s latest 64-Layer 3D TLC flash but dramless SLC cache (part of the tlc flash) -
|-
| <!--Brand-->Crucial (Micron) MX500
| <!--Model-->CT250MX500SSD1, CT500MX500SSD1, CT1000MX500SSD1, CT2000MX500SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - dram cache from 256M to 2G - discontinued end of 2024
|-
| <!--Brand-->Fanxiang S101 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 - no dram cache, Hynix memory 3dv7-176l 176 layer QLC (one chip), either raymx rm1135, SM2259XT controller or Realtek rts5735dlq
|-
| <!--Brand-->Fanxiang ranxiana S102 PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 - no dram -
|-
| <!--Brand-->Fanxiang S101Q 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Fanxiang
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fikwot
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->Fikwot founded in 2018
|-
| <!--Brand-->Fikwot FX815 Standard 2.5inch sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Fikwot FS810 Ultra 2.5inch sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Goodram CL100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> SM2259XT controller)
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Hypertec FirestormLite 2.5inch
| <!--Model-->S240GHS3-M or SDSSD240GB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Hypertech
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral V2 Plus 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intel SSD 520 Series 2.5 inch SATA 6Gb/s 2.5" SSD Solid State Drive
| <!--Model-->SSDSC2CW240A3, SSDSC2CW480A3,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 LSI SandForce SF2281, Flash Memory Intel Synchronous 25nm MLC -
|-
| <!--Brand-->Intel Pro Series 1500
| <!--Model-->SSDSC2BF180A4L SSD0E38417,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Intel S3610 Series 2.5" 400GB 6GBPS SATA SSD
| <!--Model-->SSDSC2BX400G4R
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 data center
|-
| <!--Brand-->Intel SSD Pro 5400s 512 GB
| <!--Model-->SSDSC2KF512H6
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Intel SSD DC S3510 Series MLC 2.5"
| <!--Model-->SSDS2BB400G6, SSDSC2BB480G6R,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Intel SSD DC S3520 Series MLC 2.5"
| <!--Model-->SSDSC2BB800G7,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Intel SSD DC S3710 Series 800GB 2.5"
| <!--Model-->SSDSC2BA800G4P,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 server
|-
| <!--Brand-->Intel SSD 545S Series 256GB 512GB
| <!--Model-->SSDSC2KW256G8X1, SSDSC2KW512G8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->[https://www.solidigm.com/support-page/warranty-rma/ka-00032.html Solidigm formerly Intel] SSD DC S4500 240GB 2.5inch - HP Enterprise
| <!--Model-->SSDSC2KB240G7P
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingspec P3-512 P3-1T0 P3-2TO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston HyperX SH103S3/120G 3K
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston SSDNow 300
| <!--Model-->SV300S37A/240G, SV300S37A/120G, SV300S37A/60G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 dramless - lsi sandforce SF2281 or JMicron JMF662 controller with Toshiba MLC or Intel MLC
|-
| <!--Brand-->Kingston A400 120G to 960Gb 2.5inch
| <!--Model-->SA400S37/240G SBFK61K1, SA400S37/480G, SA400S37/960G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 half case sized ssd 4 x FH64B08UCT1-60 64G - t6 security torx into metal case - dram less - poor write speeds -
|-
| <!--Brand-->Kingston
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kioxia formerly Toshiba HG6 2.5in
| <!--Model-->
*9.5mm THNSNJ512GBSU, THNSNJ256GBSU, THNSNJ128GBSU
*7mm THNSNJ512GCSU THNSNJ512GCSY, THNSNJ256GCSU THNSNJ256GCSY, THNSNJ128GCSU THNSNJ128GCSY
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lexar NS100 2.5 inch sata
| <!--Model-->LNS100-1TRB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - Marvell 88NV1120 Artemis, a DRAM cache is not available and pseudo-SLC. Micron 64-layer TLC NAND flash 4 chips @ 512 Gbit TS7512G181 (Rebranded by Lexar) (256G) - 4 nand flash chips Lexar/TST22T181/ B1924 and one controller: Lexar DM918/NOD43 1907 (512G) -
|-
| <!--Brand-->Lexar NQ100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - DM928 controller which operates without a DRAM buffer. Two 128GB Micron NAND flash chips
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lite-On IT Corp 2.5" Sata2
| <!--Model-->LCS-128L9S-HP, LCS-128M6S-HP,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 no dram - from HP machines
|-
| <!--Brand-->LiteOn 2.5in SATA
| <!--Model-->CV3-CE256-11
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Matrix 256Gb 512GB SATA 2.5in SSD
| <!--Model-->MIS512GSDS, MIS256GSDS
| <!--Work MSDos-->UP TO 550MB/S
| <!--Work GPT-->UP TO 500MB/S
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron 1100
| <!--Model-->MTFDDAK2T0TBN-1AR1ZA
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron 1300 2TB 1300 2.5"
| <!--Model-->MTFDDAK2T0TDL-1AW1ZABHA
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010 - old sdd - TLC nand -
|-
| <!--Brand-->Micron RealSSD C400 2.5inch
| <!--Model-->MTFDDAK256MAM-1K12
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Mushkin Reactor
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> MLC flash
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac SA500
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Deneva 2 C
| <!--Model-->D2CSTK251M21-0240,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Deneva 2 R
| <!--Model-->D2RSTK251E19-0100,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Vertex 3 128GB 2.5" SATA III SSD
| <!--Model-->VTX3-25SAT3-240G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Vertex 4 128GB 2.5" SATA III SSD
| <!--Model-->VTX4-25SAT3-128G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Orico Y-20 Y20 2.5 inch sata SHENZHEN ORICO TECHNOLOGIES CO.,LTD
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 flash nand -
|-
| <!--Brand-->Orico S500-Pro s500pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Orico
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Origin Storage Inception TLC830 Pro Series 2.5in SATA III SSD
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 3D tlc flash nand -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OWC Mercury Extreme Pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->Patriot P210 2.5 inch sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> qlc flash nand -
|-
| <!--Brand-->Patriot P220
| <!--Model-->P220S2TB25
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->PC SPECIALIST 2.5" SATA 6Gb/s Solid State Drive SSD
| <!--Model-->G535S P/N NTS3ABYUO0AG
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->Plextor M6V
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->PNY CS900 2.5 in sata SSD
| <!--Model-->SSD7CS900-480-PB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->PNY CS2311, CS3030 and Pro Elite SSDs
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Samsung PM830 SATA 6.0Gbps 2.5" SATA
| <!--Model-->MZ7PC256HAFU
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2011 - Samsung 3-core MCX controller, 2x nm Toggle MLC NAND, 256MB SDRAM cache and firmware - OEM drive -
|-
| <!--Brand-->Samsung SM PM
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->PM871a or PM871b? SM/PM = 2-bit or 3-bit MLC. PM = 3-bit MLC = TLC. 8 = generation = 8xx, 7 = model = 850 EVO (in this case), 1 = usage (e.g. 3 = datacenter). a/b = revision or type of flash, the 850 EVO had multiple revisions including at least three types of flash (32L, 48L, 64L) so a = 32/48L, b = 64L. At lower capacities it might use different flash, for example the 256GB SM951 utilizies 2D/planar while the higher capacities use 3D. OEM drives tend to have different, optimized firmware, so performance will not be the same
|-
| <!--Brand-->Samsung 840 PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012
|-
| <!--Brand-->Samsung 840 EVO
| <!--Model-->MZ-7TE120
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013
|-
| <!--Brand-->Samsung PM851 2.5in sata
| <!--Model-->MZ-7TE5120 P/N MZ7TE512HMHP,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014
|-
| <!--Brand-->Samsung 850 EVO
| <!--Model-->MZ-75E120, MZ-75E500 (P/N MZ7LN500) to MZ-75E4T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 Samsung MGX controller (S4LN062X01) up to 500GB capacities whilst Samsung MEX controller (3-core) beyond - Samsung TLC 3D V‐NAND 48 and later 64 layers and possibility of 256MB, 512MB or 1GB LPDDR2-1066 DRAM chip -
|-
| <!--Brand-->Samsung 850 PRO
| <!--Model-->MZ-7KE1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Samsung PM871a 2.5 inch sata
| <!--Model-->MZ-7LN512A P/N MZ7LN512HMJP,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 used 64-layer QLC V-NAND - Samsung MJX Maru (S4LR030) contoller with no dram as standard -
|-
| <!--Brand-->Samsung PM883 1.92TB
| <!--Model-->MZ-7LH1T90
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - - Samsung MJX Maru (S4LR030) - 1gb LPDDR4-1866 dram -
|-
| <!--Brand-->Samsung 860 EVO
| <!--Model-->MZ-76E1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 used 64-layer QLC V-NAND - Samsung MJX Maru (S4LR030) contoller with no dram as standard -
|-
| <!--Brand-->Samsung 860 EVO PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 used 64-layer QLC V-NAND
|-
| <!--Brand-->Samsung 860 QVO
| <!--Model-->MZ-76Q1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 used 64-layer QLC V-NAND
|-
| <!--Brand-->Samsung 870 QVO 2.5in
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 uses 9x layer 3D QLC V-NAND (or V-NAND 4-bit MLC Samsung), may have no DRAM cache - MKX 8-channel controller
|-
| <!--Brand-->Samsung 870 EVO
| <!--Model-->MZ-7LN56F, MZ-77E1T0 P/N MZ7L31TOHBLB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 beware of bad batch early death - uses 9x layer 3D QLC V-NAND (or V-NAND 4-bit MLC Samsung), may have no DRAM cache - Samsung MKX 8-channel controller
|-
| <!--Brand-->Samsung PM871b
| <!--Model-->MZ7LN256HCHP-000H1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 uses 9x layer 3D QLC V-NAND (or V-NAND 4-bit MLC Samsung), may have no DRAM cache - Samsung MKX 8-channel controller
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Sandisk Extreme Pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012 SandForce SF-2281 dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk X110
| <!--Model-->SD6SB1M-256G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 marvell mlc nand
|-
| <!--Brand-->Sandisk Ultra Plus
| <!--Model-->SDSSDHP-256G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 Marvell SS889175 processor with SanDisk's 19nm NAND and 128MB Samsung DDR2 DRAM chip
|-
| <!--Brand-->Sandisk Z300s
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 - Marvell 88SS9188 Marvell 88SS9187 with SanDisk 64Gbit 19nm MLC -
|-
| <!--Brand-->Sandisk x300 SATA 2.5"
| <!--Model-->SD7SB7S-512G-1001,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014-6 - Marvell 88SS1074 from 88SS91xx series) and SanDisk/Toshiba 1Ynm X3 TLC NAND - SLC cache - Made in Malaysia -
|-
| <!--Brand-->Sandisk x300s
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 SanDisk 1Ynm MLC NAND - self encrypting with on-board 256bit AES hardware encryption -
|-
| <!--Brand-->Sandisk Plus
| <!--Model-->SDSSDA-240G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 pseudo SLC cache dramless
|-
| <!--Brand-->Sandisk Z400s
| <!--Model-->SD8SBAT-128G-1122,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - Silicon Motion SM2246XT DRAM-less - budget end of market -
|-
| <!--Brand-->Sandisk x400 2.5in sata
| <!--Model-->SD8SB8U-256G-1012, SD8SB8U-128G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - 4 NAND packages and marvell controller 88ss1074 on blue pcb - 512MB DDR3L-1600 Micron DRAM -
|-
| <!--Brand-->Sandisk X600
| <!--Model-->SD9SB8W-128G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Sandisk Ultra 3D
| <!--Model-->SDSSDH3-500G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 controller with slc cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate BarraCuda Q1 SSD
| <!--Model-->ZA240CV10001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power A55 2.5in sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 dramless A55 started with the Phison S10 but later the S11 i.e. Phison PS3111-S11-13 controller and 96-layer TLC NAND flash memory with a pseudo-SLC cache -
|-
| <!--Brand-->Silicon Power Ace A55 2.5in
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 - no dram -
|-
| <!--Brand-->sk hynix
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012 sandforce controller -
|-
| <!--Brand-->sk Hynix SH910A
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 - Link_A_Media (LAMD) controller with eight 256Gbit H27QEGDVEBLR NAND 20nm hynix MLC - SK hynix H5PS1G83JFA DRAM -
|-
| <!--Brand-->sk Hynix SC300
| <!--Model-->HFS256G32MND-3210A, HFS256G32MND-3312A,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 - red strip around edges - 8-channel controller SK hynix LM87810AA-A0 with DDR2 buffer chip and four pieces of 16nm hynix MLC NAND -
|-
| <!--Brand-->Sk Hynix Canvas SL300 series 2.5in SSD
*3110A SL301STD
*3210A
*3300A
*3310A
| <!--Model-->HFS500G32TND, HFS256G32TNE, HFS128G32TNF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 TLC - consumer line red in corners - SK hynix LM878100AA (HFS256G32MND-3312A) later SH87820BB and NAND 16nm hynix TLC - 256mb dram
|-
| <!--Brand-->Sk Hynix Canvas SC3 series 2.5in SSD
*N1A0A , ,
*N1A1A
*N1A2A SC308STD,
*N2A0A , , SC311STD
| <!--Model-->HFS512G32TNF-N2A0A,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 - red in corners - no dram and no SLC cache - Hynix ex Link_A_Media Devices (LAMD) SH87820BB 2c but poor mixed workload ability MLC -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Team EX2 GX2 Elite QX
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->TEAMGROUP AX2 2.5 Inch SATA III Solid State Drive SSD
| <!--Model-->T253A3512G0C101, T253A3001T0C101, T253A3002T0C101,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 3D NAND TLC
|-
| <!--Brand-->TeamGroup TF Vulcan Z 2.5in sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dramless smi2259xt 128L tlc nand -
|-
| <!--Brand-->TeamGroup T-Force Vulcan ZQLC
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dram-less smi2259xt qlc 144L nand -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Topesel
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba Q300 7mm SSD
| <!--Model-->HDTS896EZSTA, HDTS848EZSTA, HDTS824EZSTA, HDTS812EZSTA
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 Toshiba TC58NC1000 controller with 3-bit-per-cell A15nm NAND Flash and SLC Write Cache -
|-
| <!--Brand-->Toshiba Q300 Pro 7mm SSD
| <!--Model-->HDTS824
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend SSD370S 250GB 2.5" SATA SSD
| <!--Model-->TS256GSSD370S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend 220S 2.5in
| <!--Model-->TS120GSSD220S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 3D TLC without dram
|-
| <!--Brand-->Transcend SSD230S 2.5in
| <!--Model-->TS256GSSD230S TS512GSSD230S TS1TSSD230S TS2TSSD230S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 3D TLC NAND with DRAM Cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Viathan
| <!--Model-->S001T3V
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Red SA500 NAS
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->WD Blue SA510 250Gb to 4Tb
| <!--Model-->WDS400T3B0A WDS200T3B0A WDS100T3B0A WDS500G3B0A WDS250G3B0A
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 -
|-
| <!--Brand-->Western Digital WD Green SSD 2.5"
| <!--Model-->WDS240G1G0A
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Green 200Gb to 2Tb
| <!--Model-->WDS200T2G0A WDS100T3G0A WDS480G2G0A WDS240G2G0A WDS120G2G0A
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - cheap and slow ssd -
|-
| <!--Brand-->WD SA530
| <!--Model-->SDASB8Y-256G SD9SB8W,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->[https://www.xray-disk.com xraydisk] 2.5 inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> from the manufacturer only - Phsion/SMI(2258XT)/Realtek/Yeestor
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Xum
| <!--Model-->hx256gssdsata3
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Yottamaster
| <!--Model-->Y3000
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> PCie 3.0
|-
| <!--Brand-->Yottamaster
| <!--Model-->Y7000
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> PCIe 4.0
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|}
=== SATA 9mm 2.5inch SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->Corsair F120
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Crucial M225 SSD 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2009 sata2 3gbp/s sandforce controler and MLC nand -
|-
| <!--Brand-->Crucial RealSSD [https://www.storagereview.com/review/crucial-realssd-c300-review-256gb C300]
| <!--Model-->CTFDDAC256MAG,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010 sata3 6gbps - Marvell 88SS9174-BJP2 controller with a 128MB Micron 0AD12-D9LGQ RAM buffer with Micron 9wb11 MLC NAND - fast on 6Gbps SATA3 -
|-
| <!--Brand-->Intel X25--M
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010
|-
| <!--Brand-->OCZ Vertex Series
| <!--Model-->OCZSSD2-1VTX60G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2009 Indilinx Barefoot controller -
|-
| <!--Brand-->OCZ Vertex 2
| <!--Model-->OCZSSD32VTX90G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010 Sandforce SF 1200 controller -
|-
| <!--Brand-->OCZTechnology Agility 3
| <!--Model-->AGT3-25SAT3-240G, AGT3-25SAT3-120G, AGT3-25SAT3-60G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2011 sandforce sf-2281 controller -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== SATA M.2 (M and B key) ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->ADATA M.2 2280 Sata
| <!--Model-->AXNS381E-128GM-B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fanxiang S201 m.2 sata 2280
| <!--Model-->S201
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fikwot FN203 m.2 sata (oldtan, twipps, teexin aka Shenzhen Pingfan "Ordinary" Road Technology Co., Ltd)
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 lifespan not long Maxio MAP + YMTC 128L
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Foresee (Shenzhen Longsys)
| <!--Model-->YSM80CD-128G YSDE128G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - 88nv1120-bt22 T3WU030
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral 2242 120G
| <!--Model-->INSSD120GM242
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> tlc nand
|-
| <!--Brand-->Integral M.2 2280
| <!--Model-->INSSD256GM.26M2280
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> tlc nand
|-
| <!--Brand-->Integral 256GB/512GB/1TB/2TB
| <!--Model-->INSSD1TM280
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 netac rebrand - no dram cache -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intel Pro 545S 2280
| <!--Model-->SSDSCKKF256G8H
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> no dram, TLC nand
|-
| <!--Brand-->Intel
| <!--Model-->SSDSC2KF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intenso M.2 internalSSD SATA III 1 TB
| <!--Model-->Top
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston A400 m.2
| <!--Model-->SA400M8/240G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 entry level ssd 4 x FH64B08UCT1-60 64G -
|-
| <!--Brand-->Kingston
| <!--Model-->RBU-SNS8350DES3128GP
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston V300
| <!--Model-->SV300S3505AG
| <!--Work MSDos-->{{yes}}
| <!--Work GPT-->
| <!--Tested under-->Nightly Build 2014-09-18
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->LITEON SATA 128GB
| <!--Model-->CV3-8D128-11
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->LITEON
| <!--Model-->CV1-8B256-HP
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lite-On
| <!--Model-->L8H-256V2G-HP L8H-128V2G-HP
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 2016 nanya nt5c864m16fp-dh
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->LSI
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 SF37000 controller
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron
| <!--Model-->M550
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 Marvell 88SS9189 SATA controller
|-
| <!--Brand-->Micron M600 enterprise m.2 sata up to 512GB
| <!--Model-->MTFDDAV256MBF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 Marvell 88SS9189 SATA controller, DRAM chip 256MB 533MHz LPDDR2, NAND for the 256GB drive MT29F1T08CQCCBG2-10:C 16nm MLC NAND each 128GB package
|-
| <!--Brand-->MICRON 1100 M.2 SATA 6Gb/s 2280
| <!--Model-->MTFDDAV256TBN HP P/N 903109-001,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Orico Y20M-2242
| <!--Model-->Y20M
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Orico
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Orico
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->PNY
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung PM841 M.2 sata3 2280
| <!--Model-->MZ-NTD2560/0L9 MZNTD256HAGL-000L9
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 TLC
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung CM871 Rev 0
| <!--Model-->MZNLF128HCHP-000H1 MZ-NLF1280
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung PM871a m.2 Sata
| <!--Model-->MZNLN256HMHQ, NLN512A P/N MZNLN512HMJP-000H1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 TLC
|-
| <!--Brand-->SAMSUNG PM871b
| <!--Model-->MZNLN128HAHQ-000H1, MZNLN256HAJQ MZ-NLN256F MZ-NLN256C,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung PM881
| <!--Model-->MZ-NLH1280 MZNLH128HBHQ-000H1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SANDISK X110 DELL 6T4HK M.2 2260
| <!--Model-->SD6SP1M
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013
|-
| <!--Brand-->SanDisk X300 M.2 sata 2280 80mm SSD Solid State Drive
| <!--Model-->SD7SN6S-256G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Sandisk X400 SSD M.2 sata 2280
| <!--Model-->SD8SN8U-128G-1006, SD8SN8U-256G-1006, SD8SN8U-512-1006,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 SSD controller Marvell 88SS1074 four channel supports variety of NAND and up to 512MB DDR3L-1600 Micron DRAM cache -
|-
| <!--Brand-->SanDisk X600 M.2 SSD Solid State Drive
| <!--Model-->SD9SN8W-128G-1006 SD9TN8W-256G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SK Hynix SC300
| <!--Model-->SC308M280S HFS128G39TND
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 SH87820BB controller - No dram buffer - multi-level cell (MLC) NAND
|-
| <!--Brand-->SK HYNIX
| <!--Model-->SC311 HFS256G39TNF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SK HYNIX
| <!--Model-->SC401 HFS256G39TNH
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power A55 M.2 sata 2280
| <!--Model-->A55
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 - no dram -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TEAMGROUP Team MS30 SSD M.2 Sata 2280
| <!--Model-->TM8PS7001T0C101
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Toshiba RC100 (retail version of BG3)
| <!--Model-->KBG30ZMV256G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Toshiba HG6 m.2
| <!--Model-->THNSNJ512GDNU THNSNJ512G8NY, THNSNJ256GDNU THNSNJ256G8NY, THNSNJ128GDNU THNSNJ128G8NY, THNSNJ256GVNU THNSNJ128GVNU,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->TOSHIBA SSD M.2 2280 256GB
| <!--Model-->KSG50ZMV256G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->Kioxia (Toshiba) BG6
| <!--Model-->KSG60ZMG256G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend
| <!--Model-->400
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend M.2 SSD 2242 TS32GMTS400S TS64GMTS400S TS128GMTS400S
| <!--Model-->400S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> DDR3 dram cache and mlc nand
|-
| <!--Brand-->Transcend
| <!--Model-->M.2 SSD 600 (2260), M.2 SSD 800S (2280)
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> mlc nand
|-
| <!--Brand-->Transcend M.2 SSD 2242 TS120GMTS420S TS240GMTS420S TS480GMTS420S
| <!--Model-->420S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> can run hot slc cache
|-
| <!--Brand-->Transcend M.2 SSD 2242 TS256GMTS430S TS512GMTS430S
| <!--Model-->430S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> dram cache - 3d tlc nand
|-
| <!--Brand-->Transcend M.2 SSD 2280 TS120GMTS820S TS240GMTS820S TS960GMTS820S
| <!--Model-->820S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 3D nand
|-
| <!--Brand-->Transcend M.2 SSD 2280 TS256GMTS830S TS512GMTS830S TS1TMTS830S TS4TMTS830S
| <!--Model-->830S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> dram cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD Green SATA SSD m.2 2280 120GB to 480Gb
| <!--Model-->WDS480G2G0B WDS240G2G0B WDS120G2G0B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 made in malaysia
|-
| <!--Brand-->Western Digital WD Green SATA SSD m.2 2280 240Gb to
| <!--Model-->WDS240G3G0B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 made in
|-
| <!--Brand-->WD Blue SA510 M.2 SATA 250Gb to 2Tb
| <!--Model-->WDS200T3B0B WDS100T3B0B WDS500G3B0B WDS250G3B0B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Red 500GB 1TB 2TB
| <!--Model-->SA500
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->union memory AM610 m.2 sata
| <!--Model-->SSS0R27339,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== mSATA SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fangxiang S301
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingchuxing
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral
| <!--Model-->INSSD256GMSA MO-300
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> tlc 3d nand
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron enterprise
| <!--Model-->M600
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Orico ZH-10 ZH10
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Samsung 840 EVO 1.8inch msata
| <!--Model-->MZ-M
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Samsung 850 EVO 1.8in
| <!--Model-->MZ-M5E120BW, MZ-M5E250BW, MZ-M5E500BW,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung PM851 1.8" msata
| <!--Model-->MZ-MTE256D P/N MZ-MTMTE256HMHP, MZ-MTE1T00,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung 860 EVO 1.8inch msata
| <!--Model-->MZ-MM6E250BW, MZ-M6E500BW, MZ-M6E1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Transcend TS64GMSA370S
| <!--Model-->MSA370S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> MLC nand
|-
| <!--Brand-->Transcend TS64GMSA230S
| <!--Model-->230S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 3d tlc nand
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== SATA 2.5inch Laptop Hard Disks ===
====7mm====
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->CP628230-01 500Gb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->CP552605-01 250Gb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->CP693440-01 500Gb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->HGST Travelstar
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->HGST Hitachi Z5K320 Z5K500-500 Z5K100 series
* 2013 HTS545050A7E380 HTS
* 2015 HTS545050A7E680 HTS
| <!--Model-->HTS 320GB 500Gb 1Tb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 5400rpm
|-
| <!--Brand-->HGST Hitachi Z7K320 Z7K500 series
| <!--Model-->HTS725050A7E630 320Gb HTS725050A7E635 500Gb 7200rpm
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> avoid if it does not have the DCM code
|-
| <!--Brand-->HGST 1T 5400rpm
| <!--Model-->HTS541010B7E610
| <!--Work-->
| <!--Tested under-->2017 128m cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Seagate Momentus Thin
| <!--Model-->ST500LT012 ST320LT012. ST250LT012 500Gb 320gb 250gb 2014 5.4K rpm
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012
|-
| <!--Brand-->Seagate Thin SSHD 5400RPM Sata 2.5"
| <!--Model-->ST500LM000 500GB, ST500LM001, ST500LM020
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 up to 64M cache and with 8GB NAND Flash
|-
| <!--Brand-->Seagate MomentusThin-B Video 2.5 HDD
* 2014
* 2015
* 2016
* 2017
| <!--Model-->ST500VT000 500GB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014
|-
| <!--Brand-->SEAGATE Baracuda 2.5 5400
| <!--Model-->ST2000LM015 (2Gb), ST1000LM049 (1Tb), ST500LM030 (500Gb)
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 5400rpm
|-
| <!--Brand-->Seagate Barracuda Pro
| <!--Model-->ST1000LM048 ST1000LM035
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> up to 128MB cache
|-
| <!--Brand-->SEAGATE FireCuda Compute 2.5
| <!--Model-->ST500LX025 ST1000LX015 ST2000LX001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 8GB NAND Commercial Multilevel Cell (cMLC), 128MB buffer and 5400-RPM spindle speed up to 140 MB/s
|-
| <!--Brand-->Toshiba 2.5in
| <!--Model-->MQ04ABF100 1TB 5400 RPM 2018
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TOSHIBA MQ01ACF
| <!--Model-->MQ01ACF050 500GB 7200rpm 2020
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->western digital wd blue 500G 8meg cache 5400rpm
* 2014 Rev T0
* 2015 Rev T1
| <!--Model-->wd5000lpvx
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012-2015 sequential 2MB block transfers 110 MB/s reading and writing -
|-
| <!--Brand-->Western Digital 2.5" WD Blue Slim
| <!--Model-->WD10SPCX 1TB Nov 2016
| <!--Work MSDos-->{{Yes|hdd under partition table msdos/pc, boots on bios machines, will not on uefi machine}}
| <!--Work GPT-->{{Unk|untested hdd under gpt partition protocol scheme, not booting on uefi}}
| <!--Tested under-->AROS One 1.8 USB
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD5000LUCX 500Gb 5400rpm 16mb cache Rev Y0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 2017 Malaysia
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
====9.5mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->MHW2040BH
| <!--Work-->
| <!--Tested under--> 40gig
|-
| <!--Brand-->Fujitsu
| <!--Model-->MHY2080BH
| <!--Work-->
| <!--Tested under--> 80gig
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Fujitsu
| MHW2120B
| {{yes}}
| Icaros Desktop 1.4
|-
| <!--Brand-->Hitachi Global Storage Technologies HGST bought by WD mid-2012 5K1000-1000
| <!--Model-->HTS721010A9E630
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Hitachi Global Storage Technologies HGST bought by WD mid-2012 5K1000-1000
| <!--Model-->HTS541010A9E662 type TS5SAF100
| <!--Work-->
| <!--Tested under--> 5400rpm
|-
| <!--Brand-->Hitachi Travelstar 5K500.B-320
| <!--Model-->HTS545025B9SA02 HTS545032B9A300 HTS545040B9A300 HTS545050B9A300 250Gb 320Gb 400Gb 500Gb 5400rpm
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Hitachi Global Storage Technologies HGST 1TB 7200rpm
| <!--Model-->HTS721010A9E630
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung bought by Seagate late 2011
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung Spinpoint with Seagate HD REV A (Jan 2014)
| <!--Model-->ST1000LM024
| <!--Work-->
| <!--Tested under--> , Advanced Format (AF)
|-
| <!--Brand-->Samsung Spinpoint with Seagate 9.5mm
* 2013 Rev A HN-M500MBB/I
* 2014 Rev B HN-M500MBB/SP4
* 2015 Rev B HN-M500MBB/P4C
| <!--Model-->ST500LM012 (500M)
| <!--Work-->
| <!--Tested under--> , Advanced Format (AF)
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate Momentus 5400.3
| <!--Model-->ST9160821AS
| <!--Work-->
| <!--Tested under--> 160gig
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate SSHD 1t
| <!--Model-->ST1000LM014, ST1000LM028, ST1000LM015
| <!--Work-->
| <!--Tested under--> 8g nand flash
|-
| <!--Brand-->Seagate SSHD 1T
| <!--Model-->ST1000LX001
| <!--Work-->
| <!--Tested under--> 32G nand flash
|-
| <!--Brand-->Toshiba
| <!--Model-->MK2555GSX HDD2H24
| <!--Work-->
| <!--Tested under--> 250g 5400rpm
|-
| <!--Brand-->Toshiba
| <!--Model-->MK5065GSX - 500GB 5400RPM SATA 3Gb/s 8MB Cache 2.5-Inch
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba
| <!--Model-->MKxx59GSXP, eg Toshiba MK6459GSXP 640GB 2011
| <!--Work-->{{yes}}
| <!--Tested under-->Icaros 2.2 with uses Advanced Format (AF) in 4,096 bytes per sector. Compatibility with legacy, 512 bytes through AF emulation techniques, called 512e
|-
| <!--Brand-->Toshiba (2013 to 2016)
| <!--Model-->MQ01ABD100
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba (2015 to 2020)
*2013
*2014
*2015 AA50/AX0D5A
*2016 AA60/AX0E1A
*
*2017 AGM AA01/AX002V
*2018 AGS AA70/AX0G1A
*2020 AA71/AX0G1A
| <!--Model-->MQ01ABD050 500meg
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba
| <!--Model-->MQ04ABF100 1TB 5400 RPM 2013
| <!--Work-->{{Yes}}
| <!--Tested under-->
|-
| <!--Brand-->TOSHIBA
| <!--Model-->MQ04ABD200 2TB 5400 RPM 128MB Cache SATA 6.0Gb/s
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD7500BPVX 2013
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->WESTERN DIGITAL 1TB 2.5" SATA DRIVE 5400 rpm, 8MB cache
| <!--Model-->WD10JPVX-80JC3T0 (OCT 2014)
| <!--Work-->
| <!--Tested under--> , uses Advanced Format (AF)
|-
| <!--Brand-->WDC Western Digital Blue 1TB SATA 2.5" Hard Drive 5400 rpm, 8MB cache
| <!--Model-->WD10JPVX-08JC3T6 (Jun 2017)
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD10JPCX 1Tb
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital
* 2019
| <!--Model-->WD10JUCT 1TB (1000GB) 2019
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->WD Western Digital Scorpio Black
* 2010
* 2014
| <!--Model-->WD5000BEKT, WD5000BPKX-22HPJT0, WD5000BPKT,
| <!--Work-->
| <!--Tested under--> 16m cache, 7200rpm thailand then malaysia
|-
| <!--Brand-->WD Western Digital Black
* 2016
| <!--Model-->WD2500LPLX, WD3200LPLX, WD5000LPLX SMR: WD5000LPSX, WD10SPSX
| <!--Work-->
| <!--Tested under--> 32m cache , 7200rpm SATA-III malaysia
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== SATA 2.5in NON-Laptop Hard Disks ===
====11mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu 160GB 250GB 300GB
| <!--Model-->MHX2160BT, MHX2250BT, MHX2300BT
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->TP00640GB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
====12.5mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
====15mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate 1TB IBM System X 15mm 2.5" SATA
| <!--Model-->ST91000640NS 81Y9731
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== SATA Laptop Optical Drives ===
Tested in usb port not hub with
*
*13fd:0840 Initio Corporation INIC-1618L SATA
*
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->HL-DT-ST DVDRAM
| <!--Model-->GSA T50L
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT10N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2008 5v 12.7mm
|-
| <!--Brand-->HL Data Storage BD-Rom DVD Rewriter
| <!--Model-->CT10N AFCK101 LGE-DMCT10A(B)
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 5v 12.7mm fails early
|-
| <!--Brand-->Hitachi LG
| <!--Model-->GT20L
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009/2010 5v 1.3A 12.7mm
|-
| <!--Brand-->HL Hitachi / LG
| <!--Model-->GT30N GT32N GT30L
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 12.7mm
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT40N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2011 5v 12.7mm
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT50N GT51N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 5v 12.7mm
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT90N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2013 5v 12.7mm
|-
| <!--Brand-->HL
| <!--Model-->GU70N (HP/Dell),
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 5v 1.8A 9.5mm
|-
| <!--Brand-->HL
| <!--Model-->GUD0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 5v 1.8A 9.5mm
|-
| <!--Brand-->
| <!--Model-->GTA0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->HLDS Super Multi DVD Writer
*Rev 101
*rev 102 2015 factory GH
| <!--Model-->GUC0N (ALOK113) MSIP-REM-HLD-GUA0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 9.5mm - flaky and dies quickly -
|-
| <!--Brand-->HL Data
| <!--Model-->GTC0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2016 12.7mm 5V 1.8a -
|-
| <!--Brand-->HLDS
| <!--Model-->BU20N (S05JH) KCC-REM-HLD-BU10N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2016 9.5mm
|-
| <!--Brand-->HLDS Super Multi DVD Writer
| <!--Model-->GUD1N (S05JH) (S05NT) KCC-REM-HLD-GU90N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2017-2018 9.5mm 5v 1.8a - slow access -
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Panasonic
| <!--Model-->Uj870a Uj880 UJ890
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8A0
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Panasonic MATSHITA 12.7mm SATA DVD
| <!--Model-->UJ8B0 (Asus K53S),
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2011 12.7mm 5v 1.5a
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8B1
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2011 5v 1.5a
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8C0, UJ8C1, UJ8C2 9.5mm,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 2013 5v 1.6a
|-
| <!--Brand-->Panasonic Precision Devices Co Ltd
| <!--Model-->UJ8D0, UJ8D1 KCC-REM-PPD-UJ8D1 HP 657534-TC2,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2013 ok lifeline,
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8E2Q
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 9.5mm
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8FB
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 5v 1.5a 9.5mm
|-
| <!--Brand-->Panasonic Blu-Ray DVD Writer Slimline
| <!--Model-->UJ260
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->PLSD
| <!--Model-->DC-8A2SH,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 12.7mm
|-
| <!--Brand-->PLSD
| <!--Model-->DU-8A3S
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->PLSD
| <!--Model-->DU-8A4SH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Philips Lite-On
| <!--Model-->DS-8A5LH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.5mm
|-
| <!--Brand-->Philips Lite-On DVD-ROM
| <!--Model-->DS-8DBSH1148
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 12.5mm
|-
| <!--Brand-->Philips Lite-On
| <!--Model-->DU-8A6SH (HP)
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 5v 1.5A 9.5mm
|-
| <!--Brand-->Philips and LiteOn
| <!--Model-->DS-8A8SH118C KCC-REM-PLD-DS-8A8LH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 5v 1.5a 12.7mm
|-
| <!--Brand-->PLSD
| <!--Model-->DS-8A9SH DS8A9SH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.7mm
|-
| <!--Brand-->PLSD
| <!--Model-->DS-8ABSH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.7mm
|-
| <!--Brand-->PLSD DVD/CD Rewritable Drive
| <!--Model-->DU-8A5LH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2016 9.5mm 5v 1.5a -
|-
| <!--Brand-->PLSD
| <!--Model-->DU-8ACSH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->PLSD Philips
| <!--Model-->da-8aesh11b, DA-8AESH-24B
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2019 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->Pioneer
| <!--Model-->DVR-TD09TBG
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->Sony
| <!--Model-->AD-7580s, AD-7581s SOK-AD-7580S(B), AD-7583s,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2008-2010 5V 1.5A
|-
| <!--Brand-->Sony Optiarc SATA DVD
| <!--Model-->AD-7561S, AD-7560S
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 12.7 MM
|-
| <!--Brand-->Sony Optiarc
| <!--Model-->AD-7585H
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 12.7mm cleaning the laser lens inside the drive with a liquid lens cleaner. Also check the lens carrier slides freely from one extreme to the other inside the drive without sticking
|-
| <!--Brand-->Sony
| <!--Model-->AD7590s, AD-7591s,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Sony
| <!--Model-->AD-7700s, AD-7710h, AD-7701H, AD-7703S
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Sony Optiarc
| <!--Model-->AD-7760H
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 5v 1.5A 12.7mm
|-
| <!--Brand-->Sony
| <!--Model-->AD-7711H AD-7740H
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.5mm 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->Toshiba Samsung
| <!--Model-->SN-S208B Ver BB Rev 00
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 12.7mm
|-
| <!--Brand-->Toshiba TSSTCorp Samsung
| <!--Model-->SN-S083C Ver C Rev 03 /BEBE
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 5v 1.5a 12.7 mm
|-
| <!--Brand-->Toshiba Samsung Storage Technology Corp
| <!--Model-->TS-L633
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 5v 1.3A 12.7mm
|-
| <!--Brand-->Toshiba Samsung
| <!--Model-->SN-208FB/BEBE
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 12.7mm 5v 1.3a - tracking issues, feels cheap and flaky in use -
|-
| <!--Brand-->TSST Toshiba Samsung Corp.
| <!--Model-->SU-208FB/TFJF KCC-REM-TSS-SU208
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2013-2014 9.5mm 5v 1.3a -
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
*LG BU40N
*LG WP50NB40
*LG BP50NB40
*ASUS BW-16D1HT
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
*LG BU50N
*LG WH16NS40
*LG WH14NS40
*ASUS BW-16D1X-U
*ASUS SBW-06D5H-U
*Verbatim 43889
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|}
=== [https://www.backblaze.com/cloud-storage/resources/hard-drive-test-data SATA Desktop 3.5inch Hard Disks] ===
Datasheets with the SMR (overlapped packing Shingled Magnetic Recording) and CMR (faster Conventional Magnetic Recording) parts
<pre>
WD: https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/western-digital/product/internal-drives/wd-blue-hdd/product-brief-western-digital-wd-blue-pc-hdd.pdf
Seagate: https://www.seagate.com/content/dam/seagate/migrated-assets/www-content/datasheets/pdfs/3-5-barracudaDS1900-14-2007US-en_US.pdf
Toshiba: https://storage.toshiba.com/docs/support-docs/P300-SalesSheet_English_Web_r2.pdf
</pre>
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->HGST Travelstar
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Seagate Barracuda 7200.9
| ST3160812AS, ST3160212AS
| {{yes}}
| Icaros Desktop 1.5.2 - Capacity: 160 GB - Speed: 7200RPM - Cache: 8 MB - Interface: SATA2
|-
| <!--Brand-->Seagate Barracuda LP Green 5400rpm
| <!--Model-->ST1000DL002 1TB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate SkyHawk Surveillance HDD ST4000VX000 Series
| <!--Model-->ST4000VX013
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate Baracuda Compute
| <!--Model-->ST500DM009 2F110A-500 / 02PKVY / 2PKVY (500m),
| <!--Work-->
| <!--Tested under--> - SATA III (6Gb/s) - Format 3.5" - 32MB Cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate CMR
| <!--Model-->ST1000DM010 ST500DM009
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate 2TB SMR
| <!--Model-->ST2000DM008
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate SMR
| <!--Model-->ST8000DM004 ST6000DM003 ST4000DM004 ST3000DM007 ST2000DM005
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba 5400rpm
| <!--Model-->HDWD220
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba 7200rpm
| <!--Model-->HDWD320
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba P300 CMR
| <!--Model-->HDWD130XZSTA HDWD130UZSVA, HDWD120XZSTA HDWD120UZSVA, HDWD110XZSTA HDWD110UZSVA
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital 2010
| <!--Model-->WD20EARS Green 2TB 5400rpm 64mb cache
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD20EFRX WD40EFRX 5400rpm
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital
| <!--Model-->WD4002FFWD
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital CMR
| <!--Model-->WD80EAAZ WD80EAZZ
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital CMR
| <!--Model-->WD20EARZ
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital CMR
| <!--Model-->WD40EZAZ, WD60EZAZ
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital SMR
| <!--Model-->WD20EARZ, WD20EZAZ - 2TB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital SMR
| <!--Model-->WD40EZAX - 4TB, WD60EZAX - 6TB, WD80EZAX - 8TB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== SATA Desktop Optical Drives ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
|}
==PATA==
=== IDE Desktop Hard Disks ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Fujitsu
| M1624TAU
| {{yes}}
| Icaros Desktop 1.5.2
|-
| IBM
| DHEA-38451
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Samsung
| SP40A2H
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Seagate
| ST3160215ACE
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Seagate
| ST32122A
| {{maybe}}
| Icaros Desktop 1.5.2
|-
| Western Digital
| WD102AA
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Western Digital
| WD200
| {{maybe}}
| Icaros Desktop 1.5.2
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== IDE Laptop Hard Disks ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Fujitsu
| MHV2040AH
| {{yes}}
| Icaros Desktop 1.4
|-
| <!--Brand-->HGST Hitachi Travelstar
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Toshiba
| MK2011GAP
| {{yes}}
| Icaros Desktop 1.5.2
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== IDE Desktop Optical Drives ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested under-->
|-
| Compaq
| CR-594-BCQ
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Compaq
| CRD-8322B(CP1)
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Compaq
| CRD-8484B(AM2A)
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Compaq
| LTN-485
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Creative
| CD220E
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Hitachi-LG
| GDA-4120B
| {{yes}}
| {{no}}
| Icaros Desktop 1.5.2
|-
| LG
| CRD-8400B
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Lite-On
| LTN486S
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Mitsumi
| CRMC-FX4830T
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| NEC
| CDR-1700B
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| NEC
| DV-5800A
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| NEC
| ND-2100A
| {{yes}}
| {{no}}
| Icaros Desktop 1.5.2
|-
| NEC
| NR-7900A
| {{yes}}
| {{no}}
| Icaros Desktop 1.5.2
|-
| Philips
| DVD8631
| {{no}}
| {{no}}
| Icaros Desktop 2.2
|-
| Samsung
| SC-148
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Samsung
| SCR-2030
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Samsung
| SM-348B
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Sony
| CDU601
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Sony
| CDU611-25
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Toshiba
| SD-M1202
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested under-->
|}
=== IDE Laptop Optical Drives ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->H-L Hitachi LG
| <!--Model-->GCC-4244N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2006
|-
| Hitachi-LG
| GCCT10N
| {{yes}}
| {{Maybe|FryingPan WRITE seems to have no problem with data sections (track 1) - combos with audio sections (track 2) white screens aros eventually}}
| AspireOS Xenon with 25th Jan 2014 self update kernel
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| Philips
| SDR089
| {{yes}}
| {{unk}}
| Icaros Desktop 1.4
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| TSSTcorp
| TS-L462C TS-L462D
| {{yes}}
| {{unk}}
| 2005 Icaros Desktop 2.2
|-
| TSSTcorp
| TS-L632H
| {{yes}}
| {{unk}}
| Icaros Desktop 1.4
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| Sony
| DW-Q58A
| {{yes}}
| {{unk}}
| Icaros Desktop 2.2
|-
| Sony Optiarc
| AD-7540A
| {{yes}}
| {{unk}}
| Icaros Desktop 2.2
|-
| <!--Brand-->Sony
| <!--Model-->Optiarc DVD RW AD-7560A IDE
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Sony
| <!--Model-->AD-7590A
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2008 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|}
== SCSI ==
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
NVMe accepts up to 64,000 queues with up to 64,000 commands each.
327supgow1fk5jw9ghngbr7nwcfchub
4641666
4641662
2026-06-29T11:19:36Z
Jeff1138
301139
4641666
wikitext
text/x-wiki
{{ArosNav}}
==Introduction==
AROS supports hard disks and optical drives attached to several interfaces:
* [[#NVMe M.2 SSD (M key)]] on the pci-e bus
* [[#SATA]] aka Serial ATA or AHCI (IDE compatibility mode used in most cases)
* [[#PATA]] IDE (also known as ATA or Parallel ATA)
* USB
* [[#SCSI]]
==PCI-e==
===NVMe M.2 SSD (M key)===
*Controller and firmware
*DRAM better having if heavy workloads but not necessary for gaming
*Cache like SLC HMB techniques
*NAND (Main storage area with MLC, TLC or QLC versions of varying life expectancy)
SSDs, USB flash drive, SD and Micro SD Cards have a limited amount of write cycles, therefore guaranteed to fail randomly and suddenly at any time. All SSDs are prone to corrupt firmware due to poor quality NAND where both the data and the firmware resides. The drive tends to go read only when too many errors occur before complete failure. That is up to 10 years for things like memory cards and USB sticks.
In general, unless there is a firmware design issue, cheap materials used, stress like bending or overheating causing cold solder joints, an SSD can last a long time if minimal writing activity takes place but eventually if flash isn't written to, it degrades. Catch 22.
Dram and cache are not the same thing. Dram stores the ssds indexes and metadata for faster data retrieval and wear leveling. The cache keeps part of the nand memory as SLC storage which can be written to faster. Basically all ssds will have a dynamic SLC cache where it will decrease as the drive fills up. Cache controller designs that are DRAM less use the internal SRAM cache in the controller to cache the NAND mapping table. It just requires a different mapping table design since SRAM caches are much smaller than DRAM. Ultimately the mapping table is still stored in NAND.
General rule of thumb: the cheaper an SSD, the higher the likelihood it uses lower quality flash chips so sudden failing NAND, problematic controller chips (e.g. SandForce), outsourced firmware. Generic brand like old SP, Corsair or Crucial may be recoverable whilst major brands Samsung, Intel and Western Digital are impossible due to firmware encryption and customizations. Recommend sticking with older Silicon Motion or Phison controllers if possible.
A ssd isn't good because it has dram or bad because it doesn't. Other things should be taken into account like sustained writes so check the TPU write intensive usage
See [https://www.techpowerup.com/ssd-specs/ here] for more information
{| class="wikitable" width="100%"
! width="15%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="30%" |Tested Distribution
|-
| <!--Brand-->Unnamed
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 to - SM2259XT2 SM2263XT MAS0902 MAP1202 YS9082HP RM1135 RTS5765 PS3111
|-
| <!--Brand-->Unnamed OEMs
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 to date - Realtek RTS5765/66 controller + Micron 96L (B27A)
|-
| <!--Brand-->Acer Predator GM7
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Acer drives built by Biwin, that also supplies HP, Maxio MAP1602A no DRAM so HMB, YMTC 128L TLC,
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->ADATA M.2 NVME IM2P33F8, IM2S3168 SSD
| <!--Model-->IM2P33F8-512GD
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - industrial 12L 3D TLC NAND flash Supports LDPC ECC, RAID Engine, and SLC Cache End-to-End (E2E) Data Path Protection with Host Memory Buffer (HMB) i.e. DRAMless
|-
| <!--Brand-->ADATA XPG SX8200 Pro M.2 nvme
| <!--Model-->ASX8200PNP1TTC
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 NVM Express 1.3 SN2262G later SN2262EN chipset -
|-
| <!--Brand-->ADATA 256GB GEN4 x4 NVMe PCIe M2 2230 SSD
| <!--Model-->SM2P41C3-256GC2 DP/N 0KM1Y6
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 consumer
|-
| <!--Brand-->ADATA XPG GAMMIX S50 Lite
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 controller Silicon Motion SM2267XT dramless
|-
| <!--Brand-->ADATA XPG ATOM 50
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 controller Innogrit RainierQX IG5220
|-
| <!--Brand-->Adata Legend 710
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->ADATA Legend 900
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->BiWin PCIe Gen3
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Innogrit IG5216 controller, no DRAM so HMB which appears to be the standard -
|-
| <!--Brand-->BiWin NV7200 PCIe 4.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 SM2263XT
|-
| <!--Brand-->Biwin NV7400
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 multiple variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Corsair Force LE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Corsair Force Series MP500 MP510 M.2 NVMe PCIe Gen 3 x4 SSD
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 PS5012-E12-27 from Phison, 64-layer TLC Toshiba BiCS flash, may have dram cache - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Corsair Force MP400
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 Phison E16 on DRAM DDR4 with Micron 96L QLC - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Corsair Force MP
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Corsair Force MP
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Corsair MP600 Elite
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E16 and Bics DDR4 DRAM buffer and TLC-based with SLC-mode cache - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Corsair MP600 Pro XT, PRO LPX, PRO NH PCIe4
| <!--Model-->CSSD-F1000GBMP600ECS Elite,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 DRAMless SSD controller Phison PS5026-E26, BiCS6 162L QLC NAND
|-
| <!--Brand-->Corsair MP600 Core XT
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison and Bics QLC-based with SLC-mode cache -
|-
| <!--Brand-->Corsair MP700 Pro PCIe 5.0
| <!--Model-->CSSD-F1000GBMP700PNH
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Crucial P1
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 QLC NAND but a controller with a DRAM cache -
|-
| <!--Brand-->Crucial P2 M.2 2280 Gen3 x4 NVM-express
| <!--Model-->CT1000P2SSD8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 dram-less Phison PS5013-E13-31 on 96-layer QLC NAND -
|-
| <!--Brand-->Crucial P3 Plus M.2 2280
| <!--Model-->CT1000P3PSSD8 CT2000P3PSSD801
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E21T with Host Memory Buffer HMB tech to use a small bit of system RAM as DRAM cache and Micron 176-layer QLC NAND -
|-
| <!--Brand-->Crucial P3 M.2 nvme SSD
| <!--Model-->CT2000P3SSD8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E21T with no DRAM so HMB and 176-Layer Micron QLC (N48R) -
|-
| <!--Brand-->Crucial P5 m.2 nvme PCIe 4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 runs hot - Crucial NVMe with DRAM LPDDR4 and Micron 96L TLC
|-
| <!--Brand-->Crucial P5 Plus
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 some have DRAM cache
|-
| <!--Brand-->Crucial T500 Gen4.0 nvme 2.0
| <!--Model-->CT1000T500SSD8, CT2000T500SSD8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison PS5025-E25 with micron B58R 232-layer 3D TLC NAND and Micron LPDDR4 DRAM cache - beware win update kb5063878 kb5062660 preview -
|-
| <!--Brand-->Crucial T700 Gen5 SSD
| <!--Model-->CT1000T700SSD3, CT2000T700SSD3
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 SSD controller Phison PS5026-E26, Micron 232-layer NAND with no dram as standard -
|-
| <!--Brand-->Crucial P310 M.2 2280 NVMe PCIe Gen4 SSD
| <!--Model-->CT2000P310SSD801 (2Tb),
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 DRAM-less Phison E27T Micron 232-layer NAND -
|-
| <!--Brand-->Crucial T705
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 dramless Phison SSD controller
|-
| <!--Brand-->Crucial T710
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 SMI SM2508 SSD controller dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Ediloca EN605 PCIe Gen3 x4 interface, NVMe 1.3 support
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Ediloca EN660 PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Ediloca EN760 PCIe Gen4 x4 M.2 NVMe 1.4 interface
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 gets hot
|-
| <!--Brand-->Ediloca EN870
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 no dram Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->Ediloca EN855
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dram Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->Ediloca
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Ediloca
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fanxiang S500 pro PCIe Gen3
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 MaxioTech MAP1202A-F1C with YMTC 128L and pseudo-SLC cache
|-
| <!--Brand-->Fanxiang S660
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fanxiang S880/R
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->Fanxiang S770
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Fikwot
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->Fikwot founded in 2018
|-
| <!--Brand-->Fikwot FX550 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->Fikwot FN501 Pro m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->FIKWOT FN950 FN955
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 MAP1602 (at 1600 MT/s) flash YMTC TLC no dram
|-
| <!--Brand-->Fikwot FX991 m.2 nvme
| <!--Model-->FW-FX991-2TB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Fikwot FN960
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->Fikwot FN970 m.2 nvme pcie
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Maxio MAP1602 + YMTC 232L
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Geil ZEN ITH m.2 nvme
| <!--Model-->S3-240GB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Gigabyte Aorus Gen4 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 Phison E16 and Toshiba 96-layer TLC (triple-level cell) BiCS4 NAND flash - DDR4 DRAM buffer and TLC-based with SLC-mode cache -
|-
| <!--Brand-->Gigabyte Aorus 10000 PCIe 5.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E26 on DRAM LPDDR4 with 232-Layer Micron TLC
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->HP EX950 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->HP FX900 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dram less
|-
| <!--Brand-->HP
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Integral M2 Series NVME M.2 2280 PCIe Gen 3x4
| <!--Model-->INSSD500GM280NM2
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Inland Professional TLC E12S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison E18
|-
| <!--Brand-->Inland Gaming performance Plus m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E16 controller and TLC flash
|-
| <!--Brand-->Inland TD510
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E26 on DRAM DDR4 with 232-Layer Micron TLC
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intel
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->intel SSD Pro 7600p Series M.2 80mm 2280 PCIe 3.0 x4, 3D TLC
| <!--Model-->SSDPEKKF512GB, SSDPEKKF256G8L,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Intel 660p m.2 nvme
| <!--Model-->ssdpeknw010tb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 SMI SM2263 controller with 1GB DRAM cache and 1TB of Intel QLC NAND similar to crucial P1
|-
| <!--Brand-->[https://www.solidigm.com/support-page/warranty-rma/ka-00032.html Solidigm formerly Intel] 670p
| <!--Model-->SSDPEKNU010TZ, SSDPEKNU512GZH,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 256 MB DDR3L cache and 12-140 GB SLC-Cache QLC NAND
|-
| <!--Brand-->Intel P4511 m.2 nvme PCIe3.1 x4 22110 110mm
| <!--Model-->SSDPELKX020T8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 very long
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston A1000 NVME PCIE M2 2280 SSD
| <!--Model-->SA1000M8/480G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Kingston A2000 NVME PCIE M2 2280 SSD
| <!--Model-->SA2000M8/250G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->Kingston KC3000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison’s [https://www.kingston.com/en/support/technical/ksm-firmware-update Firmware Rev. EIFK31.7 (07-08-2024) update for] PS5018-E18 PCIe 4.0 x4 NVMe controller and Micron’s 176L TLC NAND flash -
|-
| <!--Brand-->Kingston NV1 m.2 nvme pcie
| <!--Model-->SNV1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 entry-level consumer DRAMless Phison E13T or Silicon Motion 4-channel SM2263XT - one brand TLC up to 1Tb and QLC after -
|-
| <!--Brand-->Kingston NV2
| <!--Model-->SNV2
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 entry-level, first SMI SM2267XT or Phison E19T and later SMI SM2269XT or Phison E21T with various flash memory
|-
| <!--Brand-->Kingston FURY Renegade m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 [https://www.kingston.com/en/support/technical/ksm-firmware-update Firmware Rev. EIFK31.7 (07-08-2024) update for] Phison E18 controller, Micron 176L nand and ddr4 dram -
|-
| <!--Brand-->Kingston NV3
| <!--Model-->SNV3S/500G, SNV3S/1000G, SNV3S/2000G, SNV3S/4000G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 entry-level, SMI SM2268XT2 or Phison E27T controller with BiCS6 TLC or QLC flash - dramless so hmb -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kioxia (Toshiba) XG4? M2 2280 NVMe PCIe SSD
| <!--Model-->THNSF5512GPUK, THNSN51T02DUK,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 Phison has done custom controller work for Kioxia, and Kioxia has also worked with SMI and InnoGrit (the latter more recently). Kioxia label their controllers as their own but these are largely rebadged.
|-
| <!--Brand-->Kioxia (Toshiba) XG5 for Data Centres
| <!--Model-->KXG5 KXG50ZNV1T02
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 nanya ddr3 dram? with 64-layer BiCS 3D flash memory
|-
| <!--Brand-->Kioxia XG6 OEM m.2 nvme
| <!--Model-->KXG60ZNV512G, KXG60ZNV1T02,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 TC58NCP090GSD with DRAM NANYA LPDDR3 and Toshiba BiCS FLASH 96-layer 3D TLC -
|-
| <!--Brand-->Kioxia (Toshiba) BG4 m.2 nvme
| <!--Model-->
*KBG40ZNS128G, KBG40ZNS256G, KBG40ZNS512G, KBG40ZNS1T02
*KBG40ZNT256G,
*KBG40ZNV1T02
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 - no dram but NVMe's Host Memory Buffer (HMB) i.e. portion of the system's RAM for caching - Toshiba's 96-Layer BiCS FLASH - seems Windows UASP driver and the JMS583 chipset interacts badly with the Kioxia BG4 - early firmware upgrade to prevent overheating hot -
|-
| <!--Brand-->Kioxia XG7
| <!--Model-->KXG70ZNV1T0G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 - might need firmware update on early 2tb 4tb versions - controller with sk hynix dram and tlc nand
|-
| <!--Brand-->KIOXIA EXCERIA PLUS G2 SSD series PCIe 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison PS5012-E12S-32 aka TC58NC1201GST 4-channel controller along with KIOXIA proprietary 96-layer 3D TLC and "MG2h" version has BiCS4.5 which is faster than launch BiCS4 - -
|-
| <!--Brand-->Kioxia XG8 OEM m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 TC58NC0L1XGSD with DRAM LPDDR4 and 112-Layer Kioxia BiCS5 TLC -
|-
| <!--Brand-->Kioxia (Toshiba) BG5
| <!--Model-->KGB50ZNV256G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 HMB buffer
|-
| <!--Brand-->Kioxia (Toshiba) BG6 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 dramless
|-
| <!--Brand-->KIOXIA EXCERIA PLUS G3 SSD series PCIe 4.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 has hmb, like most dram-less nvmes KIOXIA
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lexar 1TB SSD M.2 NVME 1.4 Gen3x4 M.2 2280
| <!--Model-->NM610Pro
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Lexar NM620
*IG5216 (worse?) not great original 96L
*MAP1202 YMTC up to 232L, or 176L Micron, TLC for the 1TB
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 a few versions all DRAM-less,
|-
| <!--Brand-->Lexar NM790 SSD M.2 PCIe Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Maxio MAP1602 no DRAM so HMB with 232-Layer YMTC TLC
|-
| <!--Brand-->Lexar m.2 nvme
| <!--Model-->EQ790
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Maxio MAP1602, no DRAM so HMB, Flash Memory 232-Layer YMTC TLC,
|-
| <!--Brand-->Lexar
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Liteon M.2 NVME 512GB SSD 2280
| <!--Model-->CAZ-51282512-Q11 DP/N 0K64PG
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 SMI controller
|-
| <!--Brand-->Micron 2200S m.2 nvme 2200 series
| <!--Model-->MTFDHBA256TCK, MTFDHBA512TCK
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 for a time, Micron controller with 64L TLC 3D Nand [https://www.dell.com/support/home/en-uk/drivers/driversdetails?driverid=3jg3g BSOD occurred as CRITICAL_PROCESS_DIED] before self applied firmware [https://support.lenovo.com/us/en/downloads/ds119265-nvme-solid-state-drive-firmware-update-utility-for-windows-10-64-bit-thinkpad apparently it is related to the power management that disconnects the Micron SSD]
|-
| <!--Brand-->Micron 2300 m.2 nvme Gen 3 x4
| <!--Model-->MTFDHBA256TDV P/N M02626-001,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->Micron 3400 M.2 NVME SSD Gen4
| <!--Model-->MTFDKBA512TFH
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 - no cache
|-
| <!--Brand-->Micron 2450
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 E19T
|-
| <!--Brand-->Micron 2600 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Phison's PS5029-E29T SSD controller with Micron 276-layer G9 QLC NAND in a DRAMless - Adaptive Write Technology (AWT) using various NAND modes (SLC, TLC, and QLC) as a dynamic cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->MSI Spatium S270
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->MSI Spatium M450 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison’s E19T controller
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac NV2000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac NV5000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac NV7000 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Orico J10 J-10 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->Orico D10 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Orico e3500
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->Orico O7000 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Patriot P300 m.2 nvme pcie 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Patriot Viper VP4300 Lite M.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 multiple variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->PNY CS2230 Gen3 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->PNY CS2140 CS2342 Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Raydisk 1T 2280 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 no dram, Memory QLC Intel 144 layer. Chip Realtek
|-
| <!--Brand-->Raydisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sabrent Rocket Nano 2242 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sabrent Rocket 4.0 m.2 nvme
| <!--Model-->SB-2130-512, SB-2280-1TB, SB-Rocket-NVME4-HTSK-2TB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E16 controller and TLC flash -
|-
| <!--Brand-->Sabrent Rocket 4.0 PLUS m.2 nvme
| <!--Model-->SB-RKT4P-1TB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E1? controller and TLC flash -
|-
| <!--Brand-->Sabrent Rocket 5
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Phison E25
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Samsung PM951 m.2 nvme
| <!--Model-->MZVLV1T
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung 950 PRO PM961 M.2 2280 NVMe 1.3 PCI-Express 3.0 x4
| <!--Model-->
*MZ-VKW5120
*MZ-VLW2560 MZVLW256HEHP-000L7, MZ-VLW5120, MZ-SLW1T00
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - possibly 512M LPDDR3 Samsung K4E4E324EE-ECCF cache - Polaris (S4LP077X01-8030) unit with Samsung 48-layer TLC V-NAND V3 flash Samsung K90MGY8S7M-CCK0 -
|-
| <!--Brand-->Samsung 960 Pro SM961 M.2 PCi-e NVMe SSD 2280
| <!--Model-->MZ-V6P1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 Polaris (S4LP077X01-8030) controller Samsung 48-layer multi-level cell (MLC) V-NAND, pseudo-SLC cache or LPDDR3-1866 Samsung K4E8E304EE-EGCF
|-
| <!--Brand-->Samsung PM981 2280 PCI-Express 3.0 x4
| <!--Model-->
*Rev 0 MZ-VLB256A, MZ-VLB512A, MZ-VLB1T0A,
*Rev 0 MZ-VLB2560, MZ-VLB5120 P/N MZVLB512HAJQ, MZ-VLB1T00,
*Rev ? MZ-VLB256B, MZ-VLB512B, MZ-VLB1T0B,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 - tlc flash with SSD controller Samsung Phoenix (S4LR020) - pseudo-SLC cache hybrid SLC Samsung’s TurboWrite -
|-
| <!--Brand-->Samsung PM981a 2280 PCI-Express 3.0 x4
| <!--Model-->MZ-VLB5120 P/N MZVLB512HBJQ-000L7,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 - tlc flash with SSD controller Samsung Phoenix (S4LR020) - pseudo-SLC cache
|-
| <!--Brand-->SAMSUNG PM991 NVMe M.2 SSD 2242 2280
| <!--Model-->MZ-VLQ2560 MZVLQ256HBJD-000H1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->SAMSUNG PM991a NVMe M.2 SSD 2242 2280
| <!--Model-->MZ-VLQ256B MZVLQ256HBJD-00BH1, MZ-9LQ256C, MZ-VLQ512B MZVLQ512HBLU,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->Samsung 970 EVO Plus m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 Samsung Phoenix on Samsung LPDDR4 dram and 2 Samsung 9x-layer V-NAND TLC
|-
| <!--Brand-->Samsung 980 EVO Plus
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->Samsung 980 Pro m.2 nvme
| <!--Model-->MZ-V8P1T0BW,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 originally made in Korea ([https://semiconductor.samsung.com/consumer-storage/support/tools/ 2tb firmware issues] with versions starting with 3) and year later Vietnam - DRAM
|-
| <!--Brand-->Samsung 990 EVO m.2 nvme
| <!--Model-->MZ-V9E2T0BW, MZ-V9E1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Samsung Piccolo no DRAM so HMB Samsung 133-Layer TLC (V6P) and Samsung 133-Layer TLC (V6P) -
|-
| <!--Brand-->SAMSUNG PM9A1 SSD M.2 2280 PCIe NVME Gen4x4
| <!--Model-->MZ-VL25120 MZVL2512HCJQ, MZVL21T00 MZVL21T0HCLR-00BL2,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 might be OEM variant of the 980 Pro
|-
| <!--Brand-->Samsung PM9B1 SSD M.2 2280 PCIe NVME Gen4x4
| <!--Model-->
*2023 MZ9L4256HCJQ-00BD1 MZ-9L4256A, ,
*2025 MZ-VL42560, MZ-VL45120, MZ-VL421T,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 SSD controller is Marvell 88SS1322 Whistler Plus, no DRAM cache and Samsung 128-layer TLC NAND flash
|-
| <!--Brand-->Samsung 990 EVO Plus m.2 nvme2.0
| <!--Model-->MZ-V9S2T0BW, MZ-V9S1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Samsung Piccolo with no DRAM so HMB and Samsung 236-Layer (V8) TLC -
|-
| <!--Brand-->Samsung 990 Pro m.2 nvme
| <!--Model-->MZ-V9P2T0BW, MZ-V9P1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 2tb early firmware issue - Samsung Pascal with DRAM LPDDR4 and 176-Layer V-NAND TLC - has had firmware design issues, causing premature failure -
|-
| <!--Brand-->Samsung 9100 PRO PCIe Gen5 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Seagate Firecuda 510 G3 x4 nvme
| <!--Model-->
*ZP1000GM30001,
*ZP500GM30021 P/N 2NT308-300,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 bad early batch - Phison E12 STXYP0160031 on SK Hynix DRAM DDR4 with Kioxia BiCS3 64L TLC
|-
| <!--Brand-->Seagate Firecuda Q5
| <!--Model-->ZP500CV30001,ZP250CV30001,ZP1000CV30001 P/N 2ZK307-881,ZP2000CV30001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 PS5013-E13-31 from Phison, no DRAM cache and QLC nand
|-
| <!--Brand-->Seagate Firecuda 515
| <!--Model-->ZP500GV30001,ZP250GV30001,ZP1000GV30001,ZP2000GV30001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 no dram and qlc nand
|-
| <!--Brand-->Seagate FireCuda 520 SSD M.2 PCIe Gen4 ×4 NVMe 1.4
| <!--Model-->ZP2000GM30002, ZP1000GM30002, ZP500GM30002
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison E16 and Toshiba 96-layer TLC (triple-level cell) BiCS4 NAND flash DDR4 DRAM buffer and TLC-based with SLC-mode cache -
|-
| <!--Brand-->Seagate Firecuda 520N m.2 nvme
| <!--Model-->ZP2000GV3A012, ZP1000GV3A012 and ZP500GV3A012
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless
|-
| <!--Brand-->Seagate Firecuda 530 m.2 nvme
| <!--Model-->ZP500GM3A013,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison PS5018-E18 on DRAM DDR4 with Micron 176L TLC
|-
| <!--Brand-->Seagate
| <!--Model-->ZP1000CV3A002,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless
|-
| <!--Brand-->Seagate Firecuda 540
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 Phison E26 on DRAM LPDDR4 with 232-Layer Micron TLC
|-
| <!--Brand-->Seagate Firecuda 530R
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power UD85 m.2 nvme PCIe 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 [http://vlo.name:3000/ssdtool/ firmware tools]
|-
| <!--Brand-->Silicon Power UD90 PCIe 4.0 nvme
| <!--Model-->SP250GBP44UD9005, SP500GBP44UD9005, SP01KGBP44UD9005, SP02KGBP44UD9005,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Phison E21T with no DRAM so HMB and 176-Layer Micron TLC (B47R) but later no name QLC nand instead -
|-
| <!--Brand-->Silicon Power A60 A80
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 various originally an E12 drive with 64L Toshiba NAND, then had variations with E12S and SM2262EN as well as random 64L/96L, now it comes with a MAP1001A controller by Maxio and some YMTC NAND -
|-
| <!--Brand-->Silicon Power US75 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 multiple variants with different NAND flash and/or controller like MAP1602A (F1C F2C uses NVMe 1.4, F3C U uses NVMe 2.0) and 232-layer TLC NAND flash, no dram
|-
| <!--Brand-->Silicon Power m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SK Hynix BC501 M.2 m.2 NVMe PCIe Gen3 SSD
| <!--Model-->
*Rev0 HFM256GDHTNG-8510B SSS0L24764, HFM256GDJTNG-8310A,
*Rev1 HFM256GDHTNG-8310A SSS0Q68673,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 bad batch early -
|-
| <!--Brand-->SK Hynix BC511 512GB NVMe PCIe M2 2230 SSD
| <!--Model-->HFM256GDJTNI-82A0A HFM512GDGTNI-82A0A D P/N 0TG8T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 no dram cache
|-
| <!--Brand-->SK hynix BC711 PCIe Gen3 x4
| <!--Model-->HFM001TD3JX013N, HFM512GD3JX013N, HFM256GD3JX013N
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 okay but no dram cache
|-
| <!--Brand-->SK hynix PC711 m.2 2280 PCIe Gen3 x4
| <!--Model-->
*HFS001TDE9X073N, HFS512GDE9X073N, HFS256GDE9X073N
*HFS001TDE9X080N, HFS512GDE9X080N, HFS256GDE9X081N
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->SK Hynix SC210 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->SK Hynix PC601 PCIe 3.0 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 - Cepheus Plus YCN34PTA0FR Controller and 48L TLC Flash, pseudo-SLC cache and LPDDR4-3733 SK Hynix H9HCNNN8KUMLHR-NME dram -
|-
| <!--Brand-->SK Hynix PC401 3rd gen PCIe
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 bad batch early -
|-
| <!--Brand-->SK hynix Gold P31 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 SK hynix’s proprietary Cepheus controller
|-
| <!--Brand-->Sk Hynix SK500 Gen 4 (x4)
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021
|-
| <!--Brand-->SK hynix Platinum P41 m.2 nvme
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 Aries SSD controller with 176-Layer TLC flash - SK hynix LPDDR4 dram -
|-
| <!--Brand-->Sk Hynix PC801 PCIe Gen4 x4 m.2 nvme
| <!--Model-->HFS001TEJ9X101N, HFS512GEJ9X101N, HFS256GEJ9X101N, HFS002TEJ9X101N
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->SK Hynix BC901 m.2 nvme PCIe Gen4 2230
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 Silicon Motion SM2269XT with no DRAM so HMB buffer cache - SK Hynix 176-layer TLC NAND flash 1TB only -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Team
| <!--Model-->TM8PS7512G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->TeamGroup MP34
| <!--Model-->MP34 256GB, MP34 512GB, MP34 1TB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 good Phison E12 with DRAM NANYA DDR3L and Toshiba BiCS 3 64L TLC -
|-
| <!--Brand-->Team Group T-Force Cardea A440 PCIe Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison PS5018-E18 NVMe 1.4 controller and Micron’s 96L TLC with SK hynix 8Gb DDR4 chips but not OPAL-compliant AES 256-bit
|-
| <!--Brand-->Team Group TForce Cardea A440 Lite PCIe Gen4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 dram-less E27T controller and 162L TLC but not OPAL-compliant AES 256-bit
|-
| <!--Brand-->teamgroup Team Z44L m.2 nvme pcie
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison’s E19T controller
|-
| <!--Brand-->teamgroup Team MP44L m.2 nvme pcie
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Phison E21T no DRAM so HMB with 176-Layer Micron TLC
|-
| <!--Brand-->Team MP33Q
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 - dramless maxio MAP1202 with TLC (MP33) or QLC (MP33Q) -
|-
| <!--Brand-->Team Group QX GE Pro m.2 nvme PCIe5
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 innogit IG5666 with QLC 3D 232L nand with DRAM -
|-
| <!--Brand-->Team Group T-Force G70 Pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 InnoGrit IG5236 (Rainier) with DRAM and NAND YMTC TLC -
|-
| <!--Brand-->Team Group T-Force Cardea Z540 m.2 nvme PCIe 5.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 Phison E26 controller and 232L TLC and DRAM -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend MTE110S PCIe Gen3 x4 M.2 2280 TS128GMTE110S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 3D TLC NAND
|-
| <!--Brand-->Transcend MTE220S PCIe Gen3 x4 M.2 2280 TS2TMTE220S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 3D TLC NAND with DRAM Cache
|-
| <!--Brand-->Transcend MTE300
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->Transcend MTE300S PCIe Gen3 x4 M.2 2230 TS256GMTE300S TS512GMTE300S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 3D TLC NAND, 1G and 2G get hot
|-
| <!--Brand-->Transcend
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend MTE400S
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 mlc nand
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TWSC
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TWSC
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Union Memory (Shenzhen) AM6672
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->union memory AM6A0 Gen4 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Verbatim V15000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->WD Blue SN500
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Western digital SN720 M.2 2280 NVME PCIE for Data Centers
| <!--Model-->SDAQNTW-512G-1001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 to 2021
|-
| <!--Brand-->WDC SN520 2230 Gen3 x2
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 to 2020
|-
| <!--Brand-->Western digital ix sn530 M.2 NVME PCIE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 industrial sandisk controller and firmware, as well as 96-layer 3D TLC NAND memory that can work in TLC or SLC mode -
|-
| <!--Brand-->Western digital SN730 Gen3 x4 M.2 2280 M.2 NVME
| <!--Model-->SDBPNTY-1T00, SDBPNTY-512G-1012,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 to 2021 DRAM Cache DDR4-2666 CL18 Micron MT40A512M16LY-075:E (D9WFH) with Controller WD 20-82-00705-A2 Triton MP28 and NAND Flash Toshiba BiCS4 60082 512G (Rebranded by SanDisk) TLC 96-layer
|-
| <!--Brand-->WD Black SN750
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 64-layer 3D stacked NAND with 3 bits per cell TLC (Triple Level Cell) with 256MB of skhynix DRAM cache for every 250GB
|-
| <!--Brand-->WD Black SN850 m.2 nvme Gen4 PHY
| <!--Model-->WDS100T1X0E,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 Sandisk G2 controller with Micron DDR4 cache - new nCache 4.0 slc cache total dynamic capacity spans one-third (300GB on 1TB) with a small static SLC cache (12GB on 1TB) from the Kioxia BiCS4 96L TLC 96-layer NAND flash -
|-
| <!--Brand-->Western digital SN550 Blue M.2 NVME PCIE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 - various controllers and NANDs
|-
| <!--Brand-->Western Digital SN810 NVMe SSD 2280 Gen4 x4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 slc cache - laptop oem only no retail version -
|-
| <!--Brand-->WD SN850X
| <!--Model-->WDS100T2X0E, WDS200T2X0E, WDS400T2X0E, WDS800T2X0E,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 issues with early ssd firmware and AMD Zen 3 X570 and X670E chipsets - Sandisk A101000291-82 controller with 112-layer TLC and DDR4 DRAM cache
|-
| <!--Brand-->WD_Blue SN570 single-sided M.2 2280 (80mm) PCIe 3.0
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless - WD/SanDisk SSD controller with BiCS 5 3D NAND TLC 112-layer NAND flash memory -
|-
| <!--Brand-->WD_Black SN770 m.2 nvme
| <!--Model-->WDS100T3X0E,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless cache with TLC
|-
| <!--Brand-->WD Green SN350 m.2 NVMe SSD
| <!--Model-->WDS100T3G0C,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 DRAM-less cache with SanDisk controller and QLC (quad-level cell) NAND
|-
| <!--Brand-->WD_BLACK SN750 SE
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 controller Phison E19T, dramless
|-
| <!--Brand-->WD SN740 M.2 (2230) PCIe 4.0 x4 2280
| <!--Model-->SDDQTQD-1T00, SDDPNQD-, SDDPNQD-256G-2006,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 dramless with SSD controller WD Sandisk 20-82-10081-A1 Polaris MP16+ with Toshiba BiCS5 112-layer TLC NAND flash
|-
| <!--Brand-->WD_Blue SN580
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 dramless SanDisk controller with (HMB) and 112-Layer Kioxia TLC (BiCS5)
|-
| <!--Brand-->WD Blue SN5000
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Black SN8100 / Sandisk Optimus GX Pro 8100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk Optimus GX 5100 7100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2026
|-
| <!--Brand-->Sandisk Optimus GX Pro 850X
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2026
|-
| <!--Brand-->Sandisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Zhitai (Yangtze Memory)
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== Mini SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->Biwin PCIe 4×2 NVMe 1.3
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025 GPDwin5 and Oneplayer Superx hybrid - 3D TLC - LGA packaging - V1 slide tray mechanism -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2025
|-
|}
==SATA==
Advanced Host Controller Interface (AHCI), a programming interface for SATA host controllers. Platforms supporting AHCI may take advantage of performance features such as no master/slave designation for SATA devices — each device is treated as a master — and hardware-assisted native command queuing. AHCI may but not often also provides usability enhancements such as Hot-Plug (Desktop and Mobile Only). AHCI requires appropriate software support (e.g., an AHCI driver)
AHCI, the underlying protocol for SATA, only supports one queue with 32 commands.
The issue with AHCI is that it's going to take a pile of test hardware just to figure out all the different bugs in all the motherboard chipsets and add-on PCI cards that 'kinda' implement AHCI. Not to mention Silicon Image, which took a very different approach from Intel's AHCI in their SATA controllers.
=== SATA 7mm 2.5inch SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->ADATA 240GB Ultimate SU630 2.5"
| <!--Model-->ASU630SS-240GQ-R
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->ADATA Ultimate Su650 2.5in
| <!--Model-->ASU650SS240GTR
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->ADATA Ultimate Su800 2.5in
| <!--Model-->ASU800
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 SMI SM2258 controller with Micron 3D TLC NAND but low performance when data fills the SLC cache - slow write speed -
|-
| <!--Brand-->ADATA Ultimate Su680 2.5in
| <!--Model-->ASU680SS240GTR
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Apacer AS340 Panther
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Apacer AS350
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Crucial M500 120Gb to 960Gb
| <!--Model-->CT250M500SSD1, CT500M500SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 dram cache
|-
| <!--Brand-->Crucial M550 120G to 1T
| <!--Model-->CT250M550SSD1, CT500M550SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 dram cache
|-
| <!--Brand-->Crucial (Micron) BX100
| <!--Model-->CT500BX100SSD1, CT1000BX100SSD1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 - no dram - Silicon Motion SM2246EN and ATA version ACS-2 -
|-
| <!--Brand-->Crucial (Micron) MX100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 dram cache Micron controller and nand -
|-
| <!--Brand-->Crucial MX200
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 MLC NAND
|-
| <!--Brand-->Crucial (Micron) BX300 2.5in
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 dramless cache - Micron ex Tidal controller and TLC nand -
|-
| <!--Brand-->Crucial (Micron) MX300
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 dram cache
|-
| <!--Brand-->Crucial (Micron) bx500 2.5inch
| <!--Model-->CT240BX500SSD1, CT480BX500SSD1, CT960BX500SSD1, CT1000BX500SSD1, CT2000BX500SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 SM2258XT 4channel later SM2259XT paired with Micron’s latest 64-Layer 3D TLC flash but dramless SLC cache (part of the tlc flash) -
|-
| <!--Brand-->Crucial (Micron) MX500
| <!--Model-->CT250MX500SSD1, CT500MX500SSD1, CT1000MX500SSD1, CT2000MX500SSD1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - dram cache from 256M to 2G - discontinued end of 2024
|-
| <!--Brand-->Fanxiang S101 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 - no dram cache, Hynix memory 3dv7-176l 176 layer QLC (one chip), either raymx rm1135, SM2259XT controller or Realtek rts5735dlq
|-
| <!--Brand-->Fanxiang ranxiana S102 PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 - no dram -
|-
| <!--Brand-->Fanxiang S101Q 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Fanxiang
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fikwot
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->Fikwot founded in 2018
|-
| <!--Brand-->Fikwot FX815 Standard 2.5inch sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Fikwot FS810 Ultra 2.5inch sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Goodram CL100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> SM2259XT controller)
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Hypertec FirestormLite 2.5inch
| <!--Model-->S240GHS3-M or SDSSD240GB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Hypertech
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral V2 Plus 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intel SSD 520 Series 2.5 inch SATA 6Gb/s 2.5" SSD Solid State Drive
| <!--Model-->SSDSC2CW240A3, SSDSC2CW480A3,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 LSI SandForce SF2281, Flash Memory Intel Synchronous 25nm MLC -
|-
| <!--Brand-->Intel Pro Series 1500
| <!--Model-->SSDSC2BF180A4L SSD0E38417,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Intel S3610 Series 2.5" 400GB 6GBPS SATA SSD
| <!--Model-->SSDSC2BX400G4R
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 data center
|-
| <!--Brand-->Intel SSD Pro 5400s 512 GB
| <!--Model-->SSDSC2KF512H6
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Intel SSD DC S3510 Series MLC 2.5"
| <!--Model-->SSDS2BB400G6, SSDSC2BB480G6R,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Intel SSD DC S3520 Series MLC 2.5"
| <!--Model-->SSDSC2BB800G7,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Intel SSD DC S3710 Series 800GB 2.5"
| <!--Model-->SSDSC2BA800G4P,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 server
|-
| <!--Brand-->Intel SSD 545S Series 256GB 512GB
| <!--Model-->SSDSC2KW256G8X1, SSDSC2KW512G8
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->[https://www.solidigm.com/support-page/warranty-rma/ka-00032.html Solidigm formerly Intel] SSD DC S4500 240GB 2.5inch - HP Enterprise
| <!--Model-->SSDSC2KB240G7P
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingspec P3-512 P3-1T0 P3-2TO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston HyperX SH103S3/120G 3K
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston SSDNow 300
| <!--Model-->SV300S37A/240G, SV300S37A/120G, SV300S37A/60G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 dramless - lsi sandforce SF2281 or JMicron JMF662 controller with Toshiba MLC or Intel MLC
|-
| <!--Brand-->Kingston A400 120G to 960Gb 2.5inch
| <!--Model-->SA400S37/240G SBFK61K1, SA400S37/480G, SA400S37/960G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 half case sized ssd 4 x FH64B08UCT1-60 64G - t6 security torx into metal case - dram less - poor write speeds -
|-
| <!--Brand-->Kingston
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kioxia formerly Toshiba HG6 2.5in
| <!--Model-->
*9.5mm THNSNJ512GBSU, THNSNJ256GBSU, THNSNJ128GBSU
*7mm THNSNJ512GCSU THNSNJ512GCSY, THNSNJ256GCSU THNSNJ256GCSY, THNSNJ128GCSU THNSNJ128GCSY
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - no dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lexar NS100 2.5 inch sata
| <!--Model-->LNS100-1TRB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - Marvell 88NV1120 Artemis, a DRAM cache is not available and pseudo-SLC. Micron 64-layer TLC NAND flash 4 chips @ 512 Gbit TS7512G181 (Rebranded by Lexar) (256G) - 4 nand flash chips Lexar/TST22T181/ B1924 and one controller: Lexar DM918/NOD43 1907 (512G) -
|-
| <!--Brand-->Lexar NQ100
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - DM928 controller which operates without a DRAM buffer. Two 128GB Micron NAND flash chips
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lite-On IT Corp 2.5" Sata2
| <!--Model-->LCS-128L9S-HP, LCS-128M6S-HP,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 no dram - from HP machines
|-
| <!--Brand-->LiteOn 2.5in SATA
| <!--Model-->CV3-CE256-11
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Matrix 256Gb 512GB SATA 2.5in SSD
| <!--Model-->MIS512GSDS, MIS256GSDS
| <!--Work MSDos-->UP TO 550MB/S
| <!--Work GPT-->UP TO 500MB/S
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron 1100
| <!--Model-->MTFDDAK2T0TBN-1AR1ZA
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron 1300 2TB 1300 2.5"
| <!--Model-->MTFDDAK2T0TDL-1AW1ZABHA
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010 - old sdd - TLC nand -
|-
| <!--Brand-->Micron RealSSD C400 2.5inch
| <!--Model-->MTFDDAK256MAM-1K12
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Mushkin Reactor
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> MLC flash
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Netac SA500
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Deneva 2 C
| <!--Model-->D2CSTK251M21-0240,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Deneva 2 R
| <!--Model-->D2RSTK251E19-0100,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Vertex 3 128GB 2.5" SATA III SSD
| <!--Model-->VTX3-25SAT3-240G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OCZ Vertex 4 128GB 2.5" SATA III SSD
| <!--Model-->VTX4-25SAT3-128G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Orico Y-20 Y20 2.5 inch sata SHENZHEN ORICO TECHNOLOGIES CO.,LTD
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023 flash nand -
|-
| <!--Brand-->Orico S500-Pro s500pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Orico
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Origin Storage Inception TLC830 Pro Series 2.5in SATA III SSD
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 3D tlc flash nand -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->OWC Mercury Extreme Pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->Patriot P210 2.5 inch sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> qlc flash nand -
|-
| <!--Brand-->Patriot P220
| <!--Model-->P220S2TB25
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->PC SPECIALIST 2.5" SATA 6Gb/s Solid State Drive SSD
| <!--Model-->G535S P/N NTS3ABYUO0AG
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->Plextor M6V
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> flash nand -
|-
| <!--Brand-->PNY CS900 2.5 in sata SSD
| <!--Model-->SSD7CS900-480-PB
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->PNY CS2311, CS3030 and Pro Elite SSDs
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Samsung PM830 SATA 6.0Gbps 2.5" SATA
| <!--Model-->MZ7PC256HAFU
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2011 - Samsung 3-core MCX controller, 2x nm Toggle MLC NAND, 256MB SDRAM cache and firmware - OEM drive -
|-
| <!--Brand-->Samsung SM PM
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->PM871a or PM871b? SM/PM = 2-bit or 3-bit MLC. PM = 3-bit MLC = TLC. 8 = generation = 8xx, 7 = model = 850 EVO (in this case), 1 = usage (e.g. 3 = datacenter). a/b = revision or type of flash, the 850 EVO had multiple revisions including at least three types of flash (32L, 48L, 64L) so a = 32/48L, b = 64L. At lower capacities it might use different flash, for example the 256GB SM951 utilizies 2D/planar while the higher capacities use 3D. OEM drives tend to have different, optimized firmware, so performance will not be the same
|-
| <!--Brand-->Samsung 840 PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012
|-
| <!--Brand-->Samsung 840 EVO
| <!--Model-->MZ-7TE120
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013
|-
| <!--Brand-->Samsung PM851 2.5in sata
| <!--Model-->MZ-7TE5120 P/N MZ7TE512HMHP,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014
|-
| <!--Brand-->Samsung 850 EVO
| <!--Model-->MZ-75E120, MZ-75E500 (P/N MZ7LN500) to MZ-75E4T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 Samsung MGX controller (S4LN062X01) up to 500GB capacities whilst Samsung MEX controller (3-core) beyond - Samsung TLC 3D V‐NAND 48 and later 64 layers and possibility of 256MB, 512MB or 1GB LPDDR2-1066 DRAM chip -
|-
| <!--Brand-->Samsung 850 PRO
| <!--Model-->MZ-7KE1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Samsung PM871a 2.5 inch sata
| <!--Model-->MZ-7LN512A P/N MZ7LN512HMJP,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 used 64-layer QLC V-NAND - Samsung MJX Maru (S4LR030) contoller with no dram as standard -
|-
| <!--Brand-->Samsung PM883 1.92TB
| <!--Model-->MZ-7LH1T90
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - - Samsung MJX Maru (S4LR030) - 1gb LPDDR4-1866 dram -
|-
| <!--Brand-->Samsung 860 EVO
| <!--Model-->MZ-76E1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 used 64-layer QLC V-NAND - Samsung MJX Maru (S4LR030) contoller with no dram as standard -
|-
| <!--Brand-->Samsung 860 EVO PRO
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 used 64-layer QLC V-NAND
|-
| <!--Brand-->Samsung 860 QVO
| <!--Model-->MZ-76Q1T0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 used 64-layer QLC V-NAND
|-
| <!--Brand-->Samsung 870 QVO 2.5in
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 uses 9x layer 3D QLC V-NAND (or V-NAND 4-bit MLC Samsung), may have no DRAM cache - MKX 8-channel controller
|-
| <!--Brand-->Samsung 870 EVO
| <!--Model-->MZ-7LN56F, MZ-77E1T0 P/N MZ7L31TOHBLB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 beware of bad batch early death - uses 9x layer 3D QLC V-NAND (or V-NAND 4-bit MLC Samsung), may have no DRAM cache - Samsung MKX 8-channel controller
|-
| <!--Brand-->Samsung PM871b
| <!--Model-->MZ7LN256HCHP-000H1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2021 uses 9x layer 3D QLC V-NAND (or V-NAND 4-bit MLC Samsung), may have no DRAM cache - Samsung MKX 8-channel controller
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Sandisk Extreme Pro
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012 SandForce SF-2281 dram
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Sandisk X110
| <!--Model-->SD6SB1M-256G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 marvell mlc nand
|-
| <!--Brand-->Sandisk Ultra Plus
| <!--Model-->SDSSDHP-256G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 Marvell SS889175 processor with SanDisk's 19nm NAND and 128MB Samsung DDR2 DRAM chip
|-
| <!--Brand-->Sandisk Z300s
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 - Marvell 88SS9188 Marvell 88SS9187 with SanDisk 64Gbit 19nm MLC -
|-
| <!--Brand-->Sandisk x300 SATA 2.5"
| <!--Model-->SD7SB7S-512G-1001,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014-6 - Marvell 88SS1074 from 88SS91xx series) and SanDisk/Toshiba 1Ynm X3 TLC NAND - SLC cache - Made in Malaysia -
|-
| <!--Brand-->Sandisk x300s
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 SanDisk 1Ynm MLC NAND - self encrypting with on-board 256bit AES hardware encryption -
|-
| <!--Brand-->Sandisk Plus
| <!--Model-->SDSSDA-240G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 pseudo SLC cache dramless
|-
| <!--Brand-->Sandisk Z400s
| <!--Model-->SD8SBAT-128G-1122,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - Silicon Motion SM2246XT DRAM-less - budget end of market -
|-
| <!--Brand-->Sandisk x400 2.5in sata
| <!--Model-->SD8SB8U-256G-1012, SD8SB8U-128G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - 4 NAND packages and marvell controller 88ss1074 on blue pcb - 512MB DDR3L-1600 Micron DRAM -
|-
| <!--Brand-->Sandisk X600
| <!--Model-->SD9SB8W-128G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Sandisk Ultra 3D
| <!--Model-->SDSSDH3-500G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019 controller with slc cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate BarraCuda Q1 SSD
| <!--Model-->ZA240CV10001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power A55 2.5in sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 dramless A55 started with the Phison S10 but later the S11 i.e. Phison PS3111-S11-13 controller and 96-layer TLC NAND flash memory with a pseudo-SLC cache -
|-
| <!--Brand-->Silicon Power Ace A55 2.5in
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 - no dram -
|-
| <!--Brand-->sk hynix
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012 sandforce controller -
|-
| <!--Brand-->sk Hynix SH910A
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 - Link_A_Media (LAMD) controller with eight 256Gbit H27QEGDVEBLR NAND 20nm hynix MLC - SK hynix H5PS1G83JFA DRAM -
|-
| <!--Brand-->sk Hynix SC300
| <!--Model-->HFS256G32MND-3210A, HFS256G32MND-3312A,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 - red strip around edges - 8-channel controller SK hynix LM87810AA-A0 with DDR2 buffer chip and four pieces of 16nm hynix MLC NAND -
|-
| <!--Brand-->Sk Hynix Canvas SL300 series 2.5in SSD
*3110A SL301STD
*3210A
*3300A
*3310A
| <!--Model-->HFS500G32TND, HFS256G32TNE, HFS128G32TNF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 TLC - consumer line red in corners - SK hynix LM878100AA (HFS256G32MND-3312A) later SH87820BB and NAND 16nm hynix TLC - 256mb dram
|-
| <!--Brand-->Sk Hynix Canvas SC3 series 2.5in SSD
*N1A0A , ,
*N1A1A
*N1A2A SC308STD,
*N2A0A , , SC311STD
| <!--Model-->HFS512G32TNF-N2A0A,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 - red in corners - no dram and no SLC cache - Hynix ex Link_A_Media Devices (LAMD) SH87820BB 2c but poor mixed workload ability MLC -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Team EX2 GX2 Elite QX
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2023
|-
| <!--Brand-->TEAMGROUP AX2 2.5 Inch SATA III Solid State Drive SSD
| <!--Model-->T253A3512G0C101, T253A3001T0C101, T253A3002T0C101,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 3D NAND TLC
|-
| <!--Brand-->TeamGroup TF Vulcan Z 2.5in sata
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dramless smi2259xt 128L tlc nand -
|-
| <!--Brand-->TeamGroup T-Force Vulcan ZQLC
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024 dram-less smi2259xt qlc 144L nand -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Topesel
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba Q300 7mm SSD
| <!--Model-->HDTS896EZSTA, HDTS848EZSTA, HDTS824EZSTA, HDTS812EZSTA
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 Toshiba TC58NC1000 controller with 3-bit-per-cell A15nm NAND Flash and SLC Write Cache -
|-
| <!--Brand-->Toshiba Q300 Pro 7mm SSD
| <!--Model-->HDTS824
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend SSD370S 250GB 2.5" SATA SSD
| <!--Model-->TS256GSSD370S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend 220S 2.5in
| <!--Model-->TS120GSSD220S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 3D TLC without dram
|-
| <!--Brand-->Transcend SSD230S 2.5in
| <!--Model-->TS256GSSD230S TS512GSSD230S TS1TSSD230S TS2TSSD230S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 3D TLC NAND with DRAM Cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Viathan
| <!--Model-->S001T3V
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Red SA500 NAS
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->WD Blue SA510 250Gb to 4Tb
| <!--Model-->WDS400T3B0A WDS200T3B0A WDS100T3B0A WDS500G3B0A WDS250G3B0A
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 -
|-
| <!--Brand-->Western Digital WD Green SSD 2.5"
| <!--Model-->WDS240G1G0A
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Green 200Gb to 2Tb
| <!--Model-->WDS200T2G0A WDS100T3G0A WDS480G2G0A WDS240G2G0A WDS120G2G0A
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018 - cheap and slow ssd -
|-
| <!--Brand-->WD SA530
| <!--Model-->SDASB8Y-256G SD9SB8W,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->[https://www.xray-disk.com xraydisk] 2.5 inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> from the manufacturer only - Phsion/SMI(2258XT)/Realtek/Yeestor
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Xum
| <!--Model-->hx256gssdsata3
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Yottamaster
| <!--Model-->Y3000
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> PCie 3.0
|-
| <!--Brand-->Yottamaster
| <!--Model-->Y7000
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> PCIe 4.0
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|}
=== SATA 9mm 2.5inch SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->Corsair F120
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Crucial M225 SSD 2.5inch
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2009 sata2 3gbp/s sandforce controler and MLC nand -
|-
| <!--Brand-->Crucial RealSSD [https://www.storagereview.com/review/crucial-realssd-c300-review-256gb C300]
| <!--Model-->CTFDDAC256MAG,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010 sata3 6gbps - Marvell 88SS9174-BJP2 controller with a 128MB Micron 0AD12-D9LGQ RAM buffer with Micron 9wb11 MLC NAND - fast on 6Gbps SATA3 -
|-
| <!--Brand-->Crucial M4
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2011 Marvell 88SS9174-BKK2 processor, 25nm MLC NAND flash and 128MB dram cache
|-
| <!--Brand-->Intel X25--M
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010
|-
| <!--Brand-->OCZ Vertex Series
| <!--Model-->OCZSSD2-1VTX60G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2009 Indilinx Barefoot controller -
|-
| <!--Brand-->OCZ Vertex 2
| <!--Model-->OCZSSD32VTX90G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2010 Sandforce SF 1200 controller -
|-
| <!--Brand-->OCZTechnology Agility 3
| <!--Model-->AGT3-25SAT3-240G, AGT3-25SAT3-120G, AGT3-25SAT3-60G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2011 sandforce sf-2281 controller -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== SATA M.2 (M and B key) ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->ADATA M.2 2280 Sata
| <!--Model-->AXNS381E-128GM-B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fanxiang S201 m.2 sata 2280
| <!--Model-->S201
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fikwot FN203 m.2 sata (oldtan, twipps, teexin aka Shenzhen Pingfan "Ordinary" Road Technology Co., Ltd)
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 lifespan not long Maxio MAP + YMTC 128L
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Foresee (Shenzhen Longsys)
| <!--Model-->YSM80CD-128G YSDE128G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 - 88nv1120-bt22 T3WU030
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral 2242 120G
| <!--Model-->INSSD120GM242
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> tlc nand
|-
| <!--Brand-->Integral M.2 2280
| <!--Model-->INSSD256GM.26M2280
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> tlc nand
|-
| <!--Brand-->Integral 256GB/512GB/1TB/2TB
| <!--Model-->INSSD1TM280
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 netac rebrand - no dram cache -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intel Pro 545S 2280
| <!--Model-->SSDSCKKF256G8H
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> no dram, TLC nand
|-
| <!--Brand-->Intel
| <!--Model-->SSDSC2KF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Intenso M.2 internalSSD SATA III 1 TB
| <!--Model-->Top
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston A400 m.2
| <!--Model-->SA400M8/240G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 entry level ssd 4 x FH64B08UCT1-60 64G -
|-
| <!--Brand-->Kingston
| <!--Model-->RBU-SNS8350DES3128GP
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingston V300
| <!--Model-->SV300S3505AG
| <!--Work MSDos-->{{yes}}
| <!--Work GPT-->
| <!--Tested under-->Nightly Build 2014-09-18
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->LITEON SATA 128GB
| <!--Model-->CV3-8D128-11
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->LITEON
| <!--Model-->CV1-8B256-HP
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Lite-On
| <!--Model-->L8H-256V2G-HP L8H-128V2G-HP
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 2016 nanya nt5c864m16fp-dh
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->LSI
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 SF37000 controller
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron
| <!--Model-->M550
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 Marvell 88SS9189 SATA controller
|-
| <!--Brand-->Micron M600 enterprise m.2 sata up to 512GB
| <!--Model-->MTFDDAV256MBF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014 Marvell 88SS9189 SATA controller, DRAM chip 256MB 533MHz LPDDR2, NAND for the 256GB drive MT29F1T08CQCCBG2-10:C 16nm MLC NAND each 128GB package
|-
| <!--Brand-->MICRON 1100 M.2 SATA 6Gb/s 2280
| <!--Model-->MTFDDAV256TBN HP P/N 903109-001,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Orico Y20M-2242
| <!--Model-->Y20M
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Orico
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->Orico
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->202
|-
| <!--Brand-->PNY
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung PM841 M.2 sata3 2280
| <!--Model-->MZ-NTD2560/0L9 MZNTD256HAGL-000L9
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 TLC
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung CM871 Rev 0
| <!--Model-->MZNLF128HCHP-000H1 MZ-NLF1280
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung PM871a m.2 Sata
| <!--Model-->MZNLN256HMHQ, NLN512A P/N MZNLN512HMJP-000H1,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 TLC
|-
| <!--Brand-->SAMSUNG PM871b
| <!--Model-->MZNLN128HAHQ-000H1, MZNLN256HAJQ MZ-NLN256F MZ-NLN256C,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung PM881
| <!--Model-->MZ-NLH1280 MZNLH128HBHQ-000H1
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SANDISK X110 DELL 6T4HK M.2 2260
| <!--Model-->SD6SP1M
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013
|-
| <!--Brand-->SanDisk X300 M.2 sata 2280 80mm SSD Solid State Drive
| <!--Model-->SD7SN6S-256G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Sandisk X400 SSD M.2 sata 2280
| <!--Model-->SD8SN8U-128G-1006, SD8SN8U-256G-1006, SD8SN8U-512-1006,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016 SSD controller Marvell 88SS1074 four channel supports variety of NAND and up to 512MB DDR3L-1600 Micron DRAM cache -
|-
| <!--Brand-->SanDisk X600 M.2 SSD Solid State Drive
| <!--Model-->SD9SN8W-128G-1006 SD9TN8W-256G-1006
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SK Hynix SC300
| <!--Model-->SC308M280S HFS128G39TND
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015 SH87820BB controller - No dram buffer - multi-level cell (MLC) NAND
|-
| <!--Brand-->SK HYNIX
| <!--Model-->SC311 HFS256G39TNF
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->SK HYNIX
| <!--Model-->SC401 HFS256G39TNH
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Silicon Power A55 M.2 sata 2280
| <!--Model-->A55
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017 - no dram -
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TEAMGROUP Team MS30 SSD M.2 Sata 2280
| <!--Model-->TM8PS7001T0C101
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Toshiba RC100 (retail version of BG3)
| <!--Model-->KBG30ZMV256G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Toshiba HG6 m.2
| <!--Model-->THNSNJ512GDNU THNSNJ512G8NY, THNSNJ256GDNU THNSNJ256G8NY, THNSNJ128GDNU THNSNJ128G8NY, THNSNJ256GVNU THNSNJ128GVNU,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2018
|-
| <!--Brand-->TOSHIBA SSD M.2 2280 256GB
| <!--Model-->KSG50ZMV256G
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2019
|-
| <!--Brand-->Kioxia (Toshiba) BG6
| <!--Model-->KSG60ZMG256G,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend
| <!--Model-->400
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Transcend M.2 SSD 2242 TS32GMTS400S TS64GMTS400S TS128GMTS400S
| <!--Model-->400S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> DDR3 dram cache and mlc nand
|-
| <!--Brand-->Transcend
| <!--Model-->M.2 SSD 600 (2260), M.2 SSD 800S (2280)
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> mlc nand
|-
| <!--Brand-->Transcend M.2 SSD 2242 TS120GMTS420S TS240GMTS420S TS480GMTS420S
| <!--Model-->420S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> can run hot slc cache
|-
| <!--Brand-->Transcend M.2 SSD 2242 TS256GMTS430S TS512GMTS430S
| <!--Model-->430S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> dram cache - 3d tlc nand
|-
| <!--Brand-->Transcend M.2 SSD 2280 TS120GMTS820S TS240GMTS820S TS960GMTS820S
| <!--Model-->820S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 3D nand
|-
| <!--Brand-->Transcend M.2 SSD 2280 TS256GMTS830S TS512GMTS830S TS1TMTS830S TS4TMTS830S
| <!--Model-->830S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> dram cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD Green SATA SSD m.2 2280 120GB to 480Gb
| <!--Model-->WDS480G2G0B WDS240G2G0B WDS120G2G0B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2020 made in malaysia
|-
| <!--Brand-->Western Digital WD Green SATA SSD m.2 2280 240Gb to
| <!--Model-->WDS240G3G0B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2022 made in
|-
| <!--Brand-->WD Blue SA510 M.2 SATA 250Gb to 2Tb
| <!--Model-->WDS200T3B0B WDS100T3B0B WDS500G3B0B WDS250G3B0B
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->WD Red 500GB 1TB 2TB
| <!--Model-->SA500
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->union memory AM610 m.2 sata
| <!--Model-->SSS0R27339,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== mSATA SSD ===
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fangxiang S301
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Kingchuxing
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Integral
| <!--Model-->INSSD256GMSA MO-300
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> tlc 3d nand
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Micron enterprise
| <!--Model-->M600
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Orico ZH-10 ZH10
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2024
|-
| <!--Brand-->Samsung 840 EVO 1.8inch msata
| <!--Model-->MZ-M
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2015
|-
| <!--Brand-->Samsung 850 EVO 1.8in
| <!--Model-->MZ-M5E120BW, MZ-M5E250BW, MZ-M5E500BW,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung PM851 1.8" msata
| <!--Model-->MZ-MTE256D P/N MZ-MTMTE256HMHP, MZ-MTE1T00,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2016
|-
| <!--Brand-->Samsung 860 EVO 1.8inch msata
| <!--Model-->MZ-MM6E250BW, MZ-M6E500BW, MZ-M6E1T0BW
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2017
|-
| <!--Brand-->Transcend TS64GMSA370S
| <!--Model-->MSA370S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> MLC nand
|-
| <!--Brand-->Transcend TS64GMSA230S
| <!--Model-->230S
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 3d tlc nand
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
=== SATA 2.5inch Laptop Hard Disks ===
====7mm====
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->CP628230-01 500Gb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->CP552605-01 250Gb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->CP693440-01 500Gb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->HGST Travelstar
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->HGST Hitachi Z5K320 Z5K500-500 Z5K100 series
* 2013 HTS545050A7E380 HTS
* 2015 HTS545050A7E680 HTS
| <!--Model-->HTS 320GB 500Gb 1Tb
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 5400rpm
|-
| <!--Brand-->HGST Hitachi Z7K320 Z7K500 series
| <!--Model-->HTS725050A7E630 320Gb HTS725050A7E635 500Gb 7200rpm
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> avoid if it does not have the DCM code
|-
| <!--Brand-->HGST 1T 5400rpm
| <!--Model-->HTS541010B7E610
| <!--Work-->
| <!--Tested under-->2017 128m cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->Seagate Momentus Thin
| <!--Model-->ST500LT012 ST320LT012. ST250LT012 500Gb 320gb 250gb 2014 5.4K rpm
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012
|-
| <!--Brand-->Seagate Thin SSHD 5400RPM Sata 2.5"
| <!--Model-->ST500LM000 500GB, ST500LM001, ST500LM020
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2013 up to 64M cache and with 8GB NAND Flash
|-
| <!--Brand-->Seagate MomentusThin-B Video 2.5 HDD
* 2014
* 2015
* 2016
* 2017
| <!--Model-->ST500VT000 500GB,
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2014
|-
| <!--Brand-->SEAGATE Baracuda 2.5 5400
| <!--Model-->ST2000LM015 (2Gb), ST1000LM049 (1Tb), ST500LM030 (500Gb)
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 5400rpm
|-
| <!--Brand-->Seagate Barracuda Pro
| <!--Model-->ST1000LM048 ST1000LM035
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> up to 128MB cache
|-
| <!--Brand-->SEAGATE FireCuda Compute 2.5
| <!--Model-->ST500LX025 ST1000LX015 ST2000LX001
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 8GB NAND Commercial Multilevel Cell (cMLC), 128MB buffer and 5400-RPM spindle speed up to 140 MB/s
|-
| <!--Brand-->Toshiba 2.5in
| <!--Model-->MQ04ABF100 1TB 5400 RPM 2018
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->TOSHIBA MQ01ACF
| <!--Model-->MQ01ACF050 500GB 7200rpm 2020
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|- style="background:lightgrey; text-align:center; font-weight:bold;"
| Brand
| Model
| Work MSDos
| Work GPT
| Tested Under
|-
| <!--Brand-->western digital wd blue 500G 8meg cache 5400rpm
* 2014 Rev T0
* 2015 Rev T1
| <!--Model-->wd5000lpvx
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->2012-2015 sequential 2MB block transfers 110 MB/s reading and writing -
|-
| <!--Brand-->Western Digital 2.5" WD Blue Slim
| <!--Model-->WD10SPCX 1TB Nov 2016
| <!--Work MSDos-->{{Yes|hdd under partition table msdos/pc, boots on bios machines, will not on uefi machine}}
| <!--Work GPT-->{{Unk|untested hdd under gpt partition protocol scheme, not booting on uefi}}
| <!--Tested under-->AROS One 1.8 USB
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD5000LUCX 500Gb 5400rpm 16mb cache Rev Y0
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under--> 2017 Malaysia
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
====9.5mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu
| <!--Model-->MHW2040BH
| <!--Work-->
| <!--Tested under--> 40gig
|-
| <!--Brand-->Fujitsu
| <!--Model-->MHY2080BH
| <!--Work-->
| <!--Tested under--> 80gig
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Fujitsu
| MHW2120B
| {{yes}}
| Icaros Desktop 1.4
|-
| <!--Brand-->Hitachi Global Storage Technologies HGST bought by WD mid-2012 5K1000-1000
| <!--Model-->HTS721010A9E630
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Hitachi Global Storage Technologies HGST bought by WD mid-2012 5K1000-1000
| <!--Model-->HTS541010A9E662 type TS5SAF100
| <!--Work-->
| <!--Tested under--> 5400rpm
|-
| <!--Brand-->Hitachi Travelstar 5K500.B-320
| <!--Model-->HTS545025B9SA02 HTS545032B9A300 HTS545040B9A300 HTS545050B9A300 250Gb 320Gb 400Gb 500Gb 5400rpm
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Hitachi Global Storage Technologies HGST 1TB 7200rpm
| <!--Model-->HTS721010A9E630
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung bought by Seagate late 2011
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung Spinpoint with Seagate HD REV A (Jan 2014)
| <!--Model-->ST1000LM024
| <!--Work-->
| <!--Tested under--> , Advanced Format (AF)
|-
| <!--Brand-->Samsung Spinpoint with Seagate 9.5mm
* 2013 Rev A HN-M500MBB/I
* 2014 Rev B HN-M500MBB/SP4
* 2015 Rev B HN-M500MBB/P4C
| <!--Model-->ST500LM012 (500M)
| <!--Work-->
| <!--Tested under--> , Advanced Format (AF)
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate Momentus 5400.3
| <!--Model-->ST9160821AS
| <!--Work-->
| <!--Tested under--> 160gig
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate SSHD 1t
| <!--Model-->ST1000LM014, ST1000LM028, ST1000LM015
| <!--Work-->
| <!--Tested under--> 8g nand flash
|-
| <!--Brand-->Seagate SSHD 1T
| <!--Model-->ST1000LX001
| <!--Work-->
| <!--Tested under--> 32G nand flash
|-
| <!--Brand-->Toshiba
| <!--Model-->MK2555GSX HDD2H24
| <!--Work-->
| <!--Tested under--> 250g 5400rpm
|-
| <!--Brand-->Toshiba
| <!--Model-->MK5065GSX - 500GB 5400RPM SATA 3Gb/s 8MB Cache 2.5-Inch
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba
| <!--Model-->MKxx59GSXP, eg Toshiba MK6459GSXP 640GB 2011
| <!--Work-->{{yes}}
| <!--Tested under-->Icaros 2.2 with uses Advanced Format (AF) in 4,096 bytes per sector. Compatibility with legacy, 512 bytes through AF emulation techniques, called 512e
|-
| <!--Brand-->Toshiba (2013 to 2016)
| <!--Model-->MQ01ABD100
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba (2015 to 2020)
*2013
*2014
*2015 AA50/AX0D5A
*2016 AA60/AX0E1A
*
*2017 AGM AA01/AX002V
*2018 AGS AA70/AX0G1A
*2020 AA71/AX0G1A
| <!--Model-->MQ01ABD050 500meg
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba
| <!--Model-->MQ04ABF100 1TB 5400 RPM 2013
| <!--Work-->{{Yes}}
| <!--Tested under-->
|-
| <!--Brand-->TOSHIBA
| <!--Model-->MQ04ABD200 2TB 5400 RPM 128MB Cache SATA 6.0Gb/s
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD7500BPVX 2013
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->WESTERN DIGITAL 1TB 2.5" SATA DRIVE 5400 rpm, 8MB cache
| <!--Model-->WD10JPVX-80JC3T0 (OCT 2014)
| <!--Work-->
| <!--Tested under--> , uses Advanced Format (AF)
|-
| <!--Brand-->WDC Western Digital Blue 1TB SATA 2.5" Hard Drive 5400 rpm, 8MB cache
| <!--Model-->WD10JPVX-08JC3T6 (Jun 2017)
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD10JPCX 1Tb
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital
* 2019
| <!--Model-->WD10JUCT 1TB (1000GB) 2019
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->WD Western Digital Scorpio Black
* 2010
* 2014
| <!--Model-->WD5000BEKT, WD5000BPKX-22HPJT0, WD5000BPKT,
| <!--Work-->
| <!--Tested under--> 16m cache, 7200rpm thailand then malaysia
|-
| <!--Brand-->WD Western Digital Black
* 2016
| <!--Model-->WD2500LPLX, WD3200LPLX, WD5000LPLX SMR: WD5000LPSX, WD10SPSX
| <!--Work-->
| <!--Tested under--> 32m cache , 7200rpm SATA-III malaysia
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== SATA 2.5in NON-Laptop Hard Disks ===
====11mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Fujitsu 160GB 250GB 300GB
| <!--Model-->MHX2160BT, MHX2250BT, MHX2300BT
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->TP00640GB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
====12.5mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
====15mm====
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate 1TB IBM System X 15mm 2.5" SATA
| <!--Model-->ST91000640NS 81Y9731
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== SATA Laptop Optical Drives ===
Tested in usb port not hub with
*
*13fd:0840 Initio Corporation INIC-1618L SATA
*
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->HL-DT-ST DVDRAM
| <!--Model-->GSA T50L
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT10N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2008 5v 12.7mm
|-
| <!--Brand-->HL Data Storage BD-Rom DVD Rewriter
| <!--Model-->CT10N AFCK101 LGE-DMCT10A(B)
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 5v 12.7mm fails early
|-
| <!--Brand-->Hitachi LG
| <!--Model-->GT20L
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009/2010 5v 1.3A 12.7mm
|-
| <!--Brand-->HL Hitachi / LG
| <!--Model-->GT30N GT32N GT30L
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 12.7mm
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT40N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2011 5v 12.7mm
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT50N GT51N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 5v 12.7mm
|-
| <!--Brand-->HL Data Storage
| <!--Model-->GT90N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2013 5v 12.7mm
|-
| <!--Brand-->HL
| <!--Model-->GU70N (HP/Dell),
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 5v 1.8A 9.5mm
|-
| <!--Brand-->HL
| <!--Model-->GUD0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 5v 1.8A 9.5mm
|-
| <!--Brand-->
| <!--Model-->GTA0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->HLDS Super Multi DVD Writer
*Rev 101
*rev 102 2015 factory GH
| <!--Model-->GUC0N (ALOK113) MSIP-REM-HLD-GUA0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 9.5mm - flaky and dies quickly -
|-
| <!--Brand-->HL Data
| <!--Model-->GTC0N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2016 12.7mm 5V 1.8a -
|-
| <!--Brand-->HLDS
| <!--Model-->BU20N (S05JH) KCC-REM-HLD-BU10N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2016 9.5mm
|-
| <!--Brand-->HLDS Super Multi DVD Writer
| <!--Model-->GUD1N (S05JH) (S05NT) KCC-REM-HLD-GU90N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2017-2018 9.5mm 5v 1.8a - slow access -
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Panasonic
| <!--Model-->Uj870a Uj880 UJ890
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8A0
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Panasonic MATSHITA 12.7mm SATA DVD
| <!--Model-->UJ8B0 (Asus K53S),
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2011 12.7mm 5v 1.5a
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8B1
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2011 5v 1.5a
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8C0, UJ8C1, UJ8C2 9.5mm,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 2013 5v 1.6a
|-
| <!--Brand-->Panasonic Precision Devices Co Ltd
| <!--Model-->UJ8D0, UJ8D1 KCC-REM-PPD-UJ8D1 HP 657534-TC2,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2013 ok lifeline,
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8E2Q
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 9.5mm
|-
| <!--Brand-->Panasonic
| <!--Model-->UJ8FB
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 5v 1.5a 9.5mm
|-
| <!--Brand-->Panasonic Blu-Ray DVD Writer Slimline
| <!--Model-->UJ260
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->PLSD
| <!--Model-->DC-8A2SH,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 12.7mm
|-
| <!--Brand-->PLSD
| <!--Model-->DU-8A3S
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->PLSD
| <!--Model-->DU-8A4SH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Philips Lite-On
| <!--Model-->DS-8A5LH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.5mm
|-
| <!--Brand-->Philips Lite-On DVD-ROM
| <!--Model-->DS-8DBSH1148
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 12.5mm
|-
| <!--Brand-->Philips Lite-On
| <!--Model-->DU-8A6SH (HP)
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2015 5v 1.5A 9.5mm
|-
| <!--Brand-->Philips and LiteOn
| <!--Model-->DS-8A8SH118C KCC-REM-PLD-DS-8A8LH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 5v 1.5a 12.7mm
|-
| <!--Brand-->PLSD
| <!--Model-->DS-8A9SH DS8A9SH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.7mm
|-
| <!--Brand-->PLSD
| <!--Model-->DS-8ABSH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.7mm
|-
| <!--Brand-->PLSD DVD/CD Rewritable Drive
| <!--Model-->DU-8A5LH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2016 9.5mm 5v 1.5a -
|-
| <!--Brand-->PLSD
| <!--Model-->DU-8ACSH
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->PLSD Philips
| <!--Model-->da-8aesh11b, DA-8AESH-24B
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2019 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->Pioneer
| <!--Model-->DVR-TD09TBG
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->Sony
| <!--Model-->AD-7580s, AD-7581s SOK-AD-7580S(B), AD-7583s,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2008-2010 5V 1.5A
|-
| <!--Brand-->Sony Optiarc SATA DVD
| <!--Model-->AD-7561S, AD-7560S
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 12.7 MM
|-
| <!--Brand-->Sony Optiarc
| <!--Model-->AD-7585H
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 12.7mm cleaning the laser lens inside the drive with a liquid lens cleaner. Also check the lens carrier slides freely from one extreme to the other inside the drive without sticking
|-
| <!--Brand-->Sony
| <!--Model-->AD7590s, AD-7591s,
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Sony
| <!--Model-->AD-7700s, AD-7710h, AD-7701H, AD-7703S
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Sony Optiarc
| <!--Model-->AD-7760H
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2012 5v 1.5A 12.7mm
|-
| <!--Brand-->Sony
| <!--Model-->AD-7711H AD-7740H
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 12.5mm 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->Toshiba Samsung
| <!--Model-->SN-S208B Ver BB Rev 00
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2009 12.7mm
|-
| <!--Brand-->Toshiba TSSTCorp Samsung
| <!--Model-->SN-S083C Ver C Rev 03 /BEBE
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 5v 1.5a 12.7 mm
|-
| <!--Brand-->Toshiba Samsung Storage Technology Corp
| <!--Model-->TS-L633
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2010 5v 1.3A 12.7mm
|-
| <!--Brand-->Toshiba Samsung
| <!--Model-->SN-208FB/BEBE
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2014 12.7mm 5v 1.3a - tracking issues, feels cheap and flaky in use -
|-
| <!--Brand-->TSST Toshiba Samsung Corp.
| <!--Model-->SU-208FB/TFJF KCC-REM-TSS-SU208
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2013-2014 9.5mm 5v 1.3a -
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution--> 9.5mm
|-
| <!--Brand-->
*LG BU40N
*LG WP50NB40
*LG BP50NB40
*ASUS BW-16D1HT
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
*LG BU50N
*LG WH16NS40
*LG WH14NS40
*ASUS BW-16D1X-U
*ASUS SBW-06D5H-U
*Verbatim 43889
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|}
=== [https://www.backblaze.com/cloud-storage/resources/hard-drive-test-data SATA Desktop 3.5inch Hard Disks] ===
Datasheets with the SMR (overlapped packing Shingled Magnetic Recording) and CMR (faster Conventional Magnetic Recording) parts
<pre>
WD: https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/western-digital/product/internal-drives/wd-blue-hdd/product-brief-western-digital-wd-blue-pc-hdd.pdf
Seagate: https://www.seagate.com/content/dam/seagate/migrated-assets/www-content/datasheets/pdfs/3-5-barracudaDS1900-14-2007US-en_US.pdf
Toshiba: https://storage.toshiba.com/docs/support-docs/P300-SalesSheet_English_Web_r2.pdf
</pre>
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->HGST Travelstar
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Seagate Barracuda 7200.9
| ST3160812AS, ST3160212AS
| {{yes}}
| Icaros Desktop 1.5.2 - Capacity: 160 GB - Speed: 7200RPM - Cache: 8 MB - Interface: SATA2
|-
| <!--Brand-->Seagate Barracuda LP Green 5400rpm
| <!--Model-->ST1000DL002 1TB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate SkyHawk Surveillance HDD ST4000VX000 Series
| <!--Model-->ST4000VX013
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate Baracuda Compute
| <!--Model-->ST500DM009 2F110A-500 / 02PKVY / 2PKVY (500m),
| <!--Work-->
| <!--Tested under--> - SATA III (6Gb/s) - Format 3.5" - 32MB Cache
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate CMR
| <!--Model-->ST1000DM010 ST500DM009
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate 2TB SMR
| <!--Model-->ST2000DM008
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate SMR
| <!--Model-->ST8000DM004 ST6000DM003 ST4000DM004 ST3000DM007 ST2000DM005
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba 5400rpm
| <!--Model-->HDWD220
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba 7200rpm
| <!--Model-->HDWD320
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Toshiba P300 CMR
| <!--Model-->HDWD130XZSTA HDWD130UZSVA, HDWD120XZSTA HDWD120UZSVA, HDWD110XZSTA HDWD110UZSVA
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital 2010
| <!--Model-->WD20EARS Green 2TB 5400rpm 64mb cache
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital WD
| <!--Model-->WD20EFRX WD40EFRX 5400rpm
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital
| <!--Model-->WD4002FFWD
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital CMR
| <!--Model-->WD80EAAZ WD80EAZZ
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital CMR
| <!--Model-->WD20EARZ
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital CMR
| <!--Model-->WD40EZAZ, WD60EZAZ
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital SMR
| <!--Model-->WD20EARZ, WD20EZAZ - 2TB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Western Digital SMR
| <!--Model-->WD40EZAX - 4TB, WD60EZAX - 6TB, WD80EZAX - 8TB
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== SATA Desktop Optical Drives ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
|}
==PATA==
=== IDE Desktop Hard Disks ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Fujitsu
| M1624TAU
| {{yes}}
| Icaros Desktop 1.5.2
|-
| IBM
| DHEA-38451
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Samsung
| SP40A2H
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Seagate
| ST3160215ACE
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Seagate
| ST32122A
| {{maybe}}
| Icaros Desktop 1.5.2
|-
| Western Digital
| WD102AA
| {{yes}}
| Icaros Desktop 1.5.2
|-
| Western Digital
| WD200
| {{maybe}}
| Icaros Desktop 1.5.2
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== IDE Laptop Hard Disks ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Fujitsu
| MHV2040AH
| {{yes}}
| Icaros Desktop 1.4
|-
| <!--Brand-->HGST Hitachi Travelstar
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Samsung
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->Seagate
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| Toshiba
| MK2011GAP
| {{yes}}
| Icaros Desktop 1.5.2
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
=== IDE Desktop Optical Drives ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested under-->
|-
| Compaq
| CR-594-BCQ
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Compaq
| CRD-8322B(CP1)
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Compaq
| CRD-8484B(AM2A)
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Compaq
| LTN-485
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Creative
| CD220E
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Hitachi-LG
| GDA-4120B
| {{yes}}
| {{no}}
| Icaros Desktop 1.5.2
|-
| LG
| CRD-8400B
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Lite-On
| LTN486S
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Mitsumi
| CRMC-FX4830T
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| NEC
| CDR-1700B
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| NEC
| DV-5800A
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| NEC
| ND-2100A
| {{yes}}
| {{no}}
| Icaros Desktop 1.5.2
|-
| NEC
| NR-7900A
| {{yes}}
| {{no}}
| Icaros Desktop 1.5.2
|-
| Philips
| DVD8631
| {{no}}
| {{no}}
| Icaros Desktop 2.2
|-
| Samsung
| SC-148
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Samsung
| SCR-2030
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Samsung
| SM-348B
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Sony
| CDU601
| {{yes}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Sony
| CDU611-25
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| Toshiba
| SD-M1202
| {{no}}
| {{n/a}}
| Icaros Desktop 1.5.2
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested under-->
|}
=== IDE Laptop Optical Drives ===
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Reads
! width="10%" |Writes
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->H-L Hitachi LG
| <!--Model-->GCC-4244N
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2006
|-
| Hitachi-LG
| GCCT10N
| {{yes}}
| {{Maybe|FryingPan WRITE seems to have no problem with data sections (track 1) - combos with audio sections (track 2) white screens aros eventually}}
| AspireOS Xenon with 25th Jan 2014 self update kernel
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| Philips
| SDR089
| {{yes}}
| {{unk}}
| Icaros Desktop 1.4
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| TSSTcorp
| TS-L462C TS-L462D
| {{yes}}
| {{unk}}
| 2005 Icaros Desktop 2.2
|-
| TSSTcorp
| TS-L632H
| {{yes}}
| {{unk}}
| Icaros Desktop 1.4
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| Sony
| DW-Q58A
| {{yes}}
| {{unk}}
| Icaros Desktop 2.2
|-
| Sony Optiarc
| AD-7540A
| {{yes}}
| {{unk}}
| Icaros Desktop 2.2
|-
| <!--Brand-->Sony
| <!--Model-->Optiarc DVD RW AD-7560A IDE
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->Sony
| <!--Model-->AD-7590A
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->2008 12.7mm
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Reads-->
| <!--Writes-->
| <!--Tested Distribution-->
|}
== SCSI ==
{| class="wikitable" width="100%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
| <!--Brand-->
| <!--Model-->
| <!--Work-->
| <!--Tested under-->
|-
|}
{| class="wikitable" width="70%"
! width="20%" |Brand
! width="20%" |Model
! width="10%" |Works MSDos/PC Bios
! width="10%" |Works GPT/UEFI
! width="20%" |Tested Distribution
|-
| <!--Brand-->
| <!--Model-->
| <!--Work MSDos-->
| <!--Work GPT-->
| <!--Tested under-->
|-
|}
NVMe accepts up to 64,000 queues with up to 64,000 commands each.
brzdzupdb6ajlpnts2uy18x8ylk8fcn
History of China
0
291938
4641597
4641228
2026-06-29T01:31:05Z
一隻北極熊
3609960
4641597
wikitext
text/x-wiki
{{info|This is a freshly started book. It does not have enough information for readers to have a brief idea on this subject. If you know this subject well, please [[w:plunge forward|plunge forward]] and help it become a better book!}}<br />
Welcome to the ''History of China'' Wikibook!
= Before you use this book=
Here are some basic knowledge you need to know before learning Chinese history.<br>
[[History of China/Introduction|Introduction]] {{stage|00%}}
= Prehistoric =
[[History of China/Prehistoric|Prehistoric]]
= Kingdom (22<sup>nd</sup> century B.C.~ 222 B.C.)=
[[History of China/The Xia Dynasty|Xia Dynasty]]{{decistage|1|}}<br>
[[History of China/The Shang Dynasty|Shang Dynasty]]{{decistage|1|}}<br>
[[History of China/Zhou Dynasty|Zhou Dynasty]]{{stage|00%}}<br>
= Imperial (221 B.C.~ 1911 A.D.)=
[[History of China/The Qin Dynasty|Qin Dynasty]]{{decistage|3|}}<br>
[[History of China/Han Dynasty|Han Dynasty]]{{stage|00%}}<br>
[[History of China/The Three Kingdoms Period|The Three Kingdoms Period]]{{stage|00%}}<br>
[[History of China/Jin Dynasty|Jin Dynasty]]{{stage|00%}}<br>
[[History of China/The Southern and Northern Dynasties|The Southern and Northern Dynasties]]{{stage|00%}}<br>
[[History of China/The Sui Dynasty|Sui Dynasty]]{{decistage|1|}}<br>
[[History of China/The Tang Dynasty|Tang Dynasty]]{{decistage|1|}}<br>
[[History of China/The Five Dynasties and Ten Kingdoms|The Five Dynasties and Ten Kingdoms]]{{stage|00%}}<br>
[[History of China/Liao Dynasty|Liao Dynasty]]{{stage|00%}}<br>
[[History of China/Song Dynasty|Song Dynasty]]{{stage|00%}}<br>
[[History of China/Western Xia Dynasty|Western Xia Dynasty]]{{stage|00%}}<br>
[[History of China/Jīn Dynasty|Jīn Dynasty]]{{stage|00%}}<br>
[[History of China/Yuan Dynasty|Yuan Dynasty]]{{stage|00%}}<br>
[[History of China/Ming Dynasty|Ming Dynasty]]{{stage|00%}}<br>
[[History of China/Qing Dynasty|Qing Dynasty]]{{stage|00%}}<br>
= Republic (since 1912 A.D.)=
[[History of China/The Republic of China|The Republic of China]]{{stage|00%}}<br>
[[History of China/History of PRC|The People's Republic of China]]{{decistage|1|}}
= Appendix=
= Related Books=
*[[Chinese History]]
*[[Taiwan history]]
<!--Stage Marks will later be removed except for the main one-->
{{Shelves|Asian history}}
{{Status|0%}}
<noinclude>
__NOEDITSECTION__
[[ja:中国史]]
[[zh:中国历史]]
[[bn:চীনের ইতিহাস]]
</noinclude>
ctam2fg1cfeydytpjt0e0a7z7xgv0mz
4641653
4641597
2026-06-29T09:21:55Z
Xania
40302
4641653
wikitext
text/x-wiki
{{info|This is a freshly started book. It does not have enough information for readers to have a brief idea on this subject. If you know this subject well, please [[w:plunge forward|plunge forward]] and help it become a better book!}}<br />
Welcome to the ''History of China'' Wikibook!
= Before you use this book=
Here is some basic knowledge you need to know before learning Chinese history.<br>
[[History of China/Introduction|Introduction]] {{stage|00%}}
= Prehistoric =
[[History of China/Prehistoric|Prehistoric]]
= Kingdom (22<sup>nd</sup> century B.C.~ 222 B.C.)=
[[History of China/The Xia Dynasty|Xia Dynasty]]{{decistage|1|}}<br>
[[History of China/The Shang Dynasty|Shang Dynasty]]{{decistage|1|}}<br>
[[History of China/Zhou Dynasty|Zhou Dynasty]]{{stage|00%}}<br>
= Imperial (221 B.C.~ 1911 A.D.)=
[[History of China/The Qin Dynasty|Qin Dynasty]]{{decistage|3|}}<br>
[[History of China/Han Dynasty|Han Dynasty]]{{stage|00%}}<br>
[[History of China/The Three Kingdoms Period|The Three Kingdoms Period]]{{stage|00%}}<br>
[[History of China/Jin Dynasty|Jin Dynasty]]{{stage|00%}}<br>
[[History of China/The Southern and Northern Dynasties|The Southern and Northern Dynasties]]{{stage|00%}}<br>
[[History of China/The Sui Dynasty|Sui Dynasty]]{{decistage|1|}}<br>
[[History of China/The Tang Dynasty|Tang Dynasty]]{{decistage|1|}}<br>
[[History of China/The Five Dynasties and Ten Kingdoms|The Five Dynasties and Ten Kingdoms]]{{stage|00%}}<br>
[[History of China/Liao Dynasty|Liao Dynasty]]{{stage|00%}}<br>
[[History of China/Song Dynasty|Song Dynasty]]{{stage|00%}}<br>
[[History of China/Western Xia Dynasty|Western Xia Dynasty]]{{stage|00%}}<br>
[[History of China/Jīn Dynasty|Jīn Dynasty]]{{stage|00%}}<br>
[[History of China/Yuan Dynasty|Yuan Dynasty]]{{stage|00%}}<br>
[[History of China/Ming Dynasty|Ming Dynasty]]{{stage|00%}}<br>
[[History of China/Qing Dynasty|Qing Dynasty]]{{stage|00%}}<br>
= Republic (since 1912 A.D.)=
[[History of China/The Republic of China|The Republic of China]]{{stage|00%}}<br>
[[History of China/History of PRC|The People's Republic of China]]{{decistage|1|}}
= Appendix=
= Related Books=
*[[Chinese History]]
*[[Taiwan history]]
<!--Stage Marks will later be removed except for the main one-->
{{Shelves|Asian history}}
{{Status|0%}}
<noinclude>
__NOEDITSECTION__
[[ja:中国史]]
[[zh:中国历史]]
[[bn:চীনের ইতিহাস]]
</noinclude>
e2h8hdqn4nrot6yxr2xu97eeyh1sur4
History of China/The Qin Dynasty
0
291944
4641490
3553166
2026-06-28T13:06:53Z
一隻北極熊
3609960
4641490
wikitext
text/x-wiki
'''Qin Dynasty''' (秦朝) was the fourth dynasty in Chinese history, as well as the first imperial dynasty (ruled by an emperor instead of a king) in ancient China. From 221 B.C. to 207 B.C., Qin Dynasty ruled over China for 15 years.
==Establishment==
===Developing===
Before the establishment of Qin Dynasty, Qin was one of the states under the rule of Zhou Dynasty. During the last few centuries' rule (7th century B.C.~ 3rd century B.C.) of Zhou Dynasty, the states had extremely high autonomy, had their own kings, and completely ignored the central government of Zhou (the king of Zhou). Wars always occurred between states. The state of Qin, lying in the west of China, gradually became one of the seven strongest states in 5th~ 3th centuries B.C. through many wars. After the reforms made by the chanceller Shang Yang (396 B.C.~ 338 B.C.) in 356 and 350 B.C., Qin became even sronger.
===Conquering other states===
In 306 B.C., King Zhaoxiang of Qin started his reign and became the 28th ruler of the state of Qin. In 256 B.C., the central government of Zhou, together with the other six states, planned to started a war against Qin. However, the plan didn't work because the six states didn't keep their promise. King Zhaoxiang of Qin was very angry at the news. He then called on his army to invade Luoyang, the capital of Zhou. Zhou's government quickly surrendered. King Nan of Zhou died in the same year. After the death of the king of Zhou, Qin took down Luoyang, ending the 879 years' rule of Zhou Dynasty.<br>
In 230 B.C., Qin invaded Han. The king of Han, Han An, surrendered. Han became the first of the seven states to be conquered by Qin. 229 B.C., Qin attacked Zhao. The next year, the king Zhao Qian surrendered. 226 B.C., Qin took down Ji, the capital of Yan. Yan moved its capital to Liaodong. 225 B.C., Qin attacked Wei, the king Wei Jia surrendered. 224 B.C. Qin attacked Chu. The next year, its capital Shouchun fell, the king Xiong Fuchu was captured. 222 B.C., Yan's temporary capital Liaodong fell, the king Ji Xi was captured. 221 B.C., Qin attacked Qi, the king Tian Jian surrendered. Qi became the last state to be conquered by Qin.
==First empire of China==
After uniting all the states, Qin dynasty build the first version of the Great wall of China. Also, they also conquered other states in the south to expand their territory. However, The Qin empire had very strict laws, this caused the a rebellion in the final years of the empire.
==Rebellion==
In the final years of the empire, Chen Sheng and Wu Guang started a rebellion in the country. However, after capturing parts of the country, Cheng Sheng, the leader of the main rebellion , was killed by a traitor. Meanwhile, Xiang Yu and Liu Bang both started a rebellion in the empire. After Xiang Yu march in to the Qin Capital, Xianyang, the country is split in half. Two major powers are Liu Bang's "Han" and Xiang Yu's "Chu".
{{BookCat}}
fyrfyu9krak41phglgd23ddk8e8f2al
Structural Biochemistry/Volume 4
0
360967
4641474
2952771
2026-06-28T12:06:48Z
Dirk Hünniger
343292
4641474
wikitext
text/x-wiki
= Translational Science =
{{:Structural_Biochemistry/Translational_Science}}
= Diabetes =
{{:Structural_Biochemistry/Diabetes}}
= Alzheimers =
{{:Structural_Biochemistry/Alzheimers}}
= Personalized Medicine =
{{:Structural_Biochemistry/Personalized_Medicine}}
= Model Organisms =
{{:Structural_Biochemistry/Model_Organisms}}
= Bridging the gap between basic and clinical investigation =
{{:Structural_Biochemistry/Bridging_the_gap_between_basic_and_clinical_investigation}}
= Histology =
{{:Structural_Biochemistry/Histology}}
= Types of Stains =
{{:Structural_Biochemistry/Types_of_Stains}}
= H and E =
{{:Structural_Biochemistry/H_and_E}}
= Neuroscience =
{{:Structural_Biochemistry/Neuroscience}}
= Neurons =
{{:Structural_Biochemistry/Neurons}}
= Action Potential =
{{:Structural_Biochemistry/Action_Potential}}
= Resting Potential =
{{:Structural_Biochemistry/Resting_Potential}}
= Signaling Within Neurons =
{{:Structural_Biochemistry/Signaling_Within_Neurons}}
= Glial Cells =
{{:Structural_Biochemistry/Glial_Cells}}
= Neurochemistry =
{{:Structural_Biochemistry/Neurochemistry}}
= Neurotransmitters =
{{:Structural_Biochemistry/Neurotransmitters}}
= Axonal Transport and Disease =
{{:Structural_Biochemistry/Axonal_Transport_and_Disease}}
= Multiple Sclerosis =
{{:Structural_Biochemistry/Multiple_Sclerosis}}
= Synapses =
{{:Structural_Biochemistry/Synapses}}
= Channelopathies =
{{:Structural_Biochemistry/Channelopathies}}
= Phases of Brain Development =
{{:Structural_Biochemistry/Phases_of_Brain_Development}}
= Neural Induction =
{{:Structural_Biochemistry/Neural_Induction}}
= Proliferation =
{{:Structural_Biochemistry/Proliferation}}
= Migration =
{{:Structural_Biochemistry/Migration}}
= Differentiation =
{{:Structural_Biochemistry/Differentiation}}
= Synaptogenesis =
{{:Structural_Biochemistry/Synaptogenesis}}
= Stabilization =
{{:Structural_Biochemistry/Cell_Death/Stabilization}}
= Synaptic Rearrangement =
{{:Structural_Biochemistry/Synaptic_Rearrangement}}
= Neurodegeneration =
{{:Structural_Biochemistry/Neurodegeneration}}
= Neuroglobin =
{{:Structural_Biochemistry/Neuroglobin}}
= Motor Systems =
{{:Structural_Biochemistry/Motor_Systems}}
= Basal Ganglia =
{{:Structural_Biochemistry/Basal_Ganglia}}
= Cerebellum =
{{:Structural_Biochemistry/Cerebellum}}
= Systems Biology =
{{:Structural_Biochemistry/Systems_Biology}}
= Analysis of Programmed Cell Death =
{{:Structural_Biochemistry/Systems_Biology/Analysis_of_Programmed_Cell_Death}}
= Bioinformatics =
{{:Structural_Biochemistry/Bioinformatics}}
= Homology =
{{:Structural_Biochemistry/Bioinformatics/Homology}}
= Sequences Alignments =
{{:Structural_Biochemistry/Bioinformatics/Sequences_Alignments}}
= Structural Alignments =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments}}
= Advances and pitfalls of protein structural alignment =
{{:Structural_Biochemistry/Advances_and_pitfalls_of_protein_structural_alignment}}
= Programs Used For Structural Alignment =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment}}
= DALI =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/DALI}}
= Combinatorial Extension =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/Combinatorial_Extension}}
= SSAP =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/SSAP}}
= GANGSTA+ =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/GANGSTA+}}
= MAMMOTH =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/MAMMOTH}}
= RAPIDO =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/RAPIDO}}
= SABERTOOTH =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/SABERTOOTH}}
= TOPOFIT =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/TOPOFIT}}
= RNA Structural Alignment =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/RNA_Structural_Alignment}}
= Evolution Trees =
{{:Structural_Biochemistry/Bioinformatics/Evolution_Trees}}
= Bioimaging =
{{:Structural_Biochemistry/Bioimaging}}
= Combinatorial Chemistry =
{{:Structural_Biochemistry/Bioinformatics/Combinatorial_Chemistry}}
= Comparative Genomics =
{{:Structural_Biochemistry/Bioinformatics/Comparative_Bioinformatics}}
= Transgenic Animal =
{{:Structural_Biochemistry/Transgenic_Animal}}
= Regulation =
{{:Structural_Biochemistry/Protein_function/Regulation}}
= Protein Fold Recognition =
{{:Structural_Biochemistry/Bioinformatics/Protein_Fold_Recognition}}
= Bioinformatics SIRCh Link for Bioinformateics] (Selected Internet Resources) =
#[http://en.wikibooks.org/wiki/Chemical_Information_Sources/SIRCh/Bioinformatics_SIRCh_Link_for_Bioinformateics]_(Selected_Internet_Resources)
= Fold.it =
{{:Structural_Biochemistry/Fold.it}}
= Molecular Modeling =
{{:Structural_Biochemistry/Molecular_Modeling}}
= Molecular Docking =
{{:Structural_Biochemistry/Molecular_Modeling/Molecular_Docking}}
= Classical Molecular Dynamics =
{{:Structural_Biochemistry/Molecular_Modeling/Molecular_Dynamics}}
= Interactive 3D Model within a PDF =
{{:Structural_Biochemistry/Molecular_Modeling/Interactive_3D_Model_within_a_PDF}}
= Mental Inertia =
{{:Structural_Biochemistry/Mental_Inertia_in_the_Biological_Sciences/}}
= Incorrectly Established Results =
{{:Structural_Biochemistry/Incorrectly_Established_Results}}
= Incorrect Understanding of a Mechanism Action =
{{:Structural_Biochemistry/Incorrect_Understanding_of_a_Mechanism_Action}}
= Unique Properties =
{{:Structural_Biochemistry/Unique_Properties}}
= pH =
{{:Structural_Biochemistry/pH}}
= Buffer =
{{:Structural_Biochemistry/Buffer}}
= Osmosis =
{{:Structural_Biochemistry/Osmosis}}
= Polarity =
{{:Structural_Biochemistry/Polarity}}
= Water Gas Reaction =
{{:Structural_Biochemistry/Water_Gas_Reaction}}
4lge94sdbngwnj0uqp5m6oqjmo0qub6
4641551
4641474
2026-06-28T16:32:42Z
Dirk Hünniger
343292
4641551
wikitext
text/x-wiki
= Translational Science =
{{:Structural_Biochemistry/Translational_Science}}
= Diabetes =
{{:Structural_Biochemistry/Diabetes}}
= Alzheimers =
{{:Structural_Biochemistry/Alzheimers}}
= Personalized Medicine =
{{:Structural_Biochemistry/Personalized_Medicine}}
= Model Organisms =
{{:Structural_Biochemistry/Model_Organisms}}
= Bridging the gap between basic and clinical investigation =
{{:Structural_Biochemistry/Bridging_the_gap_between_basic_and_clinical_investigation}}
= Histology =
{{:Structural_Biochemistry/Histology}}
= Types of Stains =
{{:Structural_Biochemistry/Types_of_Stains}}
= H and E =
{{:Structural_Biochemistry/H_and_E}}
= Neuroscience =
{{:Structural_Biochemistry/Neuroscience}}
= Neurons =
{{:Structural_Biochemistry/Neurons}}
= Action Potential =
{{:Structural_Biochemistry/Action_Potential}}
= Resting Potential =
{{:Structural_Biochemistry/Resting_Potential}}
= Signaling Within Neurons =
{{:Structural_Biochemistry/Signaling_Within_Neurons}}
= Glial Cells =
{{:Structural_Biochemistry/Glial_Cells}}
= Neurochemistry =
{{:Structural_Biochemistry/Neurochemistry}}
= Neurotransmitters =
{{:Structural_Biochemistry/Neurotransmitters}}
= Axonal Transport and Disease =
{{:Structural_Biochemistry/Axonal_Transport_and_Disease}}
= Multiple Sclerosis =
{{:Structural_Biochemistry/Multiple_Sclerosis}}
= Synapses =
{{:Structural_Biochemistry/Synapses}}
= Channelopathies =
{{:Structural_Biochemistry/Channelopathies}}
= Phases of Brain Development =
{{:Structural_Biochemistry/Phases_of_Brain_Development}}
= Neural Induction =
{{:Structural_Biochemistry/Neural_Induction}}
= Proliferation =
{{:Structural_Biochemistry/Proliferation}}
= Migration =
{{:Structural_Biochemistry/Migration}}
= Differentiation =
{{:Structural_Biochemistry/Differentiation}}
= Synaptogenesis =
{{:Structural_Biochemistry/Synaptogenesis}}
= Stabilization =
{{:Structural_Biochemistry/Cell_Death/Stabilization}}
= Synaptic Rearrangement =
{{:Structural_Biochemistry/Synaptic_Rearrangement}}
= Neurodegeneration =
{{:Structural_Biochemistry/Neurodegeneration}}
= Neuroglobin =
{{:Structural_Biochemistry/Neuroglobin}}
= Motor Systems =
{{:Structural_Biochemistry/Motor_Systems}}
= Basal Ganglia =
{{:Structural_Biochemistry/Basal_Ganglia}}
= Cerebellum =
{{:Structural_Biochemistry/Cerebellum}}
= Systems Biology =
{{:Structural_Biochemistry/Systems_Biology}}
= Analysis of Programmed Cell Death =
{{:Structural_Biochemistry/Systems_Biology/Analysis_of_Programmed_Cell_Death}}
= Bioinformatics =
{{:Structural_Biochemistry/Bioinformatics}}
= Homology =
{{:Structural_Biochemistry/Bioinformatics/Homology}}
= Sequences Alignments =
{{:Structural_Biochemistry/Bioinformatics/Sequences_Alignments}}
= Structural Alignments =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments}}
= Advances and pitfalls of protein structural alignment =
{{:Structural_Biochemistry/Advances_and_pitfalls_of_protein_structural_alignment}}
= Programs Used For Structural Alignment =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment}}
= DALI =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/DALI}}
= Combinatorial Extension =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/Combinatorial_Extension}}
= SSAP =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/SSAP}}
= GANGSTA+ =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/GANGSTA+}}
= MAMMOTH =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/MAMMOTH}}
= RAPIDO =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/RAPIDO}}
= SABERTOOTH =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/SABERTOOTH}}
= TOPOFIT =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/TOPOFIT}}
= RNA Structural Alignment =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/RNA_Structural_Alignment}}
= Evolution Trees =
{{:Structural_Biochemistry/Bioinformatics/Evolution_Trees}}
= Bioimaging =
{{:Structural_Biochemistry/Bioimaging}}
= Combinatorial Chemistry =
{{:Structural_Biochemistry/Bioinformatics/Combinatorial_Chemistry}}
= Comparative Genomics =
{{:Structural_Biochemistry/Bioinformatics/Comparative_Bioinformatics}}
= Transgenic Animal =
{{:Structural_Biochemistry/Transgenic_Animal}}
= Regulation =
{{:Structural_Biochemistry/Protein_function/Regulation}}
= Protein Fold Recognition =
{{:Structural_Biochemistry/Bioinformatics/Protein_Fold_Recognition}}
= Bioinformatics SIRCh Link for Bioinformateics] (Selected Internet Resources) =
#[http://en.wikibooks.org/wiki/Chemical_Information_Sources/SIRCh/Bioinformatics_SIRCh_Link_for_Bioinformateics]_(Selected_Internet_Resources)
= Fold.it =
{{:Structural_Biochemistry/Fold.it}}
= Molecular Modeling =
{{:Structural_Biochemistry/Molecular_Modeling}}
= Molecular Docking =
{{:Structural_Biochemistry/Molecular_Modeling/Molecular_Docking}}
= Classical Molecular Dynamics =
{{:Structural_Biochemistry/Molecular_Modeling/Molecular_Dynamics}}
= Interactive 3D Model within a PDF =
{{:Structural_Biochemistry/Molecular_Modeling/Interactive_3D_Model_within_a_PDF}}
= Mental Inertia =
{{:Structural_Biochemistry/Mental_Inertia_in_the_Biological_Sciences}}
= Incorrectly Established Results =
{{:Structural_Biochemistry/Incorrectly_Established_Results}}
= Incorrect Understanding of a Mechanism Action =
{{:Structural_Biochemistry/Incorrect_Understanding_of_a_Mechanism_Action}}
= Unique Properties =
{{:Structural_Biochemistry/Unique_Properties}}
= pH =
{{:Structural_Biochemistry/pH}}
= Buffer =
{{:Structural_Biochemistry/Buffer}}
= Osmosis =
{{:Structural_Biochemistry/Osmosis}}
= Polarity =
{{:Structural_Biochemistry/Polarity}}
= Water Gas Reaction =
{{:Structural_Biochemistry/Water_Gas_Reaction}}
qawsab1o9lzx2zb87dxdgpm2k37tvmu
4641554
4641551
2026-06-28T16:38:50Z
Dirk Hünniger
343292
4641554
wikitext
text/x-wiki
= Translational Science =
{{:Structural_Biochemistry/Translational_Science}}
= Diabetes =
{{:Structural_Biochemistry/Diabetes}}
= Alzheimers =
{{:Structural_Biochemistry/Alzheimers}}
= Personalized Medicine =
{{:Structural_Biochemistry/Personalized_Medicine}}
= Model Organisms =
{{:Structural_Biochemistry/Model_Organisms}}
= Bridging the gap between basic and clinical investigation =
{{:Structural_Biochemistry/Bridging_the_gap_between_basic_and_clinical_investigation}}
= Histology =
{{:Structural_Biochemistry/Histology}}
= H and E =
{{:Structural_Biochemistry/H_and_E}}
= Neuroscience =
{{:Structural_Biochemistry/Neuroscience}}
= Neurons =
{{:Structural_Biochemistry/Neurons}}
= Action Potential =
{{:Structural_Biochemistry/Action_Potential}}
= Resting Potential =
{{:Structural_Biochemistry/Resting_Potential}}
= Signaling Within Neurons =
{{:Structural_Biochemistry/Signaling_Within_Neurons}}
= Glial Cells =
{{:Structural_Biochemistry/Glial_Cells}}
= Neurotransmitters =
{{:Structural_Biochemistry/Neurotransmitters}}
= Axonal Transport and Disease =
{{:Structural_Biochemistry/Axonal_Transport_and_Disease}}
= Multiple Sclerosis =
{{:Structural_Biochemistry/Multiple_Sclerosis}}
= Synapses =
{{:Structural_Biochemistry/Synapses}}
= Channelopathies =
{{:Structural_Biochemistry/Channelopathies}}
= Phases of Brain Development =
{{:Structural_Biochemistry/Phases_of_Brain_Development}}
= Neural Induction =
{{:Structural_Biochemistry/Neural_Induction}}
= Proliferation =
{{:Structural_Biochemistry/Proliferation}}
= Migration =
{{:Structural_Biochemistry/Migration}}
= Differentiation =
{{:Structural_Biochemistry/Differentiation}}
= Synaptogenesis =
{{:Structural_Biochemistry/Synaptogenesis}}
= Stabilization =
{{:Structural_Biochemistry/Cell_Death/Stabilization}}
= Synaptic Rearrangement =
{{:Structural_Biochemistry/Synaptic_Rearrangement}}
= Neurodegeneration =
{{:Structural_Biochemistry/Neurodegeneration}}
= Neuroglobin =
{{:Structural_Biochemistry/Neuroglobin}}
= Motor Systems =
{{:Structural_Biochemistry/Motor_Systems}}
= Basal Ganglia =
{{:Structural_Biochemistry/Basal_Ganglia}}
= Cerebellum =
{{:Structural_Biochemistry/Cerebellum}}
= Systems Biology =
{{:Structural_Biochemistry/Systems_Biology}}
= Analysis of Programmed Cell Death =
{{:Structural_Biochemistry/Systems_Biology/Analysis_of_Programmed_Cell_Death}}
= Bioinformatics =
{{:Structural_Biochemistry/Bioinformatics}}
= Homology =
{{:Structural_Biochemistry/Bioinformatics/Homology}}
= Sequences Alignments =
{{:Structural_Biochemistry/Bioinformatics/Sequences_Alignments}}
= Structural Alignments =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments}}
= Advances and pitfalls of protein structural alignment =
{{:Structural_Biochemistry/Advances_and_pitfalls_of_protein_structural_alignment}}
= Programs Used For Structural Alignment =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment}}
= DALI =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/DALI}}
= Combinatorial Extension =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/Combinatorial_Extension}}
= SSAP =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/SSAP}}
= GANGSTA+ =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/GANGSTA+}}
= MAMMOTH =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/MAMMOTH}}
= RAPIDO =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/RAPIDO}}
= SABERTOOTH =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/SABERTOOTH}}
= TOPOFIT =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/Programs_Used_For_Structural_Alignment/TOPOFIT}}
= RNA Structural Alignment =
{{:Structural_Biochemistry/Bioinformatics/Structural_Alignments/RNA_Structural_Alignment}}
= Evolution Trees =
{{:Structural_Biochemistry/Bioinformatics/Evolution_Trees}}
= Bioimaging =
{{:Structural_Biochemistry/Bioimaging}}
= Combinatorial Chemistry =
{{:Structural_Biochemistry/Bioinformatics/Combinatorial_Chemistry}}
= Comparative Genomics =
{{:Structural_Biochemistry/Bioinformatics/Comparative_Bioinformatics}}
= Transgenic Animal =
{{:Structural_Biochemistry/Transgenic_Animal}}
= Regulation =
{{:Structural_Biochemistry/Protein_function/Regulation}}
= Protein Fold Recognition =
{{:Structural_Biochemistry/Bioinformatics/Protein_Fold_Recognition}}
= Bioinformatics SIRCh Link for Bioinformateics] (Selected Internet Resources) =
#[http://en.wikibooks.org/wiki/Chemical_Information_Sources/SIRCh/Bioinformatics_SIRCh_Link_for_Bioinformateics]_(Selected_Internet_Resources)
= Fold.it =
{{:Structural_Biochemistry/Fold.it}}
= Molecular Modeling =
{{:Structural_Biochemistry/Molecular_Modeling}}
= Molecular Docking =
{{:Structural_Biochemistry/Molecular_Modeling/Molecular_Docking}}
= Classical Molecular Dynamics =
{{:Structural_Biochemistry/Molecular_Modeling/Molecular_Dynamics}}
= Interactive 3D Model within a PDF =
{{:Structural_Biochemistry/Molecular_Modeling/Interactive_3D_Model_within_a_PDF}}
= Mental Inertia =
{{:Structural_Biochemistry/Mental_Inertia_in_the_Biological_Sciences}}
= Incorrectly Established Results =
{{:Structural_Biochemistry/Incorrectly_Established_Results}}
= Incorrect Understanding of a Mechanism Action =
{{:Structural_Biochemistry/Incorrect_Understanding_of_a_Mechanism_Action}}
= Unique Properties =
{{:Structural_Biochemistry/Unique_Properties}}
= pH =
{{:Structural_Biochemistry/pH}}
= Buffer =
{{:Structural_Biochemistry/Buffer}}
= Osmosis =
{{:Structural_Biochemistry/Osmosis}}
= Polarity =
{{:Structural_Biochemistry/Polarity}}
= Water Gas Reaction =
{{:Structural_Biochemistry/Water_Gas_Reaction}}
r9hgk5v73jce6hyzj8wxwtj3lm2gcc9
Fractals/Iterations in the complex plane/MandelbrotSetExterior
0
367335
4641656
4639938
2026-06-29T09:54:37Z
Aokoroko
3059689
/* Mandelbrot CLI: Renderer with Perturbation Theory (with a 10−308 hardware limit) */
4641656
wikitext
text/x-wiki
[[Fractals/color_mandelbrot|Colouring]] of exterior of Mandelbrot set can be :
* non-smooth = Escape Time = dwell
** Boolean/binary Escape Time Method ( bETM/M )
** discrete = Level Set Method = LSM/M = integer ETM = iETM/M
* Smooth :
** radial measures
*** Real Escape Time Method( rETM/M )
*** Distance Estimation Method( DEM/M )
*** radius of complex potential = Complex Potential Method ( CPM/M )
** angular measures
*** argument of complex potential
*** SAC = stripe average coloring
*** other
**** "triangle inequality"<ref>[http://www.hiddendimension.com/fractalmath/divergent_fractals_main.html Mathematics of Divergent Fractals by ]</ref><ref>[http://jussiharkonen.com/gallery/coloring-techniques/ jussi harkonen : coloring-techniques]</ref>
**** Orbit trap <ref>[[w:Orbit trap|wikipedia : Orbit trap]]</ref><ref>[https://www.youtube.com/watch?v=tnMNamKPy6k Mandelbrot Orbit Trap Rendering! Programming How-To Video by DKM101]</ref>
One can also draw curves :
* external rays
* equipotential lines ( closed curves - quasi circles)
Similar projects:
* [http://mathr.co.uk/blog/2014-03-06_mandelbrot_notebook.html Mandelbrot Notebook by Claude Heiland-Allen ]
** [https://code.mathr.co.uk/mandelbrot-book mandelbrot-book]
** [https://gitlab.com/adammajewski/mandelbrot-book_book mandelbrot-book/book : one file c programs , images and description]
** [https://gitlab.com/adammajewski/my-book fork of the mandelbrot-book] and [https://gitlab.com/adammajewski/git-book-pdf book in pdf format]
* [https://www.math.univ-toulouse.fr/~cheritat/wiki-draw/index.php/Main_Page different drawing techniques and algorithms by Arnaud Cheritat ]
** [https://www.math.univ-toulouse.fr/~cheritat/wiki-draw/index.php/Mandelbrot_set Mandelbrot set] and [https://gitlab.com/adammajewski/mandelbrot_wiki_ACh example C programs ( not by A Cheritat)]
* Linas Vepstas' Art Gallery:
** [http://linas.org/art-gallery/index.html original site]
** [https://gitlab.com/adammajewski/LinasArtGallery_MandelbrotSet fork at gitlab]
=='''Escape time''' or dwell==
Here for given point c on parameter plane one checks how critical point <math> z = 0.0 </math> behaves on dynamical plane under [[Fractals/Iterations in the complex plane/q-iterations#Forward iteration|forward iteration]]. If you change initial point you will get different result <ref>[http://mathesim.degruyter.de/jws_en/show_simulation.php?id=1052&type=RoessMa&lang=en Java program by Dieter Röß showing result of changing initial point of Mandelbrot iterations]</ref>
To draw given plane one needs to [[Fractals/Computer graphic techniques/2D#Scanning|check/scan]] (all) its points. See [[Fractals/Iterations in the complex plane/Mandelbrot set#Period detection|here for more details ( optimisation)]]
Read [[Fractals/Iterations in the complex plane/def cqp|definitions]] first.
===How to find the number of iterations required to escape the mandelbrot set ?===
* [https://math.stackexchange.com/questions/4056809/is-there-an-equation-for-the-number-of-iterations-required-to-escape-the-mandelb/4059340 math.stackexchange question: is-there-an-equation-for-the-number-of-iterations-required-to-escape-the-mandelb]
* [https://math.stackexchange.com/questions/16970/a-way-to-determine-the-ideal-number-of-maximum-iterations-for-an-arbitrary-zoom?rq=1 math.stackexchange question: a-way-to-determine-the-ideal-number-of-maximum-iterations-for-an-arbitrary-zoom?]
===Boolean escape time ===
This algorithm answers the question: “For which values of c will the Julia fractal, J(c), be line-like and for which dust-like?”<ref>[https://www.ntg.nl/maps/45/03.pdf Julia fractals in PostScript by Kees van der Laan, EUROTEX 2012 & 6CM PROCEEDINGS 47]</ref>
Here complex plane consists of 2 sets : Mandelbrot set <math>M\,</math> and its complement <math>M^c\,</math> :
<math>\mathbb{C}= M \cup M^c</math>
====ASCI graphic ( on screen) ====
[[File:Mandel.png|right|thumb|ASCI graphic : Boolean escape time in text mode]]
<syntaxhighlight lang=c>
// http://mrl.nyu.edu/~perlin/
main(k){float i,j,r,x,y=-16;while(puts(""),y++<15)for(x
=0;x++<84;putchar(" .:-;!/>)|&IH%*#"[k&15]))for(i=k=r=0;
j=r*r-i*i-2+x/25,i=2*r*i+y/10,j*j+i*i<11&&k++<111;r=j);}
</syntaxhighlight>
<syntaxhighlight lang=haskell>
-- Haskell code by Ochronus
-- http://blog.mostof.it/mandelbrot-set-in-ruby-and-haskell/
import Data.Complex
mandelbrot a = iterate (\z -> z^2 + a) a !! 500
main = mapM_ putStrLn [[if magnitude (mandelbrot (x :+ y)) < 2 then '*' else ' '
| x <- [-2, -1.9685 .. 0.5]]
| y <- [1, 0.95 .. -1]]
</syntaxhighlight>
<syntaxhighlight lang=lisp>
; common lisp
(loop for y from -1.5 to 1.5 by 0.05 do
(loop for x from -2.5 to 0.5 by 0.025 do
(let* ((c (complex x y)) ; parameter
(z (complex 0 0))
(iMax 20) ; maximal number of iterations
(i 0)) ; iteration number
(loop while (< i iMax ) do
(setq z (+ (* z z) c)) ; iteration
(incf i)
(when (> (abs z) 2) (return i)))
; color of pixel
(if (= i iMax) (princ (code-char 42)) ; inside M
(princ (code-char 32))))) ; outside M
(format t "~%")) ; new line
</syntaxhighlight>
Comparison programs in various languages <ref>[http://www.timestretch.com/tag/mandelbrot Fractal Benchmark by Erik Wrenholt]</ref><ref>[http://www.righto.com/2015/03/12-minute-mandelbrot-fractals-on-50.html 12-minute Mandelbrot: fractals on a 50 year old IBM 1401 mainframe]</ref>
==== Graphic file ( PPM ) ====
Here are various programs for creating pbm file <ref>[https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/mandelbrot.html#mandelbrotThe Computer Language Benchmarks Game ]</ref>
* GLSL using [[Fractals/shadertoy#Boolean escape time|shadertoy]]
* short c programs by ed Burke<ref>[https://batchloaf.wordpress.com/2016/02/13/example-code-from-presentation-ways-of-seeing-julia-sets/ example-code-from-presentation-ways-of-seeing-julia-sets by ed Burke]</ref>
=====C=====
This is complete code of C one file program.
*It makes a ppm file which consists an image. To see the file (image) use external application ( graphic viewer).
*Program consists of 3 loops:
** iY and iX, which are used to scan rectangle area of parameter plane
**iterations.
For each point of screen (iX,iY) it's complex value is computed c=cx+cy*i.
For each point c is computed iterations of critical point <math>z_0 = z_{cr} = 0 \,</math>
It uses some [[Fractals/Iterations in the complex plane/Mandelbrot set#Speed improvements - optimisation|speed_improvement]]. Instead of checking :
sqrt(Zx2+Zy2)<ER
it checks :
(Zx2+Zy2)<ER2 // ER2 = ER*ER
It gives the same result but is faster.
<syntaxhighlight lang=C>
/*
c program:
--------------------------------
1. draws Mandelbrot set for Fc(z)=z*z +c
using Mandelbrot algorithm ( boolean escape time )
-------------------------------
2. technique of creating ppm file is based on the code of Claudio Rocchini
http://en.wikipedia.org/wiki/Image:Color_complex_plot.jpg
create 24 bit color graphic file , portable pixmap file = PPM
see http://en.wikipedia.org/wiki/Portable_pixmap
to see the file use external application ( graphic viewer)
*/
#include <stdio.h>
#include <math.h>
int main()
{
/* screen ( integer) coordinate */
int iX,iY;
const int iXmax = 800;
const int iYmax = 800;
/* world ( double) coordinate = parameter plane*/
double Cx,Cy;
const double CxMin=-2.5;
const double CxMax=1.5;
const double CyMin=-2.0;
const double CyMax=2.0;
/* */
double PixelWidth=(CxMax-CxMin)/iXmax;
double PixelHeight=(CyMax-CyMin)/iYmax;
/* color component ( R or G or B) is coded from 0 to 255 */
/* it is 24 bit color RGB file */
const int MaxColorComponentValue=255;
FILE * fp;
char *filename="new1.ppm";
char *comment="# ";/* comment should start with # */
static unsigned char color[3];
/* Z=Zx+Zy*i ; Z0 = 0 */
double Zx, Zy;
double Zx2, Zy2; /* Zx2=Zx*Zx; Zy2=Zy*Zy */
/* */
int Iteration;
const int IterationMax=200;
/* bail-out value , radius of circle ; */
const double EscapeRadius=2;
double ER2=EscapeRadius*EscapeRadius;
/*create new file,give it a name and open it in binary mode */
fp= fopen(filename,"wb"); /* b - binary mode */
/*write ASCII header to the file*/
fprintf(fp,"P6\n %s\n %d\n %d\n %d\n",comment,iXmax,iYmax,MaxColorComponentValue);
/* compute and write image data bytes to the file*/
for(iY=0;iY<iYmax;iY++)
{
Cy=CyMin + iY*PixelHeight;
if (fabs(Cy)< PixelHeight/2) Cy=0.0; /* Main antenna */
for(iX=0;iX<iXmax;iX++)
{
Cx=CxMin + iX*PixelWidth;
/* initial value of orbit = critical point Z= 0 */
Zx=0.0;
Zy=0.0;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
/* */
for (Iteration=0;Iteration<IterationMax && ((Zx2+Zy2)<ER2);Iteration++)
{
Zy=2*Zx*Zy + Cy;
Zx=Zx2-Zy2 +Cx;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
};
/* compute pixel color (24 bit = 3 bytes) */
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
else
{ /* exterior of Mandelbrot set = white */
color[0]=255; /* Red*/
color[1]=255; /* Green */
color[2]=255;/* Blue */
};
/*write color to the file*/
fwrite(color,1,3,fp);
}
}
fclose(fp);
return 0;
}
</syntaxhighlight >
===Integer escape time = LSM/M = dwell bands===
<gallery>
File:Mandelbrot seq.png|Number of details is proportional to maximal number of iterations
File:Animation of the growth of the Mandelbrot set as you iterate towards infinity.gif|Mandelbrot animation based on a static number of iterations per pixel. Here you can see why '''offset''' is sometimes used ( because - color gradient changes : for high MaxIteration disapears.
</gallery>
Here color is proportional to last iteration ( of final_n, final iteration).<ref>[http://plus.maths.org/content/computing-mandelbrot-set Computing the Mandelbrot set by Andrew Williams]</ref>
This is also called [[w:Level Set Method|Level Set Method]] ( LSM )
<math>L_n= \{ c : z_n \in T ~~\mbox{and} ~~ z_k \notin T ~~\mbox{where}~~ k<n \}\,</math>
====C====
[[Image:Mandel_lsm_bw.jpg|thumb|LSM/M image with full code in C]]
Difference between Mandelbrot algorithm and LSM/M is in only in part instruction, which computes pixel color of exterior of Mandelbrot set. In LSM/M is :
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set = LSM */
else if ((Iteration%2)==0)
{ /* even number = black */
color[0]=0; /* Red */
color[1]=0; /* Green */
color[2]=0; /* Blue */
}
else
{/* odd number = white */
color[0]=255; /* Red */
color[1]=255; /* Green */
color[2]=255; /* Blue */
};
</syntaxhighlight>
Here is [[w:C (programming language)|C]] function whithout explicit complex numbers, only doubles:
<syntaxhighlight lang="c">
int GiveEscapeTime(double C_x, double C_y, int iMax, double _ER2)
{
int i;
double Zx, Zy;
double Zx2, Zy2; /* Zx2=Zx*Zx; Zy2=Zy*Zy */
Zx=0.0; /* initial value of orbit = critical point Z= 0 */
Zy=0.0;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
for (i=0;i<iMax && ((Zx2+Zy2)<_ER2);i++)
{
Zy=2*Zx*Zy + C_y;
Zx=Zx2-Zy2 +C_x;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
};
return i;
}
</syntaxhighlight>
here a short code with complex numbers:
<syntaxhighlight lang=c>
// https://gitlab.com/adammajewski/mandelbrot_wiki_ACh/blob/master/betm.c
int iterate(double complex C , int iMax)
{
int i;
double complex Z= 0.0; // initial value for iteration Z0
for(i=0;i<iMax;i++)
{
Z=Z*Z+C; // https://stackoverflow.com/questions/6418807/how-to-work-with-complex-numbers-in-c
if(cabs(Z)>EscapeRadius) break;
}
return i;
}
</syntaxhighlight>
====C++====
Here is C++ function which can be used to draw LSM/M :
<syntaxhighlight lang=Cpp>
int iterate_mandel(complex C , int imax, int bailout)
{
int i;
std::complex Z(0,0); // initial value for iteration Z0
for(i=0;i<=imax-1;i++)
{
Z=Z*Z+C; // overloading of operators
if(abs(Z)>bailout)break;
}
return i;
}
</syntaxhighlight>
I think that it can't be coded simpler (it looks better than pseudocode), but it can be coded in other way which can be executed faster .
Here is faster code :
<syntaxhighlight lang=Cpp>
// based on cpp code by Geek3
inline int fractal(double cx, double cy, int max_iters)
// gives last iteration
{
double zx = 0, zy = 0;
if (zx * zx + zy * zy > 4) return(0); // it=0
for (int it = 1; it < max_iters; it++)
{ double zx_old = zx;
zx = zx * zx - zy * zy;
zy = 2 * zx_old * zy;
zx += cx;
zy += cy;
if (zx * zx + zy * zy > 4.0) return(it);
}
return(max_iters);
}
</syntaxhighlight>
A touch more optimised :
<syntaxhighlight lang=Cpp>
// optimised from cpp code by Geek3
inline int fractal(double cReal, double cImg, int max_iters)
// gives last iteration
{
double zReal = 0, zImg = 0, zReal2 = 0, zImg2 = 0;
//iteration zero is always 0^2+0^2, it will never escape
for (int it = 1; it < max_iters; it++)
{ //because we have zReal^2 and zImg^2 pre-calculated
//we can calculate zImg first
//then we don't need to calculate/store the "old" zReal
zImg = (2 * zReal * zImg ) + cImg;
zReal = zReal2 - zImg2 + cReal;
// calculate next iteration: zReal^2 and zImg^2
// they are used twice so calculate them once
zReal2 = zReal * zReal;
zImg2 = zImg * zImg;
if (zReal2 + zImg2 > 4.0) return(it);
}
return(max_iters);
}
</syntaxhighlight>
See also :
* [https://www.youtube.com/watch?v=nkf6icQln7w Rendering The Mandelbrot Set In C++: Part 1 - Saving Images , Video by Superdavo0001]
====GLSL====
* [[Fractals/shadertoy#LSM|shadertoy]]
====Java ====
<syntaxhighlight lang="java">
//Java code by Josef Jelinek
// http://java.rubikscube.info/
int mandel(double cx, double cy) {
double zx = 0.0, zy = 0.0;
double zx2 = 0.0, zy2 = 0.0;
int iter = 0;
while (iter < iterMax && zx2 + zy2 < 4.0) {
zy = 2.0 * zx * zy + cy;
zx = zx2 - zy2 + cx;
zx2 = zx * zx;
zy2 = zy * zy;
iter++;
}
return iter;
}
</syntaxhighlight>
====Java Script====
Here is JavaScript function which does not give last iteration but LastIteration modulo maxCol. It makes colour cycling ( if maxCol < maxIt ).
<syntaxhighlight lang="javascript">
function iterate(Cr,Ci) {
// JavaScript function by Evgeny Demidov
// http://www.ibiblio.org/e-notes/html5/fractals/mandelbrot.htm
var I=0, R=0, I2=0, R2=0, n=0;
if (R2+I2 > max) return 0;
do { I=(R+R)*I+Ci; R=R2-I2+Cr; R2=R*R; I2=I*I; n++;
} while ((R2+I2 < max) && (n < maxIt) );
if (n == maxIt) return maxCol; else return n % maxCol;
}
</syntaxhighlight>
Above functions do not use explicit definition of [[w:complex number|complex number]].
====Khan Academy====
* [https://www.khanacademy.org/computer-programming/mandelbrot-set/1274517860 khan academy mandelbrot-set]
====Lisp program ====
Whole Lisp program making ASCII graphic based on code by [http://www.frank-buss.de/ Frank Buss]
<ref>[http://groups.google.com/group/comp.lang.lisp/msg/dd505fd509fc8512 LIsp Program by Frank Buss]</ref>
<ref>[http://bc.tech.coop/blog/040811.html Mandelbrot Set ASCII art at Bill Clementson's blog]</ref>
<syntaxhighlight lang=lisp>
; common lisp
(loop for y from -1.5 to 1.5 by 0.1 do
(loop for x from -2.5 to 0.5 by 0.04 do
(let* ((i 0)
(z (complex x y))
(c z))
(loop while (< (abs
(setq z (+ (* z z) c)))
2)
while (< (incf i) 32))
(princ (code-char (+ i 32))))) ; ASCII chars <= 32 contains non-printing characters
(format t "~%"))
</syntaxhighlight>
====MathMap plugin for [[GIMP|Gimp]]====
<pre>
filter mandelbrot (gradient coloration)
c=ri:(xy/xy:[X,X]*1.5-xy:[0.5,0]);
z=ri:[0,0]; # initial value z0 = 0
# iteration of z
iter=0;
while abs(z)<2 && iter<31
do
z=z*z+c; # z(n+1) = fc(zn)
iter=iter+1
end;
coloration(iter/32) # color of pixel
end
</pre>
====Pov-Ray====
Pov-Ray has a built-in function mandel<ref>[http://www.povray.org/documentation/view/3.6.1/377/ mandel function from 2.5.11.14 Fractal Patterns at Pov-Ray docs]</ref>
====Wolfram Mathematica====
Here is [http://www.bugman123.com/Fractals/index.html code by Paul Nylander]
===Level Curves of escape time Method = LCM/M===
[[Image:LCMM.jpg|right|thumb|edge detection of Level sets]]
[[Image:Lemniscates5.png|thumb|right|Lemniscates of Mandelbrot set]]
Lemniscates are boundaries of Level Sets of escape time ( LSM/M ). They can be drawn using :
* edge detection of Level sets.
** Algorithm described in paper by M. Romera et al.<ref>[http://www.iec.csic.es/~miguel/Preprint3.ps Drawing the Mandelbrot set by the method of escape lines. M. Romera et al.]</ref> This method is fast and allows looking for high iterations.
*boundary trace<ref>http://www.metabit.org/~rfigura/figura-fractal/math.html boundary trace by Robert Figura</ref>
* drawing curves <math>L_n(T)=\{c: abs(z_n)=ER \}\,</math>, see [[:Image:Lemniscates5.png| explanation and source code]]. This method is very complicated for iterations > 5.
===Decomposition of target set for Mandelbrot set drawing===
Decomposition is modification of escape time algorithm.
The '''target set''' is divided into parts (2 or more).
Very large escape radius is used, for example ER = 12.
====Binary decomposition of LSM/M====
[[Image:Mandel_bd.png|thumb|binary decomposition: image with full code in C]]
Here target set <math>T\,</math> on dynamic plane is divided into 2 parts (binary decomposition = 2-decomposition ):
* upper half ( white) <math>T_u = \{ z : |z| > ER ~~\mbox{and}~~ Im (z) > 0\}\,</math>
* lower half (black) <math>T_l = \{ z : |z| > ER ~~\mbox{and}~~ Im (z) \le 0 \}\,</math>
Division of target set induces decomposition of level sets <math>L_n\,</math> into <math>2^{n+1}\,</math> parts ( cells, subsets):
* <math>L_{n,u} =\{ c: |z_n| > ER ~~\mbox{and}~~ Im (z_n) > 0 \}\,</math> which is colored white,
* <math>L_{n,l} = \{ c : |z_n| > ER ~~\mbox{and}~~ Im (z_n) \le 0 \}\,</math> which is colored black.
"The Level Sets and Field Lines are superimposed, creating a sort of grid, and the "squares" of the grid are filled with N-digit binary numbers giving the first N binary digits of the external angles of field lines passing through the square. (Alternately, only the Nth binary digit is used.) Each level set is divided into 2n squares. It is easy to "read" the external arguments of points in the boundary of the Mandelbrot Set using a binary decomposition." Robert P. Munafo
For binary decomposition use exp(pi) as escape radius, so that the boxes appear square (a tip from mrob).
External rays of angles (measured in turns):
<math>angle = (k / 2^n ) ~~\mbox{mod }~1\,</math>
can be seen as borders of subsets.
Difference between binary decomposition algorithm and Mandel or LSM/M is in only in part of instruction , which computes pixel color of exterior of Mandelbrot set. In binary decomposition is :
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set = LSM */
else if (Zy>0)
{
color[0]=0; /* Red */
color[1]=0; /* Green */
color[2]=0; /* Blue */
}
else
{
color[0]=255; /* Red */
color[1]=255; /* Green */
color[2]=255; /* Blue */
};
</syntaxhighlight>
also GLSL code from [[Fractals/fragmentarium|Fragmentarium]] :
<syntaxhighlight lang=GLSL>
#include "2D.frag"
#group Simple Mandelbrot
// maximal number of iterations
uniform int iMax; slider[1,100,1000] // increase iMax
// er2= er^2 wher er= escape radius = bailout
uniform float er2; slider[4.0,1000,10000] // increase er2
// compute color of pixel
vec3 color(vec2 c) {
vec2 z = vec2(0.0); // initial value
// iteration
for (int i = 0; i < iMax; i++) {
z = vec2(z.x*z.x-z.y*z.y,2*z.x*z.y) + c; // z= z^2+c
if (dot(z,z)> er2) // escape test
// exterior
if (z.x>0){ return vec3( 1.0);} // upper part of the target set
else return vec3(0.0); //lower part of the target set
}
return vec3(0.0); //interior
}
</syntaxhighlight>
<syntaxhighlight lang=GLSL>
// zoomasm -- zoom video assembler
// (c) 2019,2020,2021,2022 Claude Heiland-Allen
// SPDX-License-Identifier: AGPL-3.0-only
// recommended KF bailout settings: linear smoothing, custom radius 25
vec3 colour(void)
{
if (getInterior())
{
return vec3(1.0, 0.0, 0.0);
}
bool decomp = getT() < 0.5;
return vec3(decomp ? 0.0 : 1.0);
}
</syntaxhighlight>
Point c is plotting white or black if [[w:complex number|imaginary value]] of last iteration ( Zy) is positive or negative.<ref>http://web.archive.org/20010415125044/www.geocities.com/CapeCanaveral/Launchpad/5113/fr27.htm| An open letter to Dr. Meech from Joyce Haslam in FRACTAL REPORT 27</ref>
==== nth-decomposition ====
This method is extension of binary decomposition.
The target set T = { z : |zn| > R } with a very large escape radius ( for example R = 12 ) is divided into more than 2 parts ( for example 8).<ref>[http://fraktal.republika.pl/mset_decomposition.html mandelbrot set n-th-decomposition ]</ref>
===Real Escape Time===
Other names of this method/algorithm are :
* the fully-renormalized fractional iteration count ( by Linas Vepstas in 1997)<ref>[http://linas.org/art-gallery/escape/escape.html linas.org : Renormalizing the Mandelbrot Escape]</ref>
* smooth iteration count for generalized Mandelbrot sets ( by Inigo Quilez in 2016)<ref>[http://www.iquilezles.org/www/articles/mset_smooth/mset_smooth.htm I Quilez : mset_smooth]</ref>
* continuous iteration count for the Mandelbrot set
* Normalized Iteration Count Algorithm
* Continuous coloring
* smooth colour gradient
* fractional iterations
* fractional escape time
Here color of exterior of Mandelbrot set is proportional not to Last Iteration ( which is integer number) but to real number :
: <math>\nu(z) = \lim_{i \to \infty} (i - \log_2 \log_2 |z_i|)\,</math>
Other methods and speedups
Colouring formula in Ultrafractal :<ref>[http://www.fractalforums.com/programming/what-rangeprecision-for-fractional-escape-counts-for-mandelbrotjulia-sets/ fractalforums : What range/precision for fractional escape counts for Mandelbrot/Julia sets? ]</ref>
smooth iter = iter + 1 + ( log(log(bailout)-log(log(cabs(z))) )/log(2)
where :
* log(log(bailout) can be precalculated
*
====theory====
Description by Claude :
'''First description :'''
If R is large, the first z to escape satisfies (approximately)<ref>[https://fractalforums.org/noobs-corner/76/gradient-pallet-with-two-colors/4498 fractalforums : gradient-pallet-with-two-colors]</ref>
<math>R < |z| < R^p</math>
so taking logs
<math>\log(R) < \log(|z|) < p \log(R)</math>
so taking logs again
<math>\log(\log(R)) < \log(\log(|z|)) < \log(p) + \log(\log(R))</math>
so by algebra
<math>0 < \frac{\log(\log(|z|)) - \log(\log(R))}{\log(p)} < 1</math>
when <math>|z|</math> at escape is bigger, the smooth iteration count should be smaller, so this value needs to be subtracted from the integer iteration count
Alternatively this fraction can be used for interpolation, or used with arg(z) for exterior tiling / binary decomposition.
'''Second description'''<ref>[https://fractalforums.org/programming/11/can-anyone-help-me-understand-smooth-coloring/4597/msg37885 fractalforums.org : can-anyone-help-me-understand-smooth-coloring]</ref>
pick a radius R > 2, then |Z| > R implies that |Z^2 + C| > |Z| and more generally that |Z| -> infinity, this gives R the name escape radius. proof is on math.stackexchange.com somewhere
now suppose R is large, and n is the first iteration where |Z_n| > R.
consider what happens when |Z_n| increases as you move the point C a bit further from the Mandelbrot set boundary.
eventually |Z_n| > R^2, but then |Z_{n-1}| > R, so the iteration count should be n - 1.
for smoothing, we want a value to add to n that is 0 when |Z_n| = R and -1 when |Z_n| = R^2.
taking logs, get log |Z| is between log(R) and 2 log(R)
taking logs again, get log log |Z| is between log log R and log log R + log 2
dividing by log 2, get log_2 log |Z| is between log_2 log R and log_2 log R + 1
subtracting log_2 log R gives (log_2 log |Z| - log_2 log R) is between 0 and 1
negating it gives a value between 0 and -1, as desired
so the smooth iteration count is
<math>n - (log_2 log |Z| - log_2 log R)</math>
(replace 2 by P if you do Z^P + C)
see also http://linas.org/art-gallery/escape/escape.html which makes a value independent of R, but that is not so useful for some colouring algorithms (e.g. smooth part of escape count doesn't align with angle of final iterate)
====C====
To use log2 function add :
<nowiki> #include <math.h> </nowiki>
at the beginning of program.
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set */
else GiveRainbowColor((double)(Iteration- log2(log2(sqrt(Zx2+Zy2))))/IterationMax,color);
</syntaxhighlight>
where :
* Zx2 = Zx*Zx
* Zy2 = Zy*Zy
Here is another version by Tony Finch<ref>[http://dotat.at/prog/mandelbrot/ Making Mandelbrot Set Movies by Tony Finch]</ref>
<syntaxhighlight lang=C>
while (n++ < max &&
x2+y2 < inf) {
y = 2*x*y + b;
x = x2-y2 + a;
y2 = y*y;
x2 = x*x;
}
nu = n - log(log(x2+y2)/2)/ log(2);
</syntaxhighlight >
based on equation <ref>[http://linas.org/art-gallery/escape/escape.html Linas Vepstas. Renormalizing the mandelbrot escape.]</ref>
: <math>\nu(z) = n - \log_2 \log (z_n)\,</math>
====C++====
<syntaxhighlight lang=cpp>
// based on cpp code by Geek3 from http://en.wikibooks.org/wiki/File:Mandelbrot_set_rainbow_colors.png
sqrxy = x * x + y * y;
double m = LastIteration + 1.5 - log2(log2(sqrxy));
</syntaxhighlight>
====java====
<syntaxhighlight lang=java>
/**
Smooth coloring algorithm
https://gitlab.com/shreyas.siravara/mandelbrot-with-smooth-coloring/blob/master/Mandelbrot.java
Mandelbrot with Smooth Coloring by Shreyas Siravara
*/
double nsmooth = (iterations + 1 - Math.log(Math.log(Zn.getMagnitude())) / Math.log(ESCAPE_RADIUS));
double smoothcolor = nsmooth / MAX_ITERATIONS;
if (iterations < MAX_ITERATIONS) {
int rgb = Color.HSBtoRGB((float) (0.99f + 1.9 * smoothcolor), 0.9f, 0.9f);
g2d.setColor(new Color(rgb));
} else {
g2d.setColor(Color.black.darker());
}
</syntaxhighlight>
====Matemathica====
Here is [http://www.bugman123.com/Fractals/index.html code by Paul Nylander]. It uses different formula :
<math>cet = n + log_2ln(R) - log_2ln|z|</math>
====Python====
Python code using mpmath library<ref>[http://code.google.com/p/mpmath/ mpmath Python library]</ref>
<syntaxhighlight lang=python>
def mandelbrot(z):
c = z
for i in xrange(ITERATIONS):
zprev = z
z = z*z + c
if abs(z) > ESCAPE_RADIUS:
return ctx.exp(1j*(i + 1 - ctx.log(ctx.log(abs(z)))/ctx.log(2)))
return 0
</syntaxhighlight>
==Distance estimation DEM/M==
<gallery>
File:Demm_2000_Mandelbrot_set.jpg|Exterior DEM/M
File:Boundary mandelbrot set.png|simple boundary with DEM/M
File:Mandelbrot DEM Sobel.png|Boundary with DEM/M and Sobel filter
</gallery>
Variants :
* exterior DEM/M
* interior DEM/M
[[Fractals/Iterations in the complex plane/demm|Description]]
==Complex potential==
[[Fractals/Iterations_in_the_complex_plane/MandelbrotSetExteriorComplex_potential|Description]]
=See also=
* https://web.archive.org/web/20071008112609/http://rgba.scenesp.org/iq/trastero/fieldlines/
* http://fraktal.republika.pl/mset_bottcher.html
=References=
<references/>
{{BookCat}}
iduh3upc0d8pk5hn5r287sxo931rx1o
4641659
4641656
2026-06-29T11:05:59Z
Aokoroko
3059689
/* C++ */ High-Precision Perturbation CLI Renderer
4641659
wikitext
text/x-wiki
[[Fractals/color_mandelbrot|Colouring]] of exterior of Mandelbrot set can be :
* non-smooth = Escape Time = dwell
** Boolean/binary Escape Time Method ( bETM/M )
** discrete = Level Set Method = LSM/M = integer ETM = iETM/M
* Smooth :
** radial measures
*** Real Escape Time Method( rETM/M )
*** Distance Estimation Method( DEM/M )
*** radius of complex potential = Complex Potential Method ( CPM/M )
** angular measures
*** argument of complex potential
*** SAC = stripe average coloring
*** other
**** "triangle inequality"<ref>[http://www.hiddendimension.com/fractalmath/divergent_fractals_main.html Mathematics of Divergent Fractals by ]</ref><ref>[http://jussiharkonen.com/gallery/coloring-techniques/ jussi harkonen : coloring-techniques]</ref>
**** Orbit trap <ref>[[w:Orbit trap|wikipedia : Orbit trap]]</ref><ref>[https://www.youtube.com/watch?v=tnMNamKPy6k Mandelbrot Orbit Trap Rendering! Programming How-To Video by DKM101]</ref>
One can also draw curves :
* external rays
* equipotential lines ( closed curves - quasi circles)
Similar projects:
* [http://mathr.co.uk/blog/2014-03-06_mandelbrot_notebook.html Mandelbrot Notebook by Claude Heiland-Allen ]
** [https://code.mathr.co.uk/mandelbrot-book mandelbrot-book]
** [https://gitlab.com/adammajewski/mandelbrot-book_book mandelbrot-book/book : one file c programs , images and description]
** [https://gitlab.com/adammajewski/my-book fork of the mandelbrot-book] and [https://gitlab.com/adammajewski/git-book-pdf book in pdf format]
* [https://www.math.univ-toulouse.fr/~cheritat/wiki-draw/index.php/Main_Page different drawing techniques and algorithms by Arnaud Cheritat ]
** [https://www.math.univ-toulouse.fr/~cheritat/wiki-draw/index.php/Mandelbrot_set Mandelbrot set] and [https://gitlab.com/adammajewski/mandelbrot_wiki_ACh example C programs ( not by A Cheritat)]
* Linas Vepstas' Art Gallery:
** [http://linas.org/art-gallery/index.html original site]
** [https://gitlab.com/adammajewski/LinasArtGallery_MandelbrotSet fork at gitlab]
=='''Escape time''' or dwell==
Here for given point c on parameter plane one checks how critical point <math> z = 0.0 </math> behaves on dynamical plane under [[Fractals/Iterations in the complex plane/q-iterations#Forward iteration|forward iteration]]. If you change initial point you will get different result <ref>[http://mathesim.degruyter.de/jws_en/show_simulation.php?id=1052&type=RoessMa&lang=en Java program by Dieter Röß showing result of changing initial point of Mandelbrot iterations]</ref>
To draw given plane one needs to [[Fractals/Computer graphic techniques/2D#Scanning|check/scan]] (all) its points. See [[Fractals/Iterations in the complex plane/Mandelbrot set#Period detection|here for more details ( optimisation)]]
Read [[Fractals/Iterations in the complex plane/def cqp|definitions]] first.
===How to find the number of iterations required to escape the mandelbrot set ?===
* [https://math.stackexchange.com/questions/4056809/is-there-an-equation-for-the-number-of-iterations-required-to-escape-the-mandelb/4059340 math.stackexchange question: is-there-an-equation-for-the-number-of-iterations-required-to-escape-the-mandelb]
* [https://math.stackexchange.com/questions/16970/a-way-to-determine-the-ideal-number-of-maximum-iterations-for-an-arbitrary-zoom?rq=1 math.stackexchange question: a-way-to-determine-the-ideal-number-of-maximum-iterations-for-an-arbitrary-zoom?]
===Boolean escape time ===
This algorithm answers the question: “For which values of c will the Julia fractal, J(c), be line-like and for which dust-like?”<ref>[https://www.ntg.nl/maps/45/03.pdf Julia fractals in PostScript by Kees van der Laan, EUROTEX 2012 & 6CM PROCEEDINGS 47]</ref>
Here complex plane consists of 2 sets : Mandelbrot set <math>M\,</math> and its complement <math>M^c\,</math> :
<math>\mathbb{C}= M \cup M^c</math>
====ASCI graphic ( on screen) ====
[[File:Mandel.png|right|thumb|ASCI graphic : Boolean escape time in text mode]]
<syntaxhighlight lang=c>
// http://mrl.nyu.edu/~perlin/
main(k){float i,j,r,x,y=-16;while(puts(""),y++<15)for(x
=0;x++<84;putchar(" .:-;!/>)|&IH%*#"[k&15]))for(i=k=r=0;
j=r*r-i*i-2+x/25,i=2*r*i+y/10,j*j+i*i<11&&k++<111;r=j);}
</syntaxhighlight>
<syntaxhighlight lang=haskell>
-- Haskell code by Ochronus
-- http://blog.mostof.it/mandelbrot-set-in-ruby-and-haskell/
import Data.Complex
mandelbrot a = iterate (\z -> z^2 + a) a !! 500
main = mapM_ putStrLn [[if magnitude (mandelbrot (x :+ y)) < 2 then '*' else ' '
| x <- [-2, -1.9685 .. 0.5]]
| y <- [1, 0.95 .. -1]]
</syntaxhighlight>
<syntaxhighlight lang=lisp>
; common lisp
(loop for y from -1.5 to 1.5 by 0.05 do
(loop for x from -2.5 to 0.5 by 0.025 do
(let* ((c (complex x y)) ; parameter
(z (complex 0 0))
(iMax 20) ; maximal number of iterations
(i 0)) ; iteration number
(loop while (< i iMax ) do
(setq z (+ (* z z) c)) ; iteration
(incf i)
(when (> (abs z) 2) (return i)))
; color of pixel
(if (= i iMax) (princ (code-char 42)) ; inside M
(princ (code-char 32))))) ; outside M
(format t "~%")) ; new line
</syntaxhighlight>
Comparison programs in various languages <ref>[http://www.timestretch.com/tag/mandelbrot Fractal Benchmark by Erik Wrenholt]</ref><ref>[http://www.righto.com/2015/03/12-minute-mandelbrot-fractals-on-50.html 12-minute Mandelbrot: fractals on a 50 year old IBM 1401 mainframe]</ref>
==== Graphic file ( PPM ) ====
Here are various programs for creating pbm file <ref>[https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/mandelbrot.html#mandelbrotThe Computer Language Benchmarks Game ]</ref>
* GLSL using [[Fractals/shadertoy#Boolean escape time|shadertoy]]
* short c programs by ed Burke<ref>[https://batchloaf.wordpress.com/2016/02/13/example-code-from-presentation-ways-of-seeing-julia-sets/ example-code-from-presentation-ways-of-seeing-julia-sets by ed Burke]</ref>
=====C=====
This is complete code of C one file program.
*It makes a ppm file which consists an image. To see the file (image) use external application ( graphic viewer).
*Program consists of 3 loops:
** iY and iX, which are used to scan rectangle area of parameter plane
**iterations.
For each point of screen (iX,iY) it's complex value is computed c=cx+cy*i.
For each point c is computed iterations of critical point <math>z_0 = z_{cr} = 0 \,</math>
It uses some [[Fractals/Iterations in the complex plane/Mandelbrot set#Speed improvements - optimisation|speed_improvement]]. Instead of checking :
sqrt(Zx2+Zy2)<ER
it checks :
(Zx2+Zy2)<ER2 // ER2 = ER*ER
It gives the same result but is faster.
<syntaxhighlight lang=C>
/*
c program:
--------------------------------
1. draws Mandelbrot set for Fc(z)=z*z +c
using Mandelbrot algorithm ( boolean escape time )
-------------------------------
2. technique of creating ppm file is based on the code of Claudio Rocchini
http://en.wikipedia.org/wiki/Image:Color_complex_plot.jpg
create 24 bit color graphic file , portable pixmap file = PPM
see http://en.wikipedia.org/wiki/Portable_pixmap
to see the file use external application ( graphic viewer)
*/
#include <stdio.h>
#include <math.h>
int main()
{
/* screen ( integer) coordinate */
int iX,iY;
const int iXmax = 800;
const int iYmax = 800;
/* world ( double) coordinate = parameter plane*/
double Cx,Cy;
const double CxMin=-2.5;
const double CxMax=1.5;
const double CyMin=-2.0;
const double CyMax=2.0;
/* */
double PixelWidth=(CxMax-CxMin)/iXmax;
double PixelHeight=(CyMax-CyMin)/iYmax;
/* color component ( R or G or B) is coded from 0 to 255 */
/* it is 24 bit color RGB file */
const int MaxColorComponentValue=255;
FILE * fp;
char *filename="new1.ppm";
char *comment="# ";/* comment should start with # */
static unsigned char color[3];
/* Z=Zx+Zy*i ; Z0 = 0 */
double Zx, Zy;
double Zx2, Zy2; /* Zx2=Zx*Zx; Zy2=Zy*Zy */
/* */
int Iteration;
const int IterationMax=200;
/* bail-out value , radius of circle ; */
const double EscapeRadius=2;
double ER2=EscapeRadius*EscapeRadius;
/*create new file,give it a name and open it in binary mode */
fp= fopen(filename,"wb"); /* b - binary mode */
/*write ASCII header to the file*/
fprintf(fp,"P6\n %s\n %d\n %d\n %d\n",comment,iXmax,iYmax,MaxColorComponentValue);
/* compute and write image data bytes to the file*/
for(iY=0;iY<iYmax;iY++)
{
Cy=CyMin + iY*PixelHeight;
if (fabs(Cy)< PixelHeight/2) Cy=0.0; /* Main antenna */
for(iX=0;iX<iXmax;iX++)
{
Cx=CxMin + iX*PixelWidth;
/* initial value of orbit = critical point Z= 0 */
Zx=0.0;
Zy=0.0;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
/* */
for (Iteration=0;Iteration<IterationMax && ((Zx2+Zy2)<ER2);Iteration++)
{
Zy=2*Zx*Zy + Cy;
Zx=Zx2-Zy2 +Cx;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
};
/* compute pixel color (24 bit = 3 bytes) */
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
else
{ /* exterior of Mandelbrot set = white */
color[0]=255; /* Red*/
color[1]=255; /* Green */
color[2]=255;/* Blue */
};
/*write color to the file*/
fwrite(color,1,3,fp);
}
}
fclose(fp);
return 0;
}
</syntaxhighlight >
===Integer escape time = LSM/M = dwell bands===
<gallery>
File:Mandelbrot seq.png|Number of details is proportional to maximal number of iterations
File:Animation of the growth of the Mandelbrot set as you iterate towards infinity.gif|Mandelbrot animation based on a static number of iterations per pixel. Here you can see why '''offset''' is sometimes used ( because - color gradient changes : for high MaxIteration disapears.
</gallery>
Here color is proportional to last iteration ( of final_n, final iteration).<ref>[http://plus.maths.org/content/computing-mandelbrot-set Computing the Mandelbrot set by Andrew Williams]</ref>
This is also called [[w:Level Set Method|Level Set Method]] ( LSM )
<math>L_n= \{ c : z_n \in T ~~\mbox{and} ~~ z_k \notin T ~~\mbox{where}~~ k<n \}\,</math>
====C====
[[Image:Mandel_lsm_bw.jpg|thumb|LSM/M image with full code in C]]
Difference between Mandelbrot algorithm and LSM/M is in only in part instruction, which computes pixel color of exterior of Mandelbrot set. In LSM/M is :
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set = LSM */
else if ((Iteration%2)==0)
{ /* even number = black */
color[0]=0; /* Red */
color[1]=0; /* Green */
color[2]=0; /* Blue */
}
else
{/* odd number = white */
color[0]=255; /* Red */
color[1]=255; /* Green */
color[2]=255; /* Blue */
};
</syntaxhighlight>
Here is [[w:C (programming language)|C]] function whithout explicit complex numbers, only doubles:
<syntaxhighlight lang="c">
int GiveEscapeTime(double C_x, double C_y, int iMax, double _ER2)
{
int i;
double Zx, Zy;
double Zx2, Zy2; /* Zx2=Zx*Zx; Zy2=Zy*Zy */
Zx=0.0; /* initial value of orbit = critical point Z= 0 */
Zy=0.0;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
for (i=0;i<iMax && ((Zx2+Zy2)<_ER2);i++)
{
Zy=2*Zx*Zy + C_y;
Zx=Zx2-Zy2 +C_x;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
};
return i;
}
</syntaxhighlight>
here a short code with complex numbers:
<syntaxhighlight lang=c>
// https://gitlab.com/adammajewski/mandelbrot_wiki_ACh/blob/master/betm.c
int iterate(double complex C , int iMax)
{
int i;
double complex Z= 0.0; // initial value for iteration Z0
for(i=0;i<iMax;i++)
{
Z=Z*Z+C; // https://stackoverflow.com/questions/6418807/how-to-work-with-complex-numbers-in-c
if(cabs(Z)>EscapeRadius) break;
}
return i;
}
</syntaxhighlight>
====C++====
Here is C++ function which can be used to draw LSM/M :
<syntaxhighlight lang=Cpp>
int iterate_mandel(complex C , int imax, int bailout)
{
int i;
std::complex Z(0,0); // initial value for iteration Z0
for(i=0;i<=imax-1;i++)
{
Z=Z*Z+C; // overloading of operators
if(abs(Z)>bailout)break;
}
return i;
}
</syntaxhighlight>
I think that it can't be coded simpler (it looks better than pseudocode), but it can be coded in other way which can be executed faster .
Here is faster code :
<syntaxhighlight lang=Cpp>
// based on cpp code by Geek3
inline int fractal(double cx, double cy, int max_iters)
// gives last iteration
{
double zx = 0, zy = 0;
if (zx * zx + zy * zy > 4) return(0); // it=0
for (int it = 1; it < max_iters; it++)
{ double zx_old = zx;
zx = zx * zx - zy * zy;
zy = 2 * zx_old * zy;
zx += cx;
zy += cy;
if (zx * zx + zy * zy > 4.0) return(it);
}
return(max_iters);
}
</syntaxhighlight>
A touch more optimised :
<syntaxhighlight lang=Cpp>
// optimised from cpp code by Geek3
inline int fractal(double cReal, double cImg, int max_iters)
// gives last iteration
{
double zReal = 0, zImg = 0, zReal2 = 0, zImg2 = 0;
//iteration zero is always 0^2+0^2, it will never escape
for (int it = 1; it < max_iters; it++)
{ //because we have zReal^2 and zImg^2 pre-calculated
//we can calculate zImg first
//then we don't need to calculate/store the "old" zReal
zImg = (2 * zReal * zImg ) + cImg;
zReal = zReal2 - zImg2 + cReal;
// calculate next iteration: zReal^2 and zImg^2
// they are used twice so calculate them once
zReal2 = zReal * zReal;
zImg2 = zImg * zImg;
if (zReal2 + zImg2 > 4.0) return(it);
}
return(max_iters);
}
</syntaxhighlight>
See also :
* [https://www.youtube.com/watch?v=nkf6icQln7w Rendering The Mandelbrot Set In C++: Part 1 - Saving Images , Video by Superdavo0001]
====C++ High-Precision Perturbation CLI Renderer====
Here is a complete, highly optimized C++ implementation for high-precision rendering of the Mandelbrot set using perturbation theory, 8x8 Super-Sampling Anti-Aliasing (SSAA), and OpenMP multi-threading. Created by [[User:Aokoroko]].
<syntaxhighlight lang="cpp">
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <cstdint>
#include <string>
#include <atomic>
#include <omp.h>
#include <cstdio>
#include <iomanip>
#include <gmp.h>
#include <mpfr.h>
using namespace std;
const double PI = 3.14159265358979323846;
const mpfr_prec_t MPFR_BITS = 5000;
#pragma pack(push, 1)
struct BMPHeader {
uint16_t type{0x4D42};
uint32_t size{0};
uint16_t reserved1{0};
uint16_t reserved2{0};
uint32_t offBits{54};
uint32_t structSize{40};
int32_t width{0};
int32_t height{0};
uint16_t planes{1};
uint16_t bitCount{24};
uint32_t compression{0};
uint32_t sizeImage{0};
int32_t xpelsPerMeter{2834};
int32_t ypelsPerMeter{2834};
uint32_t clrUsed{0};
uint32_t clrImportant{0};
};
#pragma pack(pop)
struct ComplexDouble {
double re;
double im;
};
void save_bmp(const string& filename, const vector<uint8_t>& data, int w, int h) {
int rowSize = (w * 3 + 3) & ~3;
BMPHeader header;
header.width = w;
header.height = h;
header.sizeImage = rowSize * h;
header.size = header.sizeImage + 54;
ofstream f(filename, ios::binary);
f.write(reinterpret_cast<char*>(&header), 54);
f.write(reinterpret_cast<const char*>(data.data()), data.size());
f.close();
}
int main() {
string absc_str, ordi_str, size_str;
absc_str = "-1.74907816150520173167912454515663360420734509948112463480292338384";
ordi_str = "-0.00000550991906629096602513098567268615714673236269915508056068145";
size_str = "0.0000000000000000000000000000000000000000000000000000000000000153";
const int targetW = 10000;
const int targetH = 10000;
const int scale = 8;
const int rawW = targetW * scale;
const int rawH = targetH * scale;
cout << "Step 1: Calculating Raw Map (" << rawW << "x" << rawH << ") using Perturbation..." << endl;
vector<uint8_t> iterMap((size_t)rawW * rawH);
mpfr_t rx, ry, zr, zi, zr2, zi2, tmp, sz, st;
mpfr_inits2(MPFR_BITS, rx, ry, zr, zi, zr2, zi2, tmp, sz, st, NULL);
mpfr_set_str(rx, absc_str.c_str(), 10, MPFR_RNDN);
mpfr_set_str(ry, ordi_str.c_str(), 10, MPFR_RNDN);
mpfr_set_str(sz, size_str.c_str(), 10, MPFR_RNDN);
mpfr_div_ui(st, sz, rawW, MPFR_RNDN);
double step_d = mpfr_get_d(st, MPFR_RNDN);
double ref_rec_d = mpfr_get_d(rx, MPFR_RNDN);
double ref_imc_d = mpfr_get_d(ry, MPFR_RNDN);
vector<ComplexDouble> ref_orbit_double(50005);
mpfr_set_ui(zr, 0, MPFR_RNDN);
mpfr_set_ui(zi, 0, MPFR_RNDN);
mpfr_set_ui(zr2, 0, MPFR_RNDN);
mpfr_set_ui(zi2, 0, MPFR_RNDN);
uint32_t ref_i = 0;
bool escaped = false;
while (ref_i < 50000) {
ref_orbit_double[ref_i].re = mpfr_get_d(zr, MPFR_RNDN);
ref_orbit_double[ref_i].im = mpfr_get_d(zi, MPFR_RNDN);
mpfr_mul(tmp, zr, zi, MPFR_RNDN);
mpfr_mul_ui(zi, tmp, 2, MPFR_RNDN);
mpfr_add(zi, zi, ry, MPFR_RNDN);
mpfr_sub(zr, zr2, zi2, MPFR_RNDN);
mpfr_add(zr, zr, rx, MPFR_RNDN);
mpfr_mul(zr2, zr, zr, MPFR_RNDN);
mpfr_mul(zi2, zi, zi, MPFR_RNDN);
if (escaped) {
ref_i++;
break;
}
mpfr_add(tmp, zr2, zi2, MPFR_RNDN);
if (mpfr_cmp_d(tmp, 4.0) >= 0) {
escaped = true;
}
ref_i++;
}
ref_orbit_double[ref_i].re = mpfr_get_d(zr, MPFR_RNDN);
ref_orbit_double[ref_i].im = mpfr_get_d(zi, MPFR_RNDN);
uint32_t max_valid_ref_iter = ref_i;
mpfr_clears(rx, ry, zr, zi, zr2, zi2, tmp, sz, st, NULL);
atomic<int> linesDone{0};
#pragma omp parallel for schedule(dynamic)
for (size_t b = 0; b < (size_t)rawH; ++b) {
for (size_t a = 0; a < (size_t)rawW; ++a) {
double delta_rec = (double)((long long)a - (rawW / 2)) * step_d;
double delta_imc = (double)((long long)b - (rawH / 2)) * step_d;
uint32_t index = 0;
double delta_re = 0.0;
double delta_im = 0.0;
double z_re = 0.0;
double z_im = 0.0;
uint32_t i = 0;
const ComplexDouble* ref_ptr = ref_orbit_double.data();
while (i < max_valid_ref_iter) {
if ((z_re * z_re + z_im * z_im) >= 40000.0) {
break;
}
if ((z_re * z_re + z_im * z_im) < (delta_re * delta_re + delta_im * delta_im)) {
index = 0;
delta_re = z_re;
delta_im = z_im;
}
for (int step = 0; step < 2; ++step) {
double Ur = ref_ptr[index].re;
double Ui = ref_ptr[index].im;
double next_delta_im = 2.0 * Ur * delta_im + 2.0 * Ui * delta_re + 2.0 * delta_re * delta_im + delta_imc;
delta_re = 2.0 * Ur * delta_re - 2.0 * Ui * delta_im + delta_re * delta_re - delta_im * delta_im + delta_rec;
delta_im = next_delta_im;
index++;
}
z_re = ref_ptr[index].re + delta_re;
z_im = ref_ptr[index].im + delta_im;
i += 2;
}
int final_t = 50000 - i;
if (final_t == 0) {
iterMap[b * (size_t)rawW + a] = 255;
} else {
iterMap[b * (size_t)rawW + a] = (uint8_t)(final_t % 254);
}
}
if (++linesDone % 100 == 0) cout << "Progress: " << linesDone << "/" << rawH << "\r" << flush;
}
uint8_t pal[256][3];
for (int a = 0; a < 255; ++a) {
pal[a][0] = (uint8_t)round(127.0 + 127.0 * cos(2.0 * PI * a / 255.0)); // Blue
pal[a][1] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Green
pal[a][2] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Red
}
pal[255][0] = 255; pal[255][1] = 255; pal[255][2] = 255;
cout << "\nStep 2: Rendering frames..." << endl;
int rowSize = (targetW * 3 + 3) & ~3;
for (int frame = 0; frame < 255; ++frame) {
vector<uint8_t> frameData(rowSize * targetH);
#pragma omp parallel for schedule(static)
for (int y = 0; y < targetH; ++y) {
for (int x = 0; x < targetW; ++x) {
uint32_t rSum = 0, gSum = 0, bSum = 0;
for (int j = 0; j < scale; ++j) {
size_t mapRowIdx = (size_t)(y * scale + j) * rawW;
for (int i = 0; i < scale; ++i) {
uint8_t t = iterMap[mapRowIdx + (x * scale + i)];
int colorIdx;
if (t == 255) {
colorIdx = 255;
} else {
colorIdx = (t - frame + 255) % 255;
}
bSum += pal[colorIdx][0];
gSum += pal[colorIdx][1];
rSum += pal[colorIdx][2];
}
}
int outIdx = y * rowSize + x * 3;
frameData[outIdx + 0] = (uint8_t)(bSum >> 6);
frameData[outIdx + 1] = (uint8_t)(gSum >> 6);
frameData[outIdx + 2] = (uint8_t)(rSum >> 6);
}
}
string filename = "Mandelbrot" + to_string(1000 + frame).substr(1) + ".bmp";
save_bmp(filename, frameData, targetW, targetH);
cout << "Frame " << frame << "/254 saved. \r" << flush;
}
return 0;
}
</syntaxhighlight>
See the full project and compiled releases on the official [https://github.com/Divetoxx/Mandelbrot Mandelbrot CLI GitHub repository].
====GLSL====
* [[Fractals/shadertoy#LSM|shadertoy]]
====Java ====
<syntaxhighlight lang="java">
//Java code by Josef Jelinek
// http://java.rubikscube.info/
int mandel(double cx, double cy) {
double zx = 0.0, zy = 0.0;
double zx2 = 0.0, zy2 = 0.0;
int iter = 0;
while (iter < iterMax && zx2 + zy2 < 4.0) {
zy = 2.0 * zx * zy + cy;
zx = zx2 - zy2 + cx;
zx2 = zx * zx;
zy2 = zy * zy;
iter++;
}
return iter;
}
</syntaxhighlight>
====Java Script====
Here is JavaScript function which does not give last iteration but LastIteration modulo maxCol. It makes colour cycling ( if maxCol < maxIt ).
<syntaxhighlight lang="javascript">
function iterate(Cr,Ci) {
// JavaScript function by Evgeny Demidov
// http://www.ibiblio.org/e-notes/html5/fractals/mandelbrot.htm
var I=0, R=0, I2=0, R2=0, n=0;
if (R2+I2 > max) return 0;
do { I=(R+R)*I+Ci; R=R2-I2+Cr; R2=R*R; I2=I*I; n++;
} while ((R2+I2 < max) && (n < maxIt) );
if (n == maxIt) return maxCol; else return n % maxCol;
}
</syntaxhighlight>
Above functions do not use explicit definition of [[w:complex number|complex number]].
====Khan Academy====
* [https://www.khanacademy.org/computer-programming/mandelbrot-set/1274517860 khan academy mandelbrot-set]
====Lisp program ====
Whole Lisp program making ASCII graphic based on code by [http://www.frank-buss.de/ Frank Buss]
<ref>[http://groups.google.com/group/comp.lang.lisp/msg/dd505fd509fc8512 LIsp Program by Frank Buss]</ref>
<ref>[http://bc.tech.coop/blog/040811.html Mandelbrot Set ASCII art at Bill Clementson's blog]</ref>
<syntaxhighlight lang=lisp>
; common lisp
(loop for y from -1.5 to 1.5 by 0.1 do
(loop for x from -2.5 to 0.5 by 0.04 do
(let* ((i 0)
(z (complex x y))
(c z))
(loop while (< (abs
(setq z (+ (* z z) c)))
2)
while (< (incf i) 32))
(princ (code-char (+ i 32))))) ; ASCII chars <= 32 contains non-printing characters
(format t "~%"))
</syntaxhighlight>
====MathMap plugin for [[GIMP|Gimp]]====
<pre>
filter mandelbrot (gradient coloration)
c=ri:(xy/xy:[X,X]*1.5-xy:[0.5,0]);
z=ri:[0,0]; # initial value z0 = 0
# iteration of z
iter=0;
while abs(z)<2 && iter<31
do
z=z*z+c; # z(n+1) = fc(zn)
iter=iter+1
end;
coloration(iter/32) # color of pixel
end
</pre>
====Pov-Ray====
Pov-Ray has a built-in function mandel<ref>[http://www.povray.org/documentation/view/3.6.1/377/ mandel function from 2.5.11.14 Fractal Patterns at Pov-Ray docs]</ref>
====Wolfram Mathematica====
Here is [http://www.bugman123.com/Fractals/index.html code by Paul Nylander]
===Level Curves of escape time Method = LCM/M===
[[Image:LCMM.jpg|right|thumb|edge detection of Level sets]]
[[Image:Lemniscates5.png|thumb|right|Lemniscates of Mandelbrot set]]
Lemniscates are boundaries of Level Sets of escape time ( LSM/M ). They can be drawn using :
* edge detection of Level sets.
** Algorithm described in paper by M. Romera et al.<ref>[http://www.iec.csic.es/~miguel/Preprint3.ps Drawing the Mandelbrot set by the method of escape lines. M. Romera et al.]</ref> This method is fast and allows looking for high iterations.
*boundary trace<ref>http://www.metabit.org/~rfigura/figura-fractal/math.html boundary trace by Robert Figura</ref>
* drawing curves <math>L_n(T)=\{c: abs(z_n)=ER \}\,</math>, see [[:Image:Lemniscates5.png| explanation and source code]]. This method is very complicated for iterations > 5.
===Decomposition of target set for Mandelbrot set drawing===
Decomposition is modification of escape time algorithm.
The '''target set''' is divided into parts (2 or more).
Very large escape radius is used, for example ER = 12.
====Binary decomposition of LSM/M====
[[Image:Mandel_bd.png|thumb|binary decomposition: image with full code in C]]
Here target set <math>T\,</math> on dynamic plane is divided into 2 parts (binary decomposition = 2-decomposition ):
* upper half ( white) <math>T_u = \{ z : |z| > ER ~~\mbox{and}~~ Im (z) > 0\}\,</math>
* lower half (black) <math>T_l = \{ z : |z| > ER ~~\mbox{and}~~ Im (z) \le 0 \}\,</math>
Division of target set induces decomposition of level sets <math>L_n\,</math> into <math>2^{n+1}\,</math> parts ( cells, subsets):
* <math>L_{n,u} =\{ c: |z_n| > ER ~~\mbox{and}~~ Im (z_n) > 0 \}\,</math> which is colored white,
* <math>L_{n,l} = \{ c : |z_n| > ER ~~\mbox{and}~~ Im (z_n) \le 0 \}\,</math> which is colored black.
"The Level Sets and Field Lines are superimposed, creating a sort of grid, and the "squares" of the grid are filled with N-digit binary numbers giving the first N binary digits of the external angles of field lines passing through the square. (Alternately, only the Nth binary digit is used.) Each level set is divided into 2n squares. It is easy to "read" the external arguments of points in the boundary of the Mandelbrot Set using a binary decomposition." Robert P. Munafo
For binary decomposition use exp(pi) as escape radius, so that the boxes appear square (a tip from mrob).
External rays of angles (measured in turns):
<math>angle = (k / 2^n ) ~~\mbox{mod }~1\,</math>
can be seen as borders of subsets.
Difference between binary decomposition algorithm and Mandel or LSM/M is in only in part of instruction , which computes pixel color of exterior of Mandelbrot set. In binary decomposition is :
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set = LSM */
else if (Zy>0)
{
color[0]=0; /* Red */
color[1]=0; /* Green */
color[2]=0; /* Blue */
}
else
{
color[0]=255; /* Red */
color[1]=255; /* Green */
color[2]=255; /* Blue */
};
</syntaxhighlight>
also GLSL code from [[Fractals/fragmentarium|Fragmentarium]] :
<syntaxhighlight lang=GLSL>
#include "2D.frag"
#group Simple Mandelbrot
// maximal number of iterations
uniform int iMax; slider[1,100,1000] // increase iMax
// er2= er^2 wher er= escape radius = bailout
uniform float er2; slider[4.0,1000,10000] // increase er2
// compute color of pixel
vec3 color(vec2 c) {
vec2 z = vec2(0.0); // initial value
// iteration
for (int i = 0; i < iMax; i++) {
z = vec2(z.x*z.x-z.y*z.y,2*z.x*z.y) + c; // z= z^2+c
if (dot(z,z)> er2) // escape test
// exterior
if (z.x>0){ return vec3( 1.0);} // upper part of the target set
else return vec3(0.0); //lower part of the target set
}
return vec3(0.0); //interior
}
</syntaxhighlight>
<syntaxhighlight lang=GLSL>
// zoomasm -- zoom video assembler
// (c) 2019,2020,2021,2022 Claude Heiland-Allen
// SPDX-License-Identifier: AGPL-3.0-only
// recommended KF bailout settings: linear smoothing, custom radius 25
vec3 colour(void)
{
if (getInterior())
{
return vec3(1.0, 0.0, 0.0);
}
bool decomp = getT() < 0.5;
return vec3(decomp ? 0.0 : 1.0);
}
</syntaxhighlight>
Point c is plotting white or black if [[w:complex number|imaginary value]] of last iteration ( Zy) is positive or negative.<ref>http://web.archive.org/20010415125044/www.geocities.com/CapeCanaveral/Launchpad/5113/fr27.htm| An open letter to Dr. Meech from Joyce Haslam in FRACTAL REPORT 27</ref>
==== nth-decomposition ====
This method is extension of binary decomposition.
The target set T = { z : |zn| > R } with a very large escape radius ( for example R = 12 ) is divided into more than 2 parts ( for example 8).<ref>[http://fraktal.republika.pl/mset_decomposition.html mandelbrot set n-th-decomposition ]</ref>
===Real Escape Time===
Other names of this method/algorithm are :
* the fully-renormalized fractional iteration count ( by Linas Vepstas in 1997)<ref>[http://linas.org/art-gallery/escape/escape.html linas.org : Renormalizing the Mandelbrot Escape]</ref>
* smooth iteration count for generalized Mandelbrot sets ( by Inigo Quilez in 2016)<ref>[http://www.iquilezles.org/www/articles/mset_smooth/mset_smooth.htm I Quilez : mset_smooth]</ref>
* continuous iteration count for the Mandelbrot set
* Normalized Iteration Count Algorithm
* Continuous coloring
* smooth colour gradient
* fractional iterations
* fractional escape time
Here color of exterior of Mandelbrot set is proportional not to Last Iteration ( which is integer number) but to real number :
: <math>\nu(z) = \lim_{i \to \infty} (i - \log_2 \log_2 |z_i|)\,</math>
Other methods and speedups
Colouring formula in Ultrafractal :<ref>[http://www.fractalforums.com/programming/what-rangeprecision-for-fractional-escape-counts-for-mandelbrotjulia-sets/ fractalforums : What range/precision for fractional escape counts for Mandelbrot/Julia sets? ]</ref>
smooth iter = iter + 1 + ( log(log(bailout)-log(log(cabs(z))) )/log(2)
where :
* log(log(bailout) can be precalculated
*
====theory====
Description by Claude :
'''First description :'''
If R is large, the first z to escape satisfies (approximately)<ref>[https://fractalforums.org/noobs-corner/76/gradient-pallet-with-two-colors/4498 fractalforums : gradient-pallet-with-two-colors]</ref>
<math>R < |z| < R^p</math>
so taking logs
<math>\log(R) < \log(|z|) < p \log(R)</math>
so taking logs again
<math>\log(\log(R)) < \log(\log(|z|)) < \log(p) + \log(\log(R))</math>
so by algebra
<math>0 < \frac{\log(\log(|z|)) - \log(\log(R))}{\log(p)} < 1</math>
when <math>|z|</math> at escape is bigger, the smooth iteration count should be smaller, so this value needs to be subtracted from the integer iteration count
Alternatively this fraction can be used for interpolation, or used with arg(z) for exterior tiling / binary decomposition.
'''Second description'''<ref>[https://fractalforums.org/programming/11/can-anyone-help-me-understand-smooth-coloring/4597/msg37885 fractalforums.org : can-anyone-help-me-understand-smooth-coloring]</ref>
pick a radius R > 2, then |Z| > R implies that |Z^2 + C| > |Z| and more generally that |Z| -> infinity, this gives R the name escape radius. proof is on math.stackexchange.com somewhere
now suppose R is large, and n is the first iteration where |Z_n| > R.
consider what happens when |Z_n| increases as you move the point C a bit further from the Mandelbrot set boundary.
eventually |Z_n| > R^2, but then |Z_{n-1}| > R, so the iteration count should be n - 1.
for smoothing, we want a value to add to n that is 0 when |Z_n| = R and -1 when |Z_n| = R^2.
taking logs, get log |Z| is between log(R) and 2 log(R)
taking logs again, get log log |Z| is between log log R and log log R + log 2
dividing by log 2, get log_2 log |Z| is between log_2 log R and log_2 log R + 1
subtracting log_2 log R gives (log_2 log |Z| - log_2 log R) is between 0 and 1
negating it gives a value between 0 and -1, as desired
so the smooth iteration count is
<math>n - (log_2 log |Z| - log_2 log R)</math>
(replace 2 by P if you do Z^P + C)
see also http://linas.org/art-gallery/escape/escape.html which makes a value independent of R, but that is not so useful for some colouring algorithms (e.g. smooth part of escape count doesn't align with angle of final iterate)
====C====
To use log2 function add :
<nowiki> #include <math.h> </nowiki>
at the beginning of program.
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set */
else GiveRainbowColor((double)(Iteration- log2(log2(sqrt(Zx2+Zy2))))/IterationMax,color);
</syntaxhighlight>
where :
* Zx2 = Zx*Zx
* Zy2 = Zy*Zy
Here is another version by Tony Finch<ref>[http://dotat.at/prog/mandelbrot/ Making Mandelbrot Set Movies by Tony Finch]</ref>
<syntaxhighlight lang=C>
while (n++ < max &&
x2+y2 < inf) {
y = 2*x*y + b;
x = x2-y2 + a;
y2 = y*y;
x2 = x*x;
}
nu = n - log(log(x2+y2)/2)/ log(2);
</syntaxhighlight >
based on equation <ref>[http://linas.org/art-gallery/escape/escape.html Linas Vepstas. Renormalizing the mandelbrot escape.]</ref>
: <math>\nu(z) = n - \log_2 \log (z_n)\,</math>
====C++====
<syntaxhighlight lang=cpp>
// based on cpp code by Geek3 from http://en.wikibooks.org/wiki/File:Mandelbrot_set_rainbow_colors.png
sqrxy = x * x + y * y;
double m = LastIteration + 1.5 - log2(log2(sqrxy));
</syntaxhighlight>
====java====
<syntaxhighlight lang=java>
/**
Smooth coloring algorithm
https://gitlab.com/shreyas.siravara/mandelbrot-with-smooth-coloring/blob/master/Mandelbrot.java
Mandelbrot with Smooth Coloring by Shreyas Siravara
*/
double nsmooth = (iterations + 1 - Math.log(Math.log(Zn.getMagnitude())) / Math.log(ESCAPE_RADIUS));
double smoothcolor = nsmooth / MAX_ITERATIONS;
if (iterations < MAX_ITERATIONS) {
int rgb = Color.HSBtoRGB((float) (0.99f + 1.9 * smoothcolor), 0.9f, 0.9f);
g2d.setColor(new Color(rgb));
} else {
g2d.setColor(Color.black.darker());
}
</syntaxhighlight>
====Matemathica====
Here is [http://www.bugman123.com/Fractals/index.html code by Paul Nylander]. It uses different formula :
<math>cet = n + log_2ln(R) - log_2ln|z|</math>
====Python====
Python code using mpmath library<ref>[http://code.google.com/p/mpmath/ mpmath Python library]</ref>
<syntaxhighlight lang=python>
def mandelbrot(z):
c = z
for i in xrange(ITERATIONS):
zprev = z
z = z*z + c
if abs(z) > ESCAPE_RADIUS:
return ctx.exp(1j*(i + 1 - ctx.log(ctx.log(abs(z)))/ctx.log(2)))
return 0
</syntaxhighlight>
==Distance estimation DEM/M==
<gallery>
File:Demm_2000_Mandelbrot_set.jpg|Exterior DEM/M
File:Boundary mandelbrot set.png|simple boundary with DEM/M
File:Mandelbrot DEM Sobel.png|Boundary with DEM/M and Sobel filter
</gallery>
Variants :
* exterior DEM/M
* interior DEM/M
[[Fractals/Iterations in the complex plane/demm|Description]]
==Complex potential==
[[Fractals/Iterations_in_the_complex_plane/MandelbrotSetExteriorComplex_potential|Description]]
=See also=
* https://web.archive.org/web/20071008112609/http://rgba.scenesp.org/iq/trastero/fieldlines/
* http://fraktal.republika.pl/mset_bottcher.html
=References=
<references/>
{{BookCat}}
jfjjtfmgxry4gp1zv9yz5mb67ejas7g
4641660
4641659
2026-06-29T11:14:26Z
Aokoroko
3059689
/* C++ High-Precision Perturbation CLI Renderer */ Mandelbrot set fragment using perturbation theory
4641660
wikitext
text/x-wiki
[[Fractals/color_mandelbrot|Colouring]] of exterior of Mandelbrot set can be :
* non-smooth = Escape Time = dwell
** Boolean/binary Escape Time Method ( bETM/M )
** discrete = Level Set Method = LSM/M = integer ETM = iETM/M
* Smooth :
** radial measures
*** Real Escape Time Method( rETM/M )
*** Distance Estimation Method( DEM/M )
*** radius of complex potential = Complex Potential Method ( CPM/M )
** angular measures
*** argument of complex potential
*** SAC = stripe average coloring
*** other
**** "triangle inequality"<ref>[http://www.hiddendimension.com/fractalmath/divergent_fractals_main.html Mathematics of Divergent Fractals by ]</ref><ref>[http://jussiharkonen.com/gallery/coloring-techniques/ jussi harkonen : coloring-techniques]</ref>
**** Orbit trap <ref>[[w:Orbit trap|wikipedia : Orbit trap]]</ref><ref>[https://www.youtube.com/watch?v=tnMNamKPy6k Mandelbrot Orbit Trap Rendering! Programming How-To Video by DKM101]</ref>
One can also draw curves :
* external rays
* equipotential lines ( closed curves - quasi circles)
Similar projects:
* [http://mathr.co.uk/blog/2014-03-06_mandelbrot_notebook.html Mandelbrot Notebook by Claude Heiland-Allen ]
** [https://code.mathr.co.uk/mandelbrot-book mandelbrot-book]
** [https://gitlab.com/adammajewski/mandelbrot-book_book mandelbrot-book/book : one file c programs , images and description]
** [https://gitlab.com/adammajewski/my-book fork of the mandelbrot-book] and [https://gitlab.com/adammajewski/git-book-pdf book in pdf format]
* [https://www.math.univ-toulouse.fr/~cheritat/wiki-draw/index.php/Main_Page different drawing techniques and algorithms by Arnaud Cheritat ]
** [https://www.math.univ-toulouse.fr/~cheritat/wiki-draw/index.php/Mandelbrot_set Mandelbrot set] and [https://gitlab.com/adammajewski/mandelbrot_wiki_ACh example C programs ( not by A Cheritat)]
* Linas Vepstas' Art Gallery:
** [http://linas.org/art-gallery/index.html original site]
** [https://gitlab.com/adammajewski/LinasArtGallery_MandelbrotSet fork at gitlab]
=='''Escape time''' or dwell==
Here for given point c on parameter plane one checks how critical point <math> z = 0.0 </math> behaves on dynamical plane under [[Fractals/Iterations in the complex plane/q-iterations#Forward iteration|forward iteration]]. If you change initial point you will get different result <ref>[http://mathesim.degruyter.de/jws_en/show_simulation.php?id=1052&type=RoessMa&lang=en Java program by Dieter Röß showing result of changing initial point of Mandelbrot iterations]</ref>
To draw given plane one needs to [[Fractals/Computer graphic techniques/2D#Scanning|check/scan]] (all) its points. See [[Fractals/Iterations in the complex plane/Mandelbrot set#Period detection|here for more details ( optimisation)]]
Read [[Fractals/Iterations in the complex plane/def cqp|definitions]] first.
===How to find the number of iterations required to escape the mandelbrot set ?===
* [https://math.stackexchange.com/questions/4056809/is-there-an-equation-for-the-number-of-iterations-required-to-escape-the-mandelb/4059340 math.stackexchange question: is-there-an-equation-for-the-number-of-iterations-required-to-escape-the-mandelb]
* [https://math.stackexchange.com/questions/16970/a-way-to-determine-the-ideal-number-of-maximum-iterations-for-an-arbitrary-zoom?rq=1 math.stackexchange question: a-way-to-determine-the-ideal-number-of-maximum-iterations-for-an-arbitrary-zoom?]
===Boolean escape time ===
This algorithm answers the question: “For which values of c will the Julia fractal, J(c), be line-like and for which dust-like?”<ref>[https://www.ntg.nl/maps/45/03.pdf Julia fractals in PostScript by Kees van der Laan, EUROTEX 2012 & 6CM PROCEEDINGS 47]</ref>
Here complex plane consists of 2 sets : Mandelbrot set <math>M\,</math> and its complement <math>M^c\,</math> :
<math>\mathbb{C}= M \cup M^c</math>
====ASCI graphic ( on screen) ====
[[File:Mandel.png|right|thumb|ASCI graphic : Boolean escape time in text mode]]
<syntaxhighlight lang=c>
// http://mrl.nyu.edu/~perlin/
main(k){float i,j,r,x,y=-16;while(puts(""),y++<15)for(x
=0;x++<84;putchar(" .:-;!/>)|&IH%*#"[k&15]))for(i=k=r=0;
j=r*r-i*i-2+x/25,i=2*r*i+y/10,j*j+i*i<11&&k++<111;r=j);}
</syntaxhighlight>
<syntaxhighlight lang=haskell>
-- Haskell code by Ochronus
-- http://blog.mostof.it/mandelbrot-set-in-ruby-and-haskell/
import Data.Complex
mandelbrot a = iterate (\z -> z^2 + a) a !! 500
main = mapM_ putStrLn [[if magnitude (mandelbrot (x :+ y)) < 2 then '*' else ' '
| x <- [-2, -1.9685 .. 0.5]]
| y <- [1, 0.95 .. -1]]
</syntaxhighlight>
<syntaxhighlight lang=lisp>
; common lisp
(loop for y from -1.5 to 1.5 by 0.05 do
(loop for x from -2.5 to 0.5 by 0.025 do
(let* ((c (complex x y)) ; parameter
(z (complex 0 0))
(iMax 20) ; maximal number of iterations
(i 0)) ; iteration number
(loop while (< i iMax ) do
(setq z (+ (* z z) c)) ; iteration
(incf i)
(when (> (abs z) 2) (return i)))
; color of pixel
(if (= i iMax) (princ (code-char 42)) ; inside M
(princ (code-char 32))))) ; outside M
(format t "~%")) ; new line
</syntaxhighlight>
Comparison programs in various languages <ref>[http://www.timestretch.com/tag/mandelbrot Fractal Benchmark by Erik Wrenholt]</ref><ref>[http://www.righto.com/2015/03/12-minute-mandelbrot-fractals-on-50.html 12-minute Mandelbrot: fractals on a 50 year old IBM 1401 mainframe]</ref>
==== Graphic file ( PPM ) ====
Here are various programs for creating pbm file <ref>[https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/mandelbrot.html#mandelbrotThe Computer Language Benchmarks Game ]</ref>
* GLSL using [[Fractals/shadertoy#Boolean escape time|shadertoy]]
* short c programs by ed Burke<ref>[https://batchloaf.wordpress.com/2016/02/13/example-code-from-presentation-ways-of-seeing-julia-sets/ example-code-from-presentation-ways-of-seeing-julia-sets by ed Burke]</ref>
=====C=====
This is complete code of C one file program.
*It makes a ppm file which consists an image. To see the file (image) use external application ( graphic viewer).
*Program consists of 3 loops:
** iY and iX, which are used to scan rectangle area of parameter plane
**iterations.
For each point of screen (iX,iY) it's complex value is computed c=cx+cy*i.
For each point c is computed iterations of critical point <math>z_0 = z_{cr} = 0 \,</math>
It uses some [[Fractals/Iterations in the complex plane/Mandelbrot set#Speed improvements - optimisation|speed_improvement]]. Instead of checking :
sqrt(Zx2+Zy2)<ER
it checks :
(Zx2+Zy2)<ER2 // ER2 = ER*ER
It gives the same result but is faster.
<syntaxhighlight lang=C>
/*
c program:
--------------------------------
1. draws Mandelbrot set for Fc(z)=z*z +c
using Mandelbrot algorithm ( boolean escape time )
-------------------------------
2. technique of creating ppm file is based on the code of Claudio Rocchini
http://en.wikipedia.org/wiki/Image:Color_complex_plot.jpg
create 24 bit color graphic file , portable pixmap file = PPM
see http://en.wikipedia.org/wiki/Portable_pixmap
to see the file use external application ( graphic viewer)
*/
#include <stdio.h>
#include <math.h>
int main()
{
/* screen ( integer) coordinate */
int iX,iY;
const int iXmax = 800;
const int iYmax = 800;
/* world ( double) coordinate = parameter plane*/
double Cx,Cy;
const double CxMin=-2.5;
const double CxMax=1.5;
const double CyMin=-2.0;
const double CyMax=2.0;
/* */
double PixelWidth=(CxMax-CxMin)/iXmax;
double PixelHeight=(CyMax-CyMin)/iYmax;
/* color component ( R or G or B) is coded from 0 to 255 */
/* it is 24 bit color RGB file */
const int MaxColorComponentValue=255;
FILE * fp;
char *filename="new1.ppm";
char *comment="# ";/* comment should start with # */
static unsigned char color[3];
/* Z=Zx+Zy*i ; Z0 = 0 */
double Zx, Zy;
double Zx2, Zy2; /* Zx2=Zx*Zx; Zy2=Zy*Zy */
/* */
int Iteration;
const int IterationMax=200;
/* bail-out value , radius of circle ; */
const double EscapeRadius=2;
double ER2=EscapeRadius*EscapeRadius;
/*create new file,give it a name and open it in binary mode */
fp= fopen(filename,"wb"); /* b - binary mode */
/*write ASCII header to the file*/
fprintf(fp,"P6\n %s\n %d\n %d\n %d\n",comment,iXmax,iYmax,MaxColorComponentValue);
/* compute and write image data bytes to the file*/
for(iY=0;iY<iYmax;iY++)
{
Cy=CyMin + iY*PixelHeight;
if (fabs(Cy)< PixelHeight/2) Cy=0.0; /* Main antenna */
for(iX=0;iX<iXmax;iX++)
{
Cx=CxMin + iX*PixelWidth;
/* initial value of orbit = critical point Z= 0 */
Zx=0.0;
Zy=0.0;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
/* */
for (Iteration=0;Iteration<IterationMax && ((Zx2+Zy2)<ER2);Iteration++)
{
Zy=2*Zx*Zy + Cy;
Zx=Zx2-Zy2 +Cx;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
};
/* compute pixel color (24 bit = 3 bytes) */
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
else
{ /* exterior of Mandelbrot set = white */
color[0]=255; /* Red*/
color[1]=255; /* Green */
color[2]=255;/* Blue */
};
/*write color to the file*/
fwrite(color,1,3,fp);
}
}
fclose(fp);
return 0;
}
</syntaxhighlight >
===Integer escape time = LSM/M = dwell bands===
<gallery>
File:Mandelbrot seq.png|Number of details is proportional to maximal number of iterations
File:Animation of the growth of the Mandelbrot set as you iterate towards infinity.gif|Mandelbrot animation based on a static number of iterations per pixel. Here you can see why '''offset''' is sometimes used ( because - color gradient changes : for high MaxIteration disapears.
</gallery>
Here color is proportional to last iteration ( of final_n, final iteration).<ref>[http://plus.maths.org/content/computing-mandelbrot-set Computing the Mandelbrot set by Andrew Williams]</ref>
This is also called [[w:Level Set Method|Level Set Method]] ( LSM )
<math>L_n= \{ c : z_n \in T ~~\mbox{and} ~~ z_k \notin T ~~\mbox{where}~~ k<n \}\,</math>
====C====
[[Image:Mandel_lsm_bw.jpg|thumb|LSM/M image with full code in C]]
Difference between Mandelbrot algorithm and LSM/M is in only in part instruction, which computes pixel color of exterior of Mandelbrot set. In LSM/M is :
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set = LSM */
else if ((Iteration%2)==0)
{ /* even number = black */
color[0]=0; /* Red */
color[1]=0; /* Green */
color[2]=0; /* Blue */
}
else
{/* odd number = white */
color[0]=255; /* Red */
color[1]=255; /* Green */
color[2]=255; /* Blue */
};
</syntaxhighlight>
Here is [[w:C (programming language)|C]] function whithout explicit complex numbers, only doubles:
<syntaxhighlight lang="c">
int GiveEscapeTime(double C_x, double C_y, int iMax, double _ER2)
{
int i;
double Zx, Zy;
double Zx2, Zy2; /* Zx2=Zx*Zx; Zy2=Zy*Zy */
Zx=0.0; /* initial value of orbit = critical point Z= 0 */
Zy=0.0;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
for (i=0;i<iMax && ((Zx2+Zy2)<_ER2);i++)
{
Zy=2*Zx*Zy + C_y;
Zx=Zx2-Zy2 +C_x;
Zx2=Zx*Zx;
Zy2=Zy*Zy;
};
return i;
}
</syntaxhighlight>
here a short code with complex numbers:
<syntaxhighlight lang=c>
// https://gitlab.com/adammajewski/mandelbrot_wiki_ACh/blob/master/betm.c
int iterate(double complex C , int iMax)
{
int i;
double complex Z= 0.0; // initial value for iteration Z0
for(i=0;i<iMax;i++)
{
Z=Z*Z+C; // https://stackoverflow.com/questions/6418807/how-to-work-with-complex-numbers-in-c
if(cabs(Z)>EscapeRadius) break;
}
return i;
}
</syntaxhighlight>
====C++====
Here is C++ function which can be used to draw LSM/M :
<syntaxhighlight lang=Cpp>
int iterate_mandel(complex C , int imax, int bailout)
{
int i;
std::complex Z(0,0); // initial value for iteration Z0
for(i=0;i<=imax-1;i++)
{
Z=Z*Z+C; // overloading of operators
if(abs(Z)>bailout)break;
}
return i;
}
</syntaxhighlight>
I think that it can't be coded simpler (it looks better than pseudocode), but it can be coded in other way which can be executed faster .
Here is faster code :
<syntaxhighlight lang=Cpp>
// based on cpp code by Geek3
inline int fractal(double cx, double cy, int max_iters)
// gives last iteration
{
double zx = 0, zy = 0;
if (zx * zx + zy * zy > 4) return(0); // it=0
for (int it = 1; it < max_iters; it++)
{ double zx_old = zx;
zx = zx * zx - zy * zy;
zy = 2 * zx_old * zy;
zx += cx;
zy += cy;
if (zx * zx + zy * zy > 4.0) return(it);
}
return(max_iters);
}
</syntaxhighlight>
A touch more optimised :
<syntaxhighlight lang=Cpp>
// optimised from cpp code by Geek3
inline int fractal(double cReal, double cImg, int max_iters)
// gives last iteration
{
double zReal = 0, zImg = 0, zReal2 = 0, zImg2 = 0;
//iteration zero is always 0^2+0^2, it will never escape
for (int it = 1; it < max_iters; it++)
{ //because we have zReal^2 and zImg^2 pre-calculated
//we can calculate zImg first
//then we don't need to calculate/store the "old" zReal
zImg = (2 * zReal * zImg ) + cImg;
zReal = zReal2 - zImg2 + cReal;
// calculate next iteration: zReal^2 and zImg^2
// they are used twice so calculate them once
zReal2 = zReal * zReal;
zImg2 = zImg * zImg;
if (zReal2 + zImg2 > 4.0) return(it);
}
return(max_iters);
}
</syntaxhighlight>
See also :
* [https://www.youtube.com/watch?v=nkf6icQln7w Rendering The Mandelbrot Set In C++: Part 1 - Saving Images , Video by Superdavo0001]
====C++ High-Precision Perturbation CLI Renderer====
[[Image:Mandelbrot_Set_Image_110.png|thumb|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.]]
[[Image:Mandelbrot_Set_Image_109.png|thumb|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.]]
[[Image:Mandelbrot_Set_Image_108.png|thumb|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.]]
[[Image:Mandelbrot_Set_Image_107.png|thumb|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.]]
[[Image:Mandelbrot_Set_Image_106.png|thumb|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.]]
Here is a complete, highly optimized C++ implementation for high-precision rendering of the Mandelbrot set using perturbation theory, 8x8 Super-Sampling Anti-Aliasing (SSAA), and OpenMP multi-threading. Created by [[User:Aokoroko]].
<syntaxhighlight lang="cpp">
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <cstdint>
#include <string>
#include <atomic>
#include <omp.h>
#include <cstdio>
#include <iomanip>
#include <gmp.h>
#include <mpfr.h>
using namespace std;
const double PI = 3.14159265358979323846;
const mpfr_prec_t MPFR_BITS = 5000;
#pragma pack(push, 1)
struct BMPHeader {
uint16_t type{0x4D42};
uint32_t size{0};
uint16_t reserved1{0};
uint16_t reserved2{0};
uint32_t offBits{54};
uint32_t structSize{40};
int32_t width{0};
int32_t height{0};
uint16_t planes{1};
uint16_t bitCount{24};
uint32_t compression{0};
uint32_t sizeImage{0};
int32_t xpelsPerMeter{2834};
int32_t ypelsPerMeter{2834};
uint32_t clrUsed{0};
uint32_t clrImportant{0};
};
#pragma pack(pop)
struct ComplexDouble {
double re;
double im;
};
void save_bmp(const string& filename, const vector<uint8_t>& data, int w, int h) {
int rowSize = (w * 3 + 3) & ~3;
BMPHeader header;
header.width = w;
header.height = h;
header.sizeImage = rowSize * h;
header.size = header.sizeImage + 54;
ofstream f(filename, ios::binary);
f.write(reinterpret_cast<char*>(&header), 54);
f.write(reinterpret_cast<const char*>(data.data()), data.size());
f.close();
}
int main() {
string absc_str, ordi_str, size_str;
absc_str = "-1.74907816150520173167912454515663360420734509948112463480292338384";
ordi_str = "-0.00000550991906629096602513098567268615714673236269915508056068145";
size_str = "0.0000000000000000000000000000000000000000000000000000000000000153";
const int targetW = 10000;
const int targetH = 10000;
const int scale = 8;
const int rawW = targetW * scale;
const int rawH = targetH * scale;
cout << "Step 1: Calculating Raw Map (" << rawW << "x" << rawH << ") using Perturbation..." << endl;
vector<uint8_t> iterMap((size_t)rawW * rawH);
mpfr_t rx, ry, zr, zi, zr2, zi2, tmp, sz, st;
mpfr_inits2(MPFR_BITS, rx, ry, zr, zi, zr2, zi2, tmp, sz, st, NULL);
mpfr_set_str(rx, absc_str.c_str(), 10, MPFR_RNDN);
mpfr_set_str(ry, ordi_str.c_str(), 10, MPFR_RNDN);
mpfr_set_str(sz, size_str.c_str(), 10, MPFR_RNDN);
mpfr_div_ui(st, sz, rawW, MPFR_RNDN);
double step_d = mpfr_get_d(st, MPFR_RNDN);
double ref_rec_d = mpfr_get_d(rx, MPFR_RNDN);
double ref_imc_d = mpfr_get_d(ry, MPFR_RNDN);
vector<ComplexDouble> ref_orbit_double(50005);
mpfr_set_ui(zr, 0, MPFR_RNDN);
mpfr_set_ui(zi, 0, MPFR_RNDN);
mpfr_set_ui(zr2, 0, MPFR_RNDN);
mpfr_set_ui(zi2, 0, MPFR_RNDN);
uint32_t ref_i = 0;
bool escaped = false;
while (ref_i < 50000) {
ref_orbit_double[ref_i].re = mpfr_get_d(zr, MPFR_RNDN);
ref_orbit_double[ref_i].im = mpfr_get_d(zi, MPFR_RNDN);
mpfr_mul(tmp, zr, zi, MPFR_RNDN);
mpfr_mul_ui(zi, tmp, 2, MPFR_RNDN);
mpfr_add(zi, zi, ry, MPFR_RNDN);
mpfr_sub(zr, zr2, zi2, MPFR_RNDN);
mpfr_add(zr, zr, rx, MPFR_RNDN);
mpfr_mul(zr2, zr, zr, MPFR_RNDN);
mpfr_mul(zi2, zi, zi, MPFR_RNDN);
if (escaped) {
ref_i++;
break;
}
mpfr_add(tmp, zr2, zi2, MPFR_RNDN);
if (mpfr_cmp_d(tmp, 4.0) >= 0) {
escaped = true;
}
ref_i++;
}
ref_orbit_double[ref_i].re = mpfr_get_d(zr, MPFR_RNDN);
ref_orbit_double[ref_i].im = mpfr_get_d(zi, MPFR_RNDN);
uint32_t max_valid_ref_iter = ref_i;
mpfr_clears(rx, ry, zr, zi, zr2, zi2, tmp, sz, st, NULL);
atomic<int> linesDone{0};
#pragma omp parallel for schedule(dynamic)
for (size_t b = 0; b < (size_t)rawH; ++b) {
for (size_t a = 0; a < (size_t)rawW; ++a) {
double delta_rec = (double)((long long)a - (rawW / 2)) * step_d;
double delta_imc = (double)((long long)b - (rawH / 2)) * step_d;
uint32_t index = 0;
double delta_re = 0.0;
double delta_im = 0.0;
double z_re = 0.0;
double z_im = 0.0;
uint32_t i = 0;
const ComplexDouble* ref_ptr = ref_orbit_double.data();
while (i < max_valid_ref_iter) {
if ((z_re * z_re + z_im * z_im) >= 40000.0) {
break;
}
if ((z_re * z_re + z_im * z_im) < (delta_re * delta_re + delta_im * delta_im)) {
index = 0;
delta_re = z_re;
delta_im = z_im;
}
for (int step = 0; step < 2; ++step) {
double Ur = ref_ptr[index].re;
double Ui = ref_ptr[index].im;
double next_delta_im = 2.0 * Ur * delta_im + 2.0 * Ui * delta_re + 2.0 * delta_re * delta_im + delta_imc;
delta_re = 2.0 * Ur * delta_re - 2.0 * Ui * delta_im + delta_re * delta_re - delta_im * delta_im + delta_rec;
delta_im = next_delta_im;
index++;
}
z_re = ref_ptr[index].re + delta_re;
z_im = ref_ptr[index].im + delta_im;
i += 2;
}
int final_t = 50000 - i;
if (final_t == 0) {
iterMap[b * (size_t)rawW + a] = 255;
} else {
iterMap[b * (size_t)rawW + a] = (uint8_t)(final_t % 254);
}
}
if (++linesDone % 100 == 0) cout << "Progress: " << linesDone << "/" << rawH << "\r" << flush;
}
uint8_t pal[256][3];
for (int a = 0; a < 255; ++a) {
pal[a][0] = (uint8_t)round(127.0 + 127.0 * cos(2.0 * PI * a / 255.0)); // Blue
pal[a][1] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Green
pal[a][2] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Red
}
pal[255][0] = 255; pal[255][1] = 255; pal[255][2] = 255;
cout << "\nStep 2: Rendering frames..." << endl;
int rowSize = (targetW * 3 + 3) & ~3;
for (int frame = 0; frame < 255; ++frame) {
vector<uint8_t> frameData(rowSize * targetH);
#pragma omp parallel for schedule(static)
for (int y = 0; y < targetH; ++y) {
for (int x = 0; x < targetW; ++x) {
uint32_t rSum = 0, gSum = 0, bSum = 0;
for (int j = 0; j < scale; ++j) {
size_t mapRowIdx = (size_t)(y * scale + j) * rawW;
for (int i = 0; i < scale; ++i) {
uint8_t t = iterMap[mapRowIdx + (x * scale + i)];
int colorIdx;
if (t == 255) {
colorIdx = 255;
} else {
colorIdx = (t - frame + 255) % 255;
}
bSum += pal[colorIdx][0];
gSum += pal[colorIdx][1];
rSum += pal[colorIdx][2];
}
}
int outIdx = y * rowSize + x * 3;
frameData[outIdx + 0] = (uint8_t)(bSum >> 6);
frameData[outIdx + 1] = (uint8_t)(gSum >> 6);
frameData[outIdx + 2] = (uint8_t)(rSum >> 6);
}
}
string filename = "Mandelbrot" + to_string(1000 + frame).substr(1) + ".bmp";
save_bmp(filename, frameData, targetW, targetH);
cout << "Frame " << frame << "/254 saved. \r" << flush;
}
return 0;
}
</syntaxhighlight>
See the full project and compiled releases on the official [https://github.com/Divetoxx/Mandelbrot Mandelbrot CLI GitHub repository].
====GLSL====
* [[Fractals/shadertoy#LSM|shadertoy]]
====Java ====
<syntaxhighlight lang="java">
//Java code by Josef Jelinek
// http://java.rubikscube.info/
int mandel(double cx, double cy) {
double zx = 0.0, zy = 0.0;
double zx2 = 0.0, zy2 = 0.0;
int iter = 0;
while (iter < iterMax && zx2 + zy2 < 4.0) {
zy = 2.0 * zx * zy + cy;
zx = zx2 - zy2 + cx;
zx2 = zx * zx;
zy2 = zy * zy;
iter++;
}
return iter;
}
</syntaxhighlight>
====Java Script====
Here is JavaScript function which does not give last iteration but LastIteration modulo maxCol. It makes colour cycling ( if maxCol < maxIt ).
<syntaxhighlight lang="javascript">
function iterate(Cr,Ci) {
// JavaScript function by Evgeny Demidov
// http://www.ibiblio.org/e-notes/html5/fractals/mandelbrot.htm
var I=0, R=0, I2=0, R2=0, n=0;
if (R2+I2 > max) return 0;
do { I=(R+R)*I+Ci; R=R2-I2+Cr; R2=R*R; I2=I*I; n++;
} while ((R2+I2 < max) && (n < maxIt) );
if (n == maxIt) return maxCol; else return n % maxCol;
}
</syntaxhighlight>
Above functions do not use explicit definition of [[w:complex number|complex number]].
====Khan Academy====
* [https://www.khanacademy.org/computer-programming/mandelbrot-set/1274517860 khan academy mandelbrot-set]
====Lisp program ====
Whole Lisp program making ASCII graphic based on code by [http://www.frank-buss.de/ Frank Buss]
<ref>[http://groups.google.com/group/comp.lang.lisp/msg/dd505fd509fc8512 LIsp Program by Frank Buss]</ref>
<ref>[http://bc.tech.coop/blog/040811.html Mandelbrot Set ASCII art at Bill Clementson's blog]</ref>
<syntaxhighlight lang=lisp>
; common lisp
(loop for y from -1.5 to 1.5 by 0.1 do
(loop for x from -2.5 to 0.5 by 0.04 do
(let* ((i 0)
(z (complex x y))
(c z))
(loop while (< (abs
(setq z (+ (* z z) c)))
2)
while (< (incf i) 32))
(princ (code-char (+ i 32))))) ; ASCII chars <= 32 contains non-printing characters
(format t "~%"))
</syntaxhighlight>
====MathMap plugin for [[GIMP|Gimp]]====
<pre>
filter mandelbrot (gradient coloration)
c=ri:(xy/xy:[X,X]*1.5-xy:[0.5,0]);
z=ri:[0,0]; # initial value z0 = 0
# iteration of z
iter=0;
while abs(z)<2 && iter<31
do
z=z*z+c; # z(n+1) = fc(zn)
iter=iter+1
end;
coloration(iter/32) # color of pixel
end
</pre>
====Pov-Ray====
Pov-Ray has a built-in function mandel<ref>[http://www.povray.org/documentation/view/3.6.1/377/ mandel function from 2.5.11.14 Fractal Patterns at Pov-Ray docs]</ref>
====Wolfram Mathematica====
Here is [http://www.bugman123.com/Fractals/index.html code by Paul Nylander]
===Level Curves of escape time Method = LCM/M===
[[Image:LCMM.jpg|right|thumb|edge detection of Level sets]]
[[Image:Lemniscates5.png|thumb|right|Lemniscates of Mandelbrot set]]
Lemniscates are boundaries of Level Sets of escape time ( LSM/M ). They can be drawn using :
* edge detection of Level sets.
** Algorithm described in paper by M. Romera et al.<ref>[http://www.iec.csic.es/~miguel/Preprint3.ps Drawing the Mandelbrot set by the method of escape lines. M. Romera et al.]</ref> This method is fast and allows looking for high iterations.
*boundary trace<ref>http://www.metabit.org/~rfigura/figura-fractal/math.html boundary trace by Robert Figura</ref>
* drawing curves <math>L_n(T)=\{c: abs(z_n)=ER \}\,</math>, see [[:Image:Lemniscates5.png| explanation and source code]]. This method is very complicated for iterations > 5.
===Decomposition of target set for Mandelbrot set drawing===
Decomposition is modification of escape time algorithm.
The '''target set''' is divided into parts (2 or more).
Very large escape radius is used, for example ER = 12.
====Binary decomposition of LSM/M====
[[Image:Mandel_bd.png|thumb|binary decomposition: image with full code in C]]
Here target set <math>T\,</math> on dynamic plane is divided into 2 parts (binary decomposition = 2-decomposition ):
* upper half ( white) <math>T_u = \{ z : |z| > ER ~~\mbox{and}~~ Im (z) > 0\}\,</math>
* lower half (black) <math>T_l = \{ z : |z| > ER ~~\mbox{and}~~ Im (z) \le 0 \}\,</math>
Division of target set induces decomposition of level sets <math>L_n\,</math> into <math>2^{n+1}\,</math> parts ( cells, subsets):
* <math>L_{n,u} =\{ c: |z_n| > ER ~~\mbox{and}~~ Im (z_n) > 0 \}\,</math> which is colored white,
* <math>L_{n,l} = \{ c : |z_n| > ER ~~\mbox{and}~~ Im (z_n) \le 0 \}\,</math> which is colored black.
"The Level Sets and Field Lines are superimposed, creating a sort of grid, and the "squares" of the grid are filled with N-digit binary numbers giving the first N binary digits of the external angles of field lines passing through the square. (Alternately, only the Nth binary digit is used.) Each level set is divided into 2n squares. It is easy to "read" the external arguments of points in the boundary of the Mandelbrot Set using a binary decomposition." Robert P. Munafo
For binary decomposition use exp(pi) as escape radius, so that the boxes appear square (a tip from mrob).
External rays of angles (measured in turns):
<math>angle = (k / 2^n ) ~~\mbox{mod }~1\,</math>
can be seen as borders of subsets.
Difference between binary decomposition algorithm and Mandel or LSM/M is in only in part of instruction , which computes pixel color of exterior of Mandelbrot set. In binary decomposition is :
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set = LSM */
else if (Zy>0)
{
color[0]=0; /* Red */
color[1]=0; /* Green */
color[2]=0; /* Blue */
}
else
{
color[0]=255; /* Red */
color[1]=255; /* Green */
color[2]=255; /* Blue */
};
</syntaxhighlight>
also GLSL code from [[Fractals/fragmentarium|Fragmentarium]] :
<syntaxhighlight lang=GLSL>
#include "2D.frag"
#group Simple Mandelbrot
// maximal number of iterations
uniform int iMax; slider[1,100,1000] // increase iMax
// er2= er^2 wher er= escape radius = bailout
uniform float er2; slider[4.0,1000,10000] // increase er2
// compute color of pixel
vec3 color(vec2 c) {
vec2 z = vec2(0.0); // initial value
// iteration
for (int i = 0; i < iMax; i++) {
z = vec2(z.x*z.x-z.y*z.y,2*z.x*z.y) + c; // z= z^2+c
if (dot(z,z)> er2) // escape test
// exterior
if (z.x>0){ return vec3( 1.0);} // upper part of the target set
else return vec3(0.0); //lower part of the target set
}
return vec3(0.0); //interior
}
</syntaxhighlight>
<syntaxhighlight lang=GLSL>
// zoomasm -- zoom video assembler
// (c) 2019,2020,2021,2022 Claude Heiland-Allen
// SPDX-License-Identifier: AGPL-3.0-only
// recommended KF bailout settings: linear smoothing, custom radius 25
vec3 colour(void)
{
if (getInterior())
{
return vec3(1.0, 0.0, 0.0);
}
bool decomp = getT() < 0.5;
return vec3(decomp ? 0.0 : 1.0);
}
</syntaxhighlight>
Point c is plotting white or black if [[w:complex number|imaginary value]] of last iteration ( Zy) is positive or negative.<ref>http://web.archive.org/20010415125044/www.geocities.com/CapeCanaveral/Launchpad/5113/fr27.htm| An open letter to Dr. Meech from Joyce Haslam in FRACTAL REPORT 27</ref>
==== nth-decomposition ====
This method is extension of binary decomposition.
The target set T = { z : |zn| > R } with a very large escape radius ( for example R = 12 ) is divided into more than 2 parts ( for example 8).<ref>[http://fraktal.republika.pl/mset_decomposition.html mandelbrot set n-th-decomposition ]</ref>
===Real Escape Time===
Other names of this method/algorithm are :
* the fully-renormalized fractional iteration count ( by Linas Vepstas in 1997)<ref>[http://linas.org/art-gallery/escape/escape.html linas.org : Renormalizing the Mandelbrot Escape]</ref>
* smooth iteration count for generalized Mandelbrot sets ( by Inigo Quilez in 2016)<ref>[http://www.iquilezles.org/www/articles/mset_smooth/mset_smooth.htm I Quilez : mset_smooth]</ref>
* continuous iteration count for the Mandelbrot set
* Normalized Iteration Count Algorithm
* Continuous coloring
* smooth colour gradient
* fractional iterations
* fractional escape time
Here color of exterior of Mandelbrot set is proportional not to Last Iteration ( which is integer number) but to real number :
: <math>\nu(z) = \lim_{i \to \infty} (i - \log_2 \log_2 |z_i|)\,</math>
Other methods and speedups
Colouring formula in Ultrafractal :<ref>[http://www.fractalforums.com/programming/what-rangeprecision-for-fractional-escape-counts-for-mandelbrotjulia-sets/ fractalforums : What range/precision for fractional escape counts for Mandelbrot/Julia sets? ]</ref>
smooth iter = iter + 1 + ( log(log(bailout)-log(log(cabs(z))) )/log(2)
where :
* log(log(bailout) can be precalculated
*
====theory====
Description by Claude :
'''First description :'''
If R is large, the first z to escape satisfies (approximately)<ref>[https://fractalforums.org/noobs-corner/76/gradient-pallet-with-two-colors/4498 fractalforums : gradient-pallet-with-two-colors]</ref>
<math>R < |z| < R^p</math>
so taking logs
<math>\log(R) < \log(|z|) < p \log(R)</math>
so taking logs again
<math>\log(\log(R)) < \log(\log(|z|)) < \log(p) + \log(\log(R))</math>
so by algebra
<math>0 < \frac{\log(\log(|z|)) - \log(\log(R))}{\log(p)} < 1</math>
when <math>|z|</math> at escape is bigger, the smooth iteration count should be smaller, so this value needs to be subtracted from the integer iteration count
Alternatively this fraction can be used for interpolation, or used with arg(z) for exterior tiling / binary decomposition.
'''Second description'''<ref>[https://fractalforums.org/programming/11/can-anyone-help-me-understand-smooth-coloring/4597/msg37885 fractalforums.org : can-anyone-help-me-understand-smooth-coloring]</ref>
pick a radius R > 2, then |Z| > R implies that |Z^2 + C| > |Z| and more generally that |Z| -> infinity, this gives R the name escape radius. proof is on math.stackexchange.com somewhere
now suppose R is large, and n is the first iteration where |Z_n| > R.
consider what happens when |Z_n| increases as you move the point C a bit further from the Mandelbrot set boundary.
eventually |Z_n| > R^2, but then |Z_{n-1}| > R, so the iteration count should be n - 1.
for smoothing, we want a value to add to n that is 0 when |Z_n| = R and -1 when |Z_n| = R^2.
taking logs, get log |Z| is between log(R) and 2 log(R)
taking logs again, get log log |Z| is between log log R and log log R + log 2
dividing by log 2, get log_2 log |Z| is between log_2 log R and log_2 log R + 1
subtracting log_2 log R gives (log_2 log |Z| - log_2 log R) is between 0 and 1
negating it gives a value between 0 and -1, as desired
so the smooth iteration count is
<math>n - (log_2 log |Z| - log_2 log R)</math>
(replace 2 by P if you do Z^P + C)
see also http://linas.org/art-gallery/escape/escape.html which makes a value independent of R, but that is not so useful for some colouring algorithms (e.g. smooth part of escape count doesn't align with angle of final iterate)
====C====
To use log2 function add :
<nowiki> #include <math.h> </nowiki>
at the beginning of program.
<syntaxhighlight lang=C>
if (Iteration==IterationMax)
{ /* interior of Mandelbrot set = black */
color[0]=0;
color[1]=0;
color[2]=0;
}
/* exterior of Mandelbrot set */
else GiveRainbowColor((double)(Iteration- log2(log2(sqrt(Zx2+Zy2))))/IterationMax,color);
</syntaxhighlight>
where :
* Zx2 = Zx*Zx
* Zy2 = Zy*Zy
Here is another version by Tony Finch<ref>[http://dotat.at/prog/mandelbrot/ Making Mandelbrot Set Movies by Tony Finch]</ref>
<syntaxhighlight lang=C>
while (n++ < max &&
x2+y2 < inf) {
y = 2*x*y + b;
x = x2-y2 + a;
y2 = y*y;
x2 = x*x;
}
nu = n - log(log(x2+y2)/2)/ log(2);
</syntaxhighlight >
based on equation <ref>[http://linas.org/art-gallery/escape/escape.html Linas Vepstas. Renormalizing the mandelbrot escape.]</ref>
: <math>\nu(z) = n - \log_2 \log (z_n)\,</math>
====C++====
<syntaxhighlight lang=cpp>
// based on cpp code by Geek3 from http://en.wikibooks.org/wiki/File:Mandelbrot_set_rainbow_colors.png
sqrxy = x * x + y * y;
double m = LastIteration + 1.5 - log2(log2(sqrxy));
</syntaxhighlight>
====java====
<syntaxhighlight lang=java>
/**
Smooth coloring algorithm
https://gitlab.com/shreyas.siravara/mandelbrot-with-smooth-coloring/blob/master/Mandelbrot.java
Mandelbrot with Smooth Coloring by Shreyas Siravara
*/
double nsmooth = (iterations + 1 - Math.log(Math.log(Zn.getMagnitude())) / Math.log(ESCAPE_RADIUS));
double smoothcolor = nsmooth / MAX_ITERATIONS;
if (iterations < MAX_ITERATIONS) {
int rgb = Color.HSBtoRGB((float) (0.99f + 1.9 * smoothcolor), 0.9f, 0.9f);
g2d.setColor(new Color(rgb));
} else {
g2d.setColor(Color.black.darker());
}
</syntaxhighlight>
====Matemathica====
Here is [http://www.bugman123.com/Fractals/index.html code by Paul Nylander]. It uses different formula :
<math>cet = n + log_2ln(R) - log_2ln|z|</math>
====Python====
Python code using mpmath library<ref>[http://code.google.com/p/mpmath/ mpmath Python library]</ref>
<syntaxhighlight lang=python>
def mandelbrot(z):
c = z
for i in xrange(ITERATIONS):
zprev = z
z = z*z + c
if abs(z) > ESCAPE_RADIUS:
return ctx.exp(1j*(i + 1 - ctx.log(ctx.log(abs(z)))/ctx.log(2)))
return 0
</syntaxhighlight>
==Distance estimation DEM/M==
<gallery>
File:Demm_2000_Mandelbrot_set.jpg|Exterior DEM/M
File:Boundary mandelbrot set.png|simple boundary with DEM/M
File:Mandelbrot DEM Sobel.png|Boundary with DEM/M and Sobel filter
</gallery>
Variants :
* exterior DEM/M
* interior DEM/M
[[Fractals/Iterations in the complex plane/demm|Description]]
==Complex potential==
[[Fractals/Iterations_in_the_complex_plane/MandelbrotSetExteriorComplex_potential|Description]]
=See also=
* https://web.archive.org/web/20071008112609/http://rgba.scenesp.org/iq/trastero/fieldlines/
* http://fraktal.republika.pl/mset_bottcher.html
=References=
<references/>
{{BookCat}}
mh54o4m8z4nntu9l23leiu7ihhlvsq6
Writing Adolescent Fiction/Character names/Sierra Leonean
0
374215
4641595
4641364
2026-06-29T01:00:15Z
JackBot
396820
Formatting, [[Special:UncategorizedPages]]
4641595
wikitext
text/x-wiki
==Usage note==
Some Sierra Leonean given names are based on birth order, context and gender. These are indicated here.
Sierra Leonean given names are sometimes borrowed from other local ethnic tribes, where one name can be rooted in one group, it may be commonly used within other overlapping groups. For example, ‘Tenneh’ means Monday in Limba, but the name is most commonly observed amongst Temne people too. It is also possible for the same name to have different meanings to different ethnic groups.
Some names listed may not be Sierra Leonean by origin, but used frequently within the country.
==Girls' names==
*Aba
*Abiba - “Blessed / Loved One / “Habiba” (Arabic)
*Abibatu - “Blessed / Loved One / “Habiba” (Arabic)
*Adama - “Earth / Created from the Ground” (Hebrew)
*Adiatu - “God’s Adornment” (Hebrew)
*Aicha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Aisha - “Alive / Thriving” (Arabic)
*Ajaratu - “Prosperous / Precious Stone / ‘Ajar’” (Arabic - West African Localised)
*Alanki - “Given by God” (Limba)
*Amara - “Grace” (Igbo)
*Amie - “Protected / Devoted / ‘Amina’” (Arabic)
*Amida - “Praised / Commendable / ‘Ameeda’” (Arabic)
*Amina - “Protected / Devoted” (Arabic)
*Aminata - “Protected / Devoted / ‘Amina’” (Arabic - West African Localised)
*Ashike - Prosperity (Temne)
*Asuma
*Awa - “Source of Life / Mother of All Living / ‘Hawa’” (Arabic)
*Ayesha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Aysha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Bahnnie - “Remorseful / Emphathetic” (Temne)
*Binta - Daughter / Girl / ‘Bint’ (Arabic - West African Localised)
*Bintu - Daughter / Girl / ‘Bint’ (Arabic - West African Localised)
*Bonyor - Gold (Temne)
*Camu - “It’s Yours” (Temne)
*Damoh - (Limba)
*Dawa
*Egbatima - Unique / Different (Mende)
*Ejatu
*Emivia
*Eyaema - Desired Child (Temne)
*Fanta - “One Who Abstains / ‘Fatima’” (Arabic - Mandinka Localised)
*Fatima - “One Who Abstains” (Arabic)
*Fatmata - “One Who Abstains / ‘Fatima’” (Arabic)
*Fatumata - “One Who Abstains / ‘Fatima’” (Arabic)
*Fenthi - Clean / Proper (Temne)
*Finnoh - Beautiful (Temne)
*Finnor - Beautiful (Temne)
*Finda - Daughter born after second son, female third born
*Fudia - “One Who Sacrifices Herself to Help Others / ‘Fadiya’” (Arabic)
*Fudiatu - “One Who Sacrifices Herself to Help Others / ‘Fadiya’” (Arabic)
*Gbatima - Unique / Different (Mende)
*Gbentha - Brightness (Temne)
*Giloh - "Let this remain" (Mende)
*Habiba - “Blessed / Loved One” (Arabic)
*Habibatu - “Blessed / Loved One / “Habiba” (Arabic - West African Localised)
*Hadijatu - “Early Born Child / ‘Khadijah’” (Arabic - West African Localised)
*Haja - “The Pilgrim / Virtuous / ‘Hajja’” (Arabic)
*Hajja - “The Pilgrim / Virtuous ” (Arabic)
*Hajah - “The Pilgrim / Virtuous / ‘Hajja’” (Arabic)
*Hajaratu “The Pilgrim / Virtuous / ‘Hajja’” (Arabic - West African Localised)
*Hassanatu - “Radiant Beauty / ‘Hasana’” (Arabic - West African Localised)
*Hawa - “Source of Life / Mother of All Living” (Arabic)
*Hawanatu - “Source of Life / Mother of All Living / ‘Hawa’” (Arabic)
*Hejawa - Abundance of Luck (Mende)
*Isata - “Alive / Thriving / ‘Aisha’” (Arabic)
*Isatu - “Alive / Thriving / ‘Aisha’” (Arabic)
*Isha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Iya
*Iyaema - Desired Child (Temne)
*Iye
*Jebbeh
*Jebeh
*Jeneba - “Gift from God / ‘Zaynab’” (Arabic - West African Localised)
*Jenneh - “Gift from God / ‘Zaynab’” (Arabic - West African Localised)
*Jilo - “Let this remain” (Mende)
*Jiloh - “Let this remain” (Mende)
*Jita
*Kadie - “Early Born Child” (Arabic - West African Localised)
*Khadijah - “Early Born Child” (Arabic)
*Khadijatu - “Early Born Child” (Arabic - West African Localised)
*Kainday
*Kamu - “It’s Yours” (Temne)
*Kanyim - Born at night/dark (Temne)
*Kathy - Sunday-born (Limba)
*Kilikuroo - “God-depending” (Temne)
*Kohuneh - Joy / Happiness (Mende)
*Koniaka - (Mende)
*Kpatehnya - (Mende)
*Kumba - Second girl after twins
*Kutu
*Koiya - (Temne)
*Konya - (Mende)
*Lavina - Purity (Latin)
*Lavinia - Purity (Latin)
*Luba - Blessing (Mende)
*Mabaindu
*Mabendu
*Mabinty
*Magayai
*Magbindi
*Magenda
*Mahunbey - “To Take Care / Look After” (Mende)
*Mariama - “Star of the Sea” (Hebrew - West African Localised)
*Mariatu - “Star of the Sea” (Hebrew - West African Localised)
*Mamie
*Mara - “To Protect” (Soninke)
*Marie - “Star of the Sea” (Hebrew)
*Maseray
*Massa
*Mbalu
*Mateneh - “Mother born on a Monday”
*Memuna - “Fortunate / Lucky / ‘Maymuna’” (Arabic)
*Mentima - (Mende)
*Muboneh - “Happiness” (Temne)
*Mujeh - “Our Mother” (Mende)
*Mujeni - “Our Mothers” (Mende)
*Muliima - “Relying (on..)” (Mende)
*Musu - “Beautiful Wife / Beautiful Woman” (Mande)
*Nadewa - (Limba)
*Namina - (Limba)
*Nasratha - “Victory / ‘Nasrat’” (Arabic)
*Nasratu - “Victory / ‘Nasrat’” (Arabic)
*Nayana - (Limba)
*Ndelei - “Peace / Blissful Heart” (Mende)
*Ndeleiva - “Let Peace Prevail” (Mende)
*Ndomayah - “Because of Love” (Mende)
*Nekami - “Self-Pitying” (Temne)
*Neneh
*Nepor - Courage (Mende)
*Nikami - Self-Pitying (Temne)
*Nouhou
*Nyahagbayie - “Woman of Might” (Mende)
*Nyahanina - (Mende)
*Nyaleimava - (Mende)
*Nyalima - (Mende)
*Nyanda - (Mende)
*Nyawa - (Mende)
*Nyawo - (Mende)
*Nyayah - (Mende)
*Okemi - “My Own” (Temne)
*Okiya - Mine (Limba)
*Okiyan - Mine (Limba)
*Orkemi - “My Own” (Temne)
*Othimo - Liked (Limba)
*Oyola - “The Rich One” (Temne)
*Posseh
*Preysok - “Morning-born child” (Temne)
*Pruvah
*Rakiatu
*Raliatu
*Ramatu
*Rukoh
*Ruuba - Blessing/Thank You (Temne)
*Rugiatu
*Sabatu
*Sadanmei - (Limba)
*Sadira
*Safiatu
*Saffiatu
*Sallay
*Salamatu
*Salimatu
*Sampa - (Temne)
*Sapunka - Unbearable (Limba)
*Sawie
*Seinya
*Serah - Firstborn daughter (Limba)
*Seray
*Sia - Gift (Mande)
*Siabanda - Firstborn daughter
*Simithi - Saturday-born (Limba)
*Sinithi - Saturday-born (Limba)
*Tachekor - “Protected child / “Left to be”” (Temne)
*Tataigbon - “Untouchable” (Temne)
*Tatessa - Fairest of them all (Temne)
*Tenne - Monday-born (Limba)
*Tenneh - Monday-born (Limba)
*Tewoh - (Mende)
*Thachaikor - “Protected child / “Left to be”” (Temne)
*Thaduba - Blessing (Limba)
*Thatema - (Limba)
*Thathesa - “Fairest of them all” (Temne)
*Thathesar - “Fairest of them all” (Temne)
*Theneleh
*Tilima - “Relying (on..)” (Mende)
*Titi - Girl (Krio)
*Umu - “Mother / ‘Ummu’” (Arabic)
*Unama
*Wuzairiatu
*Yabom
*Yabu
*Yaddah
*Yafeh - Peace (Temne)
*Yakasu - (Temne)
*Yakoiya - (Temne)
*Yalie - Advice (Limba)
*Yankain - (Limba)
*Yanbakie - (Temne)
*Yandi - Please (Limba)
*Yannoh - “Mother” (Temne)
*Yarimeh - (Limba)
*Yatta
*Yayo - “Mother” (Temne)
*Yayor - “Mother” (Temne)
*Yeabu
*Yeani - “Mothers” (Temne)
*Yeanoh - “Mother” (Temne)
*Yeanor - “Mother” (Temne)
*Yenor - “Mother” (Temne)
*Yietoma
*Yoyonthor
*Zainab - “Fragrant flower” (Arabic)
*Zaria - “Princess / ‘Sarah’” (Hebrew) “Flower / ‘zahr’” (Arabic)
*Zariatu - “Princess / ‘Sarah’” (Hebrew) “Flower / ‘zahr’” (Arabic)
*Zairiatu - “To bloom / ‘zāra’” (Arabic)
==Boys' names==
*Abdul - “Servant (of)” (Arabic)
*Abdullah - “Servant of Allah” (Arabic)
*Abdulai - “Servant of Allah / ‘Abdullah’” (Arabic)
*Abu - “Father (of)” (Arabic)
*Abubakar - “Father of a Young Camel / ‘Abu Bakr’” (Arabic)
*Abudu - “Servant of Allah” (Arabic - West African Localised)
*Aiah - Third-born son born after twins (Temne)
*Alasan - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Alhaji - “The Pilgrim / ‘Al-Hajj’” (Arabic)
*Ali - High / Exalted / Elevated (Arabic)
*Alieu - Strong (Mandinka/Mande) - High (Arabic)
*Almamy - “The Leader / ‘Al-Imam’” (Arabic)
*Alimamy - “The Leader / ‘Al-Imam’” (Arabic)
*Alpha - “The Jurist / The Scholar / ‘Al-Fariq’” (Arabic - West African Localised)
*Alusine - “The Handsome / ‘Al-Husayn’” (Arabic)
*Amadu - “The One Who Constantly Thanks God / Highly Commendable / ‘Ahmad’” (Arabic - West African Localised)
*Ansumana - "Protector of His Name"/ "One Who Defends His Name” (Mandinka/Mande)
*Arun - “High-ranking / Mountain of Strength / ‘Harun’” (Arabic) ‘Aaron’ (Hebrew)
*Aruna - “High-ranking / Mountain of Strength / ‘Harun’” (Arabic) ‘Aaron’ (Hebrew)
*Arsheke - (Temne)
*Arshekeh - (Temne)
*Aya - Third-born son born after twins (Temne)
*Babah
*Bai - Chief/Strength (Temne)
*Bai-Bai - (Temne)
*Baika - (Mende)
*Baisharu - (Temne)
*Bakar - Early Dawn / “Young Camel” ‘Abu Bakr’ - Arabic
*Baksene - Patience (Temne)
*Bambara - Riverine Flooding, “One who has Force” (Limba)
*Banekore - (Temne)
*Bangali
*Bankolo - “Don’t try it” (Limba)
*Barikeh - “Thank You” (Temne)
*Barome - (Temne)
*Benkutay - “Have you seen” (Limba)
*Benya
*Beyasi - Security (Limba)
*Brima - Second-born son (Mandinka/Mande) “Father of Many / ‘Ibrahim’” (Arabic)
*Bockarie
*Boimah
*Boineh - Happy (Temne)
*Bonyor - Gold (Temne)
*Chernoh
*Dauda - “Beloved / Dear One / ‘Dawood’” (Arabic - West African Localised)
*Dausie - “Beloved / Dear One / ‘Dawood’” (Arabic - West African Localised)
*Ervel
*Fayia - Second-born boy (Kissi / Kono)
*Fallah
*Fatha
*Fenthi - Clean / Proper (Temne)
*Fino - Pretty (Temne)
*Finnoh - Pretty (Temne)
*Foday - “Heart / Conscious / ‘Fuad’” (Arabic)
*Gbassay
*Gbemute - (Temne)
*Gassimu
*Hachim - “Born in temporary separation” (Temne)
*Hassan - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Hassana - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Ibra - “Father of Many” (Arabic)
*Ibrahim - “Father of Many” (Arabic)
*Ibrahima - “Father of Many” (Arabic)
*Idris - “Studious / Smart” (Arabic)
*Idrissa - “Studious / Smart” (Arabic)
*Jami
*Juma
*Jusu
*Kabba
*Kai - Chief/Elder (Temne) - Man (Vai)
*Kaima
*Kaloko
*Kalom - Straightforward (Temne)
*Kalomp - Straightforward (Temne)
*Kambi
*Kandeh
*Kanneh
*Kanuwally - “God, I thank you” (Limba)
*Karefa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Karifa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Kassim
*Kaskami - “My Father” (Temne)
*Kaskasu - “Our Father” (Temne)
*Kehwalleh
*Kei
*Kelfa - “The One Who Pays” (Mandinka/Mande)
*Kelefa - “The One Who Pays” (Mandinka/Mande)
*Kemoh
*Kemokai - “Man from Kemo” (Vai/Mande)
*Kewullay
*Komba
*Komrabai - Chief/Elder (Temne)
*Kohuneh - Joy / Happiness (Mende)
*Koray
*Kowa
*Koyie
*Koyon - Rain (Limba)
*Kuruuba - Hero (Temne)
*Kuruugba - Hero (Temne)
*Lamin - “Trustworthy / Faithful / ‘Al-Amin’” (Arabic)
*Lamie - “Trustworthy / Faithful / ‘Al-Amin’” (Arabic)
*Lansana - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Luba - Blessing (Mende)
*Mahai
*Mai
*Mahmadu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Mamadu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Mamudu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Makoo
*Malakai - “My Messenger / My Angel / ‘Malaki’” (Hebrew)
*Maliki - “King / Sovereign / ‘Malik’” (Arabic)
*Mayon - First born (Limba)
*Mohamed - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Momodu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Momoh - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic - Mano River Basin Localised)
*Morlai
*Morlay
*Mukeh - “Our Father” (Mende)
*Muliima - “Relying (on..)” (Mende)
*Muloma - “Harmony” (Mende)
*Musa - “Saved from the Water” (Arabic) ‘Moses’ (Hebrew)
*Mustapha - “The Chosen One / ‘Mustafa’” (Arabic)
*Nabie
*Najee
*Ndawa
*Ndeleiva - “Let Peace Prevail” (Mende)
*Obrahim - “Father of Many / ‘Ibrahim’” (Arabic)
*Okaskasu - “Our Father” (Temne)
*Olobi
*Osman - Baby bustard desert bird; wisdom, strength, leadership / ‘Uthman’ (Arabic, cultural symbol)
*Ousman - Baby bustard desert bird; wisdom, strength, leadership / ‘Uthman’ (Arabic, cultural symbol)
*Pilleh
*Saa/Saah (first boy)
*Sadiq - “Truthful One / Sincere / ‘Siddiq’” (Arabic)
*Said - “Fortunate / Blessed” (Arabic)
*Saidu - “Fortunate / Blessed” (Arabic - West African Localised)
*Salfu - “Righteous / Pious / ‘Salih’” (Arabic)
*Salieu - “Righteous / Pious / ‘Salih’” (Arabic)
*Sallieu - “Righteous / Pious / ‘Salih’” (Arabic)
*Samba
*Sampa - (Temne)
*Sana
*Sandima
*Santigie
*Sara
*Sarjoh
*Sarway
*Sei
*Sembeh - Strength (Limba)
*Senesie
*Senie
*Sento
*Sesay
*Sheaka
*Shekhu - “Chieftain / Religious Leader / ‘Sheikh’” (Arabic)
*Sheikhu - “Chieftain / Religious Leader / ‘Sheikh’” (Arabic)
*Sheriff - “Noble / Honorable / ‘Sharif’” (Arabic)
*Siafa
*Siaka
*Sidi - “Truthful One / Sincere / ‘Siddiq’” (Arabic)
*Sidiki - “Truthful One / Sincere / ‘Siddiq’” (Arabic)
*Sidiq - “Truthful One / Sincere” (Arabic)
*Soriba
*Sorie
*Sulay - “Man of Peace” (Arabic)
*Suley - “Man of Peace” (Arabic)
*Sulaiman - “Man of Peace” (Arabic)
*Suleiman - “Man of Peace” (Arabic)
*Suleyman - “Man of Peace” (Arabic)
*Taiwo - “First Twin to Taste the World” (Yoruba)
*Takothor
*Tamarane - “Helper / Let Us Help” (Temne)
*Tamba - Second-born son born after twins
*Taypineh - (Temne)
*Tejan - Crown / royal headband / ‘Tijan’ (Arabic)
*Thaduba - Blessing (Limba)
*Thaimu - (Temne)
*Thamba - Second-born son born after twins
*Thasneh - “Too much” (Temne)
*Thegeka - “Mindful to their own” (Limba)
*Thoyenkeh - (Temne)
*Umar - “Flourishing / Long-Lived / ‘Omar’” (Arabic)
*Umaru - “Flourishing / Long-Lived / ‘Omar’” (Arabic)
*Unisa
*Usman - Baby bustard desert bird; wisdom, strength, leadership / ‘Uthman’ (Arabic, cultural symbol)
*Wesseh
*Yahya
*Yakub - “One Who Follows / Supplanter” (Arabic) ‘Jacob’ (Hebrew)
*Yakuba - “One Who Follows / Supplanter / ‘Yakub’” (Arabic) ‘Jacob’ (Hebrew)
*Yamba
==Surnames==
*Abdulai - “Servant of Allah / ‘Abdullah’” (Arabic)
*Alieu - Strong (Mandinka/Mande) - High (Arabic)
*Allieu - Strong (Mandinka/Mande) - High (Arabic)
*Amara
*Ansumana - "Protector of His Name"/ "One Who Defends His Name” (Mandinka/Mande)
*Bah
*Bai - Chief / Strength (Temne)
*Baion
*Bakarr - Early Dawn / “Young Camel” ‘Abu Bakr’ - Arabic
*Balde
*Bangura
*Banorah
*Banya
*Barrie
*Bassie
*Bayoh
*Bendu
*Bengeh
*Benya
*Bockarie
*Boima
*Brewah
*Brima - Second-born son (Mandinka/Mande) “Father of Many / ‘Ibrahim’” (Arabic)
*Bundu
*Carew
*Cocker - Fighter / Wrangler (Middle English) *common amongst the Krio
*Coker - Fighter / Wrangler (Middle English) *common amongst the Krio
*Conteh
*Daboh
*Dambeli
*Dambelly
*Daramy
*Dauda - “Beloved / Dear One / ‘Dawood’” (Arabic - West African Localised)
*Deen
*Dukureh
*Dumbuya
*Foday - “Heart / Conscious / ‘Fuad’” (Arabic)
*Fofana
*Fofanah
*Foh
*Fomah
*Fomba
*Foray
*Gaba
*Ganda
*Gassama
*Gwary
*Gassimu
*Gbla
*Gblah
*Gbondo
*Gborie
*Gevao
*Jabati
*Jabbie
*Jadama
*Jah
*Jalloh
*Jammeh
*Janneh
*Jarsey
*Jawara
*Jaward - “Open-handed / Generous / ‘Jawad’” (Arabic)
*Jebbeh
*Jinkang
*Jobarteh
*Jones - son of John (English) *common amongst the Krio
*Juana
*Jusu
*Kabba
*Kabbah
*Kabia
*Kaikai
*Kailie
*Kallay
*Kallon
*Kalokoh
*Kamanda
*Kamara - “Protecting Village / Home” (Soninke)
*Kandeh
*Kanneh
*Kanu
*Kanuteh
*Kanuwally - “God, I thank you” (Limba)
*Karefa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Karew
*Karifa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Kargbo
*Karimu
*Katta
*Kawa
*Kebbie
*Keita
*Khia
*Koita
*Koker - Fighter / Wrangler (Middle English) *common amongst the Krio
*Komba
*Komai
*Konateh
*Konneh
*Konteh
*Konomanyi
*Koroma
*Kowa
*Kpaka
*Kurubally
*Kuyateh
*Lahai
*Lamin - “Trustworthy / Faithful / ‘Al-Amin’” (Arabic)
*Lansana - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Lavalie - (Mende)
*Lebbie
*Lunsar - “Lion’s town” “Place of stones” (Temne - Town in the Northern Province)
*Luseni
*MacCarthy - “son of Cárthach" "loving/beloved” (Irish / Gaelic) *common amongst the Krio
*MacFoy - “Son of the Potter” (Scottish / Gaelic) *common amongst the Krio
*Mani - (Kono / Kissi)
*Manjang
*Manneh
*Mansaray
*Mara - “To Protect” (Soninke)
*Marah - “To Protect” (Soninke)
*Margai
*Marrah - “To Protect” (Soninke)
*Massally
*Massaquoi - “Chief / Ruler” (Vai)
*Mattia
*Mayeh
*Mbayo
*Minteh
*Momoh - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic - Mano River Basin Localised)
*Moriba
*Morong
*Moseray
*Munu
*Musa - “Saved from the Water” (Arabic) ‘Moses’ (Hebrew)
*Ngegba
*Ngobeh
*Panneh
*Pessima
*Quee
*Saccoh
*Saffa
*Saidu - “Fortunate / Blessed” (Arabic - West African Localised)
*Sall
*Sama
*Samah
*Samai
*Samba
*Sambo
*Samura
*Samurah
*Sankarah
*Sankareh
*Sankoh
*Sannoh
*Sanu
*Sanyang
*Sawaneh
*Sawyerr - “One Who Saws Wood / Woodcutter” (English) *common amongst the Krio
*Sekoh
*Sellu
*Senesie
*Sengulay
*Sesay
*Sheriff - “Noble / Honorable / ‘Sharif’” (Arabic)
*Sidibay
*Sidibeh
*Sidibey
*Sillah
*Sonko
*Sorie
*Sow
*Sowa
*Suma
*Suso
*Swaray
*Swarray
*Tamba - Second-born son born after twins
*Tarawali
*Tarawalie
*Tarawallie
*Tarawally
*Taylor - Cutter of cloth / ‘Tailor’ (English / French) *common amongst the Krio
*Tejan - Crown / royal headband / ‘Tijan’ (Arabic)
*Tengbeh
*Tholley
*Thoronka
*Timbo
*Tonkara
*Tucker - Softener of cloth (English) *common amongst the Krio
*Tumoe
*Tunkara
*Turay
*Vandi
*Vandy
*Wariteh
*Williams - son of William (English) *common amongst the Krio
*Woobay
*Wulladeh
*Wurie
*Yakawa
*Yambasu
*Yansaneh
*Yansanneh
*Yiraia
{{BookCat}}
ig8stem45xle89sfmytozyxuvim7swb
Hokkien/Pronunciation
0
376218
4641640
4324140
2026-06-29T08:22:25Z
一隻北極熊
3609960
4641640
wikitext
text/x-wiki
== Hokkien sounds ==
=== Syllables ===
There are far fewer syllables in the Hokkien language than English. The syllables are also easily described with the concepts of ''initials'' and ''finals''. A syllable begins with a single consonant. This is called the ''initial''. The rest of the syllable is called the ''final.'' A final can have a single vowel or a diphthong (two vowels that glide from one to the other) and an optional final consonant (''p'', ''t'', ''k'', ''h'', ''m'', ''n'', or ''ng''). Additionally, finals in Hokkien can
be nasalized.
The pronunciation guide below is based on American English except where otherwise noted. Not all sounds can be described with English words and some are just approximations at best. Be sure to listen to actual speakers to ensure that your pronunciation is correct.
=== Initials ===
{|border="0" cellspacing="3" cellpadding="2" style="text-align: center"
|-
|'''Tai5-lo5'''
|'''Pronunciation'''
|'''IPA'''
|-
|b
|'''b''' in "'''b'''all"
|b
|-
|p
|'''p''' as in "s'''p'''at"
|p
|-
|ph
|'''p''' as in "'''p'''at"
|pʰ
|-
|m
|'''m''' as in "'''m'''om"
|m
|-
|t
|'''t''' in "s'''t'''op"
|t
|-
|th
|'''t''' as in "'''t'''op"
|tʰ
|-
|n
|'''n''' as in "'''n'''ot"
|n
|-
|l
|'''l''' as in "'''l'''ap"
|l
|-
|g
|'''g''' in "'''g'''ood"
|g
|-
|k
|'''k''' as in "s'''k'''it"
|k
|-
|kh
|'''k''' as in "'''k'''ite"
|kʰ
|-
|ng
|'''ng''' as in "si'''ng'''er"
|ŋ
|-
|h
|'''h''' as in "'''h'''ot"
|h
|-
|j
|Blend of the '''ds''' in "be'''ds'''" and the '''j''' in "'''j'''am"
|dz
|-
|ts
|'''ts''' in "ca'''ts'''"
|ts
|-
|tsh
|Blend of the '''ts''' in "ca'''ts'''" and the '''ch''' in "'''ch'''urch"
|tsʰ
|-
|s
|'''s''' as in "'''s'''un"
|s
|-
|}
==== Tips on initials ====
* The consonant ''j'' has merged with ''l'' in many speakers, especially in Chuan-chiu, since the early 20th century. It is still frequently written out in the romanization scheme though.
* The triplets ''g'', ''k'', ''kh'' and ''b'', ''p'', ''ph'', as well as ''j'', ''ch'', ''chh'' (voiced unaspirated, unvoiced unaspirated, unvoiced aspirated) are rare among languages and need some practice to correctly distiguish.
* When followed by ''i'', i.e. ''ji'', ''chi'', ''chhi, si'', the consonants ''j'', ''ch'', ''chh'', ''s'', take on the IPA values: [dʑ], [tɕ], [tɕʰ], [ɕ]. No true equivalents in English exist, but [tɕ], [tɕʰ] correspond to Mandarin ''j'', ''q''.
* ''b'' and ''g'' are slightly nasalized, reflecting their development from Old/Middle Chinese ''m'' and ''ng''
=== Finals ===
{|border="0" cellspacing="3" cellpadding="2" style="text-align: center"
|-
|'''Tai-lo'''
|'''Pronunciation'''
|'''IPA'''
|-
|a
|'''a''' as in "sp'''a'''"
|a
|-
|ap
|'''op''' as in "t'''op'''"
|ap
|-
|at
|'''ot''' as in "p'''ot'''"
|at̚
|-
|ak
|'''ock''' as in "s'''ock'''"
|ak̚
|-
|ah
|First '''a''' as in "'''aha'''"
|aʔ
|-
|ann
|'''a''' as in "sp'''a'''"
|ã
|-
|am
|'''am''' as in "Vietn'''am'''"
|am
|-
|an
|'''on''' as in "c'''on'''"
|an
|-
|ang
|'''ong''' as in "t'''ong'''s"
|aŋ
|-
|ai
|'''igh''' as in "s'''igh'''"
|ai
|-
|e
|'''e''' as in "b'''e'''t"
|-
|ei
|'''ay''' as in "s'''ay'''"
|-
|em
|'''em''' as in "t'''em'''ple"
|-
|eng
|'''ang''' as in "'''ang'''ry"
|-
|ek
|'''eck''' as in "p'''eck'''"
|-
|i
|'''ee''' as in "t'''ee'''"
|-
|iu
|'''ew''' as in "f'''ew'''"
|-
|im
|'''eem''' as in "s'''eem'''"
|-
|in
|'''een''' as in "s'''een'''"
|-
|ing
|'''ing''' as in "s'''ing'''"
|-
|ip
|'''eep''' as in "sl'''eep'''"
|-
|it
|'''eet''' as in "m'''eet'''"
|-
|ik
|'''ick''' as in "s'''ick'''"
|-
|o
|'''or''' as in "'''or'''" (British English)
|-
|oi
|'''oy''' as in "b'''oy'''"
|-
|ou
|'''o''' as in "n'''o'''"
|-
|on
|'''on''' as in "c'''on'''" (British English)
|-
|ong
|'''ong''' as in "s'''ong'''"
|-
|ot
|'''ot''' as in "h'''ot'''" (British English)
|-
|ok
|'''ock''' as in "s'''ock'''
|-
|u
|'''oo''' as in "t'''oo'''"
|-
|ui
|'''ooey''' as in "g'''ooey'''"
|-
|un
|'''oon''' as in "s'''oon'''"
|-
|ung
|combination of '''ou''' and '''ng'''
|-
|ut
|'''oot''' as in "b'''oot'''"
|-
|uk
|'''ook''' as in "t'''ook'''"
|-
|eu
|'''er''' as in "h'''er'''" (British English, with rounded lips)
|-
|eung
|combination of '''eu''' and '''ng'''
|-
|euk
|'''ork''' as in "w'''ork'''" (British English)
|-
|eui
|'''eui''' as in "d'''eui'''l" (French)
|-
|eun
|'''ine''' as in "eng'''ine'''"
|-
|eut
|'''ut''' as in "p'''ut'''"
|-
|yu
|'''u''' as in "t'''u'''" (French)
|-
|yun
|'''un''' as in "'''union'''"
|-
|yut
|'''Ut''' as in "'''Ut'''ah"
|-
|m
|'''mm''' as in "h'''mm'''"
|-
|ng
|'''ng''' as in "si'''ng'''"
|}
==== Tips on finals ====
* The final consonants ''p'', ''t'', and ''k'' are '''unreleased'''. This means that they are virtually silent and you hear no "puff of air" at the end of the syllable. To give a concrete example, say the word "cup" and do not open your lips at the end of the word. Note how there is no "puff of air" at the end. The ''k'' sound will also shift from being what is termed a '''velar stop''' to a '''glottal stop''' when it is used to add liveliness to final modal particles. The final consonant ''k'' will sometimes disappear in rapid speech as in the expression ''m4 sai2 haa[k]3 hei3''.
* The ''aa'' sounds are a low back vowel which is slightly longer in length and different in quality from the ''a'' sounds. Be sure to note the difference in these sounds since confusing the two will change the meaning of words.
* The vowel quality in ''ing'', ''it'', and ''ik'' is not the same as in ''in'',''im'', or ''i''. It's the same difference between the English words "sin" and "seen" (or in grammar school terms a "short" vowel versus a "long" vowel). While this difference is not as important as the one above since it does not contrast word meanings, you will have a much more obvious "foreign accent" if you do not master these two sounds.
* The ''yu'' sound does not exist in English but it is not hard to produce. Start by saying a long ''i'' as in "see" and--without changing anything else!--round your lips. It's a common sound in French so "think French" if you have to.
* The ''eu'' sound does not exist in English either but like the ''yu'' it's just a case of rounding the lips. Start by saying the ''e'' sound in "bet" and--without changing anything else!--round your lips.
* The ''eui'' sound is simply a fusion of ''eu'' and ''i'' ("eu-ee") into a single syllable.
* The ''o'' sound does not exist in '''American''' English, but it is in British English. It is the back rounded vowel that you hear when British people say "more" or "scorn". If you listen carefully to a British speaker, you'll notice they do not pronounce the "r" in these words. It is the quality of the "o" vowel that makes them unique to American speakers' ears.
* The final ''eung'' has a faint, British ''r'' sound riding on the vowel, so the number two would be pronounced somewhat like "leurng". Be careful -- pronouncing this sound with an American ''r'' is a common mistake that sounds extremely foreign.
* Only the finals ''m'' and ''ng'' can be used as standalone [[w:nasal consonant|nasal]] syllables.
* Vowels preceding nasal final consonants are not nasalized, yet vowels following nasal consonants are. You can hold your nose while pronouncing some syllables such as ''sin1'' or ''ngo5'' to test your pronunciation. It's not critical to get this right, but doing so will reduce any apparent foreign accent.
==Tones==
{{BookCat}}
l2cp2y28htu7818d9xpg010jwf9awlk
Oberon/A2
0
384060
4641518
4641337
2026-06-28T15:05:39Z
PeterEasthope
660399
/* Module Sources, Tools and Configuration Texts */ Added MyA2
4641518
wikitext
text/x-wiki
__TOC__
{{center|[[Oberon/Linz Oberon, V4|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">← Linz Oberon, V4</span>]] [[Oberon|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">↑ Oberon front page</span>]] [[Oberon/V5|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">V5 →</span>]]}}
== Links ==
[https://gitlab.inf.ethz.ch/felixf/oberon Gitlab at ETHZ]<br>
<!-- [http://cas.inf.ethz.ch/projects/a2/repository/show/trunk/ocp/Documentation Documentation at ETHZ] -->
== Tested Instances ==
[[w:Oberon_(operating_system)#A2|A2]] can be installed and used on a bare [[w:IBM_PC_compatible|PC]]. That includes desktop and laptop machines obsolete for commercial operating systems. A2 can also be a subsystem in an [[w:ARM_architecture_family|ARM]], [[w:MS Windows|MS Windows]] or [[w:Unix-like|Unix-like]] system.
{| class="wikitable"
|+
|-
! style="width: 12em" | Host System
! style="width: 12em" | Subsystem
! Notes
|-
| [[w:OLPC_XO#Software|OLPC 13.2.11]] on XO-1.5 || [http://user.informatik.uni-bremen.de/fld/UnixAos/ LinuxA2 rev.7355] || Outdated SSL/TLS in OLPC 13.2.11 prevented connection to Wikipedia.
|-
| [https://wiki.debian.org/DebianReleases Debian 11] on a generic PC || [http://user.informatik.uni-bremen.de/fld/UnixAos/ LinuxA2 rev.9779] ||
|-
| [https://wiki.debian.org/DebianReleases Debian 12] on a generic PC || [[Oberon/A2#The_A2_Repositories|LinuxA2 Generic,<br>64-bit, Apr 19 2023]]
| Oberon keyboard input bug, [https://gitlab.inf.ethz.ch/felixf/oberon/-/issues/141 Issue 141]. Retrieve and compile [https://gitlab.inf.ethz.ch/-/project/23928/uploads/5b412cf39e8049b6bd2407670ce6599a/MyUnix.KbdMouse.Mod MyUnix.KbdMouse.Mod]. <F12> disables HotKeys to allow Oberon keyboard functionality. If <Backspace> key doesn't work, try <Delete>.
|-
| [https://easyos.org EasyOS 7.4.2]
| [[Oberon/A2#The_A2_Repositories|LinuxA2 Generic,<br>64-bit, Jun 27 2026]]
| At 2026.06.27 EasyOS is available for the 64 bit PC; not the 32 bit PC. Also apply MyUnix.KbdMouse.Mod as noted above.
|}
== Installing and Running UnixAOS ==
The original instructions<ref name="Git"/> for installing UnixAOS are in [http://user.informatik.uni-bremen.de/fld/UnixAos/Readme.txt http://user.informatik.uni-bremen.de/fld/UnixAos/Readme.txt]. Installation files are available from [http://user.informatik.uni-bremen.de/fld/UnixAos/ http://user.informatik.uni-bremen.de/fld/UnixAos/].
[[File:LinuxA2Gen32bit.rev.9527.png|thumb|The display of freshly installed LinuxAos Generic 32-bit, rev.9527.]]
The shell script installer assumes existence of a sys group in the host. For systems lacking this group, the script is easily adapted. For example, the line,
chgrp -R sys ${aosdir}
can be changed to this.
chgrp -R bin ${aosdir}
The UnixAOS working directory can have an [[w:Ext2|ext2]] or [[w:File_Allocation_Table|FAT]] filesystem on a removable flash store.
===Revisions Prior to 10272===
The default directory for the system is /usr/aos. By default, install.UnixAos installs start script /usr/bin/aos. The aos script adjusts the operating system environment before starting aos.{solaris,linux,darwin}. As noted in [http://www.informatik.uni-bremen.de/~fld/UnixAos/Readme.txt Readme.txt], UnixAos can be started with these two commands.<ref name="linePrefix"/>
[[w:Cd_(command)|cd]] <myWorkingDirectory>
aos
<myWorkingDirectory> must be replaced with a specific directory name.
===Revision 10272===
The default directory for the system is /usr/local/A2 and the default start script is /usr/local/bin/a2. A2 can be started with these commands.
[[w:Cd_(command)|cd]] <myWorkingDirectory>
a2
As for earlier releases, <myWorkingDirectory> represents a specific directory name.
==User and Machine Specific Configuration of UnixAOS==
UnixAos is configured by [[Oberon/A2#Module_Sources,_Tools_and_Configuration_Texts|Configuration.XML]]. The Oberon subsystem is configured by [[Oberon/A2#Module_Sources,_Tools_and_Configuration_Texts|Oberon.Text]]; refer to the [[Oberon/ETH_Oberon#System_Configuration|ETH Oberon page]] and the original [[Oberon/ETH_Oberon/betadocu|betadocu]] page. [[File:WaylandWestonA2.jpg|thumb|440px|[[w:Firefox|Firefox]] and A2 with [[w:Weston_(software)|Weston and XWayland]] on a [[w:Debian|Debian]] 10 system with twin screens.]]
If the working directory is on a removable store, the [[Oberon/A2/myaos|myaos]] [[w:Shell script|script]] allows the storage device to be used in multiple machines with differing configurations. When the store is not already mounted, [[w:Fsck|e2fsck]] is applied as a precaution.<ref name="filesystemCheck"/> In case the filesystem has been corrupted, e2fsck will usually complete repairs. A reasonable location for the myaos script is the home directory of the user. For each host, create in the working directory, files {{nowrap|Configuration.<host>.XML}}. To use the Oberon subsystem, create {{nowrap|Oberon.<host>.Text}}. This can be done by copying the installed files and editing the copies. For example, a host named blunder requires {{nowrap|Configuration.blunder.XML}} for A2 and {{nowrap|Oberon.blunder.Text}} for the Oberon subsystem. The XML file contains ASCII text and can be edited with [[w:Geany|Geany]], [[w:Gedit|gedit]] or [[w:Mousepad|mousepad]] in Linux or with Edit > Text in A2. The installed Oberon.Text contains some binary information.<ref name="Text"/> In ETH Oberon it would usually be edited with Edit or ET. Nevertheless plain text will also work. After storing Oberon.Text with ET.StoreChar, it can be edited with Mousepad or Gedit in Linux, with Notepad in MS Windows and with Atom in MacOS. This can resolve the difficulty of a file name, {{nowrap|Oberon.<Host>.Text}}, exceeding the 32 character limit of the Oberon system. myaos or mya2 copies {{nowrap|Configuration.blunder.XML}} to {{nowrap|Configuration.XML}} and {{nowrap|Oberon.blunder.Text}} to {{nowrap|Oberon.Text}} before starting UnixAos.
==The A2 Repositories==
[[File:ETHZgitlabOberon.jpg|thumb|Screenshot of the home page for A2 in Gitlab at ETHZ.]]
The original repository for sources and executables for several platforms was [[w:Apache_Subversion|Apache Subversion]] (SVN) based. The contemporary [[w:Git|Git]] based [https://gitlab.inf.ethz.ch/felixf/oberon repository] began with files from SVN revision 10270. While the Git archive is current, the [[Oberon/SVN|notes for SVN]] remain available.
The repository provides the latest version and allows ongoing updates. From the viewpoint of a user, the method is based upon a local copy of the repository. The local copy is created by cloning from [https://gitlab.inf.ethz.ch/felixf/oberon ETHZ]. WIthin the local copy, an A2 executable can be built for a targeted platform including a bare PC. Executables in subdirectories for Windows, Linux (Intel 32 and 64 bit) and ARM are available. The repository will occupy 0.5+ GB depending upon inclusion of executables.
<p id="account">An ETHZ affiliate can obtain a [https://gitlab.inf.ethz.ch D-INFK GitLab] account. Otherwise a [https://github.com/signup?source=login Github] account is possible.</p>
===Git in a Unix-like System===
[[File:Git operations.svg|thumb|Git operations. For details, follow the links in the text.]]
The [[w:Git|Wikipedia article]] provides a useful overview. [https://git-scm.com/doc Official documentation] is available as a [https://git-scm.com/docs Reference Manual], comprising manual pages, and the [https://git-scm.com/book/en/v2 Pro Git] book. [https://git-lfs.com/ git-lfs is documented] separately.
Each Linux has an installation procedure for Git with the various procedures [https://git-scm.com/download/linux summarized in the Git Web site]. Release specific information is also available. For Debian Linux, refer to the [https://wiki.debian.org/UsingGit UsingGit] wiki page. If apt is available these commands suffice.
# apt install git
# apt install git-lfs
The name of the repository directory is arbitrary. "A2" serves for this example. Check that the intended directory is non-existent,
# ls -ld A2
ls: cannot access 'A2': No such file or directory
or empty.
# ls -ld A2/*
ls: cannot access 'A2/*': No such file or directory
Log in to a [[#account|D-INFK GitLab account or a github account]].
Create the local repository.
# [https://git-scm.com/docs/git-clone git clone] https://gitlab.inf.ethz.ch/felixf/oberon.git A2
Update the local repository from the origin, main branch.
# cd A2
# [https://git-scm.com/docs/git-pull git pull] origin main
Check the commit hash.
# git show | head -n 1
commit f62a9d95e8b5df1869888252c50f9ef6a17e137a
The next revision will change the hash.
In MS Windows check what you have.
# dir /ad *
AosVM LanguageReport Linux32 source UnixAos Win64
ARM license.txt Linux64 tools Win32 WinAos
In Linux check what you have.
# ls -d *
AosVM LanguageReport Linux32 source UnixAos Win64
ARM license.txt Linux64 tools Win32 WinAos
Use git-lfs to track some zip archives.
# git lfs track "Linux*.zip"
# git add .gitattributes
Check which large files are tracked.
# git lfs track
Listing tracked patterns
ARM/ARM.A2/*.bin (ARM/ARM.A2/.gitattributes)
Linux32.zip (.gitattributes)
Linux64.zip (.gitattributes)
LinuxARM.zip (.gitattributes)
Win32.zip (.gitattributes)
Win64.zip (.gitattributes)
*.bin (.gitattributes)
Linux*.zip (.gitattributes)
Listing excluded patterns
Retrieve a specific archive file.
# git lfs fetch Linux64.zip
fetch: Fetching reference refs/heads/main
Verify existence of the zip archive.
# ls -ld Linux64*
-rw-r--r-- 1 root root 23712521 Dec 5 09:19 Linux64.zip
Unzip.
# unzip Linux64
Archive: Linux64.zip
creating: Linux64/
creating: Linux64/work/
inflating: Linux64/oberon.ini
creating: Linux64/bin/
inflating: Linux64/Kernel.GofU
inflating: Linux64/OpenTypeScan.SymU
inflating: ...
Check the content of Linux64.
# cd Linux64
# ls -ld *
-rwxrwxr-x 1 root root 49 Apr 18 2023 a2.sh
-rw-rw-r-- 1 root root 162 Apr 18 2023 a2.txt
drwxr-xr-x 2 root root 90112 Jan 9 20:13 bin
-rwxr--r-- 1 root root 1316520 Jan 9 20:14 oberon
-rwxrwxr-x 1 root root 250 Apr 18 2023 oberon.ini
drwxr-xr-x 1 root root 7 Dec 13 06:23 work
bin contains more than 2000 executable files. oberon is the kernel created by Linker.Link.
Execute the start script.
# Linux64/a2.sh
or
# cd Linux64 ; ./a2.sh
[[File:LinuxA2Gen.32bit.rev.9799.jpg|thumb|LinuxA2 Generic 32 bit, rev.9799 started from the Git repository.]]
The content of a2.sh can be displayed by "cat a2.sh" or with an editor. The script performs two actions. "cd `dirname $0`" changes to the directory where a2.sh resides; ~/A2/Linux64 for example. Then "./oberon run a2.txt" executes command "oberon" with arguments "run" and "a2.txt". a2.txt contains A2 commands and can be displayed by cat and by an editor. The first command executes commands in oberon.ini including two referring to the [[Oberon/A2#Working_Directory|working directory]].
===Git in MS Windows===
Git is available directly from the [https://git-scm.com/download/win official Web site].
==Compilation & Linking==
Although a zip archive contains all executable files of a working system,
it is recreated infrequently<ref name="zipFreshening" /><!--only when a revision of language syntax requires a revision in the compiler-->. Meanwhile ongoing work produces revised sources. To benefit from source revisions subsequent to the latest zip archive, recompile sources and link a fresh kernel.
In System Menu > Files > Files, [[Oberon/Glossary#glossaryMouseButtons|LM]] on "searcher" and type "Build" in the input bar. ML or [[Oberon/Glossary#glossaryMouseButtons|MM]] twice on Builds.Tool (not Build.Tool). Read the initial remarks and scroll to the appropriate platform. LINUX32 for example.
Release.Build will open a viewer containing a long Compiler.Compile command. The compiler will put object and symbol files into the directory specified by --path. The default path is NewAos/ in the A2 working directory. Adjust the path if preferred. Then [[Oberon/Glossary#glossaryMouseButtons|MM]] on Release.Build. In the new viewer, MM on System.DoCommands. Compilation can require more than a minute.
After compilation, close the viewer and open Builds.Tool again. Go to "Command line shell" for the chosen platform. Again note the default path NewAos/ in the working directory. MM on "Linker.Link" to produce kernel oberon beside the path directory, from executables in the path directory.
The object and symbol files in NewAos are to replace those in <platform>/bin and oberon is to replace <platform>/oberon. As a precaution, the old files can be kept.
# cd .../<archive>/<platform>
# mv bin bin.old
# mv oberon oberon.old
# cd <somewhere>
# mv NewAos .../<archive>/<platform>/bin
# mv oberon .../<archive>/<platform>
Then try the fresh system.
# ./.../<archive>/<platform>/a2.sh
or
# cd .../<archive>/<platform>
# ./a2.sh
If A2 comes to life, celebrate. Otherwise troubleshoot.
==Working Directory==
oberon.ini has two A2 commands referring to the working directory.
Files.AddSearchPath work~
...
Files.SetWorkPath work~
For a different working directory edit oberon.ini.
Files.AddSearchPath /home/me/myWorkingDirectory~
...
Files.SetWorkPath /home/me/myWorkingDirectory~
Alternatively, oberon.ini can be unchanged and work can be replaced with a soft link. In the freshly installed system, work is empty. In case content has been added, move for preservation.
cd <A2repository>/<hardware>
ls -ld work
Then, for example, either
mv work /home/me/savedWork
or
rmdir work
Then create the link.
ln -s /home/me/myWorkingDirectory work
==Module Naming==
===Context and Aliasing===
In a source in A2, the distinction between the system and the Oberon subsystem is referred to as context. In Text of a source module, context is identified according to [http://cas.inf.ethz.ch/projects/a2/repository/raw/trunk/LanguageReport/OberonLanguageReport.pdf Oberon (2019) Language Report], section "5 Modules".
Module := 'MODULE' [TemplateParameters] Identifier 'IN' Identifier ';' ...
Within the scope of a module, the name of an imported module can be [[wikt:aliased#Verb|aliased]] with this syntax also in the section referred to above.
Import = Identifier [':=' Identifier] ...
[[../A2/Unix.Oberon.NetSystem.Mod|Unix.Oberon.NetSystem.Mod]] illustrates context and aliasing.
MODULE NetSystem IN Oberon;
IMPORT S := SYSTEM, IP IN A2, DNS := DNS IN A2, TCP := TCP IN A2, UDP := UDP IN A2, Texts, Oberon, Input, Fonts, Strings, Out;
===Target Systems and File Name Extensions===
Compilation, loading, linking and associated terminology is discussed in [https://people.inf.ethz.ch/felixf/pdfs/2011_UnifiedStaticDynamicLoading.pdf https://people.inf.ethz.ch/felixf/pdfs/2011_UnifiedStaticDynamicLoading.pdf]. As in all Oberon systems, the name of a file specifying a module can differ from the name of the module. These file name extensions are conventional in A2.
{| class="wikitable"
|+
|-
! Target System
! Generic<ref>"Generic" refers to applicability of the loader and linker to all target systems, independent of change in language and runtime system.</ref> Object File Name Extension
! Symbol File Name Extension
|-
| Unix, x86, 32 bit
| .GofU
| .SymU
|-
| Unix, AMD64, 64 bit
| .GofUu
| .SymUu
|-
| Windows, x86, 32 bit
| .GofW
| .SymW
|-
| Windows, AMD64, 64 bit
| .GofWw
| .SymWw
|-
| ARM, 32 bit<ref>Allowing A2 on the [[w:Raspberry_Pi|Raspberry Pi]].</ref>
| .GofA
| .SymA
|-
| ARM, 64 bit
| .GofAa
| .SymAa
|}
===Object and Symbol File Names===
Object and symbol file names contain the context separated from the module name by a Minus-Sign. The Minus-Sign prevents use as a proper name in Oberon. Hence the object and symbol files for the Oberon System module are named Oberon-System.GofU and Oberon-System.SymU.
==Startup from the Repository==
With the A2 repository in place according to the instructions above, A2 can run.
Identify supported architectures.
cd <somewhere>/A2/
In MS Windows.
dir /ad *
In Linux.
ls -d *
The output should be similar to this.
AosVM LanguageReport Linux32 source UnixAos Win64
ARM license.txt Linux64 tools Win32 WinAos
Review the startup process. In MS Windows.
dir /ad Win32/*
In Linux 64.
ls -ld Linux64/*
[[File:LinuxA2Gen32bit.2022.10.31.png|thumb|The startup display of LinuxA2, Generic, 32 bit at 2022-10-31.]]
The file oberon must be executable. Execute start script. This for a 32 bit machine running MS Windows.
./Win32/a2.bat
For a 64 bit machine running Linux.
./Linux64/a2.sh
or
cd Linux64 ; ./a2.sh
A window as at the right should appear.
==User Level Applications==
Various documents and applications are available via the menu at the lower left of the A2 display. Note Demos and Docu > Program Demos.
=== Secure Shell Console ===
In the target system, localhost or an external system, install a SSH server. This is one possibility.
sudo apt install openssh-server
In the A2 menu invoke Tools > Secure Shell. For Host specify "localhost" or "127.0.0.1" (without the quote marks) or the name or address of the external machine. Specify your user id. Click on Connect. Provide your password when prompted.
=== Email ===
A mail client using [[w:Internet_Message_Access_Protocol|IMAP]] is at Apps > MailClient. The Oberon subsystem has Mail.Panel supporting [[w:Post_Office_Protocol|POP]], POP3 and [[w:Simple_Mail_Transfer_Protocol|SMTP]] with [[../ETH_Oberon#Email|description and instructions for ETH Oberon]] being applicable.
===Oberon Subsystem===
[[File:XO.A2.Oberon.jpg|thumb|The Oberon subsystem in UnixAos on an [[w:OLPC_XO#Release_history|XO-1.5]].]] <!-- {{clear}} -->
At the lower left of the A2 screen, menu Tools > Oberon and Develop > Oberon FullScreen allow interactive startup of an Oberon subsystem.
The subsystem can also be opened with a command or commands in the Autostart section of Configuration.XML.
In UnixAos, revision 4929, these lines in Configuration.XML.
<Section name="Autostart">
	...
	<Setting name="OberonDisplay" value="OberonDisplay.Install Oberon 1100x704 0 74 ~"/>
	<Setting name="OberonStart" value="Oberon.Call System.Init Oberon"/>
This in more recent revisions<ref name="OberonStart"/>.
<Section name="Autostart">
	...
	<Setting name="Start an Oberon" value="Oberon.Start Oberon 1100x704 0 74 ~"/>
The dimensions, 1100x704, can be adjusted for satisfactory proportioning of text in a viewer. If the Oberon window is stretched, by grabbing the lower right corner with the mouse, the proportionality of text to viewer is preserved.
Mouse usage is unusual but efficient. Definitely worth the small effort to learn. A mouse with three buttons or two buttons and a wheel is almost essential. The <Esc> key is used to interrupt a task. For example it can interrupt a long running FTP.GetFiles. <F1> sets the * marker. <F2> clears all marks. If a mouse button is pressed unintentionally, all mouse buttons pressed together before releasing any will have no effect. Comprehensive details of mouse and keyboard input and usage are in [[Oberon/ETH_Oberon/mouse|Mouse support]], [[Oberon/ETH_Oberon/Tutorial/Mouse|Mouse tutorial]] and [[Oberon/ETH_Oberon/keyboard|Keyboard support]] pages.
===Telnet Console in Oberon===
[[w:Telnet|Telnet]] is an insecure protocol but provides a host console within the Oberon sub-system. The [[../ETH_Oberon#Telnet_Console|instructions for ETH Oberon]] are applicable in the Oberon subsystem.
===News Reader in Oberon===
[[File:OberonNews.Tool.png|thumb|A screenshot of News.Tool.]]
As with mail servers, news servers now require authentication. Therefore revisions of the [[Oberon/A2/Oberon.News.Mod|NetSystem]] and [[Oberon/A2/Oberon.News.Mod|News]] modules are required to support authentication. Compile the revised modules. {{clear}}
==Text==
{{:Oberon/A2/TextType}}
==Module Sources, Tools and Configuration Texts==
A tiny sample of the approximately 2000 sources in A2.
A contemporary [[w:Firefox|Firefox]] browser attempts to infer "Content type" from the [[w:List_of_filename_extensions|name extension]]. By default Firefox infers wrongly that source file *.Mod contains "Amiga SoundTracker audio" and fails to open it. This difficulty is resolved by adjusting the "Action" Firefox associates with "Content Type". Open [[w:hamburger menu|hamburger menu]] > Settings > General > Applications. For "Amiga SoundTracker audio" choose an editor such as /usr/bin/mousepad or /usr/bin/gedit. Most sources in A2 have been converted to [[w:Plain_text|plain ASCII text]]; some remain as [[Oberon#Oberon_Text|Oberon Text]]. Gedit will open all of these. Mousepad and several other editors will not open Oberon Text. Content type "plain text document" should also be set to the chosen editor. With these adjustments Firefox should open most of the files in the repository.
In some contexts the user may fail to find a configuration of a browser to open files in the repository. In any case a browser should open the Wikibook copy.
{| class="wikitable"
|+
! [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/ ETHZ Repository] !! Wikibook<ref name="WikiSource"/> !! Notes
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BIOS.V24.Mod BIOS.V24.Mod]
| [[../A2/BIOS.V24.Mod/|BIOS.V24.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Asm BootManager.Asm]
| [[../A2/BootManager.Asm/|BootManager.Asm]]
| BootManager source written in Network Assembler by André Fischer.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Mod BootManager.Mod]
| [[../A2/BootManager.Mod/|BootManager.Mod]]
| Module containing one command Split.<ref><code>BootManager.Split BootManager.Bin</code> is executed to divide BootManager.Bin into BootManagerMBR.Bin and BootManagerTail.Bin. For additional details, refer to the [[../A2/BootManager/|instructional document]] of André Fischer.</ref>
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Text BootManager.Text]
| [[../A2/BootManager/|BootManager]]
| Instructional document written by André Fischer. In the repository and in MediaWiki representation.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Tool BootManager.Tool]
| [[../A2/BootManager.Tool/|BootManager.Tool]]
| Tool file summarizing the instructional document.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Configuration.Mod Oberon.Configuration.Mod]
|  
|  
|-
| <!-- [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Configuration.XML Configuration.XML] -->
| [[../A2/Configuration.XML|Configuration.XML]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Desktops.Mod Oberon.Desktops.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Documents.Mod Oberon.Documents.Mod]
| [[../A2/Oberon.Documents.Mod|Oberon.Documents.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.ET.Mod Oberon.ET.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Files.Mod Oberon.Files.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Gadgets.Mod Oberon.Gadgets.Mod]
| [[../A2/Oberon.Gadgets.Mod|Oberon.Gadgets.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.HTML.Mod Oberon.HTML.Mod]
| [[../A2/Oberon.HTML.Mod|Oberon.HTML.Mod]]
| Revisions for conformance to HTML5.
|-
|  
| [[Oberon/A2/Oberon.HTML.Tool|HTML.Tool]]
| No "preview" in the ETH Repository.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.HTMLDocs.Mod Oberon.HTMLDocs.Mod]
| [[../A2/Oberon.HTMLDocs.Mod|Oberon.HTMLDocs.Mod]]
| InitEntities() expanded to support more characters.
<!-- |-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Input.Mod Oberon.Input.Mod]
| [[../A2/Oberon.Input.Mod|Oberon.Input.Mod]]
|   -->
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.ISO9660Files.Mod Oberon.ISO9660Files.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.ISO9660Volumes.Mod Oberon.ISO9660Volumes.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.MIME.Mod Oberon.MIME.Mod]
| [[../A2/Oberon.MIME.Mod|Oberon.MIME.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Mail.Mod Oberon.Mail.Mod]
| [[../A2/Oberon.Mail.Mod|Oberon.Mail.Mod]]
| Deviation from [[w:Simple_Mail_Transfer_Protocol|SMTP]] corrected. Wrap() added. Names of types revised. Show() revised. Calculation of cont.len corrected.<!-- Bug in ReadResponse() corrected. Authentication added to OpenSMTP(). -->
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.MultiMail.Mod Oberon.MultiMail.Mod]
| [[../A2/Oberon.MultiMail.Mod|Oberon.MultiMail.Mod]]
| <!-- Authentication added to OpenSMTP(). -->
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.News.Mod Oberon.News.Mod]
| [[../A2/Oberon.News.Mod|Oberon.News.Mod]]
| Authentication added to allow access to contemporary servers.
|-
|  
| [[../A2/Oberon.MediaWiki.Mod|Oberon.MediaWiki.Mod]]
| Not in A2 repository.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Objects.Mod Oberon.Objects.Mod]
|  
|  
|-
| rowspan="2" | [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Out.Mod Oberon.Out.Mod]
| [[../A2/Oberon.Out.Mod|Oberon.Out.Mod]]
| Allow delay of execution of Append, using a [[w:Bit_field|flag]] variable.
|-
| [[../A2/Oberon.Out1.Mod|Oberon.Out1.Mod]]
| Allow delay of execution of Append, using a procedure variable.
|-
| [[../A2/Oberon.OutStub.Mod|Oberon.OutStub.Mod]]
| [[../A2/Oberon.OutStub.Mod|Oberon.OutStub.Mod]]
|  
|-
|[https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/QuotedPrintable.Mod Oberon.QuotedPrintable.Mod]
|[[../A2/Oberon.QuotedPrintable.Mod|Oberon.QuotedPrintable.Mod]]
|Variant from LinuxA2 Gen. 32-bit, rev.9527.
|-
|  
| [[../A2/Oberon.RFC3986.Mod|Oberon.RFC3986.Mod]]
| Percent encoding and decoding of URL. Not in A2 repository.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Sort.Mod Oberon.Sort.Mod]
| [[../A2/Oberon.Sort.Mod|Oberon.Sort.Mod]]
| Better presentation of output. Revisions incomplete.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Streams.Mod Oberon.Streams.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Strings.Mod Oberon.Strings.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.TFTPTool.Mod Oberon.TFTPTool.Mod]
| [[../A2/Oberon.TFTPTool.Mod|Oberon.TFTPTool.Mod]]
|
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.TextDocs.Mod Oberon.TextDocs.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.TextFrames.Mod Oberon.TextFrames.Mod]
| [[../A2/Oberon.TextFrames.Mod|Oberon.TextFrames.Mod]]
| LOOPs removed.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Texts.Mod Oberon.Texts.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.V24.Mod Oberon.V24.Mod]
| [[../A2/Oberon.V24.Mod|Oberon.V24.Mod]]
|  
|-
| <span id="Oberon.Text"></span>[https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Release.Oberon.Text Release.Oberon.Text]
| [[../A2/Oberon.Text|Oberon.Text]]
| Usually Oberon.Text is customized to a user.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/TFTP.Mod TFTP.Mod]
| [[../A2/TFTP.Mod|TFTP.Mod]]
|
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Unix.Machine.Mod Unix.Machine.Mod]
|  
|  
|-
| <span id="Oberon.NetSystem">[https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Unix.Oberon.NetSystem.Mod Unix.Oberon.NetSystem.Mod]</span>
| [[../A2/Unix.Oberon.NetSystem.Mod|Unix.Oberon.NetSystem.Mod]]
| Terminology improved. Local procedures moved out of SetUser. RETURN usage updated. Flag "ok" eliminated. Flag "verbose" added to simplify password debugging. Numerous comments clarified.
|-
|  
| [[../A2/myaos|myaos]]
| Start script for UnixAos allowing use of a removable working store on multiple machines and adaptable to requirements of user. Not in A2 repository.
|-
|  
| [[../A2/mya2|mya2]]
| Start script for UnixA2 allowing use of a removable working store on multiple machines and adaptable to requirements of user. Not in A2 repository.
|-
|  
| [[../A2/MyA2|MyA2]]
| Start script for UnixA2 allowing use of a removable working store on multiple machines and adaptable to requirements of user. Not in A2 repository.|}
==Potential Developments==
* A [[w:Text-based_user_interface|TUI]] similar to ETH Oberon.
* Improved HTML support. Support for styling and tables, for example.
* [[w:Touchscreen|Touchscreen]] support.
==Footnotes==
{{Reflist|refs=
<ref name="Git">The Git repository, described subsequently, is a more recent method of installation and release tracking.</ref>
<ref name="linePrefix">The command line prefix in a Unix-like system is user configurable and can be configured to the empty string. For simplicity, the prefix is omitted in most of the commands shown here.</ref>
<ref name="filesystemCheck">A filesystem can become corrupted if not unmounted before the system is shut down. The directory can also be damaged by natural degradation of the storage media. If the filesystem is intact, the execution time for e2fsck is negligible.</ref>
<ref name="OberonStart">The Oberon subsystem is invoked with MenuPage30.XML. The change from two commands to one is reported by <code>svn diff -r 5253:5254 .../MenuPage30.XML</code></ref>.
<ref name="zipFreshening">A fresh ZIP archive is created at least when a revision of language syntax requires a revision in the compiler.</ref>
<ref name="WikiSource">In some cases the Wikibook copy differs from the latest file in the ETHZ repository. For an exact comparison, use a file comparator; Diff.Do in Oberon, [[w:Comm|comm]] in Linux. Some sources have a discussion page. [[Talk:Oberon/A2/Oberon.Mail.Mod|Oberon.Mail.Mod discussion]] for example.</ref>
<ref name="Text">See [[Oberon/Text|Oberon/Text]].</ref>
}}
<br>
{{center|[[Oberon/Linz Oberon, V4|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">← Linz Oberon, V4</span>]] [[Oberon|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">↑ Oberon front page</span>]] [[Oberon/V5|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">V5 →</span>]]}}
{{BookCat}}
6qzzlzea1pvecst4zpxxofm37az5gpb
4641519
4641518
2026-06-28T15:08:47Z
PeterEasthope
660399
/* Module Sources, Tools and Configuration Texts */ Added omitted end-of-line.
4641519
wikitext
text/x-wiki
__TOC__
{{center|[[Oberon/Linz Oberon, V4|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">← Linz Oberon, V4</span>]] [[Oberon|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">↑ Oberon front page</span>]] [[Oberon/V5|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">V5 →</span>]]}}
== Links ==
[https://gitlab.inf.ethz.ch/felixf/oberon Gitlab at ETHZ]<br>
<!-- [http://cas.inf.ethz.ch/projects/a2/repository/show/trunk/ocp/Documentation Documentation at ETHZ] -->
== Tested Instances ==
[[w:Oberon_(operating_system)#A2|A2]] can be installed and used on a bare [[w:IBM_PC_compatible|PC]]. That includes desktop and laptop machines obsolete for commercial operating systems. A2 can also be a subsystem in an [[w:ARM_architecture_family|ARM]], [[w:MS Windows|MS Windows]] or [[w:Unix-like|Unix-like]] system.
{| class="wikitable"
|+
|-
! style="width: 12em" | Host System
! style="width: 12em" | Subsystem
! Notes
|-
| [[w:OLPC_XO#Software|OLPC 13.2.11]] on XO-1.5 || [http://user.informatik.uni-bremen.de/fld/UnixAos/ LinuxA2 rev.7355] || Outdated SSL/TLS in OLPC 13.2.11 prevented connection to Wikipedia.
|-
| [https://wiki.debian.org/DebianReleases Debian 11] on a generic PC || [http://user.informatik.uni-bremen.de/fld/UnixAos/ LinuxA2 rev.9779] ||
|-
| [https://wiki.debian.org/DebianReleases Debian 12] on a generic PC || [[Oberon/A2#The_A2_Repositories|LinuxA2 Generic,<br>64-bit, Apr 19 2023]]
| Oberon keyboard input bug, [https://gitlab.inf.ethz.ch/felixf/oberon/-/issues/141 Issue 141]. Retrieve and compile [https://gitlab.inf.ethz.ch/-/project/23928/uploads/5b412cf39e8049b6bd2407670ce6599a/MyUnix.KbdMouse.Mod MyUnix.KbdMouse.Mod]. <F12> disables HotKeys to allow Oberon keyboard functionality. If <Backspace> key doesn't work, try <Delete>.
|-
| [https://easyos.org EasyOS 7.4.2]
| [[Oberon/A2#The_A2_Repositories|LinuxA2 Generic,<br>64-bit, Jun 27 2026]]
| At 2026.06.27 EasyOS is available for the 64 bit PC; not the 32 bit PC. Also apply MyUnix.KbdMouse.Mod as noted above.
|}
== Installing and Running UnixAOS ==
The original instructions<ref name="Git"/> for installing UnixAOS are in [http://user.informatik.uni-bremen.de/fld/UnixAos/Readme.txt http://user.informatik.uni-bremen.de/fld/UnixAos/Readme.txt]. Installation files are available from [http://user.informatik.uni-bremen.de/fld/UnixAos/ http://user.informatik.uni-bremen.de/fld/UnixAos/].
[[File:LinuxA2Gen32bit.rev.9527.png|thumb|The display of freshly installed LinuxAos Generic 32-bit, rev.9527.]]
The shell script installer assumes existence of a sys group in the host. For systems lacking this group, the script is easily adapted. For example, the line,
chgrp -R sys ${aosdir}
can be changed to this.
chgrp -R bin ${aosdir}
The UnixAOS working directory can have an [[w:Ext2|ext2]] or [[w:File_Allocation_Table|FAT]] filesystem on a removable flash store.
===Revisions Prior to 10272===
The default directory for the system is /usr/aos. By default, install.UnixAos installs start script /usr/bin/aos. The aos script adjusts the operating system environment before starting aos.{solaris,linux,darwin}. As noted in [http://www.informatik.uni-bremen.de/~fld/UnixAos/Readme.txt Readme.txt], UnixAos can be started with these two commands.<ref name="linePrefix"/>
[[w:Cd_(command)|cd]] <myWorkingDirectory>
aos
<myWorkingDirectory> must be replaced with a specific directory name.
===Revision 10272===
The default directory for the system is /usr/local/A2 and the default start script is /usr/local/bin/a2. A2 can be started with these commands.
[[w:Cd_(command)|cd]] <myWorkingDirectory>
a2
As for earlier releases, <myWorkingDirectory> represents a specific directory name.
==User and Machine Specific Configuration of UnixAOS==
UnixAos is configured by [[Oberon/A2#Module_Sources,_Tools_and_Configuration_Texts|Configuration.XML]]. The Oberon subsystem is configured by [[Oberon/A2#Module_Sources,_Tools_and_Configuration_Texts|Oberon.Text]]; refer to the [[Oberon/ETH_Oberon#System_Configuration|ETH Oberon page]] and the original [[Oberon/ETH_Oberon/betadocu|betadocu]] page. [[File:WaylandWestonA2.jpg|thumb|440px|[[w:Firefox|Firefox]] and A2 with [[w:Weston_(software)|Weston and XWayland]] on a [[w:Debian|Debian]] 10 system with twin screens.]]
If the working directory is on a removable store, the [[Oberon/A2/myaos|myaos]] [[w:Shell script|script]] allows the storage device to be used in multiple machines with differing configurations. When the store is not already mounted, [[w:Fsck|e2fsck]] is applied as a precaution.<ref name="filesystemCheck"/> In case the filesystem has been corrupted, e2fsck will usually complete repairs. A reasonable location for the myaos script is the home directory of the user. For each host, create in the working directory, files {{nowrap|Configuration.<host>.XML}}. To use the Oberon subsystem, create {{nowrap|Oberon.<host>.Text}}. This can be done by copying the installed files and editing the copies. For example, a host named blunder requires {{nowrap|Configuration.blunder.XML}} for A2 and {{nowrap|Oberon.blunder.Text}} for the Oberon subsystem. The XML file contains ASCII text and can be edited with [[w:Geany|Geany]], [[w:Gedit|gedit]] or [[w:Mousepad|mousepad]] in Linux or with Edit > Text in A2. The installed Oberon.Text contains some binary information.<ref name="Text"/> In ETH Oberon it would usually be edited with Edit or ET. Nevertheless plain text will also work. After storing Oberon.Text with ET.StoreChar, it can be edited with Mousepad or Gedit in Linux, with Notepad in MS Windows and with Atom in MacOS. This can resolve the difficulty of a file name, {{nowrap|Oberon.<Host>.Text}}, exceeding the 32 character limit of the Oberon system. myaos or mya2 copies {{nowrap|Configuration.blunder.XML}} to {{nowrap|Configuration.XML}} and {{nowrap|Oberon.blunder.Text}} to {{nowrap|Oberon.Text}} before starting UnixAos.
==The A2 Repositories==
[[File:ETHZgitlabOberon.jpg|thumb|Screenshot of the home page for A2 in Gitlab at ETHZ.]]
The original repository for sources and executables for several platforms was [[w:Apache_Subversion|Apache Subversion]] (SVN) based. The contemporary [[w:Git|Git]] based [https://gitlab.inf.ethz.ch/felixf/oberon repository] began with files from SVN revision 10270. While the Git archive is current, the [[Oberon/SVN|notes for SVN]] remain available.
The repository provides the latest version and allows ongoing updates. From the viewpoint of a user, the method is based upon a local copy of the repository. The local copy is created by cloning from [https://gitlab.inf.ethz.ch/felixf/oberon ETHZ]. WIthin the local copy, an A2 executable can be built for a targeted platform including a bare PC. Executables in subdirectories for Windows, Linux (Intel 32 and 64 bit) and ARM are available. The repository will occupy 0.5+ GB depending upon inclusion of executables.
<p id="account">An ETHZ affiliate can obtain a [https://gitlab.inf.ethz.ch D-INFK GitLab] account. Otherwise a [https://github.com/signup?source=login Github] account is possible.</p>
===Git in a Unix-like System===
[[File:Git operations.svg|thumb|Git operations. For details, follow the links in the text.]]
The [[w:Git|Wikipedia article]] provides a useful overview. [https://git-scm.com/doc Official documentation] is available as a [https://git-scm.com/docs Reference Manual], comprising manual pages, and the [https://git-scm.com/book/en/v2 Pro Git] book. [https://git-lfs.com/ git-lfs is documented] separately.
Each Linux has an installation procedure for Git with the various procedures [https://git-scm.com/download/linux summarized in the Git Web site]. Release specific information is also available. For Debian Linux, refer to the [https://wiki.debian.org/UsingGit UsingGit] wiki page. If apt is available these commands suffice.
# apt install git
# apt install git-lfs
The name of the repository directory is arbitrary. "A2" serves for this example. Check that the intended directory is non-existent,
# ls -ld A2
ls: cannot access 'A2': No such file or directory
or empty.
# ls -ld A2/*
ls: cannot access 'A2/*': No such file or directory
Log in to a [[#account|D-INFK GitLab account or a github account]].
Create the local repository.
# [https://git-scm.com/docs/git-clone git clone] https://gitlab.inf.ethz.ch/felixf/oberon.git A2
Update the local repository from the origin, main branch.
# cd A2
# [https://git-scm.com/docs/git-pull git pull] origin main
Check the commit hash.
# git show | head -n 1
commit f62a9d95e8b5df1869888252c50f9ef6a17e137a
The next revision will change the hash.
In MS Windows check what you have.
# dir /ad *
AosVM LanguageReport Linux32 source UnixAos Win64
ARM license.txt Linux64 tools Win32 WinAos
In Linux check what you have.
# ls -d *
AosVM LanguageReport Linux32 source UnixAos Win64
ARM license.txt Linux64 tools Win32 WinAos
Use git-lfs to track some zip archives.
# git lfs track "Linux*.zip"
# git add .gitattributes
Check which large files are tracked.
# git lfs track
Listing tracked patterns
ARM/ARM.A2/*.bin (ARM/ARM.A2/.gitattributes)
Linux32.zip (.gitattributes)
Linux64.zip (.gitattributes)
LinuxARM.zip (.gitattributes)
Win32.zip (.gitattributes)
Win64.zip (.gitattributes)
*.bin (.gitattributes)
Linux*.zip (.gitattributes)
Listing excluded patterns
Retrieve a specific archive file.
# git lfs fetch Linux64.zip
fetch: Fetching reference refs/heads/main
Verify existence of the zip archive.
# ls -ld Linux64*
-rw-r--r-- 1 root root 23712521 Dec 5 09:19 Linux64.zip
Unzip.
# unzip Linux64
Archive: Linux64.zip
creating: Linux64/
creating: Linux64/work/
inflating: Linux64/oberon.ini
creating: Linux64/bin/
inflating: Linux64/Kernel.GofU
inflating: Linux64/OpenTypeScan.SymU
inflating: ...
Check the content of Linux64.
# cd Linux64
# ls -ld *
-rwxrwxr-x 1 root root 49 Apr 18 2023 a2.sh
-rw-rw-r-- 1 root root 162 Apr 18 2023 a2.txt
drwxr-xr-x 2 root root 90112 Jan 9 20:13 bin
-rwxr--r-- 1 root root 1316520 Jan 9 20:14 oberon
-rwxrwxr-x 1 root root 250 Apr 18 2023 oberon.ini
drwxr-xr-x 1 root root 7 Dec 13 06:23 work
bin contains more than 2000 executable files. oberon is the kernel created by Linker.Link.
Execute the start script.
# Linux64/a2.sh
or
# cd Linux64 ; ./a2.sh
[[File:LinuxA2Gen.32bit.rev.9799.jpg|thumb|LinuxA2 Generic 32 bit, rev.9799 started from the Git repository.]]
The content of a2.sh can be displayed by "cat a2.sh" or with an editor. The script performs two actions. "cd `dirname $0`" changes to the directory where a2.sh resides; ~/A2/Linux64 for example. Then "./oberon run a2.txt" executes command "oberon" with arguments "run" and "a2.txt". a2.txt contains A2 commands and can be displayed by cat and by an editor. The first command executes commands in oberon.ini including two referring to the [[Oberon/A2#Working_Directory|working directory]].
===Git in MS Windows===
Git is available directly from the [https://git-scm.com/download/win official Web site].
==Compilation & Linking==
Although a zip archive contains all executable files of a working system,
it is recreated infrequently<ref name="zipFreshening" /><!--only when a revision of language syntax requires a revision in the compiler-->. Meanwhile ongoing work produces revised sources. To benefit from source revisions subsequent to the latest zip archive, recompile sources and link a fresh kernel.
In System Menu > Files > Files, [[Oberon/Glossary#glossaryMouseButtons|LM]] on "searcher" and type "Build" in the input bar. ML or [[Oberon/Glossary#glossaryMouseButtons|MM]] twice on Builds.Tool (not Build.Tool). Read the initial remarks and scroll to the appropriate platform. LINUX32 for example.
Release.Build will open a viewer containing a long Compiler.Compile command. The compiler will put object and symbol files into the directory specified by --path. The default path is NewAos/ in the A2 working directory. Adjust the path if preferred. Then [[Oberon/Glossary#glossaryMouseButtons|MM]] on Release.Build. In the new viewer, MM on System.DoCommands. Compilation can require more than a minute.
After compilation, close the viewer and open Builds.Tool again. Go to "Command line shell" for the chosen platform. Again note the default path NewAos/ in the working directory. MM on "Linker.Link" to produce kernel oberon beside the path directory, from executables in the path directory.
The object and symbol files in NewAos are to replace those in <platform>/bin and oberon is to replace <platform>/oberon. As a precaution, the old files can be kept.
# cd .../<archive>/<platform>
# mv bin bin.old
# mv oberon oberon.old
# cd <somewhere>
# mv NewAos .../<archive>/<platform>/bin
# mv oberon .../<archive>/<platform>
Then try the fresh system.
# ./.../<archive>/<platform>/a2.sh
or
# cd .../<archive>/<platform>
# ./a2.sh
If A2 comes to life, celebrate. Otherwise troubleshoot.
==Working Directory==
oberon.ini has two A2 commands referring to the working directory.
Files.AddSearchPath work~
...
Files.SetWorkPath work~
For a different working directory edit oberon.ini.
Files.AddSearchPath /home/me/myWorkingDirectory~
...
Files.SetWorkPath /home/me/myWorkingDirectory~
Alternatively, oberon.ini can be unchanged and work can be replaced with a soft link. In the freshly installed system, work is empty. In case content has been added, move for preservation.
cd <A2repository>/<hardware>
ls -ld work
Then, for example, either
mv work /home/me/savedWork
or
rmdir work
Then create the link.
ln -s /home/me/myWorkingDirectory work
==Module Naming==
===Context and Aliasing===
In a source in A2, the distinction between the system and the Oberon subsystem is referred to as context. In Text of a source module, context is identified according to [http://cas.inf.ethz.ch/projects/a2/repository/raw/trunk/LanguageReport/OberonLanguageReport.pdf Oberon (2019) Language Report], section "5 Modules".
Module := 'MODULE' [TemplateParameters] Identifier 'IN' Identifier ';' ...
Within the scope of a module, the name of an imported module can be [[wikt:aliased#Verb|aliased]] with this syntax also in the section referred to above.
Import = Identifier [':=' Identifier] ...
[[../A2/Unix.Oberon.NetSystem.Mod|Unix.Oberon.NetSystem.Mod]] illustrates context and aliasing.
MODULE NetSystem IN Oberon;
IMPORT S := SYSTEM, IP IN A2, DNS := DNS IN A2, TCP := TCP IN A2, UDP := UDP IN A2, Texts, Oberon, Input, Fonts, Strings, Out;
===Target Systems and File Name Extensions===
Compilation, loading, linking and associated terminology is discussed in [https://people.inf.ethz.ch/felixf/pdfs/2011_UnifiedStaticDynamicLoading.pdf https://people.inf.ethz.ch/felixf/pdfs/2011_UnifiedStaticDynamicLoading.pdf]. As in all Oberon systems, the name of a file specifying a module can differ from the name of the module. These file name extensions are conventional in A2.
{| class="wikitable"
|+
|-
! Target System
! Generic<ref>"Generic" refers to applicability of the loader and linker to all target systems, independent of change in language and runtime system.</ref> Object File Name Extension
! Symbol File Name Extension
|-
| Unix, x86, 32 bit
| .GofU
| .SymU
|-
| Unix, AMD64, 64 bit
| .GofUu
| .SymUu
|-
| Windows, x86, 32 bit
| .GofW
| .SymW
|-
| Windows, AMD64, 64 bit
| .GofWw
| .SymWw
|-
| ARM, 32 bit<ref>Allowing A2 on the [[w:Raspberry_Pi|Raspberry Pi]].</ref>
| .GofA
| .SymA
|-
| ARM, 64 bit
| .GofAa
| .SymAa
|}
===Object and Symbol File Names===
Object and symbol file names contain the context separated from the module name by a Minus-Sign. The Minus-Sign prevents use as a proper name in Oberon. Hence the object and symbol files for the Oberon System module are named Oberon-System.GofU and Oberon-System.SymU.
==Startup from the Repository==
With the A2 repository in place according to the instructions above, A2 can run.
Identify supported architectures.
cd <somewhere>/A2/
In MS Windows.
dir /ad *
In Linux.
ls -d *
The output should be similar to this.
AosVM LanguageReport Linux32 source UnixAos Win64
ARM license.txt Linux64 tools Win32 WinAos
Review the startup process. In MS Windows.
dir /ad Win32/*
In Linux 64.
ls -ld Linux64/*
[[File:LinuxA2Gen32bit.2022.10.31.png|thumb|The startup display of LinuxA2, Generic, 32 bit at 2022-10-31.]]
The file oberon must be executable. Execute start script. This for a 32 bit machine running MS Windows.
./Win32/a2.bat
For a 64 bit machine running Linux.
./Linux64/a2.sh
or
cd Linux64 ; ./a2.sh
A window as at the right should appear.
==User Level Applications==
Various documents and applications are available via the menu at the lower left of the A2 display. Note Demos and Docu > Program Demos.
=== Secure Shell Console ===
In the target system, localhost or an external system, install a SSH server. This is one possibility.
sudo apt install openssh-server
In the A2 menu invoke Tools > Secure Shell. For Host specify "localhost" or "127.0.0.1" (without the quote marks) or the name or address of the external machine. Specify your user id. Click on Connect. Provide your password when prompted.
=== Email ===
A mail client using [[w:Internet_Message_Access_Protocol|IMAP]] is at Apps > MailClient. The Oberon subsystem has Mail.Panel supporting [[w:Post_Office_Protocol|POP]], POP3 and [[w:Simple_Mail_Transfer_Protocol|SMTP]] with [[../ETH_Oberon#Email|description and instructions for ETH Oberon]] being applicable.
===Oberon Subsystem===
[[File:XO.A2.Oberon.jpg|thumb|The Oberon subsystem in UnixAos on an [[w:OLPC_XO#Release_history|XO-1.5]].]] <!-- {{clear}} -->
At the lower left of the A2 screen, menu Tools > Oberon and Develop > Oberon FullScreen allow interactive startup of an Oberon subsystem.
The subsystem can also be opened with a command or commands in the Autostart section of Configuration.XML.
In UnixAos, revision 4929, these lines in Configuration.XML.
<Section name="Autostart">
	...
	<Setting name="OberonDisplay" value="OberonDisplay.Install Oberon 1100x704 0 74 ~"/>
	<Setting name="OberonStart" value="Oberon.Call System.Init Oberon"/>
This in more recent revisions<ref name="OberonStart"/>.
<Section name="Autostart">
	...
	<Setting name="Start an Oberon" value="Oberon.Start Oberon 1100x704 0 74 ~"/>
The dimensions, 1100x704, can be adjusted for satisfactory proportioning of text in a viewer. If the Oberon window is stretched, by grabbing the lower right corner with the mouse, the proportionality of text to viewer is preserved.
Mouse usage is unusual but efficient. Definitely worth the small effort to learn. A mouse with three buttons or two buttons and a wheel is almost essential. The <Esc> key is used to interrupt a task. For example it can interrupt a long running FTP.GetFiles. <F1> sets the * marker. <F2> clears all marks. If a mouse button is pressed unintentionally, all mouse buttons pressed together before releasing any will have no effect. Comprehensive details of mouse and keyboard input and usage are in [[Oberon/ETH_Oberon/mouse|Mouse support]], [[Oberon/ETH_Oberon/Tutorial/Mouse|Mouse tutorial]] and [[Oberon/ETH_Oberon/keyboard|Keyboard support]] pages.
===Telnet Console in Oberon===
[[w:Telnet|Telnet]] is an insecure protocol but provides a host console within the Oberon sub-system. The [[../ETH_Oberon#Telnet_Console|instructions for ETH Oberon]] are applicable in the Oberon subsystem.
===News Reader in Oberon===
[[File:OberonNews.Tool.png|thumb|A screenshot of News.Tool.]]
As with mail servers, news servers now require authentication. Therefore revisions of the [[Oberon/A2/Oberon.News.Mod|NetSystem]] and [[Oberon/A2/Oberon.News.Mod|News]] modules are required to support authentication. Compile the revised modules. {{clear}}
==Text==
{{:Oberon/A2/TextType}}
==Module Sources, Tools and Configuration Texts==
A tiny sample of the approximately 2000 sources in A2.
A contemporary [[w:Firefox|Firefox]] browser attempts to infer "Content type" from the [[w:List_of_filename_extensions|name extension]]. By default Firefox infers wrongly that source file *.Mod contains "Amiga SoundTracker audio" and fails to open it. This difficulty is resolved by adjusting the "Action" Firefox associates with "Content Type". Open [[w:hamburger menu|hamburger menu]] > Settings > General > Applications. For "Amiga SoundTracker audio" choose an editor such as /usr/bin/mousepad or /usr/bin/gedit. Most sources in A2 have been converted to [[w:Plain_text|plain ASCII text]]; some remain as [[Oberon#Oberon_Text|Oberon Text]]. Gedit will open all of these. Mousepad and several other editors will not open Oberon Text. Content type "plain text document" should also be set to the chosen editor. With these adjustments Firefox should open most of the files in the repository.
In some contexts the user may fail to find a configuration of a browser to open files in the repository. In any case a browser should open the Wikibook copy.
{| class="wikitable"
|+
! [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/ ETHZ Repository] !! Wikibook<ref name="WikiSource"/> !! Notes
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BIOS.V24.Mod BIOS.V24.Mod]
| [[../A2/BIOS.V24.Mod/|BIOS.V24.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Asm BootManager.Asm]
| [[../A2/BootManager.Asm/|BootManager.Asm]]
| BootManager source written in Network Assembler by André Fischer.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Mod BootManager.Mod]
| [[../A2/BootManager.Mod/|BootManager.Mod]]
| Module containing one command Split.<ref><code>BootManager.Split BootManager.Bin</code> is executed to divide BootManager.Bin into BootManagerMBR.Bin and BootManagerTail.Bin. For additional details, refer to the [[../A2/BootManager/|instructional document]] of André Fischer.</ref>
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Text BootManager.Text]
| [[../A2/BootManager/|BootManager]]
| Instructional document written by André Fischer. In the repository and in MediaWiki representation.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/BootManager.Tool BootManager.Tool]
| [[../A2/BootManager.Tool/|BootManager.Tool]]
| Tool file summarizing the instructional document.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Configuration.Mod Oberon.Configuration.Mod]
|  
|  
|-
| <!-- [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Configuration.XML Configuration.XML] -->
| [[../A2/Configuration.XML|Configuration.XML]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Desktops.Mod Oberon.Desktops.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Documents.Mod Oberon.Documents.Mod]
| [[../A2/Oberon.Documents.Mod|Oberon.Documents.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.ET.Mod Oberon.ET.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Files.Mod Oberon.Files.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Gadgets.Mod Oberon.Gadgets.Mod]
| [[../A2/Oberon.Gadgets.Mod|Oberon.Gadgets.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.HTML.Mod Oberon.HTML.Mod]
| [[../A2/Oberon.HTML.Mod|Oberon.HTML.Mod]]
| Revisions for conformance to HTML5.
|-
|  
| [[Oberon/A2/Oberon.HTML.Tool|HTML.Tool]]
| No "preview" in the ETH Repository.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.HTMLDocs.Mod Oberon.HTMLDocs.Mod]
| [[../A2/Oberon.HTMLDocs.Mod|Oberon.HTMLDocs.Mod]]
| InitEntities() expanded to support more characters.
<!-- |-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Input.Mod Oberon.Input.Mod]
| [[../A2/Oberon.Input.Mod|Oberon.Input.Mod]]
|   -->
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.ISO9660Files.Mod Oberon.ISO9660Files.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.ISO9660Volumes.Mod Oberon.ISO9660Volumes.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.MIME.Mod Oberon.MIME.Mod]
| [[../A2/Oberon.MIME.Mod|Oberon.MIME.Mod]]
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Mail.Mod Oberon.Mail.Mod]
| [[../A2/Oberon.Mail.Mod|Oberon.Mail.Mod]]
| Deviation from [[w:Simple_Mail_Transfer_Protocol|SMTP]] corrected. Wrap() added. Names of types revised. Show() revised. Calculation of cont.len corrected.<!-- Bug in ReadResponse() corrected. Authentication added to OpenSMTP(). -->
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.MultiMail.Mod Oberon.MultiMail.Mod]
| [[../A2/Oberon.MultiMail.Mod|Oberon.MultiMail.Mod]]
| <!-- Authentication added to OpenSMTP(). -->
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.News.Mod Oberon.News.Mod]
| [[../A2/Oberon.News.Mod|Oberon.News.Mod]]
| Authentication added to allow access to contemporary servers.
|-
|  
| [[../A2/Oberon.MediaWiki.Mod|Oberon.MediaWiki.Mod]]
| Not in A2 repository.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Objects.Mod Oberon.Objects.Mod]
|  
|  
|-
| rowspan="2" | [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Out.Mod Oberon.Out.Mod]
| [[../A2/Oberon.Out.Mod|Oberon.Out.Mod]]
| Allow delay of execution of Append, using a [[w:Bit_field|flag]] variable.
|-
| [[../A2/Oberon.Out1.Mod|Oberon.Out1.Mod]]
| Allow delay of execution of Append, using a procedure variable.
|-
| [[../A2/Oberon.OutStub.Mod|Oberon.OutStub.Mod]]
| [[../A2/Oberon.OutStub.Mod|Oberon.OutStub.Mod]]
|  
|-
|[https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/QuotedPrintable.Mod Oberon.QuotedPrintable.Mod]
|[[../A2/Oberon.QuotedPrintable.Mod|Oberon.QuotedPrintable.Mod]]
|Variant from LinuxA2 Gen. 32-bit, rev.9527.
|-
|  
| [[../A2/Oberon.RFC3986.Mod|Oberon.RFC3986.Mod]]
| Percent encoding and decoding of URL. Not in A2 repository.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Sort.Mod Oberon.Sort.Mod]
| [[../A2/Oberon.Sort.Mod|Oberon.Sort.Mod]]
| Better presentation of output. Revisions incomplete.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Streams.Mod Oberon.Streams.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Strings.Mod Oberon.Strings.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.TFTPTool.Mod Oberon.TFTPTool.Mod]
| [[../A2/Oberon.TFTPTool.Mod|Oberon.TFTPTool.Mod]]
|
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.TextDocs.Mod Oberon.TextDocs.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.TextFrames.Mod Oberon.TextFrames.Mod]
| [[../A2/Oberon.TextFrames.Mod|Oberon.TextFrames.Mod]]
| LOOPs removed.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.Texts.Mod Oberon.Texts.Mod]
|  
|  
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Oberon.V24.Mod Oberon.V24.Mod]
| [[../A2/Oberon.V24.Mod|Oberon.V24.Mod]]
|  
|-
| <span id="Oberon.Text"></span>[https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Release.Oberon.Text Release.Oberon.Text]
| [[../A2/Oberon.Text|Oberon.Text]]
| Usually Oberon.Text is customized to a user.
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/TFTP.Mod TFTP.Mod]
| [[../A2/TFTP.Mod|TFTP.Mod]]
|
|-
| [https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Unix.Machine.Mod Unix.Machine.Mod]
|  
|  
|-
| <span id="Oberon.NetSystem">[https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/source/Unix.Oberon.NetSystem.Mod Unix.Oberon.NetSystem.Mod]</span>
| [[../A2/Unix.Oberon.NetSystem.Mod|Unix.Oberon.NetSystem.Mod]]
| Terminology improved. Local procedures moved out of SetUser. RETURN usage updated. Flag "ok" eliminated. Flag "verbose" added to simplify password debugging. Numerous comments clarified.
|-
|  
| [[../A2/myaos|myaos]]
| Start script for UnixAos allowing use of a removable working store on multiple machines and adaptable to requirements of user. Not in A2 repository.
|-
|  
| [[../A2/mya2|mya2]]
| Start script for UnixA2 allowing use of a removable working store on multiple machines and adaptable to requirements of user. Not in A2 repository.
|-
|  
| [[../A2/MyA2|MyA2]]
| Start script for UnixA2 allowing use of a removable working store on multiple machines and adaptable to requirements of user. Not in A2 repository.
|}
==Potential Developments==
* A [[w:Text-based_user_interface|TUI]] similar to ETH Oberon.
* Improved HTML support. Support for styling and tables, for example.
* [[w:Touchscreen|Touchscreen]] support.
==Footnotes==
{{Reflist|refs=
<ref name="Git">The Git repository, described subsequently, is a more recent method of installation and release tracking.</ref>
<ref name="linePrefix">The command line prefix in a Unix-like system is user configurable and can be configured to the empty string. For simplicity, the prefix is omitted in most of the commands shown here.</ref>
<ref name="filesystemCheck">A filesystem can become corrupted if not unmounted before the system is shut down. The directory can also be damaged by natural degradation of the storage media. If the filesystem is intact, the execution time for e2fsck is negligible.</ref>
<ref name="OberonStart">The Oberon subsystem is invoked with MenuPage30.XML. The change from two commands to one is reported by <code>svn diff -r 5253:5254 .../MenuPage30.XML</code></ref>.
<ref name="zipFreshening">A fresh ZIP archive is created at least when a revision of language syntax requires a revision in the compiler.</ref>
<ref name="WikiSource">In some cases the Wikibook copy differs from the latest file in the ETHZ repository. For an exact comparison, use a file comparator; Diff.Do in Oberon, [[w:Comm|comm]] in Linux. Some sources have a discussion page. [[Talk:Oberon/A2/Oberon.Mail.Mod|Oberon.Mail.Mod discussion]] for example.</ref>
<ref name="Text">See [[Oberon/Text|Oberon/Text]].</ref>
}}
<br>
{{center|[[Oberon/Linz Oberon, V4|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">← Linz Oberon, V4</span>]] [[Oberon|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">↑ Oberon front page</span>]] [[Oberon/V5|<span class="mw-ui-button" style="border-style: solid; border-width: 1px; display: inline-block; margin: auto; width: 13em; text-align: center; Background-color:#F0FFFF;">V5 →</span>]]}}
{{BookCat}}
nhyb08rv9h6atl0ikf4wy6gvbmqmyyk
Chess Opening Theory/1. e4/1...c6/2. d4/2...d5/3. Nc3/3...dxe4/4. Nxe4/4...Bf5/5. Ng3/5...Bg6/6. h4/6...h6/7. Nf3/7...Nd7/8. h5/8...Bh7/9. Bd3/9...Bxd3/10. Qxd3/10...e6/11. Bf4/11...Qa5
0
396772
4641548
4002066
2026-06-28T16:23:44Z
Greenman
7490
/* 11...Qa5+ */ ce
4641548
wikitext
text/x-wiki
{{Chess Opening Theory/Position|=
|Caro-Kann Defence:Classical Variation|
|rd| | | |kd|bd|nd|rd|=
|pd|pd| |nd| |pd|pd| |=
| | |pd| |pd| | |pd|=
|qd| | | | | | |pl|=
| | | |pl| |bl| | |=
| | | |ql| |nl|nl| |=
|pl|pl|pl| | |pl|pl| |=
|rl| | | |kl| | |rl|=
||
}}
== 11...Qa5+ ==
This move asks White to play [[Chess_Opening_Theory/1._e4/1...c6/2._d4/2...d5/3._Nc3/3...dxe4/4._Nxe4/4...Bf5/5._Ng3/5...Bg6/6._h4/6...h6/7._Nf3/7...Nd7/8._h5/8...Bh7/9._Bd3/9...Bxd3/10._Qxd3/10...e6/11._Bf4/11...Qa5/12._c3|c3]]. This stops White's hopes of castling queenside, and thus ends his kingside attack.
{{BookCat}}
rn8dk1u0s71t65e5div0d35nz3y6arb
4641549
4641548
2026-06-28T16:25:28Z
Greenman
7490
/* 11...Qa5+ */ ce
4641549
wikitext
text/x-wiki
{{Chess Opening Theory/Position|=
|Caro-Kann Defence:Classical Variation|
|rd| | | |kd|bd|nd|rd|=
|pd|pd| |nd| |pd|pd| |=
| | |pd| |pd| | |pd|=
|qd| | | | | | |pl|=
| | | |pl| |bl| | |=
| | | |ql| |nl|nl| |=
|pl|pl|pl| | |pl|pl| |=
|rl| | | |kl| | |rl|=
||
}}
== 11...Qa5+ ==
This move wants to provoke the advance of the c pawn, as well as discourage White from castling [[Chess_Opening_Theory/1._e4/1...c6/2._d4/2...d5/3._Nc3/3...dxe4/4._Nxe4/4...Bf5/5._Ng3/5...Bg6/6._h4/6...h6/7._Nf3/7...Nd7/8._h5/8...Bh7/9._Bd3/9...Bxd3/10._Qxd3/10...e6/11._Bf4/11...Qa5/12._c3|c3]] here would achieve both goals for black.
{{BookCat}}
36mshy9kut117p43kyn83f4w49ok9tt
4641552
4641549
2026-06-28T16:32:53Z
Greenman
7490
/* 11...Qa5+ */
4641552
wikitext
text/x-wiki
{{Chess Opening Theory/Position|=
|Caro-Kann Defence:Classical Variation|
|rd| | | |kd|bd|nd|rd|=
|pd|pd| |nd| |pd|pd| |=
| | |pd| |pd| | |pd|=
|qd| | | | | | |pl|=
| | | |pl| |bl| | |=
| | | |ql| |nl|nl| |=
|pl|pl|pl| | |pl|pl| |=
|rl| | | |kl| | |rl|=
||
}}
== 11...Qa5+ ==
This move wants to provoke the advance of the c pawn, as well as discourage White from castling [[Chess_Opening_Theory/1._e4/1...c6/2._d4/2...d5/3._Nc3/3...dxe4/4._Nxe4/4...Bf5/5._Ng3/5...Bg6/6._h4/6...h6/7._Nf3/7...Nd7/8._h5/8...Bh7/9._Bd3/9...Bxd3/10._Qxd3/10...e6/11._Bf4/11...Qa5/12._c3|c3]] here would achieve both goals for black.
<table border="0" cellspacing="0" cellpadding="4">
<tr>
<th></th>
<th align="left">12.</th>
</tr>
<tr>
<th align="right"></th>
<td>[[/12. Bd2|Bd2]] </td>
</tr>
<tr>
<th align="right"></th>
<td>[[/12. c3|c3]] </td>
</tr>
</table>
{{ChessMid}}
{{BookCat}}
5x6xuxi9xdlpeo4bf04fhhnju2yrkip
The Linux Kernel/Syscalls
0
399959
4641534
4209467
2026-06-28T15:44:52Z
Conan
3188
Syscalls: fix perf_event_op typo -> perf_event_open in TOC
4641534
wikitext
text/x-wiki
__NOTOC__
<big> Linux kernel system calls </big>
as exported by glibc, all on one sheet
{| class="wikitable" style="font-size:x-smaller"
|- style="vertical-align: top;"
|
'''System'''
sys/ioctl.h:
[[#ioctl|ioctl]]
sys/random.h:
[[#getrandom|getrandom]]
pci.h:
[[#pciconfig_read|pciconfig_read]]
[[#pciconfig_write|pciconfig_write]]
linux/sysctl.h:
[[#sysctl|sysctl]]
linux/membarrier.h:
[[#membarrier|membarrier]]
sys/klog.h:
[[#syslog|syslog]]
linux/bpf.h:
[[#bpf|bpf]]
grp.h:
[[#setgroups|setgroups]]
sys/utsname.h:
[[#uname|uname]]
linux/getcpu.h:
[[#getcpu|getcpu]]
sys/sysinfo.h:
[[#sysinfo|sysinfo]]
sys/personality.h:
[[#personality|personality]]
sys/ptrace.h:
[[#ptrace|ptrace]]
linux/kexec.h:
[[#kexec_file_load|kexec_file_load]]
[[#kexec_load|kexec_load]]
linux/reboot.h:
[[#reboot|reboot]]
Unexported:
[[#delete_module|delete_module]]
[[#init_module|init_module]]
[[#finit_module|finit_module]]
[[#perf_event_open|perf_event_open]]
[[#rseq|rseq]]
|
'''Time'''
sys/time.h:
[[#futimesat|futimesat]]
[[#utimes|utimes]]
[[#gettimeofday|gettimeofday]]
[[#settimeofday|settimeofday]]
[[#getitimer|getitimer]], [[#setitimer|setitimer]]
time.h:
[[#clock_settime|clock_settime]]
[[#clock_gettime|clock_gettime]]
[[#clock_getres|clock_getres]]
[[#clock_nanosleep|clock_nanosleep]]
[[#time|time]]
[[#stime|stime]]
[[#nanosleep|nanosleep]]
posix-timers.c:
[[#timer_create|timer_create]]
[[#timer_gettime|timer_gettime]]
[[#timer_getoverrun|timer_getoverrun]]
[[#timer_settime|timer_settime]]
[[#timer_delete|timer_delete]]
sys/timerfd.h:
[[#timerfd_create|timerfd_create]]
[[#timerfd_settime|timerfd_settime]]
[[#timerfd_gettime|timerfd_gettime]]
sys/eventfd.h:
[[#eventfd2|eventfd2]]
[[#eventfd|eventfd]]
utime.h:
[[#utime|utime]]
sys/times.h:
[[#times|times]]
bits/time.h:
[[#clock_adjtime|clock_adjtime]]
sys/timex.h:
[[#adjtimex|adjtimex]]
|
'''Processes'''
unistd.h:
[[#fork|fork]], [[#vfork|vfork]]
[[#brk|brk]]
[[#getpid|getpid]], [[#getppid|getppid]], [[#getpgrp|getpgrp]]
[[#uselib|uselib]]
[[#execve|execve]], [[#execveat|execveat]]
[[#nice|nice]]
[[#getgroups|getgroups]]
[[#getgid|getgid]], [[#setgid|setgid]]
[[#getuid|getuid]], [[#setuid|setuid]]
[[#getresuid|getresuid]], [[#setresuid|setresuid]]
[[#getresgid|getresgid]], [[#setresgid|setresgid]]
[[#getsid|getsid]], [[#setsid|setsid]]
[[#setpgid|setpgid]], [[#getpgid|getpgid]]
[[#getegid|getegid]], [[#geteuid|geteuid]]
[[#setreuid|setreuid]], [[#setregid|setregid]]
[[#pause|pause]]
[[#alarm|alarm]]
[[#acct|acct]]
sys/prctl.h:
[[#prctl|prctl]]
sched.h:
[[#clone|clone]]
[[#sched_setscheduler|sched_setscheduler]]
[[#sched_setparam|sched_setparam]]
[[#sched_setattr|sched_setattr]]
[[#sched_getscheduler|sched_getscheduler]]
[[#sched_getparam|sched_getparam]]
[[#sched_getattr|sched_getattr]]
[[#sched_setaffinity|sched_setaffinity]]
[[#sched_getaffinity|sched_getaffinity]]
[[#sched_yield|sched_yield]]
[[#sched_get_priority_max|sched_get_priority_max]]
[[#sched_get_priority_min|sched_get_priority_min]]
[[#sched_rr_get_interval|sched_rr_get_interval]]
[[#unshare|unshare]]
[[#setns|setns]]
linux/unistd.h:
[[#set_tid_address|set_tid_address]]
[[#exit_group|exit_group]]
sys/resource.h:
[[#setpriority|setpriority]], [[#getpriority|getpriority]]
getrlimit setrlimit
[[#getrusage|getrusage]]
[[#gettid|gettid]]
linux/kcmp.h:
[[#kcmp|kcmp]]
sys/capability.h:
[[#capget|capget]], [[#capset|capset]]
stdlib.h:
[[#exit|exit]]
|
'''Synchronization'''
sys/sem.h:
[[#semget|semget]]
[[#semctl|semctl]]
[[#semtimedop|semtimedop]]
[[#semop|semop]]
mqueue.h:
[[#mq_open|mq_open]]
[[#mq_unlink|mq_unlink]]
[[#mq_timedsend|mq_timedsend]]
[[#mq_timedreceive|mq_timedreceive]]
[[#mq_notify|mq_notify]]
sys/msg.h:
[[#msgget|msgget]]
[[#msgctl|msgctl]]
[[#msgsnd|msgsnd]]
[[#msgrcv|msgrcv]]
sys/wait.h:
[[#waitid|waitid]]
[[#wait4|wait4]]
[[#waitpid|waitpid]]
sys/signalfd.h:
[[#signalfd4|signalfd4]]
[[#signalfd|signalfd]]
signal.h:
[[#kill|kill]]
[[#sigtimedwait|sigtimedwait]]
[[#sigaltstack|sigaltstack]]
[[#sigpending|sigpending]]
[[#sigprocmask|sigprocmask]]
[[#sigaction|sigaction]]
[[#signal|signal]]
[[#sigsuspend|sigsuspend]]
Unexported:
[[#futex|futex]]
[[#set_robust_list|set_robust_list]]
[[#get_robust_list|get_robust_list]]
[[#restart_syscall|restart_syscall]]
[[#tgkill|tgkill]]
[[#rt_sigqueueinfo|rt_sigqueueinfo]]
[[#rt_tgsigqueueinfo|rt_tgsigqueueinfo]]
[[#mq_getsetattr|mq_getsetattr]]
|
'''Memory'''
numaif.h:
[[#mbind|mbind]]
[[#set_mempolicy|set_mempolicy]]
[[#migrate_pages|migrate_pages]]
[[#get_mempolicy|get_mempolicy]]
numaif.h:
[[#move_pages|move_pages]]
sys/mman.h:
[[#msync|msync]]
[[#mincore|mincore]]
[[#munmap|munmap]]
[[#remap_file_pages|remap_file_pages]]
[[#mremap|mremap]]
[[#mlock|mlock]], [[#mlock2|mlock2]]
[[#munlockmlockall|munlockmlockall]]
[[#munlockall|munlockall]]
[[#mprotect|mprotect]]
[[#pkey_mprotect|pkey_mprotect]]
[[#pkey_alloc|pkey_alloc]]
[[#pkey_free|pkey_free]]
[[#madvise|madvise]]
sys/shm.h:
[[#shmget|shmget]], [[#shmctl|shmctl]]
[[#shmat|shmat]], [[#shmdt|shmdt]]
sys/swap.h:
[[#swapoff|swapoff]], [[#swapon|swapon]]
sys/memfd.h:
[[#memfd_create|memfd_create]]
----
'''Security'''
sys/fsuid.h:
[[#setfsuid|setfsuid]]
[[#setfsgid|setfsgid]]
keyutils.h:
[[#add_key|add_key]]
[[#request_key|request_key]]
[[#keyctl|keyctl]]
Unexported:
[[#seccomp|seccomp]]
|
'''Metadata'''
sys/stat.h:
[[#stat|stat]]
sys/statfs.h:
[[#statfs|statfs]]
[[#fstatfs|fstatfs]]
sys/inotify.h:
[[#inotify_init1|inotify_init1]]
[[#inotify_init|inotify_init]]
[[#inotify_add_watch|inotify_add_watch]]
[[#inotify_rm_watch|inotify_rm_watch]]
sys/fanotify.h:
[[#fanotify_init|fanotify_init]]
[[#fanotify_mark|fanotify_mark]]
sys/xattr.h:
[[#setxattr|setxattr]]
[[#lsetxattr|lsetxattr]]
[[#fsetxattr|fsetxattr]]
[[#getxattr|getxattr]]
[[#lgetxattr|lgetxattr]]
[[#fgetxattr|fgetxattr]]
[[#listxattr|listxattr]]
[[#llistxattr|llistxattr]]
[[#flistxattr|flistxattr]]
[[#removexattr|removexattr]]
[[#lremovexattr|lremovexattr]]
[[#fremovexattr|fremovexattr]]
sys/quota.h:
[[#quotactl|quotactl]]
stdio.h:
[[#renameat|renameat]]
[[#rename|rename]]
Unexported:
[[#statx|statx]]
[[#io_getevents|io_getevents]]
[[#io_pgetevents|io_pgetevents]]
[[#fsopen|fsopen]]
[[#fspick|fspick]]
[[#lookup_dcookie|lookup_dcookie]]
[[#renameat2|renameat2]]
[[#fsinfo|fsinfo]]
[[#open_tree|open_tree]]
[[#fsmount|fsmount]]
[[#move_mount|move_mount]]
[[#pivot_root|pivot_root]]
[[#getdents|getdents]]
[[#vmsplice|vmsplice]]
[[#name_to_handle_at|name_to_handle_at]]
[[#open_by_handle_at|open_by_handle_at]]
[[#pselect6|pselect6]]
[[#userfaultfd|userfaultfd]]
[[#mmap_pgoff|mmap_pgoff]]
[[#ioprio_set|ioprio_set]]
[[#ioprio_get|ioprio_get]]
|
'''Data'''
fcntl.h:
[[#open|open]], [[#openat|openat]]
[[#fcntl|fcntl]]
[[#sync_file_range|sync_file_range]]
[[#fallocate|fallocate]]
[[#creat|creat]]
[[#splice|splice]]
[[#tee|tee]]
[[#readahead|readahead]]
unistd.h:
[[#truncate|truncate]], [[#ftruncate|ftruncate]]
[[#faccessat|faccessat]], [[#access|access]]
[[#fchdir|fchdir]], chdir
[[#chroot|chroot]]
[[#fchownat|fchownat]], [[#chown|chown]]
[[#lchown|lchown]], [[#fchown|fchown]]
[[#close|close]]
[[#vhangup|vhangup]]
[[#pipe|pipe]], [[#pipe2|pipe2]]
[[#sync|sync]], [[#syncfs|syncfs]]
[[#fsync|fsync]], [[#fdatasync|fdatasync]]
[[#dup|dup]], [[#dup2|dup2]], [[#dup3|dup3]]
[[#lseek|lseek]]
[[#read|read]], [[#write|write]]
[[#copy_file_range|copy_file_range]]
sys/uio.h:
[[#readv|readv]], [[#writev|writev]]
[[#preadv|preadv]], [[#pwritev|pwritev]]
[[#preadv2|preadv2]], [[#pwritev2|pwritev2]]
[[#process_vm_readv|process_vm_readv]]
[[#process_vm_writev|process_vm_writev]]
sys/file.h:
[[#flock|flock]]
sys/mount.h:
[[#mount|mount]], [[#umount|umount]]
----
'''Nonblocking IO'''
sys/epoll.h:
[[#epoll_create1|epoll_create1]]
[[#epoll_create|epoll_create]]
[[#epoll_ctl|epoll_ctl]]
[[#epoll_wait|epoll_wait]]
[[#epoll_pwait|epoll_pwait]]
sys/select.h:
[[#select|select]]
poll.h:
[[#poll|poll]], [[#ppoll|ppoll]]
linux/aio_abi.h:
[[#io_setup|io_setup]]
[[#io_destroy|io_destroy]]
[[#io_submit|io_submit]]
[[#io_cancel|io_cancel]]
|
'''Network'''
sys/socket.h:
[[#socket|socket]], [[#socketpair|socketpair]]
[[#bind|bind]]
[[#listen|listen]]
[[#accept|accept]], [[#accept4|accept4]]
[[#connect|connect]]
[[#getsockname|getsockname]]
[[#getpeername|getpeername]]
[[#send|send]], [[#recv|recv]]
[[#sendto|sendto]], [[#recvfrom|recvfrom]]
[[#setsockopt|setsockopt]], [[#getsockopt|getsockopt]]
[[#shutdown|shutdown]]
[[#sendmsg|sendmsg]], [[#sendmmsg|sendmmsg]]
[[#recvmsg|recvmsg]], [[#recvmmsg|recvmmsg]]
linux/net.h:
[[#socketcall|socketcall]]
sys/sendfile.h:
[[#sendfile|sendfile]]
unistd.h:
[[#sethostname|sethostname]]
[[#gethostname|gethostname]]
[[#setdomainname|setdomainname]]
|}
Obsolete:
[[#ipc|ipc]], [[#sgetmask|sgetmask]], [[#ssetmask|ssetmask]], [[#sysfs|sysfs]]
== Descriptions ==
{{anchor|accept}}accept, {{anchor|accept4}}accept4 - accept a connection on a socket
{{anchor|access}}access, {{anchor|faccessat}}faccessat - check user's permissions for a file
{{anchor|acct}}acct - switch process accounting on or off
{{anchor|add_key}}add_key - add a key to the kernel's key management facility
{{anchor|adjtimex}}adjtimex, {{anchor|ntp_adjtime}}ntp_adjtime - tune kernel clock
afs_syscall, break, fattach, fdetach, ftime, getmsg, getpmsg, gtty, isastream, lock, madvise1, mpx, prof, profil, putmsg, putpmsg, security, stty, tuxcall, ulimit, vserver - unimplemented system calls
{{anchor|alarm}}alarm - set an alarm clock for delivery of a signal
{{anchor|alloc_hugepages}}alloc_hugepages, {{anchor|free_hugepages}}free_hugepages - allocate or free huge pages
{{anchor|arch_prctl}}arch_prctl - set architecture-specific thread state
{{anchor|bdflush}}bdflush - start, flush, or tune buffer-dirty-flush daemon
{{anchor|bind}}bind - bind a name to a socket
{{anchor|bpf}}bpf - perform a command on an extended BPF map or program
{{anchor|brk}}brk, {{anchor|sbrk}}sbrk - change data segment size
{{anchor|cacheflush}}cacheflush - flush contents of instruction and/or data cache
{{anchor|capget}}capget, {{anchor|capset}}capset - set/get capabilities of thread(s)
{{anchor|chdir}}chdir, {{anchor|fchdir}}fchdir - change working directory
{{anchor|chmod}}chmod, fchmod, {{anchor|fchmodat}}fchmodat - change permissions of a file
{{anchor|chown}}chown, fchown, lchown, {{anchor|fchownat}}fchownat - change ownership of a file
{{anchor|chroot}}chroot - change root directory
{{anchor|clock_getres}}clock_getres, clock_gettime, {{anchor|clock_settime}}clock_settime - clock and time functions
{{anchor|clock_nanosleep}}clock_nanosleep - high-resolution sleep with specifiable clock
{{anchor|clone}}clone, {{anchor|__clone2}}__clone2 - create a child process
{{anchor|close}}close - close a file descriptor
{{anchor|connect}}connect - initiate a connection on a socket
{{anchor|copy_file_range}}copy_file_range - Copy a range of data from one file to another
{{anchor|create_module}}create_module - create a loadable module entry
{{anchor|delete_module}}delete_module - unload a kernel module
{{anchor|dup}}dup, dup2, {{anchor|dup3}}dup3 - duplicate a file descriptor
{{anchor|epoll_create}}epoll_create, {{anchor|epoll_create1}}epoll_create1 - open an epoll file descriptor
{{anchor|epoll_ctl}}epoll_ctl - control interface for an epoll file descriptor
{{anchor|epoll_wait}}epoll_wait, {{anchor|epoll_pwait}}epoll_pwait - wait for an I/O event on an epoll file descriptor
{{anchor|eventfd}}eventfd - create a file descriptor for event notification
{{anchor|execveat}}execveat - execute program relative to a directory file descriptor
{{anchor|execve}}execve - execute program
{{anchor|_exit}}_exit, {{anchor|_Exit}}_Exit - terminate the calling process
{{anchor|exit_group}}exit_group - exit all threads in a process
{{anchor|fallocate}}fallocate - manipulate file space
{{anchor|fanotify_init}}fanotify_init - create and initialize fanotify group
{{anchor|fanotify_mark}}fanotify_mark - add, remove, or modify an fanotify mark on a filesystem object
{{anchor|fcntl}}fcntl - manipulate file descriptor
{{anchor|flock}}flock - apply or remove an advisory lock on an open file
{{anchor|fork}}fork - create a child process
{{anchor|fsync}}fsync, {{anchor|fdatasync}}fdatasync - synchronize a file's in-core state with storage device
{{anchor|futex}}futex - fast user-space locking
{{anchor|futimesat}}futimesat - change timestamps of a file relative to a directory file descriptor
{{anchor|getcontext}}getcontext, {{anchor|setcontext}}setcontext - get or set the user context
{{anchor|getcpu}}getcpu - determine CPU and NUMA node on which the calling thread is running
{{anchor|getcwd}}getcwd, getwd, {{anchor|get_current_dir_name}}get_current_dir_name - get current working directory
{{anchor|getdents}}getdents, {{anchor|getdents64}}getdents64 - get directory entries
{{anchor|getdomainname}}getdomainname, {{anchor|setdomainname}}setdomainname - get/set NIS domain name
{{anchor|getdtablesize}}getdtablesize - get file descriptor table size
{{anchor|getgid}}getgid, {{anchor|getegid}}getegid - get group identity
{{anchor|getgroups}}getgroups, {{anchor|setgroups}}setgroups - get/set list of supplementary group IDs
{{anchor|gethostid}}gethostid, {{anchor|sethostid}}sethostid - get or set the unique identifier of the current host
{{anchor|gethostname}}gethostname, {{anchor|sethostname}}sethostname - get/set hostname
{{anchor|getitimer}}getitimer, {{anchor|setitimer}}setitimer - get or set value of an interval timer
{{anchor|get_kernel_syms}}get_kernel_syms - retrieve exported kernel and module symbols
{{anchor|get_mempolicy}}get_mempolicy - retrieve NUMA memory policy for a thread
{{anchor|getpagesize}}getpagesize - get memory page size
{{anchor|getpeername}}getpeername - get name of connected peer socket
{{anchor|getpid}}getpid, {{anchor|getppid}}getppid - get process identification
{{anchor|getpriority}}getpriority, {{anchor|setpriority}}setpriority - get/set program scheduling priority
{{anchor|getrandom}}getrandom - obtain a series of random bytes
{{anchor|getresuid}}getresuid, {{anchor|getresgid}}getresgid - get real, effective and saved user/group IDs
{{anchor|getrlimit}}getrlimit, setrlimit, {{anchor|prlimit}}prlimit - get/set resource limits
{{anchor|get_robust_list}}get_robust_list, {{anchor|set_robust_list}}set_robust_list - get/set list of robust futexes
{{anchor|getrusage}}getrusage - get resource usage
{{anchor|getsid}}getsid - get session ID
{{anchor|getsockname}}getsockname - get socket name
{{anchor|getsockopt}}getsockopt, {{anchor|setsockopt}}setsockopt - get and set options on sockets
{{anchor|get_thread_area}}get_thread_area, {{anchor|set_thread_area}}set_thread_area - set a GDT entry for thread-local storage
{{anchor|gettid}}gettid - get thread identification
{{anchor|gettimeofday}}gettimeofday, {{anchor|settimeofday}}settimeofday - get / set time
{{anchor|getuid}}getuid, {{anchor|geteuid}}geteuid - get user identity
{{anchor|getunwind}}getunwind - copy the unwind data to caller's buffer
{{anchor|idle}}idle - make process 0 idle
{{anchor|init_module}}init_module, {{anchor|finit_module}}finit_module - load a kernel module
{{anchor|inotify_add_watch}}inotify_add_watch - add a watch to an initialized inotify instance
{{anchor|inotify_init}}inotify_init, {{anchor|inotify_init1}}inotify_init1 - initialize an inotify instance
{{anchor|inotify_rm_watch}}inotify_rm_watch - remove an existing watch from an inotify instance
{{anchor|intro}}intro - introduction to system calls
{{anchor|io_cancel}}io_cancel - cancel an outstanding asynchronous I/O operation
{{anchor|ioctl_console}}ioctl_console - ioctls for console terminal and virtual consoles
{{anchor|ioctl}}ioctl - control device
{{anchor|ioctl_fat}}ioctl_fat - manipulating the FAT filesystem
{{anchor|ioctl_ficlonerange}}ioctl_ficlonerange, {{anchor|ioctl_ficlone}}ioctl_ficlone - share some the data of one file with another file
{{anchor|ioctl_fideduperange}}ioctl_fideduperange - share some the data of one file with another file
{{anchor|ioctl_getfsmap}}ioctl_getfsmap - retrieve the physical layout of the filesystem
{{anchor|ioctl_iflags}}ioctl_iflags - ioctl() operations for inode flags
{{anchor|ioctl_list}}ioctl_list - list of ioctl calls in Linux/i386 kernel
{{anchor|ioctl_ns}}ioctl_ns - ioctl() operations for Linux namespaces
{{anchor|ioctl_tty}}ioctl_tty - ioctls for terminals and serial lines
{{anchor|ioctl_userfaultfd}}ioctl_userfaultfd - create a file descriptor for handling page faults in user space
{{anchor|io_destroy}}io_destroy - destroy an asynchronous I/O context
{{anchor|io_getevents}}io_getevents - read asynchronous I/O events from the completion queue
{{anchor|ioperm}}ioperm - set port input/output permissions
{{anchor|iopl}}iopl - change I/O privilege level
{{anchor|ioprio_get}}ioprio_get, {{anchor|ioprio_set}}ioprio_set - get/set I/O scheduling class and priority
{{anchor|io_setup}}io_setup - create an asynchronous I/O context
{{anchor|io_submit}}io_submit - submit asynchronous I/O blocks for processing
{{anchor|ipc}}ipc - System V IPC system calls
{{anchor|kcmp}}kcmp - compare two processes to determine if they share a kernel resource
{{anchor|kexec_load}}kexec_load, {{anchor|kexec_file_load}}kexec_file_load - load a new kernel for later execution
{{anchor|keyctl}}keyctl - manipulate the kernel's key management facility
{{anchor|killpg}}killpg - send signal to a process group
{{anchor|kill}}kill - send signal to a process
{{anchor|link}}link, {{anchor|linkat}}linkat - make a new name for a file
{{anchor|listen}}listen - listen for connections on a socket
{{anchor|_llseek}}_llseek - reposition read/write file offset
{{anchor|lookup_dcookie}}lookup_dcookie - return a directory entry's path
{{anchor|lseek}}lseek - reposition read/write file offset
{{anchor|madvise}}madvise - give advice about use of memory
{{anchor|mbind}}mbind - set memory policy for a memory range
{{anchor|membarrier}}membarrier - issue memory barriers on a set of threads
{{anchor|memfd_create}}memfd_create - create an anonymous file
{{anchor|migrate_pages}}migrate_pages - move all pages in a process to another set of nodes
{{anchor|mincore}}mincore - determine whether pages are resident in memory
{{anchor|mkdir}}mkdir, {{anchor|mkdirat}}mkdirat - create a directory
{{anchor|mknod}}mknod, {{anchor|mknodat}}mknodat - create a special or ordinary file
{{anchor|mlock}}mlock, mlock2, munlock, mlockall, {{anchor|munlockall}}munlockall - lock and unlock memory
{{anchor|mmap2}}mmap2 - map files or devices into memory
{{anchor|mmap}}mmap, {{anchor|munmap}}munmap - map or unmap files or devices into memory
{{anchor|modify_ldt}}modify_ldt - get or set a per-process LDT entry
{{anchor|mount}}mount - mount filesystem
{{anchor|move_pages}}move_pages - move individual pages of a process to another node
{{anchor|mprotect}}mprotect, {{anchor|pkey_mprotect}}pkey_mprotect - set protection on a region of memory
{{anchor|mq_getsetattr}}mq_getsetattr - get/set message queue attributes
{{anchor|mq_notify}}mq_notify - register for notification when a message is available
{{anchor|mq_open}}mq_open - open a message queue
{{anchor|mq_receive}}mq_receive, {{anchor|mq_timedreceive}}mq_timedreceive - receive a message from a message queue
{{anchor|mq_send}}mq_send, {{anchor|mq_timedsend}}mq_timedsend - send a message to a message queue
{{anchor|mq_unlink}}mq_unlink - remove a message queue
{{anchor|mremap}}mremap - remap a virtual memory address
{{anchor|msgctl}}msgctl - System V message control operations
{{anchor|msgget}}msgget - get a System V message queue identifier
{{anchor|msgrcv}}msgrcv, {{anchor|msgsnd}}msgsnd - System V message queue operations
{{anchor|msync}}msync - synchronize a file with a memory map
{{anchor|name_to_handle_at}}name_to_handle_at, {{anchor|open_by_handle_at}}open_by_handle_at - obtain handle for a pathname and open file via a handle
{{anchor|nanosleep}}nanosleep - high-resolution sleep
{{anchor|nfsservctl}}nfsservctl - syscall interface to kernel nfs daemon
{{anchor|nice}}nice - change process priority
{{anchor|open}}open, openat, {{anchor|creat}}creat - open and possibly create a file
{{anchor|outb}}outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p, outl_p, inb_p, inw_p, {{anchor|inl_p}}inl_p - port I/O
{{anchor|pause}}pause - wait for signal
{{anchor|pciconfig_read}}pciconfig_read, pciconfig_write, {{anchor|pciconfig_iobase}}pciconfig_iobase - pci device information handling
{{anchor|perf_event_open}}perf_event_open - set up performance monitoring
{{anchor|perfmonctl}}perfmonctl - interface to IA-64 performance monitoring unit
{{anchor|personality}}personality - set the process execution domain
{{anchor|pipe}}pipe, {{anchor|pipe2}}pipe2 - create pipe
{{anchor|pivot_root}}pivot_root - change the root filesystem
{{anchor|pkey_alloc}}pkey_alloc, {{anchor|pkey_free}}pkey_free - allocate or free a protection key
{{anchor|poll}}poll, {{anchor|ppoll}}ppoll - wait for some event on a file descriptor
{{anchor|posix_fadvise}}posix_fadvise - predeclare an access pattern for file data
{{anchor|prctl}}prctl - operations on a process
{{anchor|pread}}pread, {{anchor|pwrite}}pwrite - read from or write to a file descriptor at a given offset
{{anchor|process_vm_readv}}process_vm_readv, {{anchor|process_vm_writev}}process_vm_writev - transfer data between process address spaces
{{anchor|ptrace}}ptrace - process trace
{{anchor|query_module}}query_module - query the kernel for various bits pertaining to modules
{{anchor|quotactl}}quotactl - manipulate disk quotas
{{anchor|readahead}}readahead - initiate file readahead into page cache
{{anchor|readdir}}readdir - read directory entry
{{anchor|readlink}}readlink, {{anchor|readlinkat}}readlinkat - read value of a symbolic link
{{anchor|read}}read - read from a file descriptor
{{anchor|readv}}readv, writev, preadv, pwritev, preadv2, {{anchor|pwritev2}}pwritev2 - read or write data into multiple buffers
{{anchor|reboot}}reboot - reboot or enable/disable Ctrl-Alt-Del
{{anchor|recvmmsg}}recvmmsg - receive multiple messages on a socket
{{anchor|recv}}recv, recvfrom, {{anchor|recvmsg}}recvmsg - receive a message from a socket
{{anchor|remap_file_pages}}remap_file_pages - create a nonlinear file mapping
{{anchor|rename}}rename, renameat, {{anchor|renameat2}}renameat2 - change the name or location of a file
{{anchor|request_key}}request_key - request a key from the kernel's key management facility
{{anchor|restart_syscall}}restart_syscall - restart a system call after interruption by a stop signal
{{anchor|rmdir}}rmdir - delete a directory
{{anchor|rt_sigqueueinfo}}rt_sigqueueinfo, {{anchor|rt_tgsigqueueinfo}}rt_tgsigqueueinfo - queue a signal and data
{{anchor|s390_pci_mmio_write}}s390_pci_mmio_write, {{anchor|s390_pci_mmio_read}}s390_pci_mmio_read - transfer data to/from PCI MMIO memory page
{{anchor|s390_runtime_instr}}s390_runtime_instr - enable/disable s390 CPU run-time instrumentation
{{anchor|s390_sthyi}}s390_sthyi - emulate STHYI instruction
{{anchor|sched_get_priority_max}}sched_get_priority_max, sched_get_priority_min - get static priority range
{{anchor|sched_rr_get_interval}}sched_rr_get_interval - get the SCHED_RR interval for the named process
{{anchor|sched_setaffinity}}sched_setaffinity, {{anchor|sched_getaffinity}}sched_getaffinity - set and get a thread's CPU affinity mask
{{anchor|sched_setattr}}sched_setattr, {{anchor|sched_getattr}}sched_getattr - set and get scheduling policy and attributes
{{anchor|sched_setparam}}sched_setparam, {{anchor|sched_getparam}}sched_getparam - set and get scheduling parameters
{{anchor|sched_setscheduler}}sched_setscheduler, {{anchor|sched_getscheduler}}sched_getscheduler - set and get scheduling policy/parameters
{{anchor|sched_yield}}sched_yield - yield the processor
{{anchor|seccomp}}seccomp - operate on Secure Computing state of the process
{{anchor|select}}select, pselect, FD_CLR, FD_ISSET, FD_SET, {{anchor|FD_ZERO}}FD_ZERO - synchronous I/O multiplexing
{{anchor|semctl}}semctl - System V semaphore control operations
{{anchor|semget}}semget - get a System V semaphore set identifier
{{anchor|semop}}semop, {{anchor|semtimedop}}semtimedop - System V semaphore operations
{{anchor|sendfile}}sendfile - transfer data between file descriptors
{{anchor|sendmmsg}}sendmmsg - send multiple messages on a socket
{{anchor|send}}send, sendto, {{anchor|sendmsg}}sendmsg - send a message on a socket
{{anchor|seteuid}}seteuid, {{anchor|setegid}}setegid - set effective user or group ID
{{anchor|setfsgid}}setfsgid - set group identity used for filesystem checks
{{anchor|setfsuid}}setfsuid - set user identity used for filesystem checks
{{anchor|setgid}}setgid - set group identity
{{anchor|set_mempolicy}}set_mempolicy - set default NUMA memory policy for a thread and its children
{{anchor|setns}}setns - reassociate thread with a namespace
{{anchor|setpgid}}setpgid, getpgid, setpgrp, {{anchor|getpgrp}}getpgrp - set/get process group
{{anchor|setresuid}}setresuid, {{anchor|setresgid}}setresgid - set real, effective and saved user or group ID
{{anchor|setreuid}}setreuid, {{anchor|setregid}}setregid - set real and/or effective user or group ID
{{anchor|setsid}}setsid - creates a session and sets the process group ID
{{anchor|set_tid_address}}set_tid_address - set pointer to thread ID
{{anchor|setuid}}setuid - set user identity
{{anchor|setup}}setup - setup devices and filesystems, mount root filesystem
{{anchor|sgetmask}}sgetmask, {{anchor|ssetmask}}ssetmask - manipulation of signal mask (obsolete)
{{anchor|shmat}}shmat, {{anchor|shmdt}}shmdt - System V shared memory operations
{{anchor|shmctl}}shmctl - System V shared memory control
{{anchor|shmget}}shmget - allocates a System V shared memory segment
{{anchor|shutdown}}shutdown - shut down part of a full-duplex connection
{{anchor|sigaction}}sigaction, {{anchor|rt_sigaction}}rt_sigaction - examine and change a signal action
{{anchor|sigaltstack}}sigaltstack - set and/or get signal stack context
{{anchor|signal}}signal - ANSI C signal handling
{{anchor|signalfd}}signalfd - create a file descriptor for accepting signals
{{anchor|sigpending}}sigpending, {{anchor|rt_sigpending}}rt_sigpending - examine pending signals
{{anchor|sigprocmask}}sigprocmask, {{anchor|rt_sigprocmask}}rt_sigprocmask - examine and change blocked signals
{{anchor|sigqueue}}sigqueue - queue a signal and data to a process
{{anchor|sigreturn}}sigreturn, {{anchor|rt_sigreturn}}rt_sigreturn - return from signal handler and cleanup stack frame
{{anchor|sigsuspend}}sigsuspend, {{anchor|rt_sigsuspend}}rt_sigsuspend - wait for a signal
{{anchor|sigwaitinfo}}sigwaitinfo, sigtimedwait, {{anchor|rt_sigtimedwait}}rt_sigtimedwait - synchronously wait for queued signals
{{anchor|socketcall}}socketcall - socket system calls
{{anchor|socket}}socket - create an endpoint for communication
{{anchor|socketpair}}socketpair - create a pair of connected sockets
{{anchor|splice}}splice - splice data to/from a pipe
{{anchor|spu_create}}spu_create - create a new spu context
{{anchor|spu_run}}spu_run - execute an SPU context
{{anchor|statfs}}statfs, {{anchor|fstatfs}}fstatfs - get filesystem statistics
{{anchor|stat}}stat, fstat, lstat, {{anchor|fstatat}}fstatat - get file status
{{anchor|statvfs}}statvfs, {{anchor|fstatvfs}}fstatvfs - get filesystem statistics
{{anchor|statx}}statx - get file status (extended)
{{anchor|stime}}stime - set time
{{anchor|subpage_prot}}subpage_prot - define a subpage protection for an address range
{{anchor|swapon}}swapon, {{anchor|swapoff}}swapoff - start/stop swapping to file/device
{{anchor|symlink}}symlink, {{anchor|symlinkat}}symlinkat - make a new name for a file
{{anchor|sync_file_range}}sync_file_range - sync a file segment with disk
{{anchor|sync}}sync, {{anchor|syncfs}}syncfs - commit filesystem caches to disk
{{anchor|syscall}}syscall - indirect system call
{{anchor|_syscall}}_syscall - invoking a system call without library support (OBSOLETE)
{{anchor|syscalls}}syscalls - Linux system calls
{{anchor|sysctl}}sysctl - read/write system parameters
{{anchor|sysfs}}sysfs - get filesystem type information
{{anchor|sysinfo}}sysinfo - return system information
{{anchor|syslog}}syslog, {{anchor|klogctl}}klogctl - read and/or clear kernel message ring buffer; set console_loglevel
{{anchor|tee}}tee - duplicating pipe content
{{anchor|time}}time - get time in seconds
{{anchor|timer_create}}timer_create - create a POSIX per-process timer
{{anchor|timer_delete}}timer_delete - delete a POSIX per-process timer
{{anchor|timerfd_create}}timerfd_create, timerfd_settime, {{anchor|timerfd_gettime}}timerfd_gettime - timers that notify via file descriptors
{{anchor|timer_getoverrun}}timer_getoverrun - get overrun count for a POSIX per-process timer
{{anchor|timer_settime}}timer_settime, {{anchor|timer_gettime}}timer_gettime - arm/disarm and fetch state of POSIX per-process timer
{{anchor|times}}times - get process times
{{anchor|tkill}}tkill, {{anchor|tgkill}}tgkill - send a signal to a thread
{{anchor|truncate}}truncate, {{anchor|ftruncate}}ftruncate - truncate a file to a specified length
{{anchor|umask}}umask - set file mode creation mask
{{anchor|umount}}umount, {{anchor|umount2}}umount2 - unmount filesystem
{{anchor|uname}}uname - get name and information about current kernel
{{anchor|unlink}}unlink, {{anchor|unlinkat}}unlinkat - delete a name and possibly the file it refers to
{{anchor|unshare}}unshare - disassociate parts of the process execution context
{{anchor|uselib}}uselib - load shared library
{{anchor|userfaultfd}}userfaultfd - create a file descriptor for handling page faults in user space
{{anchor|ustat}}ustat - get filesystem statistics
{{anchor|utimensat}}utimensat, {{anchor|futimens}}futimens - change file timestamps with nanosecond precision
{{anchor|utime}}utime, {{anchor|utimes}}utimes - change file last access and modification times
{{anchor|vfork}}vfork - create a child process and block parent
{{anchor|vhangup}}vhangup - virtually hangup the current terminal
{{anchor|vm86old}}vm86old, {{anchor|vm86}}vm86 - enter virtual 8086 mode
{{anchor|vmsplice}}vmsplice - splice user pages into a pipe
{{anchor|wait3}}wait3, {{anchor|wait4}}wait4 - wait for process to change state, BSD style
{{anchor|wait}}wait, waitpid, {{anchor|waitid}}waitid - wait for process to change state
{{anchor|write}}write - write to a file descriptor
=== Links: ===
* {{The Linux Kernel/include|linux/syscalls.h}}
* {{The Linux Kernel/man|2|syscalls}}
* [https://man7.org/linux/man-pages/dir_section_0.html Directory of POSIX headers, man section 0]
* [http://man7.org/linux/man-pages/dir_section_2.html Directory of system calls, man section 2]
* {{The Linux Kernel/ltp|kernel|syscalls}}
* [https://0xax.gitbooks.io/linux-insides/content/SysCall/ System calls]
{{BookCat}}
0xhcj5zm64z684j1tliiqnfsxvdwwjy
OpenSCAD Tutorial/Chapter 1
0
409752
4641563
4641385
2026-06-28T17:58:04Z
~2026-37409-05
3610589
when the overlap cube was centered before and it gets translated by 9.99 in y it should not overlap (0.002 / 2 + 9.99 = 10)
4641563
wikitext
text/x-wiki
{{Nav}}
== A few words about OpenSCAD ==
OpenSCAD is a solid 3D modeler that enables the creation of parametric models using its scripting language. Models are created by utilizing a technique called constructive solid geometry. According to this technique, simple objects can be transformed and combined in order to create almost any complex model.
== Getting started with the Tutorial ==
This tutorial is a follow-along tutorial. As you are following the examples you will be asked to modify and extend them as well as create your own models. To move on please install OpenSCAD and start from a blank model.
== User Interface ==
After starting OpenSCAD the window should look similar to the image below.
[[File:OpenSCAD environment.png|680px]]
The Window is divided in three columns.
# In the left column, is the built-in text editor, where the true magic unfolds. As you enter keyboard commands you can view the transformation of code into art.
# In the middle column, the displayed 3D View is where your design creations come to life. At the bottom lies the operations sequence console, always ready to lend a helping hand. It unravels the mysteries of mistakes and guides you towards mastery. It is your trusted guidance companion.
# And note the right column, the GUI Customizer. It offers the user a gift of ease toolbar, a graphical interface to tweak and twist your model's parameters.
== Creating your first object ==
Your first object is going to be a perfect cube with side length of 10. In order to create it you need to type the following code in the text editor and hit the preview (first) icon on the action bar below the reference axes.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_small_cube.scad''
<pre>cube(10);</pre> </td>
</tr>
</table>
[[File:a_small_cube.jpg|680px]]
There are a few fundamental concepts that you should learn from the start regarding the OpenSCAD scripting language, especially if you don’t have a programming background. The word 'cube' is part of OpenSCAD scripting language and is used to command OpenSCAD to create a cube. The 'cube' command is followed by a pair of parentheses, inside of which the parameter size is defined to be 10. Any definition of parameters that a command may require is always done inside a pair of matching parentheses that follow the command word. The semicolon after the last parenthesis indicates the end of that statement, and helps OpenSCAD parse the script that you typed in the text editor. Because a semicolon is used to indicate the end of each statement you have the freedom to format your code in any way you like by inserting whitespace.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding some whitespace between the word 'cube' and the first parenthesis and then hit (select) the "preview" option. Is your cube created? Do you get any error message? Try adding some additional whitespace in different places and hit "preview" again to see what you can get away with before getting an error message in the console. What happens if you add whitespace between the syllables 'cu' and 'be' of the word 'cube' and hit "preview"? What happens if you delete the semicolon?</td>
</tr>
</table>
You just read "hit preview" three times in the last paragraph. When you hit "preview" OpenSCAD parses your script and creates the appropriate model. Every time you make a change to your script (e.g. adding whitespace) or later, when adding additional statements, you need to hit "preview" to see the effect of these changes. In case you haven't found the "preview" icon yet, it is the dotted line cube with the two ">>" characters under it. It can also be selected by hitting the F5 key.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try changing the size of the cube to 20 and see what happens. Did you remember to hit preview in order to see your changes take place?</td>
</tr>
</table>
[[File:A_bigger_cube.jpg|680px]]
== Creating a slightly different cube ==
A cube doesn’t have to be perfect (equal distance). A cube can have different side lengths. Use the following statement to create a cube (cubical) with side lengths of 25, 35 and 55.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_different_cube.scad''
<pre>cube([25,35,55]);</pre>
</td>
</tr>
</table>
[[File:a_cube_with_different_side_lengths.jpg|680px]]
This cube is quite large compared to the previous one. In fact, it is so large it doesn’t fit in the viewport. To fix that, hover your mouse over the viewport and scroll out until you can see the entire cube. Zoom in and out by hovering your mouse over the viewport and rotating the scroll wheel. Alternatively, you can use the zoom in (fourth) and out (fifth) icons on the action bar below the viewport. You can let OpenSCAD automatically choose a convenient zoom level by using the view all (third) icon in the same action bar.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try moving your mouse over the viewport and using the scroll wheel to zoom in and out. Try zooming in and out using the corresponding icons. Let OpenSCAD choose a zoom level for you.</td>
</tr>
</table>
[[File:View all viewing option.jpg|680px]]
Apart from zooming in and out, you can also move and rotate the view of your model. To do so, you need to hover your mouse over the viewport while holding down the right button to move or drag the object. Hold down the left button to rotate the object. Reset the view by clicking on the reset view (sixth) icon on the action bar below the viewport.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try dragging your mouse over the viewport while holding down the right or left button to move or rotate your model.</td>
</tr>
</table>
[[File:Rotated viewing angle.jpg|680px]]
In order to create a cube with different side lengths, you need to define a pair of brackets with three values inside the parentheses. The pair of brackets is used to denote vector values. The values of the vector need to be comma separated, and correspond to the cube side lengths along the X, Y and Z axes. Previously, you used the cube command to create a perfect cube by defining the value of the size parameter. Most OpenSCAD commands can be used with different parameters, some with more, less or no parameters to achieve different results.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try using the cube command with no parameters. What happens? Use the cube command to create a cube with side lengths of 50, 5 and 10. Use the cube command to create a perfect cube with side length of 17.25.</td>
</tr>
</table>
You should notice that every cube is created on the first octant. You can define an additional parameter named center and set it equal to true, in order to draw the cube centered on the origin.
Here's an example of the complete statement:
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_centered_cube_with_different_side_lengths.scad''
<pre>
cube([20,30,50],center=true);</pre>
</td>
</tr>
</table>
[[File:A centered cube with different side lengths.jpg|680px]]
Notice that when more than one parameter is defined inside the parentheses, they need to be separated with a comma.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try creating a perfect cube or a cube with different side lengths. Use an appropriate additional input parameter to make this cube centered on the origin. If you like, add some whitespace before and after the comma that separates the two parameters.</td>
</tr>
</table>
== Adding more objects and translating objects ==
The constructive solid modelling approach uses a number of fundamental objects along with a number of ways to transform and combine these objects to create more complex models. The cube that you have been using in the previous examples is one such fundamental object. The fundamental objects are called primitives and are directly available in the OpenSCAD scripting language. A car for example, is not an OpenSCAD primitive, as there is no corresponding keyword in the scripting language. This makes absolute sense because OpenSCAD is a set of modelling tools rather than a library of predefined models. Using the available tools, you can combine the available primitives to create your own car. To do this, you need to know how to add more than one object to your model.
First create a cube with side lengths of 60, 20 and 10 that is centered on the origin.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
<pre>
cube([60,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:A centered cube.jpg|680px]]
In order to add a second cube to your model, type an identical statement in the next line of the text editor.
Change the side lengths to 30, 20 and 10.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_smaller_cube_covered_by_a_bigger_cube.scad''
<pre>
cube([60,20,10],center=true);
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:A smaller cube covered by a bigger cube.jpg|680px]]
You should not see any change in your model because the second cube is not larger than the first cube in any dimension, and is currently completely covered by the first cube. By modifying the second statement in the following way, you can translate the second cube to place it on top of the first cube.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,5])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes.jpg|680px]]
You achieve this by using the "translate" command - one of the available transformations. The translate command, as well as the rest of the transformations don’t create an object on their own. Rather, they are applied to existing objects to modify them. The translate command can be used to move an object to any point in space. The input parameter for the translate command is a vector of three values. Each value indicates the amount of units that the object will be moved along the X, Y and Z axes. Notice there is no semicolon after the translate command. What follows the translate command is the definition of the object that you wish to translate. The semicolon is added at the end to indicate the completion of the statement.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try changing the input parameter of the translate command, so the cube is translated 5 units along the X axis and 10 units along the Z axis. Try adding some whitespace if you would like to format this statement in a different way. Try adding a semicolon after the translate command.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_barely_touching.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,10])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes barely touching.jpg|680px]]
In the example above, the second cube sits exactly on top of the first cube. This is something that should be avoided, as it’s not clear to OpenSCAD whether the two cubes form one object together. This issue can be easily solved by always maintaining a small overlap of about 0.001 - 0.002 between the corresponding objects. One way to do so is by decreasing the amount of translation along the Z axis from 10 unit to 9.999 units.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_with_small_overlap.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,9.999])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes with small overlap.jpg|680px]]
Another way to do so more explicitly is by subtracting 0.001 units from the corresponding value on the script.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_with_explicit_small_overlap.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,10 - 0.001])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes with small overlap.jpg|680px]]
There is a third way. To avoid losing 0.001 from the top, we can add a third cube with the X-Y dimensions of the smaller cube, and height of 0.002 ([30, 20, 0.002]). The third cube will close the gap.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''third_cube_close_small_gap.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,10])
cube([30,20,10],center=true);
translate([0,0,10])
cube([30,20,0.002],center=true);</pre>
</td>
</tr>
</table>
You will encounter this throughout the tutorial. Instead of two objects just touching each other, always guarantee a small overlap by subtracting or adding a tolerance of 0.001 units.
== The cylinder primitive and rotating objects ==
The model that you just created looks like the body of a car that has bad aerodynamics. That’s ok. You will be making the car look a lot more interesting and aerodynamic in the following chapters. For now, you are going to use the cylinder primitive and the rotate transformation to add wheels and axles to your car. You can create a wheel by adding a third statement that consists of the cylinder command. You will need to define two input parameters, h and r.
h is the height of the cylinder. r is its radius.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_cylinder_covered_by_cubes.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:A cylinder covered by cubes.jpg|680px]]
Notice the cylinder is hidden by the other objects. Use the translate command to make the cylinder visible by translating it 20 units along the negative direction of the Y axis.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_and_a_cylinder.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([0,-20,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Two cubes and a cylinder.jpg|680px]]
The wheel is now visible, but your car won’t go anywhere if its not properly placed. You can use the rotate command to make the wheel stand up straight. To do so, you need to rotate it 90 degrees around the X axis.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_and_a_rotated_cylinder.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
rotate([90,0,0])
translate([0,-20,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Two cubes and a rotated cylinder.jpg|680px]]
Notice the absence of a semicolon between the rotate and translate command. By now, you should be getting familiar with this concept. The semicolon is only added at the end of a statement. You can keep adding as many transformation commands as you like, but you should not include a semicolon between them.
The second thing to make note of is the rotate command has one input parameter, which is a vector of three values. Analogous to the translate command, each value indicates how many degrees an object will be rotated around the X, Y and Z axes.
The third thing to note is the wheel is standing straight but as a result of its rotation around the x axis it has moved below the car. This happened because the object was moved away from the origin before it was rotated. A good practice for placing objects inside your model is to rotate them first, ''then'' translate them to the desired position. Note that OpenSCAD generates the object, then applies the object transformations starting with the one immediately before the object definition, then working backwards. So in order to rotate your object, then move it with a translation, specify the translation first, followed by the rotation, followed by the object definition.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try first rotating the wheel and then translating it, by changing the order of the rotate and translate commands.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_and_a_rotated_and_translated_cylinder.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([0,-20,0])
rotate([90,0,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Two cubes and a rotated and translated cylinder.jpg|680px]]
It already looks a lot better than the previous position of the wheel.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try modifying the input parameter of the translate command to make this wheel the front left wheel of your car.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''car_body_and_front_left_wheel.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Car body and front left wheel.jpg|680px]]
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding the front right wheel of the car by duplicating the last statement and changing only the sign of one value.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''car_body_and_misaligned_front_wheels.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Car body and misaligned front wheels.jpg|680px]]
You should notice that the position of the wheels is not symmetric. This happened because the cylinder was not created centered on the origin.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding an additional input parameter to the cylinder commands to tell OpenSCAD both wheels should be centered on the origin when first created. Is the position of your wheels symmetric now?</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''car_body_and_aligned_front_wheels.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);</pre>
</td>
</tr>
</table>
[[File:Car body and aligned front wheels.jpg|680px]]
== Completing your first model ==
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try using what you have learned to add the rear missing wheels to the car. Try adding a connecting axle to the front and rear wheels.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''completed_car.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);
translate([20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);</pre>
</td>
</tr>
</table>
[[File:Completed car.jpg|680px]]
Notice on the model above, there is an overlap between the axles and the wheels that is equal to half the thickness of the wheels. If the model was created in a way that the wheels and the axles were just touching each other, then there would be a need to ensure a small overlap between them as was done with the two cubes of the car’s body.
One thing you may have noticed is the resolution of the wheels. Until now you have been using OpenSCAD’s default resolution settings. There are special commands in OpenSCAD language which allow you to have full control over the resolution of your models. Increasing the resolution of your model will also increase the required rendering time every time you update your design. For this reason, it is advised that you keep the default resolution settings when you are building your model, and increase the resolution only after completing your design. Since the car example is completed, you can increase the resolution by adding the following two statements in your script.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
<pre>
$fa = 1;
$fs = 0.4;</pre>
</td>
</tr>
</table>
Try adding the above two statements at the beginning of the car’s script. Do you notice any changes in the resolution of the wheels?
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''completed_car_higher_resolution.scad''
<pre>
$fa = 1;
$fs = 0.4;
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);
translate([20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);</pre>
</td>
</tr>
</table>
[[File:Completed car higher resolution.jpg|680px]]
$fa and $fs are special variables that determine the resolution of the model according to the values that have been assigned to them. Their exact function will be explained later, and is something that you should not worry about yet. The only thing you need to keep in mind, is that you can add these two statements in any script to achieve a resolution that is universally good for 3D printing. These two statements will be used in all examples throughout the tutorial in order to have visually appealing renderings.
Before sharing your script with your friends, it would be nice to include some comments to help them understand your script. You can use a double slash at the start of a line to write anything you like without affecting your model. By using a double slash, OpenSCAD knows that what follows is not part of the scripting language and simply ignores it.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding a comment above each statement to let your friends know what part of your model is created with each statement.</td>
</tr>
</table>
<table class="wikitable mw-collapsible mw-collapsed" style="border: 2px solid MediumSeaGreen;">
<caption style="text-align: left; color: MediumSeaGreen;">Solution Code</caption>
<tr>
<td>
''completed_car_commented.scad''
<pre>
$fa = 1;
$fs = 0.4;
// Car body base
cube([60,20,10],center=true);
// Car body top
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
// Front left wheel
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Front right wheel
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Rear left wheel
translate([20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Rear right wheel
translate([20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Front axle
translate([-20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);
// Rear axle
translate([20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);</pre>
</td>
</tr>
</table>
It’s time to save your model. Hit the save (third) icon on the action bar above the editor to save your script as a *.scad file. When you are creating a new model remember to save early, then save often, to avoid accidentally losing your work.
If you would like to 3D print your car you can export it as an STL file. First click on the render (second) icon on the action bar below the viewport to generate the STL file, then click on the export as STL icon on the action bar above the editor, to save an STL file of your model.
== Creating a second model ==
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try using everything you learned to create a new simple model. It can be a house, an airplane or anything you like. Don’t worry about making your model look perfect, just experiment with your new skills! You will keep learning more techniques to create awesome models in the following chapters.</td>
</tr>
</table>
{{BookCat}}
hb4xfry8zocjy7831ubz47bquf3s3n1
4641564
4641563
2026-06-28T18:03:10Z
~2026-37409-05
3610589
actually I just checked in openscad to make sure and the middle cube needs to be translated by 5 because that's the top surface of a 10 high centered cuboid
4641564
wikitext
text/x-wiki
{{Nav}}
== A few words about OpenSCAD ==
OpenSCAD is a solid 3D modeler that enables the creation of parametric models using its scripting language. Models are created by utilizing a technique called constructive solid geometry. According to this technique, simple objects can be transformed and combined in order to create almost any complex model.
== Getting started with the Tutorial ==
This tutorial is a follow-along tutorial. As you are following the examples you will be asked to modify and extend them as well as create your own models. To move on please install OpenSCAD and start from a blank model.
== User Interface ==
After starting OpenSCAD the window should look similar to the image below.
[[File:OpenSCAD environment.png|680px]]
The Window is divided in three columns.
# In the left column, is the built-in text editor, where the true magic unfolds. As you enter keyboard commands you can view the transformation of code into art.
# In the middle column, the displayed 3D View is where your design creations come to life. At the bottom lies the operations sequence console, always ready to lend a helping hand. It unravels the mysteries of mistakes and guides you towards mastery. It is your trusted guidance companion.
# And note the right column, the GUI Customizer. It offers the user a gift of ease toolbar, a graphical interface to tweak and twist your model's parameters.
== Creating your first object ==
Your first object is going to be a perfect cube with side length of 10. In order to create it you need to type the following code in the text editor and hit the preview (first) icon on the action bar below the reference axes.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_small_cube.scad''
<pre>cube(10);</pre> </td>
</tr>
</table>
[[File:a_small_cube.jpg|680px]]
There are a few fundamental concepts that you should learn from the start regarding the OpenSCAD scripting language, especially if you don’t have a programming background. The word 'cube' is part of OpenSCAD scripting language and is used to command OpenSCAD to create a cube. The 'cube' command is followed by a pair of parentheses, inside of which the parameter size is defined to be 10. Any definition of parameters that a command may require is always done inside a pair of matching parentheses that follow the command word. The semicolon after the last parenthesis indicates the end of that statement, and helps OpenSCAD parse the script that you typed in the text editor. Because a semicolon is used to indicate the end of each statement you have the freedom to format your code in any way you like by inserting whitespace.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding some whitespace between the word 'cube' and the first parenthesis and then hit (select) the "preview" option. Is your cube created? Do you get any error message? Try adding some additional whitespace in different places and hit "preview" again to see what you can get away with before getting an error message in the console. What happens if you add whitespace between the syllables 'cu' and 'be' of the word 'cube' and hit "preview"? What happens if you delete the semicolon?</td>
</tr>
</table>
You just read "hit preview" three times in the last paragraph. When you hit "preview" OpenSCAD parses your script and creates the appropriate model. Every time you make a change to your script (e.g. adding whitespace) or later, when adding additional statements, you need to hit "preview" to see the effect of these changes. In case you haven't found the "preview" icon yet, it is the dotted line cube with the two ">>" characters under it. It can also be selected by hitting the F5 key.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try changing the size of the cube to 20 and see what happens. Did you remember to hit preview in order to see your changes take place?</td>
</tr>
</table>
[[File:A_bigger_cube.jpg|680px]]
== Creating a slightly different cube ==
A cube doesn’t have to be perfect (equal distance). A cube can have different side lengths. Use the following statement to create a cube (cubical) with side lengths of 25, 35 and 55.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_different_cube.scad''
<pre>cube([25,35,55]);</pre>
</td>
</tr>
</table>
[[File:a_cube_with_different_side_lengths.jpg|680px]]
This cube is quite large compared to the previous one. In fact, it is so large it doesn’t fit in the viewport. To fix that, hover your mouse over the viewport and scroll out until you can see the entire cube. Zoom in and out by hovering your mouse over the viewport and rotating the scroll wheel. Alternatively, you can use the zoom in (fourth) and out (fifth) icons on the action bar below the viewport. You can let OpenSCAD automatically choose a convenient zoom level by using the view all (third) icon in the same action bar.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try moving your mouse over the viewport and using the scroll wheel to zoom in and out. Try zooming in and out using the corresponding icons. Let OpenSCAD choose a zoom level for you.</td>
</tr>
</table>
[[File:View all viewing option.jpg|680px]]
Apart from zooming in and out, you can also move and rotate the view of your model. To do so, you need to hover your mouse over the viewport while holding down the right button to move or drag the object. Hold down the left button to rotate the object. Reset the view by clicking on the reset view (sixth) icon on the action bar below the viewport.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try dragging your mouse over the viewport while holding down the right or left button to move or rotate your model.</td>
</tr>
</table>
[[File:Rotated viewing angle.jpg|680px]]
In order to create a cube with different side lengths, you need to define a pair of brackets with three values inside the parentheses. The pair of brackets is used to denote vector values. The values of the vector need to be comma separated, and correspond to the cube side lengths along the X, Y and Z axes. Previously, you used the cube command to create a perfect cube by defining the value of the size parameter. Most OpenSCAD commands can be used with different parameters, some with more, less or no parameters to achieve different results.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try using the cube command with no parameters. What happens? Use the cube command to create a cube with side lengths of 50, 5 and 10. Use the cube command to create a perfect cube with side length of 17.25.</td>
</tr>
</table>
You should notice that every cube is created on the first octant. You can define an additional parameter named center and set it equal to true, in order to draw the cube centered on the origin.
Here's an example of the complete statement:
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_centered_cube_with_different_side_lengths.scad''
<pre>
cube([20,30,50],center=true);</pre>
</td>
</tr>
</table>
[[File:A centered cube with different side lengths.jpg|680px]]
Notice that when more than one parameter is defined inside the parentheses, they need to be separated with a comma.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try creating a perfect cube or a cube with different side lengths. Use an appropriate additional input parameter to make this cube centered on the origin. If you like, add some whitespace before and after the comma that separates the two parameters.</td>
</tr>
</table>
== Adding more objects and translating objects ==
The constructive solid modelling approach uses a number of fundamental objects along with a number of ways to transform and combine these objects to create more complex models. The cube that you have been using in the previous examples is one such fundamental object. The fundamental objects are called primitives and are directly available in the OpenSCAD scripting language. A car for example, is not an OpenSCAD primitive, as there is no corresponding keyword in the scripting language. This makes absolute sense because OpenSCAD is a set of modelling tools rather than a library of predefined models. Using the available tools, you can combine the available primitives to create your own car. To do this, you need to know how to add more than one object to your model.
First create a cube with side lengths of 60, 20 and 10 that is centered on the origin.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
<pre>
cube([60,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:A centered cube.jpg|680px]]
In order to add a second cube to your model, type an identical statement in the next line of the text editor.
Change the side lengths to 30, 20 and 10.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_smaller_cube_covered_by_a_bigger_cube.scad''
<pre>
cube([60,20,10],center=true);
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:A smaller cube covered by a bigger cube.jpg|680px]]
You should not see any change in your model because the second cube is not larger than the first cube in any dimension, and is currently completely covered by the first cube. By modifying the second statement in the following way, you can translate the second cube to place it on top of the first cube.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,5])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes.jpg|680px]]
You achieve this by using the "translate" command - one of the available transformations. The translate command, as well as the rest of the transformations don’t create an object on their own. Rather, they are applied to existing objects to modify them. The translate command can be used to move an object to any point in space. The input parameter for the translate command is a vector of three values. Each value indicates the amount of units that the object will be moved along the X, Y and Z axes. Notice there is no semicolon after the translate command. What follows the translate command is the definition of the object that you wish to translate. The semicolon is added at the end to indicate the completion of the statement.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try changing the input parameter of the translate command, so the cube is translated 5 units along the X axis and 10 units along the Z axis. Try adding some whitespace if you would like to format this statement in a different way. Try adding a semicolon after the translate command.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_barely_touching.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,10])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes barely touching.jpg|680px]]
In the example above, the second cube sits exactly on top of the first cube. This is something that should be avoided, as it’s not clear to OpenSCAD whether the two cubes form one object together. This issue can be easily solved by always maintaining a small overlap of about 0.001 - 0.002 between the corresponding objects. One way to do so is by decreasing the amount of translation along the Z axis from 10 unit to 9.999 units.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_with_small_overlap.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,9.999])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes with small overlap.jpg|680px]]
Another way to do so more explicitly is by subtracting 0.001 units from the corresponding value on the script.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_with_explicit_small_overlap.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,10 - 0.001])
cube([30,20,10],center=true);</pre>
</td>
</tr>
</table>
[[File:Two cubes with small overlap.jpg|680px]]
There is a third way. To avoid losing 0.001 from the top, we can add a third cube with the X-Y dimensions of the smaller cube, and height of 0.002 ([30, 20, 0.002]). The third cube will close the gap.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''third_cube_close_small_gap.scad''
<pre>
cube([60,20,10],center=true);
translate([0,0,5])
cube([30,20,10],center=true);
translate([0,0,10])
cube([30,20,0.002],center=true);</pre>
</td>
</tr>
</table>
You will encounter this throughout the tutorial. Instead of two objects just touching each other, always guarantee a small overlap by subtracting or adding a tolerance of 0.001 units.
== The cylinder primitive and rotating objects ==
The model that you just created looks like the body of a car that has bad aerodynamics. That’s ok. You will be making the car look a lot more interesting and aerodynamic in the following chapters. For now, you are going to use the cylinder primitive and the rotate transformation to add wheels and axles to your car. You can create a wheel by adding a third statement that consists of the cylinder command. You will need to define two input parameters, h and r.
h is the height of the cylinder. r is its radius.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''a_cylinder_covered_by_cubes.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:A cylinder covered by cubes.jpg|680px]]
Notice the cylinder is hidden by the other objects. Use the translate command to make the cylinder visible by translating it 20 units along the negative direction of the Y axis.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_and_a_cylinder.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([0,-20,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Two cubes and a cylinder.jpg|680px]]
The wheel is now visible, but your car won’t go anywhere if its not properly placed. You can use the rotate command to make the wheel stand up straight. To do so, you need to rotate it 90 degrees around the X axis.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_and_a_rotated_cylinder.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
rotate([90,0,0])
translate([0,-20,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Two cubes and a rotated cylinder.jpg|680px]]
Notice the absence of a semicolon between the rotate and translate command. By now, you should be getting familiar with this concept. The semicolon is only added at the end of a statement. You can keep adding as many transformation commands as you like, but you should not include a semicolon between them.
The second thing to make note of is the rotate command has one input parameter, which is a vector of three values. Analogous to the translate command, each value indicates how many degrees an object will be rotated around the X, Y and Z axes.
The third thing to note is the wheel is standing straight but as a result of its rotation around the x axis it has moved below the car. This happened because the object was moved away from the origin before it was rotated. A good practice for placing objects inside your model is to rotate them first, ''then'' translate them to the desired position. Note that OpenSCAD generates the object, then applies the object transformations starting with the one immediately before the object definition, then working backwards. So in order to rotate your object, then move it with a translation, specify the translation first, followed by the rotation, followed by the object definition.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try first rotating the wheel and then translating it, by changing the order of the rotate and translate commands.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''two_cubes_and_a_rotated_and_translated_cylinder.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([0,-20,0])
rotate([90,0,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Two cubes and a rotated and translated cylinder.jpg|680px]]
It already looks a lot better than the previous position of the wheel.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try modifying the input parameter of the translate command to make this wheel the front left wheel of your car.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''car_body_and_front_left_wheel.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Car body and front left wheel.jpg|680px]]
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding the front right wheel of the car by duplicating the last statement and changing only the sign of one value.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''car_body_and_misaligned_front_wheels.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8);</pre>
</td>
</tr>
</table>
[[File:Car body and misaligned front wheels.jpg|680px]]
You should notice that the position of the wheels is not symmetric. This happened because the cylinder was not created centered on the origin.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding an additional input parameter to the cylinder commands to tell OpenSCAD both wheels should be centered on the origin when first created. Is the position of your wheels symmetric now?</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''car_body_and_aligned_front_wheels.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);</pre>
</td>
</tr>
</table>
[[File:Car body and aligned front wheels.jpg|680px]]
== Completing your first model ==
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try using what you have learned to add the rear missing wheels to the car. Try adding a connecting axle to the front and rear wheels.</td>
</tr>
</table>
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''completed_car.scad''
<pre>
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);
translate([20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);</pre>
</td>
</tr>
</table>
[[File:Completed car.jpg|680px]]
Notice on the model above, there is an overlap between the axles and the wheels that is equal to half the thickness of the wheels. If the model was created in a way that the wheels and the axles were just touching each other, then there would be a need to ensure a small overlap between them as was done with the two cubes of the car’s body.
One thing you may have noticed is the resolution of the wheels. Until now you have been using OpenSCAD’s default resolution settings. There are special commands in OpenSCAD language which allow you to have full control over the resolution of your models. Increasing the resolution of your model will also increase the required rendering time every time you update your design. For this reason, it is advised that you keep the default resolution settings when you are building your model, and increase the resolution only after completing your design. Since the car example is completed, you can increase the resolution by adding the following two statements in your script.
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
<pre>
$fa = 1;
$fs = 0.4;</pre>
</td>
</tr>
</table>
Try adding the above two statements at the beginning of the car’s script. Do you notice any changes in the resolution of the wheels?
<table class="wikitable" style="border: 2px solid Gold;">
<caption style="text-align: left; color: Gold;">Code</caption>
<tr>
<td>
''completed_car_higher_resolution.scad''
<pre>
$fa = 1;
$fs = 0.4;
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
translate([-20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);
translate([20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);</pre>
</td>
</tr>
</table>
[[File:Completed car higher resolution.jpg|680px]]
$fa and $fs are special variables that determine the resolution of the model according to the values that have been assigned to them. Their exact function will be explained later, and is something that you should not worry about yet. The only thing you need to keep in mind, is that you can add these two statements in any script to achieve a resolution that is universally good for 3D printing. These two statements will be used in all examples throughout the tutorial in order to have visually appealing renderings.
Before sharing your script with your friends, it would be nice to include some comments to help them understand your script. You can use a double slash at the start of a line to write anything you like without affecting your model. By using a double slash, OpenSCAD knows that what follows is not part of the scripting language and simply ignores it.
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try adding a comment above each statement to let your friends know what part of your model is created with each statement.</td>
</tr>
</table>
<table class="wikitable mw-collapsible mw-collapsed" style="border: 2px solid MediumSeaGreen;">
<caption style="text-align: left; color: MediumSeaGreen;">Solution Code</caption>
<tr>
<td>
''completed_car_commented.scad''
<pre>
$fa = 1;
$fs = 0.4;
// Car body base
cube([60,20,10],center=true);
// Car body top
translate([5,0,10 - 0.001])
cube([30,20,10],center=true);
// Front left wheel
translate([-20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Front right wheel
translate([-20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Rear left wheel
translate([20,-15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Rear right wheel
translate([20,15,0])
rotate([90,0,0])
cylinder(h=3,r=8,center=true);
// Front axle
translate([-20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);
// Rear axle
translate([20,0,0])
rotate([90,0,0])
cylinder(h=30,r=2,center=true);</pre>
</td>
</tr>
</table>
It’s time to save your model. Hit the save (third) icon on the action bar above the editor to save your script as a *.scad file. When you are creating a new model remember to save early, then save often, to avoid accidentally losing your work.
If you would like to 3D print your car you can export it as an STL file. First click on the render (second) icon on the action bar below the viewport to generate the STL file, then click on the export as STL icon on the action bar above the editor, to save an STL file of your model.
== Creating a second model ==
<table class="wikitable" style="border: 2px solid DodgerBlue;">
<caption style="text-align: left; color: DodgerBlue;">Exercise</caption>
<tr>
<td>Try using everything you learned to create a new simple model. It can be a house, an airplane or anything you like. Don’t worry about making your model look perfect, just experiment with your new skills! You will keep learning more techniques to create awesome models in the following chapters.</td>
</tr>
</table>
{{BookCat}}
4ecrilduzfsruvf8d6t3lfcndynbajx
Mirad Grammar/Interjections
0
417652
4641561
4637785
2026-06-28T17:52:55Z
Tyoyafud
6233
/* H interjections */
4641561
wikitext
text/x-wiki
<noinclude>{{status|100%}}</noinclude>
== Assertive Interjections ==
[[File:Exclamation mark 2.svg|thumb|]]
: Interjections in Mirad include the assertive expressions ''yes'', ''no'' and ''maybe'':
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Common Assertive Interjections
|-
| '''Va!''' || ''Yes!''
|-
| '''Ve!''' || ''Maybe!, Perhaps!''
|-
| '''Vo!'''* || ''No!''
|}
: <small>* Not to be confused with '''voy''', which translates the English adverb '''not''', as in '''Vo, wit <u>voy</u> se tadxwa.'''....''No, he is <u>not</u> married.''</small>
: Examples:
::* '''<u>Va</u>. At se otadxwa.'''....''<u>Yes</u>. I am unmarried.''
::* '''<u>Va</u>. At se vay otadxwa.'''....''<u>Yes</u>. I am indeed/really unmarried.''
::* '''<u>Va</u>, vay.'''....''<u>Yes</u>, indeed.''
::* '''<u>Va</u> ay vo. Hus vey se vyaa.'''....''<u>Yes</u> and no. That may be true.''
::* '''<u>Va</u> ey vo?'''....''<u>Yes</u> or no?''
::* '''<u>Ve</u>. At te voy valay.'''....''<u>Maybe</u>. I don't know for sure.''
::* '''<u>Vo</u>. At voy vatexe et.'''....''<u>No</u>. I don't believe you.''
::* '''<u>Vo</u>! Dilwe von xu hus.'''....''<u>No</u>! Please don't do that.''
::* '''Et se Amerikama, <u>vao</u>?'''....''You're American, <u>yes or no</u>?''
::* '''Ven <u>va</u>, (van et) xu has.'''....''If <u>so</u>, (let you) do it.''
::* '''Ven <u>vo</u>, von (et) xu has.'''....''If <u>not</u>, don't (you) do it.''
: There are also some hybrid combinations of the above assertive expressions:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Hybrid Interjections
|-
| '''Vao?''' || ''Yes or no?''
|-
| '''Vea!''' || ''Maybe so!''
|-
| '''Veo!'''* || ''Maybe not!''
|}
== H interjections ==
: There is a group of common interjections or exclamations called the '''''H interjections''''', because they all begin with the letter '''h'''. By adding the verbal ending '''-der''', we get corresponding verbs:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Greetings
|-
!row=1| Initial Greeting
| '''hay!'''....''Hello!, Hi!''||'''hayder'''....''to greet''
|-
!row=1| Vocative (calling)
| '''hey!'''....''Hey there!, O!, Oh!''||'''heyder'''....''to address''
|-
!row=1| Terminal Greeting
| '''hoy!'''....''Goodbye!, Bye!, so long!, farewell!''||'''hoyder'''....''to say goodbye''
|-
!row=1| Proximal Specifier
| '''hiy!'''....''Voici!, Here's..., ecce''||
|-
!row=1| Distal Specifier
| '''huy!'''....''Voila!, There's...''||
|-
!row=1| Positive Exclamation
| '''hyay!'''....''Great! Wow!, Bravo!, Woopee!, Hurrah!, Congrats!''||'''hyayder'''....''to congratulate''
|-
!row=1| Surprise Exclamation
| '''hyey!'''....''What a...!, Oh!, Well!''||
|-
!row=1| Negative Exclamation
| '''hyoy!'''....''What a pity!, It's a shame!, Woe is...!, Darn it!, Yikes!, Boo!''||'''hyoyder'''....''to boo, to heckle''
|-
!row=1| Expression of Thanks
| '''hway!<sup>1</sup>'''....''Thanks!''||'''hwayder'''....''to thank''
|-
!row=1| Expression of Welcome
| '''hwey!'''.... ''You're welcome!'', ''Please''||'''hweyder'''....''to wish luck''
|-
!row=1| Expression of Sorrow
| '''hwoy!'''....''Sorry!'', ''Excuse me!''||'''hwoyder'''....''to apologize''
|-
!row=1| Expression of Joy
| '''hwiy!'''....''Whee!'', ''O la la!''||'''hwiyder'''....''to express joy''<br>'''hwiyxer'''....''to have fun''
|-
!row=1| Expression of Pain
| '''hwuy!'''....''Ouch!'', ''Ow!'', ''That hurts!, Oy''||'''hwuyder'''....''to express pain, to moan''
|-
!row=1| Laughter
| '''hihi!'''....''Ha ha!'', ''Hee hee!''||'''hihider'''....''to laugh''
|-
!row=1| Lamentation
| '''huhu!'''....''Boo hoo!'', ''Woe is me!'', ''Oy veh!''||'''huhuder'''....''to cry''
|-
!row=1| Admiration
| '''hwaw!<sup>2</sup>'''....''Wow!'', ''What a show!, Super!''||'''hwawder'''....''to praise''
|-
!row=1| Disgust
| '''hwow!'''<sup>3</sup>....''Yuck!'', ''Eeoow!'', ''Gross!''||'''hwowder'''....''to express disgust''
|}
: <sup>1</sup><small>Pronounced like English ''why''. Mirad '''hw''' is pronounced like English '''wh'''.</small>
: <sup>2</sup><small>Pronounced like English ''wh+aw''.</small>
: <sup>3</sup><small>Pronounced like English ''wh+oh''.</small>
=== Examples of H Interjections ===
::* '''<u>Hay</u>! Ata dyun se Johan.'''....''<u>Hi</u>! My name is John.''
::* '''<u>Hey</u>, Johan! Duhoyen et xeye?'''....''<u>Hey</u>, John, how are you doing?''
::* '''<u>Hey</u>, Tot!'''....''<u>O</u>, God!''
::* '''<u>Hoy</u>. At teato et zajub.'''....''<u>Bye</u>. I will see you tomorrow.''
::* '''<u>Hiy</u> ha dyen ho et dila.'''....''<u>Here's</u> the book you requested.''
::* '''<u>Hiy</u> Tob.'''....''<u>Behold</u> Man. (<u>Ecce</u> Homo).''
::* '''<u>Hiy</u> ata dyundraf.'''....''<u>Here's</u> my caling card.''
::* '''<u>Huy</u>! Se xwa.'''....''<u>Voilà</u>! It's done.''
::* '''<u>Huy</u> hos at yaka.'''....''<u>There's</u> what I expected.''
::* '''<u>Hyay</u> et!'''....''Good for you!''
::* '''<u>Hyay</u>! Et utnaze his.'''.....''<u>Bravo</u>! You deserve this.''
::* '''<u>Hway</u>! Et sa gla fitipa.'''.....''<u>Thanks.</u>! You were very kind.''
::* '''At fu <u>hwayder</u> et.'''....''I'd like to <u>congratulate</u> you.''
::* '''<u>Hwey</u>!'''....''<u>You're welcome</u>!''
::* '''Et efe <u>hwoyder</u> at.'''....''You need to <u>apologize</u> to me.''
::* '''Fi. <u>Hwoy</u>.'''....''Ok. <u>I'm sorry</u>.''
::* '''<u>Hyey</u> via imaj!''' ....''<u>Oh, what a</u> beautiful morning!''
::* '''<u>Hyey</u> At ta voy van et upo.'''....''<u>Oh!</u> I didn't know you were coming.''
::* '''<u>Hyoy</u> at.'''....''<u>Woe</u> is me.''
::* '''<u>Hyoy</u>! Ga fia fikyen jonay.'''....''<u>Pity!</u>. Better luck next time.''
::* '''<u>Hwoy.</u> At yefe hyoder et.'''....''<u>Sorry</u>. I must take leave of you.''
::* '''<u>Hihi!</u> Hus sa gla diza.'''....''<u>Ha ha</u>! That was very funny.''
::* '''Von <u>hihidu</u>.'''....''Don't <u>laugh</u>.''
::* '''<u>Huhu!</u>.'''....''<u>Oy!</u>''
::* '''Ha tudet voy poxo <u>huhuder</u>.'''....''The baby won't stop <u>crying</u>.''
=== Expletives ===
: Vulgar expletives are not offered here, but may arise naturally in daily speech.
=== Ways to Say Please ===
: The English expression ''Please'' can be expressed in various ways:
::* '''<u>Hwey</u>! Yepu.'''....''<u>Please</u>! Come in.'' ('''Hwey''' can also mean ''you're welcome'' in answer to ''thank-you''.
::* '''<u>Diwe</u> von et tyopu ab ha vab.'''....''Please (= <u>it is requested lest you</u>) don't walk on the grass.''
::* '''<u>Diwe van et</u> yanupu yat.'''....''Please (= <u>it is asked that you</u>) join us.''
::* '''<u>Diwe</u>!'''....''<u>Please</u>!''
::* '''<u>Xu (at) (ha) fis bi</u> yubeler at hua tyoyafi.'''....''Please (= <u>do (me) (the) favor of</u>) bring me those shoes.''
: A stronger form of ''please'' is '''dilwe'''....''it is requested''.
=== Verb Forms of Exclamations ===
: Many of the interjections in this section can be made into exclamatory verbs with the addition of '''-der''' (''to utter''), eg.:
::* '''hayder'''....''greet, say hi''
::* '''heyder'''....''address, call out to, wave down''
::* '''hoyder'''....''say goodbye to''
::* '''hyayder'''....''congratulate''
::* '''hwayder'''....''thank''
::* '''hwoyder'''....''apologize, excuse oneself, say you're sorry''
::* '''hihider'''....''laugh''
::* '''huhuder'''....''boo, cry''
::* '''huhider'''....''to mock, to tease, to satirize''
: Some can be made into other types of verbs, eg.:
::* '''hwiyxer'''....''to have fun''
::* '''huhiduder'''....''to quip''
::* '''huhifuder'''....''to sneer at, to scorn''
: Some examples using the above verbs:
::* '''Be Eniged, yat <u>hayde</u> hyuti bay "Hi!".'''....''In English, we <u>greet</u> others with "Hi!".''
::* '''<u>Heydu</u> at bay ha dyun Pedro.'''....''<u>Address</u> me with the name Pedro.''
::* '''Yat ifu <u>hyayder</u> yet av yeta ujak.'''....''We would like to <u>congratulate</u> you on your success.''
::* '''<u>Hyadwu</u> av eta bun.'''....''Thank-you (=<u>Be thanked</u>) for your gift.''
::* '''Hia vyok voy se <u>hihidyefwa</u>.'''....''This mistake is not something to be laughed at (=<u>laugh-worthy</u>).''
::* '''Von <u>huhudu</u> ayv ilokwa bil.'''....''Don't <u>cry</u> over spilt milk.''
<noinclude>{{Chapter navigation with TOC|Conjunctions|Hybrids|TOC mini}}</noinclude>
bf14yssze38mfkuj9ke67ugg31e0sgt
4641562
4641561
2026-06-28T17:57:23Z
Tyoyafud
6233
/* Verb Forms of Exclamations */
4641562
wikitext
text/x-wiki
<noinclude>{{status|100%}}</noinclude>
== Assertive Interjections ==
[[File:Exclamation mark 2.svg|thumb|]]
: Interjections in Mirad include the assertive expressions ''yes'', ''no'' and ''maybe'':
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Common Assertive Interjections
|-
| '''Va!''' || ''Yes!''
|-
| '''Ve!''' || ''Maybe!, Perhaps!''
|-
| '''Vo!'''* || ''No!''
|}
: <small>* Not to be confused with '''voy''', which translates the English adverb '''not''', as in '''Vo, wit <u>voy</u> se tadxwa.'''....''No, he is <u>not</u> married.''</small>
: Examples:
::* '''<u>Va</u>. At se otadxwa.'''....''<u>Yes</u>. I am unmarried.''
::* '''<u>Va</u>. At se vay otadxwa.'''....''<u>Yes</u>. I am indeed/really unmarried.''
::* '''<u>Va</u>, vay.'''....''<u>Yes</u>, indeed.''
::* '''<u>Va</u> ay vo. Hus vey se vyaa.'''....''<u>Yes</u> and no. That may be true.''
::* '''<u>Va</u> ey vo?'''....''<u>Yes</u> or no?''
::* '''<u>Ve</u>. At te voy valay.'''....''<u>Maybe</u>. I don't know for sure.''
::* '''<u>Vo</u>. At voy vatexe et.'''....''<u>No</u>. I don't believe you.''
::* '''<u>Vo</u>! Dilwe von xu hus.'''....''<u>No</u>! Please don't do that.''
::* '''Et se Amerikama, <u>vao</u>?'''....''You're American, <u>yes or no</u>?''
::* '''Ven <u>va</u>, (van et) xu has.'''....''If <u>so</u>, (let you) do it.''
::* '''Ven <u>vo</u>, von (et) xu has.'''....''If <u>not</u>, don't (you) do it.''
: There are also some hybrid combinations of the above assertive expressions:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Hybrid Interjections
|-
| '''Vao?''' || ''Yes or no?''
|-
| '''Vea!''' || ''Maybe so!''
|-
| '''Veo!'''* || ''Maybe not!''
|}
== H interjections ==
: There is a group of common interjections or exclamations called the '''''H interjections''''', because they all begin with the letter '''h'''. By adding the verbal ending '''-der''', we get corresponding verbs:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Greetings
|-
!row=1| Initial Greeting
| '''hay!'''....''Hello!, Hi!''||'''hayder'''....''to greet''
|-
!row=1| Vocative (calling)
| '''hey!'''....''Hey there!, O!, Oh!''||'''heyder'''....''to address''
|-
!row=1| Terminal Greeting
| '''hoy!'''....''Goodbye!, Bye!, so long!, farewell!''||'''hoyder'''....''to say goodbye''
|-
!row=1| Proximal Specifier
| '''hiy!'''....''Voici!, Here's..., ecce''||
|-
!row=1| Distal Specifier
| '''huy!'''....''Voila!, There's...''||
|-
!row=1| Positive Exclamation
| '''hyay!'''....''Great! Wow!, Bravo!, Woopee!, Hurrah!, Congrats!''||'''hyayder'''....''to congratulate''
|-
!row=1| Surprise Exclamation
| '''hyey!'''....''What a...!, Oh!, Well!''||
|-
!row=1| Negative Exclamation
| '''hyoy!'''....''What a pity!, It's a shame!, Woe is...!, Darn it!, Yikes!, Boo!''||'''hyoyder'''....''to boo, to heckle''
|-
!row=1| Expression of Thanks
| '''hway!<sup>1</sup>'''....''Thanks!''||'''hwayder'''....''to thank''
|-
!row=1| Expression of Welcome
| '''hwey!'''.... ''You're welcome!'', ''Please''||'''hweyder'''....''to wish luck''
|-
!row=1| Expression of Sorrow
| '''hwoy!'''....''Sorry!'', ''Excuse me!''||'''hwoyder'''....''to apologize''
|-
!row=1| Expression of Joy
| '''hwiy!'''....''Whee!'', ''O la la!''||'''hwiyder'''....''to express joy''<br>'''hwiyxer'''....''to have fun''
|-
!row=1| Expression of Pain
| '''hwuy!'''....''Ouch!'', ''Ow!'', ''That hurts!, Oy''||'''hwuyder'''....''to express pain, to moan''
|-
!row=1| Laughter
| '''hihi!'''....''Ha ha!'', ''Hee hee!''||'''hihider'''....''to laugh''
|-
!row=1| Lamentation
| '''huhu!'''....''Boo hoo!'', ''Woe is me!'', ''Oy veh!''||'''huhuder'''....''to cry''
|-
!row=1| Admiration
| '''hwaw!<sup>2</sup>'''....''Wow!'', ''What a show!, Super!''||'''hwawder'''....''to praise''
|-
!row=1| Disgust
| '''hwow!'''<sup>3</sup>....''Yuck!'', ''Eeoow!'', ''Gross!''||'''hwowder'''....''to express disgust''
|}
: <sup>1</sup><small>Pronounced like English ''why''. Mirad '''hw''' is pronounced like English '''wh'''.</small>
: <sup>2</sup><small>Pronounced like English ''wh+aw''.</small>
: <sup>3</sup><small>Pronounced like English ''wh+oh''.</small>
=== Examples of H Interjections ===
::* '''<u>Hay</u>! Ata dyun se Johan.'''....''<u>Hi</u>! My name is John.''
::* '''<u>Hey</u>, Johan! Duhoyen et xeye?'''....''<u>Hey</u>, John, how are you doing?''
::* '''<u>Hey</u>, Tot!'''....''<u>O</u>, God!''
::* '''<u>Hoy</u>. At teato et zajub.'''....''<u>Bye</u>. I will see you tomorrow.''
::* '''<u>Hiy</u> ha dyen ho et dila.'''....''<u>Here's</u> the book you requested.''
::* '''<u>Hiy</u> Tob.'''....''<u>Behold</u> Man. (<u>Ecce</u> Homo).''
::* '''<u>Hiy</u> ata dyundraf.'''....''<u>Here's</u> my caling card.''
::* '''<u>Huy</u>! Se xwa.'''....''<u>Voilà</u>! It's done.''
::* '''<u>Huy</u> hos at yaka.'''....''<u>There's</u> what I expected.''
::* '''<u>Hyay</u> et!'''....''Good for you!''
::* '''<u>Hyay</u>! Et utnaze his.'''.....''<u>Bravo</u>! You deserve this.''
::* '''<u>Hway</u>! Et sa gla fitipa.'''.....''<u>Thanks.</u>! You were very kind.''
::* '''At fu <u>hwayder</u> et.'''....''I'd like to <u>congratulate</u> you.''
::* '''<u>Hwey</u>!'''....''<u>You're welcome</u>!''
::* '''Et efe <u>hwoyder</u> at.'''....''You need to <u>apologize</u> to me.''
::* '''Fi. <u>Hwoy</u>.'''....''Ok. <u>I'm sorry</u>.''
::* '''<u>Hyey</u> via imaj!''' ....''<u>Oh, what a</u> beautiful morning!''
::* '''<u>Hyey</u> At ta voy van et upo.'''....''<u>Oh!</u> I didn't know you were coming.''
::* '''<u>Hyoy</u> at.'''....''<u>Woe</u> is me.''
::* '''<u>Hyoy</u>! Ga fia fikyen jonay.'''....''<u>Pity!</u>. Better luck next time.''
::* '''<u>Hwoy.</u> At yefe hyoder et.'''....''<u>Sorry</u>. I must take leave of you.''
::* '''<u>Hihi!</u> Hus sa gla diza.'''....''<u>Ha ha</u>! That was very funny.''
::* '''Von <u>hihidu</u>.'''....''Don't <u>laugh</u>.''
::* '''<u>Huhu!</u>.'''....''<u>Oy!</u>''
::* '''Ha tudet voy poxo <u>huhuder</u>.'''....''The baby won't stop <u>crying</u>.''
=== Expletives ===
: Vulgar expletives are not offered here, but may arise naturally in daily speech.
=== Ways to Say Please ===
: The English expression ''Please'' can be expressed in various ways:
::* '''<u>Hwey</u>! Yepu.'''....''<u>Please</u>! Come in.'' ('''Hwey''' can also mean ''you're welcome'' in answer to ''thank-you''.
::* '''<u>Diwe</u> von et tyopu ab ha vab.'''....''Please (= <u>it is requested lest you</u>) don't walk on the grass.''
::* '''<u>Diwe van et</u> yanupu yat.'''....''Please (= <u>it is asked that you</u>) join us.''
::* '''<u>Diwe</u>!'''....''<u>Please</u>!''
::* '''<u>Xu (at) (ha) fis bi</u> yubeler at hua tyoyafi.'''....''Please (= <u>do (me) (the) favor of</u>) bring me those shoes.''
: A stronger form of ''please'' is '''dilwe'''....''it is requested''.
=== Verb Forms of Exclamations ===
: Many of the interjections in this section can be made into exclamatory verbs with the addition of '''-der''' (''to utter''), eg.:
::* '''hayder'''....''greet, say hi''
::* '''heyder'''....''address, call out to, wave down''
::* '''hoyder'''....''say goodbye to''
::* '''hyayder'''....''congratulate''
::* '''hwayder'''....''thank''
::* '''hwoyder'''....''apologize, excuse oneself, say you're sorry''
::* '''hihider'''....''laugh''
::* '''huhuder'''....''boo, cry''
::* '''huhider'''....''to mock, to tease, to satirize''
: Some can be made into other types of verbs, eg.:
::* '''hwiyxer'''....''to have fun''
::* '''huhiduder'''....''to quip''
::* '''huhifuder'''....''to sneer at, to scorn''
: Some examples using the above verbs:
::* '''Be Eniged, yat <u>hayde</u> hyuti bay "Hi!".'''....''In English, we <u>greet</u> others with "Hi!".''
::* '''<u>Heydu</u> at bay ha dyun Pedro.'''....''<u>Address</u> me with the name Pedro.''
::* '''Yat ifu <u>hyayder</u> yet av yeta ujak.'''....''We would like to <u>congratulate</u> you on your success.''
::* '''<u>Hwaydwu</u> av eta bun.'''....''Thank-you (=<u>Be thanked</u>) for your gift.''
::* '''Hia vyok voy se <u>hihidyefwa</u>.'''....''This mistake is not something to be laughed at (=<u>laugh-worthy</u>).''
::* '''Von <u>huhudu</u> ayv ilokwa bil.'''....''Don't <u>cry</u> over spilt milk.''
<noinclude>{{Chapter navigation with TOC|Conjunctions|Hybrids|TOC mini}}</noinclude>
cooaw1qc33zrmx7gd0frlrfwp7k4eav
4641570
4641562
2026-06-28T18:44:24Z
Tyoyafud
6233
/* H interjections */
4641570
wikitext
text/x-wiki
<noinclude>{{status|100%}}</noinclude>
== Assertive Interjections ==
[[File:Exclamation mark 2.svg|thumb|]]
: Interjections in Mirad include the assertive expressions ''yes'', ''no'' and ''maybe'':
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Common Assertive Interjections
|-
| '''Va!''' || ''Yes!''
|-
| '''Ve!''' || ''Maybe!, Perhaps!''
|-
| '''Vo!'''* || ''No!''
|}
: <small>* Not to be confused with '''voy''', which translates the English adverb '''not''', as in '''Vo, wit <u>voy</u> se tadxwa.'''....''No, he is <u>not</u> married.''</small>
: Examples:
::* '''<u>Va</u>. At se otadxwa.'''....''<u>Yes</u>. I am unmarried.''
::* '''<u>Va</u>. At se vay otadxwa.'''....''<u>Yes</u>. I am indeed/really unmarried.''
::* '''<u>Va</u>, vay.'''....''<u>Yes</u>, indeed.''
::* '''<u>Va</u> ay vo. Hus vey se vyaa.'''....''<u>Yes</u> and no. That may be true.''
::* '''<u>Va</u> ey vo?'''....''<u>Yes</u> or no?''
::* '''<u>Ve</u>. At te voy valay.'''....''<u>Maybe</u>. I don't know for sure.''
::* '''<u>Vo</u>. At voy vatexe et.'''....''<u>No</u>. I don't believe you.''
::* '''<u>Vo</u>! Dilwe von xu hus.'''....''<u>No</u>! Please don't do that.''
::* '''Et se Amerikama, <u>vao</u>?'''....''You're American, <u>yes or no</u>?''
::* '''Ven <u>va</u>, (van et) xu has.'''....''If <u>so</u>, (let you) do it.''
::* '''Ven <u>vo</u>, von (et) xu has.'''....''If <u>not</u>, don't (you) do it.''
: There are also some hybrid combinations of the above assertive expressions:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Hybrid Interjections
|-
| '''Vao?''' || ''Yes or no?''
|-
| '''Vea!''' || ''Maybe so!''
|-
| '''Veo!'''* || ''Maybe not!''
|}
== H interjections ==
: There is a group of common interjections or exclamations called the '''''H interjections''''', because they all begin with the letter '''h'''. By adding the verbal ending '''-der''', we get corresponding verbs:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Greetings
|-
!row=1| Initial Greeting
| '''hay!'''....''Hello!, Hi!''||'''hayder'''....''to greet''
|-
!row=1| Vocative (calling)
| '''hey!'''....''Hey there!, O!, Oh!''||'''heyder'''....''to address''
|-
!row=1| Terminal Greeting
| '''hoy!'''....''Goodbye!, Bye!, so long!, farewell!''||'''hoyder'''....''to say goodbye''
|-
!row=1| Proximal Presentational
| '''hiy!'''....''Voici!, Here's..., ecce''||
|-
!row=1| Distal Presentational
| '''huy!'''....''Voila!, There's...''||
|-
!row=1| Positive Exclamation
| '''hyay!'''....''Great! Wow!, Bravo!, Woopee!, Hurrah!, Congrats!''||'''hyayder'''....''to congratulate''
|-
!row=1| Surprise Exclamation
| '''hyey!'''....''What a...!, Oh!, Well!''||
|-
!row=1| Negative Exclamation
| '''hyoy!'''....''What a pity!, It's a shame!, Woe is...!, Darn it!, Yikes!, Boo!''||'''hyoyder'''....''to boo, to heckle''
|-
!row=1| Expression of Thanks
| '''hway!<sup>1</sup>'''....''Thanks!'', ''Thank-you!'', ''Obliged!''||'''hwayder'''....''to thank''
|-
!row=1| Expression of Welcome
| '''hwey!'''.... ''You're welcome!'', ''Please''||'''hweyder'''....''to acknowledge''
|-
!row=1| Expression of Sorrow
| '''hwoy!'''....''Sorry!'', ''Excuse me!''||'''hwoyder'''....''to apologize''
|-
!row=1| Expression of Joy
| '''hwiy!'''....''Whee!'', ''yay!'', ''yippee''||'''hwiyder'''....''to express joy''<br>'''hwiyxer'''....''to have fun''
|-
!row=1| Expression of Pain
| '''hwuy!'''....''Ouch!'', ''Ow!'', ''Argh!, Oy''||'''hwuyder'''....''to express pain, to moan''
|-
!row=1| Laughter
| '''hihi!'''....''Ha ha!'', ''Hee hee!''||'''hihider'''....''to laugh''
|-
!row=1| Lamentation
| '''huhu!'''....''Boo hoo!'', ''Woe is me!'', ''Oy veh!'', ''Alas!'', ''Oh dear!''||'''huhuder'''....''to cry''
|-
!row=1| Admiration
| '''hwaw!<sup>2</sup>'''....''Wow!'', ''What a show!, Super!''||'''hwawder'''....''to praise''
|-
!row=1| Disgust
| '''hwow!'''<sup>3</sup>....''Yuck!'', ''Ew!'', ''ugh!''||'''hwowder'''....''to express disgust''
|}
: <sup>1</sup><small>Pronounced like English ''why''. Mirad '''hw''' is pronounced like English '''wh'''.</small>
: <sup>2</sup><small>Pronounced like English ''wh+aw''.</small>
: <sup>3</sup><small>Pronounced like English ''wh+oh''.</small>
=== Examples of H Interjections ===
::* '''<u>Hay</u>! Ata dyun se Johan.'''....''<u>Hi</u>! My name is John.''
::* '''<u>Hey</u>, Johan! Duhoyen et xeye?'''....''<u>Hey</u>, John, how are you doing?''
::* '''<u>Hey</u>, Tot!'''....''<u>O</u>, God!''
::* '''<u>Hoy</u>. At teato et zajub.'''....''<u>Bye</u>. I will see you tomorrow.''
::* '''<u>Hiy</u> ha dyen ho et dila.'''....''<u>Here's</u> the book you requested.''
::* '''<u>Hiy</u> Tob.'''....''<u>Behold</u> Man. (<u>Ecce</u> Homo).''
::* '''<u>Hiy</u> ata dyundraf.'''....''<u>Here's</u> my caling card.''
::* '''<u>Huy</u>! Se xwa.'''....''<u>Voilà</u>! It's done.''
::* '''<u>Huy</u> hos at yaka.'''....''<u>There's</u> what I expected.''
::* '''<u>Hyay</u> et!'''....''Good for you!''
::* '''<u>Hyay</u>! Et utnaze his.'''.....''<u>Bravo</u>! You deserve this.''
::* '''<u>Hway</u>! Et sa gla fitipa.'''.....''<u>Thanks.</u>! You were very kind.''
::* '''At fu <u>hwayder</u> et.'''....''I'd like to <u>congratulate</u> you.''
::* '''<u>Hwey</u>!'''....''<u>You're welcome</u>!''
::* '''Et efe <u>hwoyder</u> at.'''....''You need to <u>apologize</u> to me.''
::* '''Fi. <u>Hwoy</u>.'''....''Ok. <u>I'm sorry</u>.''
::* '''<u>Hyey</u> via imaj!''' ....''<u>Oh, what a</u> beautiful morning!''
::* '''<u>Hyey</u> At ta voy van et upo.'''....''<u>Oh!</u> I didn't know you were coming.''
::* '''<u>Hyoy</u> at.'''....''<u>Woe</u> is me.''
::* '''<u>Hyoy</u>! Ga fia fikyen jonay.'''....''<u>Pity!</u>. Better luck next time.''
::* '''<u>Hwoy.</u> At yefe hyoder et.'''....''<u>Sorry</u>. I must take leave of you.''
::* '''<u>Hihi!</u> Hus sa gla diza.'''....''<u>Ha ha</u>! That was very funny.''
::* '''Von <u>hihidu</u>.'''....''Don't <u>laugh</u>.''
::* '''<u>Huhu!</u>.'''....''<u>Oy!</u>''
::* '''Ha tudet voy poxo <u>huhuder</u>.'''....''The baby won't stop <u>crying</u>.''
=== Expletives ===
: Vulgar expletives are not offered here, but may arise naturally in daily speech.
=== Ways to Say Please ===
: The English expression ''Please'' can be expressed in various ways:
::* '''<u>Hwey</u>! Yepu.'''....''<u>Please</u>! Come in.'' ('''Hwey''' can also mean ''you're welcome'' in answer to ''thank-you''.
::* '''<u>Diwe</u> von et tyopu ab ha vab.'''....''Please (= <u>it is requested lest you</u>) don't walk on the grass.''
::* '''<u>Diwe van et</u> yanupu yat.'''....''Please (= <u>it is asked that you</u>) join us.''
::* '''<u>Diwe</u>!'''....''<u>Please</u>!''
::* '''<u>Xu (at) (ha) fis bi</u> yubeler at hua tyoyafi.'''....''Please (= <u>do (me) (the) favor of</u>) bring me those shoes.''
: A stronger form of ''please'' is '''dilwe'''....''it is requested''.
=== Verb Forms of Exclamations ===
: Many of the interjections in this section can be made into exclamatory verbs with the addition of '''-der''' (''to utter''), eg.:
::* '''hayder'''....''greet, say hi''
::* '''heyder'''....''address, call out to, wave down''
::* '''hoyder'''....''say goodbye to''
::* '''hyayder'''....''congratulate''
::* '''hwayder'''....''thank''
::* '''hwoyder'''....''apologize, excuse oneself, say you're sorry''
::* '''hihider'''....''laugh''
::* '''huhuder'''....''boo, cry''
::* '''huhider'''....''to mock, to tease, to satirize''
: Some can be made into other types of verbs, eg.:
::* '''hwiyxer'''....''to have fun''
::* '''huhiduder'''....''to quip''
::* '''huhifuder'''....''to sneer at, to scorn''
: Some examples using the above verbs:
::* '''Be Eniged, yat <u>hayde</u> hyuti bay "Hi!".'''....''In English, we <u>greet</u> others with "Hi!".''
::* '''<u>Heydu</u> at bay ha dyun Pedro.'''....''<u>Address</u> me with the name Pedro.''
::* '''Yat ifu <u>hyayder</u> yet av yeta ujak.'''....''We would like to <u>congratulate</u> you on your success.''
::* '''<u>Hwaydwu</u> av eta bun.'''....''Thank-you (=<u>Be thanked</u>) for your gift.''
::* '''Hia vyok voy se <u>hihidyefwa</u>.'''....''This mistake is not something to be laughed at (=<u>laugh-worthy</u>).''
::* '''Von <u>huhudu</u> ayv ilokwa bil.'''....''Don't <u>cry</u> over spilt milk.''
<noinclude>{{Chapter navigation with TOC|Conjunctions|Hybrids|TOC mini}}</noinclude>
qrs46de2fs40kf5rggz65z04dpw8x4m
4641571
4641570
2026-06-28T18:45:43Z
Tyoyafud
6233
/* H interjections */
4641571
wikitext
text/x-wiki
<noinclude>{{status|100%}}</noinclude>
== Assertive Interjections ==
[[File:Exclamation mark 2.svg|thumb|]]
: Interjections in Mirad include the assertive expressions ''yes'', ''no'' and ''maybe'':
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Common Assertive Interjections
|-
| '''Va!''' || ''Yes!''
|-
| '''Ve!''' || ''Maybe!, Perhaps!''
|-
| '''Vo!'''* || ''No!''
|}
: <small>* Not to be confused with '''voy''', which translates the English adverb '''not''', as in '''Vo, wit <u>voy</u> se tadxwa.'''....''No, he is <u>not</u> married.''</small>
: Examples:
::* '''<u>Va</u>. At se otadxwa.'''....''<u>Yes</u>. I am unmarried.''
::* '''<u>Va</u>. At se vay otadxwa.'''....''<u>Yes</u>. I am indeed/really unmarried.''
::* '''<u>Va</u>, vay.'''....''<u>Yes</u>, indeed.''
::* '''<u>Va</u> ay vo. Hus vey se vyaa.'''....''<u>Yes</u> and no. That may be true.''
::* '''<u>Va</u> ey vo?'''....''<u>Yes</u> or no?''
::* '''<u>Ve</u>. At te voy valay.'''....''<u>Maybe</u>. I don't know for sure.''
::* '''<u>Vo</u>. At voy vatexe et.'''....''<u>No</u>. I don't believe you.''
::* '''<u>Vo</u>! Dilwe von xu hus.'''....''<u>No</u>! Please don't do that.''
::* '''Et se Amerikama, <u>vao</u>?'''....''You're American, <u>yes or no</u>?''
::* '''Ven <u>va</u>, (van et) xu has.'''....''If <u>so</u>, (let you) do it.''
::* '''Ven <u>vo</u>, von (et) xu has.'''....''If <u>not</u>, don't (you) do it.''
: There are also some hybrid combinations of the above assertive expressions:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Hybrid Interjections
|-
| '''Vao?''' || ''Yes or no?''
|-
| '''Vea!''' || ''Maybe so!''
|-
| '''Veo!'''* || ''Maybe not!''
|}
== H interjections ==
: There is a group of common interjections or exclamations called the '''''H interjections''''', because they all begin with the letter '''h'''. By adding the verbal ending '''-der''', we get corresponding verbs:
:{| class="wikitable" style="background:lightyellow; font-size:smaller;"
|+ Greetings
|-
!row=1| Initial Greeting
| '''hay!'''....''Hello!, Hi!''||'''hayder'''....''to greet''
|-
!row=1| Vocative (calling)
| '''hey!'''....''Hey there!, O!, Oh!''||'''heyder'''....''to address''
|-
!row=1| Terminal Greeting
| '''hoy!'''....''Goodbye!, Bye!, so long!, farewell!''||'''hoyder'''....''to say goodbye''
|-
!row=1| Proximal Presentational
| '''hiy!'''....''Voici!, Here's..., ecce''||
|-
!row=1| Distal Presentational
| '''huy!'''....''Voila!, There's...''||
|-
!row=1| Positive Exclamation
| '''hyay!'''....''Great! Wow!, Bravo!, Woopee!, Hurrah!, Congrats!''||'''hyayder'''....''to congratulate''
|-
!row=1| Surprise Exclamation
| '''hyey!'''....''What a...!, Oh!, Well!''||
|-
!row=1| Negative Exclamation
| '''hyoy!'''....''What a pity!, It's a shame!, Woe is...!, Darn it!, Yikes!, Boo!''||'''hyoyder'''....''to boo, to heckle''
|-
!row=1| Expression of Thanks
| '''hway!<sup>1</sup>'''....''Thanks!'', ''Thank-you!'', ''Obliged!''||'''hwayder'''....''to thank''
|-
!row=1| Expression of Welcome
| '''hwey!'''.... ''You're welcome!'', ''Please''||'''hweyder'''....''to acknowledge''
|-
!row=1| Expression of Sorrow
| '''hwoy!'''....''Sorry!'', ''Excuse me!''||'''hwoyder'''....''to apologize''
|-
!row=1| Expression of Joy
| '''hwiy!'''....''Whee!'', ''yay!'', ''yippee''||'''hwiyder'''....''to express joy''
|-
!row=1| Expression of Pain
| '''hwuy!'''....''Ouch!'', ''Ow!'', ''Argh!, Oy''||'''hwuyder'''....''to express pain, to moan''
|-
!row=1| Laughter
| '''hihi!'''....''Ha ha!'', ''Hee hee!''||'''hihider'''....''to laugh''
|-
!row=1| Lamentation
| '''huhu!'''....''Boo hoo!'', ''Woe is me!'', ''Oy veh!'', ''Alas!'', ''Oh dear!''||'''huhuder'''....''to cry''
|-
!row=1| Admiration
| '''hwaw!<sup>2</sup>'''....''Wow!'', ''What a show!, Super!''||'''hwawder'''....''to praise''
|-
!row=1| Disgust
| '''hwow!'''<sup>3</sup>....''Yuck!'', ''Ew!'', ''ugh!''||'''hwowder'''....''to express disgust''
|}
: <sup>1</sup><small>Pronounced like English ''why''. Mirad '''hw''' is pronounced like English '''wh'''.</small>
: <sup>2</sup><small>Pronounced like English ''wh+aw''.</small>
: <sup>3</sup><small>Pronounced like English ''wh+oh''.</small>
=== Examples of H Interjections ===
::* '''<u>Hay</u>! Ata dyun se Johan.'''....''<u>Hi</u>! My name is John.''
::* '''<u>Hey</u>, Johan! Duhoyen et xeye?'''....''<u>Hey</u>, John, how are you doing?''
::* '''<u>Hey</u>, Tot!'''....''<u>O</u>, God!''
::* '''<u>Hoy</u>. At teato et zajub.'''....''<u>Bye</u>. I will see you tomorrow.''
::* '''<u>Hiy</u> ha dyen ho et dila.'''....''<u>Here's</u> the book you requested.''
::* '''<u>Hiy</u> Tob.'''....''<u>Behold</u> Man. (<u>Ecce</u> Homo).''
::* '''<u>Hiy</u> ata dyundraf.'''....''<u>Here's</u> my caling card.''
::* '''<u>Huy</u>! Se xwa.'''....''<u>Voilà</u>! It's done.''
::* '''<u>Huy</u> hos at yaka.'''....''<u>There's</u> what I expected.''
::* '''<u>Hyay</u> et!'''....''Good for you!''
::* '''<u>Hyay</u>! Et utnaze his.'''.....''<u>Bravo</u>! You deserve this.''
::* '''<u>Hway</u>! Et sa gla fitipa.'''.....''<u>Thanks.</u>! You were very kind.''
::* '''At fu <u>hwayder</u> et.'''....''I'd like to <u>congratulate</u> you.''
::* '''<u>Hwey</u>!'''....''<u>You're welcome</u>!''
::* '''Et efe <u>hwoyder</u> at.'''....''You need to <u>apologize</u> to me.''
::* '''Fi. <u>Hwoy</u>.'''....''Ok. <u>I'm sorry</u>.''
::* '''<u>Hyey</u> via imaj!''' ....''<u>Oh, what a</u> beautiful morning!''
::* '''<u>Hyey</u> At ta voy van et upo.'''....''<u>Oh!</u> I didn't know you were coming.''
::* '''<u>Hyoy</u> at.'''....''<u>Woe</u> is me.''
::* '''<u>Hyoy</u>! Ga fia fikyen jonay.'''....''<u>Pity!</u>. Better luck next time.''
::* '''<u>Hwoy.</u> At yefe hyoder et.'''....''<u>Sorry</u>. I must take leave of you.''
::* '''<u>Hihi!</u> Hus sa gla diza.'''....''<u>Ha ha</u>! That was very funny.''
::* '''Von <u>hihidu</u>.'''....''Don't <u>laugh</u>.''
::* '''<u>Huhu!</u>.'''....''<u>Oy!</u>''
::* '''Ha tudet voy poxo <u>huhuder</u>.'''....''The baby won't stop <u>crying</u>.''
=== Expletives ===
: Vulgar expletives are not offered here, but may arise naturally in daily speech.
=== Ways to Say Please ===
: The English expression ''Please'' can be expressed in various ways:
::* '''<u>Hwey</u>! Yepu.'''....''<u>Please</u>! Come in.'' ('''Hwey''' can also mean ''you're welcome'' in answer to ''thank-you''.
::* '''<u>Diwe</u> von et tyopu ab ha vab.'''....''Please (= <u>it is requested lest you</u>) don't walk on the grass.''
::* '''<u>Diwe van et</u> yanupu yat.'''....''Please (= <u>it is asked that you</u>) join us.''
::* '''<u>Diwe</u>!'''....''<u>Please</u>!''
::* '''<u>Xu (at) (ha) fis bi</u> yubeler at hua tyoyafi.'''....''Please (= <u>do (me) (the) favor of</u>) bring me those shoes.''
: A stronger form of ''please'' is '''dilwe'''....''it is requested''.
=== Verb Forms of Exclamations ===
: Many of the interjections in this section can be made into exclamatory verbs with the addition of '''-der''' (''to utter''), eg.:
::* '''hayder'''....''greet, say hi''
::* '''heyder'''....''address, call out to, wave down''
::* '''hoyder'''....''say goodbye to''
::* '''hyayder'''....''congratulate''
::* '''hwayder'''....''thank''
::* '''hwoyder'''....''apologize, excuse oneself, say you're sorry''
::* '''hihider'''....''laugh''
::* '''huhuder'''....''boo, cry''
::* '''huhider'''....''to mock, to tease, to satirize''
: Some can be made into other types of verbs, eg.:
::* '''hwiyxer'''....''to have fun''
::* '''huhiduder'''....''to quip''
::* '''huhifuder'''....''to sneer at, to scorn''
: Some examples using the above verbs:
::* '''Be Eniged, yat <u>hayde</u> hyuti bay "Hi!".'''....''In English, we <u>greet</u> others with "Hi!".''
::* '''<u>Heydu</u> at bay ha dyun Pedro.'''....''<u>Address</u> me with the name Pedro.''
::* '''Yat ifu <u>hyayder</u> yet av yeta ujak.'''....''We would like to <u>congratulate</u> you on your success.''
::* '''<u>Hwaydwu</u> av eta bun.'''....''Thank-you (=<u>Be thanked</u>) for your gift.''
::* '''Hia vyok voy se <u>hihidyefwa</u>.'''....''This mistake is not something to be laughed at (=<u>laugh-worthy</u>).''
::* '''Von <u>huhudu</u> ayv ilokwa bil.'''....''Don't <u>cry</u> over spilt milk.''
<noinclude>{{Chapter navigation with TOC|Conjunctions|Hybrids|TOC mini}}</noinclude>
kqczfs6kl0gsat9l6zhy44663t0yblk
The Linux Kernel/Human interfaces
0
421455
4641505
4640303
2026-06-28T14:10:32Z
Conan
3188
Human interfaces: seccomp, cred.c, LSM core security.c source references
4641505
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
:: {{The Linux Kernel/man|2|capset}} and capget – set/get capabilities of thread(s)
:: {{The Linux Kernel/man|3|libcap}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
: {{The Linux Kernel/source|kernel/capability.c}} – POSIX capabilities system calls
: {{The Linux Kernel/include|linux/seccomp.h}}, {{The Linux Kernel/source|kernel/seccomp.c}} – {{The Linux Kernel/doc|seccomp syscall filtering|userspace-api/seccomp_filter.html}}
📖 References
: {{w|File-system permissions}}
: {{The Linux Kernel/man|7|capabilities}}
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|add_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
luivqtfwobnnwuy0y1rif7uyrhqaxcc
4641527
4641505
2026-06-28T15:27:32Z
Conan
3188
Human interfaces: random.h header reference
4641527
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
:: {{The Linux Kernel/man|2|capset}} and capget – set/get capabilities of thread(s)
:: {{The Linux Kernel/man|3|libcap}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
: {{The Linux Kernel/source|kernel/capability.c}} – POSIX capabilities system calls
: {{The Linux Kernel/include|linux/seccomp.h}}, {{The Linux Kernel/source|kernel/seccomp.c}} – {{The Linux Kernel/doc|seccomp syscall filtering|userspace-api/seccomp_filter.html}}
📖 References
: {{w|File-system permissions}}
: {{The Linux Kernel/man|7|capabilities}}
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|add_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
bp6pml03nbmvf67na964g3w7n8mlt3f
4641540
4641527
2026-06-28T16:08:24Z
Conan
3188
Human interfaces: getrandom syscall
4641540
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
:: {{The Linux Kernel/man|2|capset}} and capget – set/get capabilities of thread(s)
:: {{The Linux Kernel/man|3|libcap}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
: {{The Linux Kernel/source|kernel/capability.c}} – POSIX capabilities system calls
: {{The Linux Kernel/include|linux/seccomp.h}}, {{The Linux Kernel/source|kernel/seccomp.c}} – {{The Linux Kernel/doc|seccomp syscall filtering|userspace-api/seccomp_filter.html}}
📖 References
: {{w|File-system permissions}}
: {{The Linux Kernel/man|7|capabilities}}
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|add_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
3kwcagpzdvtr2tpgplbz86ntf39ni3e
4641544
4641540
2026-06-28T16:08:31Z
Conan
3188
Human interfaces: keyctl, request_key syscalls, keys doc link, getrandom
4641544
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
:: {{The Linux Kernel/man|2|capset}} and capget – set/get capabilities of thread(s)
:: {{The Linux Kernel/man|3|libcap}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
: {{The Linux Kernel/source|kernel/capability.c}} – POSIX capabilities system calls
: {{The Linux Kernel/include|linux/seccomp.h}}, {{The Linux Kernel/source|kernel/seccomp.c}} – {{The Linux Kernel/doc|seccomp syscall filtering|userspace-api/seccomp_filter.html}}
📖 References
: {{w|File-system permissions}}
: {{The Linux Kernel/man|7|capabilities}}
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}}, {{The Linux Kernel/man|2|request_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}. {{The Linux Kernel/doc|Kernel Keys|security/keys}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
r8pt4ftnoupi9orut2lqcz4wuiu6t2b
4641612
4641544
2026-06-29T06:36:16Z
Conan
3188
capabilities subsection + stress-ng
4641612
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}}, {{The Linux Kernel/man|2|request_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}. {{The Linux Kernel/doc|Kernel Keys|security/keys}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
bwnt45ligks895gmb6un5nrutivp2jx
4641613
4641612
2026-06-29T06:36:17Z
Conan
3188
Seccomp + stress-ng
4641613
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}}, {{The Linux Kernel/man|2|request_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}. {{The Linux Kernel/doc|Kernel Keys|security/keys}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
==== Seccomp ====
{{w|Seccomp}} (Secure Computing) restricts which system calls a process can make.
Seccomp-BPF attaches a {{w|Berkeley Packet Filter|BPF}} program that inspects each syscall number and arguments, returning allow, kill, trap, or errno.
Used by {{w|runc}} (OCI container runtime), browsers (Chrome, Firefox), and systemd to reduce the kernel attack surface of sandboxed processes.
⚲ API:
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|prctl}} with {{The Linux Kernel/id|PR_SET_SECCOMP}}
: {{The Linux Kernel/include|linux/seccomp.h}}
: {{The Linux Kernel/include|uapi/linux/seccomp.h}} – {{The Linux Kernel/id|SECCOMP_MODE_FILTER}}, {{The Linux Kernel/id|SECCOMP_RET_ALLOW}}, {{The Linux Kernel/id|SECCOMP_RET_KILL}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/seccomp.c}}
: {{The Linux Kernel/id|seccomp_filter}} – container for seccomp BPF programs
📖 References:
: {{The Linux Kernel/doc|Seccomp BPF|userspace-api/seccomp_filter.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Secure stress-ng --seccomp]
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
87i86ejq9ge5acvdq0nm4qhxp0b8af5
4641623
4641613
2026-06-29T07:40:44Z
Conan
3188
swap Seccomp - Appendix
4641623
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
==== Seccomp ====
{{w|Seccomp}} (Secure Computing) restricts which system calls a process can make.
Seccomp-BPF attaches a {{w|Berkeley Packet Filter|BPF}} program that inspects each syscall number and arguments, returning allow, kill, trap, or errno.
Used by [https://github.com/opencontainers/runc runc] ({{w|Open Container Initiative|OCI}} container runtime), browsers (Chrome, Firefox), and systemd to reduce the kernel attack surface of sandboxed processes.
⚲ API:
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|prctl}} with {{The Linux Kernel/id|PR_SET_SECCOMP}}
: {{The Linux Kernel/include|linux/seccomp.h}}
: {{The Linux Kernel/include|uapi/linux/seccomp.h}} – {{The Linux Kernel/id|SECCOMP_MODE_FILTER}}, {{The Linux Kernel/id|SECCOMP_RET_ALLOW}}, {{The Linux Kernel/id|SECCOMP_RET_KILL}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/seccomp.c}}
: {{The Linux Kernel/id|seccomp_filter}} – container for seccomp BPF programs
📖 References:
: {{The Linux Kernel/doc|Seccomp BPF|userspace-api/seccomp_filter.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Secure stress-ng --seccomp]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}} ↪ {{The Linux Kernel/id|sys_keyctl}}, {{The Linux Kernel/man|2|request_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}. {{The Linux Kernel/doc|Kernel Keys|security/keys}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
gdsofupz1w3ffnkwywrszykzqboxm5w
4641624
4641623
2026-06-29T07:40:45Z
Conan
3188
File sealing
4641624
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
==== Seccomp ====
{{w|Seccomp}} (Secure Computing) restricts which system calls a process can make.
Seccomp-BPF attaches a {{w|Berkeley Packet Filter|BPF}} program that inspects each syscall number and arguments, returning allow, kill, trap, or errno.
Used by [https://github.com/opencontainers/runc runc] ({{w|Open Container Initiative|OCI}} container runtime), browsers (Chrome, Firefox), and systemd to reduce the kernel attack surface of sandboxed processes.
⚲ API:
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|prctl}} with {{The Linux Kernel/id|PR_SET_SECCOMP}}
: {{The Linux Kernel/include|linux/seccomp.h}}
: {{The Linux Kernel/include|uapi/linux/seccomp.h}} – {{The Linux Kernel/id|SECCOMP_MODE_FILTER}}, {{The Linux Kernel/id|SECCOMP_RET_ALLOW}}, {{The Linux Kernel/id|SECCOMP_RET_KILL}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/seccomp.c}}
: {{The Linux Kernel/id|seccomp_filter}} – container for seccomp BPF programs
📖 References:
: {{The Linux Kernel/doc|Seccomp BPF|userspace-api/seccomp_filter.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Secure stress-ng --seccomp]
==== File sealing ====
File sealing restricts operations on anonymous files created with {{The Linux Kernel/man|2|memfd_create}}.
Once sealed, a file cannot be modified in ways forbidden by its seals, providing integrity guarantees for shared memory.
Used by Wayland for safe buffer handoff, systemd for sealed service binaries, and kdbus for immutable message payloads.
⚲ API:
: {{The Linux Kernel/man|2|memfd_create}} – create anonymous sealable file
: {{The Linux Kernel/man|2|fcntl}} with {{The Linux Kernel/id|F_ADD_SEALS}}, {{The Linux Kernel/id|F_GET_SEALS}}
: {{The Linux Kernel/id|F_SEAL_SEAL}}, {{The Linux Kernel/id|F_SEAL_SHRINK}}, {{The Linux Kernel/id|F_SEAL_GROW}}, {{The Linux Kernel/id|F_SEAL_WRITE}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/memfd.c}}
: {{The Linux Kernel/man|2|fcntl}}({{The Linux Kernel/id|F_ADD_SEALS}}) ↪ {{The Linux Kernel/id|do_fcntl}} ↪ {{The Linux Kernel/id|memfd_fcntl}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#seal stress-ng --seal]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}} ↪ {{The Linux Kernel/id|sys_keyctl}}, {{The Linux Kernel/man|2|request_key}} ↪ {{The Linux Kernel/source|security/keys/keyctl.c}}. {{The Linux Kernel/doc|Kernel Keys|security/keys}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Seccomp BPF (SECure COMPuting with filters)|userspace-api/seccomp_filter.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/keys}} – key/keyring management
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|keys}}
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
h8ejyah40tax4x3sjykhi3kckup3d1b
4641625
4641624
2026-06-29T07:40:47Z
Conan
3188
Keyrings
4641625
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
==== Seccomp ====
{{w|Seccomp}} (Secure Computing) restricts which system calls a process can make.
Seccomp-BPF attaches a {{w|Berkeley Packet Filter|BPF}} program that inspects each syscall number and arguments, returning allow, kill, trap, or errno.
Used by [https://github.com/opencontainers/runc runc] ({{w|Open Container Initiative|OCI}} container runtime), browsers (Chrome, Firefox), and systemd to reduce the kernel attack surface of sandboxed processes.
⚲ API:
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|prctl}} with {{The Linux Kernel/id|PR_SET_SECCOMP}}
: {{The Linux Kernel/include|linux/seccomp.h}}
: {{The Linux Kernel/include|uapi/linux/seccomp.h}} – {{The Linux Kernel/id|SECCOMP_MODE_FILTER}}, {{The Linux Kernel/id|SECCOMP_RET_ALLOW}}, {{The Linux Kernel/id|SECCOMP_RET_KILL}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/seccomp.c}}
: {{The Linux Kernel/id|seccomp_filter}} – container for seccomp BPF programs
📖 References:
: {{The Linux Kernel/doc|Seccomp BPF|userspace-api/seccomp_filter.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Secure stress-ng --seccomp]
==== File sealing ====
File sealing restricts operations on anonymous files created with {{The Linux Kernel/man|2|memfd_create}}.
Once sealed, a file cannot be modified in ways forbidden by its seals, providing integrity guarantees for shared memory.
Used by Wayland for safe buffer handoff, systemd for sealed service binaries, and kdbus for immutable message payloads.
⚲ API:
: {{The Linux Kernel/man|2|memfd_create}} – create anonymous sealable file
: {{The Linux Kernel/man|2|fcntl}} with {{The Linux Kernel/id|F_ADD_SEALS}}, {{The Linux Kernel/id|F_GET_SEALS}}
: {{The Linux Kernel/id|F_SEAL_SEAL}}, {{The Linux Kernel/id|F_SEAL_SHRINK}}, {{The Linux Kernel/id|F_SEAL_GROW}}, {{The Linux Kernel/id|F_SEAL_WRITE}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/memfd.c}}
: {{The Linux Kernel/man|2|fcntl}}({{The Linux Kernel/id|F_ADD_SEALS}}) ↪ {{The Linux Kernel/id|do_fcntl}} ↪ {{The Linux Kernel/id|memfd_fcntl}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#seal stress-ng --seal]
==== Keyrings ====
The kernel keyring service manages cryptographic keys, authentication tokens, and other security data.
Keyrings are hierarchical and per-process, used by filesystems (fscrypt), networking (Kerberos, TLS), and module signature verification.
⚲ API:
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}} ↪ {{The Linux Kernel/id|sys_keyctl}}, {{The Linux Kernel/man|2|request_key}}
: {{The Linux Kernel/include|keys}}
⚙️ Internals:
: {{The Linux Kernel/source|security/keys}}
:: {{The Linux Kernel/source|security/keys/keyctl.c}}
📖 References:
: {{The Linux Kernel/doc|Kernel Keys|security/keys}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#key stress-ng --key]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
rlmojoq6skh7ojviej15wlzcwo58zty
4641626
4641625
2026-06-29T07:40:48Z
Conan
3188
stress-ng --apparmor
4641626
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
==== Seccomp ====
{{w|Seccomp}} (Secure Computing) restricts which system calls a process can make.
Seccomp-BPF attaches a {{w|Berkeley Packet Filter|BPF}} program that inspects each syscall number and arguments, returning allow, kill, trap, or errno.
Used by [https://github.com/opencontainers/runc runc] ({{w|Open Container Initiative|OCI}} container runtime), browsers (Chrome, Firefox), and systemd to reduce the kernel attack surface of sandboxed processes.
⚲ API:
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|prctl}} with {{The Linux Kernel/id|PR_SET_SECCOMP}}
: {{The Linux Kernel/include|linux/seccomp.h}}
: {{The Linux Kernel/include|uapi/linux/seccomp.h}} – {{The Linux Kernel/id|SECCOMP_MODE_FILTER}}, {{The Linux Kernel/id|SECCOMP_RET_ALLOW}}, {{The Linux Kernel/id|SECCOMP_RET_KILL}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/seccomp.c}}
: {{The Linux Kernel/id|seccomp_filter}} – container for seccomp BPF programs
📖 References:
: {{The Linux Kernel/doc|Seccomp BPF|userspace-api/seccomp_filter.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Secure stress-ng --seccomp]
==== File sealing ====
File sealing restricts operations on anonymous files created with {{The Linux Kernel/man|2|memfd_create}}.
Once sealed, a file cannot be modified in ways forbidden by its seals, providing integrity guarantees for shared memory.
Used by Wayland for safe buffer handoff, systemd for sealed service binaries, and kdbus for immutable message payloads.
⚲ API:
: {{The Linux Kernel/man|2|memfd_create}} – create anonymous sealable file
: {{The Linux Kernel/man|2|fcntl}} with {{The Linux Kernel/id|F_ADD_SEALS}}, {{The Linux Kernel/id|F_GET_SEALS}}
: {{The Linux Kernel/id|F_SEAL_SEAL}}, {{The Linux Kernel/id|F_SEAL_SHRINK}}, {{The Linux Kernel/id|F_SEAL_GROW}}, {{The Linux Kernel/id|F_SEAL_WRITE}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/memfd.c}}
: {{The Linux Kernel/man|2|fcntl}}({{The Linux Kernel/id|F_ADD_SEALS}}) ↪ {{The Linux Kernel/id|do_fcntl}} ↪ {{The Linux Kernel/id|memfd_fcntl}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#seal stress-ng --seal]
==== Keyrings ====
The kernel keyring service manages cryptographic keys, authentication tokens, and other security data.
Keyrings are hierarchical and per-process, used by filesystems (fscrypt), networking (Kerberos, TLS), and module signature verification.
⚲ API:
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}} ↪ {{The Linux Kernel/id|sys_keyctl}}, {{The Linux Kernel/man|2|request_key}}
: {{The Linux Kernel/include|keys}}
⚙️ Internals:
: {{The Linux Kernel/source|security/keys}}
:: {{The Linux Kernel/source|security/keys/keyctl.c}}
📖 References:
: {{The Linux Kernel/doc|Kernel Keys|security/keys}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#key stress-ng --key]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}} 🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#AppArmor stress-ng --apparmor]
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
cmoor2wum40r3ea0qrn97risyllyop1
4641630
4641626
2026-06-29T07:48:25Z
Conan
3188
seccomp, file sealing, keyrings subsections under Security subsystems
4641630
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== Security subsystems ===
==== Seccomp ====
{{w|Seccomp}} (Secure Computing) restricts which system calls a process can make.
Seccomp-BPF attaches a {{w|Berkeley Packet Filter|BPF}} program that inspects each syscall number and arguments, returning allow, kill, trap, or errno.
Used by [https://github.com/opencontainers/runc runc] ({{w|Open Container Initiative|OCI}} container runtime), browsers (Chrome, Firefox), and systemd to reduce the kernel attack surface of sandboxed processes.
⚲ API:
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|prctl}} with {{The Linux Kernel/id|PR_SET_SECCOMP}}
: {{The Linux Kernel/include|linux/seccomp.h}}
: {{The Linux Kernel/include|uapi/linux/seccomp.h}} – {{The Linux Kernel/id|SECCOMP_MODE_FILTER}}, {{The Linux Kernel/id|SECCOMP_RET_ALLOW}}, {{The Linux Kernel/id|SECCOMP_RET_KILL}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/seccomp.c}}
: {{The Linux Kernel/id|seccomp_filter}} – container for seccomp BPF programs
📖 References:
: {{The Linux Kernel/doc|Seccomp BPF|userspace-api/seccomp_filter.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Secure stress-ng --seccomp]
==== File sealing ====
File sealing restricts operations on anonymous files created with {{The Linux Kernel/man|2|memfd_create}}.
Once sealed, a file cannot be modified in ways forbidden by its seals, providing integrity guarantees for shared memory.
Used by Wayland for safe buffer handoff, systemd for sealed service binaries, and kdbus for immutable message payloads.
⚲ API:
: {{The Linux Kernel/man|2|memfd_create}} – create anonymous sealable file
: {{The Linux Kernel/man|2|fcntl}} with {{The Linux Kernel/id|F_ADD_SEALS}}, {{The Linux Kernel/id|F_GET_SEALS}}
: {{The Linux Kernel/id|F_SEAL_SEAL}}, {{The Linux Kernel/id|F_SEAL_SHRINK}}, {{The Linux Kernel/id|F_SEAL_GROW}}, {{The Linux Kernel/id|F_SEAL_WRITE}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/memfd.c}}
: {{The Linux Kernel/man|2|fcntl}}({{The Linux Kernel/id|F_ADD_SEALS}}) ↪ {{The Linux Kernel/id|do_fcntl}} ↪ {{The Linux Kernel/id|memfd_fcntl}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#seal stress-ng --seal]
==== Keyrings ====
The kernel keyring service manages cryptographic keys, authentication tokens, and other security data.
Keyrings are hierarchical and per-process, used by filesystems (fscrypt), networking (Kerberos, TLS), and module signature verification.
⚲ API:
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}} ↪ {{The Linux Kernel/id|sys_keyctl}}, {{The Linux Kernel/man|2|request_key}}
: {{The Linux Kernel/include|keys}}
⚙️ Internals:
: {{The Linux Kernel/source|security/keys}}
:: {{The Linux Kernel/source|security/keys/keyctl.c}}
📖 References:
: {{The Linux Kernel/doc|Kernel Keys|security/keys}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#key stress-ng --key]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}} [https://docs.kernel.org/admin-guide/perf-security.html Perf events and tool security]
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{w|Linux Security Modules}}
: {{The Linux Kernel/include|linux/security.h}} ⇾ {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}} 🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#AppArmor stress-ng --apparmor]
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
e3b495ar8jwj5930psmqn70d66fefli
4641631
4641630
2026-06-29T07:54:40Z
Conan
3188
LSM subsection under Security subsystems, moved from appendix
4641631
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Human interfaces}}</noinclude>
{| style="float:right; text-align: center; border-spacing: 0; margin: auto;" cellpadding="5pc"
! bgcolor="#fcd" |human interfaces
|- style=""
| bgcolor="#ecd" |[[#Text interfaces|text interfaces]]
|- style=""
| bgcolor="#dcd" |[[#Security|security]]
|- style=""
| bgcolor="#dcc" |[[#Debugging|debugging]]
|- style=""
| bgcolor="#cbb" |[[#Multimedia subsystems|multimedia subsystems]]
|- style=""
| bgcolor="#baa" |[[#HID|human interface devices]], [[#Input_devices|input devices]]
|- style=""
| bgcolor="#aaa" |[[#HI_device_drivers|HI drivers]]
|}
Welcome to the first article of this book.
The article is named after the {{W|USB human interface device class|USB class}} and the Linux facility for {{w|Human interface device|Human Interface Devices}} (HID).
The HID subsystem in Linux supports keyboards, mice, and other {{w|Input device|input devices}}.
In addition to input handling, this article also explores topics related to the console, multimedia (or simply media), sound (audio), video, and graphics—key areas of user interaction.
Security and debugging are also covered, as they are closely tied to human interaction and user-facing functionality.
== Text interfaces ==
In the world of Linux, text {{w|terminal emulator}}s and {{w|Linux console|console}}s are essential components of the operating system that allow users to interact with applications through the kernel.
A text terminal is a device that provides a text-based interface for communicating with the kernel, while the console is the physical device that houses the terminal and displays the output of the kernel.
The Linux kernel includes a built-in console driver that provides a basic interface for communicating with the console and controlling the terminal.
The console driver also supports various input and output devices, such as keyboards and displays, to enable users to interact with the system through a terminal.
The use of text {{w|Computer terminal|terminals}} and {{w|system console}}s in Linux can be traced back to the early days of computing, when {{w|Graphical terminal|graphical user interfaces}} were not yet widely available.
Despite the widespread adoption of graphical user interfaces, {{w|Text-based user interface|text-based interfaces}} and consoles remain popular among Linux users and developers for their simplicity, efficiency, and flexibility.
Overall, the text terminal and console play a crucial role in the Linux kernel, providing users with a powerful interface for managing and interacting with the operating system.
=== Char devices ===
{{The Linux Kernel/id|cdev}} – "character device" is a type of device driver that provides an implementation for character {{w|device file}} in the /dev directory.
The word "device" here means abstract interface, {{w|Proxy pattern|proxy}} to a usually peripheral physical device.
A character device is a type of device that can be accessed as a stream of bytes, rather than as a block of data like a block device.
Cdev drivers are commonly used for devices that provide a {{w|sequential access|stream}} of data, such as keyboards, mice, terminals, serial ports, and printers.
They are also used for devices that provide access to memory-mapped I/O regions, such as frame buffers and network devices.
A cdev driver typically consists of a set of functions that implement the low-level I/O operations for the device, such as open, read and write.
These functions are called by the kernel when a user space program accesses the character device file.
To create a cdev driver, a kernel developer must first initialize a cdev structure using {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}.
The cdev structure contains information about the device, such as its major and minor numbers and the set of I/O functions that the driver implements.
Once the cdev structure has been initialized, it can be registered with the kernel using the {{The Linux Kernel/id|cdev_add}} function.
This function creates the character device file in the /dev directory and associates it with the cdev driver.
You can find a list of registered char devices on the beginning the listing of <big>/proc/devices</big>. [[#Input_devices|Input devices]] keyboard and mouse are examples of char devices.
<small>''Tip: Browse the cross-referencing site to explore nearby API and use cases''</small>
💾 ''Historical: It is one of the most simple, fundamental and oldest concepts derived from UNIX. ''
⚲ API
: {{The Linux Kernel/include|linux/cdev.h}}
:: {{The Linux Kernel/id|dev_t}} - device id consists of {{The Linux Kernel/id|MAJOR}} and {{The Linux Kernel/id|MINOR}} numbers
:: {{The Linux Kernel/id|cdev}} - core char device struct
:: {{The Linux Kernel/id|cdev_init}} or {{The Linux Kernel/id|cdev_alloc}}
:: {{The Linux Kernel/id|cdev_device_add}} - helper function, uses
::: {{The Linux Kernel/id|cdev_add}} - common key function to add a char device to the system.
: {{The Linux Kernel/id|register_chrdev}} - ''obviously registers char device'' by '''major''' number, '''name''' and file operations
: {{The Linux Kernel/id|unregister_chrdev}}
: {{The Linux Kernel/id|alloc_chrdev_region}} / {{The Linux Kernel/id|register_chrdev_region}},
: {{The Linux Kernel/id|unregister_chrdev_region}}
: {{The Linux Kernel/include|uapi/linux/major.h}} - static definitions of many major numbers, including obsolete.
⚙️ Internals
: {{The Linux Kernel/source|fs/char_dev.c}} – character device registration
: {{The Linux Kernel/id|chrdevs}}
📖 References
: {{The Linux Kernel/doc|Char devices|core-api/kernel-api.html#char-devices}}
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/device_drivers.html Character device drivers, linux-kernel-labs]
: [https://www.opensourceforu.com/2011/04/character-device-files-creation-operations/ Character device files, on opensourceforu]
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch03.pdf LDD3:Char Drivers]
: [http://lwn.net/images/pdf/LDD3/ch06.pdf LDD3:Advanced Char Driver Operations]
: [http://www.xml.com/ldd/chapter/book/ch03.html LDD1:#3]
: [http://www.xml.com/ldd/chapter/book/ch05.html LDD1:#5]
=== Text terminals and console ===
🗝️ Acronyms
: {{w|Tty (unix)|tty}} - 💾 ''historically TeleTYpewriter'', means just terminal
: {{w|Pseudoterminal|pty}} - pseudoterminal
: pts - pseudoterminal slave
: ptmx - pseudoterminal master
⚲ API
: To find out current terminal:
:: readlink /proc/self/fd/0
:: {{The Linux Kernel/man|1|tty}}
:: {{The Linux Kernel/man|1|who}} -m
: {{The Linux Kernel/include|linux/tty.h}}
:{{The Linux Kernel/id|register_console}} obviously registers {{The Linux Kernel/id|console}}
:: 👁 example {{The Linux Kernel/id|virtio_console}}
: {{The Linux Kernel/include|linux/console.h}}
: {{The Linux Kernel/man|2|ioctl_console}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/tty}} – TTY layer
: {{The Linux Kernel/source|fs/devpts}} – devpts pseudo-filesystem for PTY slaves
: {{The Linux Kernel/source|fs/proc/proc_tty.c}} – /proc/tty information
: {{The Linux Kernel/source|drivers/tty/vt/vt.c}} – virtual terminal console
📖 References
: {{The Linux Kernel/man|4|tty}} – controlling terminal
: {{The Linux Kernel/man|4|ptmx}} and pts – pseudoterminal master and slave
: {{The Linux Kernel/man|7|pty}} – pseudoterminal interfaces
: {{The Linux Kernel/doc|console|driver-api/console.html}}
💾 ''Historical''
: [http://lwn.net/images/pdf/LDD3/ch18.pdf LDD3:TTY Drivers]
==Security==
The goal of security is to restrict access through interfaces.
From access control and authentication mechanisms to secure boot and memory protection,
the Linux kernel employs a variety of techniques to safeguard the system and its users.
Basic Linux security is quite simple.
It consists of three ownership classes and three access modes.
One of the most frequently executed functions is {{The Linux Kernel/id|may_open}}.
It rejects access of unauthorized users to open a file.
See article [[../Security/]] for new features.
=== Authorization ===
{{w|Authorization}} is the function of specifying {{w|Computer access control|access}} rights/{{w|Privilege_(computing)|privilege}}s to system resources.
The main goal of authorization is prevention of {{w|privilege escalation}} under any circumstances.
🔧 TODO.
Keywords: permission, capabilities, ownership, {{w|mitigation}}.
⚲ API
: {{The Linux Kernel/include|linux/stat.h}}
: {{The Linux Kernel/include|uapi/linux/stat.h}}
Basic classic UNIX authorization is based on ownership and tree access modes: reading, writing and execution.
Ownership is encoded by owning user id {{The Linux Kernel/id|uid_t}} and owning group id {{The Linux Kernel/id|gid_t}}.
{{The Linux Kernel/id|umode_t}} - just typedef used for encoding access mode. {{The Linux Kernel/id|S_IRUSR}} - minimal "read only by user/owner" access mode.
{{The Linux Kernel/id|S_IALLUGO}} - full access mode.
Please read the source for details for other modes.
Binary {{w|Access Control Matrix}} of access modes:
{| class="wikitable"
|+
!modes
!bits
!Read
!Write
!Execute
|-
|bit offset
|
|2
|1
|0
|-
|'''Others'''
|0-2
|or
|ow
|ox
|-
|'''Group'''
|3-5
|gr
|gw
|gx
|-
|'''User'''
|6-8
|ur
|uw
|ux
|}
: {{The Linux Kernel/man|2|chown}} ↪ {{The Linux Kernel/id|do_fchownat}} changes ownership for file or directory
: {{The Linux Kernel/man|2|chmod}} ↪ {{The Linux Kernel/id|do_fchmodat}} changes access mode for file or directory
: {{The Linux Kernel/man|2|access}}, {{The Linux Kernel/man|2|faccessat}} ↪ {{The Linux Kernel/id|do_faccessat}} checks access rights
Common authorization errors
: {{The Linux Kernel/id|EPERM}} – "Operation not permitted"
: {{The Linux Kernel/id|EACCES}} – "Permission denied"
🚀 Advanced features
: {{The Linux Kernel/man|5|acl}} {{The Linux Kernel/id|posix_acl}}
: {{The Linux Kernel/man|1|setpriv}} – run a program with different privilege settings
⚙️ Internals
: {{The Linux Kernel/id|may_open}} rejects unauthorized file opening
:: {{The Linux Kernel/id|inode_permission}} checks for access rights to a given inode
📖 References
: {{w|File-system permissions}}
==== Capabilities ====
{{w|POSIX capabilities}} split the traditional root privilege into distinct units, so a process can hold only the capabilities it needs.
⚲ API:
: {{The Linux Kernel/man|7|capabilities}}
: {{The Linux Kernel/include|uapi/linux/capability.h}}
: {{The Linux Kernel/man|2|capset}}, {{The Linux Kernel/man|2|capget}} – set/get capabilities of thread(s)
: {{The Linux Kernel/man|3|libcap}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/capability.c}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#cap stress-ng --cap]
===Credentials===
🔧 TODO.
Keywords: {{w|authentication}}, user IDs, group IDs, Process group ID, session ID.
⚲ API
: {{The Linux Kernel/include|uapi/asm-generic/stat.h}}
: {{The Linux Kernel/source|arch/x86/include/uapi/asm/stat.h}} – x86 stat structure definitions
: {{The Linux Kernel/include|linux/cred.h}}
:: struct {{The Linux Kernel/id|cred}} - the security context of a task
: {{The Linux Kernel/man|1|id}}, {{The Linux Kernel/man|1|test}} - shell utilities
: {{The Linux Kernel/man|2|getuid}} ↪ {{The Linux Kernel/id|current_uid}}
: {{The Linux Kernel/man|2|getgid}}
: {{The Linux Kernel/man|2|geteuid}} is used by utility {{The Linux Kernel/man|1|whoami}}
: Real, effective, and saved user/group IDs:
:: {{The Linux Kernel/man|2|getresuid}}, getresgid
:: {{The Linux Kernel/man|2|setreuid}}, setregid
: {{The Linux Kernel/man|2|setfsuid}} - set user identity used for filesystem checks
: {{The Linux Kernel/man|2|umask}} - sets file mode creation mask
: {{The Linux Kernel/man|1|stat}}, {{The Linux Kernel/man|2|stat}} ↪ {{The Linux Kernel/id|vfs_fstat}}, {{The Linux Kernel/id|vfs_fstatat}}
: {{The Linux Kernel/man|2|statx}} ↪ {{The Linux Kernel/id|do_statx}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/cred.c}} – credentials management and transitions
: {{The Linux Kernel/id|kstat}}
: {{The Linux Kernel/id|make_kuid}} etc
: {{The Linux Kernel/id|from_kuid_munged}} etc
📖 References
: {{The Linux Kernel/doc|Credentials in Linux|security/credentials.html}}
: {{The Linux Kernel/man|7|credentials}}
: https://www.geeksforgeeks.org/real-effective-and-saved-userid-in-linux/
=== Cryptography ===
🔧 TODO
🗝️ Acronyms
: AES - {{w|Advanced Encryption Standard}}
⚲ API
: {{The Linux Kernel/id|AF_ALG}} - {{The Linux Kernel/doc|User Space Interface|crypto/userspace-if.html}}
: {{The Linux Kernel/include|linux/crypto.h}} - Scatterlist Cryptographic API.
: {{The Linux Kernel/man|2|getrandom}} – obtain random bytes
: {{The Linux Kernel/include|linux/random.h}} – kernel random number generation
: {{The Linux Kernel/include|crypto}}
⚙️ Internals
: {{The Linux Kernel/source|crypto}} – cryptographic API core
: {{The Linux Kernel/source|drivers/crypto}} – hardware crypto accelerator drivers
: {{The Linux Kernel/source|lib/crypto}} – crypto library helpers
: {{The Linux Kernel/source|arch/x86/crypto}} – x86 optimized crypto implementations
: {{The Linux Kernel/source|fs/crypto}} - per-file encryption
: {{The Linux Kernel/source|fs/ecryptfs}} eCrypt FS - Encrypted filesystem that operates on the VFS layer.
: {{w|dm-crypt}}, {{The Linux Kernel/source|drivers/md/dm-crypt.c}}
📖 References
: {{The Linux Kernel/doc|Linux Kernel Crypto API|crypto}}
: {{w|Crypto API (Linux)}}
: [https://www.kernel.org/doc/Documentation/devicetree/bindings/crypto/ devicetree/bindings/crypto]
: {{The Linux Kernel/ltp|kernel|crypto}}
=== Audit ===
The Linux [https://wiki.archlinux.org/title/Audit_framework audit framework] records security-relevant events such as system calls, file access, and authentication attempts.
The audit daemon (auditd) collects records from the kernel via a netlink socket.
⚲ API
: {{The Linux Kernel/man|8|auditctl}} – configure audit rules
: {{The Linux Kernel/man|8|auditd}} – audit daemon
: {{The Linux Kernel/man|7|audit.rules}}
: {{The Linux Kernel/include|linux/audit.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/audit.h}} – audit internal definitions
: {{The Linux Kernel/source|kernel/audit.c}} – audit gateway between kernel and user-space daemon
: {{The Linux Kernel/source|kernel/auditsc.c}} – system-call auditing
: {{The Linux Kernel/source|kernel/audit_tree.c}} – audit directory tree watches
: {{The Linux Kernel/source|kernel/audit_watch.c}} – audit filesystem path watches
: {{The Linux Kernel/source|kernel/audit_fsnotify.c}} – audit fsnotify integration
: {{The Linux Kernel/source|kernel/auditfilter.c}} – audit rule filtering
📖 References
: https://wiki.archlinux.org/title/Audit_framework
See also [[The_Linux_Kernel/Debugging#eBPF|eBPF and BPF]]
=== Security subsystems ===
==== Seccomp ====
{{w|Seccomp}} (Secure Computing) restricts which system calls a process can make.
Seccomp-BPF attaches a {{w|Berkeley Packet Filter|BPF}} program that inspects each syscall number and arguments, returning allow, kill, trap, or errno.
Used by [https://github.com/opencontainers/runc runc] ({{w|Open Container Initiative|OCI}} container runtime), browsers (Chrome, Firefox), and systemd to reduce the kernel attack surface of sandboxed processes.
⚲ API:
: {{The Linux Kernel/man|2|seccomp}} ↪ {{The Linux Kernel/id|do_seccomp}}
: {{The Linux Kernel/man|2|prctl}} with {{The Linux Kernel/id|PR_SET_SECCOMP}}
: {{The Linux Kernel/include|linux/seccomp.h}}
: {{The Linux Kernel/include|uapi/linux/seccomp.h}} – {{The Linux Kernel/id|SECCOMP_MODE_FILTER}}, {{The Linux Kernel/id|SECCOMP_RET_ALLOW}}, {{The Linux Kernel/id|SECCOMP_RET_KILL}}
⚙️ Internals:
: {{The Linux Kernel/source|kernel/seccomp.c}}
: {{The Linux Kernel/id|seccomp_filter}} – container for seccomp BPF programs
📖 References:
: {{The Linux Kernel/doc|Seccomp BPF|userspace-api/seccomp_filter.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#Secure stress-ng --seccomp]
==== File sealing ====
File sealing restricts operations on anonymous files created with {{The Linux Kernel/man|2|memfd_create}}.
Once sealed, a file cannot be modified in ways forbidden by its seals, providing integrity guarantees for shared memory.
Used by Wayland for safe buffer handoff, systemd for sealed service binaries, and kdbus for immutable message payloads.
⚲ API:
: {{The Linux Kernel/man|2|memfd_create}} – create anonymous sealable file
: {{The Linux Kernel/man|2|fcntl}} with {{The Linux Kernel/id|F_ADD_SEALS}}, {{The Linux Kernel/id|F_GET_SEALS}}
: {{The Linux Kernel/id|F_SEAL_SEAL}}, {{The Linux Kernel/id|F_SEAL_SHRINK}}, {{The Linux Kernel/id|F_SEAL_GROW}}, {{The Linux Kernel/id|F_SEAL_WRITE}}
⚙️ Internals:
: {{The Linux Kernel/source|mm/memfd.c}}
: {{The Linux Kernel/man|2|fcntl}}({{The Linux Kernel/id|F_ADD_SEALS}}) ↪ {{The Linux Kernel/id|do_fcntl}} ↪ {{The Linux Kernel/id|memfd_fcntl}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#seal stress-ng --seal]
==== Keyrings ====
The kernel keyring service manages cryptographic keys, authentication tokens, and other security data.
Keyrings are hierarchical and per-process, used by filesystems (fscrypt), networking (Kerberos, TLS), and module signature verification.
⚲ API:
: {{The Linux Kernel/man|2|add_key}}, {{The Linux Kernel/man|2|keyctl}} ↪ {{The Linux Kernel/id|sys_keyctl}}, {{The Linux Kernel/man|2|request_key}}
: {{The Linux Kernel/include|keys}}
⚙️ Internals:
: {{The Linux Kernel/source|security/keys}}
:: {{The Linux Kernel/source|security/keys/keyctl.c}}
📖 References:
: {{The Linux Kernel/doc|Kernel Keys|security/keys}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#key stress-ng --key]
==== LSM ====
{{w|Linux Security Modules}} (LSM) is a framework providing hooks for access control implementations.
SELinux, AppArmor, Landlock, Yama, and Lockdown are LSM modules.
Keyrings (security/keys) and IMA/EVM (security/integrity) are separate subsystems that share the security/ tree but are not LSMs.
⚲ API:
: {{The Linux Kernel/include|linux/security.h}}
⚙️ Internals:
: {{The Linux Kernel/source|security}}
:: {{The Linux Kernel/source|security/security.c}} – LSM framework core, hook dispatch
:: {{The Linux Kernel/source|security/selinux}} – {{w|SELinux}}, https://selinuxproject.github.io/
:: {{The Linux Kernel/source|security/apparmor}} – {{w|AppArmor}}
:: {{The Linux Kernel/source|security/landlock}} – Landlock unprivileged sandboxing (since 5.13)
:: {{The Linux Kernel/source|security/integrity}} – IMA integrity measurement and EVM extended verification
:: {{The Linux Kernel/source|security/lockdown}} – kernel lockdown, restricts access to kernel features
:: {{The Linux Kernel/source|security/yama}} – Yama, ptrace scope restrictions
: {{The Linux Kernel/include|linux/verification.h}}
: {{The Linux Kernel/source|certs}} – module signing certificates
📖 References:
: {{The Linux Kernel/doc|Security|security}}
:: {{The Linux Kernel/doc|LSM - Linux Security Modules|security/lsm.html}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#AppArmor stress-ng --apparmor]
=== ... ===
Appendix for Security:
🔧 TODO
: {{The Linux Kernel/man|2|fcntl}} ↪ {{The Linux Kernel/id|do_fcntl}}
: {{w|chroot}}, {{The Linux Kernel/man|2|chroot}}
: {{w|Address_space_layout_randomization#Linux|Address space layout randomization}}
:: {{The Linux Kernel/man|8|setarch}} / {{The Linux Kernel/man|2|personality}}
📖 References
: {{The Linux Kernel/doc|Security-related interfaces|userspace-api/index.html#security-related-interfaces}}
:: {{The Linux Kernel/doc|No New Privileges Flag|userspace-api/no_new_privs.html}}
:: {{The Linux Kernel/doc|Landlock: unprivileged access control|userspace-api/landlock.html}}
:: {{The Linux Kernel/doc|Linux Security Modules|userspace-api/lsm.html}}
:: {{The Linux Kernel/doc|Introduction of non-executable mfd|userspace-api/mfd_noexec.html}}
:: {{The Linux Kernel/doc|Speculation Control|userspace-api/spec_ctrl.html}}
:: {{The Linux Kernel/doc|TEE (Trusted Execution Environment) Userspace API|userspace-api/tee.html}}
:: {{The Linux Kernel/doc|Executability check|userspace-api/check_exec.html}}
: {{The Linux Kernel/doc|Hardware vulnerabilities|admin-guide/hw-vuln}}
: {{The Linux Kernel/ltp|kernel|security}}
: {{The Linux Kernel/ltp||cve}}
: http://kernsec.org/wiki/index.php/Main_Page
== Debugging ==
See [[The_Linux_Kernel/Debugging|Debugging the Linux kernel]]
==Multimedia subsystems==
⚙️ Internals
: {{The Linux Kernel/source|drivers/media}} – media subsystem (V4L2, DVB, etc.)
=== Graphics ===
Old graphics (not to be confused with v4l):
⚲ API
: {{The Linux Kernel/include|video}}
<!-- : {{The Linux Kernel/include|uapi/video}} old stuff -->
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
==== {{w|Direct Rendering Manager}} (DRM) ====
DRM is responsible for interfacing with GPUs of modern video cards.
DRM exposes an API that user-space programs can use to send commands and data to the GPU and perform operations such as configuring the mode setting of the display.
User-space programs can use the DRM API to command the GPU to do hardware-accelerated 3D rendering and video decoding, as well as {{w|General-purpose computing on graphics processing units|GPGPU}} computing.
⚲ API
: /sys/class/drm/
: {{The Linux Kernel/include|uapi/drm}}
:: {{The Linux Kernel/include|uapi/drm/drm.h}}
::: {{The Linux Kernel/id|DRM_IOCTL_BASE}}
::: {{The Linux Kernel/id|drm_version}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/gpu/drm}} – DRM core and drivers
: {{The Linux Kernel/include|drm}}
: {{The Linux Kernel/include|drm_gem.h}} – Graphics Execution Manager Driver Interfaces
: {{The Linux Kernel/id|drm_dev_register}} registers {{The Linux Kernel/id|drm_device}}
=== {{w|Advanced Linux Sound Architecture}} (ALSA) ===
ALSA is a software framework and part of the Linux kernel that provides an API for sound card device drivers.
Some of the goals of the ALSA project at its inception were automatic configuration of sound-card hardware and graceful handling of multiple sound devices in a system.
The sound servers PulseAudio, JACK (low-latency professional-grade audio editing and mixing) and PipeWire, the higher-level abstraction APIs OpenAL, SDL audio, etc. work on top of ALSA and implemented sound card device drivers.
On Linux systems, ALSA succeeded the older {{w|Open Sound System}} (OSS).
⚲ API
: /proc/asound/cards, /sys/class/sound/
: {{The Linux Kernel/id|snd_card}} - central struct
: {{The Linux Kernel/id|snd_card_new}}
: {{The Linux Kernel/id|snd_card_register}}
: {{The Linux Kernel/id|snd_device_ops}}
: {{The Linux Kernel/id|snd_device_new}} creates an ALSA device component
: {{The Linux Kernel/include|uapi/sound/asound.h}}
: {{The Linux Kernel/include|sound/core.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound}} – ALSA sound subsystem
: {{The Linux Kernel/source|sound/core/device.c}} – ALSA device management
: See [[#Sound SoC - ASoC|ASoC]]
📖 References
: {{The Linux Kernel/doc|ALSA (sound)|sound}}
: {{The Linux Kernel/doc|Writing an ALSA Driver|sound/kernel-api/writing-an-alsa-driver.html}}
: {{The Linux Kernel/ltp|kernel|sound}}
=== {{w|Video4Linux}} (V4L2) ===
V4L is a collection of device drivers and an API for supporting realtime video capture on Linux systems.
It supports many USB webcams, TV tuners, and related devices, standardizing their output, so programmers can easily add video support to their applications.
MythTV, tvtime and Tvheadend are typical applications that use the V4L framework.
⚲ API
: {{The Linux Kernel/id|v4l2_device_register}} registers {{The Linux Kernel/id|v4l2_device}}
: {{The Linux Kernel/id|video_register_device}} registers {{The Linux Kernel/id|video_device}}
: 👁 examples {{The Linux Kernel/source|drivers/media/test-drivers}}
📖 References
: {{w|Video4Linux}}
: {{The Linux Kernel/doc|media|driver-api/media}}
: {{The Linux Kernel/doc|V4L|userspace-api/media/drivers/}}
: [https://linuxtv.org/downloads/v4l-dvb-apis-new/driver-api/index.html Media subsystem kernel internal API]
==HID==
Generic human interface devices.
Don't confuse with [[../System#hiddev|hiddev]].
=== Input devices ===
Input device files are kind of [[#char devices|char devices]] with id {{The Linux Kernel/id|INPUT_MAJOR}}.
Classic input devices are keyboard and mouse.
⚲ API
: In shell: cat /proc/bus/input/devices
: {{The Linux Kernel/include|linux/input.h}}
: {{The Linux Kernel/id|devm_input_allocate_device}}, {{The Linux Kernel/id|input_register_device}}, {{The Linux Kernel/id|input_register_handler}}, {{The Linux Kernel/id|input_dev}}
: {{The Linux Kernel/id|input_report_key}} {{The Linux Kernel/id|input_sync}}
👁 Examples
: {{The Linux Kernel/source|drivers/input/mousedev.c}} – mouse device emulation
: {{The Linux Kernel/source|drivers/input/keyboard/atkbd.c}} – AT/PS2 keyboard driver
<big>⌨️</big> Hands on
sudo hexdump /dev/input/mice # dump your mouse movements events from your kernel
⚙️ Internals
: {{The Linux Kernel/source|drivers/input/input.c}} – input core
: {{The Linux Kernel/id|input_event}}
📖 References
: {{The Linux Kernel/doc|Input|input}}
: {{The Linux Kernel/ltp|kernel|input}}
=== HID devices ===
🔧 TODO
⚲ API
: {{The Linux Kernel/id|hid_device}} - device report descriptor. Operations: {{The Linux Kernel/id|hid_allocate_device}}, {{The Linux Kernel/id|hid_add_device}} . 👁 Example {{The Linux Kernel/id|usbhid_probe}}
: {{The Linux Kernel/include|uapi/linux/hid.h}}
: {{The Linux Kernel/include|linux/hid.h}}
=== Camera ===
🔧 TODO
⚲ API
: {{The Linux Kernel/include|uapi/linux/uvcvideo.h}}
📖 References
: {{The Linux Kernel/doc|UVC|userspace-api/media/drivers/uvcvideo.html}}
: {{The Linux Kernel/source|drivers/media/usb/uvc}} – USB Video Class driver
==HI device drivers==
This section is about low level drivers to human interface peripheral devices.
⚲ '''HID''' API
: {{The Linux Kernel/include|linux/hidraw.h}}
: {{The Linux Kernel/id|module_hid_driver}} registers {{The Linux Kernel/id|hid_driver}}
: {{The Linux Kernel/id|hid_hw_start}}
⚙️ Internals
: {{The Linux Kernel/id|hid_bus_type}}
: {{The Linux Kernel/source|drivers/hid}} – HID transport drivers
: {{The Linux Kernel/source|drivers/hid/hid-core.c}} – HID core parsing and event handling
: {{The Linux Kernel/source|drivers/accessibility}} – accessibility drivers (speakup)
: {{The Linux Kernel/source|drivers/leds}} – LED class drivers
: {{The Linux Kernel/source|samples/uhid/uhid-example.c}} - 👁 example of user mode HID driver
: {{The Linux Kernel/source|drivers/input}} : keyboard & mouse, misc, serio, tablet, touchscreen, gameport, joystick
:: <big>⌨️</big> Hands on
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
'''USB HID'''
⚲ '''HID''' API
: {{The Linux Kernel/id|USB_INTERFACE_CLASS_HID}} == {{The Linux Kernel/id|USB_CLASS_HID}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/hid/usbhid}} – USB HID transport
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbkbd.c}}: {{The Linux Kernel/id|usb_kbd_driver}}
:: {{The Linux Kernel/source|drivers/hid/usbhid/usbmouse.c}}: {{The Linux Kernel/id|usb_mouse_driver}}
📖 References
: <!--
find include/ -type f -name '*hid*' | sed 's-include/\(.*\)-* {{The Linux Kernel/include|\1}}-'
-->{{The Linux Kernel/doc|USB HID class|hid}}
=== Display drivers ===
🔧 TODO
🗝️ Acronyms
: FB - {{w|Linux framebuffer|Framebuffer}}
: GPU - {{w|Graphics processing unit}}
: TFT (LCD) - {{w|Thin-film-transistor liquid-crystal display}} used for 🤖 embedded devices
: MIPI - 📱 {{w|Mobile Industry Processor Interface}}
:: DBI - Display Bus Interface
:: DSI - {{w|Display Serial Interface}}
:: DCS - The Display Command Set
⚲ API
: cat /proc/fb
: ls -l /sys/class/graphics
: {{The Linux Kernel/include|video/mipi_display.h}}
: {{The Linux Kernel/include|linux/fb.h}}
: {{The Linux Kernel/id|register_framebuffer}}
: {{The Linux Kernel/id|FBTFT_REGISTER_DRIVER}}
: {{The Linux Kernel/id|fbtft_display}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/video}} – framebuffer and video drivers
: {{The Linux Kernel/source|drivers/gpu}} – GPU and DRM drivers
👁 Examples
: {{The Linux Kernel/id|vivid_fb_init}}
: {{The Linux Kernel/id|fbtft_register_framebuffer}}
📖 References
: {{The Linux Kernel/doc|GPU Driver Developer’s Guide|gpu}}
: {{The Linux Kernel/doc|The Frame Buffer Device|fb}}
: {{The Linux Kernel/doc|Frame Buffer Library|driver-api/frame-buffer.html}}
: [https://lwn.net/Kernel/Index/#Device_drivers-Graphics LWN: Graphics]
=== Sound SoC - ASoC ===
ALSA System on Chip (ASoC) layer for 🤖 embedded systems.
ASoC is designed to handle complex audio processing and routing on low-power and resource-constrained systems, making it an ideal solution for embedded devices such as smartphones, tablets, and other IoT devices.
ASoC provides a comprehensive framework for audio drivers, enabling the creation of modular audio drivers that can be easily integrated with the rest of the kernel.
It also supports a wide range of audio interfaces, including I2S, PCM, AC97, and SPDIF, making it highly versatile and capable of handling a variety of audio formats.
One of the key features of ASoC is its ability to handle audio routing and processing using Digital Signal Processing (DSP) techniques.
This enables ASoC to support advanced audio features such as noise reduction, echo cancellation, and dynamic range compression, among others.
Overall, ASoC is a powerful and flexible subsystem that enables Linux to support a wide range of audio hardware in embedded devices.
It has become an essential component of many embedded Linux distributions and is widely used in the development of modern audio-enabled devices.
⚲ API
: {{The Linux Kernel/include|sound/soc.h}}
:: {{The Linux Kernel/id|snd_soc_card}}
::: is registered by {{The Linux Kernel/id|devm_snd_soc_register_card}} ⇾ {{The Linux Kernel/id|snd_soc_register_card}}
: {{The Linux Kernel/include|sound/soc-component.h}}
:: {{The Linux Kernel/id|snd_soc_component}}
::: {{The Linux Kernel/id|snd_soc_component_driver}}
::: {{The Linux Kernel/id|snd_soc_card}}
:::: {{The Linux Kernel/id|snd_card}}
:: {{The Linux Kernel/id|snd_soc_register_component}} {{The Linux Kernel/id|snd_soc_component_get_drvdata}} {{The Linux Kernel/id|snd_soc_component_read}} {{The Linux Kernel/id|snd_soc_component_update_bits}} {{The Linux Kernel/id|snd_soc_component_write}}
: {{The Linux Kernel/include|sound/soc-dai.h}} - {{The Linux Kernel/doc|DAI - Digital Audio Interface|sound/soc/dai.html}}: {{w|AC97}}, {{w|I2S}}, {{w|PCM}}
:: {{The Linux Kernel/id|snd_soc_dai}} {{The Linux Kernel/id|snd_soc_dai_driver}} {{The Linux Kernel/id|snd_soc_dai_get_drvdata}}
: {{The Linux Kernel/include|sound/soc-dpcm.h}} - {{The Linux Kernel/doc|DPCM - Dynamic PCM|sound/soc/dpcm.html}}
: {{The Linux Kernel/include|sound/soc-dapm.h}} - {{The Linux Kernel/doc|DAPM - Dynamic Audio Power Management|sound/soc/dapm.html}}
:: {{The Linux Kernel/id|snd_soc_dapm_route}}, {{The Linux Kernel/id|snd_soc_dapm_to_component}}, {{The Linux Kernel/id|snd_soc_dapm_widget}}
👁 Examples
: {{The Linux Kernel/source|sound/soc/generic/simple-card.c}}
: {{The Linux Kernel/source|sound/soc/generic/audio-graph-card.c}} uses {{The Linux Kernel/include|sound/graph_card.h}}
⚙️ Internals
: {{The Linux Kernel/source|sound/soc}} – ASoC framework
: {{The Linux Kernel/id|snd_soc_card}}
:: {{The Linux Kernel/id|snd_soc_dai_link}}
📖 References
: {{The Linux Kernel/doc|ASoC - ALSA SoC Layer|sound/soc}}
: {{The Linux Kernel/doc|ASoC Core API|sound/kernel-api/alsa-driver-api.html?#asoc}}
: https://www.alsa-project.org/wiki/ASoC
:: https://www.alsa-project.org/wiki/DAPM
🗝️ Acronyms SAI could be
: STM ''Serial'' Audio Interface: {{The Linux Kernel/source|sound/soc/stm/stm32_sai.h}}
: Freescale (FSL) ''Synchronous'' Audio Interface: {{The Linux Kernel/source|sound/soc/fsl/fsl_sai.h}}
{{BookCat}}
{{status|25%}}
ssigimwkcapv9we12trx8kdzn5uieqc
A Traveler's Guide to the World of Pokémon
0
430768
4641601
4584314
2026-06-29T03:51:44Z
~2026-37282-71
3610710
Missing region
4641601
wikitext
text/x-wiki
{{Denest}}
This Wikibook serves as a guide to the various locations in the fictional world of Pokémon. This includes the regions and the towns, islands, cities, and other places found within them.
Every generation in the core series also has certain locations that could only be unlocked or visited in the games through certain real world promotional events. Because of this, players have often used cheating devices, such as GameShark or Action Replay, to access those locations unofficially.
==Contents==
{{Book Search}}
* [[/Regions/]]
** [[/Regions/Kanto|Kanto]] ([[A Traveler's Guide to the World of Pokémon/Regions/Kanto/Locations|all locations]])
*** [[/Kanto/Pallet Town|Pallet Town]]
*** [[/Kanto/Viridian City|Viridian City]]
*** [[/Kanto/Pewter City|Pewter City]]
*** [[/Kanto/Mt. Moon|Mt. Moon]]
*** [[/Kanto/Cerulean City|Cerulean City]]
*** [[/Kanto/Cerulean Cave|Cerulean Cave]]
*** [[/Kanto/Vermilion City|Vermilion City]]
*** [[/Kanto/Fuchsia City|Fuchsia City]]
*** [[/Kanto/Celadon City|Celadon City]]
*** [[/Kanto/Saffron City|Saffron City]]
*** [[/Kanto/Cinnabar Island|Cinnabar Island]]
*** [[/Kanto/Indigo Plateau|Indigo Plateau]]
** [[/Regions/Sevii Islands|Sevii Islands]]
** [[/Regions/Johto|Johto]] ([[A Traveler's Guide to the World of Pokémon/Regions/Johto/Locations|all locations]])
*** [[/Johto/Cherrygrove City|Cherrygrove City]]
*** [[/Johto/Violet City|Violet City]]
*** [[/Johto/Goldenrod City|Goldenrod City]]
*** [[/Johto/Cianwood City|Cianwood City]]
*** [[/Johto/Lake of Rage|Lake of Rage]]
*** [[/Johto/Olivine City|Olivine City]]
*** [[/Johto/Blackthorn City|Blackthorn City]]
*** [[/Johto/Ilex Forest|Ilex Forest]]
*** [[/Johto/Mt. Silver|Mt. Silver]]
*** [[/Regions/Orange Islands|Orange Islands]]
** [[/Regions/Hoenn|Hoenn]] ([[A Traveler's Guide to the World of Pokémon/Regions/Hoenn/Locations|all locations]])
*** [[/Hoenn/Dewford Town|Dewford Town]]
*** [[/Hoenn/Fortree City|Fortree City]]
*** [[/Hoenn/Fallarbor Town|Fallarbor Town]]
*** [[/Hoenn/Lavaridge Town|Lavaridge Town]]
*** [[/Hoenn/Rustboro City|Rustboro City]]
**** [[/Hoenn/Devon Corporation|Devon Corporation]]
*** [[/Hoenn/Fortree City|Fortree City]]
*** [[/Hoenn/Mauville City|Mauville City]]
*** [[/Hoenn/New Mauville|New Mauville]]
*** [[/Hoenn/Sootopolis City|Sootopolis City]]
*** [[/Hoenn/Pacifidlog Town|Pacifidlog Town]]
*** [[/Hoenn/Abandoned Ship|Abandoned Ship]]
*** [[/Hoenn/Sea Mauville|Sea Mauville]]
*** [[/Hoenn/Ever Grande City|Ever Grande City]]
*** [[/Hoenn/Scorched Slab|Scorched Slab]]
*** [[/Hoenn/Shoal Cave|Shoal Cave]]
*** [[/Hoenn/Desert Ruins|Desert Ruins]]
*** [[/Hoenn/Sky Pillar|Sky Pillar]]
*** [[/Hoenn/Mt. Chimney|Mt. Chimney]]
*** [[/Hoenn/Faraway Island|Faraway Island]] (event-exclusive area, ''Pokémon Emerald'' only)
*** [[/Hoenn/Mirage Tower|Mirage Tower]] (''Pokémon Emerald'' only)
*** [[/Hoenn/Battle Frontier|Battle Frontier]]
** [[/Regions/Sinnoh|Sinnoh]] ([[A Traveler's Guide to the World of Pokémon/Regions/Sinnoh/Locations|all locations]])
*** [[/Sinnoh/Jubilife City|Jubilife City]]
*** [[/Sinnoh/Snowpoint City|Snowpoint City]]
** [[/Regions/Unova|Unova]]
*** [[/Unova/Castelia City|Castelia City]]
*** [[/Unova/Lacunosa Town|Lacunosa Town]]
*** [[/Unova/Anville Town|Anville Town]]
** [[/Regions/Kalos|Kalos]]
*** [[/Kalos/Vaniville Town/|Vaniville Town]]
*** [[/Kalos/Lumiose City|Lumiose City]]
*** [[/Kalos/Cyllage City|Cyllage City]]
*** [[/Kalos/Geosenge Town|Geosenge Town]]
*** [[/Kalos/Snowbelle City|Snowbelle City]]
*** [[/Kalos/Kiloude City|Kiloude City]]
** [[/Regions/Alola|Alola]]
*** [[/Regions/AlolaHau'oli City|Hau'oli City]]
*** [[/Alola/Konikoni City|Konikoni City]]
*** [[/Alola/Po Town|Po Town]]
*** [[/Alola/Tapu Village|Tapu Village]]
*** [[/Alola/Aether Paradise|Aether Paradise]]
** [[/Regions/Galar|Galar]]
*** [[/Galar/Postwick|Postwick]]
*** [[/Galar/Wedgehurst|Wedgehurst]]
*** [[/Galar/Motostoke|Motostoke]]
*** [[/Galar/Hammerlocke|Hammerlocke]]
*** [[/Galar/Wyndon|Wyndon]]
*** [[/Galar/Spikemuth|Spikemuth]]
*** Crown Tundra
**** [[/Galar/Freezington|Freezington]]
** [[/Regions/Orre|Orre]]
*** [[/Orre/Phenac City|Phenac City]]
*** [[/Orre/Gateon Port|Gateon Port]]
*** [[/Orre/Citadark Island|Citadark Island]]
** [[/Regions/Fiore|Fiore]]
** [[/Sinjoh Ruins/]]
** Space and abnormal locations
*** [[/Regions/Ultra Space/|Ultra Space]]
**** [[/Ultra Space/Ultra Megalopolis/|Ultra Megalopolis]]
*** [[/Distortion World/]]
* [[/White City/]] - Pokémon Stadium
* In multiple regions
** [[/Pokémon Center/]]
** [[/Poké Mart/]]
** [[/Pokémon Gym/]]
** [[/Pokémon League/]]
** [[/Safari Zone/]]
** [[/Victory Road/]]
** [[/Battle Tower/]]
* [[/Real life locations/]]
{{status|25%}}
{{shelves|Pokémon}}
0kql3a4k6qmt2k0vii0hm5tm72fb233
User talk:Xeverything11/updates
3
452115
4641593
4640995
2026-06-29T00:44:06Z
MediaWiki message delivery
1188004
/* Wikipedia translation of the week: 2026-27 */ new section
4641593
wikitext
text/x-wiki
<noinclude>
{{User:Xeverything11/tabs}}
{{User:Xeverything11/header|Welcome to|Xeverything11's|updates talk page!|archives=
* [[User talk:Xeverything11/archives/2022|2022]]
* [[User talk:Xeverything11/archives/2023|2023]]
}}
</noinclude>
__NOTOC__
{{User:MiszaBot/config
|archive = User talk:Xeverything11/archives/%(year)d
|algo = old(60d)
|counter = 1
|minthreadsleft = 1
|minthreadstoarchive = 1
}}
== Tech News: 2023-03 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/03|Translations]] are available.
'''Problems'''
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] The URLs in "{{int:last}}" links on page history now contain <bdi lang="zxx" dir="ltr"><code><nowiki>diff=prev&oldid=[revision ID]</nowiki></code></bdi> in place of <bdi lang="zxx" dir="ltr"><code><nowiki>diff=[revision ID]&oldid=[revision ID]</nowiki></code></bdi>. This is to fix a problem with links pointing to incorrect diffs when history was filtered by a tag. Some user scripts may break as a result of this change. [https://phabricator.wikimedia.org/T243569]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.19|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-01-17|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-01-18|en}}. It will be on all wikis from {{#time:j xg|2023-01-19|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* Some [[mw:Special:MyLanguage/Talk pages project/Usability|changes to the appearance of talk pages]] have only been available on <code>{{ns:1}}:</code> and <code>{{ns:3}}:</code> namespaces. These will be extended to other talk namespaces, such as <code>{{ns:5}}:</code>. They will continue to be unavailable in non-talk namespaces, including <code>{{ns:4}}:</code> pages (e.g., at the Village Pump). You can [[Special:Preferences#mw-prefsection-editing-discussion|change your preferences]] ([[Special:Preferences#mw-prefsection-betafeatures|beta feature]]). [https://phabricator.wikimedia.org/T325417]
*On Wikisources, when an image is zoomed or panned in the Page: namespace, the same zoom and pan settings will be remembered for all Page: namespace pages that are linked to a particular Index: namespace page. [https://gerrit.wikimedia.org/r/c/mediawiki/extensions/ProofreadPage/+/868841]
* The Vector 2022 skin will become the default for the English Wikipedia desktop users. The change will take place on January 18 at 15:00 UTC. [[:en:w:Wikipedia:Vector 2022|Learn more]].
'''Future changes'''
* The 2023 edition of the [[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey]], which invites contributors to make technical proposals and vote for tools and improvements, starts next week on 23 January 2023 at 18:00 UTC. You can start drafting your proposals in [[m:Community Wishlist Survey/Sandbox|the CWS sandbox]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:11, 17 January 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24381020 -->
== Tech News: 2023-04 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/04|Translations]] are available.
'''Problems'''
* Last week, for ~15 minutes, all wikis were unreachable for logged-in users and non-cached pages. This was caused by a timing issue. [https://wikitech.wikimedia.org/wiki/Incidents/2023-01-17_MediaWiki]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.20|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-01-24|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-01-25|en}}. It will be on all wikis from {{#time:j xg|2023-01-26|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* If you have the Beta Feature for [[mw:Special:MyLanguage/Talk pages project|DiscussionTools]] enabled, the appearance of talk pages will add more information about discussion activity. [https://www.mediawiki.org/wiki/Special:MyLanguage/Talk_pages_project/Usability#Status][https://phabricator.wikimedia.org/T317907]
* The 2023 edition of the [[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey]] (CWS), which invites contributors to make technical proposals and vote for tools and improvements, starts on Monday 23 January 2023 at [https://zonestamp.toolforge.org/1674496814 18:00 UTC].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:46, 23 January 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24418874 -->
== Tech News: 2023-05 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/05|Translations]] are available.
'''Problems'''
* Last week, for ~15 minutes, some users were unable to log in or edit pages. This was caused by a problem with session storage. [https://wikitech.wikimedia.org/wiki/Incidents/2023-01-24_sessionstore_quorum_issues]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.21|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-01-31|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-01|en}}. It will be on all wikis from {{#time:j xg|2023-02-02|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
'''Future changes'''
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] Wikis that use localized numbering schemes for references need to add new CSS. This will help to show citation numbers the same way in all reading and editing modes. If your wiki would prefer to do it yourselves, please see the [[mw:Special:MyLanguage/Parsoid/Parser Unification/Cite CSS|details and example CSS to copy from]], and also add your wiki to the list. Otherwise, the developers will directly help out starting the week of February 5.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:06, 31 January 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24455949 -->
== Wikipedia translation of the week: 2023-06 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sweden Finns' Day]] '''<br /> <small>''([[:fi:Ruotsinsuomalaisten päivä]]) ([[:sv:Sverigefinnarnas dag]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sverigefinskaflaggan.svg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Sweden Finns' Day''' (Finnish: Ruotsinsuomalaisten päivä, Swedish: Sverigefinnarnas dag) is an anniversary celebrated in Sweden on 24 February. The anniversary of the calendar was approved by the Swedish Academy in 2010 and was celebrated for the first time in 2011. February 24 was chosen as the birthday of Carl Axel Gottlund, a collector of folk poetry and a defender of the status of the Finnish language. The purpose of the day is to celebrate the Sweden Finns and to recognize their history, language and culture as a prominent part of Sweden's cultural heritage.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:04, 6 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24491747 -->
== Tech News: 2023-06 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/06|Translations]] are available.
'''Recent changes'''
* In the [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements|Vector 2022 skin]], logged-out users using the full-width toggle will be able to see the setting of their choice even after refreshing pages or opening new ones. This only applies to wikis where Vector 2022 is the default. [https://phabricator.wikimedia.org/T321498]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.22|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-08|en}}. It will be on all wikis from {{#time:j xg|2023-02-09|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* Previously, we announced when some wikis would be in read-only for a few minutes because of a switch of their main database. These switches will not be announced any more, as the read-only time has become non-significant. Switches will continue to happen at 7AM UTC on Tuesdays and Thursdays. [https://phabricator.wikimedia.org/T292543#8568433]
* Across all the wikis, in the Vector 2022 skin, logged-in users will see the page-related links such as "What links here" in a [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Features/Page_tools|new side menu]]. It will be displayed on the other side of the screen. This change had previously been made on Czech, English, and Vietnamese Wikipedias. [https://phabricator.wikimedia.org/T328692]
*[[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey 2023]] will stop receiving new proposals on [https://zonestamp.toolforge.org/1675706431 Monday, 6 February 2023, at 18:00 UTC]. Proposers should complete any edits by then, to give time for [[m:Special:MyLanguage/Community_Wishlist_Survey/Help_us|translations]] and review. Voting will begin on Friday, 10 February.
'''Future changes'''
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] Gadgets and user scripts will be changing to load on desktop and mobile sites. Previously they would only load on the desktop site. It is recommended that wiki administrators audit the [[MediaWiki:Gadgets-definition|gadget definitions]] prior to this change, and add <bdi lang="zxx" dir="ltr"><code>skins=…</code></bdi> for any gadgets which should not load on mobile. [https://phabricator.wikimedia.org/T328610 More details are available].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 10:21, 6 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24491749 -->
== Wikipedia translation of the week: 2023-07 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Delivery robot]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Woman Takes Groceries from Dax Delivery Robot.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
A '''delivery robot''' is an autonomous robot that provides "last mile" delivery services. An operator may monitor and take control of the robot remotely in certain situations that the robot cannot resolve by itself such as when it is stuck in an obstacle. Delivery robots can be used in different settings such as food delivery, package delivery, hospital delivery, and room service.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:26, 13 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24515453 -->
== Tech News: 2023-07 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/07|Translations]] are available.
'''Problems'''
* On wikis where patrolled edits are enabled, changes made to the [[mw:Special:MyLanguage/Growth/Communities/How to configure the mentors' list|mentor list]] by autopatrolled mentors are not correctly marked as patrolled. It will be fixed later this week. [https://phabricator.wikimedia.org/T328444]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-15|en}}. It will be on all wikis from {{#time:j xg|2023-02-16|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* The Reply tool and other parts of [[mw:Special:MyLanguage/Help:DiscussionTools#Mobile|DiscussionTools]] will be deployed for all editors using the mobile site. You can [[mw:Special:MyLanguage/Talk_pages_project/Mobile#Status_Updates|read more about this decision]]. [https://phabricator.wikimedia.org/T298060]
'''Future changes'''
* All wikis will be read-only for a few minutes on March 1. This is planned for [https://zonestamp.toolforge.org/1677679222 14:00 UTC]. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T328287][https://phabricator.wikimedia.org/T327920][https://wikitech.wikimedia.org/wiki/Deployments]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:49, 14 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24540832 -->
== Wikipedia translation of the week: 2023-08 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Buddha Dhatu Jadi]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Swarno Mandir.JPG|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Buddha Dhatu Jadi''' (Bengali: বুদ্ধ ধাতু জাদি; Burmese: ဗုဒ္ဓဓာတုစေတီ also known as the Bandarban Golden Temple) is located close to Balaghata town, in Bandarban City, in Bangladesh. Dhatu are the material remains of a holy person, and in this temple the relics belong to Buddha. It is the largest Theravada Buddhist temple in Bangladesh and has the second-largest Buddha statue in the country.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:18, 20 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24581813 -->
== Tech News: 2023-08 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/08|Translations]] are available.
'''Problems'''
* Last week, during planned maintenance of Cloud Services, unforeseen complications forced the team to turn off all tools for 2–3 hours to prevent data corruption. Work is ongoing to prevent similar problems in the future. [https://phabricator.wikimedia.org/T329535]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-21|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-22|en}}. It will be on all wikis from {{#time:j xg|2023-02-23|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
*The voting phase for the [[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey 2023]] ends on [https://zonestamp.toolforge.org/1677261621 24 February at 18:00 UTC]. The results of the survey will be announced on 28 February.
'''Future changes'''
* All wikis will be read-only for a few minutes on March 1. This is planned for [https://zonestamp.toolforge.org/1677679222 14:00 UTC]. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T328287][https://phabricator.wikimedia.org/T327920][https://wikitech.wikimedia.org/wiki/Deployments]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:58, 21 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24570514 -->
== Wikipedia translation of the week: 2023-09 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Alina Scholtz]] '''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Alina Scholtz''' (24 September 1908 – 25 February 1996) was a Polish landscape architect, known as one of country's pioneers in developing the field. Throughout her career she worked on various public and private projects for cemeteries, parks and green spaces. Some of her most noted works include the grounds of a villa on Kielecka Street in Warsaw for which she won a Silver Medal at the 1937 World Exhibition in Paris, the memorial cemetery to the victims of the Palmiry massacre, and landscaping projects along the East-West traffic route of Warsaw. In addition to her design work, she served as one of the founding members of the International Federation of Landscape Architects.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:04, 27 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24617511 -->
== Tech News: 2023-09 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/09|Translations]] are available.
'''Problems'''
* Last week, in some areas of the world, there were problems with loading pages for 20 minutes and saving edits for 55 minutes. These issues were caused by a problem with our caching servers due to unforseen events during a routine maintenance task. [https://wikitech.wikimedia.org/wiki/Incidents/2023-02-22_wiki_outage][https://wikitech.wikimedia.org/wiki/Incidents/2023-02-22_read_only]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.25|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-01|en}}. It will be on all wikis from {{#time:j xg|2023-03-02|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* All wikis will be read-only for a few minutes on March 1. This is planned for [https://zonestamp.toolforge.org/1677679222 14:00 UTC]. [https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:47, 27 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24634242 -->
== Wikipedia translation of the week: 2023-10 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Mary Nzimiro]] '''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Mary Nzimiro''', birthname Mary Nwametu Onumonu, MBE (1898–1993) was a pioneering Nigerian businesswoman, politician and women's activist. In 1948, she was appointed principal representative of the United Africa Company (UAC) for Eastern Nigeria, while maintaining textile and cosmetics retail outlets of her own in Port Harcourt, Aba and Owerri. By the early 1950s, she was among the richest individuals in West Africa, becoming a resident of the exclusive Bernard Carr Street in Port Harcourt. On the political front, she was a member of the influential National Council of Nigeria and the Cameroons, becoming a member of its executive committee in 1957 and vice-president of the NCNC Estern Women's Association in 1962. During the Nigerian Civil War (1967–1970), she organized Igbo women in support of the Biafrans. As a result she lost most of her property in Port Harcourt and returned to her native Oguta where she died in 1993.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:47, 6 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24636259 -->
== Tech News: 2023-10 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/10|Translations]] are available.
'''Recent changes'''
* The Community Wishlist Survey 2023 edition has been concluded. Community Tech has [[m:Special:MyLanguage/Community Wishlist Survey 2023/Results|published the results]] of the survey and will provide an update on what is next in April 2023.
* On wikis which use [[mw:Special:MyLanguage/Writing_systems|LanguageConverter]] to handle multiple writing systems, articles which used custom conversion rules in the wikitext (primarily on Chinese Wikipedia) would have these rules applied inconsistently in the table of contents, especially in the Vector 2022 skin. This has now been fixed. [https://phabricator.wikimedia.org/T306862]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.26|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-08|en}}. It will be on all wikis from {{#time:j xg|2023-03-09|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* A search system has been added to the [[Special:Preferences|Preferences screen]]. This will let you find different options more easily. Making it work on mobile devices will happen soon. [https://phabricator.wikimedia.org/T313804]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:50, 6 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24676916 -->
== Wikipedia translation of the week: 2023-11 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Elizabeth Langdon Williams]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Elizabeth Langdon Williams.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Elizabeth Langdon Williams''' (February 8, 1879 in Putnam, Connecticut – 1981 in Enfield, New Hampshire) was an American human computer and astronomer whose work helped lead to the discovery of Pluto, or Planet X.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:21, 13 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24700408 -->
== Tech News: 2023-11 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/11|Translations]] are available.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.27|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-15|en}}. It will be on all wikis from {{#time:j xg|2023-03-16|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-cbk_zamwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cdowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cebwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-chwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-chrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-chywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ckbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-csbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cuwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-itwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T304542][https://phabricator.wikimedia.org/T304550]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:20, 13 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24700189 -->
== Wikipedia translation of the week: 2023-12 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:I Didn't Raise My Boy to Be a Soldier]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Peerless Quartet - I Didn't Raise my Boy to be a Soldier.ogg|300px|center]]
<div style="text-align:left; padding: .4em;">
an American anti-war song that was influential within the pacifist movement that existed in the United States before it entered World War I.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:31, 20 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24720571 -->
== Tech News: 2023-12 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/12|Translations]] are available.
'''Problems'''
* Last week, some users experienced issues loading image thumbnails. This was due to incorrectly cached images. [https://phabricator.wikimedia.org/T331820]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.1|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-21|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-22|en}}. It will be on all wikis from {{#time:j xg|2023-03-23|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] A link to the user's [[{{#special:CentralAuth}}]] page will appear on [[{{#special:Contributions}}]] — some user scripts which previously added this link may cause conflicts. This feature request was [[:m:Community Wishlist Survey 2023/Admins and patrollers/Add link to CentralAuth on Special:Contributions|voted #17 in the 2023 Community Wishlist Survey]].
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The [[{{#special:AbuseFilter}}]] edit window will be resizable and larger by default. This feature request was [[:m:Community Wishlist Survey 2023/Anti-harassment/Make the AbuseFilter edit window resizable and larger by default|voted #80 in the 2023 Community Wishlist Survey]].
* There will be a new option for Administrators when they are unblocking a user, to add the unblocked user’s user page to their watchlist. This will work both via [[{{#special:Unblock}}]] and via the API. [https://phabricator.wikimedia.org/T257662]
'''Meetings'''
* You can join the next meeting with the Wikipedia mobile apps teams. During the meeting, we will discuss the current features and future roadmap. The meeting will be on [https://zonestamp.toolforge.org/1679677204 24 March at 17:00 (UTC)]. See [[mw:Special:MyLanguage/Wikimedia Apps/Office Hours|details and how to join]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:26, 21 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24732558 -->
== Wikipedia translation of the week: 2023-13 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:es:Diana Aguavil]]'''<br /> <small>''([[:en:Diana Aguavil]]) ([[:pt:Diana Aguavil]]) ''</small> </div>
Please be bold and help translate this article!
----
[[File:Diana Aguavil.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Diana Alexandra Aguavil Calazacón''' (born 7 August 1983) is an Ecuadorian indigenous leader, since 25 August 2018, the first female governor of the Tsáchila nationality after 104 years of male administrations and winning the 2018 Tsáchila election. She was also the second woman to become a candidate.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:39, 27 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24758626 -->
== Tech News: 2023-13 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/13|Translations]] are available.
'''Recent changes'''
* The [[:mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilter]] condition limit was increased from 1000 to 2000. [https://phabricator.wikimedia.org/T309609]
* [[:m:Special:MyLanguage/Global AbuseFilter#Locally disabled actions|Some Global AbuseFilter]] actions will no longer apply to local projects. [https://phabricator.wikimedia.org/T332521]
* Desktop users are now able to subscribe to talk pages by clicking on the {{int:discussiontools-newtopicssubscription-button-subscribe-label}} link in the {{int:toolbox}} menu. If you subscribe to a talk page, you receive [[mw:Special:MyLanguage/Notifications|notifications]] when new topics are started on that talk page. This is separate from putting the page on your watchlist or subscribing to a single discussion. [https://phabricator.wikimedia.org/T263821]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.2|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-29|en}}. It will be on all wikis from {{#time:j xg|2023-03-30|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
'''Future changes'''
* You will be able to choose [[mw:Special:MyLanguage/VisualEditor/Diffs|visual diffs]] on all [[m:Special:MyLanguage/Help:Page history|history pages]] at the Wiktionaries and Wikipedias. [https://phabricator.wikimedia.org/T314588]
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] The legacy [[mw:Mobile Content Service|Mobile Content Service]] is going away in July 2023. Developers are encouraged to switch to Parsoid or another API before then to ensure service continuity. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/4MVQQTONJT7FJAXNVOFV3WWVVMCHRINE/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:14, 28 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24780854 -->
== Tech News: 2023-14 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/14|Translations]] are available.
'''Recent changes'''
* The system for automatically creating categories for the [[mw:Special:MyLanguage/Extension:Babel|Babel]] extension has had several important changes and fixes. One of them allows you to insert templates for automatic category descriptions on creation, allowing you to categorize the new categories. [https://phabricator.wikimedia.org/T211665][https://phabricator.wikimedia.org/T64714][https://phabricator.wikimedia.org/T170654][https://phabricator.wikimedia.org/T184941][https://phabricator.wikimedia.org/T33074]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.3|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-04|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-05|en}}. It will be on all wikis from {{#time:j xg|2023-04-06|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Some older [[w:en:Web browser|Web browsers]] will stop being able to use [[w:en:JavaScript|JavaScript]] on Wikimedia wikis from this week. This mainly affects users of Internet Explorer 11. If you have an old web browser on your computer you can try to upgrade to a newer version. [https://phabricator.wikimedia.org/T178356]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The deprecated <bdi lang="zxx" dir="ltr"><code>jquery.hoverIntent</code></bdi> module has been removed. This module could be used by gadgets and user scripts, to create an artificial delay in how JavaScript responds to a hover event. Gadgets and user scripts should now use jQuery <bdi lang="zxx" dir="ltr"><code>hover()</code></bdi> or <bdi lang="zxx" dir="ltr"><code>on()</code></bdi> instead. Examples can be found in the [[mw:Special:MyLanguage/ResourceLoader/Migration_guide_(users)#jquery.hoverIntent|migration guide]]. [https://phabricator.wikimedia.org/T311194]
* Some of the links in [[{{#special:SpecialPages}}]] will be re-arranged. There will be a clearer separation between links that relate to all users, and links related to your own user account. [https://phabricator.wikimedia.org/T333242]
* You will be able to hide the [[mw:Special:MyLanguage/Talk pages project/Replying|Reply button]] in archived discussion pages with a new <bdi lang="zxx" dir="ltr"><code><nowiki>__ARCHIVEDTALK__</nowiki></code></bdi> magic word. There will also be a new <bdi lang="zxx" dir="ltr"><code>.mw-archivedtalk</code></bdi> CSS class for hiding the Reply button in individual sections on a page. [https://phabricator.wikimedia.org/T249293][https://phabricator.wikimedia.org/T295553][https://gerrit.wikimedia.org/r/c/mediawiki/extensions/DiscussionTools/+/738221]
'''Future changes'''
* The Vega software that creates data visualizations in pages, such as graphs, will be upgraded to the newest version in the future. Graphs that still use the very old version 1.5 syntax may stop working properly. Most existing uses have been found and updated, but you can help to check, and to update any local documentation. [[phab:T260542|Examples of how to find and fix these graphs are available]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40, 3 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24820268 -->
== Tech News: 2023-15 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/15|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] In the visual editor, it is now possible to edit captions of images in galleries without opening the gallery dialog. This feature request was [[:m:Community Wishlist Survey 2023/Editing/Editable gallery captions in Visual Editor|voted #61 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T190224]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] You can now receive notifications when another user edits your user page. See the "{{int:Echo-category-title-edit-user-page}}" option in [[Special:Preferences#mw-prefsection-echo|your Preferences]]. This feature request was [[:m:Community Wishlist Survey 2023/Anti-harassment/Notifications for user page edits|voted #3 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T3876]
'''Problems'''
* There was a problem with all types of CentralNotice banners still being shown to logged-in users even if they had [[Special:Preferences#mw-prefsection-centralnotice-banners|turned off]] specific banner types. This has now been fixed. [https://phabricator.wikimedia.org/T331671]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.4|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-11|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-12|en}}. It will be on all wikis from {{#time:j xg|2023-04-13|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-arywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dinwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dsbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-eewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-elwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-emlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-eowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-etwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-euwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-extwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tumwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ffwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fiu_vrowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fjwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frpwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-furwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gcrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-glwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-glkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gomwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gotwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-guwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gvwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T304551][https://phabricator.wikimedia.org/T308133]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:05, 10 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24851886 -->
== Wikipedia translation of the week: 2023-16 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Lucy Salani]]'''<br /> <small>''([[:en:Lucy Salani]]) ([[:fr:Lucy Salani]]) ''</small> </div>
Please be bold and help translate this article!
----
[[File:Lucy Salani.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Lucy Salani''' was an Italian activist and is considered the only Italian transgender person to have survived the Nazi concentration camps.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:06, 17 April 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24872966 -->
== Tech News: 2023-16 ==
<section begin="technews-2023-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/16|Translations]] are available.
'''Recent changes'''
* You can now see [[mw:Special:MyLanguage/Help:Extension:Kartographer#Show_nearby_articles|nearby articles on a Kartographer map]] with the button for the new feature "{{int:Kartographer-sidebar-nearbybutton}}". Six wikis have been testing this feature since October. [https://meta.wikimedia.org/wiki/WMDE_Technical_Wishes/Geoinformation/Nearby_articles#Implementation][https://phabricator.wikimedia.org/T334079]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The [[m:Special:GlobalWatchlist|Special:GlobalWatchlist]] page now has links for "{{int:globalwatchlist-markpageseen}}" for each entry. This feature request was [[m:Community Wishlist Survey 2023/Notifications, Watchlists and Talk Pages/Button to mark a single change as read in the global watch list|voted #161 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334246]
'''Problems'''
* At Wikimedia Commons, some thumbnails have not been getting replaced correctly after a new version of the image is uploaded. This should be fixed later this week. [https://phabricator.wikimedia.org/T331138][https://phabricator.wikimedia.org/T333042]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] For the last few weeks, some external tools had inconsistent problems with logging-in with OAuth. This has now been fixed. [https://phabricator.wikimedia.org/T332650]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.5|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-18|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-19|en}}. It will be on all wikis from {{#time:j xg|2023-04-20|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:55, 18 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24881071 -->
== Wikipedia translation of the week: 2023-17 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:ca:María Fernanda Castro Maya]]'''<br /> <small>''([[:pt:María Fernanda Castro Maya]]) ([[:eu:María Fernanda Castro Maya]]) ''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''María Fernanda Castro Maya''' is a Mexican self-advocate disability rights activist.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:55, 24 April 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24872966 -->
== Tech News: 2023-17 ==
<section begin="technews-2023-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/17|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The date-selection menu on pages such as [[{{#special:Contributions}}]] will now show year-ranges that are in the current and past decade, instead of the current and future decade. This feature request was [[m:Community Wishlist Survey 2023/Miscellaneous/Change year range shown in date selection popup|voted #145 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334316]
'''Problems'''
* Due to security issues with the [[mw:Special:MyLanguage/Extension:Graph|Graph extension]], graphs have been disabled in all Wikimedia projects. Wikimedia Foundation teams are working to respond to these vulnerabilities. [https://phabricator.wikimedia.org/T334940]
* For a few days, it was not possible to save some kinds of edits on the mobile version of a wiki. This has been fixed. [https://phabricator.wikimedia.org/T334797][https://phabricator.wikimedia.org/T334799][https://phabricator.wikimedia.org/T334794]
'''Changes later this week'''
* All wikis will be read-only for a few minutes on April 26. This is planned for [https://zonestamp.toolforge.org/1682517653 14:00 UTC]. [https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.6|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-25|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-26|en}}. It will be on all wikis from {{#time:j xg|2023-04-27|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* The Editing team plans an A/B test for [[mw:Special:MyLanguage/Talk pages project/Usability|a usability analysis of the Talk page project]]. The [[mw:Special:MyLanguage/Talk pages project/Usability/Analysis|planned measurements are available]]. Your wiki [[phab:T332946|may be invited to participate]]. Please suggest improvements to the measurement plan at [[mw:Talk:Talk pages project/Usability|the discussion page]].
* [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2023-2024|The Wikimedia Foundation annual plan 2023-2024 draft is open for comment and input]] until May 19. The final plan will be published in July 2023 on Meta-wiki.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:04, 24 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24933592 -->
== Wikipedia translation of the week: 2023-18 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sonia Orbuch]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Sonia Shainwald Orbuch''' (born Sarah Shainwald, May 24, 1925 – September 30, 2018) was an American Holocaust educator. During the Second World War she was a Jewish resistance fighter in eastern Poland.
Orbuch hid in the forests of Poland with her family during the Second World War. She joined a group of Soviet partisans, being renamed Sonia in case she was captured, and helped fight against the Germans. After the war, she returned home, where she met her future husband. After having a daughter in a refugee camp in Germany, the family eventually emigrated to the United States.
She spent the rest of life in public engagement, speaking about her experiences and in 2009, published her autobiography, Here, There Are No Sarahs: A Woman's Courageous Fight Against the Nazis and Her Bittersweet Fulfillment of the American Dream.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 06:24, 1 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24872966 -->
== Tech News: 2023-18 ==
<section begin="technews-2023-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/18|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The content attribution tools [[mw:Special:MyLanguage/Who Wrote That?|Who Wrote That?]], [[xtools:authorship|XTools Authorship]], and [[xtools:blame|XTools Blame]] now support the French and Italian Wikipedias. More languages will be added in the near future. This is part of the [[m:Community Wishlist Survey 2023/Reading/Extend "Who Wrote That?" tool to more wikis|#7 wish in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T243711][https://phabricator.wikimedia.org/T270490][https://phabricator.wikimedia.org/T334891]
* The [[:commons:Special:MyLanguage/Commons:Video2commons|Video2commons]] tool has been updated. This fixed several bugs related to YouTube uploads. [https://github.com/toolforge/video2commons/pull/162/commits]
* The [[{{#special:Preferences}}]] page has been redesigned on mobile web. The new design makes it easier to browse the different categories and settings at low screen widths. You can also now access the page via a link in the Settings menu in the mobile web sidebar. [https://www.mediawiki.org/wiki/Moderator_Tools/Content_moderation_on_mobile_web/Preferences]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.7|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-02|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-03|en}}. It will be on all wikis from {{#time:j xg|2023-05-04|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:45, 2 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24966974 -->
== Wikipedia translation of the week: 2023-19 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Nadia Ghulam]]'''<br /><small>''([[:fr:Nadia Ghulam]]) ([[:es:Nadia Ghulam]]) ([[:ca:Nadia Ghulam]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Nadia Ghulam (cropped).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Nadia Ghulam Dastgir''' is an Afghan woman who spent ten years posing as her dead brother to evade the Taliban's strictures against women. Her book about her experiences, written with Agnès Rotger and published in 2010, El secret del meu turbant (The Secret of My Turban), won the Prudenci Bertrana Prize for fiction.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:37, 8 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24966177 -->
== Tech News: 2023-19 ==
<section begin="technews-2023-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/19|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] Last week, Community Tech released the first update for providing [[m:Special:MyLanguage/Community Wishlist Survey 2022/Better diff handling of paragraph splits|better diffs]], the #1 request in the 2022 Community Wishlist Survey. [[phab:T324759|This update]] adds legends and tooltips to inline diffs so that users unfamiliar with the blue and yellow highlights can better understand the type of edits made.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] When you close an image that is displayed via MediaViewer, it will now return to the wiki page instead of going back in your browser history. This feature request was [[m:Community Wishlist Survey 2023/Reading/Return to the article when closing the MediaViewer|voted #65 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T236591]
* The [[mw:Special:MyLanguage/Extension:SyntaxHighlight|SyntaxHighlight]] extension now supports <bdi lang="en" dir="ltr"><code>wikitext</code></bdi> as a selected language. Old alternatives that were used to highlight wikitext, such as <bdi lang="en" dir="ltr"><code>html5</code></bdi>, <bdi lang="en" dir="ltr"><code>moin</code></bdi>, and <bdi lang="en" dir="ltr"><code>html+handlebars</code></bdi>, can now be replaced. [https://phabricator.wikimedia.org/T29828]
* [[mw:Special:MyLanguage/Manual:Creating pages with preloaded text|Preloading text to new pages/sections]] now supports preloading from localized MediaWiki interface messages. [https://cs.wikipedia.org/wiki/User_talk:Martin_Urbanec_(WMF)?action=edit§ion=new&preload=MediaWiki:July Here is an example] at the {{int:project-localized-name-cswiki/en}} that uses <bdi lang="zxx" dir="ltr"><code><nowiki>preload=MediaWiki:July</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T330337]
'''Problems'''
* Graph Extension update: Foundation developers have completed upgrading the visualization software to Vega5. Existing community graphs based on Vega2 are no longer compatible. Communities need to update local graphs and templates, and shared lua modules like <bdi lang="de" dir="ltr">[[:de:Modul:Graph]]</bdi>. The [https://vega.github.io/vega/docs/porting-guide/ Vega Porting guide] provides the most comprehensive detail on migration from Vega2 and [https://www.mediawiki.org/w/index.php?title=Template:Graph:PageViews&action=history here is an example migration]. Vega5 has currently just been enabled on mediawiki.org to provide a test environment for communities. [https://phabricator.wikimedia.org/T334940#8813922]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.8|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-09|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-10|en}}. It will be on all wikis from {{#time:j xg|2023-05-11|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Until now, all new OAuth apps went through manual review. Starting this week, apps using identification-only or basic authorizations will not require review. [https://phabricator.wikimedia.org/T67750]
'''Future changes'''
* During the next year, MediaWiki will stop using IP addresses to identify logged-out users, and will start automatically assigning unique temporary usernames. Read more at [[m:Special:MyLanguage/IP Editing: Privacy Enhancement and Abuse Mitigation/Updates|IP Editing: Privacy Enhancement and Abuse Mitigation/Updates]]. You can [[m:Talk:IP Editing: Privacy Enhancement and Abuse Mitigation#What should it look like?|join the discussion]] about the [[m:Special:MyLanguage/IP Editing: Privacy Enhancement and Abuse Mitigation/Updates#What will temporary usernames look like?|format of the temporary usernames]]. [https://phabricator.wikimedia.org/T332805]
* There will be an [[:w:en:A/B testing|A/B test]] on 10 Wikipedias where the Vector 2022 skin is the default skin. Half of logged-in desktop users will see an interface where the different parts of the page are more clearly separated. You can [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Updates/2023-05 Zebra9 A/B test|read more]]. [https://phabricator.wikimedia.org/T333180][https://phabricator.wikimedia.org/T335972]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] <code>jquery.tipsy</code> will be removed from the MediaWiki core. This will affect some user scripts. Many lines with <code>.tipsy(</code> can be commented out. <code>OO.ui.PopupWidget</code> can be used to keep things working like they are now. You can [[phab:T336019|read more]] and [[:mw:Help:Locating broken scripts|read about how to find broken scripts]]. [https://phabricator.wikimedia.org/T336019]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:36, 9 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24998636 -->
== Wikipedia translation of the week: 2023-20 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Purple Day]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Epilepsy Warrior Brooch May 2018 Purple Day.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Purple Day''' is a global grassroots event that was formed with the intention to increase worldwide awareness of epilepsy, and to dispel common myths and fears of this neurological disorder.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:17, 15 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25000361 -->
== Tech News: 2023-20 ==
<section begin="technews-2023-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/20|Translations]] are available.
'''Problems'''
* Citations that are automatically generated based on [[d:Q33057|ISBN]] are currently broken. This affects citations made with the [[mw:Special:MyLanguage/Help:VisualEditor/User_guide/Citations-Full#Automatic|VisualEditor Automatic tab]], and the use of the citoid API in gadgets and user scripts. Work is ongoing to restore this feature. [https://phabricator.wikimedia.org/T336298]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.9|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-16|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-17|en}}. It will be on all wikis from {{#time:j xg|2023-05-18|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-gorwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hakwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hawwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hifwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hsbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-htwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-igwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ilowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-inhwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iuwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jamwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jvwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308134]
'''Future changes'''
* There is a recently formed team at the Wikimedia Foundation which will be focusing on experimenting with new tools. Currently they are building [[m:Wikimedia_Foundation_Annual_Plan/2023-2024/Draft/Future_Audiences#FA2.2_Conversational_AI|a prototype ChatGPT plugin that allows information generated by ChatGPT to be properly attributed]] to the Wikimedia projects.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Gadget and userscript developers should replace <bdi lang="zxx" dir="ltr"><code>jquery.cookie</code></bdi> with <bdi lang="zxx" dir="ltr"><code>mediawiki.cookie</code></bdi>. The <bdi lang="zxx" dir="ltr"><code>jquery.cookie</code></bdi> library will be removed in ~1 month, and staff developers will run a script to replace any remaining uses at that time. [https://phabricator.wikimedia.org/T336018]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:45, 15 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25011501 -->
== Tech News: 2023-21 ==
<section begin="technews-2023-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/21|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The "recent edits" time period for page watchers is now 30 days. It used to be 180 days. This was a [[m:Community Wishlist Survey 2023/Notifications, Watchlists and Talk Pages/Change information about the number of watchers on a page|Community Wishlist Survey proposal]]. [https://phabricator.wikimedia.org/T336250]
'''Changes later this week'''
* An [[mw:special:MyLanguage/Growth/Positive reinforcement#Impact|improved impact module]] will be available at Wikipedias. The impact module is a feature available to newcomers [[mw:Special:MyLanguage/Growth/Feature summary#Newcomer homepage|at their personal homepage]]. It will show their number of edits, how many readers their edited pages have, how many thanks they have received and similar things. It is also accessible by accessing Special:Impact. [https://phabricator.wikimedia.org/T336203]
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.10|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-23|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-24|en}}. It will be on all wikis from {{#time:j xg|2023-05-25|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W21"/>
16:55, 22 May 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25028325 -->
== Wikipedia translation of the week: 2023-22 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Valencian Art Nouveau]]'''<br /> <small>''([[:es:Modernismo valenciano]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Santuario Novelda.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Valencian Art Nouveau''' (Spanish: modernismo valenciano, Valencian: modernisme valencià), is the historiographic denomination given to an art and literature movement associated with the Art Nouveau in the Valencian Community, in Spain.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:46, 29 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25074014 -->
== Tech News: 2023-22 ==
<section begin="technews-2023-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/22|Translations]] are available.
'''Recent changes'''
* Citations can once again be added automatically from ISBNs, thanks to Zotero's ISBN searches. The current data sources are the Library of Congress (United States), the Bibliothèque nationale de France (French National Library), and K10plus ISBN (German repository). Additional data source searches can be [[mw:Citoid/Creating Zotero translators|proposed to Zotero]]. The ISBN labels in the [[mw:Special:MyLanguage/Help:VisualEditor/User_guide/Citations-Full#Automatic|VisualEditor Automatic tab]] will reappear later this week. [https://phabricator.wikimedia.org/T336298#8859917]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The page [[{{#special:EditWatchlist}}]] now has "{{int:watchlistedit-normal-check-all}}" options to select all the pages within a namespace. This feature request was [[m:Community Wishlist Survey 2023/Notifications, Watchlists and Talk Pages/Watchlist edit - "check all" checkbox|voted #161 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334252]
'''Problems'''
* For a few days earlier this month, the "Add interlanguage link" item in the Tools menu did not work properly. This has now been fixed. [https://phabricator.wikimedia.org/T337081]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.11|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-30|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-31|en}}. It will be on all wikis from {{#time:j xg|2023-06-01|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* VisualEditor will be switched to a new backend on [https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/dblists/small.dblist small] and [https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/dblists/medium.dblist medium] wikis this week. Large wikis will follow in the coming weeks. This is part of the effort to move Parsoid into MediaWiki core. The change should have no noticeable effect on users, but if you experience any slow loading or other strangeness when using VisualEditor, please report it on the phabricator ticket linked here. [https://phabricator.wikimedia.org/T320529]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:04, 29 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25079963 -->
== Wikipedia translation of the week: 2023-23 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:pt:Alessandra Korap]]'''<br /> <small>''([[:en:Alessandra Korap]]) ''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Alessandra Korap''' is an indigenous leader and Brazilian environmental activist from the Munduruku ethnic group. Her main work is defending the demarcation of indigenous territory and denouncing the illegal exploitation and activities of the mining and logging industries. Alessandra is internationally recognized for her work.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:33, 5 June 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25111481 -->
== Tech News: 2023-23 ==
<section begin="technews-2023-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/23|Translations]] are available.
'''Recent changes'''
* The [[:mw:Special:MyLanguage/Help:Extension:RealMe|RealMe]] extension allows you to mark URLs on your user page as verified for Mastodon and similar software.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] Citation and footnote editing can now be started from the reference list when using the visual editor. This feature request was [[m:Community Wishlist Survey 2023/Citations/Allow citations to be edited in the references section with VisualEditor|voted #2 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T54750]
* Previously, clicking on someone else's link to Recent Changes with filters applied within the URL could unintentionally change your preference for "{{int:Rcfilters-group-results-by-page}}". This has now been fixed. [https://phabricator.wikimedia.org/T202916#8874081]
'''Problems'''
* For a few days last week, some tools and bots returned outdated information due to database replication problems, and may have been down entirely while it was being fixed. These issues have now been fixed. [https://phabricator.wikimedia.org/T337446]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.12|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-06-06|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-06-07|en}}. It will be on all wikis from {{#time:j xg|2023-06-08|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Bots will no longer be prevented from making edits because of URLs that match the [[mw:Special:MyLanguage/Extension:SpamBlacklist|spam blacklist]]. [https://phabricator.wikimedia.org/T313107]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:52, 5 June 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25114640 -->
== Wikipedia translation of the week: 2023-24 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cassinga Day]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Cassinga Day''' is a national public holiday in Namibia remembering the Cassinga Massacre. Commemorated annually on 4 May, the date "remembers those (approximately 600) killed in 1978 when the South African Defence Force attacked a SWAPO base at Cassinga in southern Angola".
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:07, 12 June 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25111481 -->
== Tech News: 2023-24 ==
<section begin="technews-2023-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/24|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The content attribution tools [[mw:Special:MyLanguage/Who Wrote That?|Who Wrote That?]], [[xtools:authorship|XTools Authorship]], and [[xtools:blame|XTools Blame]] now support the Dutch, German, Hungarian, Indonesian, Japanese, Polish and Portuguese Wikipedias. This was the [[m:Community Wishlist Survey 2023/Reading/Extend "Who Wrote That?" tool to more wikis|#7 wish in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334891]
* The [[mw:Special:MyLanguage/Structured Data Across Wikimedia/Search Improvements#Search Preview panel|Search Preview panel]] has been deployed on four Wikipedias (Catalan, Dutch, Hungarian and Norwegian). The panel will show an image related to the article (if existing), the top sections of the article, related images (coming from MediaSearch on Commons), and eventually the sister projects associated with the article. [https://phabricator.wikimedia.org/T306341]
* The [[:mw:Special:MyLanguage/Help:Extension:RealMe#Verifying_a_link_on_non-user_pages|RealMe]] extension now allows administrators to verify URLs for any page, for Mastodon and similar software. [https://phabricator.wikimedia.org/T324937]
* The default project license [https://lists.wikimedia.org/hyperkitty/list/wikimediaannounce-l@lists.wikimedia.org/thread/7G6XPWZPQFLZ2JANN3ZX6RT4DVUI3HZQ/ has been officially upgraded] to CC BY-SA 4.0. The software interface messages have been updated. Communities should feel free to start updating any mentions of the old CC BY-SA 3.0 licensing within policies and related documentation pages. [https://phabricator.wikimedia.org/T319064]
'''Problems'''
* For three days last month, some Wikipedia pages edited with VisualEditor or DiscussionTools had an unintended <code><nowiki>__TOC__</nowiki></code> (or its localized form) added during an edit. There is [[mw:Parsoid/Deployments/T336101_followup|a listing of affected pages sorted by wiki]], that may still need to be fixed. [https://phabricator.wikimedia.org/T336101]
* Currently, the "{{int:Visualeditor-dialog-meta-categories-defaultsort-label}}" feature in VisualEditor is broken. Existing <code><nowiki>{{DEFAULTSORT:...}}</nowiki></code> keywords incorrectly appear as missing templates in VisualEditor. Developers are exploring how to fix this. In the meantime, those wishing to edit the default sortkey of a page are advised to switch to source editing. [https://phabricator.wikimedia.org/T337398]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Last week, an update to the delete form may have broken some gadgets or user scripts. If you need to manipulate (empty) the reason field, replace <bdi lang="zxx" dir="ltr"><code>#wpReason</code></bdi> with <bdi lang="zxx" dir="ltr" style="white-space: nowrap;"><code>#wpReason > input</code></bdi>. See [https://cs.wikipedia.org/w/index.php?title=MediaWiki%3AGadget-CleanDeleteReasons.js&diff=22859956&oldid=12794189 an example fix]. [https://phabricator.wikimedia.org/T337809]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.13|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-06-13|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-06-14|en}}. It will be on all wikis from {{#time:j xg|2023-06-15|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* VisualEditor will be switched to a new backend on English Wikipedia on Monday, and all other [https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/dblists/large.dblist large] wikis on Thursday. The change should have no noticeable effect on users, but if you experience any slow loading or other strangeness when using VisualEditor, please report it on the phabricator ticket linked here. [https://phabricator.wikimedia.org/T320529]
'''Future changes'''
* From 5 June to 17 July, the Foundation's [[:mw:Wikimedia Security Team|Security team]] is holding a consultation with contributors regarding a draft policy to govern the use of third-party resources in volunteer-developed gadgets and scripts. Feedback and suggestions are warmly welcome at [[m:Special:MyLanguage/Third-party resources policy|Third-party resources policy]] on meta-wiki.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:52, 12 June 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25133779 -->
== Tech News: 2023-25 ==
<section begin="technews-2023-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/25|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Flame graphs are now available in WikimediaDebug. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/JXNQD3EHG5V5QW5UXFDPSHQG4MJ3FWJQ/][https://techblog.wikimedia.org/2023/06/08/flame-graphs-arrive-in-wikimediadebug/]
'''Changes later this week'''
* There is no new MediaWiki version this week.
* There is now a toolbar search popup in the visual editor. You can trigger it by typing <code>\</code> or pressing <code>ctrl + shift + p</code>. It can help you quickly access most tools in the editor. [https://commons.wikimedia.org/wiki/File:Visual_editor_toolbar_search_feature.png][https://phabricator.wikimedia.org/T66905]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:09, 19 June 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25159510 -->
== Wikipedia translation of the week: 2023-26 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Rawon]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Rawon Setan.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Rawon''' (Javanese: ꦫꦮꦺꦴꦤ꧀) is an Indonesian beef soup. Originating from East Java, rawon utilizes the black keluak nut as the main seasoning, which gives a dark color and nutty flavor to the soup.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:18, 26 June 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25177056 -->
== Tech News: 2023-26 ==
<section begin="technews-2023-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/26|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Action API modules and Special:LinkSearch will now add a trailing <bdi lang="zxx" dir="ltr"><code>/</code></bdi> to all <bdi lang="zxx" dir="ltr"><code>prop=extlinks</code></bdi> responses for bare domains. This is part of the work to remove duplication in the <code>externallinks</code> database table. [https://phabricator.wikimedia.org/T337994]
'''Problems'''
* Last week, search was broken on Commons and Wikidata for 23 hours. [https://phabricator.wikimedia.org/T339810][https://wikitech.wikimedia.org/wiki/Incidents/2023-06-18_search_broken_on_wikidata_and_commons]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.15|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-06-27|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-06-28|en}}. It will be on all wikis from {{#time:j xg|2023-06-29|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Minerva skin now applies more predefined styles to the <bdi lang="zxx" dir="ltr"><code>.mbox-text</code></bdi> CSS class. This enables support for mbox templates that use divs instead of tables. Please make sure that the new styles won't affect other templates in your wiki. [https://gerrit.wikimedia.org/r/c/mediawiki/skins/MinervaNeue/+/930901/][https://phabricator.wikimedia.org/T339040]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Gadgets will now load on both desktop and mobile by default. Previously, gadgets loaded only on desktop by default. Changing this default using the <bdi lang="zxx" dir="ltr"><code>|targets=</code></bdi> parameter is also deprecated and should not be used. You should make gadgets work on mobile or disable them based on the skin (with the <bdi lang="zxx" dir="ltr"><code>|skins=</code></bdi> parameter in <bdi lang="en" dir="ltr">MediaWiki:Gadgets-definition</bdi>) rather than whether the user uses the mobile or the desktop website. Popular gadgets that create errors on mobile will be disabled by developers on the Minerva skin as a temporary solution. [https://phabricator.wikimedia.org/T127268]
* All namespace tabs now have the same browser [[m:Special:MyLanguage/Help:Keyboard_shortcuts|access key]] by default. Previously, custom and extension-defined namespaces would have to have their access keys set manually on-wiki, but that is no longer necessary. [https://phabricator.wikimedia.org/T22126]
* The review form of the Flagged Revisions extension now uses the standardized [[mw:Special:MyLanguage/Codex|user interface components]]. [https://phabricator.wikimedia.org/T191156]
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] How media is structured in the parser's HTML output will change in the coming weeks at [[:wikitech:Deployments/Train#Thursday|group2 wikis]]. This change improves the accessibility of content. You may need to update your site-CSS, or userscripts and gadgets. There are [[mw:Special:MyLanguage/Parsoid/Parser_Unification/Media_structure/FAQ|details on what code to check, how to update the code, and where to report any related problems]]. [https://phabricator.wikimedia.org/T314318]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:19, 26 June 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25202311 -->
== Wikipedia translation of the week: 2023-27 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Hook echo]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Tornadic classic supercell radar.gif|center|300px]]
<div style="text-align:left; padding: .4em;">
A '''hook echo''' is a pendant or hook-shaped weather radar signature as part of some supercell thunderstorms. It is found in the lower portions of a storm as air and precipitation flow into a mesocyclone, resulting in a curved feature of reflectivity. The echo is produced by rain, hail, or even debris being wrapped around the supercell
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:18, 3 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25241057 -->
== Tech News: 2023-27 ==
<section begin="technews-2023-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/27|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the rolling out of the [[m:Community Wishlist Survey 2022/Multimedia and Commons/Audio links that play on click|audio links that play on click]] wishlist proposal, [https://noc.wikimedia.org/conf/highlight.php?file=dblists/small.dblist small wikis] will now be able to use the [[mw:Special:MyLanguage/Help:Extension:Phonos#Inline audio player mode|inline audio player]] that is implemented by the [[mw:Extension:Phonos|Phonos]] extension. [https://phabricator.wikimedia.org/T336763]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] From this week all gadgets automatically load on mobile and desktop sites. If you see any problems with gadgets on your wikis, please adjust the [[mw:Special:MyLanguage/Extension:Gadgets#Options|gadget options]] in your gadget definitions file. [https://phabricator.wikimedia.org/T328610]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.16|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-04|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-05|en}}. It will be on all wikis from {{#time:j xg|2023-07-06|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:51, 3 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25231546 -->
== Tech News: 2023-28 ==
<section begin="technews-2023-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/28|Translations]] are available.
'''Recent changes'''
* The [[:mw:Special:MyLanguage/Structured Data Across Wikimedia/Section-level Image Suggestions|Section-level Image Suggestions feature]] has been deployed on seven Wikipedias (Portuguese, Russian, Indonesian, Catalan, Hungarian, Finnish and Norwegian Bokmål). The feature recommends images for articles on contributors' watchlists that are a good match for individual sections of those articles.
* [[:m:Special:MyLanguage/Global AbuseFilter|Global abuse filters]] have been enabled on all Wikimedia projects, except English and Japanese Wikipedias (who opted out). This change was made following a [[:m:Requests for comment/Make global abuse filters opt-out|global request for comments]]. [https://phabricator.wikimedia.org/T341159]
* [[{{#special:BlockedExternalDomains}}]] is a new tool for administrators to help fight spam. It provides a clearer interface for blocking plain domains (and their subdomains), is more easily searchable, and is faster for the software to process for each edit on the wiki. It does not support regex (for complex cases), nor URL path-matching, nor the [[MediaWiki:Spam-whitelist|MediaWiki:Spam-whitelist]], but otherwise it replaces most of the functionalities of the existing [[MediaWiki:Spam-blacklist|MediaWiki:Spam-blacklist]]. There is a Python script to help migrate all simple domains into this tool, and more feature details, within [[mw:Special:MyLanguage/Manual:BlockedExternalDomains|the tool's documentation]]. It is available at all wikis except for Meta-wiki, Commons, and Wikidata. [https://phabricator.wikimedia.org/T337431]
* The WikiEditor extension was updated. It includes some of the most frequently used features of wikitext editing. In the past, many of its messages could only be translated by administrators, but now all regular translators on translatewiki can translate them. Please check [https://translatewiki.net/wiki/Special:MessageGroupStats?group=ext-wikieditor&messages=&x=D#sortable:0=asc the state of WikiEditor localization into your language], and if the "Completion" for your language shows anything less than 100%, please complete the translation. See [https://lists.wikimedia.org/hyperkitty/list/wikitech-ambassadors@lists.wikimedia.org/thread/D4YELU2DXMZ75PGELUOKXXMFF3FH45XA/ a more detailed explanation].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.17|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-11|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-12|en}}. It will be on all wikis from {{#time:j xg|2023-07-13|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* The default protocol of [[{{#special:LinkSearch}}]] and API counterparts has changed from http to both http and https. [https://phabricator.wikimedia.org/T14810]
* [[{{#special:LinkSearch}}]] and its API counterparts will now search for all of the URL provided in the query. It used to be only the first 60 characters. This feature was requested fifteen years ago. [https://phabricator.wikimedia.org/T17218]
'''Future changes'''
* There is an experiment with a [[:w:en:ChatGPT|ChatGPT]] plugin. This is to show users where the information is coming from when they read information from Wikipedia. It has been tested by Wikimedia Foundation staff and other Wikimedians. Soon all ChatGPT plugin users can use the Wikipedia plugin. This is the same plugin which was mentioned in [[m:Special:MyLanguage/Tech/News/2023/20|Tech News 2023/20]]. [https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Annual_Plan/2023-2024/Draft/Future_Audiences#FA2.2_Conversational_AI]
* There is an ongoing discussion on a [[m:Special:MyLanguage/Third-party resources policy|proposed Third-party resources policy]]. The proposal will impact the use of third-party resources in gadgets and userscripts. Based on the ideas received so far, policy includes some of the risks related to user scripts and gadgets loading third-party resources, some best practices and exemption requirements such as code transparency and inspectability. Your feedback and suggestions are warmly welcome until July 17, 2023 on [[m:Talk:Third-party resources policy|on the policy talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W28"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:54, 10 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25278797 -->
== Wikipedia translation of the week: 2023-29 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Esther Cooper Jackson]]'''<br /> <small>''([[:fr:Esther Cooper Jackson]]) ([[:simple:Esther Cooper Jackson]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Esther Cooper Jackson, 1968, Great Barrington.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Esther Victoria Cooper Jackson''' was an American civil rights activist and social worker. She was one of the founding editors of the magazine Freedomways. She also was an organizational and executive secretary at the Southern Negro Youth Congress.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:14, 17 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25266525 -->
== Tech News: 2023-29 ==
<section begin="technews-2023-W29"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/29|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] We are now serving 1% of all global user traffic from [[w:en:Kubernetes|Kubernetes]] (you can [[wikitech:MediaWiki On Kubernetes|read more technical details]]). We are planning to increment this percentage regularly. You can [[phab:T290536|follow the progress of this work]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.18|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-18|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-19|en}}. It will be on all wikis from {{#time:j xg|2023-07-20|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] MediaWiki [[mw:Special:MyLanguage/Help:System_message|system messages]] will now look for available local fallbacks, instead of always using the default fallback defined by software. This means wikis no longer need to override each language on the [[mw:Special:MyLanguage/Manual:Language#Fallback_languages|fallback chain]] separately. For example, English Wikipedia doesn't have to create <bdi lang="zxx" dir="ltr"><code>en-ca</code></bdi> and <bdi lang="zxx" dir="ltr"><code>en-gb</code></bdi> subpages with a transclusion of the base pages anymore. This makes it easier to maintain local overrides. [https://phabricator.wikimedia.org/T229992]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The <bdi lang="zxx" dir="ltr"><code>action=growthsetmentorstatus</code></bdi> API will be deprecated with the new MediaWiki version. Bots or scripts calling that API should use the <bdi lang="zxx" dir="ltr"><code>action=growthmanagementorlist</code></bdi> API now. [https://phabricator.wikimedia.org/T321503]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/29|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:08, 17 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25289122 -->
== Wikipedia translation of the week: 2023-30 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cut of pork]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:American Pork Cuts.svg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''cuts of pork''' are the different parts of the pig which are consumed as food by humans. The terminology and extent of each cut varies from country to country. There are between four and six primal cuts, which are the large parts in which the pig is first cut: the shoulder (blade and picnic), loin, belly (spare ribs and side) and leg
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:21, 24 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25318972 -->
== Tech News: 2023-30 ==
<section begin="technews-2023-W30"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/30|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] On July 18, the Wikimedia Foundation launched a survey about the [[:mw:Technical_decision_making|technical decision making process]] for people who do technical work that relies on software that is maintained by the Foundation or affiliates. If this applies to you, [https://wikimediafoundation.limesurvey.net/885471 please take part in the survey]. The survey will be open for three weeks, until August 7. You can find more information in [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/Q7DUCFA75DXG3G2KHTO7CEWMLCYTSDB2/|the announcement e-mail on wikitech-l]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.19|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-25|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-26|en}}. It will be on all wikis from {{#time:j xg|2023-07-27|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/30|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:20, 25 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25332248 -->
== Wikipedia translation of the week: 2023-31 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Gunhild Cross]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Gunhildkorset.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Gunhild Cross''' (Danish: Gunhildkorset), named for its first owner, Gunhild, a daughter of Svend III of Denmark, is a mid-12th-century crucifix carved in walrus tusk and with both Latin and Runic inscriptions. It is now in the collection of the National Museum of Denmark.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:48, 31 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25380210 -->
== Tech News: 2023-31 ==
<section begin="technews-2023-W31"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/31|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[mw:Synchronizer|Synchronizer]] tool is now available to keep Lua modules synced across Wikimedia wikis, along with [[mw:Multilingual Templates and Modules|updated documentation]] to develop global Lua modules and templates.
* The tag filter on [[{{#special:NewPages}}]] and revision history pages can now be inverted. For example, you can hide edits that were made using an automated tool. [https://phabricator.wikimedia.org/T334337][https://phabricator.wikimedia.org/T334338]
* The Wikipedia [[:w:en:ChatGPT|ChatGPT]] plugin experiment can now be used by ChatGPT users who can use plugins. You can participate in a [[:m:Talk:Wikimedia Foundation Annual Plan/2023-2024/Draft/Future Audiences#Announcing monthly Future Audiences open "office hours"|video call]] if you want to talk about this experiment or similar work. [https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Annual_Plan/2023-2024/Draft/Future_Audiences#FA2.2_Conversational_AI]
'''Problems'''
* It was not possible to generate a PDF for pages with non-Latin characters in the title, for the last two weeks. This has now been fixed. [https://phabricator.wikimedia.org/T342442]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.20|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-01|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-02|en}}. It will be on all wikis from {{#time:j xg|2023-08-03|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Tuesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-kawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kaawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kabwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kbdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kbpwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-knwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kshwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kuwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kwwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308135]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/31|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:54, 31 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25362228 -->
== Wikipedia translation of the week: 2023-32 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Polyura athamas]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Close wing mud-puddling position of Charaxes bharata (C.& R. Felder,1867) - Indian Nawab.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''''Polyura athamas''''', the common nawab, is a species of fast-flying canopy butterfly found in tropical Asia. It belongs to the Charaxinae (rajahs and nawabs) in the brush-footed butterfly family (Nymphalidae).
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 03:14, 7 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25410866 -->
== Tech News: 2023-32 ==
<section begin="technews-2023-W32"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/32|Translations]] are available.
'''Recent changes'''
* Mobile Web editors can now [[mw:Special:MyLanguage/Reading/Web/Advanced_mobile_contributions#August_1,_2023_-_Full-page_editing_added_on_mobile|edit a whole page at once]]. To use this feature, turn on "{{int:Mobile-frontend-mobile-option-amc}}" in your settings and use the "{{int:Minerva-page-actions-editfull}}" button in the "{{int:Minerva-page-actions-overflow}}" menu. [https://phabricator.wikimedia.org/T203151]
'''Changes later this week'''
* There is no new MediaWiki version this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/32|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:21, 7 August 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25420038 -->
== Wikipedia translation of the week: 2023-33 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Women's page]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:"Doings in Pittsburg Society" The Pittsburg Press February 1, 1920.png|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''women's page''' (sometimes called home page or women's section) of a newspaper was a section devoted to covering news assumed to be of interest to women. Women's pages started out in the 19th century as society pages and eventually morphed into features sections in the 1970s. Although denigrated during much of that period, they had a significant impact on journalism and in their communities.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:51, 14 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-33 ==
<section begin="technews-2023-W33"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/33|Translations]] are available.
'''Recent changes'''
* The Content translation system is no longer using Youdao's [[mw:Special:MyLanguage/Help:Content_translation/Translating/Initial_machine_translation|machine translation service]]. The service was in place for several years, but due to no usage, and availability of alternatives, it was deprecated to reduce maintenance overheads. Other services which cover the same languages are still available. [https://phabricator.wikimedia.org/T329137]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.22|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-15|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-16|en}}. It will be on all wikis from {{#time:j xg|2023-08-17|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-lawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ladwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lbewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lezwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lfnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-liwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lijwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lmowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ltgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-maiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-map_bmswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mdfwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kywiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308136] <!-- TODO replace wiki codes -->
'''Future changes'''
* A few gadgets/user scripts which add icons to the Minerva skin need to have their CSS updated. There are more details available including a [[phab:T344067|search for all existing instances and how to update them]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/33|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 06:00, 15 August 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25428668 -->
== Wikipedia translation of the week: 2023-34 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Insect toxin]]'''<br /> <small>''([[:de:Insektengift]])''</small> </div>
Please be bold and help translate this article!
----
[[File:PDB 1lmr EBI.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Insect toxins''' are various protein toxins produced by insect species.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:32, 21 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-34 ==
<section begin="technews-2023-W34"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/34|Translations]] are available.
'''Recent changes'''
* The [https://gdrive-to-commons.toolforge.org/ GDrive to Commons Uploader] tool is now available. It enables [[m:Special:MyLanguage/GDrive to Commons Uploader|securely selecting and uploading files]] from your Google Drive directly to Wikimedia Commons. [https://phabricator.wikimedia.org/T267868]
* From now on, we will announce new Wikimedia wikis in Tech News, so you can update any tools or pages.
** Since the last edition, two new wikis have been created:
*** a Wiktionary in [[d:Q7121294|Pa'O]] ([[wikt:blk:|<code>wikt:blk:</code>]]) [https://phabricator.wikimedia.org/T343540]
*** a Wikisource in [[d:Q34002|Sundanese]] ([[s:su:|<code>s:su:</code>]]) [https://phabricator.wikimedia.org/T343539]
** To catch up, the next most recent six wikis are:
*** Wikifunctions ([[f:|<code>f:</code>]]) [https://phabricator.wikimedia.org/T275945]
*** a Wiktionary in [[d:Q2891049|Mandailing]] ([[wikt:btm:|<code>wikt:btm:</code>]]) [https://phabricator.wikimedia.org/T335216]
*** a Wikipedia in [[d:Q5555465|Ghanaian Pidgin]] ([[w:gpe:|<code>w:gpe:</code>]]) [https://phabricator.wikimedia.org/T335969]
*** a Wikinews in [[d:Q3111668|Gungbe]] ([[n:guw:|<code>n:guw:</code>]]) [https://phabricator.wikimedia.org/T334394]
*** a Wiktionary in [[d:Q33522|Kabardian]] ([[wikt:kbd:|<code>wikt:kbd:</code>]]) [https://phabricator.wikimedia.org/T333266]
*** a Wikipedia in [[d:Q35570|Fante]] ([[w:fat:|<code>w:fat:</code>]]) [https://phabricator.wikimedia.org/T335016]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-22|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-23|en}}. It will be on all wikis from {{#time:j xg|2023-08-24|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] There is an existing [[mw:Stable interface policy|stable interface policy]] for MediaWiki backend code. There is a [[mw:User:Jdlrobson/Stable interface policy/frontend|proposed stable interface policy for frontend code]]. This is relevant for anyone who works on gadgets or Wikimedia frontend code. You can read it, discuss it, and let the proposer know if there are any problems. [https://phabricator.wikimedia.org/T344079]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/34|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W34"/>
15:25, 21 August 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25497111 -->
== Wikipedia translation of the week: 2023-35 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Manchester Blitz]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Air Raid Damage in Britain- Manchester HU49833.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Manchester Blitz''' (also known as the Christmas Blitz) was the heavy bombing of the city of Manchester and its surrounding areas in North West England during the Second World War by the German Luftwaffe.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:16, 28 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-35 ==
<section begin="technews-2023-W35"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/35|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the changes for the [[m:Community Wishlist Survey 2022/Better diff handling of paragraph splits|better diff handling of paragraph splits]], improved detection of splits is being rolled out. Over the last two weeks, we deployed this support to [[wikitech:Deployments/Train#Groups|group0]] and group1 wikis. This week it will be deployed to group2 wikis. [https://phabricator.wikimedia.org/T341754]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] All [[{{#special:Contributions}}]] pages now show the user's local edit count and the account's creation date. [https://phabricator.wikimedia.org/T324166]
* Wikisource users can now use the <bdi lang="zxx" dir="ltr"><code>prpbengalicurrency</code></bdi> label to denote Bengali currency characters as page numbers inside the <bdi lang="zxx" dir="ltr"><code><nowiki><pagelist></nowiki></code></bdi> tag. [https://phabricator.wikimedia.org/T268932]
* Two preferences have been relocated. The preference "{{int:visualeditor-preference-visualeditor}}" is now shown on the [[Special:Preferences#mw-prefsection-editing|"{{int:prefs-editing}}" tab]] at all wikis. Previously it was shown on the "{{int:prefs-betafeatures}}" tab at some wikis. The preference "{{int:visualeditor-preference-newwikitexteditor-enable}}" is now also shown on the "{{int:prefs-editing}}" tab at all wikis, instead of the "{{int:prefs-betafeatures}}" tab. [https://phabricator.wikimedia.org/T335056][https://phabricator.wikimedia.org/T344158]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.24|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-29|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-30|en}}. It will be on all wikis from {{#time:j xg|2023-08-31|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] New signups for a Wikimedia developer account will start being pushed towards <bdi lang="en" dir="ltr">[https://idm.wikimedia.org/ idm.wikimedia.org]</bdi>, rather than going via Wikitech. [[wikitech:IDM|Further information about the new system is available]].
* All right-to-left language wikis, plus Korean, Armenian, Ukrainian, Russian, and Bulgarian Wikipedias, will have a link in the sidebar that provides a short URL of that page, using the [[m:Special:MyLanguage/Wikimedia URL Shortener|Wikimedia URL Shortener]]. This feature will come to more wikis in future weeks. [https://phabricator.wikimedia.org/T267921]
'''Future changes'''
* The removal of the [[mw:Special:MyLanguage/Extension:DoubleWiki|DoubleWiki extension]] is being discussed. This extension currently allows Wikisource users to view articles from multiple language versions side by side when the <bdi lang="zxx" dir="ltr"><code><=></code></bdi> symbol next to a specific language edition is selected. Comments on this are welcomed at [[phab:T344544|the phabricator task]].
* A proposal has been made to merge the second hidden-categories list (which appears below the wikitext editing form) with the main list of categories (which is further down the page). [[phab:T340606|More information is available on Phabricator]]; feedback is welcome!
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/35|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:00, 28 August 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25510866 -->
== Wikipedia translation of the week: 2023-36 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ghana Independence Act 1957]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
The '''Ghana Independence Act 1957''' is an Act of the Parliament of the United Kingdom that granted the Gold Coast fully responsible government within the British Commonwealth of Nations under the name of Ghana
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:18, 4 September 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-36 ==
<section begin="technews-2023-W36"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/36|Translations]] are available.
'''Recent changes'''
* [[m:Wikisource_EditInSequence|EditInSequence]], a feature that allows users to edit pages faster on Wikisource has been moved to a Beta Feature based on community feedback. To enable it, you can navigate to the [[Special:Preferences#mw-prefsection-betafeatures|beta features tab in Preferences]]. [https://phabricator.wikimedia.org/T308098]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the changes for the [[m:Special:MyLanguage/Community Wishlist Survey 2022/Generate Audio for IPA|Generate Audio for IPA]] and [[m:Community Wishlist Survey 2022/Multimedia and Commons/Audio links that play on click|Audio links that play on click]] wishlist proposals, the [[mw:Special:MyLanguage/Help:Extension:Phonos#Inline_audio_player_mode|inline audio player mode]] of [[mw:Extension:Phonos|Phonos]] has been deployed to all projects. [https://phabricator.wikimedia.org/T336763]
* There is a new option for Administrators when they are changing the usergroups for a user, to add the user’s user page to their watchlist. This works both via [[{{#special:UserRights}}]] and via the API. [https://phabricator.wikimedia.org/T272294]
* One new wiki has been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q34318|Talysh]] ([[w:tly:|<code>w:tly:</code>]]) [https://phabricator.wikimedia.org/T345166]
'''Problems'''
* The [[mw:Special:MyLanguage/Extension:LoginNotify|LoginNotify extension]] was not sending notifications since January. It has now been fixed, so going forward, you may see notifications for failed login attempts, and successful login attempts from a new device. [https://phabricator.wikimedia.org/T344785]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.25|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-05|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-06|en}}. It will be on all wikis from {{#time:j xg|2023-09-07|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-mhrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-miwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-minwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mrjwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mtwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mwlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-myvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mznwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nahwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-napwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ndswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nds_nlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-newiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-newwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-novwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nqowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nrmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nsowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ocwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-olowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-omwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-orwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-oswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pagwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pamwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-papwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pcdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pdcwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pflwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pihwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pmswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pnbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pntwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pswiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308137][https://phabricator.wikimedia.org/T308138]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/36|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:34, 4 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25566983 -->
== Wikipedia translation of the week: 2023-37 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Betrayal trauma]]'''<br /> <small>''([[:sv:Svektrauma]]) ([[:ar:صدمة الخيانة]]) ([[:ko:배신 트라우마]])''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Betrayal trauma''' is defined as a trauma perpetrated by someone with whom the victim is close to and reliant upon for support and survival.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:49, 11 September 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-37 ==
<section begin="technews-2023-W37"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/37|Translations]] are available.
'''Recent changes'''
* [[mw:Special:MyLanguage/ORES|ORES]], the revision evaluation service, is now using a new open-source infrastructure on all wikis except for English Wikipedia and Wikidata. These two will follow this week. If you notice any unusual results from the Recent Changes filters that are related to ORES (for example, "{{int:ores-rcfilters-damaging-title}}" and "{{int:ores-rcfilters-goodfaith-title}}"), please [[mw:Talk:Machine Learning|report them]]. [https://phabricator.wikimedia.org/T342115]
* When you are logged in on one Wikimedia wiki and visit a different Wikimedia wiki, the system tries to log you in there automatically. This has been unreliable for a long time. You can now visit the login page to make the system try extra hard. If you feel that made logging in better or worse than it used to be, your feedback is appreciated. [https://phabricator.wikimedia.org/T326281]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.26|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-12|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-13|en}}. It will be on all wikis from {{#time:j xg|2023-09-14|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[mw:Special:MyLanguage/Technical decision making|Technical Decision-Making Forum Retrospective]] team invites anyone involved in the technical field of Wikimedia projects to signup to and join [[mw:Technical decision making/Listening Sessions|one of their listening sessions]] on 13 September. Another date will be scheduled later. The goal is to improve the technical decision-making processes.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the changes for the [[m:Special:MyLanguage/Community Wishlist Survey 2022/Better diff handling of paragraph splits|Better diff handling of paragraph splits]] wishlist proposal, the inline switch widget in diff pages is being rolled out this week to all wikis. The inline switch will allow viewers to toggle between a unified inline or two-column diff wikitext format. [https://phabricator.wikimedia.org/T336716]
'''Future changes'''
* All wikis will be read-only for a few minutes on 20 September. [[m:Special:MyLanguage/Tech/Server switch|This is planned at 14:00 UTC.]] More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T345263]
* The Enterprise API is launching a new feature called "[http://breakingnews-beta.enterprise.wikimedia.com/ breaking news]". Currently in BETA, this attempts to identify likely "newsworthy" topics as they are currently being written about in any Wikipedia. Your help is requested to improve the accuracy of its detection model, especially on smaller language editions, by recommending templates or identifiable editing patterns. See more information at [[mw:Special:MyLanguage/Wikimedia Enterprise/Breaking news|the documentation page]] on MediaWiki or [[m:Special:MyLanguage/Wikimedia Enterprise/FAQ#What is Breaking News|the FAQ]] on Meta.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/37|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:08, 11 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25589064 -->
== Wikipedia translation of the week: 2023-38 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:es:Genocidio del Putumayo]]'''<br /> <small>''([[:en:Putumayo genocide]]) ([[:ca:Genocidi del Putumayo]])''</small></div>
Please be bold and help translate this article!
----
[[File:The Putumayo - the devil's paradise, travels in the Peruvian Amazon Region and an account of the atrocities committed upon the Indians therein (1913) (14782203995).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Putumayo genocide''' is the term which is used in reference to the enslavement, massacres and ethnocide of the indigenous population of the Amazon at the hands of the Peruvian Amazon Company, specifically in the area between the Putumayo River and the Caquetá River during the Amazon rubber boom period from 1879 to 1912.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 03:38, 18 September 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25599361 -->
== Tech News: 2023-38 ==
<section begin="technews-2023-W38"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/38|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] MediaWiki now has a [[mw:Stable interface policy/frontend|stable interface policy for frontend code]] that more clearly defines how we deprecate MediaWiki code and wiki-based code (e.g. gadgets and user scripts). Thank you to everyone who contributed to the content and discussions. [https://phabricator.wikimedia.org/T346467][https://phabricator.wikimedia.org/T344079]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.27|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-19|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-20|en}}. It will be on all wikis from {{#time:j xg|2023-09-21|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* All wikis will be read-only for a few minutes on September 20. [[m:Special:MyLanguage/Tech/Server switch|This is planned at 14:00 UTC.]] [https://phabricator.wikimedia.org/T345263]
* All wikis will have a link in the sidebar that provides a short URL of that page, using the [[m:Special:MyLanguage/Wikimedia URL Shortener|Wikimedia URL Shortener]]. [https://phabricator.wikimedia.org/T267921]
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The team investigating the Graph Extension posted [[mw:Extension:Graph/Plans#Proposal|a proposal for reenabling it]] and they need your input.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/38|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:20, 18 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25623533 -->
== Tech News: 2023-39 ==
<section begin="technews-2023-W39"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/39|Translations]] are available.
'''Recent changes'''
* The Vector 2022 skin will now remember the pinned/unpinned status for the Table of Contents for all logged-out users. [https://phabricator.wikimedia.org/T316060]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.28|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-26|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-27|en}}. It will be on all wikis from {{#time:j xg|2023-09-28|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The ResourceLoader <bdi lang="zxx" dir="ltr"><code><nowiki>mediawiki.ui</nowiki></code></bdi> modules are now deprecated as part of the move to Vue.js and Codex. There is a [[mw:Codex/Migrating_from_MediaWiki_UI|guide for migrating from MediaWiki UI to Codex]] for any tools that use it. More [[phab:T346468|details are available in the task]] and your questions are welcome there.
* Gadget definitions will have a [[mw:Special:MyLanguage/Extension:Gadgets#Options|new "namespaces" option]]. The option takes a list of namespace IDs. Gadgets that use this option will only load on pages in the given namespaces.
'''Future changes'''
* New variables will be added to [[mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilter]]: <code><bdi lang="zxx" dir="ltr">global_account_groups</bdi></code> and <code><bdi lang="zxx" dir="ltr">global_account_editcount</bdi></code>. They are available only when an account is being created. You can use them to prevent blocking automatic creation of accounts when users with many edits elsewhere visit your wiki for the first time. [https://phabricator.wikimedia.org/T345632][https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:AbuseFilter/Rules_format]
'''Meetings'''
* You can join the next meeting with the Wikipedia mobile apps teams. During the meeting, we will discuss the current features and future roadmap. The meeting will be on [https://zonestamp.toolforge.org/1698426015 27 October at 17:00 (UTC)]. See [[mw:Special:MyLanguage/Wikimedia_Apps/Office_Hours#October_2023|details and how to join]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/39|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:51, 26 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25655264 -->
== Tech News: 2023-40 ==
<section begin="technews-2023-W40"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/40|Translations]] are available.
'''Recent changes'''
* There is a new [[Special:Preferences#mw-prefsection-rendering-advancedrendering|user preference]] for "{{int:tog-forcesafemode}}". This setting will make pages load without including any on-wiki JavaScript or on-wiki stylesheet pages. It can be useful for debugging broken JavaScript gadgets. [https://phabricator.wikimedia.org/T342347]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Gadget definitions now have a [[mw:Special:MyLanguage/Extension:Gadgets#Options|new "<var>contentModels</var>" option]]. The option takes a list of page content models, like <code><bdi lang="zxx" dir="ltr">wikitext</bdi></code> or <code><bdi lang="zxx" dir="ltr">css</bdi></code>. Gadgets that use this option will only load on pages with the given content models.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.29|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-03|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-04|en}}. It will be on all wikis from {{#time:j xg|2023-10-05|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Vector 2022 skin will no longer use the custom styles and scripts of Vector legacy (2010). The change will be made later this year or in early 2024. See [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Features/Loading Vector 2010 scripts|how to adjust the CSS and JS pages on your wiki]]. [https://phabricator.wikimedia.org/T331679]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/40|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:27, 3 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25686930 -->
== Tech News: 2023-41 ==
<section begin="technews-2023-W41"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/41|Translations]] are available.
'''Recent changes'''
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q33291|Fon]] ([[w:fon:|<code>w:fon:</code>]]) [https://phabricator.wikimedia.org/T347935]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.30|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-10|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-11|en}}. It will be on all wikis from {{#time:j xg|2023-10-12|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-swwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-wawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-warwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-wowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-xalwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-xhwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-xmfwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-yiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-yowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zeawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zh_min_nanwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zuwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308139]
* At some wikis, newcomers are suggested images from Commons to add to articles without any images. Starting on Tuesday, newcomers at these wikis will be able to add images to unillustrated article sections. The specific wikis are listed under "Images recommendations" [[mw:Special:MyLanguage/Growth/Deployment table|at the Growth team deployment table]]. You can [[mw:Special:MyLanguage/Help:Growth/Tools/Add an image|learn more about this feature.]] [https://phabricator.wikimedia.org/T345940]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] In the mobile web skin (Minerva) the CSS ID <bdi lang="zxx" dir="ltr"><code><nowiki>#page-actions</nowiki></code></bdi> will be replaced with <bdi lang="zxx" dir="ltr"><code><nowiki>#p-views</nowiki></code></bdi>. This change is to make it consistent with other skins and to improve support for gadgets and extensions in the mobile skin. A few gadgets may need to be updated; there are [https://phabricator.wikimedia.org/T348267 details and search-links in the task].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/41|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W41"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:39, 9 October 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25712895 -->
== Wikipedia translation of the week: 2023-42 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Athyma nefte]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:VB 019 Color Sergeant UP.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''''Athyma nefte''''', the colour sergeant, is a species of brush-footed butterfly found in tropical South and Southeast Asia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:58, 16 October 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25693965 -->
== Tech News: 2023-42 ==
<section begin="technews-2023-W42"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/42|Translations]] are available.
'''Recent changes'''
* The [[m:Special:MyLanguage/Help:Unified login|Unified login]] system's edge login should now be fixed for some browsers (Chrome, Edge, Opera). This means that if you visit a new sister project wiki, you should be logged in automatically without the need to click "Log in" or reload the page. Feedback on whether it's working for you is welcome. [https://phabricator.wikimedia.org/T347889]
* [[mw:Special:MyLanguage/Manual:Interface/Edit_notice|Edit notices]] are now available within the MobileFrontend/Minerva skin. This feature was inspired by [[w:en:Wikipedia:EditNoticesOnMobile|the gadget on English Wikipedia]]. See more details in [[phab:T316178|T316178]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.1|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-17|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-18|en}}. It will be on all wikis from {{#time:j xg|2023-10-19|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* In 3 weeks, in the Vector 2022 skin, code related to <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>#p-namespaces</nowiki></code></bdi> that was deprecated one year ago will be removed. If you notice tools that should appear next to the "Discussion" tab are then missing, please tell the gadget's maintainers to see [[phab:T347907|instructions in the Phabricator task]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/42|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:47, 16 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25745824 -->
== Wikipedia translation of the week: 2023-43 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Typhoon Rusa]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Rusa 2002-08-27 0350Z.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Typhoon Rusa''' was the most powerful typhoon to strike South Korea in 43 years. It was the 21st JTWC tropical depression, the 15th named storm, and the 10th typhoon of the 2002 Pacific typhoon season. It developed on August 22 from the monsoon trough in the northwestern Pacific Ocean, well to the southeast of Japan. For several days, Rusa moved to the northwest, eventually intensifying into a powerful typhoon. On August 26, the storm moved across the Amami Islands of Japan, where Rusa left 20,000 people without power and caused two fatalities. Across Japan, the typhoon dropped torrential rainfall peaking at 902 mm (35.5 in) in Tokushima Prefecture.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:50, 23 October 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25693965 -->
== Tech News: 2023-43 ==
<section begin="technews-2023-W43"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/43|Translations]] are available.
'''Recent changes'''
* There is a new [[mw:Special:MyLanguage/Wikimedia Language engineering/Newsletter/2023/October|Language and internationalization newsletter]], written quarterly. It contains updates on new feature development, improvements in various language-related technical projects, and related support work.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Source map support has been enabled on all wikis. When you open the debugger in your browser's developer tools, you should be able to see the unminified JavaScript source code. [https://phabricator.wikimedia.org/T47514]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.2|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-24|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-25|en}}. It will be on all wikis from {{#time:j xg|2023-10-26|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/43|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:17, 23 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25782286 -->
== Wikipedia translation of the week: 2023-44 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Hein Eersel]]'''<br /> <small>''([[:nl:Hein Eersel]]) ([[:it:Hein Eersel]])''</small> </div>
Please be bold and help translate this article!
----
[[File:HeinEersel.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Christiaan Hendrik "Hein" Eersel''' was a Surinamese linguist and cultural researcher. He served as Minister of Education and Population Development in the cabinet of acting Prime Minister Arthur Johan May. He was also the first chancellor of the University of Suriname.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:09, 30 October 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-44 ==
<section begin="technews-2023-W44"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/44|Translations]] are available.
'''Recent changes'''
* The Structured Content team, as part of its project of [[:commons:Commons:WMF support for Commons/Upload Wizard Improvements|improving UploadWizard on Commons]], made some UX improvements to the upload step of choosing own vs not own work ([[phab:T347590|T347590]]), as well as to the licensing step for own work ([[phab:T347756|T347756]]).
* The Design Systems team has released version 1.0.0 of [[wmdoc:codex/latest/|Codex]], the new design system for Wikimedia. See the [[mw:Special:MyLanguage/Design_Systems_Team/Announcing_Codex_1.0|full announcement about the release of Codex 1.0.0]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.3|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-31|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-01|en}}. It will be on all wikis from {{#time:j xg|2023-11-02|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
* Listings on category pages are sorted on each wiki for that language using a [[:w:en:International Components for Unicode|library]]. For a brief period on 2 November, changes to categories will not be sorted correctly for many languages. This is because the developers are upgrading to a new version of the library. They will then use a script to fix the existing categories. This will take a few hours or a few days depending on how big the wiki is. You can [[mw:Special:MyLanguage/Wikimedia Technical Operations/ICU announcement|read more]]. [https://phabricator.wikimedia.org/T345561][https://phabricator.wikimedia.org/T267145]
* Starting November 1, the impact module (Special:Impact) will be upgraded by the Growth team. The new impact module shows newcomers more data regarding their impact on the wiki. It was tested by a few wikis during the last few months. [https://phabricator.wikimedia.org/T336203]
'''Future changes'''
* There is [[mw:Special:MyLanguage/Extension:Graph/Plans#Roadmap|a proposed plan]] for re-enabling the Graph Extension. You can help by reviewing this proposal and [[mw:Extension_talk:Graph/Plans#c-PPelberg_(WMF)-20231020221600-Update:_20_October|sharing what you think about it]].
* The WMF is working on making it possible for administrators to [[mw:Special:MyLanguage/Community_configuration_2.0|edit MediaWiki configuration directly]]. This is similar to previous work on Special:EditGrowthConfig. [[phab:T349757|A technical RfC is running until November 08, where you can provide feedback.]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/44|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W44"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21, 30 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25801989 -->
== Tech News: 2023-45 ==
<section begin="technews-2023-W45"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/45|Translations]] are available.
'''Recent changes'''
* In the Vector 2022 skin, the default font-size of a number of navigational elements (tagline, tools menu, navigational links, and more) has been increased slightly to match the font size used in page content. [https://phabricator.wikimedia.org/T346062]
'''Problems'''
* Last week, there was a problem displaying some recent edits on [https://noc.wikimedia.org/conf/highlight.php?file=dblists/s5.dblist a few wikis], for 1-6 hours. The edits were saved but not immediately shown. This was due to a database problem. [https://phabricator.wikimedia.org/T350443]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.4|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-11-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-08|en}}. It will be on all wikis from {{#time:j xg|2023-11-09|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
* The Growth team will reassign newcomers from former mentors to [[mw:Special:MyLanguage/Growth/Structured mentor list|the currently active mentors]]. They have also changed the notification language to be more user-friendly. [https://phabricator.wikimedia.org/T330071][https://phabricator.wikimedia.org/T327493]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/45|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W45"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:06, 6 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25838105 -->
== Wikipedia translation of the week: 2023-45 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Reclaim the Night]]'''<br /> <small>''([[:de:Reclaim the Night]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Reclaim the Night 2014.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Reclaim the Night''' is a movement started in Leeds in 1977 as part of the Women's Liberation Movement. Marches demanding that women be able to move throughout public spaces at night took place across England until the 1990s. Later, the organisation was revived and sponsors annual and national marches against rape and violence against women.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 00:40, 8 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Wikipedia translation of the week: 2023-46 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ishe Komborera Africa]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Ishe Komborera Africa.mp3|center|300px|]]
<div style="text-align:left; padding: .4em;">
"'''Ishe Komborera Africa'''" (Shona for: God Bless Africa), also called "Ishe Komborera Zimbabwe" (Shona for: God Bless Zimbabwe), was the Zimbabwean national anthem from 1980 to 1994. It was the country's first national anthem after gaining independence in 1980. It is a translation of 19th-century South African schoolteacher Enoch Sontonga's popular African hymn "Nkosi Sikelel' iAfrika" into Zimbabwe's native Shona and Ndebele languages.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 00:38, 13 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-46 ==
<section begin="technews-2023-W46"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/46|Translations]] are available.
'''Recent changes'''
* Four new wikis have been created:
** a Wikipedia in [[d:Q7598268|Moroccan Amazigh]] ([[w:zgh:|<code>w:zgh:</code>]]) [https://phabricator.wikimedia.org/T350216]
** a Wikipedia in [[d:Q35159|Dagaare]] ([[w:dga:|<code>w:dga:</code>]]) [https://phabricator.wikimedia.org/T350218]
** a Wikipedia in [[d:Q33017|Toba Batak]] ([[w:bbc:|<code>w:bbc:</code>]]) [https://phabricator.wikimedia.org/T350320]
** a Wikiquote in [[d:Q33151|Banjar]] ([[q:bjn:|<code>q:bjn:</code>]]) [https://phabricator.wikimedia.org/T350217]
'''Problems'''
* Last week, users who previously visited Meta-Wiki or Wikimedia Commons and then became logged out on those wikis could not log in again. The problem is now resolved. [https://phabricator.wikimedia.org/T350695]
* Last week, some pop-up dialogs and menus were shown with the wrong font size. The problem is now resolved. [https://phabricator.wikimedia.org/T350544]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.5|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-11-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-15|en}}. It will be on all wikis from {{#time:j xg|2023-11-16|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
'''Future changes'''
* Reference Previews are coming to many wikis as a default feature. They are popups for references, similar to the [[mw:Special:MyLanguage/Page Previews|PagePreviews feature]]. [[m:WMDE Technical Wishes/ReferencePreviews#Opt-out feature|You can opt out]] of seeing them. If you are [[Special:Preferences#mw-prefsection-gadgets|using the gadgets]] Reference Tooltips or Navigation Popups, you won’t see Reference Previews. [[phab:T282999|Deployment]] is planned for November 22, 2023.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Canary (also known as heartbeat) events will be produced into [https://stream.wikimedia.org/?doc#/streams Wikimedia event streams] from December 11. Streams users are advised to filter out these events, by discarding all events where <bdi lang="zxx" dir="ltr"><code><nowiki>meta.domain == "canary"</nowiki></code></bdi>. Updates to [[mw:Special:MyLanguage/Manual:Pywikibot|Pywikibot]] or [https://github.com/ChlodAlejandro/wikimedia-streams wikimedia-streams] will discard these events by default. [https://phabricator.wikimedia.org/T266798]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/46|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W46"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:52, 13 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25859263 -->
== Wikipedia translation of the week: 2023-47 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Bhagavata Mela]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Bhagavata Mela''' is a classical Indian dance that is performed in Tamil Nadu, particularly the Thanjavur area. It is choreographed as an annual Vaishnavism tradition in Melattur and nearby regions, and celebrated as a dance-drama performance art. The dance art has roots in a historic migration of practitioners of Kuchipudi, another Indian classical dance art, from Andhra Pradesh to the kingdom of Tanjavur.
The term Bhagavata, state Brandon and Banham, refers to the Hindu text Bhagavata Purana. Mela is a Sanskrit word that means "gathering, meeting of a group" and connotes a folk festival. The traditional Bhagavata Mela performance acts out the legends of Hinduism, set to the Carnatic style music.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 00:38, 04:07, 20 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-47 ==
<section begin="technews-2023-W47"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/47|Translations]] are available.
'''Changes later this week'''
* There is no new MediaWiki version this week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-quwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rmywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-roa_rupwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-roa_tarawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ruewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rwwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sahwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-satwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-scwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-scnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-scowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-shwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-siwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-skwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-slwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-smwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sqwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-srwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-srnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-stwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-stqwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-suwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-szlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tcywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tetwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-thwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-towiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tpiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ttwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-twwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tyvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-udmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ugwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-uzwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vecwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vepwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vlswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vowiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308141][https://phabricator.wikimedia.org/T308142][https://phabricator.wikimedia.org/T308143]
* The Vector 2022 skin will have some minor visual changes to drop-down menus, column widths, and more. These changes were added to four Wikipedias last week. If no issues are found, these changes will proceed to all wikis this week. These changes will make it possible to add new menus for readability and dark mode. [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Updates#November_2023:_Visual_changes,_more_deployments,_and_shifting_focus|Learn more]]. [https://phabricator.wikimedia.org/T347711]
'''Future changes'''
* There is [[mw:Extension talk:Graph/Plans#Update: 15 November|an update on re-enabling the Graph Extension]]. To speed up the process, Vega 2 will not be supported and only [https://phabricator.wikimedia.org/T335325 some protocols] will be available at launch. You can help by sharing what you think about the plan.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/47|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W47"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:55, 21 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25884616 -->
== Wikipedia translation of the week: 2023-48 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:fr:Zanskari]]'''<br /> <small>''([[:en:Zaniskari]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Zaniskari Horse in Ladakh, India.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Zaniskari''' or '''Zanskari''' is a breed of small mountain horse or pony from Ladakh, in northern India. It is named for the Zanskar valley or region in Kargil district. It is similar to the Spiti breed of Himachal Pradesh, but is better adapted to work at high altitude. Like the Spiti, it shows similarities to the Tibetan breeds of neighbouring Tibet. It is of medium size, and is often grey in colour. The breed is considered endangered, as there are only a few hundred alive today, and a conservation programme has been started at Padum, Zanskar, in the Kargil district of Ladakh.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:44, 27 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-48 ==
<section begin="technews-2023-W48"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/48|Translations]] are available.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.7|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-11-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-29|en}}. It will be on all wikis from {{#time:j xg|2023-11-30|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). There is no new MediaWiki version next week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] MediaWiki's JavaScript system will now allow <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi> syntax in gadgets and user scripts. Gadget authors should remember that users' browsers may not support it, so it should be used appropriately. [https://phabricator.wikimedia.org/T343499]
* The deployment of "[[mw:Special:MyLanguage/Help:Growth/Tools/Add_a_link|Add a link]]" announced [[m:Special:MyLanguage/Tech/News/2023/47|last week]] was postponed. It will resume this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/48|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W48"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:09, 27 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25906379 -->
== Wikipedia translation of the week: 2023-49 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sheikh Hussein]]'''<br /> <small>''([[:fr:Sheikh Hussein]]) ([[:it:Scec Hussèn]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sheikh Hussein.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Sheikh Hussein''' is a town in south-eastern Ethiopia. The site has been recorded in the tentative list for UNESCO World Heritage List since 2011 as a religious, cultural and historical site.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:34, 4 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25921616 -->
== Tech News: 2023-49 ==
<section begin="technews-2023-W49"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/49|Translations]] are available.
'''Recent changes'''
* The spacing between paragraphs on Vector 2022 has been changed from 7px to 14px to match the size of the text. This will make it easier to distinguish paragraphs from sentences. [https://phabricator.wikimedia.org/T351754]
* The "{{int:Visualeditor-dialog-meta-categories-defaultsort-label}}" feature in VisualEditor is working again. You no longer need to switch to source editing to edit <bdi lang="zxx" dir="ltr"><code><nowiki>{{DEFAULTSORT:...}}</nowiki></code></bdi> keywords. [https://phabricator.wikimedia.org/T337398]
'''Changes later this week'''
* There is no new MediaWiki version this week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* On 6 December, people who have the enabled the preference for "{{int:Discussiontools-preference-visualenhancements}}" will notice the [[mw:Special:MyLanguage/Talk pages project/Usability|talk page usability improvements]] appear on pages that include the <bdi lang="zxx" dir="ltr"><code><nowiki>__NEWSECTIONLINK__</nowiki></code></bdi> magic word. If you notice any issues, please [[phab:T352232|share them with the team on Phabricator]].
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Toolforge [[wikitech:News/Toolforge Grid Engine deprecation|Grid Engine shutdown process]] will start on December 14. Maintainers of [[toolforge:grid-deprecation|tools that still use this old system]] should plan to migrate to Kubernetes, or tell the team your plans on Phabricator in the task about your tool, before that date. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/VIWWQKMSQO2ED3TVUR7KPPWRTOBYBVOA/]
* Communities using [[mw:Special:MyLanguage/Structured_Discussions|Structured Discussions]] are being contacted regarding [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|the upcoming deprecation of Structured Discussions]]. You can read more about this project, and share your comments, [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|on the project's page]].
'''Events'''
* Registration & Scholarship applications are now open for the [[mw:Special:MyLanguage/Wikimedia Hackathon 2024|Wikimedia Hackathon 2024]] that will take place from 3–5 May in Tallinn, Estonia. Scholarship applications are open until 5 January 2024.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/49|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W49"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:50, 4 December 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25914435 -->
== Wikipedia translation of the week: 2023-50 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:fr:Applaudissements aux fenêtres pendant la pandémie de Covid-19]]'''<br /> <small>''([[:es:Aplauso por los trabajadores de la salud]]) ([[:gl:Aplauso ao persoal sanitario]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Koronabirus konfinamendua Lasarten 2020-03-29.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
During the COVID-19 pandemic, applauding daily at a scheduled hour was a gesture of acclamation, recognition and gratitude towards health professionals in tribute to their work at the time. This habit emerged in January 2020 in Wuhan, where the pandemic originated, and then spread to several cities around the world during the quarantines and sanitary cordons ordered as preventive measures, Italy being the first one.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:26, 11 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25925561 -->
== Tech News: 2023-50 ==
<section begin="technews-2023-W50"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/50|Translations]] are available.
'''Recent changes'''
* On Wikimedia Commons, there are some minor user-interface improvements for the "choosing own vs not own work" step in the UploadWizard. This is part of the Structured Content team's project of [[:commons:Commons:WMF support for Commons/Upload Wizard Improvements|improving UploadWizard on Commons]]. [https://phabricator.wikimedia.org/T352707][https://phabricator.wikimedia.org/T352709]
'''Problems'''
* There was a problem showing the [[mw:Special:MyLanguage/Growth/Personalized first day/Newcomer homepage|Newcomer homepage]] feature with the "impact module" and their page-view graphs, for a few days in early December. This has now been fixed. [https://phabricator.wikimedia.org/T352352][https://phabricator.wikimedia.org/T352349]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.9|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-12-12|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-12-13|en}}. It will be on all wikis from {{#time:j xg|2023-12-14|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* [[File:Octicons-tools.svg|15px|link=]] The [https://wikimediafoundation.limesurvey.net/796964 2023 Developer Satisfaction Survey] is seeking the opinions of the Wikimedia developer community. Please take the survey if you have any role in developing software for the Wikimedia ecosystem. The survey is open until 5 January 2024, and has an associated [[foundation:Legal:December_2023_Developer_Satisfaction_Survey|privacy statement]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/50|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W50"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:13, 12 December 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25945501 -->
== Wikipedia translation of the week: 2023-51 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Jamaica Bay Wildlife Refuge]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Aerial view of Subway Island, July 2019.JPG|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Jamaica Bay Wildlife Refuge''' is a wildlife refuge in New York City managed by the National Park Service as part of Gateway National Recreation Area. It is composed of the open water and intertidal salt marshes of Jamaica Bay. It lies entirely within the boundaries of New York City, divided between the boroughs of Brooklyn to the west and Queens to the east.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:05, 18 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25951007 -->
== Tech News: 2023-51 ==
<section begin="technews-2023-W51"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/51|Translations]] are available.
'''Tech News'''
* The next issue of Tech News will be sent out on 8 January 2024 because of [[w:en:Christmas and holiday season|the holidays]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.10|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-12-19|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-12-20|en}}. It will be on all wikis from {{#time:j xg|2023-12-21|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). There is no new MediaWiki version next week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting December 18, it won't be possible to activate Structured Discussions on a user's own talk page using the Beta feature. The Beta feature option remains available for users who want to deactivate Structured Discussions. This is part of [[mw:Structured Discussions/Deprecation|Structured Discussions' deprecation work]]. [https://phabricator.wikimedia.org/T248309]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] There will be full support for redirects in the Module namespace. The "Move Page" feature will leave an appropriate redirect behind, and such redirects will be appropriately recognized by the software (e.g. hidden from [[{{#special:UnconnectedPages}}]]). There will also be support for [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Renaming or moving modules|manual redirects]]. [https://phabricator.wikimedia.org/T120794]
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The MediaWiki JavaScript documentation is moving to a new format. During the move, you can read the old docs using [https://doc.wikimedia.org/mediawiki-core/REL1_41/js/ version 1.41]. Feedback about [https://doc.wikimedia.org/mediawiki-core/master/js/ the new site] is welcome on the [[mw:Talk:JSDoc_WMF_theme|project talk page]].
* The Wishathon is a new initiative that encourages collaboration across the Wikimedia community to develop solutions for wishes collected through the [[m:Special:MyLanguage/Community Wishlist Survey|Community Wishlist Survey]]. The first community Wishathon will take place from 15–17 March. If you are interested in a project proposal as a user, developer, designer, or product lead, you can [[m:Special:MyLanguage/Event:WishathonMarch2024|register for the event and read more]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/51|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W51"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:18, 18 December 2023 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25959059 -->
== Wikipedia translation of the week: 2023-52 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Plant blindness]]'''<br /> <small>''([[:fr:Cécité botanique]]) ([[:de:Pflanzenblindheit]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Plant blindness 0323.png|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Plant blindness''' is an informally-proposed form of cognitive bias, which in its broadest meaning, is a human tendency to ignore plant species. This includes such phenomena as not noticing plants in the surrounding environment, not recognizing the importance of plant life to the whole biosphere and to human affairs, a philosophical view of plants as an inferior form of life to animals and/or the inability to appreciate the unique features or aesthetics of plants. Related terms include plant‐neglect, zoo-centrism, and zoo‐chauvinism.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:58, 25 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25971304 -->
== Wikipedia translation of the week: 2024-02 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pax airship disaster]]'''<br /> <small>''([[:pt:Catástrofe do dirigível Pax]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sim new-mcclures-magazine 1902-09 19 5 (page 75 crop).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''''Pax''''' '''airship disaster''' was the explosion of the ''Pax'' airship on May 12, 1902, in Paris, which killed the Brazilian inventor Augusto Severo and the French mechanic Georges Saché.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 12:14, 8 January 2024 (UTC)''
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26033876 -->
== Tech News: 2024-02 ==
<section begin="technews-2024-W02"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/02|Translations]] are available.
'''Recent changes'''
* [https://mediawiki2latex.wmflabs.org/ mediawiki2latex] is a tool that converts wiki content into the formats of LaTeX, PDF, ODT, and EPUB. The code now runs many times faster due to recent improvements. There is also an optional Docker container you can [[b:de:Benutzer:Dirk_Hünniger/wb2pdf/install#Using_Docker|install]] on your local machine.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The way that Random pages are selected has been updated. This will slowly reduce the problem of some pages having a lower chance of appearing. [https://phabricator.wikimedia.org/T309477]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.13|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-09|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-10|en}}. It will be on all wikis from {{#time:j xg|2024-01-11|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/02|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W02"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:20, 9 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26026251 -->
== Wikipedia translation of the week: 2024-03 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Conversion to Islam]]'''<br /> <small>''([[:fr:Conversion à l'islam]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sahadah-Topkapi-Palace.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Conversion to Islam''' is accepting Islam as a religion or faith and rejecting any other religion or irreligion.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:11, 15 January 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26044632 -->
== Tech News: 2024-03 ==
<section begin="technews-2024-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/03|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Pages that use the JSON [[mw:Special:MyLanguage/Manual:ContentHandler|contentmodel]] will now use tabs instead of spaces for auto-indentation. This will significantly reduce the page size. [https://phabricator.wikimedia.org/T326065]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[mw:Special:MyLanguage/Extension:Gadgets|Gadgets]] and personal user scripts may now use JavaScript syntax introduced in ES6 (also known as "ES2015") and ES7 ("ES2016"). MediaWiki validates the source code to protect other site functionality from syntax errors, and to ensure scripts are valid in all [[mw:Special:MyLanguage/Compatibility#Browsers|supported browsers]]. Previously, Gadgets could use the <bdi lang="zxx" dir="ltr"><code><nowiki>requiresES6</nowiki></code></bdi> option. This option is no longer needed and will be removed in the future. [https://phabricator.wikimedia.org/T75714]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[mw:Special:MyLanguage/Manual:Bot passwords|Bot passwords]] and [[mw:Special:MyLanguage/OAuth/Owner-only consumers|owner-only OAuth consumers]] can now be restricted to allow editing only specific pages. [https://phabricator.wikimedia.org/T349957]
* You can now [[mw:Special:MyLanguage/Extension:Thanks|thank]] edits made by bots. [https://phabricator.wikimedia.org/T341388]
* An update on the status of the Community Wishlist Survey for 2024 [[m:Special:MyLanguage/Community Wishlist Survey/Future Of The Wishlist/January 4, 2024 Update|has been published]]. Please read and give your feedback.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.14|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-16|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-17|en}}. It will be on all wikis from {{#time:j xg|2024-01-18|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting on January 17, it will not be possible to login to Wikimedia wikis from some specific old versions of the Chrome browser (versions 51–66, released between 2016 and 2018). Additionally, users of iOS 12, or Safari on Mac OS 10.14, may need to login to each wiki separately. [https://phabricator.wikimedia.org/T344791]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The <bdi lang="zxx" dir="ltr"><code>jquery.cookie</code></bdi> module was deprecated and replaced with the <bdi lang="zxx" dir="ltr"><code>mediawiki.cookie</code></bdi> module last year. A script has now been run to replace any remaining uses, and this week the temporary alias will be removed. [https://phabricator.wikimedia.org/T354966]
'''Future changes'''
* Wikimedia Deutschland is working to [[m:WMDE Technical Wishes/Reusing references|make reusing references easier]]. They are looking for people who are interested in participating in [https://wikimedia.sslsurvey.de/User-research-into-Reusing-References-Sign-up-Form-2024/en/ individual video calls for user research in January and February].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:13, 16 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26074460 -->
== Wikipedia translation of the week: 2024-04 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Kinder der Landstrasse]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Kinderdlandstrasse plakat.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Kinder der Landstrasse''' (literally: Children of the Country Road) was a project implemented by the Swiss foundation Pro Juventute from 1926 to 1973. The project aimed to assimilate the itinerant Yenish people in Switzerland by forcibly removing their children from their parents and placing them in orphanages or foster homes. Approximately 590 children were affected by this program.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:02, 22 January 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26044632 -->
== Tech News: 2024-04 ==
<section begin="technews-2024-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/04|Translations]] are available.
'''Problems'''
* A bug in UploadWizard prevented linking to the userpage of the uploader when uploading. It has now been fixed. [https://phabricator.wikimedia.org/T354529]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.15|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-23|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-24|en}}. It will be on all wikis from {{#time:j xg|2024-01-25|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:04, 23 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26096197 -->
== Wikipedia translation of the week: 2024-05 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Qurm Nature Reserve]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Al-Qurm Wetlands.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Qurm Nature Reserve''' is a national nature reserve in Muscat Governorate, Oman. Located on the Gulf of Oman coast, the reserve protects a mangrove forest and the surrounding wetland in a small estuary within the urban area of Qurm. Established in 1975, the reserve has been designated as an Important Bird Area since 1994, and as a protected Ramsar site since 2013.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:03, 29 January 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26149847 -->
== Tech News: 2024-05 ==
<section begin="technews-2024-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/05|Translations]] are available.
'''Recent changes'''
* Starting Monday January 29, all talk pages messages' timestamps will become a link. This link is a permanent link to the comment. It allows users to find the comment they are looking for, even if this comment was moved elsewhere. This will affect all wikis except for the English Wikipedia. You can read more about this change [https://diff.wikimedia.org/2024/01/29/talk-page-permalinks-dont-lose-your-threads/ on Diff] or [[mw:Special:MyLanguage/Help:DiscussionTools#Talk_pages_permalinking|on Mediawiki.org]].<!-- The Diff post will be published on Monday morning UTC--> [https://phabricator.wikimedia.org/T302011]
* There are some improvements to the CAPTCHA to make it harder for spam bots and scripts to bypass it. If you have feedback on this change, please comment on [[phab:T141490|the task]]. Staff are monitoring metrics related to the CAPTCHA, as well as secondary metrics such as account creations and edit counts.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.16|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-30|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-31|en}}. It will be on all wikis from {{#time:j xg|2024-02-01|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] On February 1, a link will be added to the "Tools" menu to download a [[w:en:QR code|QR code]] that links to the page you are viewing. There will also be a new [[{{#special:QrCode}}]] page to create QR codes for any Wikimedia URL. This addresses the [[m:Community Wishlist Survey 2023/Mobile and apps/Add ability to share QR code for a page in any Wikimedia project|#19 most-voted wish]] from the [[m:Community Wishlist Survey 2023/Results|2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T329973]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[mw:Special:MyLanguage/Extension:Gadgets|Gadgets]] which only work in some skins have sometimes used the <bdi lang="zxx" dir="ltr"><code>targets</code></bdi> option to limit where you can use them. This will stop working this week. You should use the <bdi lang="zxx" dir="ltr"><code>skins</code></bdi> option instead. [https://phabricator.wikimedia.org/T328497]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:31, 29 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26137870 -->
== Wikipedia translation of the week: 2024-06 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Timurid architecture]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Gur-e-Amir Mausolueum - Samarkand - Uzbekistan (7488414078).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Timurid architecture''' was an important stage in the architectural history of Iran and Central Asia during the late 14th and 15th centuries. The Timurid Empire (1370–1507), founded by Timur (d. 1405) and conquering most of this region, oversaw a cultural renaissance. In architecture, the Timurid dynasty patronized the construction of palaces, mausoleums, and religious monuments across the region. Their architecture is distinguished by its grand scale, luxurious decoration in tilework, and sophisticated geometric vaulting. This architectural style, along with other aspects of Timurid art, spread across the empire and subsequently influenced the architecture of other empires from the Middle East to the Indian subcontinent.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:23, 5 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26169542 -->
== Tech News: 2024-06 ==
<section begin="technews-2024-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/06|Translations]] are available.
'''Recent changes'''
*The mobile site history pages now use the same HTML as the desktop history pages. If you hear of any problems relating to mobile history usage please point them to [[phab:T353388|the phabricator task]].
*On most wikis, admins can now block users from making specific actions. These actions are: uploading files, creating new pages, moving (renaming) pages, and sending thanks. The goal of this feature is to allow admins to apply blocks that are adequate to the blocked users' activity. [[m:Special:MyLanguage/Community health initiative/Partial blocks#action-blocks|Learn more about "action blocks"]]. [https://phabricator.wikimedia.org/T242541][https://phabricator.wikimedia.org/T280531]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.17|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-06|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-07|en}}. It will be on all wikis from {{#time:j xg|2024-02-08|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Talk pages permalinks that included diacritics and non-Latin script were malfunctioning. This issue is fixed. [https://phabricator.wikimedia.org/T356199]
'''Future changes'''
* [[m:WMDE Technical Wishes/ReferencePreviews#24WPs|24 Wikipedias]] with [[mw:Special:MyLanguage/Reference_Tooltips|Reference Tooltips]] as a default gadget are encouraged to remove that default flag. This would make [[mw:Special:MyLanguage/Help:Reference_Previews|Reference Previews]] the new default for reference popups, leading to a more consistent experience across wikis. For [[m:WMDE Technical Wishes/ReferencePreviews#46WPs|46 Wikipedias]] with less than 4 interface admins, the change is already scheduled for mid-February, [[m:Talk:WMDE Technical Wishes/ReferencePreviews#Reference Previews to become the default for previewing references on more wikis.|unless there are concerns]]. The older Reference Tooltips gadget will still remain usable and will override this feature, if it is available on your wiki and you have enabled it in your settings. [https://meta.wikimedia.org/wiki/WMDE_Technical_Wishes/ReferencePreviews#Reference_Previews_to_become_the_default_for_previewing_references_on_more_wikis][https://phabricator.wikimedia.org/T355312]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:22, 5 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26180971 -->
== Wikipedia translation of the week: 2024-07 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Adoration of the Magi (Fra Angelico and Filippo Lippi)]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Fra Angelico, Fra Filippo Lippi, The Adoration of the Magi.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''''Adoration of the Magi''''' is a tondo, or circular painting, of the Adoration of the Magi assumed to be that recorded in 1492 in the Palazzo Medici Riccardi in Florence as by Fra Angelico. It dates from the mid-15th century and is now in the National Gallery of Art in Washington D.C. Most art historians think that Filippo Lippi painted more of the original work, and that it was added to some years after by other artists, as well as including work by assistants in the workshops of both the original masters. It has been known as the Washington Tondo and Cook Tondo after Herbert Cook, and this latter name in particular continues to be used over 50 years after the painting left the Cook collection.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 07:00, 12 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26187446 -->
== Tech News: 2024-07 ==
<section begin="technews-2024-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/07|Translations]] are available.
'''Recent changes'''
* The [[d:Wikidata:SPARQL query service/WDQS graph split|WDQS Graph Split experiment]] is working and loaded onto 3 test servers. The team in charge is testing the split's impact and requires feedback from WDQS users through the UI or programmatically in different channels. [https://www.wikidata.org/wiki/Wikidata_talk:SPARQL_query_service/WDQS_graph_split][https://phabricator.wikimedia.org/T356773][https://www.wikidata.org/wiki/User:Sannita_(WMF)] Users' feedback will validate the impact of various use cases and workflows around the Wikidata Query service. [https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/WDQS_backend_update/October_2023_scaling_update][https://www.mediawiki.org/wiki/Wikidata_Query_Service/User_Manual#Federation]
'''Problems'''
*There was a bug that affected the appearance of visited links when using mobile device to access wiki sites. It made the links appear black; [[phab:T356928|this issue]] is fixed.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.18|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-13|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-14|en}}. It will be on all wikis from {{#time:j xg|2024-02-15|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] As work continues on the grid engine deprecation,[https://wikitech.wikimedia.org/wiki/News/Toolforge_Grid_Engine_deprecation] tools on the grid engine will be stopped starting on February 14th, 2024. If you have tools actively migrating you can ask for an extension so they are not stopped. [https://wikitech.wikimedia.org/wiki/Portal:Toolforge/About_Toolforge#Communication_and_support]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 05:49, 13 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26223994 -->
== Wikipedia translation of the week: 2024-08 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:nl:Graf met de handjes]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Weg langs het kerkhof tegenover 1, Roermond.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The monument '''Van Gorkum-Van Aefferden''', more well known as the "'''grave with the little hands'''" is a monumental Tombstone in the Dutch city of Roermond.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 13:24, 19 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26260848 -->
== Tech News: 2024-08 ==
<section begin="technews-2024-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/08|Translations]] are available.
'''Recent changes'''
* If you have the "{{int:Tog-enotifwatchlistpages}}" option enabled, edits by bot accounts no longer trigger notification emails. Previously, only minor edits would not trigger the notification emails. [https://phabricator.wikimedia.org/T356984]
* There are changes to how user and site scripts load for [[mw:Special:MyLanguage/Skin:Vector/2022| Vector 2022]] on specific wikis. The changes impacted the following Wikis: all projects with [[mw:Special:MyLanguage/Skin:Vector|Vector legacy]] as the default skin, Wikivoyage, and Wikibooks. Other wikis will be affected over the course of the next three months. Gadgets are not impacted. If you have been affected or want to minimize the impact on your project, see [[Phab:T357580| this ticket]]. Please coordinate and take action proactively.
*Newly auto-created accounts (the accounts you get when you visit a new wiki) now have the same local notification preferences as users who freshly register on that wiki. It is effected in four notification types listed in the [[phab:T353225|task's description]].
*The maximum file size when using [[c:Special:MyLanguage/Commons:Upload_Wizard|Upload Wizard]] is now 5 GiB. [https://phabricator.wikimedia.org/T191804]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.19|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-20|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-21|en}}. It will be on all wikis from {{#time:j xg|2024-02-22|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Selected tools on the grid engine have been [[wikitech:News/Toolforge_Grid_Engine_deprecation|stopped]] as we prepare to shut down the grid on March 14th, 2024. The tool's code and data have not been deleted. If you are a maintainer and you want your tool re-enabled reach out to the [[wikitech:Portal:Toolforge/About_Toolforge#Communication_and_support|team]]. Only tools that have asked for extension are still running on the grid.
* The CSS <bdi lang="zxx" dir="ltr"><code>[https://developer.mozilla.org/en-US/docs/Web/CSS/filter filter]</code></bdi> property can now be used in HTML <bdi lang="zxx" dir="ltr"><code>style</code></bdi> attributes in wikitext. [https://phabricator.wikimedia.org/T308160]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:37, 19 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26254282 -->
== Wikipedia translation of the week: 2024-09 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Doorway effect]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
The '''doorway effect''' is a known psychological event where a person's short-term memory declines when passing through a doorway moving from one location to another when it would not if they had remained in the same place. People experience this effect by forgetting what they were going to do, thinking about, or planning upon entering a different room. This is thought to be due to the change in one's physical environment, which is used to distinguish boundaries between remembered events: memories of events encountered in the present environment are more accessible than those beyond it.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:30, 26 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26260848 -->
== Tech News: 2024-09 ==
<section begin="technews-2024-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/09|Translations]] are available.
'''Recent changes'''
* The [[mw:Special:MyLanguage/VisualEditor_on_mobile|mobile visual editor]] is now the default editor for users who never edited before, at a small group of wikis. [[mw:Special:MyLanguage/VisualEditor_on_mobile/VE_mobile_default#A/B_test_results| Research ]] shows that users using this editor are slightly more successful publishing the edits they started, and slightly less successful publishing non-reverted edits. Users who defined the wikitext editor as their default on desktop will get the wikitext editor on mobile for their first edit on mobile as well. [https://phabricator.wikimedia.org/T352127]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[mw:Special:MyLanguage/ResourceLoader/Core modules#mw.config|mw.config]] value <code>wgGlobalGroups</code> now only contains groups that are active in the wiki. Scripts no longer have to check whether the group is active on the wiki via an API request. A code example of the above is: <bdi lang="zxx" dir="ltr"><code>if (/globalgroupname/.test(mw.config.get("wgGlobalGroups")))</code></bdi>. [https://phabricator.wikimedia.org/T356008]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.20|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-27|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-28|en}}. It will be on all wikis from {{#time:j xg|2024-02-29|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* The right to change [[mw:Special:MyLanguage/Manual:Tags|edit tags]] (<bdi lang="zxx" dir="ltr"><code>changetags</code></bdi>) will be removed from users in Wikimedia sites, keeping it by default for admins and bots only. Your community can ask to retain the old configuration on your wiki before this change happens. Please indicate in [[phab:T355639|this ticket]] to keep it for your community before the end of March 2024.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:23, 26 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26294125 -->
== Wikipedia translation of the week: 2024-10 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sissieretta Jones]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:1899 poster of Mme. M. Sissieretta Jones.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Matilda Sissieretta Joyner Jones''' (January 5, 1868, or 1869 – June 24, 1933) was an American soprano. She sometimes was called "The Black Patti" in reference to Italian opera singer Adelina Patti. Jones' repertoire included grand opera, light opera, and popular music
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:33, 4 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26313143 -->
== Tech News: 2024-10 ==
<section begin="technews-2024-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/10|Translations]] are available.
'''Recent changes'''
* The <bdi lang="zxx" dir="ltr"><code>Special:Book</code></bdi> page (as well as the associated "Create a book" functionality) provided by the old [[mw:Special:MyLanguage/Extension:Collection|Collection extension]] has been removed from all Wikisource wikis, as it was broken. This does not affect the ability to download normal books, which is provided by the [[mw:Special:MyLanguage/Extension:Wikisource|Wikisource extension]]. [https://phabricator.wikimedia.org/T358437]
* [[m:Wikitech|Wikitech]] now uses the next-generation [[mw:Special:MyLanguage/Parsoid|Parsoid]] wikitext parser by default to generate all pages in the Talk namespace. Report any problems on the [[mw:Talk:Parsoid/Parser_Unification/Known_Issues|Known Issues discussion page]]. You can use the [[mw:Special:MyLanguage/Extension:ParserMigration|ParserMigration]] extension to control the use of Parsoid; see the [[mw:Special:MyLanguage/Help:Extension:ParserMigration|ParserMigration help documentation]] for more details.
* Maintenance on [https://etherpad.wikimedia.org etherpad] is completed. If you encounter any issues, please indicate in [[phab:T316421|this ticket]].
* [[File:Octicons-tools.svg|12px|link=|alt=| Advanced item]] [[mw:Special:MyLanguage/Extension:Gadgets|Gadgets]] allow interface admins to create custom features with CSS and JavaScript. The <bdi lang="zxx" dir="ltr"><code>Gadget</code></bdi> and <bdi lang="zxx" dir="ltr"><code>Gadget_definition</code></bdi> namespaces and <bdi lang="zxx" dir="ltr"><code>gadgets-definition-edit</code></bdi> user right were reserved for an experiment in 2015, but were never used. These were visible on Special:Search and Special:ListGroupRights. The unused namespaces and user rights are now removed. No pages are moved, and no changes need to be made. [https://phabricator.wikimedia.org/T31272]
* A usability improvement to the "Add a citation" in Wikipedia workflow has been made, the insert button was moved to the popup header. [https://phabricator.wikimedia.org/T354847]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.21|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-05|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-06|en}}. It will be on all wikis from {{#time:j xg|2024-03-07|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* All wikis will be read-only for a few minutes on March 20. This is planned at 14:00 UTC. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T358233]
* The HTML markup of headings and section edit links will be changed later this year to improve accessibility. See [[mw:Special:MyLanguage/Heading_HTML_changes|Heading HTML changes]] for details. The new markup will be the same as in the new Parsoid wikitext parser. You can test your gadget or stylesheet with the new markup if you add <bdi lang="zxx" dir="ltr"><code>?useparsoid=1</code></bdi> to your URL ([[mw:Special:MyLanguage/Help:Extension:ParserMigration#Selecting_a_parser_using_a_URL_query_string|more info]]) or turn on Parsoid read views in your user options ([[mw:Special:MyLanguage/Help:Extension:ParserMigration#Enabling_via_user_preference|more info]]).
*
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:47, 4 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26329807 -->
== Wikipedia translation of the week: 2024-11 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Preventative Coup of November 11]]'''<br /> <small>''([[:es:Golpe de Estado en Brasil de 1955]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Exército na casa de Café Filho.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Preventative Coup of November 11''' sometimes called the '''1955 Brazilian coup d'état''' or referred to as an "anti-coup" or a "counter-coup" (Portuguese: ''Novembrada, Movimento de 11 de Novembro, Contragolpe, Golpe Preventivo do Marechal Lott'') was a series of military and political events led by Henrique Teixeira Lott that resulted in Nereu Ramos assuming the presidency of Brazil until being peacefully succeeded by Juscelino Kubitschek a few months later. The bloodless coup removed Carlos Luz from the presidency because he was suspected of plotting to prevent Kubitschek from taking office. As a result of the tensions, Brazil had three presidents in the span of a single week.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:04, 11 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26366849 -->
== Tech News: 2024-11 ==
<section begin="technews-2024-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/11|Translations]] are available.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.22|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-12|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-13|en}}. It will be on all wikis from {{#time:j xg|2024-03-14|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* After consulting with various communities, the line height of the text on the [[mw:Special:MyLanguage/Skin:Minerva Neue|Minerva skin]] will be increased to its previous value of 1.65. Different options for typography can also be set using the options in the menu, as needed. [https://phabricator.wikimedia.org/T358498]
*The active link color in [[mw:Special:MyLanguage/Skin:Minerva Neue|Minerva]] will be changed to provide more consistency with our other platforms and best practices. [https://phabricator.wikimedia.org/T358516]
* [[c:Special:MyLanguage/Commons:Structured data|Structured data on Commons]] will no longer ask whether you want to leave the page without saving. This will prevent the “information you’ve entered may not be saved” popups from appearing when no information have been entered. It will also make file pages on Commons load faster in certain cases. However, the popups will be hidden even if information has indeed been entered. If you accidentally close the page before saving the structured data you entered, that data will be lost. [https://phabricator.wikimedia.org/T312315]
'''Future changes'''
* All wikis will be read-only for a few minutes on March 20. This is planned at 14:00 UTC. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T358233][https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:04, 11 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26374013 -->
== Wikipedia translation of the week: 2024-12 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Hojang Taret]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Hojang Taret''' is a classical Meitei language play based on Euripides's ancient Greek tragedy The Phoenician Women. It is directed by Oasis Sougaijam and produced by The Umbilical Theatre in Imphal, Kangleipak. It depicts the moral ambiguities of conflict between brothers resulting to the ruination of the ancient city of Thebes.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:52, 18 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26366849 -->
== Tech News: 2024-12 ==
<section begin="technews-2024-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/12|Translations]] are available.
'''Recent changes'''
* The notice "Language links are at the top of the page" that appears in the [[mw:Special:MyLanguage/Skin:Vector/2022|Vector 2022 skin]] main menu has been removed now that users have learned the new location of the Language switcher. [https://phabricator.wikimedia.org/T353619]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[m:Special:MyLanguage/IP_Editing:_Privacy_Enhancement_and_Abuse_Mitigation/IP_Info_feature|IP info feature]] displays data from Spur, an IP addresses database. Previously, the only data source for this feature was MaxMind. Now, IP info is more useful for patrollers. [https://phabricator.wikimedia.org/T341395]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Toolforge Grid Engine services have been shut down after the final migration process from Grid Engine to Kubernetes. [https://wikitech.wikimedia.org/wiki/Obsolete:Toolforge/Grid][https://wikitech.wikimedia.org/wiki/News/Toolforge_Grid_Engine_deprecation][https://techblog.wikimedia.org/2022/03/14/toolforge-and-grid-engine/]
* Communities can now customize the default reasons for undeleting a page by creating [[MediaWiki:Undelete-comment-dropdown]]. [https://phabricator.wikimedia.org/T326746]
'''Problems'''
* [[m:Special:MyLanguage/WMDE_Technical_Wishes/RevisionSlider|RevisionSlider]] is an interface to interactively browse a page's history. Users in [[mw:Special:MyLanguage/Extension:RevisionSlider/Developing_a_RTL-accessible_feature_in_MediaWiki_-_what_we%27ve_learned_while_creating_the_RevisionSlider|right-to-left]] languages reported RevisionSlider reacting wrong to mouse clicks. This should be fixed now. [https://phabricator.wikimedia.org/T352169]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-19|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-20|en}}. It will be on all wikis from {{#time:j xg|2024-03-21|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* All wikis will be read-only for a few minutes on March 20. This is planned at [https://zonestamp.toolforge.org/1710943200 14:00 UTC]. [https://phabricator.wikimedia.org/T358233][https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:40, 18 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26410165 -->
== Wikipedia translation of the week: 2024-13 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Magna Lykseth-Skogman]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Magna Lykseth in Tristan och Isolde at Kungliga Operan 1909 - SMV - GL164.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Magna Elvine Lykseth-Skogman''' (6 February 1874 – 13 November 1949), also known as Magna Lykseth-Schjerven, was a Norwegian-born Swedish operatic soprano. After making her début at the Royal Swedish Opera in 1901 as Santuzza in Cavalleria rusticana, she was engaged there until 1918 becoming the company's prima donna. She performed leading roles in a wide range of operas but is remembered in particular for her Wagnerian interpretations, creating Brünnhilde in the Swedish premières of Siegfried and Götterdämmerung, and Isolde in 1909. Considered to be one of the most outstanding Swedish opera singers of her generation, she was awarded the Litteris et Artibus medal in 1907 and became a member of the Royal Swedish Academy of Music in 1912
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:00, 25 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26447450 -->
== Tech News: 2024-13 ==
<section begin="technews-2024-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/13|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] An update was made on March 18th 2024 to how various projects load site, user JavaScript and CSS in [[mw:Special:MyLanguage/Skin:Vector/2022|Vector 2022 skin]]. A [[phab:T360384|checklist]] is provided for site admins to follow.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.24|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-26|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-27|en}}. It will be on all wikis from {{#time:j xg|2024-03-28|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:57, 25 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26446209 -->
== Wikipedia translation of the week: 2024-14 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lidder Valley]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Pahalgam Valley.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Lidder Valley''' or Liddar Valley is a Himalayan sub-valley that forms the southeastern corner of Anantnag district in Indian-administered Kashmir. The Lidder River flows down the valley. The entrance to the valley lies 7 km northeast from Anantnag town and 62 km southeast from Srinagar, the summer capital of Jammu and Kashmir. It is a 40-km-long gorge valley with an average width of 3 km.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:15, 1 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26509189 -->
== Tech News: 2024-14 ==
<section begin="technews-2024-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/14|Translations]] are available.
'''Recent changes'''
* Users of the [[mw:Special:MyLanguage/Reading/Web/Accessibility_for_reading|reading accessibility]] beta feature will notice that the default line height for the standard and large text options has changed. [https://phabricator.wikimedia.org/T359030]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.25|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-02|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-03|en}}. It will be on all wikis from {{#time:j xg|2024-04-04|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* The Wikimedia Foundation has an annual plan. The annual plan decides what the Wikimedia Foundation will work on. You can now read [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2024-2025/Product & Technology OKRs#Draft Key Results|the draft key results]] for the Product and Technology department. They are suggestions for what results the Foundation wants from big technical changes from July 2024 to June 2025. You can [[m:Talk:Wikimedia Foundation Annual Plan/2024-2025/Product & Technology OKRs|comment on the talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 03:36, 2 April 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26462933 -->
== Wikipedia translation of the week: 2024-15 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Operation Kraai]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Overzicht van het vliegveld te Djokja vanuit de 'Control Tower', Bestanddeelnr 5128.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Operation Kraai''' (Operation Crow) was a Dutch military offensive against the de facto Republic of Indonesia in December 1948 after negotiations failed. With the advantage of surprise the Dutch managed to capture the Indonesian Republic's temporary capital, Yogyakarta, and seized Indonesian leaders such as de facto Republican President Sukarno. This apparent military success was however followed by guerrilla warfare, while the violation of the Renville Agreement ceasefire diplomatically isolated the Dutch, leading to the Dutch–Indonesian Round Table Conference and recognition of the United States of Indonesia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:47, 8 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26550154 -->
== Tech News: 2024-15 ==
<section begin="technews-2024-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/15|Translations]] are available.
'''Recent changes'''
* Web browsers can use tools called [[:w:en:Browser extension|extensions]]. There is now a Chrome extension called [[m:Future Audiences/Experiment:Citation Needed|Citation Needed]] which you can use to see if an online statement is supported by a Wikipedia article. This is a small experiment to see if Wikipedia can be used this way. Because it is a small experiment, it can only be used in Chrome in English.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] A new [[mw:Special:MyLanguage/Help:Edit Recovery|Edit Recovery]] feature has been added to all wikis, available as a [[Special:Preferences#mw-prefsection-editing|user preference]]. Once you enable it, your in-progress edits will be stored in your web browser, and if you accidentally close an editing window or your browser or computer crashes, you will be prompted to recover the unpublished text. Please leave any feedback on the [[m:Special:MyLanguage/Talk:Community Wishlist Survey 2023/Edit-recovery feature|project talk page]]. This was the #8 wish in the 2023 Community Wishlist Survey.
* Initial results of [[mw:Special:MyLanguage/Edit check|Edit check]] experiments [[mw:Special:MyLanguage/Edit_check#4_April_2024|have been published]]. Edit Check is now deployed as a default feature at [[phab:T342930#9538364|the wikis that tested it]]. [[mw:Talk:Edit check|Let us know]] if you want your wiki to be part of the next deployment of Edit check. [https://phabricator.wikimedia.org/T342930][https://phabricator.wikimedia.org/T361727]
* Readers using the [[mw:Special:MyLanguage/Skin:Minerva Neue|Minerva skin]] on mobile will notice there has been an improvement in the line height across all typography settings. [https://phabricator.wikimedia.org/T359029]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.26|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-09|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-10|en}}. It will be on all wikis from {{#time:j xg|2024-04-11|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* New accounts and logged-out users will get the [[mw:Special:MyLanguage/VisualEditor|visual editor]] as their default editor on mobile. This deployment is made at all wikis except for the English Wikipedia. [https://phabricator.wikimedia.org/T361134]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38, 8 April 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26564838 -->
== Wikipedia translation of the week: 2024-16 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:ru:Павильон Росси]]'''<br /> <small>''([[:en:Rossi Pavilion]]) ([[:fr:Pavillon Rossi]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Rossi's Pavilion in Mikhailovsky Garden. Saint-Petersburg. 1825..jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Rossi Pavilion''' (Russian: Павильон Росси) is a pavilion on the bank of the Moyka River in the Mikhailovsky Garden in Saint Petersburg. It was designed by architect Carlo Rossi in the early 1820s and built in 1825 during his redevelopment of the garden.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:53, 15 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26565118 -->
== Tech News: 2024-16 ==
<section begin="technews-2024-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/16|Translations]] are available.
'''Problems'''
* Between 2 April and 8 April, on wikis using [[mw:Special:MyLanguage/Extension:FlaggedRevs|Flagged Revisions]], the "{{Int:tag-mw-reverted}}" tag was not applied to undone edits. In addition, page moves, protections and imports were not autoreviewed. This problem is now fixed. [https://phabricator.wikimedia.org/T361918][https://phabricator.wikimedia.org/T361940]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.1|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-16|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-17|en}}. It will be on all wikis from {{#time:j xg|2024-04-18|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[mw:Special:MyLanguage/Help:Magic words#DEFAULTSORT|Default category sort keys]] will now affect categories added by templates placed in [[mw:Special:MyLanguage/Help:Cite|footnotes]]. Previously footnotes used the page title as the default sort key even if a different default sort key was specified (category-specific sort keys already worked). [https://phabricator.wikimedia.org/T40435]
* A new variable <bdi lang="zxx" dir="ltr"><code>page_last_edit_age</code></bdi> will be added to [[Special:AbuseFilter|abuse filters]]. It tells how many seconds ago the last edit to a page was made. [https://phabricator.wikimedia.org/T269769]
'''Future changes'''
* Volunteer developers are kindly asked to update the code of their tools and features to handle [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]]. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers/2024-04 CTA|Learn more]].
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Four database fields will be removed from database replicas (including [[quarry:|Quarry]]). This affects only the <bdi lang="zxx" dir="ltr"><code>abuse_filter</code></bdi> and <bdi lang="zxx" dir="ltr"><code>abuse_filter_history</code></bdi> tables. Some queries might need to be updated. [https://phabricator.wikimedia.org/T361996]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:29, 15 April 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26564838 -->
== Wikipedia translation of the week: 2024-17 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Devorà Ascarelli]]'''<br /> <small>''([[:it:Debora Ascarelli]]) ([[:es:Devorà Ascarelli]])''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Devorà Ascarelli''' was a 16th-century Italian poet living in Rome, Italy. Ascarelli may have been the first Jewish woman to have a book of her own work published.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:35, 22 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26624302 -->
== Tech News: 2024-17 ==
<section begin="technews-2024-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/17|Translations]] are available.
'''Recent changes'''
* Starting this week, newcomers editing Wikipedia [[mw:Special:MyLanguage/Growth/Positive reinforcement#Leveling up 3|will be encouraged]] to try structured tasks. [[mw:Special:MyLanguage/Growth/Feature summary#Newcomer tasks|Structured tasks]] have been shown to [[mw:Special:MyLanguage/Growth/Personalized first day/Structured tasks/Add a link/Experiment analysis, December 2021|improve newcomer activation and retention]]. [https://phabricator.wikimedia.org/T348086]
* You can [[m:Special:MyLanguage/Coolest Tool Award|nominate your favorite tools]] for the fifth edition of the Coolest Tool Award. Nominations will be open until May 10.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.2|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-23|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-24|en}}. It will be on all wikis from {{#time:j xg|2024-04-25|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* This is the last warning that by the end of May 2024 the Vector 2022 skin will no longer share site and user scripts/styles with old Vector. For user-scripts that you want to keep using on Vector 2022, copy the contents of [[{{#special:MyPage}}/vector.js]] to [[{{#special:MyPage}}/vector-2022.js]]. There are [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Features/Loading Vector 2010 scripts|more technical details]] available. Interface administrators who foresee this leading to lots of technical support questions may wish to send a mass message to your community, as was done on French Wikipedia. [https://phabricator.wikimedia.org/T362701]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:28, 22 April 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26647188 -->
== Wikipedia translation of the week: 2024-18 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:1989 Serbian general election]]'''<br /> <small>''([[:sr:Председнички избори у Србији 1989.]]) ([[:vi:Tổng tuyển cử Serbia 1989]])''</small></div>
Please be bold and help translate this article!
----
[[File:Parliament of SR Serbia (1989–1991).svg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''General elections were held in Serbia''', a constituent federal unit of SFR Yugoslavia, on 12 November 1989 to elect the president of the presidency of the Socialist Republic of Serbia and delegates of the Assembly of SR Serbia. Voting for delegates also took place on 10 and 30 November 1989. In addition to the general elections, local elections were held simultaneously. These were the first direct elections conducted after the adoption of the 1974 Yugoslav Constitution and the delegate electoral system, and the last elections conducted under a one-party system.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:32, 29 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26624302 -->
== Tech News: 2024-18 ==
<section begin="technews-2024-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/18|Translations]] are available.
'''Recent changes'''
[[File:Talk_pages_default_look_(April_2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* The appearance of talk pages changed for the following wikis: {{int:project-localized-name-azwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-bnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-idwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ptwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-thwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ukwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-viwiki/en}}. These wikis participated to a test, where 50% of users got the new design, for one year. As this test [[Mw:Special:MyLanguage/Talk pages project/Usability/Analysis|gave positive results]], the new design is deployed on these wikis as the default design. It is possible to opt-out these changes [[Special:Preferences#mw-prefsection-editing|in user preferences]] ("{{int:discussiontools-preference-visualenhancements}}"). The deployment will happen at all wikis in the coming weeks. [https://phabricator.wikimedia.org/T341491]
* Seven new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q33014|Betawi]] ([[w:bew:|<code>w:bew:</code>]]) [https://phabricator.wikimedia.org/T357866]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35708|Kusaal]] ([[w:kus:|<code>w:kus:</code>]]) [https://phabricator.wikimedia.org/T359757]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35513|Igala]] ([[w:igl:|<code>w:igl:</code>]]) [https://phabricator.wikimedia.org/T361644]
** a {{int:project-localized-name-group-wiktionary}} in [[d:Q33541|Karakalpak]] ([[wikt:kaa:|<code>wikt:kaa:</code>]]) [https://phabricator.wikimedia.org/T362135]
** a {{int:project-localized-name-group-wikisource}} in [[d:Q9228|Burmese]] ([[s:my:|<code>s:my:</code>]]) [https://phabricator.wikimedia.org/T361085]
** a {{int:project-localized-name-group-wikisource}} in [[d:Q9237|Malay]] ([[s:ms:|<code>s:ms:</code>]]) [https://phabricator.wikimedia.org/T363039]
** a {{int:project-localized-name-group-wikisource}} in [[d:Q8108|Georgian]] ([[s:ka:|<code>s:ka:</code>]]) [https://phabricator.wikimedia.org/T363085]
* You can now [https://translatewiki.net/wiki/Support#Early_access:_Watch_Message_Groups_on_Translatewiki.net watch message groups/projects] on [[m:Special:MyLanguage/translatewiki.net|Translatewiki.net]]. Initially, this feature will notify you of added or deleted messages in these groups. [https://phabricator.wikimedia.org/T348501]
* Dark mode is now available on all wikis, on mobile web for logged-in users who opt into the [[Special:MobileOptions|advanced mode]]. This is the early release of the feature. Technical editors are invited to [https://night-mode-checker.wmcloud.org/ check for accessibility issues on wikis]. See [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-04|more detailed guidelines]].
'''Problems'''
* [[mw:Special:MyLanguage/Help:Extension:Kartographer|Kartographer]] maps can use an alternative visual style without labels, by using <bdi lang="zxx" dir="ltr"><code><nowiki>mapstyle="osm"</nowiki></code></bdi>. This wasn't working in previews, creating the wrong impression that it wasn't supported. This has now been fixed. [https://phabricator.wikimedia.org/T362531]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.3|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-30|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-01|en}}. It will be on all wikis from {{#time:j xg|2024-05-02|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 03:34, 30 April 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26689057 -->
== Wikipedia translation of the week: 2024-19 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Heinrich Bünting]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Heinrich Bünting''' (1545 – 1606) was a Protestant pastor and theologian. He is best known for his book of woodcut maps titled Itinerarium Sacrae Scripturae (Travel book through Holy Scripture) first published in 1581.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:27, 6 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26624302 -->
== Tech News: 2024-19 ==
<section begin="technews-2024-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/19|Translations]] are available.
'''Recent changes'''
[[File:Talk_pages_default_look_(April_2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* The appearance of talk pages changed for all wikis, except for Commons, Wikidata and most Wikipedias ([[m:Special:MyLanguage/Tech/News/2024/18|a few]] have already received this design change). You can read the detail of the changes [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|on ''Diff'']]. It is possible to opt-out these changes [[Special:Preferences#mw-prefsection-editing|in user preferences]] ("{{int:discussiontools-preference-visualenhancements}}"). The deployment will happen at remaining wikis in the coming weeks. [https://phabricator.wikimedia.org/T352087][https://phabricator.wikimedia.org/T319146]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Interface admins now have greater control over the styling of article components on mobile with the introduction of the <code>SiteAdminHelper</code>. More information on how styles can be disabled can be found [[mw:Special:MyLanguage/Extension:WikimediaMessages#Site_admin_helper|at the extension's page]]. [https://phabricator.wikimedia.org/T363932]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]] has added article body sections in JSON format and a curated short description field to the existing parsed Infobox. This expansion to the API is also available via Wikimedia Cloud Services. [https://enterprise.wikimedia.com/blog/article-sections-and-description/]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.4|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-08|en}}. It will be on all wikis from {{#time:j xg|2024-05-09|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* When you look at the Special:Log page, the first view is labelled "All public logs", but it only shows some logs. This label will now say "Main public logs". [https://phabricator.wikimedia.org/T237729]
'''Future changes'''
* A new service will be built to replace [[mw:Special:MyLanguage/Extension:Graph|Extension:Graph]]. Details can be found in [[mw:Special:MyLanguage/Extension:Graph/Plans|the latest update]] regarding this extension.
* Starting May 21, English Wikipedia and German Wikipedia will get the possibility to activate "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]". This is part of the [[phab:T304110|progressive deployment of this tool to all Wikipedias]]. These communities can [[mw:Special:MyLanguage/Growth/Community configuration|activate and configure the feature locally]]. [https://phabricator.wikimedia.org/T308144]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:45, 6 May 2024 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26729363 -->
== Wikipedia translation of the week: 2024-20 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:var(--background-color-backdrop-dark, #DDDDDD); border:1px solid #BBBBBB; color:var(--color-inverted, #000000); padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ruyan (district)]]'''<br /> <small>''([[:fa:رویان (طبرستان)]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Northern Iran and its surroundings during the Iranian intermezzo.svg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Ruyan''' (Persian: رویان), later known as Rustamdar (رستمدار), was the name of a mountainous district that encompassed the western part of Tabaristan/Mazandaran, a region on the Caspian coast of northern Iran. In Iranian mythology, Ruyan appears as one of the places that the legendary archer Arash shot his arrow from, reaching the edge of Khorasan to mark the border between Iran and Turan.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:39, 13 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26755244 -->
== Tech News: 2024-20 ==
<section begin="technews-2024-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/20|Translations]] are available.
'''Recent changes'''
* On Wikisource there is a special page listing pages of works without corresponding scan images. Now you can use the new magic word <bdi lang="zxx" dir="ltr"><code>__EXPECTWITHOUTSCANS__</code></bdi> to exclude certain pages (list of editions or translations of works) from that list. [https://phabricator.wikimedia.org/T344214]
* If you use the [[Special:Preferences#mw-prefsection-editing|user-preference]] "{{int:tog-uselivepreview}}", then the template-page feature "{{int:Templatesandbox-editform-legend}}" will now also work without reloading the page. [https://phabricator.wikimedia.org/T136907]
* [[mw:Special:Mylanguage/Extension:Kartographer|Kartographer]] maps can now specify an alternative text via the <bdi lang="zxx" dir="ltr"><code><nowiki>alt=</nowiki></code></bdi> attribute. This is identical in usage to the <bdi lang="zxx" dir="ltr"><code><nowiki>alt=</nowiki></code></bdi> attribute in the [[mw:Special:MyLanguage/Help:Images#Syntax|image and gallery syntax]]. An exception for this feature is wikis like Wikivoyage where the miniature maps are interactive. [https://phabricator.wikimedia.org/T328137]
* The old [[mw:Special:MyLanguage/Extension:GuidedTour|Guided Tour]] for the "[[mw:Special:MyLanguage/Edit Review Improvements/New filters for edit review|New Filters for Edit Review]]" feature has been removed. It was created in 2017 to show people with older accounts how the interface had changed, and has now been seen by most of the intended people. [https://phabricator.wikimedia.org/T217451]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.5|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-15|en}}. It will be on all wikis from {{#time:j xg|2024-05-16|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[{{#special:search}}]] results page will now use CSS flex attributes, for better accessibility, instead of a table. If you have a gadget or script that adjusts search results, you should update your script to the new HTML structure. [https://phabricator.wikimedia.org/T320295]
'''Future changes'''
* In the Vector 2022 skin, main pages will be displayed at full width (like special pages). The goal is to keep the number of characters per line large enough. This is related to the coming changes to typography in Vector 2022. [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates|Learn more]]. [https://phabricator.wikimedia.org/T357706]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Two columns of the <bdi lang="zxx" dir="ltr"><code>[[mw:Special:MyLanguage/Manual:pagelinks table|pagelinks]]</code></bdi> database table (<bdi lang="zxx" dir="ltr"><code>pl_namespace</code></bdi> and <bdi lang="zxx" dir="ltr"><code>pl_title</code></bdi>) are being dropped soon. Users must use two columns of the new <bdi lang="zxx" dir="ltr"><code>[[mw:special:MyLanguage/Manual:linktarget table|linktarget]]</code></bdi> table instead (<bdi lang="zxx" dir="ltr"><code>lt_namespace</code></bdi> and <bdi lang="zxx" dir="ltr"><code>lt_title</code></bdi>). In your existing SQL queries:
*# Replace <bdi lang="zxx" dir="ltr"><code>JOIN pagelinks</code></bdi> with <bdi lang="zxx" dir="ltr"><code>JOIN linktarget</code></bdi> and <bdi lang="zxx" dir="ltr"><code>pl_</code></bdi> with <bdi lang="zxx" dir="ltr"><code>lt_</code></bdi> in the <bdi lang="zxx" dir="ltr"><code>ON</code></bdi> statement
*# Below that add <bdi lang="zxx" dir="ltr"><code>JOIN pagelinks ON lt_id = pl_target_id</code></bdi>
** See <bdi lang="en" dir="ltr">[[phab:T222224]]</bdi> for technical reasoning. [https://phabricator.wikimedia.org/T222224][https://phabricator.wikimedia.org/T299947]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:59, 13 May 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26762074 -->
== Wikipedia translation of the week: 2024-21 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Turlough (lake)]]'''<br /> <small>''([[:de:Turlough]]) ([[:no:Turlough]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Carran Turlough.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''turlough''' is a seasonal or periodic water body found mostly in limestone karst areas of Ireland, west of the River Shannon. [...] The water bodies fill and empty with the changes in the level of the water table, usually being very low or empty during summer and autumn and full in the winter. As groundwater levels drop the water drains away underground through cracks in the karstic limestone.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:31, 20 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26789673 -->
== Tech News: 2024-21 ==
<section begin="technews-2024-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/21|Translations]] are available.
'''Recent changes'''
* The [[mw:Special:MyLanguage/Extension:Nuke|Nuke]] feature, which enables administrators to mass delete pages, will now correctly delete pages which were moved to another title. [https://phabricator.wikimedia.org/T43351]
* New changes have been made to the UploadWizard in Wikimedia Commons: the overall layout has been improved, by following new styling and spacing for the form and its fields; the headers and helper text for each of the fields was changed; the Caption field is now a required field, and there is an option for users to copy their caption into the media description. [https://commons.wikimedia.org/wiki/Commons:WMF_support_for_Commons/Upload_Wizard_Improvements#Changes_to_%22Describe%22_workflow][https://phabricator.wikimedia.org/T361049]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.6|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-21|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-22|en}}. It will be on all wikis from {{#time:j xg|2024-05-23|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The HTML used to render all headings [[mw:Heading_HTML_changes|is being changed to improve accessibility]]. It will change on 22 May in some skins (Timeless, Modern, CologneBlue, Nostalgia, and Monobook). Please test gadgets on your wiki on these skins and [[phab:T13555|report any related problems]] so that they can be resolved before this change is made in all other skins. The developers are also considering the introduction of a [[phab:T337286|Gadget API for adding buttons to section titles]] if that would be helpful to tool creators, and would appreciate any input you have on that.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W21"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:04, 20 May 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26786311 -->
== Wikipedia translation of the week: 2024-22 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Geiranger Church]]'''<br /> <small>''([[:no:Geiranger kirke]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Iglesia parroquial, Geiranger, Noruega, 2019-09-07, DD 84-97 PAN.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Geiranger Church''' (Norwegian: Geiranger kyrkje) is a parish church of the Church of Norway in Stranda Municipality in Møre og Romsdal county, Norway. It is located in the village of Geiranger, and the end of the famous Geirangerfjorden. It is the church for the Geiranger parish which is part of the Nordre Sunnmøre prosti (deanery) in the Diocese of Møre. The white, wooden church was built in an octagonal design in 1842 using plans drawn up by the architect Hans Klipe. The church seats about 165 people.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:48, 27 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26828106 -->
== Tech News: 2024-22 ==
<section begin="technews-2024-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/22|Translations]] are available.
'''Recent changes'''
* Several bugs related to the latest updates to the UploadWizard on Wikimedia Commons have been fixed. For more information, see [[:phab:T365107|T365107]] and [[:phab:T365119|T365119]].
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] In March 2024 a new [[mw:ResourceLoader/Core_modules#addPortlet|addPortlet]] API was added to allow gadgets to create new portlets (menus) in the skin. In certain skins this can be used to create dropdowns. Gadget developers are invited to try it and [[phab:T361661|give feedback]].
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Some CSS in the Minerva skin has been removed to enable easier community configuration. Interface editors should check the rendering on mobile devices for aspects related to the classes: <bdi lang="zxx" dir="ltr"><code>.collapsible</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.multicol</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.reflist</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.coordinates</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.topicon</code></bdi>. [[phab:T361659|Further details are available on replacement CSS]] if it is needed.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.7|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-29|en}}. It will be on all wikis from {{#time:j xg|2024-05-30|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* When you visit a wiki where you don't yet have a local account, local rules such as edit filters can sometimes prevent your account from being created. Starting this week, MediaWiki takes your global rights into account when evaluating whether you can override such local rules. [https://phabricator.wikimedia.org/T316303]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:15, 28 May 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26832205 -->
== Wikipedia translation of the week: 2024-23 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Guillermo Larrazábal]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Guillermo Larrazábal Arzubide''' (10 February 1907 – 1983) was a Spanish stained glass artist who was active in Ecuador. He is considered Ecuador's most important stained glass artist.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:14, 3 June 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26828106 -->
== Tech News: 2024-23 ==
<section begin="technews-2024-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/23|Translations]] are available.
'''Recent changes'''
* It is now possible for local administrators to add new links to the bottom of the site Tools menu without JavaScript. [[mw:Manual:Interface/Sidebar#Add or remove toolbox sections|Documentation is available]]. [https://phabricator.wikimedia.org/T6086]
* The message name for the definition of the tracking category of WikiHiero has changed from "<bdi lang="zxx" dir="ltr"><code>MediaWiki:Wikhiero-usage-tracking-category</code></bdi>" to "<bdi lang="zxx" dir="ltr"><code>MediaWiki:Wikihiero-usage-tracking-category</code></bdi>". [https://gerrit.wikimedia.org/r/c/mediawiki/extensions/wikihiero/+/1035855]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q5317225|Kadazandusun]] ([[w:dtp:|<code>w:dtp:</code>]]) [https://phabricator.wikimedia.org/T365220]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.8|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-04|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-05|en}}. It will be on all wikis from {{#time:j xg|2024-06-06|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* Next week, on wikis with the Vector 2022 skin as the default, logged-out desktop users will be able to choose between different font sizes. The default font size will also be increased for them. This is to make Wikimedia projects easier to read. [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-06 deployments|Learn more]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:35, 3 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26844397 -->
== Tech News: 2024-24 ==
<section begin="technews-2024-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/24|Translations]] are available.
'''Recent changes'''
* The software used to render SVG files has been updated to a new version, fixing many longstanding bugs in SVG rendering. [https://phabricator.wikimedia.org/T265549]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The HTML used to render all headings [[mw:Heading HTML changes|is being changed to improve accessibility]]. It was changed last week in some skins (Vector legacy and Minerva). Please test gadgets on your wiki on these skins and [[phab:T13555|report any related problems]] so that they can be resolved before this change is made in Vector-2022. The developers are still considering the introduction of a [[phab:T337286|Gadget API for adding buttons to section titles]] if that would be helpful to tool creators, and would appreciate any input you have on that.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The HTML markup used for citations by [[mw:Special:MyLanguage/Parsoid|Parsoid]] changed last week. In places where Parsoid previously added the <bdi lang="zxx" dir="ltr"><code>mw-reference-text</code></bdi> class, Parsoid now also adds the <bdi lang="zxx" dir="ltr"><code>reference-text</code></bdi> class for better compatibility with the legacy parser. [[mw:Specs/HTML/2.8.0/Extensions/Cite/Announcement|More details are available]]. [https://gerrit.wikimedia.org/r/1036705]
'''Problems'''
* There was a bug with the Content Translation interface that caused the tools menus to appear in the wrong location. This has now been fixed. [https://phabricator.wikimedia.org/T366374]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.9|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-11|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-12|en}}. It will be on all wikis from {{#time:j xg|2024-06-13|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The new version of MediaWiki includes another change to the HTML markup used for citations: [[mw:Special:MyLanguage/Parsoid|Parsoid]] will now generate a <bdi lang="zxx" dir="ltr"><code><nowiki><span class="mw-cite-backlink"></nowiki></code></bdi> wrapper for both named and unnamed references for better compatibility with the legacy parser. Interface administrators should verify that gadgets that interact with citations are compatible with the new markup. [[mw:Specs/HTML/2.8.0/Extensions/Cite/Announcement|More details are available]]. [https://gerrit.wikimedia.org/r/1035809]
* On multilingual wikis that use the <bdi lang="zxx" dir="ltr"><code><nowiki><translate></nowiki></code></bdi> system, there is a feature that shows potentially-outdated translations with a pink background until they are updated or confirmed. From this week, confirming translations will be logged, and there is a new user-right that can be required for confirming translations if the community [[m:Special:MyLanguage/Requesting wiki configuration changes|requests it]]. [https://phabricator.wikimedia.org/T49177]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:20, 10 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26893898 -->
== Wikipedia translation of the week: 2024-25 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:de:Magdalena Zeger]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Magdalena Zeger''' ([mak.da.ˈleː.na ˈt͡seː.gɐ], * 1491; † 16. January 1568 in Kolding) was a calendar maker, astronomer and astrologist. Her Hamburg almanacs and forecasts from 1561 and 1563 have been preserved. Zeger's calendars are the first independent publications by a woman in the field of astronomy.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:29, 17 June 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26940351 -->
== Tech News: 2024-25 ==
<section begin="technews-2024-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/25|Translations]] are available.
'''Recent changes'''
* People who attempt to add an external link in the visual editor will now receive immediate feedback if they attempt to link to a domain that a project has decided to block. Please see [[mw:Special:MyLanguage/Edit_check#11_June_2024|Edit check]] for more details. [https://phabricator.wikimedia.org/T366751]
* The new [[mw:Special:MyLanguage/Extension:CommunityConfiguration|Community Configuration extension]] is available [[testwiki:Special:CommunityConfiguration|on Test Wikipedia]]. This extension allows communities to customize specific features to meet their local needs. Currently only Growth features are configurable, but the extension will support other [[mw:Special:MyLanguage/Community_configuration#Use_cases|Community Configuration use cases]] in the future. [https://phabricator.wikimedia.org/T323811][https://phabricator.wikimedia.org/T360954]
* The dark mode [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] is now available on category and help pages, as well as more special pages. There may be contrast issues. Please report bugs on the [[mw:Talk:Reading/Web/Accessibility_for_reading|project talk page]]. [https://phabricator.wikimedia.org/T366370]
'''Problems'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Cloud Services tools were not available for 25 minutes last week. This was caused by a faulty hardware cable in the data center. [https://wikitech.wikimedia.org/wiki/Incidents/2024-06-11_WMCS_Ceph]
* Last week, styling updates were made to the Vector 2022 skin. This caused unforeseen issues with templates, hatnotes, and images. Changes to templates and hatnotes were reverted. Most issues with images were fixed. If you still see any, [[phab:T367463|report them here]]. [https://phabricator.wikimedia.org/T367480]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.10|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-18|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-19|en}}. It will be on all wikis from {{#time:j xg|2024-06-20|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting June 18, the [[mw:Special:MyLanguage/Help:Edit check#ref|Reference Edit Check]] will be deployed to [[phab:T361843|a new set of Wikipedias]]. This feature is intended to help newcomers and to assist edit-patrollers by inviting people who are adding new content to a Wikipedia article to add a citation when they do not do so themselves. During [[mw:Special:MyLanguage/Edit_check#Reference_Check_A/B_Test|a test at 11 wikis]], the number of citations added [https://diff.wikimedia.org/?p=127553 more than doubled] when Reference Check was shown to people. Reference Check is [[mw:Special:MyLanguage/Edit check/Configuration|community configurable]]. [https://phabricator.wikimedia.org/T361843]<!-- NOTE: THE DIFF BLOG WILL BE PUBLISHED ON MONDAY -->
* [[m:Special:MyLanguage/Mailing_lists|Mailing lists]] will be unavailable for roughly two hours on Tuesday 10:00–12:00 UTC. This is to enable migration to a new server and upgrade its software. [https://phabricator.wikimedia.org/T367521]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:49, 17 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26911987 -->
== Wikipedia translation of the week: 2024-26 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Koreans in Micronesia]]'''<br /> <small>''([[:zh:朝鮮裔密克羅尼西亞人]])''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Koreans in Micronesia''' used to form a significant population before World War II, when most of the region was ruled as the South Seas Mandate of the Empire of Japan; for example, they formed 7.3% of the population of Palau in 1943. However, after the area came under the control of the United States as the Trust Territory of the Pacific Islands, most Koreans returned to their homeland. As of 2013, about seven thousand South Korean expatriates & immigrants and Korean Americans reside in the Marianas (Guam and the Commonwealth of the Northern Mariana Islands), which have remained under U.S. control, while only around two hundred South Korean expatriates reside in the independent countries of Micronesia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 04:03, 24 June 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26940351 -->
== Tech News: 2024-26 ==
<section begin="technews-2024-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/26|Translations]] are available.
'''Recent changes'''
* Editors will notice that there have been some changes to the background color of text in the diff view, and the color of the byte-change numbers, last week. These changes are intended to make text more readable in both light mode and dark mode, and are part of a larger effort to increase accessibility. You can share your comments or questions [[mw:Talk:Reading/Web/Accessibility for reading|on the project talkpage]]. [https://phabricator.wikimedia.org/T361717]
* The text colors that are used for visited-links, hovered-links, and active-links, were also slightly changed last week to improve their accessibility in both light mode and dark mode. [https://phabricator.wikimedia.org/T366515]
'''Problems'''
* You can [[mw:Special:MyLanguage/Help:DiscussionTools#Talk pages permalinking|copy permanent links to talk page comments]] by clicking on a comment's timestamp. [[mw:Talk pages project/Permalinks|This feature]] did not always work when the topic title was very long and the link was used as a wikitext link. This has been fixed. Thanks to Lofhi for submitting the bug. [https://phabricator.wikimedia.org/T356196]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.11|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-25|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-26|en}}. It will be on all wikis from {{#time:j xg|2024-06-27|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting 26 June, all talk pages messages' timestamps will become a link at English Wikipedia, making this feature available for you to use at all wikis. This link is a permanent link to the comment. It allows users to find the comment they were linked to, even if this comment has since been moved elsewhere. You can read more about this feature [[DiffBlog:/2024/01/29/talk-page-permalinks-dont-lose-your-threads/|on Diff]] or [[mw:Special:MyLanguage/Help:DiscussionTools#Talk pages permalinking|on Mediawiki.org]]. [https://phabricator.wikimedia.org/T365974]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:33, 24 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26989424 -->
== Wikipedia translation of the week: 2024-27 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Roller printing on textiles]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Silverstudio.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Roller printing''' on fabrics is a textile printing process patented by Thomas Bell of Scotland in 1783 in an attempt to reduce the cost of the earlier copperplate printing. This method was used in Lancashire fabric mills to produce cotton dress fabrics from the 1790s, most often reproducing small monochrome patterns characterized by striped motifs and tiny dotted patterns called "machine grounds". Improvements in the technology resulted in more elaborate roller prints in bright, rich colours from the 1820s; Turkey red and chrome yellow were particularly popular.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:44, 1 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-27 ==
<section begin="technews-2024-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/27|Translations]] are available.
'''Recent changes'''
* Over the next three weeks, dark mode will become available for all users, both logged-in and logged-out, starting with the mobile web version. This fulfils one of the [[m:Special:MyLanguage/Community_Wishlist_Survey_2023/Reading/Dark_mode|top-requested community wishes]], and improves low-contrast reading and usage in low-light settings. As part of these changes, dark mode will also work on User-pages and Portals. There is more information in [[mw:Special:MyLanguage/Reading/Web/Accessibility_for_reading/Updates#June_2024:_Typography_and_dark_mode_deployments,_new_global_preferences|the latest Web team update]]. [https://phabricator.wikimedia.org/T366364]
* Logged-in users can now set [[m:Special:GlobalPreferences#mw-prefsection-rendering-skin-skin-prefs|global preferences for the text-size and dark-mode]], thanks to a combined effort across Foundation teams. This allows Wikimedians using multiple wikis to set up a consistent reading experience easily, for example by switching between light and dark mode only once for all wikis. [https://phabricator.wikimedia.org/T341278]
* If you use a very old web browser some features might not work on the Wikimedia wikis. This affects Internet Explorer 11 and versions of Chrome, Firefox and Safari older than 2016. This change makes it possible to use new [[d:Q46441|CSS]] features and to send less code to all readers. [https://phabricator.wikimedia.org/T288287][https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:How_to_make_a_MediaWiki_skin#Using_CSS_variables_for_supporting_different_themes_e.g._dark_mode]
* Wikipedia Admins can customize local wiki configuration options easily using [[mw:Special:MyLanguage/Community Configuration|Community Configuration]]. Community Configuration was created to allow communities to customize how some features work, because each language wiki has unique needs. At the moment, admins can configure [[mw:Special:MyLanguage/Growth/Feature_summary|Growth features]] on their home wikis, in order to better recruit and retain new editors. More options will be provided in the coming months. [https://phabricator.wikimedia.org/T366458]
* Editors interested in language issues that are related to [[w:en:Unicode|Unicode standards]], can now discuss those topics at [[mw:Talk:WMF membership with Unicode Consortium|a new conversation space in MediaWiki.org]]. The Wikimedia Foundation is now a [[mw:Special:MyLanguage/WMF membership with Unicode Consortium|member of the Unicode Consortium]], and the coordination group can collaboratively review the issues discussed and, where appropriate, bring them to the attention of the Unicode Consortium.
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q2891049|Mandailing]] ([[w:btm:|<code>w:btm:</code>]]) [https://phabricator.wikimedia.org/T368038]
'''Problems'''
* Editors can once again click on links within the visual editor's citation-preview, thanks to a bug fix by the Editing Team. [https://phabricator.wikimedia.org/T368119]
'''Future changes'''
* Please [https://wikimediafoundation.limesurvey.net/758713?lang=en help us to improve Tech News by taking this short survey]. The goal is to better meet the needs of the various types of people who read Tech News. The survey will be open for 2 weeks. The survey is covered by [https://foundation.wikimedia.org/wiki/Legal:Tech_News_Survey_2024_Privacy_Statement this privacy statement]. Some translations are available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:59, 1 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27038456 -->
== Wikipedia translation of the week: 2024-28 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:simple:India naming dispute]]'''<br /> <small>''([[:ur:انڈیا نام کا تنازعہ]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''India naming dispute''' in 1947 refers to the argument over the use of the name India during and after the partition of British Raj, between the countries of Pakistan and the Republic of India. This dispute involved key figures such as Lord Mountbatten, the last Viceroy of British Raj, and Muhammad Ali Jinnah, the leader of the Muslim League and a founder of Pakistan. By 1947, the British Raj was going to be divided into two new nation states – Hindustan and Pakistan. Jinnah was initially convinced that Hindustan would not use the term India, since it lacked indigenous pedigree, etymologically and historically India meant the Indus Valley (modern-Pakistan). He also opposed the use of the name India as it would cause confusion regarding history. The disagreement had significant implications for national identity and international recognition.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 8 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-28 ==
<section begin="technews-2024-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/28|Translations]] are available.
'''Recent changes'''
* At the Wikimedia Foundation a new task force was formed to replace the disabled Graph with [[mw:Special:MyLanguage/Extension:Chart/Project|more secure, easy to use, and extensible Chart]]. You can [[mw:Special:MyLanguage/Newsletter:Chart Project|subscribe to the newsletter]] to get notified about new project updates and other news about Chart.
* The [[m:Special:MyLanguage/CampaignEvents|CampaignEvents]] extension is now available on Meta-wiki, Igbo Wikipedia, and Swahili Wikipedia, and can be requested on your wiki. This extension helps in managing and making events more visible, giving Event organizers the ability to use tools like the Event registration tool. To learn more about the deployment status and how to request this extension for your wiki, visit the [[m:Special:MyLanguage/CampaignEvents/Deployment_status|CampaignEvents page on Meta-wiki]].
* Editors using the iOS Wikipedia app who have more than 50 edits can now use the [[mw:Special:MyLanguage/Wikimedia Apps/iOS Suggested edits#Add an image|Add an Image]] feature. This feature presents opportunities for small but useful contributions to Wikipedia.
* Thank you to [[mw:MediaWiki Product Insights/Contributor retention and growth/Celebration|all of the authors]] who have contributed to MediaWiki Core. As a result of these contributions, the [[mw:MediaWiki Product Insights/Contributor retention and growth|percentage of authors contributing more than 5 patches has increased by 25% since last year]], which helps ensure the sustainability of the platform for the Wikimedia projects.
'''Problems'''
* A problem with the color of the talkpage tabs always showing as blue, even for non-existent pages which should have been red, affecting the Vector 2022 skin, [[phab:T367982|has been fixed]].
'''Future changes'''
* The Trust and Safety Product team wants to introduce [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] with as little disruption to tools and workflows as possible. Volunteer developers, including gadget and user-script maintainers, are kindly asked to update the code of their tools and features to handle temporary accounts. The team has [[mw:Trust and Safety Product/Temporary Accounts/For developers|created documentation]] explaining how to do the update. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers/2024-04 CTA|Learn more]].
'''Tech News survey'''
* Please [https://wikimediafoundation.limesurvey.net/758713?lang=en help us to improve Tech News by taking this short survey]. The goal is to better meet the needs of the various types of people who read Tech News. The survey will be open for 1 more week. The survey is covered by [https://foundation.wikimedia.org/wiki/Legal:Tech_News_Survey_2024_Privacy_Statement this privacy statement]. Some translations are available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W28"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:32, 8 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27080357 -->
== Wikipedia translation of the week: 2024-29 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Adumu]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Maasai 2012 05 31 2782 (7522645058).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Adumu''', is a type of dance that the Maasai people of Kenya and Tanzania practice. Young Maasai warriors generally perform the energetic and acrobatic dance at ceremonial occasions including weddings, religious rites, and other significant cultural events. The Adumu dance is characterized by a sequence of jumps performed by the dancers, who stand in a circle and alternately jump while keeping their bodies as straight and upright as possible. In addition to wearing vividly colored shúkàs (clothes) and beaded jewelry, the dancers are typically clad in traditional Maasai costume. Traditional Maasai songs and chants are also performed during the dance.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:15, 15 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-29 ==
<section begin="technews-2024-W29"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/29|Translations]] are available.
'''Tech News survey'''
* Please [https://wikimediafoundation.limesurvey.net/758713?lang=en help us to improve Tech News by taking this short survey]. The goal is to better meet the needs of the various types of people who read Tech News. The survey will be open for 3 more days. The survey is covered by [https://foundation.wikimedia.org/wiki/Legal:Tech_News_Survey_2024_Privacy_Statement this privacy statement]. Some translations are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Wikimedia developers can now officially continue to use both [[mw:Special:MyLanguage/Gerrit|Gerrit]] and [[mw:Special:MyLanguage/GitLab|GitLab]], due to a June 24 decision by the Wikimedia Foundation to support software development on both platforms. Gerrit and GitLab are both code repositories used by developers to write, review, and deploy the software code that supports the MediaWiki software that the wiki projects are built on, as well as the tools used by editors to create and improve content. This decision will safeguard the productivity of our developers and prevent problems in code review from affecting our users. More details are available in the [[mw:GitLab/Migration status|Migration status]] page.
* The Wikimedia Foundation seeks applicants for the [[m:Special:MyLanguage/Product and Technology Advisory Council/Proposal|Product and Technology Advisory Council]] (PTAC). This group will bring technical contributors and Wikimedia Foundation together to co-define a more resilient, future-proof technological platform. Council members will evaluate and consult on the movement's product and technical activities, so that we develop multi-generational projects. We are looking for a range of technical contributors across the globe, from a variety of Wikimedia projects. [[m:Special:MyLanguage/Product and Technology Advisory Council/Proposal#Joining the PTAC as a technical volunteer|Please apply here by August 10]].
* Editors with rollback user-rights who use the Wikipedia App for Android can use the new [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/Anti Vandalism|Edit Patrol]] features. These features include a new feed of Recent Changes, related links such as Undo and Rollback, and the ability to create and save a personal library of user talk messages to use while patrolling. If your wiki wants to make these features available to users who do not have rollback rights but have reached a certain edit threshold, [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android#Contact us|you can contact the team]]. You can [[diffblog:2024/07/10/ِaddressing-vandalism-with-a-tap-the-journey-of-introducing-the-patrolling-feature-in-the-mobile-app/|read more about this project on Diff blog]].
* Editors who have access to [[m:Special:MyLanguage/The_Wikipedia_Library|The Wikipedia Library]] can once again use non-open access content in SpringerLinks, after the Foundation [[phab:T368865|contacted]] them to restore access. You can read more about [[m:Tech/News/Recently_resolved_community_tasks|this and 21 other community-submitted tasks that were completed last week]].
'''Changes later this week'''
* This week, [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-07 deployments|dark mode will be available on a number of Wikipedias]], both desktop and mobile, for logged-in and logged-out users. Interface admins and user script maintainers are encouraged to check gadgets and user scripts in the dark mode, to find any hard-coded colors and fix them. There are some [[mw:Special:MyLanguage/Recommendations for night mode compatibility on Wikimedia wikis|recommendations for dark mode compatibility]] to help.
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Next week, functionaries, volunteers maintaining tools, and software development teams are invited to test the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] feature on testwiki. Temporary accounts is a feature that will help improve privacy on the wikis. No further temporary account deployments are scheduled yet. Please [[mw:Talk:Trust and Safety Product/Temporary Accounts|share your opinions and questions on the project talk page]]. [https://phabricator.wikimedia.org/T348895]
* Editors who upload files cross-wiki, or teach other people how to do so, may wish to join a Wikimedia Commons discussion. The Commons community is discussing limiting who can upload files through the cross-wiki upload/Upload dialog feature to users auto-confirmed on Wikimedia Commons. This is due to the large amount of copyright violations uploaded this way. There is a short summary at [[c:Special:MyLanguage/Commons:Cross-wiki upload|Commons:Cross-wiki upload]] and [[c:Commons:Village pump/Proposals#Deactivate cross-wiki uploads for new users|discussion at Commons:Village Pump]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/29|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' You can also get other news from the [[m:Special:MyLanguage/Wikimedia Foundation Bulletin|Wikimedia Foundation Bulletin]].
</div><section end="technews-2024-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:31, 16 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27124561 -->
== Wikipedia translation of the week: 2024-30 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Rathaus-Glockenspiel]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:2019-11-16, Glockenspiel, Neues Münchner Rathaus, IMG 7463 edit Christoph Braun.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Rathaus-Glockenspiel''' is a large mechanical clock located in Marienplatz Square, in the heart of Munich, Germany. Famous for its life-size characters, the clock twice daily re-enacts scenes from Munich's history. First is the story of the marriage of Duke Wilhelm V to Renata of Lorraine in 1568, followed by the story of the Schäfflerstanz, also known as the coopers' dance.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:56, 22 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-30 ==
<section begin="technews-2024-W30"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/30|Translations]] are available.
'''Feature News'''
* Stewards can now [[:m:Special:MyLanguage/Global_blocks|globally block]] accounts. Before [[phab:T17294|the change]] only IP addresses and IP ranges could be blocked globally. Global account blocks are useful when the blocked user should not be logged out. [[:m:Special:MyLanguage/Global_locks|Global locks]] (a similar tool logging the user out of their account) are unaffected by this change. The new global account block feature is related to the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|Temporary Accounts]] project, which is a new type of user account that replaces IP addresses of unregistered editors that are no longer made public.
* Later this week, Wikimedia site users will notice that the Interface of [[mw:Special:MyLanguage/Extension:FlaggedRevs|FlaggedRevs]] (also known as "Pending Changes") is improved and consistent with the rest of the MediaWiki interface and [[mw:Special:MyLanguage/Codex|Wikimedia's design system]]. The FlaggedRevs interface experience on mobile and [[mw:Special:MyLanguage/Skin:MinervaNeue|Minerva skin]] was inconsistent before it was fixed and ported to [[mw:Special:MyLanguage/Codex|Codex]] by the WMF Growth team and some volunteers. [https://phabricator.wikimedia.org/T191156]
* Wikimedia site users can now submit account vanishing requests via [[m:Special:GlobalVanishRequest|GlobalVanishRequest]]. This feature is used when a contributor wishes to stop editing forever. It helps you hide your past association and edit to protect your privacy. Once processed, the account will be locked and renamed. [https://phabricator.wikimedia.org/T367329]
* Have you tried monitoring and addressing vandalism in Wikipedia using your phone? [https://diff.wikimedia.org/2024/07/10/%d9%90addressing-vandalism-with-a-tap-the-journey-of-introducing-the-patrolling-feature-in-the-mobile-app/ A Diff blog post on Patrolling features in the Mobile App] highlights some of the new capabilities of the feature, including swiping through a feed of recent changes and a personal library of user talk messages for use when patrolling from your phone.
* Wikimedia contributors and GLAM (galleries, libraries, archives, and museums) organisations can now learn and measure the impact Wikimedia Commons is having towards creating quality encyclopedic content using the [https://doc.wikimedia.org/generated-data-platform/aqs/analytics-api/reference/commons.html Commons Impact Metrics] analytics dashboard. The dashboard offers organizations analytics on things like monthly edits in a category, the most viewed files, and which Wikimedia articles are using Commons images. As a result of these new data dumps, GLAM organisation can more reliably measure their return on investment for programs bringing content into the digital Commons. [https://diff.wikimedia.org/2024/07/19/commons-impact-metrics-now-available-via-data-dumps-and-api/]
'''Project Updates'''
* Come share your ideas for improving the wikis on the newly reopened [[m:Special:MyLanguage/Community Wishlist|Community Wishlist]]. The Community Wishlist is Wikimedia’s forum for volunteers to share ideas (called wishes) to improve how the wikis work. The new version of the wishlist is always open, works with both wikitext and Visual Editor, and allows wishes in any language.
'''Learn more'''
* Have you ever wondered how Wikimedia software works across over 300 languages? This is 253 languages more than the Google Chrome interface, and it's no accident. The Language and Product Localization Team at the Wikimedia Foundation supports your work by adapting all the tools and interfaces in the MediaWiki software so that contributors in our movement who translate pages and strings can translate them and have the sites in all languages. Read more about the team and their upcoming work on [https://diff.wikimedia.org/2024/07/17/building-towards-a-robust-multilingual-knowledge-ecosystem-for-the-wikimedia-movement/ Diff].
* How can Wikimedia build innovative and experimental products while maintaining such heavily used websites? A recent [https://diff.wikimedia.org/2024/07/09/on-the-value-of-experimentation/ blog post] by WMF staff Johan Jönsson highlights the work of the [[m:Future Audiences#Objectives and Key Results|WMF Future Audience initiative]], where the goal is not to build polished products but test out new ideas, such as a [[m:Future_Audiences/Experiments: conversational/generative AI|ChatGPT plugin]] and [[m:Future_Audiences/Experiment:Add a Fact|Add a Fact]], to help take Wikimedia into the future.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/30|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' You can also get other news from the [[m:Special:MyLanguage/Wikimedia Foundation Bulletin|Wikimedia Foundation Bulletin]].
</div><section end="technews-2024-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:05, 23 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27142915 -->
== Wikipedia translation of the week: 2024-31 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Nederlandsche Cocaïnefabriek]]'''<br /> <small>''([[:es:Nederlandsche Cocaïnefabriek]]) ([[:nl:Nederlandsche Cocaïnefabriek]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Nederlandsche Cocainefabriek Schinkelstraat Amsterdam architect HH Baanders 1902.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Nederlandsche Cocaïnefabriek''' (Dutch pronunciation: [ˈneːdərlɑntsə koːkaːˈinəfaːˌbrik]; English: Dutch Cocaine Factory) or NCF was an Amsterdam-based company producing cocaine for medical purposes in the 20th century. It imported its raw materials mainly from the Dutch East Indies and sold its products across Europe, making good profits especially in the early years of World War I. The NCF produced morphine, heroin and ephedrine as well.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:44, 29 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27150339 -->
== Tech News: 2024-31 ==
<section begin="technews-2024-W31"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/31|Translations]] are available.
'''Feature news'''
* Editors using the Visual Editor in languages that use non-Latin characters for numbers, such as Hindi, Manipuri and Eastern Arabic, may notice some changes in the formatting of reference numbers. This is a side effect of preparing a new sub-referencing feature, and will also allow fixing some general numbering issues in Visual Editor. If you notice any related problems on your wiki, please share details at the [[m:Talk:WMDE Technical Wishes/Sub-referencing|project talkpage]].
'''Bugs status'''
* Some logged-in editors were briefly unable to edit or load pages last week. [[phab:T370304|These errors]] were mainly due to the addition of new [[mw:Special:MyLanguage/Help:Extension:Linter|linter]] rules which led to caching problems. Fixes have been applied and investigations are continuing.
* Editors can use the [[mw:Special:MyLanguage/Trust and Safety Product/IP Info|IP Information tool]] to get information about IP addresses. This tool is available as a Beta Feature in your preferences. The tool was not available for a few days last week, but is now working again. Thank you to Shizhao for filing the bug report. You can read about that, and [[m:Tech/News/Recently resolved community tasks#2024-07-25|28 other community-submitted tasks]] that were resolved last week.
'''Project updates'''
* There are new features and improvements to Phabricator from the Release Engineering and Collaboration Services teams, and some volunteers, including: the search systems, the new task creation system, the login systems, the translation setup which has resulted in support for more languages (thanks to Pppery), and fixes for many edge-case errors. You can [[phab:phame/post/view/316/iterative_improvements/|read details about these and other improvements in this summary]].
* There is an [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|update on the Charts project]]. The team has decided which visualization library to use, which chart types to start focusing on, and where to store chart definitions.
* One new wiki has been created: a {{int:project-localized-name-group-wikivoyage}} in [[d:Q9056|Czech]] ([[voy:cs:|<code>voy:cs:</code>]]) [https://phabricator.wikimedia.org/T370905]
'''Learn more'''
* There is a [[diffblog:2024/07/26/the-journey-to-open-our-first-data-center-in-south-america/|new Wikimedia Foundation data center]] in São Paulo, Brazil which helps to reduce load times.
* There is new [[diffblog:2024/07/22/the-perplexing-process-of-uploading-images-to-wikipedia/|user research]] on problems with the process of uploading images.
* Commons Impact Metrics are [[diffblog:2024/07/19/commons-impact-metrics-now-available-via-data-dumps-and-api/|now available]] via data dumps and API.
* The latest quarterly [[mw:Technical Community Newsletter/2024/July|Technical Community Newsletter]] is now available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/31|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:11, 29 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27164109 -->
== Wikipedia translation of the week: 2024-32 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Suffrage drama]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Pamphlet from NAWSA for women's suffrage plays, page 1.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Suffrage drama''' (also known as suffrage plays or suffrage theatre) is a form of dramatic literature that emerged during the British women's suffrage movement in the early twentieth century. Suffrage performances lasted approximately from 1907-1914. Many suffrage plays called for a predominant or all female cast. Suffrage plays served to reveal issues behind the suffrage movement.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 5 August 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27150339 -->
== Tech News: 2024-32 ==
<section begin="technews-2024-W32"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/32|Translations]] are available.
'''Feature news'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Two new parser functions will be available this week: <code><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic_words#dir|#dir]]<nowiki>}}</nowiki></code> and <code><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic_words#bcp47|#bcp47]]<nowiki>}}</nowiki></code>. These will reduce the need for <code>Template:Dir</code> and <code>Template:BCP47</code> on Commons and allow us to [[phab:T343131|drop 100 million rows]] from the "what links here" database. Editors at any wiki that use these templates, can help by replacing the templates with these new functions. The templates at Commons will be updated during the Hackathon at Wikimania. [https://phabricator.wikimedia.org/T359761][https://phabricator.wikimedia.org/T366623]
* Communities can request the activation of the visual editor on entire namespaces where discussions sometimes happen (for instance ''Wikipedia:'' or ''Wikisource:'' namespaces) if they understand the [[mw:Special:MyLanguage/Help:VisualEditor/FAQ#WPNS|known limitations]]. For discussions, users can already use [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]] in these namespaces.
* The tracking category "Pages using Timeline" has been renamed to "Pages using the EasyTimeline extension" [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3ATimeline-tracking-category&namespace=8 in TranslateWiki]. Wikis that have created the category locally should rename their local creation to match.
'''Project updates'''
* Editors who help to organize WikiProjects and similar on-wiki collaborations, are invited to share ideas and examples of successful collaborations with the Campaigns and Programs teams. You can fill out [[m:Special:MyLanguage/Campaigns/WikiProjects|a brief survey]] or share your thoughts [[m:Talk:Campaigns/WikiProjects|on the talkpage]]. The teams are particularly looking for details about successful collaborations on non-English wikis.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The new parser is being rolled out on {{int:project-localized-name-group-wikivoyage}} wikis over the next few months. The {{int:project-localized-name-enwikivoyage}} and {{int:project-localized-name-hewikivoyage}} were [[phab:T365367|switched]] to Parsoid last week. For more information, see [[mw:Parsoid/Parser_Unification|Parsoid/Parser Unification]].
'''Learn more'''
* There will be more than 200 sessions at Wikimania this week. Here is a summary of some of the [[diffblog:2024/08/05/interested-in-product-and-tech-here-are-some-wikimania-sessions-you-dont-want-to-miss/|key sessions related to the product and technology area]].
* The latest [[m:Special:MyLanguage/Wikimedia Foundation Bulletin/2024/07-02|Wikimedia Foundation Bulletin]] is available.
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2024/July|Language and Internationalization newsletter]] is available. It includes: New design previews for Translatable pages; Updates about MinT for Wiki Readers; the release of Translation dumps; and more.
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/31|Growth newsletter]] is available.
* The latest monthly [[mw:Special:MyLanguage/MediaWiki Product Insights/Reports/July 2024|MediaWiki Product Insights newsletter]] is available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/32|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:44, 5 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27233905 -->
== Wikipedia translation of the week: 2024-33 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Karatgurk]]'''<br /> <small>''([[:it:Karatgurk]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
In the Australian Aboriginal mythology of the Aboriginal people of south-eastern Australian state of Victoria, the '''Karatgurk''' were seven sisters who represented the constellation known in western astronomy as the Pleiades.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 12 August 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27264174 -->
== Tech News: 2024-33 ==
<section begin="technews-2024-W33"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/33|Translations]] are available.
'''Feature news'''
* [[mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilter]] editors and maintainers can now [[mw:Special:MyLanguage/Extension:AbuseFilter/Actions#Show a CAPTCHA|make a CAPTCHA show if a filter matches an edit]]. This allows communities to quickly respond to spamming by automated bots. [https://phabricator.wikimedia.org/T20110]
* [[m:Special:MyLanguage/Stewards|Stewards]] can now specify if global blocks should prevent account creation. Before [[phab:T17273|this change]] by the [[mw:Special:MyLanguage/Trust and Safety Product|Trust and Safety Product]] Team, all global blocks would prevent account creation. This will allow stewards to reduce the unintended side-effects of global blocks on IP addresses.
'''Project updates'''
* [[wikitech:Help talk:Toolforge/Toolforge standards committee#August_2024_committee_nominations|Nominations are open on Wikitech]] for new members to refresh the [[wikitech:Help:Toolforge/Toolforge standards committee|Toolforge standards committee]]. The committee oversees the Toolforge [[wikitech:Help:Toolforge/Right to fork policy|Right to fork policy]] and [[wikitech:Help:Toolforge/Abandoned tool policy|Abandoned tool policy]] among other duties. Nominations will remain open until at least 2024-08-26.
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q2880037|West Coast Bajau]] ([[w:bdr:|<code>w:bdr:</code>]]) [https://phabricator.wikimedia.org/T371757]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/33|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:22, 12 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27253654 -->
== Wikipedia translation of the week: 2024-34 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:B1 (classification)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''B1''' is a medical-based Paralympic classification for blind sport. Athletes in this classification are totally or almost totally blind. It is used by a number of blind sports including blind tennis, para-alpine skiing, para-Nordic skiing, blind cricket, blind golf, five-a-side football, goalball and judo. Some other sports, including adaptive rowing, athletics and swimming, have equivalents to this class.
The B1 classification was first created by the IBSA in the 1970s, and has largely remained unchanged since despite an effort by the International Paralympic Committee (IPC) to move towards a more functional and evidence-based classification system. Classification is often handled on the international level by the International Blind Sports Federation (IBSA) but it sometimes handled by national sport federations. There are exceptions for sports like athletics and cycling, where classification is handled by their own governing bodies.
Equipment utilized by competitors in this class may differ from sport to sport, and may include sighted guides, guide rails, beeping balls and clapsticks. There may be some modifications related to equipment and rules to specifically address needs of competitors in this class to allow them to compete in specific sports. Some sports specifically do not allow a guide, whereas cycling and skiing require one.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:56, 19 August 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27278917 -->
== Tech News: 2024-34 ==
<section begin="technews-2024-W34"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/34|Translations]] are available.
'''Feature news'''
* Editors who want to re-use references but with different details such as page numbers, will be able to do so by the end of 2024, using a new [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#Sub-referencing in a nutshell|sub-referencing]] feature. You can read more [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|about the project]] and [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#Test|how to test the prototype]].
* Editors using tracking categories to identify which pages use specific extensions may notice that six of the categories have been renamed to make them more easily understood and consistent. These categories are automatically added to pages that use specialized MediaWiki extensions. The affected names are for: [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Aintersection-category&namespace=8 DynamicPageList], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Akartographer-tracking-category&namespace=8 Kartographer], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Aphonos-tracking-category&namespace=8 Phonos], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Arss-tracking-category&namespace=8 RSS], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Ascore-use-category&namespace=8 Score], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Awikihiero-usage-tracking-category&namespace=8 WikiHiero]. Wikis that have created the category locally should rename their local creation to match. Thanks to Pppery for these improvements. [https://phabricator.wikimedia.org/T347324]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Technical volunteers who edit modules and want to get a list of the categories used on a page, can now do so using the <code><bdi lang="zxx" dir="ltr">categories</bdi></code> property of <code><bdi lang="zxx" dir="ltr">[[mediawikiwiki:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Title objects|mw.title objects]]</bdi></code>. This enables wikis to configure workflows such as category-specific edit notices. Thanks to SD001 for these improvements. [https://phabricator.wikimedia.org/T50175][https://phabricator.wikimedia.org/T85372]
'''Bugs status'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Your help is needed to check if any pages need to be moved or deleted. A maintenance script was run to clean up unreachable pages (due to Unicode issues or introduction of new namespaces/namespace aliases). The script tried to find appropriate names for the pages (e.g. by following the Unicode changes or by moving pages whose titles on Wikipedia start with <code>Talk:WP:</code> so that their titles start with <code>Wikipedia talk:</code>), but it may have failed for some pages, and moved them to <bdi lang="zxx" dir="ltr">[[Special:PrefixIndex/T195546/]]</bdi> instead. Your community should check if any pages are listed there, and move them to the correct titles, or delete them if they are no longer needed. A full log (including pages for which appropriate names could be found) is available in [[phab:P67388]].
* Editors who volunteer as [[mw:Special:MyLanguage/Help:Growth/Mentorship|mentors]] to newcomers on their wiki are once again able to access lists of potential mentees who they can connect with to offer help and guidance. This functionality was restored thanks to [[phab:T372164|a bug fix]]. Thank you to Mbch331 for filing the bug report. You can read about that, and 18 other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Project updates'''
* The application deadline for the [[m:Special:MyLanguage/Product and Technology Advisory Council/Proposal|Product & Technology Advisory Council]] (PTAC) has been extended to September 16. Members will help by providing advice to Foundation Product and Technology leadership on short and long term plans, on complex strategic problems, and help to get feedback from more contributors and technical communities. Selected members should expect to spend roughly 5 hours per month for the Council, during the one year pilot. Please consider applying, and spread the word to volunteers you think would make a positive contribution to the committee.
'''Learn more'''
* The [[m:Special:MyLanguage/Coolest Tool Award#2024 Winners|2024 Coolest Tool Awards]] were awarded at Wikimania, in seven categories. For example, one award went to the ISA Tool, used for adding structured data to files on Commons, which was recently improved during the [[m:Event:Wiki Mentor Africa ISA Hackathon 2024|Wiki Mentor Africa Hackathon]]. You can see video demonstrations of each tool at the awards page. Congratulations to this year's recipients, and thank you to all tool creators and maintainers.
* The latest [[m:Special:MyLanguage/Wikimedia Foundation Bulletin/2024/08-01|Wikimedia Foundation Bulletin]] is available, and includes some highlights from Wikimania, an upcoming Language community meeting, and other news from the movement.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/34|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W34"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:54, 20 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27307284 -->
== Wikipedia translation of the week: 2024-35 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Erzi (village)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Caucasus, Ingushetia, Ингушские боевые и смотровые башни, горы Кавказа.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Erzi''' (Russian: Эрзи; Ingush: Аьрзи, romanized: Ärzi, lit. 'Eagle') is a medieval village (aul) in the Dzheyrakhsky District of Ingushetia. It is part of the rural settlement (administrative center) of Olgeti. The entire territory of the settlement is included in the Dzheyrakh-Assa State Historical-Architectural and Natural Museum-Reserve and is under state protection.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:19, 26 August 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27345183 -->
== Tech News: 2024-35 ==
<section begin="technews-2024-W35"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/35|Translations]] are available.
'''Feature news'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Administrators can now test the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] feature on test2wiki. This was done to allow cross-wiki testing of temporary accounts, for when temporary accounts switch between projects. The feature was enabled on testwiki a few weeks ago. No further temporary account deployments are scheduled yet. Temporary Accounts is a project to create a new type of user account that replaces IP addresses of unregistered editors which are no longer made public. Please [[mw:Talk:Trust and Safety Product/Temporary Accounts|share your opinions and questions on the project talk page]].
* Later this week, editors at wikis that use [[mw:Special:MyLanguage/Extension:FlaggedRevs|FlaggedRevs]] (also known as "Pending Changes") may notice that the indicators at the top of articles have changed. This change makes the system more consistent with the rest of the MediaWiki interface. [https://phabricator.wikimedia.org/T191156]
'''Bugs status'''
* Editors who use the 2010 wikitext editor, and use the Character Insert buttons, will [[phab:T361465|no longer]] experience problems with the buttons adding content into the edit-summary instead of the edit-window. You can read more about that, and 26 other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Project updates'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] Please review and vote on [[m:Special:MyLanguage/Community Wishlist/Focus areas|Focus Areas]], which are groups of wishes that share a problem. Focus Areas were created for the newly reopened Community Wishlist, which is now open year-round for submissions. The first batch of focus areas are specific to moderator workflows, around welcoming newcomers, minimizing repetitive tasks, and prioritizing tasks. Once volunteers have reviewed and voted on focus areas, the Foundation will then review and select focus areas for prioritization.
* Do you have a project and are willing to provide a three (3) month mentorship for an intern? [[mw:Special:MyLanguage/Outreachy|Outreachy]] is a twice a year program for people to participate in a paid internship that will start in December 2024 and end in early March 2025, and they need mentors and projects to work on. Projects can be focused on coding or non-coding (design, documentation, translation, research). See the Outreachy page for more details, and a list of past projects since 2013.
'''Learn more'''
* If you're curious about the product and technology improvements made by the Wikimedia Foundation last year, read [[diffblog:2024/08/21/wikimedia-foundation-product-technology-improving-the-user-experience/|this recent highlights summary on Diff]].
* To learn more about the technology behind the Wikimedia projects, you can now watch sessions from the technology track at Wikimania 2024 on Commons. This week, check out:
** [[c:File:Wikimania 2024 - Ohrid - Day 2 - Community Configuration - Shaping On-Wiki Functionality Together.webm|Community Configuration - Shaping On-Wiki Functionality Together]] (55 mins) - about the [[mw:Special:MyLanguage/Community Configuration|Community Configuration]] project.
** [[c:File:Wikimania 2024 - Belgrade - Day 1 - Future of MediaWiki. A sustainable platform to support a collaborative user base and billions of page views.webm|Future of MediaWiki. A sustainable platform to support a collaborative user base and billions of page views]] (30 mins) - an overview for both technical and non technical audiences, covering some of the challenges and open questions, related to the [[mw:MediaWiki Product Insights|platform evolution, stewardship and developer experiences]] research.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/35|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:34, 26 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27341211 -->
== Tech News: 2024-36 ==
<section begin="technews-2024-W36"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/36|Translations]] are available.
'''Weekly highlight'''
* Editors and volunteer developers interested in data visualisation can now test the new software for charts. Its early version is available on beta Commons and beta Wikipedia. This is an important milestone before making charts available on regular wikis. You can [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|read more about this project update]] and help to test the charts.
'''Feature news'''
* Editors who use the [[{{#special:Unusedtemplates}}]] page can now filter out pages which are expected to be there permanently, such as sandboxes, test-cases, and templates that are always substituted. Editors can add the new magic word [[mw:Special:MyLanguage/Help:Magic words#EXPECTUNUSEDTEMPLATE|<code dir="ltr"><nowiki>__EXPECTUNUSEDTEMPLATE__</nowiki></code>]] to a template page to hide it from the listing. Thanks to Sophivorus and DannyS712 for these improvements. [https://phabricator.wikimedia.org/T184633]
* Editors who use the New Topic tool on discussion pages, will [[phab:T334163|now be reminded]] to add a section header, which should help reduce the quantity of newcomers who add sections without a header. You can read more about that, and {{formatnum:28}} other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
* Last week, some Toolforge tools had occasional connection problems. The cause is still being investigated, but the problems have been resolved for now. [https://phabricator.wikimedia.org/T373243]
* Translation administrators at multilingual wikis, when editing multiple translation units, can now easily mark which changes require updates to the translation. This is possible with the [[phab:T298852#10087288|new dropdown menu]].
'''Project updates'''
* A new draft text of a policy discussing the use of Wikimedia's APIs [[m:Special:MyLanguage/API Policy Update 2024|has been published on Meta-Wiki]]. The draft text does not reflect a change in policy around the APIs; instead, it is an attempt to codify existing API rules. Comments, questions, and suggestions are welcome on [[m:Talk:API Policy Update 2024|the proposed update’s talk page]] until September 13 or until those discussions have concluded.
'''Learn more'''
* To learn more about the technology behind the Wikimedia projects, you can now watch sessions from the technology track at Wikimania 2024 on Commons. This week, check out:
** [[c:File:Wikimania 2024 - Ohrid - Day 2 - Charts, the successor of Graphs - A secure and extensible tool for data visualization.webm|Charts, the successor of Graphs - A secure and extensible tool for data visualization]] (25 mins) – about the above-mentioned Charts project.
** [[c:File:Wikimania 2024 - Ohrid - Day 3 - State of Language Technology and Onboarding at Wikimedia.webm|State of Language Technology and Onboarding at Wikimedia]] (90 mins) – about some of the language tools that support Wikimedia sites, such as [[mw:Special:MyLanguage/Content translation|Content]]/[[mw:Special:MyLanguage/Content translation/Section translation|Section Translation]], [[mw:Special:MyLanguage/MinT|MinT]], and LanguageConverter; also the current state and future of languages onboarding. [https://phabricator.wikimedia.org/T368772]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/36|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:08, 3 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27390268 -->
== Wikipedia translation of the week: 2024-37 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cappadocian calendar]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''Cappadocian calendar''' was a solar calendar that was derived from the Persian Zoroastrian calendar. It is named after the historic region Cappadocia in present-day Turkey, where it was used. The calendar, which had 12 months of 30 days each and five epagomenal days, originated between 550 and 330 BC, when Cappadocia was part of the Persian Achaemenid Empire. The Cappadocian calendar was identical to the Zoroastrian calendar; this can be seen in its structure, in the Avestan names and in the order of the months. The Cappadocian calendar reflects the Iranian cultural influence in the region.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:42, 9 September 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27357319 -->
== Tech News: 2024-37 ==
<section begin="technews-2024-W37"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/37|Translations]] are available.
'''Feature news'''
* Starting this week, the standard [[mw:Special:MyLanguage/Extension:CodeMirror|syntax highlighter]] will receive new colors that make them compatible in dark mode. This is the first of many changes to come as part of a major upgrade to syntax highlighting. You can learn more about what's to come on the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|help page]]. [https://phabricator.wikimedia.org/T365311][https://phabricator.wikimedia.org/T259059]
* Editors of wikis using Wikidata will now be notified of only relevant Wikidata changes in their watchlist. This is because the Lua functions <bdi lang="zxx" dir="ltr"><code>entity:getSitelink()</code></bdi> and <bdi lang="zxx" dir="ltr"><code>mw.wikibase.getSitelink(qid)</code></bdi> will have their logic unified for tracking different aspects of sitelinks to reduce junk notifications from [[m:Wikidata For Wikimedia Projects/Projects/Watchlist Wikidata Sitelinks Tracking|inconsistent sitelinks tracking]]. [https://phabricator.wikimedia.org/T295356]
'''Project updates'''
* Users of all Wikis will have access to Wikimedia sites as read-only for a few minutes on September 25, starting at 15:00 UTC. This is a planned datacenter switchover for maintenance purposes. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T370962]
* Contributors of [[phab:T363538#10123348|11 Wikipedias]], including English will have a new <bdi lang="zxx" dir="ltr"><code>MOS</code></bdi> namespace added to their Wikipedias. This improvement ensures that links beginning with <bdi lang="zxx" dir="ltr"><code>MOS:</code></bdi> (usually shortcuts to the [[w:en:Wikipedia:Manual of Style|Manual of Style]]) are not broken by [[w:en:Mooré|Mooré]] Wikipedia (language code <bdi lang="zxx" dir="ltr"><code>mos</code></bdi>). [https://phabricator.wikimedia.org/T363538]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/37|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:53, 9 September 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27424457 -->
== Tech News: 2024-38 ==
<section begin="technews-2024-W38"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/38|Translations]] are available.
'''Improvements and Maintenance'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] Editors interested in templates can help by reading the latest Wishlist focus area, [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|Template recall and discovery]], and share your feedback on the talkpage. This input helps the Community Tech team to decide the right technical approach to build. Everyone is also encouraged to continue adding [[m:Special:MyLanguage/Community Wishlist|new wishes]].
* The new automated [[{{#special:NamespaceInfo}}]] page helps editors understand which [[mw:Special:MyLanguage/Help:Namespaces|namespaces]] exist on each wiki, and some details about how they are configured. Thanks to DannyS712 for these improvements. [https://phabricator.wikimedia.org/T263513]
* [[mw:Special:MyLanguage/Help:Edit check#Reference check|References Check]] is a feature that encourages editors to add a citation when they add a new paragraph to a Wikipedia article. For a short time, the corresponding tag "Edit Check (references) activated" was erroneously being applied to some edits outside of the main namespace. This has been fixed. [https://phabricator.wikimedia.org/T373692]
* It is now possible for a wiki community to change the order in which a page’s categories are displayed on their wiki. By default, categories are displayed in the order they appear in the wikitext. Now, wikis with a consensus to do so can [[m:Special:MyLanguage/Requesting wiki configuration changes|request]] a configuration change to display them in alphabetical order. [https://phabricator.wikimedia.org/T373480]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Tool authors can now access ToolsDB's [[wikitech:Portal:Data Services#ToolsDB|public databases]] from both [[m:Special:MyLanguage/Research:Quarry|Quarry]] and [[wikitech:Superset|Superset]]. Those databases have always been accessible to every [[wikitech:Portal:Toolforge|Toolforge]] user, but they are now more broadly accessible, as Quarry can be accessed by anyone with a Wikimedia account. In addition, Quarry's internal database can now be [[m:Special:MyLanguage/Research:Quarry#Querying Quarry's own database|queried from Quarry itself]]. This database contains information about all queries that are being run and starred by users in Quarry. This information was already public through the web interface, but you can now query it using SQL. You can read more about that, and {{formatnum:20}} other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
* Any pages or tools that still use the very old CSS classes <bdi lang="zxx" dir="ltr"><code>mw-message-box</code></bdi> need to be updated. These old classes will be removed next week or soon afterwards. Editors can use a [https://global-search.toolforge.org/?q=mw-message-box®ex=1&namespaces=&title= global-search] to determine what needs to be changed. It is possible to use the newer <bdi lang="zxx" dir="ltr"><code>cdx-message</code></bdi> group of classes as a replacement (see [https://doc.wikimedia.org/codex/latest/components/demos/message.html#css-only-version the relevant Codex documentation], and [https://meta.wikimedia.org/w/index.php?title=Tech/Header&diff=prev&oldid=27449042 an example update]), but using locally defined onwiki classes would be best. [https://phabricator.wikimedia.org/T374499]
'''Technical project updates'''
* Next week, all Wikimedia wikis will be read-only for a few minutes. This will start on September 25 at [https://zonestamp.toolforge.org/1727276400 15:00 UTC]. This is a planned datacenter switchover for maintenance purposes. [[m:Special:MyLanguage/Tech/Server switch|This maintenance process also targets other services.]] The previous switchover took 3 minutes, and the Site Reliability Engineering teams use many tools to make sure that this essential maintenance work happens as quickly as possible. [https://phabricator.wikimedia.org/T370962]
'''Tech in depth'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The latest monthly [[mw:Special:MyLanguage/MediaWiki Product Insights/Reports/August 2024|MediaWiki Product Insights newsletter]] is available. This edition includes details about: research about [[mw:Special:MyLanguage/Manual:Hooks|hook]] handlers to help simplify development, research about performance improvements, work to improve the REST API for end-users, and more.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] To learn more about the technology behind the Wikimedia projects, you can now watch sessions from the technology track at Wikimania 2024 on Commons. This week, check out:
** [[c:File:Wikimania 2024 - Auditorium Kyiv - Day 4 - Hackathon Showcase.webm|Hackathon Showcase]] (45 mins) - 19 short presentations by some of the Hackathon participants, describing some of the projects they worked on, such as automated testing of maintenance scripts, a video-cutting command line tool, and interface improvements for various tools. There are [[phab:T369234|more details and links available]] in the Phabricator task.
** [[c:File:Co-Creating a Sustainable Future for the Toolforge Ecosystem.webm|Co-Creating a Sustainable Future for the Toolforge Ecosystem]] (40 mins) - a roundtable discussion for tool-maintainers, users, and supporters of Toolforge about how to make the platform sustainable and how to evaluate the tools available there.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/38|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:03, 17 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27460876 -->
== Wikipedia translation of the week: 2024-39 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Independence Day (Albania)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Independence Day''' (Albanian: Dita e Pavarësisë) is a public holiday in Albania observed on 28 November. It commemorates the Albanian Declaration of Independence (from the Ottoman Empire), which was ratified by the All-Albanian Congress on 28 November 1912, establishing the state of Albania.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:29, 23 September 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27456350 -->
== Tech News: 2024-39 ==
<section begin="technews-2024-W39"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/39|Translations]] are available.
'''Weekly highlight'''
* All wikis will be [[m:Special:MyLanguage/Tech/Server switch|read-only]] for a few minutes on Wednesday September 25 at [https://zonestamp.toolforge.org/1727276400 15:00 UTC]. Reading the wikis will not be interrupted, but editing will be paused. These twice-yearly processes allow WMF's site reliability engineering teams to remain prepared to keep the wikis functioning even in the event of a major interruption to one of our data centers.
'''Updates for editors'''
[[File:Add alt text from a halfsheet, with the article behind.png|thumb|A screenshot of the interface for the Alt Text suggested-edit feature]]
* Editors who use the iOS Wikipedia app in Spanish, Portuguese, French, or Chinese, may see the [[mw:Special:MyLanguage/Wikimedia Apps/iOS Suggested edits project/Alt Text Experiment|Alt Text suggested-edit experiment]] after editing an article, or completing a suggested edit using "[[mw:Special:MyLanguage/Wikimedia Apps/iOS Suggested edits project#Hypothesis 2 Add an Image Suggested Edit|Add an image]]". Alt-text helps people with visual impairments to read Wikipedia articles. The team aims to learn if adding alt-text to images is a task that editors can be successful with. Please share any feedback on [[mw:Talk:Wikimedia Apps/iOS Suggested edits project/Alt Text Experiment|the discussion page]].
* The Codex color palette has been updated with new and revised colors for the MediaWiki user interfaces. The [[mw:Special:MyLanguage/Design System Team/Color/Design documentation#Updates|most noticeable changes]] for editors include updates for: dark mode colors for Links and for quiet Buttons (progressive and destructive), visited Link colors for both light and dark modes, and background colors for system-messages in both light and dark modes.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] It is now possible to include clickable wikilinks and external links inside code blocks. This includes links that are used within <code><nowiki><syntaxhighlight></nowiki></code> tags and on code pages (JavaScript, CSS, Scribunto and Sanitized CSS). Uses of template syntax <code><nowiki>{{…}}</nowiki></code> are also linked to the template page. Thanks to SD0001 for these improvements. [https://phabricator.wikimedia.org/T368166]
* Two bugs were fixed in the [[m:Special:MyLanguage/Account vanishing|GlobalVanishRequest]] system by improving the logging and by removing an incorrect placeholder message. [https://phabricator.wikimedia.org/T370595][https://phabricator.wikimedia.org/T372223]
* View all {{formatnum:25}} community-submitted {{PLURAL:25|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] From [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]]:
** The API now enables 5,000 on-demand API requests per month and twice-monthly HTML snapshots freely (gratis and libre). More information on the updates and also improvements to the software development kits (SDK) are explained on [https://enterprise.wikimedia.com/blog/enhanced-free-api/ the project's blog post]. While Wikimedia Enterprise APIs are designed for high-volume commercial reusers, this change enables many more community use-cases to be built on the service too.
** The Snapshot API (html dumps) have added beta Structured Contents endpoints ([https://enterprise.wikimedia.com/blog/structured-contents-snapshot-api/ blog post on that]) as well as released two beta datasets (English and French Wikipedia) from that endpoint to Hugging Face for public use and feedback ([https://enterprise.wikimedia.com/blog/hugging-face-dataset/ blog post on that]). These pre-parsed data sets enable new options for researchers, developers, and data scientists to use and study the content.
'''In depth'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The Wikidata Query Service (WDQS) is used to get answers to questions using the Wikidata data set. As Wikidata grows, we had to make a major architectural change so that WDQS could remain performant. As part of the [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS graph split|WDQS Graph Split project]], we have new SPARQL endpoints available for serving the "[https://query-scholarly.wikidata.org scholarly]" and "[https://query-main.wikidata.org main]" subgraphs of Wikidata. The [http://query.wikidata.org query.wikidata.org endpoint] will continue to serve the full Wikidata graph until March 2025. After this date, it will only serve the main graph. For more information, please see [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/September 2024 scaling update|the announcement on Wikidata]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/39|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:37, 23 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27493779 -->
== Wikipedia translation of the week: 2024-40 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Wildlife of Bahrain]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Birds in Al-Areen Wildlife Park.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The wildlife of the archipelago of Bahrain, is more varied than might be expected of this small group of islands in the Persian Gulf. Apart from a strip of the north and west of the main island, where crops are grown with irrigation, the land is arid. With a very hot dry summer, a mild winter, and brackish groundwater, the plants need adaptations in order to survive. Nevertheless, 196 species of higher plant have been recorded here, as well as about seventeen species of terrestrial mammals, many birds and reptiles, and many migratory birds visit the islands in autumn and spring.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:57, 30 September 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27456350 -->
== Tech News: 2024-40 ==
<section begin="technews-2024-W40"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/40|Translations]] are available.
'''Updates for editors'''
* Readers of [[phab:T375401|42 more wikis]] can now use Dark Mode. If the option is not yet available for logged-out users of your wiki, this is likely because many templates do not yet display well in Dark Mode. Please use the [https://night-mode-checker.wmcloud.org/ night-mode-checker tool] if you are interested in helping to reduce the number of issues. The [[mw:Special:MyLanguage/Recommendations for night mode compatibility on Wikimedia wikis|recommendations page]] provides guidance on this. Dark Mode is enabled on additional wikis once per month.
* Editors using the 2010 wikitext editor as their default can access features from the 2017 wikitext editor by adding <code dir=ltr>?veaction=editsource</code> to the URL. If you would like to enable the 2017 wikitext editor as your default, it can be set in [[Special:Preferences#mw-input-wpvisualeditor-newwikitext|your preferences]]. [https://phabricator.wikimedia.org/T239796]
* For logged-out readers using the Vector 2022 skin, the "donate" link has been moved from a collapsible menu next to the content area into a more prominent top menu, next to "Create an account". This restores the link to the level of prominence it had in the Vector 2010 skin. [[mw:Readers/2024 Reader and Donor Experiences#Donor Experiences (Key Result WE 3.2 and the related hypotheses)|Learn more]] about the changes related to donor experiences. [https://phabricator.wikimedia.org/T373585]
* The CampaignEvents extension provides tools for organizers to more easily manage events, communicate with participants, and promote their events on the wikis. The extension has been [[m:Special:MyLanguage/CampaignEvents/Deployment status|enabled]] on Arabic Wikipedia, Igbo Wikipedia, Swahili Wikipedia, and Meta-Wiki. [[w:zh:Wikipedia:互助客栈/其他#引進CampaignEvents擴充功能|Chinese Wikipedia has decided]] to enable the extension, and discussions on the extension are in progress [[w:es:Wikipedia:Votaciones/2024/Sobre la política de Organizadores de Eventos|on Spanish Wikipedia]] and [[d:Wikidata:Project chat#Enabling the CampaignEvents Extention on Wikidata|on Wikidata]]. To learn how to enable the extension on your wiki, you can visit [[m:Special:MyLanguage/CampaignEvents|the CampaignEvents page on Meta-Wiki]].
* View all {{formatnum:22}} community-submitted {{PLURAL:22|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Developers with an account on Wikitech-wiki should [[wikitech:Wikitech/SUL-migration|check if any action is required]] for their accounts. The wiki is being changed to use the single-user-login (SUL) system, and other configuration changes. This change will help reduce the overall complexity for the weekly software updates across all our wikis.
'''In depth'''
* The [[m:Special:MyLanguage/Tech/Server switch|server switch]] was completed successfully last week with a read-only time of [[wikitech:Switch Datacenter#Past Switches|only 2 minutes 46 seconds]]. This periodic process makes sure that engineers can switch data centers and keep all of the wikis available for readers, even if there are major technical issues. It also gives engineers a chance to do maintenance and upgrades on systems that normally run 24 hours a day, and often helps to reveal weaknesses in the infrastructure. The process involves dozens of software services and hundreds of hardware servers, and requires multiple teams working together. Work over the past few years has reduced the time from 17 minutes down to 2–3 minutes. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/66ZW7B2MG63AESQVTXDIFQBDBS766JGW/]
'''Meetings and events'''
* October 4–6: [[m:Special:MyLanguage/WikiIndaba conference 2024|WikiIndaba Conference's Hackathon]] in Johannesburg, South Africa
* November 4–6: [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Fall 2024|MediaWiki Users and Developers Conference Fall 2024]] in Vienna, Austria
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/40|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:21, 30 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27530062 -->
== Tech News: 2024-41 ==
<section begin="technews-2024-W41"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/41|Translations]] are available.
'''Weekly highlight'''
* Communities can now request installation of [[mw:Special:MyLanguage/Moderator Tools/Automoderator|Automoderator]] on their wiki. Automoderator is an automated anti-vandalism tool that reverts bad edits based on scores from the new "Revert Risk" machine learning model. You can [[mw:Special:MyLanguage/Extension:AutoModerator/Deploying|read details about the necessary steps]] for installation and configuration. [https://phabricator.wikimedia.org/T336934]
'''Updates for editors'''
* Translators in wikis where [[mw:Special:MyLanguage/Content translation/Section translation#Try the tool|the mobile experience of Content Translation is available]], can now customize their articles suggestion list from 41 filtering options when using the tool. This topic-based article suggestion feature makes it easy for translators to self-discover relevant articles based on their area of interest and translate them. You can [https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&active-list=suggestions try it with your mobile device]. [https://phabricator.wikimedia.org/T368422]
* View all {{formatnum:12}} community-submitted {{PLURAL:12|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* It is now possible for <bdi lang="zxx" dir="ltr"><code><nowiki><syntaxhighlight></nowiki></code></bdi> code blocks to offer readers a "Copy" button if the <bdi lang="zxx" dir="ltr"><code><nowiki>copy=1</nowiki></code></bdi> attribute is [[mw:Special:MyLanguage/Extension:SyntaxHighlight#copy|set on the tag]]. Thanks to SD0001 for these improvements. [https://phabricator.wikimedia.org/T40932]
* Customized copyright footer messages on all wikis will be updated. The new versions will use wikitext markup instead of requiring editing raw HTML. [https://phabricator.wikimedia.org/T375789]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Later this month, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] will be rolled out on several pilot wikis. The final list of the wikis will be published in the second half of the month. If you maintain any tools, bots, or gadgets on [[phab:T376499|these 11 wikis]], and your software is using data about IP addresses or is available for logged-out users, please check if it needs to be updated to work with temporary accounts. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|Guidance on how to update the code is available]].
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Rate limiting has been enabled for the code review tools [[Wikitech:Gerrit|Gerrit]] and [[Wikitech:GitLab|GitLab]] to address ongoing issues caused by malicious traffic and scraping. Clients that open too many concurrent connections will be restricted for a few minutes. This rate limiting is managed through [[Wikitech:nftables|nftables]] firewall rules. For more details, see Wikitech's pages on [[Wikitech:Firewall#Throttling with nftables|Firewall]], [[Wikitech:GitLab/Abuse and rate limiting|GitLab limits]] and [[Wikitech:Gerrit/Operations#Throttling IPs|Gerrit operations]].
* Five new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q49224|Komering]] ([[w:kge:|<code>w:kge:</code>]]) [https://phabricator.wikimedia.org/T374813]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q36096|Mooré]] ([[m:mos:|<code>m:mos:</code>]]) [https://phabricator.wikimedia.org/T374641]
** a {{int:project-localized-name-group-wiktionary}} in [[d:Q36213|Madurese]] ([[wikt:mad:|<code>wikt:mad:</code>]]) [https://phabricator.wikimedia.org/T374968]
** a {{int:project-localized-name-group-wikiquote}} in [[d:Q2501174|Gorontalo]] ([[q:gor:|<code>q:gor:</code>]]) [https://phabricator.wikimedia.org/T375088]
** a {{int:project-localized-name-group-wikinews}} in [[d:Q56482|Shan]] ([[n:shn:|<code>n:shn:</code>]]) [https://phabricator.wikimedia.org/T375430]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/41|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W41"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:43, 7 October 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27557422 -->
== Wikipedia translation of the week: 2024-42 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Little Danes experiment]]'''<br /> <small>''([[:fa:آزمایش دانمارکیهای کوچک]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Children play at a Danish Red Cross-run orphanage in Greenland.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''little Danes experiment''' was a 1951 Danish operation where 22 Greenlandic Inuit children were sent to Danish foster families in an attempt to re-educate them as "little Danes". While the children were all supposed to be orphans, most were not. Six children were adopted while in Denmark, and sixteen returned to Greenland, only to be placed in Danish-speaking orphanages and never live with their families again. Half of the children experienced mental health disturbances, and half of them died in young adulthood. The government of Denmark officially apologised in 2020, after several years of demands from Greenlandic officials.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:16, 14 October 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27572997 -->
== Tech News: 2024-42 ==
<section begin="technews-2024-W42"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/42|Translations]] are available.
'''Updates for editors'''
* The Structured Discussion extension (also known as Flow) is starting to be removed. This extension is unmaintained and causes issues. It will be replaced by [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]], which is used on any regular talk page. [[mw:Special:MyLanguage/Structured Discussions/Deprecation#Deprecation timeline|A first set of wikis]] are being contacted. These wikis are invited to stop using Flow, and to move all Flow boards to sub-pages, as archives. At these wikis, a script will move all Flow pages that aren't a sub-page to a sub-page automatically, starting on 22 October 2024. On 28 October 2024, all Flow boards at these wikis will be set in read-only mode. [https://www.mediawiki.org/wiki/Structured_Discussions/Deprecation][https://phabricator.wikimedia.org/T370722]
* WMF's Search Platform team is working on making it easier for readers to perform text searches in their language. A [[phab:T332342|change last week]] on over 30 languages makes it easier to find words with accents and other diacritics. This applies to both full-text search and to types of advanced search such as the <bdi lang="en" dir="ltr">''hastemplate''</bdi> and <bdi lang="en" dir="ltr">''incategory''</bdi> keywords. More technical details (including a few other minor search upgrades) are available. [https://www.mediawiki.org/wiki/User:TJones_%28WMF%29/Notes/Language_Analyzer_Harmonization_Notes#ASCII-folding/ICU-folding_%28T332342%29]
* View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]]. For example, [[mw:Special:MyLanguage/Help:Edit check|EditCheck]] was installed at Russian Wikipedia, and fixes were made for some missing user interface styles.
'''Updates for technical contributors'''
* Editors who use the Toolforge tool [[toolforge:copyvios|Earwig's Copyright Violation Detector]] will now be required to log in with their Wikimedia account before running checks using the "search engine" option. This change is needed to help prevent external bots from misusing the system. Thanks to Chlod for these improvements. [https://en.wikipedia.org/wiki/Wikipedia_talk:New_pages_patrol/Reviewers#Authentication_is_now_required_for_search_engine_checks_on_Earwig's_Copyvio_Tool]
* [[m:Special:MyLanguage/Phabricator|Phabricator]] users can create tickets and add comments on existing tickets via Email again. [[mw:Special:MyLanguage/Phabricator/Help#Using email|Sending email to Phabricator]] has been fixed. [https://phabricator.wikimedia.org/T356077]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Some HTML elements in the interface are now wrapped with a <code><nowiki><bdi></nowiki></code> element, to make our HTML output more aligned with Web standards. More changes like this will be coming in future weeks. This change might break some tools that rely on the previous HTML structure of the interface. Note that relying on the HTML structure of the interface is [[mw:Special:MyLanguage/Stable interface policy/Frontend#What is not stable?|not recommended]] and might break at any time. [https://phabricator.wikimedia.org/T375975]
'''In depth'''
* The latest monthly [[mw:Special:MyLanguage/MediaWiki Product Insights/Reports/September 2024|MediaWiki Product Insights newsletter]] is available. This edition includes: updates on Wikimedia's authentication system, research to simplify feature development in the MediaWiki platform, updates on Parser Unification and MathML rollout, and more.
* The latest quarterly [[mw:Technical Community Newsletter/2024/October|Technical Community Newsletter]] is now available. This edition include: research about improving topic suggestions related to countries, improvements to PHPUnit tests, and more.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/42|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:22, 14 October 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27597254 -->
== Wikipedia translation of the week: 2024-43 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Kharayeb]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Muharram 1Oth-Ashouraa 2007 in Kharayeb - panoramio.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Kharayeb''' (Arabic: الخرايب) is a historic town in the Sidon District in the South Governorate, Lebanon. The town is 77 km (48 mi) south of Beirut, and stands at an average altitude of 190 m (620 ft) above sea level. The town boasts a rich historical legacy, with archaeological excavations revealing a complex settlement history spanning from Prehistory to the Ottoman period. Notably, Kharayeb's origins can be traced back to the Persian period (539–330 BC), when it played a pivotal role in the region's agricultural and economic landscape, culminating in the construction of its Phoenician temple around the 6th century BC.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:38, 21 October 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27572997 -->
== Tech News: 2024-43 ==
<section begin="technews-2024-W43"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/43|Translations]] are available.
'''Weekly highlight'''
* The Mobile Apps team has released an [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Navigation Refresh#Phase 1: Creating a user Profile Menu (T373714)|update]] to the iOS app's navigation, and it is now available in the latest App store version. The team added a new Profile menu that allows for easy access to editor features like Notifications and Watchlist from the Article view, and brings the "Donate" button into a more accessible place for users who are reading an article. This is the first phase of a larger planned [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Navigation Refresh|navigation refresh]] to help the iOS app transition from a primarily reader-focused app, to an app that fully supports reading and editing. The Wikimedia Foundation has added more editing features and support for on-wiki communication based on volunteer requests in recent years.
[[File:IOS App Navigation refresh first phase 05.png|thumb|iOS Wikipedia App's profile menu and contents]]
'''Updates for editors'''
* Wikipedia readers can now download a browser extension to experiment with some early ideas on potential features that recommend articles for further reading, automatically summarize articles, and improve search functionality. For more details and to stay updated, check out the Web team's [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments|Content Discovery Experiments page]] and [[mw:Special:MyLanguage/Newsletter:Web team's projects|subscribe to their newsletter]].
* Later this month, logged-out editors of [[phab:T376499|these 12 wikis]] will start to have [[mw:Special:Mylanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] created. The list may slightly change - some wikis may be removed but none will be added. Temporary account is a new [[mw:Special:MyLanguage/User account types|type of user account]]. It enhances the logged-out editors' privacy and makes it easier for community members to communicate with them. If you maintain any tools, bots, or gadgets on these 12 wikis, and your software is using data about IP addresses or is available for logged-out users, please check if it needs to be updated to work with temporary accounts. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|Guidance on how to update the code is available]]. Read more about the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|deployment plan across all wikis]].
* View all {{formatnum:33}} community-submitted {{PLURAL:33|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]]. For example, the [[w:nr:Main Page|South Ndebele]], [[w:rsk:Главни бок|Pannonian Rusyn]], [[w:ann:Uwu|Obolo]], [[w:iba:Lambar Keterubah|Iban]] and [[w:tdd:ᥞᥨᥝᥴ ᥘᥣᥲ ᥖᥥᥰ|Tai Nüa]] Wikipedia languages were created last week. [https://www.wikidata.org/wiki/Q36785][https://www.wikidata.org/wiki/Q35660][https://www.wikidata.org/wiki/Q36614][https://www.wikidata.org/wiki/Q33424][https://www.wikidata.org/wiki/Q36556]
* It is now possible to create functions on Wikifunctions using Wikidata lexemes, through the new [[f:Z6005|Wikidata lexeme type]] launched last week. When you go to one of these functions, the user interface provides a lexeme selector that helps you pick a lexeme from Wikidata that matches the word you type. After hitting run, your selected lexeme is retrieved from Wikidata, transformed into a Wikidata lexeme type, and passed into the selected function. Read more about this in [[f:Special:MyLanguage/Wikifunctions:Status updates/2024-10-17#Function of the Week: select representation from lexeme|the latest Wikifunctions newsletter]].
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Users of the Wikimedia sites can now format dates more easily in different languages with the new <code dir="ltr">{{[[mw:Special:MyLanguage/Help:Extension:ParserFunctions##timef|#timef]]:…}}</code> parser function. For example, <code dir="ltr"><nowiki>{{#timef:now|date|en}}</nowiki></code> will show as "<bdi lang="en" dir="ltr">{{#timef:now|date|en}}</bdi>". Previously, <code dir="ltr"><nowiki>{{#time:…}}</nowiki></code> could be used to format dates, but this required knowledge of the order of the time and date components and their intervening punctuation. <code dir="ltr">#timef</code> (or <code dir="ltr">#timefl</code> for local time) provides access to the standard date formats that MediaWiki uses in its user interface. This may help to simplify some templates on multi-lingual wikis like Commons and Meta. [https://phabricator.wikimedia.org/T223772][https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:ParserFunctions##timef]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Commons and Meta users can now efficiently [[mw:Special:MyLanguage/Help:Magic words#Localization|retrieve the user's language]] using <code dir="ltr"><nowiki>{{USERLANGUAGE}}</nowiki></code> instead of using <code dir="ltr"><nowiki>{{int:lang}}</nowiki></code>. [https://phabricator.wikimedia.org/T4085]
* The [[m:Special:MyLanguage/Product and Technology Advisory Council|Product and Tech Advisory Council]] (PTAC) now has its pilot members with representation across Africa, Asia, Europe, North America and South America. They will work to address the [[Special:MyLanguage/Movement Strategy/Initiatives/Technology Council|Movement Strategy's Technology Council]] initiative of having a co-defined and more resilient technological platform. [https://meta.wikimedia.org/wiki/Movement_Strategy/Initiatives/Technology_Council]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/32|Growth newsletter]] is available. It includes: an upcoming Newcomer Homepage Community Updates module, new Community Configuration options, and details on new projects.
* The Wikimedia Foundation is [[mw:Special:MyLanguage/Wikimedia Security Team#CNA Partnership|now an official partner of the CVE program]], which is an international effort to catalog publicly disclosed cybersecurity vulnerabilities. This partnership will allow the Security Team to instantly publish [[w:en:Common Vulnerabilities and Exposures|common vulnerabilities and exposures]] (CVE) records that are affecting MediaWiki core, extensions, and skins, along with any other code the Foundation is a steward of.
* The [[m:Special:MyLanguage/Community Wishlist|Community Wishlist]] is now [[m:Community Wishlist/Updates#October 16, 2024: Conversations Made Easier: Machine-Translated Wishes Are Here!|testing machine translations]] for Wishlist content. Volunteers can now read machine-translated versions of wishes and dive into discussions even before translators arrive to translate content.
'''Meetings and events'''
* 24 October - Wiki Education Speaker Series Webinar - [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/N4XTB4G55BUY3M3PNGUAKQWJ7A4UOPAK/ Open Source Tech: Building the Wiki Education Dashboard], featuring Wikimedia interns and a Web developer in the panel.
* 20–22 December 2024 - [[m:Special:MyLanguage/Indic Wikimedia Hackathon Bhubaneswar 2024|Indic Wikimedia Hackathon Bhubaneswar 2024]] in Odisha, India. A hackathon for community members, including developers, designers and content editors, to build technical solutions that improve contributors' experiences.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/43|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:53, 21 October 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27634672 -->
== Wikipedia translation of the week: 2024-44 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Christmas horror]]'''<br /> <small>''([[:es:Terror navideño]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Christmascarol1843 -- 169.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Christmas horror''' is a fiction genre and film genre that incorporates horror elements into a seasonal setting. It is popular in multiple countries.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:05, 28 October 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27647428 -->
== Tech News: 2024-44 ==
<section begin="technews-2024-W44"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/44|Translations]] are available.
'''Updates for editors'''
* Later in November, the Charts extension will be deployed to the test wikis in order to help identify and fix any issue. A security review is underway to then enable deployment to pilot wikis for broader testing. You can read [[mw:Special:MyLanguage/Extension:Chart/Project/Updates#October 2024: Working towards production deployment|the October project update]] and see the [https://en.wikipedia.beta.wmflabs.org/wiki/Charts latest documentation and examples on Beta Wikipedia].
* View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, [[w:en:PediaPress|Pediapress.com]], an external service that creates books from Wikipedia, can now use [[mw:Special:MyLanguage/Wikimedia Maps|Wikimedia Maps]] to include existing pre-rendered infobox map images in their printed books on Wikipedia. [https://phabricator.wikimedia.org/T375761]
'''Updates for technical contributors'''
* Wikis can use [[:mw:Special:MyLanguage/Extension:GuidedTour|the Guided Tour extension]] to help newcomers understand how to edit. The Guided Tours extension now works with [[mw:Special:MyLanguage/Manual:Dark mode|dark mode]]. Guided Tour maintainers can check their tours to see that nothing looks odd. They can also set <code>emitTransitionOnStep</code> to <code>true</code> to fix an old bug. They can use the new flag <code>allowAutomaticBack</code> to avoid back-buttons they don't want. [https://phabricator.wikimedia.org/T73927#10241528]
* Administrators in the Wikimedia projects who use the [[mw:Special:MyLanguage/Help:Extension:Nuke|Nuke Extension]] will notice that mass deletions done with this tool have the "Nuke" tag. This change will make reviewing and analyzing deletions performed with the tool easier. [https://phabricator.wikimedia.org/T366068]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/44|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W44"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:57, 28 October 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27668811 -->
== Wikipedia translation of the week: 2024-45 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Placenta cake]]'''<br /> <small>''([[:simple:Placenta cake]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Bucharest, Greek pie-maker, 1880.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Placenta cake''' is a dish from ancient Greece and Rome consisting of many dough layers interspersed with a mixture of cheese and honey and flavored with bay leaves, baked and then covered in honey. The dessert is mentioned in classical texts such as the Greek poems of Archestratos and Antiphanes, as well as the De agri cultura of Cato the Elder. It is often seen as the predecessor of baklava and börek.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:16, 4 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27647428 -->
== Tech News: 2024-45 ==
<section begin="technews-2024-W45"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/45|Translations]] are available.
'''Updates for editors'''
* Stewards can now make [[m:Special:MyLanguage/Global blocks|global account blocks]] cause global [[mw:Special:MyLanguage/Autoblock|autoblocks]]. This will assist stewards in preventing abuse from users who have been globally blocked. This includes preventing globally blocked temporary accounts from exiting their session or switching browsers to make subsequent edits for 24 hours. Previously, temporary accounts could exit their current session or switch browsers to continue editing. This is an anti-abuse tool improvement for the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|Temporary Accounts]] project. You can read more about the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|progress on key features for temporary accounts]]. [https://phabricator.wikimedia.org/T368949]
* Wikis that have the [[m:Special:MyLanguage/CampaignEvents/Deployment status|CampaignEvents extension enabled]] can now use the [[m:Special:MyLanguage/Campaigns/Foundation Product Team/Event list#October 29, 2024: Collaboration List launched|Collaboration List]] feature. This list provides a new, easy way for contributors to learn about WikiProjects on their wikis. Thanks to the Campaign team for this work that is part of [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2024-2025/Product %26 Technology OKRs#WE KRs|the 2024/25 annual plan]]. If you are interested in bringing the CampaignEvents extension to your wiki, you can [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|follow these steps]] or you can reach out to User:Udehb-WMF for help.
* The text color for red links will be slightly changed later this week to improve their contrast in light mode. [https://phabricator.wikimedia.org/T370446]
* View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, on multilingual wikis, users [[phab:T216368|can now]] hide translations from the WhatLinksHere special page.
'''Updates for technical contributors'''
* XML [[m:Special:MyLanguage/Data dumps|data dumps]] have been temporarily paused whilst a bug is investigated. [https://lists.wikimedia.org/hyperkitty/list/xmldatadumps-l@lists.wikimedia.org/message/BXWJDPO5QI2QMBCY7HO36ELDCRO6HRM4/]
'''In depth'''
* Temporary Accounts have been deployed to six wikis; thanks to the Trust and Safety Product team for [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|this work]], you can read about [[phab:T340001|the deployment plans]]. Beginning next week, Temporary Accounts will also be enabled on [[phab:T378336|seven other projects]]. If you are active on these wikis and need help migrating your tools, please reach out to [[m:User:Udehb-WMF|User:Udehb-WMF]] for assistance.
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2024/October|Language and Internationalization newsletter]] is available. It includes: New languages supported in translatewiki or in MediaWiki; New keyboard input methods for some languages; details about recent and upcoming meetings, and more.
'''Meetings and events'''
* [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Fall 2024|MediaWiki Users and Developers Conference Fall 2024]] is happening in Vienna, Austria and online from 4 to 6 November 2024. The conference will feature discussions around the usage of MediaWiki software by and within companies in different industries and will inspire and onboard new users.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/45|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W45"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:51, 4 November 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27693917 -->
== Wikipedia translation of the week: 2024-46 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Trisomy 16]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Chromosome 16.svg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Trisomy 16''' is a chromosomal abnormality in which there are 3 copies of chromosome 16 rather than two. It is the most common trisomy leading to miscarriage and the second most common chromosomal cause of it, closely following X-chromosome monosomy. About 6% of miscarriages have trisomy 16.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:09, 11 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27708700 -->
== Tech News: 2024-46 ==
<section begin="technews-2024-W46"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/46|Translations]] are available.
'''Updates for editors'''
* On wikis with the [[mw:Special:MyLanguage/Help:Extension:Translate|Translate extension]] enabled, users will notice that the FuzzyBot will now automatically create translated versions of categories used on translated pages. [https://phabricator.wikimedia.org/T285463]
* View all {{formatnum:29}} community-submitted {{PLURAL:29|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the submitted task to use the [[mw:Special:MyLanguage/Extension:SecurePoll|SecurePoll extension]] for English Wikipedia's special [[w:en:Wikipedia:Administrator elections|administrator election]] was resolved on time. [https://phabricator.wikimedia.org/T371454]
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] In <code dir="ltr">[[mw:MediaWiki_1.44/wmf.2|1.44.0-wmf-2]]</code>, the logic of Wikibase function <code>getAllStatements</code> changed to behave like <code>getBestStatements</code>. Invoking the function now returns a copy of values which are immutable. [https://phabricator.wikimedia.org/T270851]
* [https://en.wikipedia.org/api/rest_v1/ Wikimedia REST API] users, such as bot operators and tool maintainers, may be affected by ongoing upgrades. The API will be rerouting some page content endpoints from RESTbase to the newer [[mw:Special:MyLanguage/API:REST API|MediaWiki REST API]] endpoints. The [[phab:T374683|impacted endpoints]] include getting page/revision metadata and rendered HTML content. These changes will be available on testwiki later this week, with other projects to follow. This change should not affect existing functionality, but active users of the impacted endpoints should verify behavior on testwiki, and raise any concerns on the related [[phab:T374683|Phabricator ticket]].
'''In depth'''
* Admins and users of the Wikimedia projects [[mw:Special:MyLanguage/Moderator_Tools/Automoderator#Usage|where Automoderator is enabled]] can now monitor and evaluate important metrics related to Automoderator's actions. [https://superset.wmcloud.org/superset/dashboard/unified-automoderator-activity-dashboard/ This Superset dashboard] calculates and aggregates metrics about Automoderator's behaviour on the projects in which it is deployed. Thanks to the Moderator Tools team for this Dashboard; you can visit [[mw:Special:MyLanguage/Moderator Tools/Automoderator/Unified Activity Dashboard|the documentation page]] for more information about this work. [https://phabricator.wikimedia.org/T369488]
'''Meetings and events'''
* 21 November 2024 ([[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 8:00 UTC|8:00 UTC]] & [[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 16:00 UTC|16:00 UTC]]) - [[c:Commons:WMF support for Commons/Commons community calls|Community call]] with Wikimedia Commons volunteers and stakeholders to help prioritize support efforts for 2025-2026 Fiscal Year. The theme of this call is how content should be organised on Wikimedia Commons.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/46|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W46"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:08, 12 November 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27732268 -->
== Wikipedia translation of the week: 2024-47 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Boana platanera]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Rana platanera - Boana platanera.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Boana platanera''''', commonly known as the banana tree dwelling frog, is a species of tree frog in the family Hylidae. It is distributed within Venezuela, Colombia, Panama, and Trinidad and Tobago. Boana platanera was described in 2021, and individuals of the species were previously classified as Boana crepitans or Boana xerophylla.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:53, 18 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27735014 -->
== Tech News: 2024-47 ==
<section begin="technews-2024-W47"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/47|Translations]] are available.
'''Updates for editors'''
* Users of Wikimedia sites will now be warned when they create a [[mw:Special:MyLanguage/Help:Redirects|redirect]] to a page that doesn't exist. This will reduce the number of broken redirects to red links in our projects. [https://phabricator.wikimedia.org/T326057]
* View all {{formatnum:42}} community-submitted {{PLURAL:42|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, [[mw:Special:MyLanguage/Manual:Pywikibot/Overview|Pywikibot]], which automates work on MediaWiki sites, was upgraded to 9.5.0 on Toolforge. [https://phabricator.wikimedia.org/T378676]
'''Updates for technical contributors'''
* On wikis that use the [[mw:Special:MyLanguage/Extension:FlaggedRevs|FlaggedRevs extension]], pages created or moved by users with the appropriate permissions are marked as flagged automatically. This feature has not been working recently, and changes fixing it should be deployed this week. Thanks to Daniel and Wargo for working on this. [https://phabricator.wikimedia.org/T379218][https://phabricator.wikimedia.org/T368380]
'''In depth'''
* There is a new [https://diff.wikimedia.org/2024/11/05/say-hi-to-temporary-accounts-easier-collaboration-with-logged-out-editors-with-better-privacy-protection Diff post] about Temporary Accounts, available in more than 15 languages. Read it to learn about what Temporary Accounts are, their impact on different groups of users, and the plan to introduce the change on all wikis.
'''Meetings and events'''
* Technical volunteers can now register for the [[mw:Special:MyLanguage/Wikimedia Hackathon 2025|2025 Wikimedia Hackathon]], which will take place in Istanbul, Turkey. [https://pretix.eu/wikimedia/hackathon2025/ Application for travel and accommodation scholarships] is open from '''November 12 to December 10 2024'''. The registration for the event will close in mid-April 2025. The Wikimedia Hackathon is an annual gathering that unites the global technical community to collaborate on existing projects and explore new ideas.
* Join the [[C:Special:MyLanguage/Commons:WMF%20support%20for%20Commons/Commons%20community%20calls|Wikimedia Commons community calls]] this week to help prioritize support for Commons which will be planned for 2025–2026. The theme will be how content should be organised on Wikimedia Commons. This is an opportunity for volunteers who work on different things to come together and talk about what matters for the future of the project. The calls will take place '''November 21, 2024, [[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 8:00 UTC|8:00 UTC]] and [[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 16:00 UTC|16:00 UTC]]'''.
* A [[mw:Special:MyLanguage/Wikimedia_Language_and_Product_Localization/Community meetings#29 November 2024|Language community meeting]] will take place '''November 29, 16:00 UTC''' to discuss updates and technical problem-solving.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/47|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W47"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:01, 19 November 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27806858 -->
== Wikipedia translation of the week: 2024-48 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Wang Su-bok]]'''<br /> <small>''([[:fa:وانگ سو بوک]]) ([[:ko:왕수복]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Wang Su-bok''' was a singer from North Korea, who was the most popular singer in Japanese-occupied Korea in 1935. She was credited as a ground-breaking female artist, whose work led the way for the modern K-pop phenomenon.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:57, 25 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27846897 -->
== Tech News: 2024-48 ==
<section begin="technews-2024-W48"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/48|Translations]] are available.
'''Updates for editors'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] A new version of the standard wikitext editor-mode [[mw:Special:MyLanguage/Extension:CodeMirror|syntax highlighter]] will be available as a [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] later this week. This brings many new features and bug fixes, including right-to-left support, [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Template folding|template folding]], [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|autocompletion]], and an improved search panel. You can learn more on the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|help page]].
* The 2010 wikitext editor now supports common keyboard shortcuts such <bdi lang="zxx" dir="ltr"><code>Ctrl</code>+<code>B</code></bdi> for bold and <bdi lang="zxx" dir="ltr"><code>Ctrl</code>+<code>I</code></bdi> for italics. A full [[mw:Help:Extension:WikiEditor#Keyboard shortcuts|list of all six shortcuts]] is available. Thanks to SD0001 for this improvement. [https://phabricator.wikimedia.org/T62928]
* Starting November 28, Flow/Structured Discussions pages will be automatically archived and set to read-only at the following wikis: <bdi>bswiki</bdi>{{int:comma-separator/en}}<bdi>elwiki</bdi>{{int:comma-separator/en}}<bdi>euwiki</bdi>{{int:comma-separator/en}}<bdi>fawiki</bdi>{{int:comma-separator/en}}<bdi>fiwiki</bdi>{{int:comma-separator/en}}<bdi>frwikiquote</bdi>{{int:comma-separator/en}}<bdi>frwikisource</bdi>{{int:comma-separator/en}}<bdi>frwikiversity</bdi>{{int:comma-separator/en}}<bdi>frwikivoyage</bdi>{{int:comma-separator/en}}<bdi>idwiki</bdi>{{int:comma-separator/en}}<bdi>lvwiki</bdi>{{int:comma-separator/en}}<bdi>plwiki</bdi>{{int:comma-separator/en}}<bdi>ptwiki</bdi>{{int:comma-separator/en}}<bdi>urwiki</bdi>{{int:comma-separator/en}}<bdi>viwikisource</bdi>{{int:comma-separator/en}}<bdi>zhwikisource</bdi>. This is done as part of [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|StructuredDiscussions deprecation work]]. If you need any assistance to archive your page in advance, please contact [[m:User:Trizek (WMF)|Trizek (WMF)]].
* View all {{formatnum:25}} community-submitted {{PLURAL:25|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a user creating a new AbuseFilter can now only set the filter to "protected" [[phab:T377765|if it includes a protected variable]].
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]], which can be used in JavaScript, CSS, JSON, and Lua pages, [[phab:T377663|now offers]] live autocompletion. Thanks to SD0001 for this improvement. The feature can be temporarily disabled on a page by pressing <bdi lang="zxx" dir="ltr"><code>Ctrl</code>+<code>,</code></bdi> and un-selecting "<bdi lang="en" dir="ltr">Live Autocompletion</bdi>".
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Tool-maintainers who use the Graphite system for tracking metrics, need to migrate to the newer Prometheus system. They can check [https://grafana.wikimedia.org/d/K6DEOo5Ik/grafana-graphite-datasource-utilization?orgId=1 this dashboard] and the list in the Description of the [[phab:T350592|task T350592]] to see if their tools are listed, and they should claim metrics and dashboards connected to their tools. They can then disable or migrate all existing metrics by following the instructions in the task. The Graphite service will become read-only in April. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/KLUV4IOLRYXPQFWD6WKKJUHMWE77BMSZ/]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The [[mw:Special:MyLanguage/NewPP parser report|New PreProcessor parser performance report]] has been fixed to give an accurate count for the number of Wikibase entities accessed. It had previously been resetting after 400 entities. [https://phabricator.wikimedia.org/T279069]
'''Meetings and events'''
* A [[mw:Special:MyLanguage/Wikimedia_Language_and_Product_Localization/Community meetings#29 November 2024|Language community meeting]] will take place November 29 at [https://zonestamp.toolforge.org/1732896000 16:00 UTC]. There will be presentations on topics like developing language keyboards, the creation of the Mooré Wikipedia, the language support track at [[m:Wiki Indaba|Wiki Indaba]], and a report from the Wayuunaiki community on their experiences with the Incubator and as a new community over the last 3 years. This meeting will be in English and will also have Spanish interpretation.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/48|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W48"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:42, 25 November 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27847039 -->
== Wikipedia translation of the week: 2024-49 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Storm Filomena]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Spain’s chilly blanket ESA22415247.jpeg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Storm Filomena''' was an extratropical cyclone in early January 2021 that was most notable for bringing unusually heavy snowfall to parts of Spain, with Madrid recording its heaviest snowfall in over a century, and with Portugal being hit less severely. The eighth named storm of the 2020–21 European windstorm season, Filomena formed over the Atlantic Ocean close to the Canary Islands on 7 January, subsequently taking a slow track north-eastwards towards the Iberian Peninsula and then eastwards across the Mediterranean Sea.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:48, 2 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27846897 -->
== Tech News: 2024-49 ==
<section begin="technews-2024-W49"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/49|Translations]] are available.
'''Updates for editors'''
* Two new parser functions were added this week. The <code dir="ltr"><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic words#interwikilink|#interwikilink]]<nowiki>}}</nowiki></code> function adds an [[mw:Special:MyLanguage/Help:Links#Interwiki links|interwiki link]] and the <code dir="ltr"><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic words#interlanguagelink|#interlanguagelink]]<nowiki>}}</nowiki></code> function adds an [[mw:Special:MyLanguage/Help:Links#Interlanguage links|interlanguage link]]. These parser functions are useful on wikis where namespaces conflict with interwiki prefixes. For example, links beginning with <bdi lang="zxx" dir="ltr"><code>MOS:</code></bdi> on English Wikipedia [[phab:T363538|conflict with the <code>mos</code> language code prefix of Mooré Wikipedia]].
* Starting this week, Wikimedia wikis no longer support connections using old RSA-based HTTPS certificates, specifically rsa-2048. This change is to improve security for all users. Some older, unsupported browser or smartphone devices will be unable to connect; Instead, they will display a connectivity error. See the [[wikitech:HTTPS/Browser_Recommendations|HTTPS Browser Recommendations page]] for more-detailed information. All modern operating systems and browsers are always able to reach Wikimedia projects. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/CTYEHVNSXUD3NFAAMG3BLZVTVQWJXJAH/]
* Starting December 16, Flow/Structured Discussions pages will be automatically archived and set to read-only at the following wikis: <bdi>arwiki</bdi>{{int:comma-separator/en}}<bdi>cawiki</bdi>{{int:comma-separator/en}}<bdi>frwiki</bdi>{{int:comma-separator/en}}<bdi>mediawikiwiki</bdi>{{int:comma-separator/en}}<bdi>orwiki</bdi>{{int:comma-separator/en}}<bdi>wawiki</bdi>{{int:comma-separator/en}}<bdi>wawiktionary</bdi>{{int:comma-separator/en}}<bdi>wikidatawiki</bdi>{{int:comma-separator/en}}<bdi>zhwiki</bdi>. This is done as part of [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|StructuredDiscussions deprecation work]]. If you need any assistance to archive your page in advance, please contact [[m:User:Trizek (WMF)|Trizek (WMF)]]. [https://phabricator.wikimedia.org/T380910]
* This month the Chart extension was deployed to production and is now available on Commons and Testwiki. With the security review complete, pilot wiki deployment is expected to start in the first week of December. You can see a working version [[testwiki:Charts|on Testwiki]] and read [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|the November project update]] for more details.
* View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug with the "Download as PDF" system was fixed. [https://phabricator.wikimedia.org/T376438]
'''Updates for technical contributors'''
* In late February, temporary accounts will be rolled out on at least 10 large wikis. This deployment will have a significant effect on the community-maintained code. This is about Toolforge tools, bots, gadgets, and user scripts that use IP address data or that are available for logged-out users. The Trust and Safety Product team wants to identify this code, monitor it, and assist in updating it ahead of the deployment to minimize disruption to workflows. The team asks technical editors and volunteer developers to help identify such tools by adding them to [[mw:Trust and Safety Product/Temporary Accounts/For developers/Impacted tools|this list]]. In addition, review the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|updated documentation]] to learn how to adjust the tools. Join the discussions on the [[mw:Talk:Trust and Safety Product/Temporary Accounts|project talk page]] or in the [[discord:channels/221049808784326656/1227616742340034722|dedicated thread]] on the [[w:Wikipedia:Discord|Wikimedia Community Discord server (in English)]] for support and to share feedback.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/49|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W49"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:23, 2 December 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27873992 -->
== Wikipedia translation of the week: 2024-50 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Syrian literature]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Poem about Baybars page 1 from Hakawati book.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Syrian literature''' is modern fiction written or orally performed in Arabic by writers from Syria since the independence of the Syrian Arab Republic in 1946. It is part of the historically and geographically wider Arabic literature. The modern states of Syria, Lebanon, Jordan, Israel as well as the Palestinian autonomous areas only came into being in the mid-20th century. Therefore, Syrian literature has since been referred to by literary scholarship as the national literature of the Syrian Arab Republic, as well as the works created in Arabic by Syrian writers in the diaspora. This literature has been influenced by the country's political history, the literature of other Arabic-speaking countries and, especially in its early days, by French literature.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:59, 9 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27846897 -->
== Tech News: 2024-50 ==
<section begin="technews-2024-W50"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/50|Translations]] are available.
'''Weekly highlight'''
* Technical documentation contributors can find updated resources, and new ways to connect with each other and the Wikimedia Technical Documentation Team, at the [[mw:Special:MyLanguage/Documentation|Documentation hub]] on MediaWiki.org. This page links to: resources for writing and improving documentation, a new <bdi lang="zxx" dir="ltr">#wikimedia-techdocs</bdi> IRC channel on libera.chat, a listing of past and upcoming documentation events, and ways to request a documentation consultation or review. If you have any feedback or ideas for improvements to the documentation ecosystem, please [[mw:Wikimedia Technical Documentation Team#Contact us|contact the Technical Documentation Team]].
'''Updates for editors'''
[[File:Edit Check on Desktop.png|thumb|Layout change for the Edit Check feature]]
* Later this week, [[mw:Special:MyLanguage/Edit check|Edit Check]] will be relocated to a sidebar on desktop. Edit check is the feature for new editors to help them follow policies and guidelines. This layout change creates space to present people with [[mw:Edit check#1 November 2024|new Checks]] that appear ''while'' they are typing. The [[mw:Special:MyLanguage/Edit check#Reference Check A/B Test|initial results]] show newcomers encountering Edit Check are 2.2 times more likely to publish a new content edit that includes a reference and is not reverted.
* The Chart extension, which enables editors to create data visualizations, was successfully made available on MediaWiki.org and three pilot wikis (Italian, Swedish, and Hebrew Wikipedias). You can see a working examples [[testwiki:Charts|on Testwiki]] and read [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|the November project update]] for more details.
* Translators in wikis where the [[mw:Special:MyLanguage/Content translation/Section translation#Try the tool|mobile experience of Content Translation is available]], can now discover articles in Wikiproject campaigns of their interest from the "[https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&campaign=specialcx&filter-type=automatic&filter-id=collections&active-list=suggestions&from=es&to=en All collection]" category in the articles suggestion feature. Wikiproject Campaign organizers can use this feature, to help translators to discover articles of interest, by adding the <code dir=ltr><nowiki><page-collection> </page-collection></nowiki></code> tag to their campaign article list page on Meta-wiki. This will make those articles discoverable in the Content Translation tool. For more detailed information on how to use the tool and tag, please refer to [[mw:Special:MyLanguage/Translation suggestions: Topic-based & Community-defined lists/How to use the features|the step-by-step guide]]. [https://phabricator.wikimedia.org/T378958]
* The [[mw:Special:MyLanguage/Extension:Nuke|Nuke]] feature, which enables administrators to mass delete pages, now has a [[phab:T376379#10310998|multiselect filter for namespace selection]]. This enables users to select multiple specific namespaces, instead of only one or all, when fetching pages for deletion.
* The Nuke feature also now [[phab:T364225#10371365|provides links]] to the userpage of the user whose pages were deleted, and to the pages which were not selected for deletion, after page deletions are queued. This enables easier follow-up admin-actions. Thanks to Chlod and the Moderator Tools team for both of these improvements. [https://phabricator.wikimedia.org/T364225#10371365]
* The Editing Team is working on making it easier to populate citations from archive.org using the [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|Citoid]] tool, the auto-filled citation generator. They are asking communities to add two parameters preemptively, <code dir=ltr>archiveUrl</code> and <code dir=ltr>archiveDate</code>, within the TemplateData for each citation template using Citoid. You can see an [https://en.wikipedia.org/w/index.php?title=Template%3ACite_web%2Fdoc&diff=1261320172&oldid=1260788022 example of a change in a template], and a [https://global-search.toolforge.org/?namespaces=10&q=%5C%22citoid%5C%22%3A%20%5C%7B®ex=1&title= list of all relevant templates]. [https://phabricator.wikimedia.org/T374831]
* One new wiki has been created: a {{int:project-localized-name-group-wikivoyage}} in [[d:Q9240|Indonesian]] ([[voy:id:|<code>voy:id:</code>]]) [https://phabricator.wikimedia.org/T380726]
* Last week, all wikis had problems serving pages to logged-in users and some logged-out users for 30–45 minutes. This was caused by a database problem, and investigation is ongoing. [https://www.wikimediastatus.net/incidents/3g2ckc7bp6l9]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug in the [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add Link]] feature has been fixed. Previously, the list of sections which are excluded from Add Link was partially ignored in certain cases. [https://phabricator.wikimedia.org/T380455][https://phabricator.wikimedia.org/T380329]
'''Updates for technical contributors'''
* [[mw:Special:MyLanguage/Codex|Codex]], the design system for Wikimedia, now has an early-stage [[gitiles:design/codex-php|implementation in PHP]]. It is available for general use in MediaWiki extensions and Toolforge apps through [https://packagist.org/packages/wikimedia/codex Composer], with use in MediaWiki core coming soon. More information is available in [[wmdoc:design-codex-php/main/index.html|the documentation]]. Thanks to Doğu for the inspiration and many contributions to the library. [https://phabricator.wikimedia.org/T379662]
* [https://en.wikipedia.org/api/rest_v1/ Wikimedia REST API] users, such as bot operators and tool maintainers, may be affected by ongoing upgrades. On December 4, the MediaWiki Interfaces team began rerouting page/revision metadata and rendered HTML content endpoints on [[testwiki:|testwiki]] from RESTbase to comparable MediaWiki REST API endpoints. The team encourages active users of these endpoints to verify their tool's behavior on testwiki and raise any concerns on the related [[phab:T374683|Phabricator ticket]] before the end of the year, as they intend to roll out the same change across all Wikimedia projects in early January. These changes are part of the work to replace the outdated [[mw:RESTBase/deprecation|RESTBase]] system.
* The [https://wikimediafoundation.limesurvey.net/986172 2024 Developer Satisfaction Survey] is seeking the opinions of the Wikimedia developer community. Please take the survey if you have any role in developing software for the Wikimedia ecosystem. The survey is open until 3 January 2025, and has an associated [[foundation:Legal:Developer Satisfaction Survey 2024 Privacy Statement|privacy statement]].
* There is no new MediaWiki version this week. [https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Meetings and events'''
* The next meeting in the series of [[c:Commons:WMF support for Commons/Commons community calls|Wikimedia Foundation discussions with the Wikimedia Commons community]] will take place on [[m:Event:Commons community discussion - 12 December 2024 08:00 UTC|December 12 at 8:00 UTC]] and [[m:Event:Commons community discussion - 12_December 2024 16:00 UTC|at 16:00 UTC]]. The topic of this call is new media and new contributors. Contributors from all wikis are welcome to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/50|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W50"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:16, 9 December 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27919424 -->
== Wikipedia translation of the week: 2024-51 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Mars ocean theory]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:AncientMars.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Mars ocean theory''' states that nearly a third of the surface of Mars was covered by an ocean of liquid water early in the planet's geologic history. This primordial ocean, dubbed Paleo-Ocean or Oceanus Borealis (/oʊˈsiːənəs ˌbɒriˈælɪs/ oh-SEE-ə-nəs BORR-ee-AL-iss), would have filled the basin Vastitas Borealis in the northern hemisphere, a region that lies 4–5 km (2.5–3 miles) below the mean planetary elevation, at a time period of approximately 4.1–3.8 billion years ago. Evidence for this ocean includes geographic features resembling ancient shorelines, and the chemical properties of the Martian soil and atmosphere
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:44, 16 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27933909 -->
== Tech News: 2024-51 ==
<section begin="technews-2024-W51"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/51|Translations]] are available.
'''Weekly highlight'''
* Interested in improving event management on your home wiki? The [[m:Special:MyLanguage/CampaignEvents|CampaignEvents extension]] offers organizers features like event registration management, event/wikiproject promotion, finding potential participants, and more - all directly on-wiki. If you are an organizer or think your community would benefit from this extension, start a discussion to enable it on your wiki today. To learn more about how to enable this extension on your wiki, visit the [[m:CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|deployment status page]].
'''Updates for editors'''
* Users of the iOS Wikipedia App in Italy and Mexico on the Italian, Spanish, and English Wikipedias, can see a [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Personalized Wikipedia Year in Review|personalized Year in Review]] with insights based on their reading and editing history.
* Users of the Android Wikipedia App in Sub-Saharan Africa and South Asia can see the new [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/Rabbit Holes|Rabbit Holes]] feature. This feature shows a suggested search term in the Search bar based on the current article being viewed, and a suggested reading list generated from the user’s last two visited articles.
* The [[m:Special:MyLanguage/Global reminder bot|global reminder bot]] is now active and running on nearly 800 wikis. This service reminds most users holding temporary rights when they are about to expire, so that they can renew should they want to. See [[m:Global reminder bot/Technical details|the technical details page]] for more information.
* The next issue of Tech News will be sent out on 13 January 2025 because of the end of year holidays. Thank you to all of the translators, and people who submitted content or feedback, this year.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was [[phab:T374988|fixed]] in the Android Wikipedia App which had caused translatable SVG images to show the wrong language when they were tapped.
'''Updates for technical contributors'''
* There is no new MediaWiki version next week. The next deployments will start on 14 January. [https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar/2025]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/51|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W51"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:25, 16 December 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27942374 -->
== Wikipedia translation of the week: 2024-52 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:2023 Slovenia floods]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Sava v Tacnu 4. avgusta ob 16h.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
In August 2023, major floods occurred in large part of Slovenia and neighbouring areas of Austria and Croatia due to heavy rain. Amongst others, the level of rivers Sava, Mur and Drava was exceptionally high. Several settlements and transport links in Slovene Littoral, Upper Carniola and Slovenian Carinthia were flooded. Due to the amount of rain, the streams in Idrija, Cerkno and Škofja Loka Hills overflowed.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:55, 23 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27933909 -->
== Wikipedia translation of the week: 2025-01 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Uganda Railways Corporation]]'''<br /> <small>''([[:de:Schienenverkehr in Uganda]]) ([[:no:Uganda Railways Corporation]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:9620 mit Güterzug.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Uganda Railways Corporation''' (URC) is the parastatal railway of Uganda. It was formed after the breakup of the East African Railways Corporation (EARC) in 1977 when it took over the Ugandan part of the East African railways.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:37, 30 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28019313 -->
== Wikipedia translation of the week: 2025-02 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Internment of Japanese Canadians]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Japanese road camp.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
From 1942 to 1949, Canada forcibly relocated and incarcerated over 22,000 Japanese Canadians—comprising over 90% of the total Japanese Canadian population—from British Columbia in the name of "national security". The majority were Canadian citizens by birth and were targeted based on their ancestry. This decision followed the events of the Japanese Empire's war in the Pacific against the Western Allies, such as the invasion of Hong Kong, the attack on Pearl Harbor in Hawaii, and the Fall of Singapore which led to the Canadian declaration of war on Japan during World War II. Similar to the actions taken against Japanese Americans in neighbouring United States, this forced relocation subjected many Japanese Canadians to government-enforced curfews and interrogations, job and property losses, and forced repatriation to Japan
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:56, 6 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28070038 -->
== Wikipedia translation of the week: 2025-03 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Christmas seals]]'''<br /> <small>''([[:no:Julemerke]]) ([[:ru:Рождественская виньетка]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:1915 US Christmas Seal.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Christmas seals''' are adhesive labels that are similar in appearance to postage stamps that are sold then affixed to mail during the Christmas season to raise funds and awareness for charitable programs. Christmas seals have become particularly associated with lung diseases such as tuberculosis, and with child welfare in general. They were first issued in Denmark beginning in 1904, with Sweden and Iceland following with issues that same year. Thereafter the use of Christmas seals proved to be popular and spread quickly around the world, with 130 countries producing their own issues.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:24, 13 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28086717 -->
== Tech News: 2025-03 ==
<section begin="technews-2025-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/03|Translations]] are available.
'''Weekly highlight'''
* The Single User Login system is being updated over the next few months. This is the system which allows users to fill out the login form on one Wikimedia site and get logged in on all others at the same time. It needs to be updated because of the ways that browsers are increasingly restricting cross-domain cookies. To accommodate these restrictions, login and account creation pages will move to a central domain, but it will still appear to the user as if they are on the originating wiki. The updated code will be enabled this week for users on test wikis. This change is planned to roll out to all users during February and March. See [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3#Deployment|the SUL3 project page]] for more details and a timeline.
'''Updates for editors'''
* On wikis with [[mw:Special:MyLanguage/Extension:PageAssessments|PageAssessments]] installed, you can now [[mw:Special:MyLanguage/Extension:PageAssessments#Search|filter search results]] to pages in a given WikiProject by using the <code dir=ltr>inproject:</code> keyword. (These wikis: {{int:project-localized-name-arwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-enwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-enwikivoyage/en}}{{int:comma-separator/en}}{{int:project-localized-name-frwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-huwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-newiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zhwiki/en}}) [https://phabricator.wikimedia.org/T378868]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q34129|Tigre]] ([[w:tig:|<code>w:tig:</code>]]) [https://phabricator.wikimedia.org/T381377]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:35}} community-submitted {{PLURAL:35|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a bug with updating a user's edit-count after making a rollback edit, which is now fixed. [https://phabricator.wikimedia.org/T382592]
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Wikimedia REST API users, such as bot operators and tool maintainers, may be affected by ongoing upgrades. Starting the week of January 13, we will begin rerouting [[phab:T374683|some page content endpoints]] from RESTbase to the newer MediaWiki REST API endpoints for all wiki projects. This change was previously available on testwiki and should not affect existing functionality, but active users of the impacted endpoints may raise issues directly to the [[phab:project/view/6931/|MediaWiki Interfaces Team]] in Phabricator if they arise.
* Toolforge tool maintainers can now share their feedback on Toolforge UI, an initiative to provide a web platform that allows creating and managing Toolforge tools through a graphic interface, in addition to existing command-line workflows. This project aims to streamline active maintainers’ tasks, as well as make registration and deployment processes more accessible for new tool creators. The initiative is still at a very early stage, and the Cloud Services team is in the process of collecting feedback from the Toolforge community to help shape the solution to their needs. [[wikitech:Wikimedia Cloud Services team/EnhancementProposals/Toolforge UI|Read more and share your thoughts about Toolforge UI]].
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] For tool and library developers who use the OAuth system: The identity endpoint used for [[mw:Special:MyLanguage/OAuth/For Developers#Identifying the user|OAuth 1]] and [[mw:Special:MyLanguage/OAuth/For Developers#Identifying the user 2|OAuth 2]] returned a JSON object with an integer in its <code>sub</code> field, which was incorrect (the field must always be a string). This has been fixed; the fix will be deployed to Wikimedia wikis on the week of January 13. [https://phabricator.wikimedia.org/T382139]
* Many wikis currently use [[:mw:Parsoid/Parser Unification/Cite CSS|Cite CSS]] to render custom footnote markers in Parsoid output. Starting January 20 these rules will be disabled, but the developers ask you to ''not'' clean up your <bdi lang="en" dir="ltr">[[MediaWiki:Common.css]]</bdi> until February 20 to avoid issues during the migration. Your wikis might experience some small changes to footnote markers in Visual Editor and when using experimental Parsoid read mode, but if there are changes these are expected to bring the rendering in line with the legacy parser output. [https://phabricator.wikimedia.org/T370027]
'''Meetings and events'''
* The next meeting in the series of [[c:Special:MyLanguage/Commons:WMF support for Commons/Commons community calls|Wikimedia Foundation Community Conversations with the Wikimedia Commons community]] will take place on [[m:Special:MyLanguage/Event:Commons community discussion - 15 January 2025 08:00 UTC|January 15 at 8:00 UTC]] and [[m:Special:MyLanguage/Event:Commons community discussion - 15 January 2025 16:00 UTC|at 16:00 UTC]]. The topic of this call is defining the priorities in tool investment for Commons. Contributors from all wikis, especially users who are maintaining tools for Commons, are welcome to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:42, 14 January 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28048614 -->
== Wikipedia translation of the week: 2025-04 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:2010 Nagorno-Karabakh clashes]]'''<br /> <small>''([[:it:Scontri del Nagorno Karabakh del 2010]]) ([[:tr:2010 Dağlık Karabağ çatışmaları]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''2010 Nahorno karabakh war''' were a series of exchanges of gunfire that took place on February 18 on the line of contact dividing Azerbaijani and the Karabakh Armenian military forces. Azerbaijan accused the Armenian forces of firing on the Azerbaijani positions near Tap Qaraqoyunlu, Qızıloba, Qapanlı, Yusifcanlı and Cavahirli villages, as well as in uplands of Agdam Rayon with small arms fire including snipers. As a result, three Azerbaijani soldiers were killed and one wounded.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:20, 20 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28099770 -->
== Tech News: 2025-04 ==
<section begin="technews-2025-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/04|Translations]] are available.
'''Updates for editors'''
* Administrators can mass-delete multiple pages created by a user or IP address using [[mw:Special:MyLanguage/Extension:Nuke|Extension:Nuke]]. It previously only allowed deletion of pages created in the last 30 days. It can now delete pages from the last 90 days, provided it is targeting a specific user or IP address. [https://phabricator.wikimedia.org/T380846]
* On [[phab:P72148|wikis that use]] the [[mw:Special:MyLanguage/Help:Patrolled edits|Patrolled edits]] feature, when the rollback feature is used to revert an unpatrolled page revision, that revision will now be marked as "manually patrolled" instead of "autopatrolled", which is more accurate. Some editors that use [[mw:Special:MyLanguage/Help:New filters for edit review/Filtering|filters]] on Recent Changes may need to update their filter settings. [https://phabricator.wikimedia.org/T302140]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Visual Editor's "Insert link" feature did not always suggest existing pages properly when an editor started typing, which has now been [[phab:T383497|fixed]].
'''Updates for technical contributors'''
* The Structured Discussion extension (also known as Flow) is being progressively removed from the wikis. This extension is unmaintained and causes issues. It will be replaced by [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]], which is used on any regular talk page. [[mw:Special:MyLanguage/Structured Discussions/Deprecation#Deprecation timeline|The last group of wikis]] ({{int:project-localized-name-cawikiquote/en}}{{int:comma-separator/en}}{{int:project-localized-name-fiwikimedia/en}}{{int:comma-separator/en}}{{int:project-localized-name-gomwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kabwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ptwikibooks/en}}{{int:comma-separator/en}}{{int:project-localized-name-sewikimedia/en}}) will soon be contacted. If you have questions about this process, please ping [[m:User:Trizek (WMF)|Trizek (WMF)]] at your wiki. [https://phabricator.wikimedia.org/T380912]
* The latest quarterly [[mw:Technical_Community_Newsletter/2025/January|Technical Community Newsletter]] is now available. This edition includes: updates about services from the Data Platform Engineering teams, information about Codex from the Design System team, and more.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:37, 21 January 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28129769 -->
== Wikipedia translation of the week: 2025-05 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Jinnah's birthday]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Yorkstatue.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Jinnah's Birthday''', officially Quaid-e-Azam Day and sometimes known as Quaid Day, is a public holiday in Pakistan observed annually on 25 December to celebrate the birthday of the founder of Pakistan, Muhammad Ali Jinnah, known as Quaid-i-Azam ("Great Leader"). A major holiday, commemorations for Jinnah began during his lifetime in 1942, and have continued ever since. The event is primarily observed by the government and the citizens of the country where the national flag is hoisted at major architectural structures such as private and public buildings, particularly at the top of Quaid-e-Azam House in Karachi.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:30, 27 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28156501 -->
== Tech News: 2025-05 ==
<section begin="technews-2025-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/05|Translations]] are available.
'''Weekly highlight'''
* Patrollers and admins - what information or context about edits or users could help you to make patroller or admin decisions more quickly or easily? The Wikimedia Foundation wants to hear from you to help guide its upcoming annual plan. Please consider sharing your thoughts on this and [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Product & Technology OKRs|13 other questions]] to shape the technical direction for next year.
'''Updates for editors'''
* iOS Wikipedia App users worldwide can now access a [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Personalized Wikipedia Year in Review/How your data is used|personalized Year in Review]] feature, which provides insights based on their reading and editing history on Wikipedia. This project is part of a broader effort to help welcome new readers as they discover and interact with encyclopedic content.
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] Edit patrollers now have a new feature available that can highlight potentially problematic new pages. When a page is created with the same title as a page which was previously deleted, a tag ('Recreated') will now be added, which users can filter for in [[{{#special:RecentChanges}}]] and [[{{#special:NewPages}}]]. [https://phabricator.wikimedia.org/T56145]
* Later this week, there will be a new warning for editors if they attempt to create a redirect that links to another redirect (a [[mw:Special:MyLanguage/Help:Redirects#Double redirects|double redirect]]). The feature will recommend that they link directly to the second redirect's target page. Thanks to the user SomeRandomDeveloper for this improvement. [https://phabricator.wikimedia.org/T326056]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Wikimedia wikis allow [[w:en:WebAuthn|WebAuthn]]-based second factor checks (such as hardware tokens) during login, but the feature is [[m:Community Wishlist Survey 2023/Miscellaneous/Fix security key (WebAuthn) support|fragile]] and has very few users. The MediaWiki Platform team is temporarily disabling adding new WebAuthn keys, to avoid interfering with the rollout of [[mw:MediaWiki Platform Team/SUL3|SUL3]] (single user login version 3). Existing keys are unaffected. [https://phabricator.wikimedia.org/T378402]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* For developers that use the [[wikitech:Data Platform/Data Lake/Edits/MediaWiki history dumps|MediaWiki History dumps]]: The Data Platform Engineering team has added a couple of new fields to these dumps, to support the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|Temporary Accounts]] initiative. If you maintain software that reads those dumps, please review your code and the updated documentation, since the order of the fields in the row will change. There will also be one field rename: in the <bdi lang="zxx" dir="ltr"><code>mediawiki_user_history</code></bdi> dump, the <bdi lang="zxx" dir="ltr"><code>anonymous</code></bdi> field will be renamed to <bdi lang="zxx" dir="ltr"><code>is_anonymous</code></bdi>. The changes will take effect with the next release of the dumps in February. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LKMFDS62TXGDN6L56F4ABXYLN7CSCQDI/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:15, 27 January 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28149374 -->
== Wikipedia translation of the week: 2025-06 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:French conquest of Corsica]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Bataille de Ponte Novu.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''French conquest of Corsica''' was a successful expedition by French forces of the Kingdom of France under Comte de Vaux, against Corsican forces under Pasquale Paoli of the Corsican Republic. The expedition was launched in May 1768, in the aftermath of the Seven Years' War.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:20, 3 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28200320 -->
== Tech News: 2025-06 ==
<section begin="technews-2025-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/06|Translations]] are available.
'''Updates for editors'''
* Editors who use the "Special characters" editing-toolbar menu can now see the 32 special characters you have used most recently, across editing sessions on that wiki. This change should help make it easier to find the characters you use most often. The feature is in both the 2010 wikitext editor and VisualEditor. [https://phabricator.wikimedia.org/T110722]
* Editors using the 2010 wikitext editor can now create sublists with correct indentation by selecting the line(s) you want to indent and then clicking the toolbar buttons.[https://phabricator.wikimedia.org/T380438] You can now also insert <code><nowiki><code></nowiki></code> tags using a new toolbar button.[https://phabricator.wikimedia.org/T383010] Thanks to user stjn for these improvements.
* Help is needed to ensure the [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|citation generator]] works properly on each wiki.
** (1) Administrators should update the local versions of the page <code dir=ltr>MediaWiki:Citoid-template-type-map.json</code> to include entries for <code dir=ltr>preprint</code>, <code dir=ltr>standard</code>, and <code dir=ltr>dataset</code>; Here are example diffs to replicate [https://en.wikipedia.org/w/index.php?title=MediaWiki%3ACitoid-template-type-map.json&diff=1189164774&oldid=1165783565 for 'preprint'] and [https://en.wikipedia.org/w/index.php?title=MediaWiki%3ACitoid-template-type-map.json&diff=1270832208&oldid=1270828390 for 'standard' and 'dataset'].
** (2.1) If the citoid map in the citation template used for these types of references is missing, [[mediawikiwiki:Citoid/Enabling Citoid on your wiki#Step 2.a: Create a 'citoid' maps value for each citation template|one will need to be added]]. (2.2) If the citoid map does exist, the TemplateData will need to be updated to include new field names. Here are example updates [https://en.wikipedia.org/w/index.php?title=Template%3ACitation%2Fdoc&diff=1270829051&oldid=1262470053 for 'preprint'] and [https://en.wikipedia.org/w/index.php?title=Template%3ACitation%2Fdoc&diff=1270831369&oldid=1270829480 for 'standard' and 'dataset']. The new fields that may need to be supported are <code dir=ltr>archiveID</code>, <code dir=ltr>identifier</code>, <code dir=ltr>repository</code>, <code dir=ltr>organization</code>, <code dir=ltr>repositoryLocation</code>, <code dir=ltr>committee</code>, and <code dir=ltr>versionNumber</code>. [https://phabricator.wikimedia.org/T383666]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q15637215|Central Kanuri]] ([[w:knc:|<code>w:knc:</code>]]) [https://phabricator.wikimedia.org/T385181]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the [[mediawikiwiki:Special:MyLanguage/Help:Extension:Wikisource/Wikimedia OCR|OCR (optical character recognition) tool]] used for Wikisource now supports a new language, Church Slavonic. [https://phabricator.wikimedia.org/T384782]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:09, 4 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28203495 -->
== Wikipedia translation of the week: 2025-07 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Assassination of Spencer Perceval]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:PercevalShooting.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
On 11 May 1812, at about 5:15 pm, Spencer Perceval, the prime minister of the United Kingdom of Great Britain and Ireland, was shot dead in the lobby of the House of Commons by John Bellingham, a Liverpool merchant with a grievance against the government. Bellingham was detained; four days after the murder, he was tried, convicted and sentenced to death. He was hanged at Newgate Prison on 18 May, one week after the assassination and one month before the start of the War of 1812. Perceval remains the sole British prime minister to have been assassinated.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 10 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28200320 -->
== Tech News: 2025-07 ==
<section begin="technews-2025-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/07|Translations]] are available.
'''Weekly highlight'''
* The Product and Technology Advisory Council (PTAC) has published [[m:Special:MyLanguage/Product and Technology Advisory Council/February 2025 draft PTAC recommendation for feedback|a draft of their recommendations]] for the Wikimedia Foundation's Product and Technology department. They have recommended focusing on [[m:Special:MyLanguage/Product and Technology Advisory Council/February 2025 draft PTAC recommendation for feedback/Mobile experiences|mobile experiences]], particularly contributions. They request community [[m:Talk:Product and Technology Advisory Council/February 2025 draft PTAC recommendation for feedback|feedback at the talk page]] by 21 February.
'''Updates for editors'''
* The "Special pages" portlet link will be moved from the "Toolbox" into the "Navigation" section of the main menu's sidebar by default. This change is because the Toolbox is intended for tools relating to the current page, not tools relating to the site, so the link will be more logically and consistently located. To modify this behavior and update CSS styling, administrators can follow the instructions at [[phab:T385346|T385346]]. [https://phabricator.wikimedia.org/T333211]
* As part of this year's work around improving the ways readers discover content on the wikis, the Web team will be running an experiment with a small number of readers that displays some suggestions for related or interesting articles within the search bar. Please check out [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments#Experiment 1: Display article recommendations in more prominent locations, search|the project page]] for more information.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Template editors who use TemplateStyles can now customize output for users with specific accessibility needs by using accessibility related media queries (<code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion prefers-reduced-motion]</code>, <code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-transparency prefers-reduced-transparency]</code>, <code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast prefers-contrast]</code>, and <code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors forced-colors]</code>). Thanks to user Bawolff for these improvements. [https://phabricator.wikimedia.org/T384175]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:22}} community-submitted {{PLURAL:22|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the global blocks log will now be shown directly on the {{#special:CentralAuth}} page, similarly to global locks, to simplify the workflows for stewards. [https://phabricator.wikimedia.org/T377024]
'''Updates for technical contributors'''
* Wikidata [[d:Special:MyLanguage/Help:Default values for labels and aliases|now supports a special language as a "default for all languages"]] for labels and aliases. This is to avoid excessive duplication of the same information across many languages. If your Wikidata queries use labels, you may need to update them as some existing labels are getting removed. [https://phabricator.wikimedia.org/T312511]
* The function <code dir="ltr">getDescription</code> was invoked on every Wiki page read and accounts for ~2.5% of a page's total load time. The calculated value will now be cached, reducing load on Wikimedia servers. [https://phabricator.wikimedia.org/T383660]
* As part of the RESTBase deprecation [[mw:RESTBase/deprecation|effort]], the <code dir="ltr">/page/related</code> endpoint has been blocked as of February 6, 2025, and will be removed soon. This timeline was chosen to align with the deprecation schedules for older Android and iOS versions. The stable alternative is the "<code dir="ltr">morelike</code>" action API in MediaWiki, and [[gerrit:c/mediawiki/services/mobileapps/+/982154/13/pagelib/src/transform/FooterReadMore.js|a migration example]] is available. The MediaWiki Interfaces team [[phab:T376297|can be contacted]] for any questions. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/GFC2IJO7L4BWO3YTM7C5HF4MCCBE2RJ2/]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/January|Language and Internationalization newsletter]] is available. It includes: Updates about the "Contribute" menu; details on some of the newest language editions of Wikipedia; details on new languages supported by the MediaWiki interface; updates on the Community-defined lists feature; and more.
* The latest [[mw:Extension:Chart/Project/Updates#January 2025: Better visibility into charts and tabular data usage|Chart Project newsletter]] is available. It includes updates on the progress towards bringing better visibility into global charts usage and support for categorizing pages in the Data namespace on Commons.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:12, 11 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28231022 -->
== Wikipedia translation of the week: 2025-08 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:2010 Malagasy constitutional referendum]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
A constitutional referendum was held in Madagascar on 17 November 2010, in which voters approved a proposal for the state's fourth Constitution. The Malagasy people were asked to answer "Yes" or "No" to the proposed new constitution, which was considered to help consolidate Andry Rajoelina's grip on power. At the time of the referendum, Rajoelina headed the governing Highest Transitional Authority (HAT), an interim junta established following the military-backed coup d'état against then President Marc Ravalomanana in March 2009.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:21, 17 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28245290 -->
== Tech News: 2025-08 ==
<section begin="technews-2025-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/08|Translations]] are available.
'''Weekly highlight'''
* Communities using growth tools can now showcase one event on the <code>{{#special:Homepage}}</code> for newcomers. This feature will help newcomers to be informed about editing activities they can participate in. Administrators can create a new event to showcase at <code>{{#special:CommunityConfiguration}}</code>. To learn more about this feature, please read [[diffblog:2025/02/12/community-updates-module-connecting-newcomers-to-your-initiatives/|the Diff post]], have a look [[mw:Special:MyLanguage/Help:Growth/Tools/Community updates module|at the documentation]], or contact [[mw:Talk:Growth|the Growth team]].
'''Updates for editors'''
[[File:Page Frame Features on desktop.png|thumb|Highlighted talk pages improvements]]
* Starting next week, talk pages at these wikis – {{int:project-localized-name-eswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-itwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jawiki/en}} – will get [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|a new design]]. This change was extensively tested as a Beta feature and is the last step of [[mw:Special:MyLanguage/Talk pages project/Feature summary|talk pages improvements]]. [https://phabricator.wikimedia.org/T379102]
* You can now navigate to view a redirect page directly from its action pages, such as the history page. Previously, you were forced to first go to the redirect target. This change should help editors who work with redirects a lot. Thanks to user stjn for this improvement. [https://phabricator.wikimedia.org/T5324]
* When a Cite reference is reused many times, wikis currently show either numbers like "1.23" or localized alphabetic markers like "a b c" in the reference list. Previously, if there were so many reuses that the alphabetic markers were all used, [[MediaWiki:Cite error references no backlink label|an error message]] was displayed. As part of the work to [[phab:T383036|modernize Cite customization]], these errors will no longer be shown and instead the backlinks will fall back to showing numeric markers like "1.23" once the alphabetic markers are all used.
* The log entries for each change to an editor's user-groups are now clearer by specifying exactly what has changed, instead of the plain before and after listings. Translators can [[phab:T369466|help to update the localized versions]]. Thanks to user Msz2001 for these improvements.
* A new filter has been added to the [[{{#special:Nuke}}]] tool, which allows administrators to mass delete pages, to enable users to filter for pages in a range of page sizes (in bytes). This allows, for example, deleting pages only of a certain size or below. [https://phabricator.wikimedia.org/T378488]
* Non-administrators can now check which pages are able to be deleted using the [[{{#special:Nuke}}]] tool. Thanks to user MolecularPilot for this and the previous improvements. [https://phabricator.wikimedia.org/T376378]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:25}} community-submitted {{PLURAL:25|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed in the configuration for the AV1 video file format, which enables these files to play again. [https://phabricator.wikimedia.org/T382193]
'''Updates for technical contributors'''
* Parsoid Read Views is going to be rolling out to most Wiktionaries over the next few weeks, following the successful transition of Wikivoyage to Parsoid Read Views last year. For more information, see the [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parsoid/Parser Unification]] project page. [https://phabricator.wikimedia.org/T385923][https://phabricator.wikimedia.org/T371640]
* Developers of tools that run on-wiki should note that <code dir=ltr>mw.Uri</code> is deprecated. Tools requiring <code dir=ltr>mw.Uri</code> must explicitly declare <code dir=ltr>mediawiki.Uri</code> as a ResourceLoader dependency, and should migrate to the browser native <code dir=ltr>URL</code> API soon. [https://phabricator.wikimedia.org/T384515]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:17, 17 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28275610 -->
== Wikipedia translation of the week: 2025-09 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cooler Heads Coalition]]'''<br /> <small>''([[:de:Cooler Heads Coalition]]) ([[:fr:Cooler Heads Coalition]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''Cooler Heads Coalition''' is a politically conservative "informal and ad-hoc group" in the United States, financed and operated by the Competitive Enterprise Institute. The group, which rejects the scientific consensus on climate change, made efforts to stop the government from addressing climate change.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:23, 24 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28300238 -->
== Tech News: 2025-09 ==
<section begin="technews-2025-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/09|Translations]] are available.
'''Updates for editors'''
* Administrators can now customize how the [[m:Special:MyLanguage/User language|Babel feature]] creates categories using [[{{#special:CommunityConfiguration/Babel}}]]. They can rename language categories, choose whether they should be auto-created, and adjust other settings. [https://phabricator.wikimedia.org/T374348]
* The <bdi lang="en" dir="ltr">[https://www.wikimedia.org/ wikimedia.org]</bdi> portal has been updated – and is receiving some ongoing improvements – to modernize and improve the accessibility of our portal pages. It now has better support for mobile layouts, updated wording and links, and better language support. Additionally, all of the Wikimedia project portals, such as <bdi lang="en" dir="ltr">[https://wikibooks.org wikibooks.org]</bdi>, now support dark mode when a reader is using that system setting. [https://phabricator.wikimedia.org/T373204][https://phabricator.wikimedia.org/T368221][https://meta.wikimedia.org/wiki/Project_portals]
* One new wiki has been created: a {{int:project-localized-name-group-wiktionary/en}} in [[d:Q33965|Santali]] ([[wikt:sat:|<code>wikt:sat:</code>]]) [https://phabricator.wikimedia.org/T386619]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that prevented clicking on search results in the web-interface for some Firefox for Android phone configurations. [https://phabricator.wikimedia.org/T381289]
'''Meetings and events'''
* The next Language Community Meeting is happening soon, February 28th at [https://zonestamp.toolforge.org/1740751200 14:00 UTC]. This week's meeting will cover: highlights and technical updates on keyboard and tools for the Sámi languages, Translatewiki.net contributions from the Bahasa Lampung community in Indonesia, and technical Q&A. If you'd like to join, simply [[mw:Wikimedia Language and Product Localization/Community meetings#28 February 2025|sign up on the wiki page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:42, 25 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28296129 -->
== Wikipedia translation of the week: 2025-10 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:pt:Transmissor de Ondas]]'''<br /> <small>''([[:en:Wave Transmitter]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Esq eletr transm ondas color.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Transmissor de Ondas''' é um equipamento precursor do rádio, desenvolvido por Roberto Landell de Moura na década de 1890, capaz de transmitir áudio via ondas eletromagnéticas, com sua primeira demonstração pública documentada tendo ocorrido no dia 16 de julho de 1899.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:49, 3 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28317097 -->
== Tech News: 2025-10 ==
<section begin="technews-2025-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/10|Translations]] are available.
'''Updates for editors'''
* All logged-in editors using the mobile view can now edit a full page. The "{{int:Minerva-page-actions-editfull}}" link is accessible from the "{{int:minerva-page-actions-overflow}}" menu in the toolbar. This was previously only available to editors using the [[mw:Special:MyLanguage/Reading/Web/Advanced mobile contributions|Advanced mobile contributions]] setting. [https://phabricator.wikimedia.org/T387180]
* Interface administrators can now help to remove the deprecated Cite CSS code matching "<code dir="ltr">mw-ref</code>" from their local <bdi lang="en" dir="ltr">[[MediaWiki:Common.css]]</bdi>. The list of wikis in need of cleanup, and the code to remove, [https://global-search.toolforge.org/?q=mw-ref%5B%5E-a-z%5D®ex=1&namespaces=8&title=.*css can be found with this global search] and in [https://ace.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=145662#L-139--L-144 this example], and you can learn more about how to help on the [[mw:Parsoid/Parser Unification/Cite CSS|CSS migration project page]]. The Cite footnote markers ("<code dir="ltr">[1]</code>") are now rendered by [[mw:Special:MyLanguage/Parsoid|Parsoid]], and the deprecated CSS is no longer needed. The CSS for backlinks ("<code dir="ltr">mw:referencedBy</code>") should remain in place for now. This cleanup is expected to cause no visible changes for readers. Please help to remove this code before March 20, after which the development team will do it for you.
* When editors embed a file (e.g. <code><nowiki>[[File:MediaWiki.png]]</nowiki></code>) on a page that is protected with cascading protection, the software will no longer restrict edits to the file description page, only to new file uploads.[https://phabricator.wikimedia.org/T24521] In contrast, transcluding a file description page (e.g. <code><nowiki>{{:File:MediaWiki.png}}</nowiki></code>) will now restrict edits to the page.[https://phabricator.wikimedia.org/T62109]
* When editors revert a file to an earlier version it will now require the same permissions as ordinarily uploading a new version of the file. The software now checks for 'reupload' or 'reupload-own' rights,[https://phabricator.wikimedia.org/T304474] and respects cascading protection.[https://phabricator.wikimedia.org/T140010]
* When administrators are listing pages for deletion with the Nuke tool, they can now also list associated talk pages and redirects for deletion, alongside pages created by the target, rather than needing to manually delete these pages afterwards. [https://phabricator.wikimedia.org/T95797]
* The [[m:Special:MyLanguage/Tech/News/2025/03|previously noted]] update to Single User Login, which will accommodate browser restrictions on cross-domain cookies by moving login and account creation to a central domain, will now roll out to all users during March and April. The team plans to enable it for all new account creation on [[wikitech:Deployments/Train#Tuesday|Group0]] wikis this week. See [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3#Deployment|the SUL3 project page]] for more details and an updated timeline.
* Since last week there has been a bug that shows some interface icons as black squares until the page has fully loaded. It will be fixed this week. [https://phabricator.wikimedia.org/T387351]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q2044560|Sylheti]] ([[w:syl:|<code>w:syl:</code>]]) [https://phabricator.wikimedia.org/T386441]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed with loading images in very old versions of the Firefox browser on mobile. [https://phabricator.wikimedia.org/T386400]
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.19|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:31, 4 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28334563 -->
== Wikipedia translation of the week: 2025-11 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Smoky (mascotte olimpica)]]'''<br /> <small>''([[:en:Smoky (Olympic mascot)]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Smoky 1932 Olympic Village Mascot.webp|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Smoky''' (Los Angeles, 1931 o 1932 - Los Angeles, aprile 1934), occasionalmente scritto Smokey, è stato un cane che divenne la mascotte del villaggio olimpico estivo del 1932 e, successivamente, dell'evento generale. Pur non essendo oggi riconosciuto dal CIO, è stato, seppur non in modo ufficiale, la prima mascotte olimpica dei Giochi, oltre che a essere attualmente l'unica a essere stata un animale vero. Le successive edizioni non ebbero mascotte, dovendo aspettare i X Giochi olimpici invernali di Grenoble nel 1968 per ritrovarne una ufficialmente riconosciuta, lo sciatore stilizzato Schuss, allora non considerato ufficiale ma successivamente riconosciuto come tale.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:50, 10 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28317097 -->
== Tech News: 2025-11 ==
<section begin="technews-2025-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/11|Translations]] are available.
'''Updates for editors'''
* Editors who use password managers at multiple wikis may notice changes in the future. The way that our wikis provide information to password managers about reusing passwords across domains has recently been updated, so some password managers might now offer you login credentials that you saved for a different Wikimedia site. Some password managers already did this, and are now doing it for more Wikimedia domains. This is part of the [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3|SUL3 project]] which aims to improve how our unified login works, and to keep it compatible with ongoing changes to the web-browsers we use. [https://phabricator.wikimedia.org/T385520][https://phabricator.wikimedia.org/T384844]
* The Wikipedia Apps Team is inviting interested users to help improve Wikipedia’s offline and limited internet use. After discussions in [[m:Afrika Baraza|Afrika Baraza]] and the last [[m:Special:MyLanguage/ESEAP Hub/Meetings|ESEAP call]], key challenges like search, editing, and offline access are being explored, with upcoming focus groups to dive deeper into these topics. All languages are welcome, and interpretation will be available. Want to share your thoughts? [[mw:Special:MyLanguage/Wikimedia Apps/Improving Wikipedia Mobile Apps for Offline & Limited Internet Use|Join the discussion]] or email <bdi lang="en" dir="ltr">aramadan@wikimedia.org</bdi>!
* All wikis will be read-only for a few minutes on March 19. This is planned at [https://zonestamp.toolforge.org/1742392800 14:00 UTC]. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.20|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/33|Growth newsletter]] is available. It includes: the launch of the Community Updates module, the most recent changes in Community Configuration, and the upcoming test of in-article suggestions for first-time editors.
* An old API that was previously used in the Android Wikipedia app is being removed at the end of March. There are no current software uses, but users of the app with a version that is older than 6 months by the time of removal (2025-03-31), will no longer have access to the Suggested Edits feature, until they update their app. You can [[diffblog:2025/02/24/sunset-of-wikimedia-recommendation-api/|read more details about this change]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:10, 10 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28372257 -->
== Wikipedia translation of the week: 2025-12 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Amazonas, o maior rio do mundo]]'''<br /> <small>''([[:pt:Amazonas, o maior rio do mundo]]) ([[:es:Amazonas, o maior rio do mundo]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Frame A from Amazonas, o maior rio do mundo.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''''Amazonas, o maior rio do mundo''''' (lit. 'Amazon: The Greatest River in the World') is a 1922 Brazilian silent documentary film produced in 1918 by Silvino Santos. It is a black-and-white film that portrays life in the Amazon rainforest. Completed in 1920, it is considered one of the oldest cinematic records of the Amazon. It was presumed lost in 1931 and only rediscovered in 2023 at the Czech Film Archive.
Silvino Santos produced the work over three years using sophisticated cinematic techniques, which led it to be deemed of "immense artistic value" by Le Monde. It has also been described as the "Holy Grail of Brazilian silent cinema" by The Guardian.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:57, 17 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28392163 -->
== Tech News: 2025-12 ==
<section begin="technews-2025-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/12|Translations]] are available.
'''Weekly highlight'''
* Twice a year, around the equinoxes, the Wikimedia Foundation's Site Reliability Engineering (SRE) team performs [[m:Special:MyLanguage/Tech/Server switch|a datacenter server switchover]], redirecting all traffic from one primary server to its backup. This provides reliability in case of a crisis, as we can always fall back on the other datacenter. [http://listen.hatnote.com/ Thanks to the Listen to Wikipedia] tool, you can hear the switchover take place: Before it begins, you'll hear the steady stream of edits; Then, as the system enters a brief read-only phase, the sound stops for a couple of minutes, before resuming after the switchover. You can [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|read more about the background and details of this process on the Diff blog]]. If you want to keep an ear out for the next server switchover, listen to the wikis on [https://zonestamp.toolforge.org/1742392800 March 19 at 14:00 UTC].
'''Updates for editors'''
* The [https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&filter-type=automatic&filter-id=previous-edits&active-list=suggestions&from=en&to=es improved Content Translation tool dashboard] is now available in [[phab:T387820|10 Wikipedias]] and will be available for all Wikipedias [[phab:T387821|soon]]. With [[mw:Special:MyLanguage/Content translation#Improved translation experience|the unified dashboard]], desktop users can now: Translate new sections of an article; Discover and access topic-based [https://ig.m.wikipedia.org/w/index.php?title=Special:ContentTranslation&active-list=suggestions&from=en&to=ig&filter-type=automatic&filter-id=previous-edits article suggestion filters] (initially available only for mobile device users); Discover and access the [[mw:Special:MyLanguage/Translation suggestions: Topic-based & Community-defined lists|Community-defined lists]] filter, also known as "Collections", from wiki-projects and campaigns.
* On Wikimedia Commons, a [[c:Commons:WMF support for Commons/Upload Wizard Improvements#Improve category selection|new system to select the appropriate file categories]] has been introduced: if a category has one or more subcategories, users will be able to click on an arrow that will open the subcategories directly within the form, and choose the correct one. The parent category name will always be shown on top, and it will always be possible to come back to it. This should decrease the amount of work for volunteers in fixing/creating new categories. The change is also available on mobile. These changes are part of planned improvements to the UploadWizard.
* The Community Tech team is seeking wikis to join a pilot for the [[m:Special:MyLanguage/Community Wishlist Survey 2023/Multiblocks|Multiblocks]] feature and a refreshed Special:Block page in late March. Multiblocks enables administrators to impose multiple different types of blocks on the same user at the same time. If you are an admin or steward and would like us to discuss joining the pilot with your community, please leave a message on the [[m:Talk:Community Wishlist Survey 2023/Multiblocks|project talk page]].
* Starting March 25, the Editing team will test a new feature for Edit Check at [[phab:T384372|12 Wikipedias]]: [[mw:Special:MyLanguage/Help:Edit check#Multi-check|Multi-Check]]. Half of the newcomers on these wikis will see all [[mw:Special:MyLanguage/Help:Edit check#ref|Reference Checks]] during their edit session, while the other half will continue seeing only one. The goal of this test is to see if users are confused or discouraged when shown multiple Reference Checks (when relevant) within a single editing session. At these wikis, the tags used on edits that show References Check will be simplified, as multiple tags could be shown within a single edit. Changes to the tags are documented [[phab:T373949|on Phabricator]]. [https://phabricator.wikimedia.org/T379131]
* The [[m:Special:MyLanguage/Global reminder bot|Global reminder bot]], which is a service for notifying users that their temporary user-rights are about to expire, now supports using the localized name of the user-rights group in the message heading. Translators can see the [[m:Global reminder bot/Translation|listing of existing translations and documentation]] to check if their language needs updating or creation.
* The [[Special:GlobalPreferences|GlobalPreferences]] gender setting, which is used for how the software should refer to you in interface messages, now works as expected by overriding the local defaults. [https://phabricator.wikimedia.org/T386584]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:26}} community-submitted {{PLURAL:26|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Wikipedia App for Android had a bug fixed for when a user is browsing and searching in multiple languages. [https://phabricator.wikimedia.org/T379777]
'''Updates for technical contributors'''
* Later this week, the way that Codex styles are loaded will be changing. There is a small risk that this may result in unstyled interface message boxes on certain pages. User generated content (e.g. templates) is not impacted. Gadgets may be impacted. If you see any issues [[phab:T388847|please report them]]. See the linked task for details, screenshots, and documentation on how to fix any affected gadgets.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.21|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:48, 17 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28412594 -->
== Wikipedia translation of the week: 2025-13 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ali of the Eretnids]]'''<br /> <small>''([[:tr:Alaaddin Ali Bey]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Ala al-Din Ali''' (January 1353 – August 1380) was the third Sultan of the Eretnids ruling from 1366 until his death. He inherited the throne at a very early age and was removed from administrative matters. He was characterized as particularly keen on personal pleasures, which later discredited his authority. During his rule, emirs under the Eretnids enjoyed considerable autonomy, and the state continued to shrink as neighboring powers captured several towns.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:59, 24 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28433698 -->
== Tech News: 2025-13 ==
<section begin="technews-2025-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/13|Translations]] are available.
'''Weekly highlight'''
* The Wikimedia Foundation is seeking your feedback on the [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Product & Technology OKRs|drafts of the objectives and key results that will shape the Foundation's Product and Technology priorities]] for the next fiscal year (starting in July). The objectives are broad high-level areas, and the key-results are measurable ways to track the success of their objectives. Please share your feedback on the talkpage, in any language, ideally before the end of April.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] will be released to multiple wikis (see [[m:Special:MyLanguage/CampaignEvents/Deployment status#Global Deployment Plan|deployment plan]] for details) in April 2025, and the team has begun the process of engaging communities on the identified wikis. The extension provides tools to organize, manage, and promote collaborative activities (like events, edit-a-thons, and WikiProjects) on the wikis. The extension has three tools: [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Collaboration List]], and [[m:Special:MyLanguage/Campaigns/Foundation Product Team/Invitation list|Invitation Lists]]. It is currently on 13 Wikipedias, including English Wikipedia, French Wikipedia, and Spanish Wikipedia, as well as Wikidata. Questions or requests can be directed to the [[mw:Help talk:Extension:CampaignEvents|extension talk page]] or in Phabricator (with <bdi lang="en" dir="ltr" style="white-space: nowrap;">#campaigns-product-team</bdi> tag).
* Starting the week of March 31st, wikis will be able to set which user groups can view private registrants in [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], as part of the [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents]] extension. By default, event organizers and the local wiki admins will be able to see private registrants. This is a change from the current behavior, in which only event organizers can see private registrants. Wikis can change the default setup by [[m:Special:MyLanguage/Requesting wiki configuration changes|requesting a configuration change]] in Phabricator (and adding the <bdi lang="en" dir="ltr" style="white-space: nowrap;">#campaigns-product-team</bdi> tag). Participants of past events can cancel their registration at any time.
* Administrators at wikis that have a customized <bdi lang="en" dir="ltr">[[MediaWiki:Sidebar]]</bdi> should check that it contains an entry for the {{int:specialpages}} listing. If it does not, they should add it using <code dir=ltr style="white-space: nowrap;">* specialpages-url|specialpages</code>. Wikis with a default sidebar will see the link moved from the page toolbox into the sidebar menu in April. [https://phabricator.wikimedia.org/T388927]
* The Minerva skin (mobile web) combines both Notice and Alert notifications within the bell icon ([[File:OOjs UI icon bell.svg|16px|link=|class=skin-invert]]). There was a long-standing bug where an indication for new notifications was only shown if you had unseen Alerts. This bug is now fixed. In the future, Minerva users will notice a counter atop the bell icon when you have 1 or more unseen Notices and/or Alerts. [https://phabricator.wikimedia.org/T344029]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* VisualEditor has introduced a [[mw:VisualEditor/Hooks|new client-side hook]] for developers to use when integrating with the VisualEditor target lifecycle. This hook should replace the existing lifecycle-related hooks, and be more consistent between different platforms. In addition, the new hook will apply to uses of VisualEditor outside of just full article editing, allowing gadgets to interact with the editor in DiscussionTools as well. The Editing Team intends to deprecate and eventually remove the old lifecycle hooks, so any use cases that this new hook does not cover would be of interest to them and can be [[phab:T355555|shared in the task]].
* Developers who use the <code dir=ltr>mw.Api</code> JavaScript library, can now identify the tool using it with the <code dir=ltr>userAgent</code> parameter: <code dir=ltr>var api = new mw.Api( { userAgent: 'GadgetNameHere/1.0.1' } );</code>. If you maintain a gadget or user script, please set a user agent, because it helps with library and server maintenance and with differentiating between legitimate and illegitimate traffic. [https://phabricator.wikimedia.org/T373874][https://foundation.wikimedia.org/wiki/Policy:Wikimedia_Foundation_User-Agent_Policy]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.22|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:43, 24 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28443127 -->
== Wikipedia translation of the week: 2025-14 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Chilembwe uprising]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Chilembwe supporters being led to be executed (cropped).jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Chilembwe uprising''' was a rebellion against British colonial rule in Nyasaland (modern-day Malawi) which took place in January 1915. It was led by John Chilembwe, an American-educated Baptist minister. Based around his church in the village of Mbombwe in the south-east of the colony, the leaders of the revolt were mainly from an emerging black middle class. They were motivated by grievances against the British colonial system, which included forced labour, racial discrimination and new demands imposed on the African population following the outbreak of World War I.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:52, 31 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28454663 -->
== Tech News: 2025-14 ==
<section begin="technews-2025-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/14|Translations]] are available.
'''Updates for editors'''
* The Editing team is working on a new [[mw:Special:MyLanguage/Edit Check|Edit check]]: [[mw:Special:MyLanguage/Edit check#26 March 2025|Peacock check]]. This check's goal is to identify non-neutral terms while a user is editing a wikipage, so that they can be informed that their edit should perhaps be changed before they publish it. This project is at the early stages, and the team is looking for communities' input: [[phab:T389445|in this Phabricator task]], they are gathering on-wiki policies, templates used to tag non-neutral articles, and the terms (jargon and keywords) used in edit summaries for the languages they are currently researching. You can participate by editing the table on Phabricator, commenting on the task, or directly messaging [[m:user:Trizek (WMF)|Trizek (WMF)]].
* [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3|Single User Login]] has now been updated on all wikis to move login and account creation to a central domain. This makes user login compatible with browser restrictions on cross-domain cookies, which have prevented users of some browsers from staying logged in.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:35}} community-submitted {{PLURAL:35|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Starting on March 31st, the MediaWiki Interfaces team will begin a limited release of generated OpenAPI specs and a SwaggerUI-based sandbox experience for [[mw:Special:MyLanguage/API:REST API|MediaWiki REST APIs]]. They invite developers from a limited group of non-English Wikipedia communities (Arabic, German, French, Hebrew, Interlingua, Dutch, Chinese) to review the documentation and experiment with the sandbox in their preferred language. In addition to these specific Wikipedia projects, the sandbox and OpenAPI spec will be available on the [[testwiki:Special:RestSandbox|on the test wiki REST Sandbox special page]] for developers with English as their preferred language. During the preview period, the MediaWiki Interfaces Team also invites developers to [[mw:MediaWiki Interfaces Team/Feature Feedback/REST Sandbox|share feedback about your experience]]. The preview will last for approximately 2 weeks, after which the sandbox and OpenAPI specs will be made available across all wiki projects.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.23|MediaWiki]]
'''In depth'''
* Sometimes a small, [[gerrit:c/operations/cookbooks/+/1129184|one line code change]] can have great significance: in this case, it means that for the first time in years we're able to run all of the stack serving <bdi lang="en" dir="ltr">[http://maps.wikimedia.org/ maps.wikimedia.org]</bdi> - a host dedicated to serving our wikis and their multi-lingual maps needs - from a single core datacenter, something we test every time we perform a [[m:Special:MyLanguage/Tech/Server switch|datacenter switchover]]. This is important because it means that in case one of our datacenters is affected by a catastrophe, we'll still be able to serve the site. This change is the result of [[phab:T216826|extensive work]] by two developers on porting the last component of the maps stack over to [[w:en:Kubernetes|kubernetes]], where we can allocate resources more efficiently than before, thus we're able to withstand more traffic in a single datacenter. This work involved a lot of complicated steps because this software, and the software libraries it uses, required many long overdue upgrades. This type of work makes the Wikimedia infrastructure more sustainable.
'''Meetings and events'''
* [[mw:Special:MyLanguage/MediaWiki Users and Developers Workshop Spring 2025|MediaWiki Users and Developers Workshop Spring 2025]] is happening in Sandusky, USA, and online, from 14–16 May 2025. The workshop will feature discussions around the usage of MediaWiki software by and within companies in different industries and will inspire and onboard new users. Registration and presentation signup is now available at the workshop's website.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:06, 1 April 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28473566 -->
== Wikipedia translation of the week: 2025-15 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:1930 Bago earthquake]]'''<br /> <small>''([[:my:၁၉၃၀ ပဲခူးငလျင်]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Thiao Mueang Phama (1955, p. 165).jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
An earthquake affected Myanmar on 5 May 1930 with a moment magnitude (Mw ) 7.4. The shock occurred 35 km (22 mi) beneath the surface with a maximum Rossi–Forel intensity of IX (Devastating tremor). The earthquake was the result of rupture along a 131 km (81 mi) segment of the Sagaing Fault—a major strike-slip fault that runs through the country. Extensive damage was reported in the southern part of the country, particularly in Bago and Yangon, where buildings collapsed and fires erupted. At least 550, and possibly up to 7,000 people were killed. A moderate tsunami struck the Burmese coast which caused minor damage to ships and a port. It was felt for over 570,000 km2 (220,000 sq mi) and as far as Shan State and Thailand. The mainshock was followed by many aftershocks; several were damaging. The December earthquake was similarly sized which also occurred along the Sagaing Fault.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:54, 7 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28454663 -->
== Tech News: 2025-15 ==
<section begin="technews-2025-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/15|Translations]] are available.
'''Updates for editors'''
* From now on, [[m:Special:MyLanguage/Interface administrators|interface admins]] and [[m:Special:MyLanguage/Central notice administrators|centralnotice admins]] are technically required to enable [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] before they can use their privileges. In the future this might be expanded to more groups with advanced user-rights. [https://phabricator.wikimedia.org/T150898]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The Design System Team is preparing to release the next major version of Codex (v2.0.0) on April 29. Editors and developers who use CSS from Codex should see the [[mw:Codex/Release Timeline/2.0|2.0 overview documentation]], which includes guidance related to a few of the breaking changes such as <code dir=ltr style="white-space: nowrap;">font-size</code>, <code dir=ltr style="white-space: nowrap;">line-height</code>, and <code dir=ltr style="white-space: nowrap;">size-icon</code>.
* The results of the [[mw:Developer Satisfaction Survey/2025|Developer Satisfaction Survey (2025)]] are now available. Thank you to all participants. These results help the Foundation decide what to work on next and to review what they recently worked on.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.24|MediaWiki]]
'''Meetings and events'''
* The [[mw:Special:MyLanguage/Wikimedia Hackathon 2025|2025 Wikimedia Hackathon]] will take place in Istanbul, Turkey, between 2–4 May. Registration for attending the in-person event will close on 13 April. Before registering, please note the potential need for a [https://www.mfa.gov.tr/turkish-representations.en.mfa visa] or [https://www.mfa.gov.tr/visa-information-for-foreigners.en.mfa e-visa] to enter the country.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:53, 7 April 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28507470 -->
== Wikipedia translation of the week: 2025-16 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Museum of Zoology of the University of São Paulo]]'''<br /> <small>''([[:pt:Museu de Zoologia da Universidade de São Paulo]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Museu de Zoologia da USP 02.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Museum of Zoology of the University of São Paulo''' (Portuguese: Museu de Zoologia da Universidade de São Paulo, abbreviated MZUSP) is a public natural history museum located in the historic Ipiranga district of São Paulo, Brazil. The MZUSP is an educational and research institution that is part of the University of São Paulo. The museum began at the end of the 19th century as part of the Museu Paulista; in 1941, it moved into a dedicated building. In 1969 the museum became a part of the University of São Paulo, receiving its current name.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:27, 14 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28454663 -->
== Tech News: 2025-16 ==
<section begin="technews-2025-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/16|Translations]] are available.
'''Weekly highlight'''
* Later this week, the default thumbnail size will be increased from 220px to 250px. This changes how pages are shown in all wikis and has been requested by some communities for many years, but wasn't previously possible due to technical limitations. [https://phabricator.wikimedia.org/T355914]
* File thumbnails are now stored in discrete sizes. If a page specifies a thumbnail size that's not among the standard sizes (20, 40, 60, 120, 250, 330, 500, 960), then MediaWiki will pick the closest larger thumbnail size but will tell the browser to downscale it to the requested size. In these cases, nothing will change visually but users might load slightly larger images. If it doesn't matter which thumbnail size is used in a page, please pick one of the standard sizes to avoid the extra in-browser down-scaling step. [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Images#Thumbnail_sizes][https://phabricator.wikimedia.org/T355914]
'''Updates for editors'''
* The Wikimedia Foundation are working on a system called [[m:Edge Uniques|Edge Uniques]] which will enable [[:w:en:A/B testing|A/B testing]], help protect against [[:w:en:Denial-of-service attack|Distributed denial-of-service attacks]] (DDoS attacks), and make it easier to understand how many visitors the Wikimedia sites have. This is so that they can more efficiently build tools which help readers, and make it easier for readers to find what they are looking for.
* To improve security for users, a small percentage of logins will now require that the account owner input a one-time password [[mw:Special:MyLanguage/Help:Extension:EmailAuth|emailed to their account]]. It is recommended that you [[Special:Preferences#mw-prefsection-personal-email|check]] that the email address on your account is set correctly, and that it has been confirmed, and that you have an email set for this purpose. [https://phabricator.wikimedia.org/T390662]
* "Are you interested in taking a short survey to improve tools used for reviewing or reverting edits on your Wiki?" This question will be [[phab:T389401|asked at 7 wikis starting next week]], on Recent Changes and Watchlist pages. The [[mw:Special:MyLanguage/Moderator Tools|Moderator Tools team]] wants to know more about activities that involve looking at new edits made to your Wikimedia project, and determining whether they adhere to your project's policies.
* On April 15, the full Wikidata graph will no longer be supported on <bdi lang="zxx" dir="ltr">[https://query.wikidata.org/ query.wikidata.org]</bdi>. After this date, scholarly articles will be available through <bdi lang="zxx" dir="ltr" style="white-space:nowrap;">[https://query-scholarly.wikidata.org/ query-scholarly.wikidata.org]</bdi>, while the rest of the data hosted on Wikidata will be available through the <bdi lang="zxx" dir="ltr">[https://query.wikidata.org/ query.wikidata.org]</bdi> endpoint. This is part of the scheduled split of the Wikidata Graph, which was [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/September 2024 scaling update|announced in September 2024]]. More information is [[d:Wikidata:SPARQL query service/WDQS graph split|available on Wikidata]].
* The latest quarterly [[m:Special:MyLanguage/Wikimedia Apps/Newsletter/First quarter of 2025|Wikimedia Apps Newsletter]] is now available. It covers updates, experiments, and improvements made to the Wikipedia mobile apps.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The latest quarterly [[mw:Technical Community Newsletter/2025/April|Technical Community Newsletter]] is now available. This edition includes: an invitation for tool maintainers to attend the Toolforge UI Community Feedback Session on April 15th; recent community metrics; and recent technical blog posts.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.25|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:25, 15 April 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28540654 -->
== Wikipedia translation of the week: 2025-17 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Fear of crime]]'''<br /> <small>''([[:ar:الخوف من الجريمة]]) ([[:it:Criminofobia]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Fear of crime''' refers to the fear of being a victim of crime, which is not necessarily reflective of the actual probability of being such a victim.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:23, 21 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28559524 -->
== Tech News: 2025-17 ==
<section begin="technews-2025-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/17|Translations]] are available.
'''Updates for editors'''
* [[f:Special:MyLanguage/Wikifunctions:Main Page|Wikifunctions]] is now integrated with [[w:dag:Solɔɣu|Dagbani Wikipedia]] since April 15. It is the first project that will be able to call [[f:Special:MyLanguage/Wikifunctions:Introduction|functions from Wikifunctions]] and integrate them in articles. A function is something that takes one or more inputs and transforms them into a desired output, such as adding up two numbers, converting miles into metres, calculating how much time has passed since an event, or declining a word into a case. Wikifunctions will allow users to do that through a simple call of [[f:Special:MyLanguage/Wikifunctions:Catalogue|a stable and global function]], rather than via a local template. [https://www.wikifunctions.org/wiki/Special:MyLanguage/Wikifunctions:Status_updates/2025-04-16]
* A new type of lint error has been created: [[Special:LintErrors/empty-heading|{{int:linter-category-empty-heading}}]] ([[mw:Special:MyLanguage/Help:Lint errors/empty-heading|documentation]]). The [[mw:Special:MyLanguage/Help:Extension:Linter|Linter extension]]'s purpose is to identify wikitext patterns that must or can be fixed in pages and provide some guidance about what the problems are with those patterns and how to fix them. [https://phabricator.wikimedia.org/T368722]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:37}} community-submitted {{PLURAL:37|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Following its publication on HuggingFace, the "Structured Contents" dataset, developed by Wikimedia Enterprise, is [https://enterprise.wikimedia.com/blog/kaggle-dataset/ now also available on Kaggle]. This Beta initiative is focused on making Wikimedia data more machine-readable for high-volume reusers. They are releasing this beta version in a location that open dataset communities already use, in order to seek feedback, to help improve the product for a future wider release. You can read more about the overall [https://enterprise.wikimedia.com/blog/structured-contents-snapshot-api/#open-datasets Structured Contents project], and about the [https://enterprise.wikimedia.com/blog/structured-contents-wikipedia-infobox/ first release that's freely usable].
* There is no new MediaWiki version this week.
'''Meetings and events'''
* The Editing and Machine Learning Teams invite interested volunteers to a video meeting to discuss [[mw:Special:MyLanguage/Edit check/Peacock check|Peacock check]], which is the latest [[mw:Special:MyLanguage/Edit check|Edit check]] that will detect "peacock" or "overly-promotional" or "non-neutral" language whilst an editor is typing. Editors who work with newcomers, or help to fix this kind of writing, or are interested in how we use artificial intelligence in our projects are encouraged to attend. The [[mw:Special:MyLanguage/Editing team/Community Conversations#Next Conversation|meeting will be on April 28, 2025]] at [https://zonestamp.toolforge.org/1745863200 18:00–19:00 UTC] and hosted on Zoom.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:01, 21 April 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28578245 -->
== Wikipedia translation of the week: 2025-18 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Heritage preservation in South Korea]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Korean.Dance-03.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The heritage preservation system of South Korea is a multi-level program aiming to preserve and cultivate Korean cultural heritage. The program is administered by the Cultural Heritage Administration (CHA), and the legal framework is provided by the Cultural Heritage Protection Act of 1962, last updated in 2012. The program started in 1962 and has gradually been extended and upgraded since then.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:57, 28 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28583422 -->
== Tech News: 2025-18 ==
<section begin="technews-2025-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/18|Translations]] are available.
'''Updates for editors'''
* Event organizers who host collaborative activities on [[m:Special:MyLanguage/CampaignEvents/Deployment status#Global Deployment Plan|multiple wikis]], including Bengali, Japanese, and Korean Wikipedias, will have access to the [[mw:Special:MyLanguage/Extension:CampaignEvents|CampaignEvents extension]] this week. Also, admins in the Wikipedia where the extension is enabled will automatically be granted the event organizer right soon. They won't have to manually grant themselves the right before they can manage events as [[phab:T386861|requested by a community]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The release of the next major version of [[mw:Special:MyLanguage/Codex|Codex]], the design system for Wikimedia, is scheduled for 29 April 2025. Technical editors will have access to the release by the week of 5 May 2025. This update will include a number of [[mw:Special:MyLanguage/Codex/Release_Timeline/2.0#Breaking_changes|breaking changes]] and minor [[mw:Special:MyLanguage/Codex/Release_Timeline/2.0#Visual_changes|visual changes]]. Instructions on handling the breaking and visual changes are documented on [[mw:Special:MyLanguage/Codex/Release Timeline/2.0#|this page]]. Pre-release testing is reported in [[phab:T386298|T386298]], with post-release issues tracked in [[phab:T392379|T392379]] and [[phab:T392390|T392390]].
* Users of [[wikitech:Special:MyLanguage/Help:Wiki_Replicas|Wiki Replicas]] will notice that the database views of <code dir="ltr">ipblocks</code>, <code dir="ltr">ipblocks_ipindex</code>, and <code dir="ltr">ipblocks_compat</code> are [[phab:T390767|now deprecated]]. Users can query the <code dir="ltr">[[mw:Special:MyLanguage/Manual:Block_table|block]]</code> and <code dir="ltr">[[mw:Special:MyLanguage/Manual:Block_target_table|block_target]]</code> new views that mirror the new tables in the production database instead. The deprecated views will be removed entirely from Wiki Replicas in June, 2025.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.27|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/April|Language and Internationalization Newsletter]] is now available. This edition includes an overview of the improved [https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&campaign=contributionsmenu&to=es&filter-type=automatic&filter-id=previous-edits&active-list=suggestions&from=en#/ Content Translation Dashboard Tool], [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/April#Language Support for New and Existing Languages|support for new languages]], [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/April#Wiki Loves Ramadan Articles Made In Content Translation Mobile Workflow|highlights from the Wiki Loves Ramadan campaign]], [[m:Special:MyLanguage/Research:Languages Onboarding Experiment 2024 - Executive Summary|results from the Language Onboarding Experiment]], an analysis of topic diversity in articles, and information on upcoming community meetings and events.
'''Meetings and events'''
* The [[Special:MyLanguage/Grants:Knowledge_Sharing/Connect/Calendar|Let's Connect Learning Clinic]] will take place on [https://zonestamp.toolforge.org/1745937000 April 29 at 14:30 UTC]. This edition will focus on "Understanding and Navigating Conflict in Wikimedia Projects". You can [[m:Special:MyLanguage/Event:Learning Clinic %E2%80%93 Understanding and Navigating Conflict in Wikimedia Projects (Part_1)|register now]] to attend.
* The [[mw:Special:MyLanguage/Wikimedia Hackathon 2025|2025 Wikimedia Hackathon]], which brings the global technical community together to connect, brainstorm, and hack existing projects, will take place from May 2 to 4th, 2025, at Istanbul, Turkey.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:32, 28 April 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28585685 -->
== Wikipedia translation of the week: 2025-19 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lhamana]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:We-Wa, a Zuni berdache, weaving - NARA - 523796 (cropped).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Lhamana''', in traditional Zuni culture, are biologically male people who take on the social and ceremonial roles usually performed by women in their culture, at least some of the time. They wear a mixture of women's and men's clothing and much of their work is in the areas usually occupied by Zuni women. Some contemporary lhamana participate in the pan-Indian two-spirit community.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 07:28, 5 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28583422 -->
== Tech News: 2025-19 ==
<section begin="technews-2025-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/19|Translations]] are available.
'''Weekly highlight'''
* The Wikimedia Foundation has shared the latest draft update to their [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026|annual plan]] for next year (July 2025–June 2026). This includes an [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026|executive summary]] (also on [[diffblog:2025/04/25/sharing-the-wikimedia-foundations-2025-2026-draft-annual-plan/|Diff]]), details about the three main [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Goals|goals]] ([[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Product & Technology OKRs|Infrastructure]], [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Goals/Volunteer Support|Volunteer Support]], and [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Goals/Effectiveness|Effectiveness]]), [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Global Trends|global trends]], and the [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Budget Overview|budget]] and [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Financial Model|financial model]]. Feedback and questions are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2025-2026|talk page]] until the end of May.
'''Updates for editors'''
* For wikis that have the [[m:Special:MyLanguage/CampaignEvents/Deployment status|CampaignEvents extension enabled]], two new feature improvements have been released:
** Admins can now choose which namespaces are permitted for [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] via [[mw:Special:MyLanguage/Community Configuration|Community Configuration]] ([[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Permitted namespaces|documentation]]). The default setup is for event registration to be permitted in the Event namespace, but other namespaces (such as the project namespace or WikiProject namespace) can now be added. With this change, communities like WikiProjects can now more easily use Event Registration for their collaborative activities.
** Editors can now [[mw:Special:MyLanguage/Transclusion|transclude]] the Collaboration List on a wiki page ([[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Collaboration list/Transclusion|documentation]]). The Collaboration List is an automated list of events and WikiProjects on the wikis, accessed via {{#special:AllEvents}} ([[w:en:Special:AllEvents|example]]). Now, the Collaboration List can be added to all sorts of wiki pages, such as: a wiki mainpage, a WikiProject page, an affiliate page, an event page, or even a user page.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Developers who use the <code dir=ltr>moment</code> library in gadgets and user scripts should revise their code to use alternatives like the <code dir=ltr>Intl</code> library or the new <code dir=ltr>mediawiki.DateFormatter</code> library. The <code dir=ltr>moment</code> library has been deprecated and will begin to log messages in the developer console. You can see a global search for current uses, and [[phab:T392532|ask related questions in this Phabricator task]].
* Developers who maintain a tool that queries the Wikidata term store tables (<code dir=ltr style="white-space: nowrap;">wbt_*</code>) need to update their code to connect to a separate database cluster. These tables are being split into a separate database cluster. Tools that query those tables via the wiki replicas must be adapted to connect to the new cluster instead. [[wikitech:News/2025 Wikidata term store database split|Documentation and related links are available]]. [https://phabricator.wikimedia.org/T390954]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.28|MediaWiki]]
'''In depth'''
* The latest [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|Chart Project newsletter]] is available. It includes updates on preparing to expand the deployment to additional wikis as soon as this week (starting May 6) and scaling up over the following weeks, plus exploring filtering and transforming source data.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:15, 6 May 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28665011 -->
== Wikipedia translation of the week: 2025-20 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Gruppo del Sileno]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Parco3.JPG|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Sileno ed Egle con Mnasilo e Cromi''', meglio noto come Gruppo del Sileno, è un monumento in marmo di Carrara, realizzato da Jean-Baptiste Boudard nel 1765 per il Giardino Ducale di Parma; sostituito nel 1991 con una copia in polvere di marmo e resina, l'originale si trova provvisoriamente nel chiostro della Fontana del monastero di San Paolo, in attesa della definitiva collocazione prevista all'interno del palazzetto Eucherio Sanvitale nel parco Ducale.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:28, 12 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28709947 -->
== Tech News: 2025-20 ==
<section begin="technews-2025-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/20|Translations]] are available.
'''Weekly highlight'''
* The [[m:Special:MyLanguage/Wikimedia URL Shortener|"Get shortened URL"]] link on the sidebar now includes a [[phab:T393309|QR code]]. Wikimedia site users can now use it by scanning or downloading it to quickly share and access shared content from Wikimedia sites, conveniently.
'''Updates for editors'''
* The Wikimedia Foundation is working on a system called [[m:Edge Uniques|Edge Uniques]], which will enable [[w:en:A/B testing|A/B testing]], help protect against [[w:en:Denial-of-service attack|distributed denial-of-service attacks]] (DDoS attacks), and make it easier to understand how many visitors the Wikimedia sites have. This is to help more efficiently build tools which help readers, and make it easier for readers to find what they are looking for. Tech News has [[m:Special:MyLanguage/Tech/News/2025/16|previously written about this]]. The deployment will be gradual. Some might see the Edge Uniques cookie the week of 19 May. You can discuss this on the [[m:Talk:Edge Uniques|talk page]].
* Starting May 19, 2025, Event organisers in wikis with the [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] enabled can use [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] in the project namespace (e.g., Wikipedia namespace, Wikidata namespace). With this change, communities don't need admins to use the feature. However, wikis that don't want this change can remove and add the permitted namespaces at [[Special:CommunityConfiguration/CampaignEvents]].
* The Wikipedia project now has a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q36720|Nupe]] ([[w:nup:|<code>w:nup:</code>]]). This is a language primarily spoken in the North Central region of Nigeria. Speakers of this language are invited to contribute to [[w:nup:Tatacin feregi|new Wikipedia]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Developers can now access pre-parsed Dutch Wikipedia, amongst others (English, German, French, Spanish, Italian, and Portuguese) through the [https://enterprise.wikimedia.com/docs/snapshot/#structured-contents-snapshot-bundle-info-beta Structured Contents snapshots (beta)]. The content includes parsed Wikipedia abstracts, descriptions, main images, infoboxes, article sections, and references.
* The <code dir="ltr">/page/data-parsoid</code> REST API endpoint is no longer in use and will be deprecated. It is [[phab:T393557|scheduled to be turned off]] on June 7, 2025.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.1|MediaWiki]]
'''In depth'''
* The [https://wikitech.wikimedia.org/wiki/News/2025_Cloud_VPS_VXLAN_IPv6_migration IPv6 support] is a newly introduced Cloud virtual network that significantly boosts Wikimedia platforms' scalability, security, and readiness for the future. If you are a technical contributor eager to learn more, check out [https://techblog.wikimedia.org/2025/05/06/wikimedia-cloud-vps-ipv6-support/ this blog post] for an in-depth look at the journey to IPv6.
'''Meetings and events'''
* The 2nd edition of 2025 of [[m:Special:MyLanguage/Afrika Baraza|Afrika Baraza]], a virtual platform for African Wikimedians to connect, will take place on [https://zonestamp.toolforge.org/1747328400 May 15 at 17:00 UTC]. This edition will focus on discussions regarding [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026|Wikimedia Annual planning and progress]].
* The [[m:Special:MyLanguage/MENA Connect Community Call|MENA Connect Community Call]], a virtual meeting for [[w:en:Middle East and North Africa|MENA]] Wikimedians to connect, will take place on [https://zonestamp.toolforge.org/1747501200 May 17 at 17:00 UTC]. You can [[m:Event:MENA Connect (Wiki_Diwan) APP Call|register now]] to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:38, 12 May 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28714188 -->
== Wikipedia translation of the week: 2025-21 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lorrin A. Thurston]]'''<br /> <small>''([[:fi:Lorrin Thurston]]) ([[:ko:로린 A. 서스턴]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lorrinandrewsthurston1892.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Lorrin Andrews Thurston''' (July 31, 1858 – May 11, 1931) was a Hawaiian citizen lawyer, politician, and businessman. Thurston played a prominent role in the revolution that overthrew the Hawaiian Kingdom to replace Queen Liliʻuokalani with the Republic of Hawaii, with discreet US support for which Congress much later apologized. He published the Pacific Commercial Advertiser (a forerunner of the present-day Honolulu Star-Advertiser), and owned other enterprises. From 1906 to 1916, he and his network lobbied with national politicians to create a national park to preserve the Hawaiian volcanoes.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:33, 19 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28731710 -->
== Tech News: 2025-21 ==
<section begin="technews-2025-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/21|Translations]] are available.
'''Weekly highlight'''
* The Editing Team and the Machine Learning Team are working on a new check for newcomers: [[mw:Edit check/Peacock check|Peacock check]]. Using a prediction model, this check will encourage editors to improve the tone of their edits, using artificial intelligence. We invite volunteers to review the first version of the Peacock language model for the following languages: Arabic, Spanish, Portuguese, English, and Japanese. Users from these wikis interested in reviewing this model are [[mw:Edit check/Peacock check/model test|invited to sign up at MediaWiki.org]]. The deadline to sign up is on May 23, which will be the start date of the test.
'''Updates for editors'''
* From May 20, 2025, [[m:Special:MyLanguage/Oversight policy|oversighters]] and [[m:Special:MyLanguage/Meta:CheckUsers|checkusers]] will need to have their accounts secured with two-factor authentication (2FA) to be able to use their advanced rights. All users who belong to these two groups and do not have 2FA enabled have been informed. In the future, this requirement may be extended to other users with advanced rights. [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|Learn more]].
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] [[m:Special:MyLanguage/Community Wishlist Survey 2023/Multiblocks|Multiblocks]] will begin mass deployment by the end of the month: all non-Wikipedia projects plus Catalan Wikipedia will adopt Multiblocks in the week of May 26, while all other Wikipedias will adopt it in the week of June 2. Please [[m:Talk:Community Wishlist Survey 2023/Multiblocks|contact the team]] if you have concerns. Administrators can test the new user interface now on your own wiki by browsing to [{{fullurl:Special:Block|usecodex=1}} {{#special:Block}}?usecodex=1], and can test the full multiblocks functionality [[testwiki:Special:Block|on testwiki]]. Multiblocks is the feature that makes it possible for administrators to impose different types of blocks on the same user at the same time. See the [[mw:Special:MyLanguage/Help:Manage blocks|help page]] for more information. [https://phabricator.wikimedia.org/T377121]
* Later this week, the [[{{#special:SpecialPages}}]] listing of almost all special pages will be updated with a new design. This page has been [[phab:T219543|redesigned]] to improve the user experience in a few ways, including: The ability to search for names and aliases of the special pages, sorting, more visible marking of restricted special pages, and a more mobile-friendly look. The new version can be [https://meta.wikimedia.beta.wmflabs.org/wiki/Special:SpecialPages previewed] at Beta Cluster now, and feedback shared in the task. [https://phabricator.wikimedia.org/T219543]
* The [[mw:Special:MyLanguage/Extension:Chart|Chart extension]] is being enabled on more wikis. For a detailed list of when the extension will be enabled on your wiki, please read the [[mw:Special:MyLanguage/Extension:Chart/Project#Deployment Timeline|deployment timeline]].
* [[f:Special:MyLanguage/Wikifunctions:Main Page|Wikifunctions]] will be deployed on May 27 on five Wiktionaries: [[wikt:ha:|Hausa]], [[wikt:ig:|Igbo]], [[wikt:bn:|Bengali]], [[wikt:ml:|Malayalam]], and [[wikt:dv:|Dhivehi/Maldivian]]. This is the second batch of deployment planned for the project. After deployment, the projects will be able to call [[f:Special:MyLanguage/Wikifunctions:Introduction|functions from Wikifunctions]] and integrate them in their pages. A function is something that takes one or more inputs and transforms them into a desired output, such as adding up two numbers, converting miles into metres, calculating how much time has passed since an event, or declining a word into a case. Wikifunctions will allow users to do that through a simple call of [[f:Special:MyLanguage/Wikifunctions:Catalogue|a stable and global function]], rather than via a local template.
* Later this week, the Wikimedia Foundation will publish a hub for [[diffblog:2024/07/09/on-the-value-of-experimentation/|experiments]]. This is to showcase and get user feedback on product experiments. The experiments help the Wikimedia movement [[diffblog:2023/07/13/exploring-paths-for-the-future-of-free-knowledge-new-wikipedia-chatgpt-plugin-leveraging-rich-media-social-apps-and-other-experiments/|understand new users]], how they interact with the internet and how it could affect the Wikimedia movement. Some examples are [[m:Special:MyLanguage/Future Audiences/Generated Video|generated video]], the [[m:Special:MyLanguage/Future Audiences/Roblox game|Wikipedia Roblox speedrun game]] and [[m:Special:MyLanguage/Future Audiences/Discord bot|the Discord bot]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:29}} community-submitted {{PLURAL:29|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a bug with creating an account using the API, which has now been fixed. [https://phabricator.wikimedia.org/T390751]
'''Updates for technical contributors'''
* Gadgets and user scripts that interact with [[{{#special:Block}}]] may need to be updated to work with the new [[mw:Special:MyLanguage/Help:Manage blocks|manage blocks interface]]. Please review the [[mw:Help:Manage blocks/Developers|developer guide]] for more information. If you need help or are unable to adapt your script to the new interface, please let the team know on the [[mw:Help talk:Manage blocks/Developers|talk page]]. [https://phabricator.wikimedia.org/T377121]
* The <code dir=ltr>mw.title</code> object allows you to get information about a specific wiki page in the [[w:en:Wikipedia:Lua|Lua]] programming language. Starting this week, a new property will be added to the object, named <code dir=ltr>isDisambiguationPage</code>. This property allows you to check if a page is a disambiguation page, without the need to write a custom function. [https://phabricator.wikimedia.org/T71441]
* [[File:Octicons-tools.svg|15px|link=|class=skin-invert|Advanced item]] User script developers can use a [[toolforge:gitlab-content|new reverse proxy tool]] to load javascript and css from [[gitlab:|gitlab.wikimedia.org]] with <code dir=ltr>mw.loader.load</code>. The tool's author hopes this will enable collaborative development workflows for user scripts including linting, unit tests, code generation, and code review on <bdi lang="zxx" dir="ltr">gitlab.wikimedia.org</bdi> without a separate copy-and-paste step to publish scripts to a Wikimedia wiki for integration and acceptance testing. See [[wikitech:Tool:Gitlab-content|Tool:Gitlab-content on Wikitech]] for more information.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.2|MediaWiki]]
'''Meetings and events'''
* The 12th edition of [[m:Special:MyLanguage/Wiki Workshop 2025|Wiki Workshop 2025]], a forum that brings together researchers that explore all aspects of Wikimedia projects, will be held virtually on 21-22 May. Researchers can [https://pretix.eu/wikimedia/wikiworkshop2025/ register now].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W21"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:13, 19 May 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28724712 -->
== Wikipedia translation of the week: 2025-22 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Lamiera bugnata]]'''<br /> <small>''([[:en:Tread plate]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Diamond Plate.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Una '''lamiera bugnata''' o mandorlata è una lamiera di metallo ottenuta dalla laminazione di una bramma attraverso rulli che, tramite punzonatura o goffratura, imprimono sulla lamina rilievi a forma di rombo o ellisse, detti bugne. Nel caso questi rilievi siano alternati singolarmente nei due assi, si parla di lamiera diamantata, mentre se le forme sono predisposte in maniera parallela per formare piccoli quadranti tra di loro tangenti, questo pattern viene identificato con il nome di mandorlato.
We tend to ignore the fact that this type of plate is the only reason we don't slip when we walk on steel and wet or frozen surfaces. The Italian article it's short but quite complete, and has just the right amount of citations, unlike other poor languages' versions.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 06:03, 26 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28751788 -->
== Tech News: 2025-22 ==
<section begin="technews-2025-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/22|Translations]] are available.
'''Weekly highlight'''
* A community-wide discussion about a very delicate issue for the development of [[m:Special:MyLanguage/Abstract Wikipedia|Abstract Wikipedia]] is now open on Meta: where to store the abstract content that will be developed through functions from Wikifunctions and data from Wikidata. The discussion is open until June 12 at [[m:Special:MyLanguage/Abstract Wikipedia/Location of Abstract Content|Abstract Wikipedia/Location of Abstract Content]], and every opinion is welcomed. The decision will be made and communicated after the consultation period by the Foundation.
'''Updates for editors'''
* Since last week, on all wikis except [[phab:T388604|the largest 20]], people using the mobile visual editor will have [[phab:T385851|additional tools in the menu bar]], accessed using the new <code>+</code> toolbar button. To start, the new menu will include options to add: citations, hieroglyphs, and code blocks. Deployment to the remaining wikis is [[phab:T388605|scheduled]] to happen in June.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The <code dir=ltr>[[mw:Special:MyLanguage/Help:Extension:ParserFunctions##ifexist|#ifexist]]</code> parser function will no longer register a link to its target page. This will improve the usefulness of [[{{#special:WantedPages}}]], which will eventually only list pages that are the target of an actual red link. This change will happen gradually as the source pages are updated. [https://phabricator.wikimedia.org/T14019]
* This week, the Moderator Tools team will launch [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|a new filter to Recent Changes]], starting at Indonesian Wikipedia. This new filter highlights edits that are likely to be reverted. The goal is to help Recent Changes patrollers identify potentially problematic edits. Other wikis will benefit from this filter in the future.
* Upon clicking an empty search bar, logged-out users will see suggestions of articles for further reading. The feature will be available on both desktop and mobile. Readers of Catalan, Hebrew, and Italian Wikipedias and some sister projects will receive the change between May 21 and mid-June. Readers of other wikis will receive the change later. The goal is to encourage users to read the wikis more. [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments/Search Suggestions|Learn more]].
* Some users of the Wikipedia Android app can use a new feature for readers, [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/TrivaGame|WikiGames]], a daily trivia game based on real historical events. The release has started as an A/B test, available to 50% of users in the following languages: English, French, Portuguese, Russian, Spanish, Arabic, Chinese, and Turkish.
* The [[mw:Special:MyLanguage/Extension:Newsletter|Newsletter extension]] that is available on MediaWiki.org allows the creation of [[mw:Special:Newsletters|various newsletters]] for global users. The extension can now publish new issues as section links on an existing page, instead of requiring a new page for each issue. [https://phabricator.wikimedia.org/T393844]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The previously deprecated <code dir=ltr>[[mw:Special:MyLanguage/Manual:Ipblocks table|ipblocks]]</code> views in [[wikitech:Help:Wiki Replicas|Wiki Replicas]] will be removed in the beginning of June. Users are encouraged to query the new <code dir=ltr>[[mw:Special:MyLanguage/Manual:Block table|block]]</code> and <code dir=ltr>[[mw:Special:MyLanguage/Manual:Block target table|block_target]]</code> views instead.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.3|MediaWiki]]
'''Meetings and events'''
* [[d:Special:MyLanguage/Event:Wikidata and Sister Projects|Wikidata and Sister Projects]] is a multi-day online event that will focus on how Wikidata is integrated to Wikipedia and the other Wikimedia projects. The event runs from May 29 – June 1. You can [[d:Special:MyLanguage/Event:Wikidata and Sister Projects#Sessions|read the Program schedule]] and [[d:Special:RegisterForEvent/1291|register]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:05, 26 May 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28788673 -->
== Wikipedia translation of the week: 2025-23 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Angelo azzurro (cocktail)]]'''<br /> <small>''([[:es:Ángel azul (cóctel)]]) ([[:fr:Ange bleu (cocktail)]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Angelo Azzurro Cocktail.png|300px|center]]
<div style="text-align:left; padding: .4em;">
L''''angelo azzurro''' è un cocktail alcolico italiano. È considerato uno dei cocktail più popolari in Italia negli anni novanta, insieme al B-52 e all'Invisibile.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 05:39, 2 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-23 ==
<section begin="technews-2025-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/23|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Extension:Chart|Chart extension]] is now available on all Wikimedia wikis. Editors can use this new extension to create interactive data visualizations like bar, line, area, and pie charts. Charts are designed to replace many of the uses of the legacy [[mw:Special:MyLanguage/Extension:Graph|Graph extension]].
'''Updates for editors'''
* It is now easier to configure automatic citations for your wiki within the visual editor's [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|citation generator]]. Administrators can now set a default template by using the <code dir=ltr>_default</code> key in the local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> page ([[mw:Special:Diff/6969653/7646386|example diff]]). Setting this default will also help to future-proof your existing configurations when [[phab:T347823|new item types]] are added in the future. You can still set templates for individual item types as they will be preferred to the default template. [https://phabricator.wikimedia.org/T384709]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Starting the week of June 2, bots logging in using <code dir=ltr>action=login</code> or <code dir=ltr>action=clientlogin</code> will fail more often. This is because of stronger protections against suspicious logins. Bots using [[mw:Special:MyLanguage/Manual:Bot passwords|bot passwords]] or using a loginless authentication method such as [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] are not affected. If your bot is not using one of those, you should update it; using <code dir=ltr>action=login</code> without a bot password was deprecated [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|in 2016]]. For most bots, this only requires changing what password the bot uses. [https://phabricator.wikimedia.org/T395205]
* From this week, Wikimedia wikis will allow ES2017 features in JavaScript code for official code, gadgets, and user scripts. The most visible feature of ES2017 is <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi> syntax, allowing for easier-to-read code. Until this week, the platform only allowed up to ES2016, and a few months before that, up to ES2015. [https://phabricator.wikimedia.org/T381537]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]]
'''Meetings and events'''
* Scholarship applications to participate in the [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] are now open. The conference will take place from 30 October to 1 November, in Lisbon, Portugal. GLAM contributors who lack the means to support their participation can [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|apply here]]. Scholarship applications close on June 7th.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55, 2 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 -->
== Wikipedia translation of the week: 2025-24 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:fi:Kotiryssä]]'''<br /> <small>''([[:en:Kotiryssä]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
A '''kotiryssä''' (jocular Finnish: one’s home Russky or home Russian) was a Soviet or Russian contact person of a Finnish politician, bureaucrat, businessman or other important person.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:33, 9 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-24 ==
<section begin="technews-2025-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/24|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Trust and Safety Product|Trust and Safety Product team]] is finalizing work needed to roll out [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] on large Wikipedias later this month. The team has worked with stewards and other users with extended rights to predict and address many use cases that may arise on larger wikis, so that community members can continue to effectively moderate and patrol temporary accounts. This will be the second of three phases of deployment – the last one will take place in September at the earliest. For more information about the recent developments on the project, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|see this update]]. If you have any comments or questions, write on the [[mw:Talk:Trust and Safety Product/Temporary Accounts|talk page]], and [[m:Event:CEE Catch up Nr. 10 (June 2025)|join a CEE Catch Up]] this Tuesday.
'''Updates for editors'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] The [[mw:Special:MyLanguage/Help:Watchlist expiry|watchlist expiry]] feature allows editors to watch pages for a limited period of time. After that period, the page is automatically removed from your watchlist. Starting this week, you can set a preference for the default period of time to watch pages. The [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferences]] also allow you to set different default watch periods for editing existing pages, pages you create, and when using rollback. [https://phabricator.wikimedia.org/T265716]
[[File:Talk pages default look (April 2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* The appearance of talk pages will change at almost all Wikipedias ([[m:Special:MyLanguage/Tech/News/2024/19|some]] have already received this design change, [[phab:T379264|a few]] will get these changes later). You can read details about the changes [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|on ''Diff'']]. It is possible to opt out of these changes [[Special:Preferences#mw-prefsection-editing-discussion|in user preferences]] ("{{int:discussiontools-preference-visualenhancements}}"). [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121]
* Users with specific extended rights (including administrators, bureaucrats, checkusers, oversighters, and stewards) can now have IP addresses of all temporary accounts [[phab:T358853|revealed automatically]] during time-limited periods where they need to combat high-speed account-hopping vandalism. This feature was requested by stewards. [https://phabricator.wikimedia.org/T386492]
* This week, the Moderator Tools and Machine Learning teams will continue the rollout of [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|a new filter to Recent Changes]], releasing it to several more Wikipedias. This filter utilizes the Revert Risk model, which was created by the Research team, to highlight edits that are likely to be reverted and help Recent Changes patrollers identify potentially problematic contributions. The feature will be rolled out to the following Wikipedias: {{int:project-localized-name-afwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-bewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-bnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hawwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-simplewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}. The rollout will continue in the coming weeks to include [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|the rest of the Wikipedias in this project]]. [https://phabricator.wikimedia.org/T391964]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* AbuseFilter editors active on Meta-Wiki and large Wikipedias are kindly asked to update AbuseFilter to make it compatible with temporary accounts. A link to the instructions and the private lists of filters needing verification are [[phab:T369611|available on Phabricator]].
* Lua modules now have access to the name of a page's associated thumbnail image, and on [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 some wikis] to the WikiProject assessment information. This is possible using two new properties on [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], named <code dir=ltr>pageImage</code> and <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:17, 10 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 -->
== Wikipedia translation of the week: 2025-25 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Future self]]'''<br /> <small>''([[:pl:Przyszła jaźń]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
In the psychology of self, the '''future self''' concerns the processes and consequences associated with thinking about oneself in the future. People think about their future selves similarly to how they think about other people. The extent to which people feel psychologically connected (e.g., similarity, closeness) to their future self influences how well they treat their future self. When people feel connected to their future self, they are more likely to save for retirement, make healthy decisions, and avoid ethical transgressions. Interventions that increase feelings of connectedness with future selves can improve future-oriented decision making across these domains.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 16 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-25 ==
<section begin="technews-2025-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/25|Translations]] are available.
'''Updates for editors'''
* You can [https://wikimediafoundation.limesurvey.net/359761?lang=en nominate your favorite tools] for the sixth edition of the [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Nominations are anonymous and will be open until June 25. You can re-use the survey to nominate multiple tools.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:33}} community-submitted {{PLURAL:33|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]]
'''In depth'''
* Foundation staff and technical volunteers use Wikimedia APIs to build the tools, applications, features, and integrations that enhance user experiences. Over the coming years, the MediaWiki Interfaces team will be investing in Wikimedia web (HTTP) APIs to better serve technical volunteer needs and protect Wikimedia infrastructure from potential abuse. You can [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ read more about their plans to evolve the APIs in this Techblog post].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:39, 16 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 -->
== Wikipedia translation of the week: 2025-26 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pictorial map]]'''<br /> <small>''([[:fa:نقشه تصویری]]) ([[:ja:絵地図]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Blake Britain Spearhead of Attack.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Pictorial maps''' (also known as illustrated maps, panoramic maps, perspective maps, bird's-eye view maps, and geopictorial maps) depict a given territory with a more artistic rather than technical style. It is a type of map in contrast to road map, atlas, or topographic map. The cartography can be a sophisticated 3-D perspective landscape or a simple map graphic enlivened with illustrations of buildings, people and animals. They can feature all sorts of varied topics like historical events, legendary figures or local agricultural products and cover anything from an entire continent to a college campus. Drawn by specialized artists and illustrators, pictorial maps are a rich, centuries-old tradition and a diverse art form that ranges from cartoon maps on restaurant placemats to treasured art prints in museums.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:18, 23 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-26 ==
<section begin="technews-2025-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/26|Translations]] are available.
'''Weekly highlight'''
* This week, the Moderator Tools and Machine Learning teams will continue the rollout of [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|a new filter to Recent Changes]], releasing it to the third and last batch of Wikipedias. This filter utilizes the Revert Risk model, which was created by the Research team, to highlight edits that are likely to be reverted and help Recent Changes patrollers identify potentially problematic contributions. The feature will be rolled out to the following Wikipedias: {{int:project-localized-name-azwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-swwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tlwiki/en}}. The rollout will continue in the coming weeks to include [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|the rest of the Wikipedias in this project]]. [https://phabricator.wikimedia.org/T391964]
'''Updates for editors'''
* Last week, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] were rolled out on Czech, Korean, and Turkish Wikipedias. This and next week, deployments on larger Wikipedias will follow. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Share your thoughts]] about the project. [https://phabricator.wikimedia.org/T340001]
* Later this week, the Editing team will release [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] to all Wikipedias (except English Wikipedia). This feature shows multiple [[mw:Special:MyLanguage/Help:Edit check#Reference check|Reference checks]] within the editing experience. This encourages users to add citations when they add multiple new paragraphs to a Wikipedia article. This feature was previously available as an A/B test. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results The test shows] that users who are shown multiple checks are 1.3 times more likely to add a reference to their edit, and their edit is less likely to be reverted (-34.7%). [https://phabricator.wikimedia.org/T395519]
* A few pages need to be renamed due to software updates and to match more recent Unicode standards. All of these changes are related to title-casing changes. Approximately 71 pages and 3 files will be renamed, across 15 wikis; the complete list is in [[phab:T396903|the task]]. The developers will rename these pages next week, and they will fix redirects and embedded file links a few minutes later via a system settings update.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:24}} community-submitted {{PLURAL:24|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that had caused pages to scroll upwards when text near the top was selected. [https://phabricator.wikimedia.org/T364023]
'''Updates for technical contributors'''
* Editors can now use Lua modules to filter and transform tabular data for use with [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. This can be used for things like selecting a subset of rows or columns from the source data, converting between units, statistical processing, and many other useful transformations. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Information on how to use transforms is available]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates]
* The <code dir=ltr>all_links</code> variable in [[Special:AbuseFilter|AbuseFilter]] is now renamed to <code dir=ltr>new_links</code> for consistency with other variables. Old usages will still continue to work. [https://phabricator.wikimedia.org/T391811]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/34|Growth newsletter]] is available. It includes: the recent updates for the "Add a Link" Task, two new Newcomer Engagement Features, and updates to Community Configuration.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21, 23 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 -->
== Wikipedia translation of the week: 2025-27 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Queen Elizabeth University Hospital]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:QEUH.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Queen Elizabeth University Hospital''' (QEUH) is a 1,677-bed acute hospital located in Govan, in the south-west of Glasgow, Scotland. The hospital is built on the site of the former Southern General Hospital and opened at the end of April 2015. The hospital comprises a 1,109-bed adult hospital, a 256-bed children's hospital and two major Emergency Departments; one for adults and one for children. There is also an Immediate Assessment Unit for local GPs and out-of-hours services, to send patients directly, without having to be processed through the Emergency Department. The retained buildings from the former Southern General Hospital include the Maternity Unit, the Institute of Neurological Sciences, the Langlands Unit for medicine of the elderly and the laboratory. The whole facility is operated by NHS Greater Glasgow and Clyde, and is one of the largest acute hospital campuses in Europe.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:05, 30 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-27 ==
<section begin="technews-2025-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/27|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] has been enabled on all Wikipedias. The extension makes it easier to organize and participate in collaborative activities, like edit-a-thons and WikiProjects, on the wikis. The extension has three features: [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Collaboration List]], and [[m:Campaigns/Foundation Product Team/Invitation list|Invitation List]]. To request the extension for your wiki, visit the [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|Deployment information page]].
'''Updates for editors'''
* AbuseFilter maintainers can now [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|match against IP reputation data]] in [[mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilters]]. IP reputation data is information about the proxies and VPNs associated with the user's IP address. This data is not shown publicly and is not generated for actions performed by registered accounts. [https://phabricator.wikimedia.org/T354599]
* Hidden content that is within [[mw:Special:MyLanguage/Manual:Collapsible elements|collapsible parts of wikipages]] will now be revealed when someone searches the page using the web browser's "Find in page" function (Ctrl+F or ⌘F) in supporting browsers. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility]
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] A new feature, called [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Favourite Templates]], will be deployed later this week on all projects (except English Wikipedia, which will receive the feature next week), following a piloting phase on Polish and Arabic Wikipedia, and Italian and English Wikisource. The feature will provide a better way for new and experienced contributors to recall and discover templates via the template dialog, by allowing users to put templates on a special "favourite list". The feature works with both the visual editor and the wikitext editor. The feature is a [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|community wishlist focus area]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that had caused some Notifications to be sent multiple times. [https://phabricator.wikimedia.org/T397103]
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:41, 30 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 -->
== Wikipedia translation of the week: 2025-28 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Non-constituency Member of Parliament]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
A '''Non-constituency Member of Parliament''' (NCMP) is a member of an opposition political party in Singapore who, as stipulated in Article 39 of the Constitution and the Parliamentary Elections Act, is declared to have been elected a Member of Parliament (MP) without constituency representation, despite having lost in a general election, by virtue of having been one of the opposition candidates with the highest vote shares among the unelected.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:10, 7 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-28 ==
<section begin="technews-2025-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/28|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Help:Temporary accounts|Temporary accounts]] have been rolled out on 18 large and medium-sized Wikipedias, including German, Japanese, French, and Chinese. Now, about 1/3 of all logged-out activity across wikis is coming from temporary accounts. Users involved in patrolling may be interested in two new documentation pages: [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Access to IP|Access to IP]], explaining everything related to access to temporary account IP addresses, and [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Repository|Repository]] with a list of new gadgets and user scripts.
'''Updates for editors'''
* Anyone can play an experimental new game, [[mw:Special:MyLanguage/New Engagement Experiments/WikiRun|WikiRun]], that lets you race through Wikipedia by clicking from one article to another, aiming to reach a target page in as few steps and in as little time as possible. The project's goal is to explore new ways of engaging readers. [https://wikirun-game.toolforge.org/ Try playing the game] and let the team know what you think [[mw:Talk:New Engagement Experiments/WikiRun|on the talk page]].
* Users of the Wikipedia Android app in some languages can now play the new [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/TrivaGame|trivia game]]. ''Which came first?'' is a simple history game where you guess which of two events happened earlier on today's date. It was previously available as an A/B test. It is now available to all users in English, German, French, Spanish, Portuguese, Russian, Arabic, Turkish, and Chinese. The goal of the feature is to help engage with new generations of readers. [https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/News/2025/22]
* Users of the iOS Wikipedia App in some languages may see a new tabbed browsing feature that enables you to open multiple tabs while reading. This feature makes it easier to explore related topics and switch between articles. The A/B test is currently running in Arabic, English, and Japanese in selected regions. More details are available on the [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Tabbed Browsing (Tabs)|Tabbed Browsing project page]].
* Bureaucrats on Wikimedia wikis can now use [[{{#special:VerifyOATHForUser}}]] to check if users have enabled [[mw:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]]. [https://phabricator.wikimedia.org/T265726]
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] A new feature related to [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|Template Recall and Discovery]] will be deployed later this week to all Wikimedia projects: a [[mw:Special:MyLanguage/Help:TemplateData/Template discovery#Template categories|template category browser]] will be introduced to assist users in finding templates to put in their “favourite” list. The browser will allow users to browse a list of templates which have been organised into a given category tree. The feature has been requested by the community [[m:Special:MyLanguage/Community Wishlist/Wishes/Select templates by categories|through the Community Wishlist]].
* It is now possible to access watchlist preferences from the watchlist page. Also the redundant button to edit the watchlist has been removed. [https://www.mediawiki.org/wiki/Moderator_Tools/Watchlist]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* As part of [[mw:MediaWiki_1.44|MediaWiki 1.44]] there is now a unified built-in Notifications system that makes it easier for developers to send, manage, and customize notifications. Check out the updated documentation at [[mw:Manual:Notifications|Manual:Notifications]], information about migration in [[phab:T388663|T388663]] and details on deprecated hooks in [[phab:T389624|T389624]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.9|MediaWiki]]
'''Meetings and events'''
* [[d:Special:MyLanguage/Event:WikidataCon 2025|WikidataCon 2025]], the conference dedicated to Wikidata is now open for [https://pretalx.com/wikidatacon-2025/cfp session proposals] and for [[d:Special:RegisterForEvent/1340|registration]]. This year's event will be held online from October 31 – November 02 and will explore on the theme of "Connecting People through Linked Open Data".
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W28"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:06, 8 July 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28930584 -->
== Wikipedia translation of the week: 2025-29 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Immunolabeling]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Immunolabeling process image.png|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Immunolabeling''' is a biochemical process that enables the detection and localization of an antigen to a particular site within a cell, tissue, or organ. Antigens are organic molecules, usually proteins, capable of binding to an antibody. These antigens can be visualized using a combination of antigen-specific antibody as well as a means of detection, called a tag, that is covalently linked to the antibody
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
---[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 13:44, 14 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28945528 -->
== Tech News: 2025-29 ==
<section begin="technews-2025-W29"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/29|Translations]] are available.
'''Updates for editors'''
* [[mw:Special:MyLanguage/Help:TemplateData/Template discovery#Featured templates|Featured templates]], a new feature related to [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|Template Recall and Discovery]] will be deployed this week to all Wikimedia projects: With this feature, editors will be able to quickly access a list of templates that are likely to be useful. These templates will be displayed in a list, under the "featured" tab of the template discovery interface. Administrators can define the list via the Community Configuration interface. The feature fulfills a request by the community [[m:Special:MyLanguage/Community Wishlist/Wishes/Easy access Templates|through the Community Wishlist]]. [https://phabricator.wikimedia.org/T367428][https://phabricator.wikimedia.org/T392896]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the request to add Malayalam fonts in the [[oldWikisource:Special:MyLanguage/Wikisource:WS Export|Wikisource Book Export Tool]] was resolved and now, the rendering of Malayalam letters in exported Wikisource books are accurate. [https://phabricator.wikimedia.org/T374457]
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.10|MediaWiki]]
'''In depth'''
* Developers, designers, and all Wikimedians are invited to [https://phabricator.wikimedia.org/project/board/7953/ submit a project idea] for the Wikimania Hackathon 2025. Read [https://diff.wikimedia.org/2025/06/30/call-for-projects-wikimania-hackathon-2025-is-coming-to-nairobi/ this Diff blog post] for more details.
'''Meetings and events'''
* [[m:WikiIndaba conference 2025|WikiIndaba 2025]] scholarship application and program submission is open until 23:59 GMT on July 20. WikiIndaba is a regional conference for African Wikimedians both on the continent and in the diaspora to unite and grow together. Submit [https://docs.google.com/forms/d/e/1FAIpQLSdJTv68R1OPASXXDfpIl8EWiMLTM-TDwh6_5gNVvFuWccFZ2Q/viewform your scholarship application] and [https://ee.kobotoolbox.org/x/BI3omIfH program proposal] now!
* [https://br.wikimedia.org/wiki/WikiCon_Brasil_2025 WikiCon Brasil 2025] will take place on July 19-20 in Salvador, Bahia, Brazil. The Brazilian community members are encouraged to register and attend!
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/29|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:10, 14 July 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28980963 -->
== Wikipedia translation of the week: 2025-30 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Vespa analis]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Plumpy hornet on the ground - 1.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Vespa analis''''', the yellow-vented hornet, is a species of common hornet found in Southeast Asia
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:28, 21 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28984647 -->
== Tech News: 2025-30 ==
<section begin="technews-2025-W30"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/30|Translations]] are available.
'''Updates for editors'''
* The Translation Suggestions feature in the [[mw:Special:MyLanguage/Content translation|Content Translation tool]] now has another level of article filters added to the "[https://en.wikipedia.org/w/index.php?title=Special:ContentTranslation&filter-type=automatic&filter-id=previous-edits&active-list=suggestions&from=en&to=fi#/ ... More]" category. Translators who use the Suggestions feature can now select and receive article suggestions that are customized to geographical locations of their interest using the new "{{int:Cx-sx-suggestions-filters-tab-regions}}" filter. [https://phabricator.wikimedia.org/T113257]
* Administrators can now limit "Add a Link" to newcomers. The [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|"Add a Link"]] Structured Task [[mw:Special:MyLanguage/Growth/Constructive activation experimentation#Enwiki A/B test & "Add a Link" Improvements (Wiki Experiences 1.2.11 & 1.2.16)|helps new account holders start editing]], but some communities have requested the ability to restrict it to its intended audience: newcomers. Administrators can configure this setting within the [[Special:CommunityConfiguration/GrowthSuggestedEdits|Community Configuration]] feature.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:29}} community-submitted {{PLURAL:29|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* For AbuseFilter editors on [[phab:T392144|some wikis]], it is now possible to filter edits based on the RevertRisk score of the edit being attempted. It is only populated if the action being evaluated is an edit. For more information, please see the [[mw:Special:MyLanguage/Extension:ORES/AbuseFilter variables#What variables are available for use|ORES/AbuseFilter variables]] documentation.
* The [[mw:Special:MyLanguage/Beta Cluster|Beta Cluster]] wikis have [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/YDABPV75LADRQCXMJAFWUP256N4EQ25B/|been moved]] from <code dir=ltr>beta.wmflabs.org</code> to <code dir=ltr>beta.wmcloud.org</code>. Users may need to update URLs in any tools, or in their password managers. Any related issues can be [[phab:T289318|reported in the task]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.11|MediaWiki]]
'''Meetings and events'''
* [[m:Special:MyLanguage/WikiCite 2025|WikiCite 2025]] will take place from 29–31 August, both online and in-person in Bern, Switzerland. The event's goals are to reconnect communities, institutions, and individuals working with open citations, bibliographic data, and the Wikidata/Wikibase ecosystem. Registration is open and the call for proposals will be announced soon. [https://lists.wikimedia.org/hyperkitty/list/wikidata@lists.wikimedia.org/message/KQZUG3ETKLBWPBYSB2YAWZIRPWHS24TG/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/30|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:43, 21 July 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29005283 -->
== Wikipedia translation of the week: 2025-31 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Fernando de Noronha Marine National Park]]'''<br /> <small>''([[:pt:Parque Nacional Marinho de Fernando de Noronha]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Baía dos Porcos - Fernando de Noronha (32811749914).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Fernando de Noronha Marine National Park''' (Portuguese: Parque Nacional Marinho de Fernando de Noronha) is a national park in the state of Pernambuco, Brazil.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:40, 28 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29047614 -->
== Tech News: 2025-31 ==
<section begin="technews-2025-W31"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/31|Translations]] are available.
'''Weekly highlight'''
* The Community Tech team will be focusing on wishes related to Watchlists and Recent Changes pages, over the next few months. They are looking for feedback. Please [[m:Special:MyLanguage/Community Wishlist/Updates#July 24, 2025: Watchlists and Recent Changes pages|read the latest update]], and if you have ideas, please [[m:Special:MyLanguage/Community Wishlist|submit a wish]] on the topic.
'''Updates for editors'''
* The Wikimedia Commons community has decided to block [[:mw:Special:MyLanguage/Upload dialog|cross-wiki uploads]] to Wikimedia Commons, for all users without autoconfirmed rights on that wiki, starting on August 16. This is because of [[:c:Commons:Cross-wiki media upload tool/History|widespread problems]] related to files that are uploaded by newcomers. Users who are affected by this will get an error message with a link to the less restrictive UploadWizard on Commons. Please help translating the [[:c:Special:MyLanguage/MediaWiki:Abusefilter-disallowed-cross-wiki-upload|message]] or give feedback on the message text. Please also update your local help pages to explain this restriction. [https://phabricator.wikimedia.org/T370598]
* On wikis with temporary accounts enabled and Meta-Wiki, administrators may now set up a footer for the Special:Contributions pages of temporary accounts, similar to those which can be shown on IP and user-account pages. They may do it by creating the page named <code dir=ltr>MediaWiki:Sp-contributions-footer-temp</code>. [https://phabricator.wikimedia.org/T398347]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.12|MediaWiki]]
'''Meetings and events'''
* [[wmania:Special:MyLanguage/2025:Wikimania|Wikimania 2025]] will run from August 6–9. The [https://wikimedia.eventyay.com/talk/wikimania2025/schedule/ program is available] for you to plan which sessions you want to attend. Most sessions will be live-streamed, with exceptions for those that show the "no camera" icon. If you are joining online to watch live-streams and use the interactive features, please [[wmania:Special:MyLanguage/2025:Registration|register]] for a free virtual ticket. For example, you may be interested in technical sessions such as:
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/KFEFVG/ Temporary Accounts: Enhancing privacy for our unregistered editors]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/TVCVAB/ Building a Sustainable Future for Wikimedia Contributors]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/WTRQCJ/ A dozen visions for wikitext!]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/8YKKP9/ Coordinate Across Stakeholders with the Product and Technology Advisory Council]
* The [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Fall 2025|MediaWiki Users and Developers Conference, Fall 2025]] will be held 28–30 October 2025 in Hanover, Germany. This event is organized by and for the third-party MediaWiki community. You can propose sessions and register to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/31|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:27, 29 July 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29051727 -->
== Wikipedia translation of the week: 2025-32 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Xie Zhiliu]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Xie Zhiliu''' (Chinese: 谢稚柳; 1910–1997) was a leading traditional painter, calligrapher, and art connoisseur of modern China.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:21, 4 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29077280 -->
== Tech News: 2025-32 ==
<section begin="technews-2025-W32"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/32|Translations]] are available.
'''Updates for editors'''
* Editors can now enable the [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/User Info|User Info card]]. This feature adds an icon next to usernames on history pages and similar user-contribution log pages. When you tap or click on the icon, it displays data related to that user account such as the number of edits, reverted edits, blocks, and more. It's part of a broader project to make it easier for moderators to evaluate account trustworthiness. The feature can be enabled in [[testwiki:Special:GlobalPreferences#mw-prefsection-rendering|your global preferences]], and later this week it will be available in local preferences. [https://phabricator.wikimedia.org/T386439]
* Everybody is invited to share comments on [[m:Special:MyLanguage/CampaignEvents/Collaborative contributions|Collaborative Contributions]], a project recently launched by the [[m:Special:MyLanguage/Connection Team|Connection team]]. The project aims to create a new way to display the impact of collaborative editing activities (such as edit-a-thons, backlog drives, and WikiProjects) on the wikis. Post your comments on the [[m:Talk:CampaignEvents/Collaborative contributions|project talk page]]. [https://phabricator.wikimedia.org/T378035]
* Administrators can now define the default block duration for temporary accounts. To do that, they need to create a page named <code dir=ltr>MediaWiki:Ipb-default-expiry-temporary-account</code> and use a value defined in <code dir=ltr>MediaWiki:Ipboptions</code>. This allows administrators to easily block temporary accounts for 90 days, which is functionally equivalent to an indefinite block. The advantage of this solution is that it does not clutter Special:BlockList. [[mw:Special:MyLanguage/Manual:Block and unblock#Default block duration options|More documentation]] is available. [https://phabricator.wikimedia.org/T398626]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Gadgets can now include <code dir=ltr>.vue</code> files. This makes it easier to develop modern user interfaces using [[mw:Vue.js|Vue.js]], in particular using [[mw:Special:MyLanguage/Codex|Codex]], the official design system of Wikimedia. [[wmdoc:codex/latest/icons/overview.html|Codex icons]] can be loaded through the gadget definition. [[mw:Special:MyLanguage/Extension:Gadgets#Pages|The documentation]] has examples. For user scripts that use Vue.js, an [[mw:API:CodexIcons|API module]] now exists to load Codex icons. [https://phabricator.wikimedia.org/T340460][https://phabricator.wikimedia.org/T311099]
* Module developers can now use a [[mw:Help:Extension:Translate/Message Bundles/Lua reference|Lua interface]] to simplify the preparation of Lua modules for translation on Meta-Wiki. This improvement makes it easier for translators to find and edit module strings without dealing with raw Lua code. It helps prevent mistakes that could break the module during translation. Module developers and translators are invited to [[commons:File:Translatable modules video demo July 2025.webm|watch the demo video]], read more about [[mw:Special:MyLanguage/Translatable modules|translatable modules]] to understand how it works, refer to Meta-Wiki's [[m:Module:User Wikimedia project|Module:User Wikimedia project]] for example usage, and [[mw:Talk:Translatable modules|share their feedback]] on how well it addresses the challenges in their workflow. The interface still has some performance issues, so it should not be used in widely used modules yet. [https://phabricator.wikimedia.org/T359918]
* Developers of external tools that connect to Wikimedia pages must set a user-agent that complies with [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|the user-agent policy]]. This policy will start to be more strongly enforced in August because of external crawlers that are [[diffblog:2025/04/01/how-crawlers-impact-the-operations-of-the-wikimedia-projects/|overusing]] Wikimedia's resources. Tools that are hosted on Wikimedia's Toolforge or Cloud VPS will not be affected by this for now, but should still set a user-agent. [[phab:T400119|More technical details are available]], and related questions are welcome in that task.
* Parsoid Read Views is going to be rolling out to some smaller Wikipedias over the next few weeks, following the successful transition of Wikivoyages and Wiktionaries to Parsoid Read Views. For more information, see the [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parsoid/Parser Unification]] project page. [https://phabricator.wikimedia.org/project/profile/7694/]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.13|MediaWiki]]
'''Meetings and events'''
* [[wmania:Special:MyLanguage/2025:Wikimania|Wikimania 2025]] will run from August 6–9. The [https://wikimedia.eventyay.com/talk/wikimania2025/schedule/ program is available] for you to plan which sessions you want to attend. Most sessions will be live-streamed, with exceptions for those that show the "no camera" icon. If you are joining online to watch live-streams and use the interactive features, please [[wmania:Special:MyLanguage/2025:Registration|register]] for a free virtual ticket. For example, you may be interested in technical sessions such as:
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/GEH9DH/ Wikimedia’s knowledge infrastructure in a changing internet: Establishing sustainable pathways for content reuse]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/7ELN9Q/ Wikifunctions is coming soon to a wiki near you!]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/ZMGVJV/ Shaping the Future of Wikipedia’s Reader Experience]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/KCKTFZ/ Making Wikipedia More Readable: What Comes Next]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/32|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 03:41, 5 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29083927 -->
== Wikipedia translation of the week: 2025-33 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lethocerus patruelis]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lethocerus patruelis.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Lethocerus patruelis''''' is a giant water bug in the family Belostomatidae. It is native to southeastern Europe, through Southwest Asia, to Pakistan, India and Burma.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:20, 11 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29085671 -->
== Tech News: 2025-33 ==
<section begin="technews-2025-W33"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/33|Translations]] are available.
'''Updates for editors'''
* The WikiEditor toolbar now includes [[mw:Special:MyLanguage/Help:Extension:WikiEditor#Keyboard shortcuts|its keyboard shortcuts]] in the tooltips for its buttons. This will help to improve the discoverability of this feature. [https://phabricator.wikimedia.org/T400583]
* The [[m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] published a set of [[m:Special:MyLanguage/Product and Technology Advisory Council/August 2025 draft PTAC proposals for feedback|proposed experiments]] the Wikimedia Foundation can try to improve communication with community. Feedback on the proposals are welcomed until August 22 on [[m:Talk:Product and Technology Advisory Council/August 2025 draft PTAC proposals for feedback|this talk page]].
* The search bar on the Minerva skin (mobile) has been updated to use the same type-ahead search component that is used on the Vector 2022 skin. There are no changes in search functionality but there are minor visual changes. Specifically, the close-search button has been changed from an "X" to a back arrow. This helps to distinguish it from the other "X" button that is used to clear any text. [https://phabricator.wikimedia.org/T393944]
* Editors on some wikis will see a new toggle for "Group results by page" on watchlist, related changes, and recent changes pages. This is [[mw:Special:MyLanguage/Moderator Tools/Watchlist/Experiment|an A/B experiment]] that is planned to start on August 11, and will run for 3–6 weeks on the Bengali, Chinese, Czech, French, Greek, Portuguese, and Urdu Wikipedias. The experiment will examine how making this feature more discoverable might affect editors' ability to find the edits they are looking for. [https://phabricator.wikimedia.org/T396789]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The multiwiki datasets of [[:wikt:en:Module:Unicode data|Unicode data]] have been moved to [[c:Category:Unicode Module Datasets|Category:Unicode Module Datasets]] on Wikimedia Commons, to follow the idea of "One common data source, multiple local wikis". Most wikis have been updated to use the Commons version. You can ask questions at [[c:Category talk:Unicode Module Datasets|the talkpage]]. [https://en.wiktionary.org/wiki/Module_talk:Unicode_data#Data_from_commons]
* Lua code can add warnings when something is wrong, by using the <code dir=ltr>mw.addWarning()</code> function. It is now possible to add more than one warning, instead of new warnings replacing old ones. If you maintain a Lua module that used warnings, you should check it still works as expected. [https://phabricator.wikimedia.org/T398390]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.14|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/33|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:30, 11 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29106516 -->
== Wikipedia translation of the week: 2025-34 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ikiza]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:CIA map of Burundi and surrounding countries during 1972 killings.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Ikiza''' (variously translated from Kirundi as the Catastrophe, the Great Calamity, and the Scourge), or the Ubwicanyi (Killings), was a series of mass killings—often characterised as a genocide—which were committed in Burundi in 1972 by the Tutsi-dominated army and government, primarily against educated and elite Hutus who lived in the country. Conservative estimates place the death toll of the event between 100,000 and 150,000 killed, while some estimates of the death toll go as high as 300,000.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:43, 18 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29115447 -->
== Tech News: 2025-34 ==
<section begin="technews-2025-W34"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/34|Translations]] are available.
'''Updates for editors'''
* Later this week, people who are logged-in and have the "[[mw:Special:MyLanguage/Talk pages project/Feature summary|Discussion tools]]" [[Special:Preferences#mw-prefsection-betafeatures|Beta Feature]] enabled will gain the ability to "Thank" individual comments directly from talk pages, rather than needing to navigate to page history. [[mw:Special:MyLanguage/Talk pages project/Feature summary#Comment actions|Learn more about this feature]]. [https://phabricator.wikimedia.org/T400849]
* An A/B test comparing two versions of the desktop donate link launched on testwiki on 12 August and on English Wikipedia 14 August for 0.1% of logged out users on the desktop site. The experiment will run for three weeks, ending on 12 September. [https://phabricator.wikimedia.org/T395716]
* An A/A test to measure the baseline for reader retention was launched 12 August using [[wikitech:Experimentation Lab|Experimentation Lab]]. This measures the percentage of users who revisit a wiki after their initial visit over a 14-day period. No visual changes are expected. The experiment will run through 31 August. [https://phabricator.wikimedia.org/T399227]
* Five new wikis have been created:
** a {{int:project-localized-name-group-wikisource/en}} in [[d:Q34057|Tagalog]] ([[s:tl:|<code>s:tl:</code>]]) [https://phabricator.wikimedia.org/T388639]
** a {{int:project-localized-name-group-wikisource/en}} in [[d:Q36213|Madurese]] ([[s:mad:|<code>s:mad:</code>]]) [https://phabricator.wikimedia.org/T391747]
** a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q3450749|Rakhine]] ([[w:rki:|<code>w:rki:</code>]]) [https://phabricator.wikimedia.org/T392490]
** a {{int:project-localized-name-group-wikibooks/en}} in [[d:Q13324|Minangkabau]] ([[b:min:|<code>b:min:</code>]]) [https://phabricator.wikimedia.org/T395452]
** a {{int:project-localized-name-group-wiktionary/en}} in [[d:Q7598268|Standard Moroccan Amazigh]] ([[wikt:zgh:|<code>wikt:zgh:</code>]]) [https://phabricator.wikimedia.org/T399684]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:46}} community-submitted {{PLURAL:46|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.15|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/34|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W34"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:39, 19 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29127690 -->
== Wikipedia translation of the week: 2025-35 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Corallite]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Recent azooxanthellate Scleractinia (Cnidaria, Anthozoa) - ZooKeys-227-001-g004.jpeg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''corallite''' is the skeletal cup, formed by an individual stony coral polyp, in which the polyp sits and into which it can retract. The cup is composed of aragonite, a crystalline form of calcium carbonate, and is secreted by the polyp. Corallites vary in size, but in most colonial corals they are less than 3 mm (0.12 in) in diameter.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 25 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29115447 -->
== Tech News: 2025-35 ==
<section begin="technews-2025-W35"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/35|Translations]] are available.
'''Updates for editors'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Template authors can now use additional CSS properties, since the CSS sanitizer used by [[mw:Special:MyLanguage/Help:TemplateStyles|TemplateStyles]] was updated. For example: <code>width: fit-content</code>; <code>ruby-align</code>; relative units such as <code>lh</code>; and custom strings in <code>list-style-type</code>. These improvements are a [[m:Special:MyLanguage/Community Wishlist/Wishes/Allow use of modern CSS in templates by updating the TemplateStyles CSS sanitizer|Community Wishlist wish]]. [https://phabricator.wikimedia.org/T271958][https://phabricator.wikimedia.org/T277755][https://phabricator.wikimedia.org/T293633][https://phabricator.wikimedia.org/T295088][https://phabricator.wikimedia.org/T326906][https://phabricator.wikimedia.org/T340057][https://phabricator.wikimedia.org/T360725][https://phabricator.wikimedia.org/T371809][https://phabricator.wikimedia.org/T375344][https://phabricator.wikimedia.org/T394619]
* On large wikis, the default time period to display edits from, within the Special:RecentChanges page, has been changed from 7 days to 1 day. This is part of a performance improvement project. This should have no user-facing impact due to the quantity of edits on these wikis. [https://phabricator.wikimedia.org/T399455]
* Administrators can now access the [[{{#special:BlockedExternalDomains}}]] page from the [[{{#special:CommunityConfiguration}}]] list page. This makes it easier to find. [https://phabricator.wikimedia.org/T393240]
* Wikimedia Commons videos were not shown in the Videos tab in Google Search. The problem was investigated and reported to Google who have now fixed the issue. [https://phabricator.wikimedia.org/T396168][https://meta.wikimedia.org/wiki/Community_Wishlist/Wishes/Do_something_about_Google_%26_DuckDuckGo_search_not_indexing_media_files_and_categories_on_Commons]
* One new wiki has been created: a {{int:project-localized-name-group-wiktionary/en}} in [[d:Q33014|Betawi]] ([[wikt:bew:|<code>wikt:bew:</code>]]) [https://phabricator.wikimedia.org/T402130]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:39}} community-submitted {{PLURAL:39|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Two fields of the [[mw:Special:MyLanguage/Manual:Recentchanges table|recentchanges database table]] are being removed. <code>rc_new</code> and <code>rc_type</code> are being removed in favor of <code>rc_source</code>. Queries to these older fields will start to fail starting this week and developers should use <code>rc_source</code> instead. These older fields were deprecated over 10 years ago and should not be in use. This is part of work to improve the performance and stability of queries to the recentchanges table. [https://phabricator.wikimedia.org/T400696]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.16|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/July|Language and Internationalization Newsletter]] is now available. This edition includes: support for new languages in MediaWiki and translatewiki; the start of the Language Onboarding and Development project to help support the growth of new and small wikis; updates on research projects; and more.
'''Meetings and events'''
* The next [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Community meetings#29 August 2025|Language Community Meeting]] is happening soon, August 29th at [https://zonestamp.toolforge.org/1756479600 15:00 UTC]. This week's meeting will cover: the Avro keyboard developers from Wikimedia Bangladesh, who were recently awarded a national award for their contributions to this keyboard; and other topics.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/35|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:13, 26 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29175124 -->
== Wikipedia translation of the week: 2025-36 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Diksam Plateau]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Dixam plateau (6407168437).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Diksam Plateau''' or Dixam Plateau (Arabic: دكسم) is a limestone plateau in Socotra, Yemen. The Firmihin forest, located east of the Dirhur canyon within the plateau, has the highest concentration of Dragon's Blood Trees on the entire island.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:40, 1 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29195081 -->
== Tech News: 2025-36 ==
<section begin="technews-2025-W36"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/36|Translations]] are available.
'''Weekly highlight'''
* The Editing team wants to compile a list of templates, jargon terms, and policies used in edit summaries when a copyright violation is removed. This will help them identify the number of edits reverted due to copyright issues. We invite community members from the following Wikis to list these terms in [[Phab:T402601|T402601]], or to share their list with [[User:Trizek (WMF)|Trizek_(WMF)]]: {{int:project-localized-name-arwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-enwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-eswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-idwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-itwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-plwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ptwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ukwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-viwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zhwiki/en}}. This project is open until September 9th 2025.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] has been enabled for all Wikisources. The extension makes it easier to organize and participate in collaborative activities, like edit-a-thons and WikiProjects, on the wikis. The extension has three features: [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Collaboration List]], and [[m:Special:MyLanguage/Connection Team/Invitation list|Invitation List]]. To request the extension for your wiki, visit the Deployment information page. [https://meta.wikimedia.org/wiki/CampaignEvents/Deployment_status#How_to_Request_the_CampaignEvents_Extension_for_your_wiki]
* The lists in the footer of the editing interface, such as "Templates used on this page," will now be organized into columns when there is enough space. This enhancement minimizes scrolling when editing lengthy articles on Wikipedia. [https://phabricator.wikimedia.org/T401066]
* On September 3rd, 2025 we will increase the sampling percentages of our [[mw:Special:MyLanguage/Moderator Tools/Watchlist/Experiment#Scope of the experiment|group by toggle experiment]] of the <code>Special:RecentChanges</code>, <code>Special:Watchlist</code>, and <code>Special:RelatedChanges</code> pages on the Chinese, French, and Portuguese Wikipedias to 100 percent, allowing more editors to be part of this experiment. This adjustment is intended to ensure we have sufficient data to make informed decisions when evaluating the experiment results. [https://phabricator.wikimedia.org/T402958][https://phabricator.wikimedia.org/T396789]
* Upon clicking an empty search bar, logged-out users will see suggestions of articles for further reading on English Wikipedia beginning the week of September 22. The feature will be available on both desktop and mobile. All non-English wikis received this change in June and July. The goal is to make it easier for users to find articles. [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments/Search Suggestions|Learn more]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:37}} community-submitted {{PLURAL:37|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.17|MediaWiki]]
'''In depth'''
* Wikifunctions now has a new capability called "lightweight enumeration types", an enumeration type is simply a fixed set of values that's in the type's definition. This capability makes it quick and easy to define such a type, and allows for the reuse of values that are already present in Wikidata. Here is [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-07-19|a newsletter]] to learn more.
* The latest [[mw:Special:MyLanguage/Readers/Newsletter updates#August 2025: Newsletter #1|Readers Newsletter]] is now available. This edition includes: the formation of two new teams — Reader Growth and Reader Experience; insights into declining pageviews and account creations; highlights from the Wikimania Nairobi panel on improving the reading experience; upcoming experiments to engage new and existing readers; and more.
'''Meetings and events'''
* Spotlight on some Wikimania 2025 Sessions:
** Identifying AI-generated text by searching for ISBNs whose checksums fail: Mathias Schindler of WMDE [https://www.youtube.com/watch?v=Dw9o8Lsl974&t=15910s shared tools to help communities search for these].
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/TCHZKH/ La durabilité du mouvement Wikimedia face aux défis actuels et futurs]: This session explored how Wikimedia can stay a trusted source of knowledge in the age of generative AI, information overload, and disinformation.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/36|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:51, 1 September 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29196010 -->
== Wikipedia translation of the week: 2025-37 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Ttongsul]]'''<br /> <small>''([[:ja:トンスル]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Ttongsul (imitation).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''ttongsul''' (똥술), o vino di feci, è una tradizionale preparazione medicinale coreana con gradazione alcolica al 9% a base di feci, solitamente umane e preferibilmente di bambino. Nato probabilmente traendo spunto dalla medicina tradizionale cinese, nelle credenze popolari il vino di feci avrebbe proprietà benefiche per molti tipi di malesseri: sarebbe un rimedio per dolori muscolari, ustioni, infiammazioni, epilessia e fratture ossee.
Sebbene alcuni media occidentali abbiano in passato riportato che questa bevanda sia diffusa tra la popolazione coreana, al giorno d'oggi un numero molto limitato di persone ne fa uso, dopo aver subito un declino di popolarità nei secoli scorsi, tanto che la maggioranza dei giovani coreani non ne ha mai sentito parlare.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:28, 8 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29195081 -->
== Tech News: 2025-37 ==
<section begin="technews-2025-W37"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/37|Translations]] are available.
'''Weekly highlight'''
* The Editing team is working on a new check: [[mw:Special:MyLanguage/Paste check|Paste check]]. This check informs newcomers who paste text into Wikipedia that the content might not be accepted. This check is an effort to increase the likelihood that the new content people are adding to Wikipedia is aligned with the Movement's commitment to offering information under a free content license. This check will soon be tested at a few wikis. If your community is interested in this test, please [[phab:T403680|tell us in this task]], or [[mw:Talk:Edit check|contact the team]].
'''Updates for editors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Later this week, users of the "{{int:codemirror-beta-feature-title}}" [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] will be able to use a [[w:en:Lint (software)|linting tool]] to see errors or other potential problems in wikitext in real time. See the [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|help page for more information]]. [https://phabricator.wikimedia.org/T381577]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] When browsing a wiki (like <code dir=ltr>en.wikipedia.org</code>), the software responds in one of two ways: a desktop page, or a redirect to a mobile version on an "m" domain (like <code dir=ltr>en.m.wikipedia.org</code>). Over the next three weeks, MediaWiki will start displaying the mobile version to mobile devices directly on the standard domain, without this redirect. This change does not affect existing m-dot URLs, or the "Desktop view" opt-out. [[mw:Requests for comment/Mobile domain sunsetting/2025 Announcement|Learn more]]. [https://phabricator.wikimedia.org/T214998]
* When an edit changes the categories of a page, the changes to the category membership counts are now happening asynchronously. This improves the speed of saving edits, especially when moving many pages to or from the same category, and reduces the risk of site outages, but it means that the counts can show outdated information for a few minutes. [https://phabricator.wikimedia.org/T365303]
* Edits on Wikidata to qualifiers (properties and values) and references (properties and values) in a Wikidata item statement will now not add entries to the RecentChanges or Watchlist pages on all other Wikis. This is a temporary change to improve performance while other solutions are created. Wikidata's own pages remain unchanged. [[m:Wikidata For Wikimedia Projects/Reduce change propagation noise#Phase 1: Turn off (temporarily) Qualifiers and References Wikidata edits to the Recent Changes tables|Learn more]]. [https://phabricator.wikimedia.org/T401286][https://phabricator.wikimedia.org/T400698]
* Japanese-language wikis have had a major upgrade to the way that search works. The new search should generally give more accurate and more relevant search results. [https://phabricator.wikimedia.org/T318269]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.18|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/37|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:15, 9 September 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29238161 -->
== Wikipedia translation of the week: 2025-38 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pak Kum-chol]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Pak Kum-chol in 1961 (cropped).jpg|center]]
<div style="text-align:left; padding: .4em;">
'''Pak Kum-chol''' was a North Korean politician. Having been a guerrilla during the anti-Japanese struggle, he became a high-ranking politician after the liberation of Korea. Pak aligned himself with his former guerrilla brothers in arms from the Kapsan Operation Committee to form a faction within the ruling Workers' Party of Korea (WPK) called the "Kapsan faction". This faction sought to replace Kim Il Sung with Pak. Kim retaliated by purging the faction in 1967 in what is known as the Kapsan faction incident.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 15 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29249252 -->
== Tech News: 2025-38 ==
<section begin="technews-2025-W38"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/38|Translations]] are available.
'''Updates for editors'''
* References lists that are made using the <code dir=ltr><nowiki><references/></nowiki></code> [[mw:Special:MyLanguage/Help:Cite#references-tag|tag]] will now automatically display with columns in Vector 2022 when readers are using its 'standard' settings for text-size and page-width. [https://phabricator.wikimedia.org/T334941]
* Starting in the week of October 6, on [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/small.dblist|small wikis]] and [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/medium.dblist|medium wikis]] that have the [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] enabled, all autoconfirmed users will be able to use [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] as an organizer. No changes will be made for [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/large.dblist|large wikis]] unless requested in Phabricator. This change is being made to make it easier for more people to use Event Registration, especially on wikis that are less likely to have policies related to the Event Organizer right. [[m:Special:MyLanguage/CampaignEvents/Proposal to grant autoconfirmed users on small and medium wikis the organizer access to the event registration tool|Learn more]].
* Users that search using regular expressions (regex) can now use additional features including:
** for the <code dir=ltr>intitle:</code> keyword: [[mw:Special:MyLanguage/Help:CirrusSearch#Metacharacters|metacharacters]] for start-of-line (<code dir=ltr>^</code>) and end-of-line (<code dir=ltr>$</code>) anchors [https://phabricator.wikimedia.org/T317599]
** for both <code dir=ltr>intitle:</code> and <code dir=ltr>insource:</code> keywords: shorthand [[mw:Special:MyLanguage/Help:CirrusSearch#Character_Classes|character classes]] for digits (<code dir=ltr>\d</code>), whitespace (<code dir=ltr>\s</code>), and word characters (<code dir=ltr>\w</code>); and [[mw:Special:MyLanguage/Help:CirrusSearch#Escape codes|escape codes]] for line feed (<code dir=ltr>\r</code>), newline (<code dir=ltr>\n</code>), tab (<code dir=ltr>\t</code>), and unicode (e.g. <code dir=ltr>\uHHHH</code>). [https://phabricator.wikimedia.org/T403212]
* When you search for text that looks like an IP, the system will now show search results. It used to take you to the contributions for that IP instead of showing search results. [https://phabricator.wikimedia.org/T306325]
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on September 24. This is planned at [https://zonestamp.toolforge.org/1758726000 15:00 UTC]. This is for the datacenter server switchover backup tests which happen twice a year. You can [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|read more about the background and details of this process on the Diff blog]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:24}} community-submitted {{PLURAL:24|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that affected users who used the page-tabs to switch from wikitext editing of a section into the visualeditor. [https://phabricator.wikimedia.org/T401043]
'''Updates for technical contributors'''
* The MediaWiki Interfaces team is redesigning the Wikimedia REST API Sandbox with Codex. If you have feedback on improvements for the API documentation or what makes developer experiences smooth (or frustrating), you’re invited to [https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2aZzbXeQvjOF7gB1fJXiwAYemQjKf4sXNaRODPA7_obFyNBwkzNkoVCoTF-aeov89kIjXHbCQm join an upcoming discovery interview], or [[mw:MediaWiki Interfaces Team/Developer Feedback/Wikimedia Web APIs|leave feedback onwiki]]. [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/C4FBAOA57PH6G5ORVMAUF5TGYBLZDU5Q/|Learn more]].
* Edits to Wikidata aliases (an alternative name for an item or a property) will now be shown in RecentChanges and Watchlist entries on other wikis less often, reducing unnecessary notifications. This will reduce the overall quantity of 'noisy' entries. Wikidata's own pages remain unchanged. [[m:Wikidata For Wikimedia Projects/Reduce change propagation noise#Phase 1: More granular Alias tracking|Learn more]]. [https://phabricator.wikimedia.org/T401288]
* The new [https://www.unicode.org/versions/Unicode17.0.0/ Unicode 17.0] version has been released. The [[:c:Category:Unicode Module Datasets|datasets on Commons]] for the [[:d:Q39301585|Module:Unicode data]] have been updated. Wikipedias that do not use the Commons datasets should either update their own data or switch to the Commons datasets.
* Users of the [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]] Structured Contents endpoints can now access [https://enterprise.wikimedia.com/blog/parsed-wikipedia-tables/ Parsed Tables]. The new Parsed Tables feature extracts and represents Wikipedia tables in structured JSON. This improves machine accessibility as part of the [https://enterprise.wikimedia.com/api/structured-contents/ Structured Contents initiative]. Structured Contents output is freely available through the [https://enterprise.wikimedia.com/docs/on-demand/#article-structured-contents-beta On-demand API], or through Wikimedia Cloud Services.
* A [https://www.kaggle.com/datasets/wikimedia-foundation/english-wikipedia-people-dataset dataset of English Wikipedia biographical information] from [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]] has been published on Kaggle, for evaluation and research. This provides structured data from more than 1.5 million biographies, including birth and death dates, education, affiliations, careers, awards, and more (from a June 2024 snapshot).
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.19|MediaWiki]]
'''Meetings and events'''
* [[wmania:Special:MyLanguage/2026:Scholarships|Scholarship applications]] for Wikimania 2026 in Paris, France, are open until October 31.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/38|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:08, 15 September 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29263921 -->
== Wikipedia translation of the week: 2025-39 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Federation of Central America (1921–1922)]]'''<br /> <small>''([[:es:Federación de Centro América (1921-1922)]]) ([[:ar:اتحاد أمريكا الوسطى (1921-1922)]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Central America's Northern Triangle (orthographic projection).png|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Federation of Central America''' (Spanish: Federación de Centro América)[1] was a short-lived federal republic that existed in Central America between 1921 and 1922. The federation consisted of the Central American nations of El Salvador, Guatemala, and Honduras.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:45, 22 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29311347 -->
== Tech News: 2025-39 ==
<section begin="technews-2025-W39"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/39|Translations]] are available.
'''Weekly highlight'''
* [https://zonestamp.toolforge.org/1758726000 On September 24th at 15:00 UTC], all Wikimedia sites users will experience a brief read-only period due to a scheduled [[m:Special:MyLanguage/Tech/Server switch|datacenter server switchover]]. The Wikimedia Foundation's Site Reliability Engineering (SRE) team will redirect all traffic from one primary server to its backup. You can listen to the switchover using the [http://listen.hatnote.com/ "Listen to Wikipedia"] tool, where you will hear edits stop for a few minutes during the read-only phase, then resume. This twice-yearly datacenter server switchover ensures reliability by testing the backup datacenter, so that our sites can stay online even if the primary datacenter fails. You can [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|read more about the process on the Diff blog]].
'''Updates for editors'''
* Editors of [[f:Special:Mylanguage/Wikifunctions:Status updates/2025-09-12#Next round of Wiktionaries to receive embedded Wikifunctions calls|60 more Wiktionaries]] will soon be able to call [[f:Special:MyLanguage/Wikifunctions:Introduction|functions from Wikifunctions]] and integrate them into their pages. A function takes one or more inputs and transforms them into a desired output, like adding numbers, converting miles to meters, calculating elapsed time, or declining a word into a case. They will join the other [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-08-29#Wikifunctions available on 65 Wiktionaries|65 Wiktionary language editions]], which already have access to embedded Wikifunctions calls. Later this year, plans are in place to expand to more Wiktionaries and the Incubator.
* A new [[mw:Special:MyLanguage/Help:Magic words#Technical metadata of another page|parser function]] has been added: <code><nowiki>{{#contentmodel}}</nowiki></code>. Template editors and admins can use it to get the localized or canonical name of the [[mw:Special:MyLanguage/Help:ChangeContentModel|content model]] of a specific page. The function makes it easier to create and edit system messages, such as ''MediaWiki:editinginterface'', even when you switch types of pages, like wiki, JavaScript, CSS or JSON page. [https://phabricator.wikimedia.org/T328254]
* Adding or editing a <code>DISPLAYTITLE</code> for an article using VisualEditor will no longer be broken. Editors who use VisualEditor mode to modify the <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> would no longer have the literal text "DISPLAYTITLE" or its localized variant added to their articles. A list of pages that may have been affected and might need cleanup is documented in [[phab:P83438|this ticket]].
* Beta users of the Wikipedia Android app can now try the redesigned [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/Activity Tab Experiment|Activity tab]], which replaces the Edits tab. The new tab offers personalized insights into reading, editing, and donation activity, while simplifying navigation and making app use more engaging.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:12}} community-submitted {{PLURAL:12|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.20|MediaWiki]]
'''In depth'''
* Wikifunctions users can now import many essential facts involving [[f:Special:MyLanguage/Z6011|geo-coordinates]], [[f:Special:MyLanguage/Z6010|quantities]] and [[f:Special:MyLanguage/Z6064|time]] values from Wikidata. This is made possible by the creation of Wikifunctions types for these values, which makes them available for use by functions in Wikifunctions. Learn more about how this works in [[c:File:ImportingWikidataDatatypesIntoWikifunctions.webm|this video]] and Wikifunctions' [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-08-01#News in Types I: Wikidata quantity|August 1 newsletter]] (for quantities) and [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-08-22#News in Types: Wikidata geo-coordinate|August 22 newsletter]] (for geo-coordinates).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/39|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:56, 22 September 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29305556 -->
== Wikipedia translation of the week: 2025-40 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Palazzo delle Poste (Latina)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Postelittoria2.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''Palazzo delle Poste''', fino al 1945 Ricevitoria Postelegrafonica di Littoria, è un edificio postale di Latina, situato in piazzale dei Bonificatori.
Costruito nel 1932 in stile razionalista con influenze futuriste, riscontrabili nell'utilizzo di ampie superfici vetrate e di volumi verticali, oltre che per la presenza di l’utilizzo di materiali e scelte di design molto in voga all'epoca come, come i mattoni a vista, il travertino di Tivoli e l'Anticorodal (una lega di alluminio), ospita l'ufficio postale Latina Centro.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:58, 29 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29341788 -->
== Tech News: 2025-40 ==
<section begin="technews-2025-W40"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/40|Translations]] are available.
'''Weekly highlight'''
* A major software upgrade has been made to [[phab:|Phabricator]]. The update introduces performance improvements, a refreshed search interface, enhancements to Maniphest task search, updates to user profile pages and project workboards, new Herald automation features, as well as general text input, mobile experience improvements and more. [https://phabricator.wikimedia.org/phame/post/view/321/iterative_improvements_september_2025/]
'''Updates for editors'''
* The Community Tech team will release the new Community Wishlist extension on October 1, that will improve the way wishes will be submitted. The new extension will allow users to add tags to their wishes to better categorise them, and (in a future iteration) to filter them by status, tags and focus areas. It will also be possible to support individual wishes again, as requested by the community in many instances. The old system will be retired. There will be a brief period of downtime while the extension is deployed and wishes are migrated to the new system. You can read more about this [[:m:Special:MyLanguage/Community Wishlist/Updates|in the latest update]] or you can consult the [[:mw:Special:MyLanguage/Help:Extension:CommunityRequests|current documentation on MediaWiki]].
* As announced [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|on Diff blog]], the production trial of the [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|hCaptcha]] service for bot detection has begun. The trial is currently using hCaptcha to protect account creation on Chinese, Persian, Portuguese, Indonesian, Japanese, and Turkish Wikipedias, where it will replace our existing [[mw:Special:MyLanguage/Extension:ConfirmEdit#FancyCaptcha|CAPTCHA]] (FancyCaptcha). The goal with the trial is to better block bots while also improving usability and accessibility for users who encounter CAPTCHA challenges.
* The [[mw:Special:MyLanguage/Extension:CampaignEvents|CampaignEvents]] extension has been [[m:Special:MyLanguage/CampaignEvents/Deployment status|deployed]] to Wikimedia Commons. The extension makes it easier to organize and participate in collaborative activities, like edit-a-thons and WikiProjects, on the wikis. On Commons, anyone who is a registered user can use it as an event participant. To use it as an organizer, someone needs to have the [[c:Special:MyLanguage/Commons:Event organizers|event organizer right]].
* [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new feature to re-use references with different details has been released to German Wikipedia. You can [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#test|test the feature]] on testwiki or [https://en.wikipedia.beta.wmcloud.org/wiki/Sub-referencing on betawiki] as well. Please share your thoughts on [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Templates used in sub-references|using templates in sub-references]] or [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Pilot wikis|volunteer to become a pilot wiki]].
* On wikis using the [[mw:Special:MyLanguage/Help:Growth/Mentorship|Mentorship]] system, communities can now opt experienced editors out of Mentorship through [[{{#special:CommunityConfiguration/Mentorship}}]]. Within this setting, communities may define thresholds, based on edit count and account age, to decide when an editor is considered experienced enough to no longer receive Mentorship. [https://phabricator.wikimedia.org/T403563]
* The Editing Team and the Machine Learning Team are working on a new check for newcomers: [[mw:Special:MyLanguage/Edit check/Tone Check|Tone check]]. Using a prediction model, this check will encourage editors to improve the tone of their edits, using artificial intelligence. We invite volunteers to review the first version of the Tone language model for the following languages: Arabic, Czech, German, Hebrew, Indonesian, Dutch, Polish, Russian, Turkish, Chinese, Farsi, Italian, Norwegian, Romanian and Latvian. Users from these wikis interested in reviewing this model are [[mw:Special:MyLanguage/Edit_check/Tone_Check/Model_evaluation|invited to sign up at MediaWiki.org]]. The deadline to sign up is on October 3, which will be the start date of the test.
* The rollout of [[:mw:Special:MyLanguage/Help:Manage blocks|multiblocks]] had the side effect that non-active block logs may have been shown on {{#special:Contributions}} and on blocked users' user and user_talk pages. This issue will be fully resolved in a few days. As part of the fix, [{{fullurl:Special:Allmessages|prefix=sp-contributions-blocked-notice}} messages prefixed with <code>sp-contributions-blocked-notice</code>] will be removed and replaced with [{{fullurl:Special:Allmessages|prefix=blocked-notice-logextract}} those prefixed with <code>blocked-notice-logextract</code>] in a few weeks. Please help translate the new messages and update any local overrides if needed.
* There was a bug with links added using visual editor if they included characters such as <code dir=ltr><nowiki>[ ] |</nowiki></code> after the fragment identifier (<code><nowiki>#</nowiki></code>). They were not encoded properly creating an incorrect link. This has been fixed. [https://phabricator.wikimedia.org/T404823]
* One new wiki has been created: a {{int:project-localized-name-group-wikiquote/en}} in [[d:Q9237|Malay]] ([[q:ms:|<code>q:ms:</code>]]) [https://phabricator.wikimedia.org/T404698]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/User Info|User Info Card]] now displays currently active global lock/blocks. [https://phabricator.wikimedia.org/T401128]
'''Updates for technical contributors'''
* Later this week, editors using Lua modules will be able to use the <code>[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.title.newBatch|mw.title.newBatch]]</code> function to look up the existence of up to 25 pages at once, in a way that only increases the [[mw:Special:MyLanguage/Manual:Parser functions#Expensive parser functions|expensive function]] count once.
* A new [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|Unsupported Tools Working Group]] has been formed as part of ongoing efforts to collectively determine technical work priorities, similar to the [[m:Special:MyLanguage/Product and Technology Advisory Council|Product & Technology Advisory Council]] (PTAC). The working group will help prioritize and review requests for support of unmaintained extensions, gadgets, bots, and tools. For the first cycle, the group will be prioritizing an unsupported Wikimedia Commons tool.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.21|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/40|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:54, 29 September 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29355230 -->
== Wikipedia translation of the week: 2025-41 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Majed Abu Maraheel]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Majed Abu Maraheel''' was a Palestinian long-distance runner, football player, security officer, and athletics coach, who was the first Palestinian to compete at the Olympic Games.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:48, 6 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29341788 -->
== Tech News: 2025-41 ==
<section begin="technews-2025-W41"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/41|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Help:Edit check#paste|Paste Check]] is a new Edit Check feature to help avoid and fight copyright violations. When editors paste text into an article, Paste Check prompts them to confirm the origin and licensing of the content. Starting Wednesday, 8 October, [[phab:T403680|22 wikis will test Paste Check]]. Paste Check will help new volunteers understand and follow the policies and guidelines necessary to make constructive contributions to Wikipedia projects.
'''Updates for editors'''
* Mobile devices will receive mobile articles directly on the standard domain (like <code>en.wikipedia.org</code>), instead of via a redirect to an "m" domain (like <code>en.m.wikipedia.org</code>). This change improves performance. This week it will be enabled on Wikipedias. The existing mobile URLs and the "Desktop view" opt-out remain available. [[mw:Requests for comment/Mobile domain sunsetting/2025 Announcement|Learn more]]. [https://phabricator.wikimedia.org/T214998]
* New [[mw:Special:MyLanguage/Help:CirrusSearch#creationdate and lasteditdate|date filters]], <code dir=ltr>creationdate:</code> and <code dir=ltr>lasteditdate:</code>, are now available in the wiki search engine. This allows users to filter search results by a page's first or last revision date. The filters support comparison operators (e.g. <code dir=ltr>>2024</code>) and relative dates (e.g. <code dir=ltr>today-1d</code>), making it easier to find recently updated content or pages within specific age ranges. [https://phabricator.wikimedia.org/T403593]
* [[f:|Wikifunctions]] now supports rich text in embedded calls across the 150 wikis where it's enabled. To showcase this, the team created a [[f:Z26333|Latin declination table]] that Wiktionary editors can use to automatically generate noun forms, producing clear, formatted results — see an [[f:Wikifunctions:Embedded function calls/Wiktionary tables demonstration|example output]]. If you need any help or have any feedback, please [[f:Wikifunctions:Project chat|contact the Wikifunctions Team]]. [https://phabricator.wikimedia.org/T397402]
* An edit link will now appear inside the categories box on article pages for logged in users, which will directly launch the VisualEditor category dialog. [https://phabricator.wikimedia.org/T291691]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a problem downloading pdf files last week and that has been resolved. [https://phabricator.wikimedia.org/T405957]
'''Updates for technical contributors'''
* The field <code dir=ltr>rev_sha1</code> in the revision database table is being removed in favor of <code dir=ltr>content_sha1</code> in the content database table. See [https://lists.wikimedia.org/hyperkitty/list/cloud@lists.wikimedia.org/thread/2D2M3SP4WHR6BXXKTZ2PBLZQYR3EGQVR/ the announcement] for more information.
* The [[mw:Special:MyLanguage/Reading/Web|Reader Experience team]] will roll out [[w:en:Light-on-dark color scheme|Dark Mode]] user interface on all Wikimedia sites on October 29, 2025. All anonymous users of Wikimedia sites will have the option to activate a color scheme that features light-colored text on a dark background. This is designed to provide a more comfortable reading experience, especially in low-light situations. Template authors and technical contributors are encouraged to [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-04|learn how to make pages ready for Dark mode]] and address any compatibility issues found in templates in their wiki before the enablement. Please contact the Web team for questions or any support on [[mw:Talk:Reading/Web/Accessibility for reading#|this talk page]] before the enablement. [https://phabricator.wikimedia.org/T395628]
* Starting on Monday, October 6, API endpoints under the <code>rest.php</code> path will be rerouted through a new internal API Gateway. Individual wikis will be updated based on the standard release groups, with total traffic increased over time. This change is expected to be non-breaking and non-disruptive. If any issues are observed, please file a Phabricator ticket to the [[phab:tag/serviceops/|Service Ops team board]]. [https://phabricator.wikimedia.org/T400130]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.22|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/41|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W41"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:24, 6 October 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29400897 -->
== Wikipedia translation of the week: 2025-42 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Abortion in Eritrea]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
In Eritrea, abortion is banned except on the grounds of pregnancy from rape or incest, pregnancy of a minor, or risk to physical or mental health. Legal abortions require medical or judicial approval. Prior to Eritrea's independence, it applied Ethiopia's abortion law of the 1950s, which banned abortion unless life-saving. After independence, the 1991 penal code adapted this law to lift punishments on abortions on the grounds of rape, incest, or risk to life or health, but legal abortions did not exist in effect. The penal codes of 2001 and 2015 required physicians to prove health grounds for abortion. Unsafe abortion is common and contributes to maternal mortality in Eritrea. Post-abortion care is unavailable in some regions.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:06, 13 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29341788 -->
== Tech News: 2025-42 ==
<section begin="technews-2025-W42"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/42|Translations]] are available.
'''Weekly highlight'''
* Last week, improvements to account security and two-factor authentication (2FA) features were enabled across all wikis. These changes include user interface improvements for [https://auth.wikimedia.org/metawiki/wiki/Special:AccountSecurity Special:AccountSecurity], the support of multiple 2FA methods via authenticator apps and portable security keys (previously users could only enable one method), and a new Recovery Codes module which facilitates fewer account lockouts due to lost two-factor apps and devices. As part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project, work is continuing through the rest of 2025 on further user experience improvements, and support for passkeys as an alternate second factor.
'''Updates for editors'''
* Another part of the Account security project is making 2FA generally available to all users. Along with editors with advanced privileges, such as administrators and bureaucrats, 40% of editors now have access to 2FA. You can check if you have access at [https://auth.wikimedia.org/metawiki/wiki/Special:AccountSecurity Special:AccountSecurity]. Instructions for activation are on the linked page. The plan is to continue increasing availability if it is determined that the user support capabilities are able to support global usage. [https://phabricator.wikimedia.org/T400579]
* This week, users at wikis where talk page [[mw:Special:MyLanguage/Talk pages project/Usability|Usability Improvements]] are already available by default (everywhere ''except'' the 12 wikis listed in [[phab:T379264|T379264]]) will gain the ability to Thank a comment directly from the talk page it appears on. Before this change, Thanking could only be done by visiting the revision history of the talk page. You can [[diffblog:2025/10/13/revolutionizing-gratitude-a-new-era-of-thanking-comments/|learn more about this change]]. [https://phabricator.wikimedia.org/T366095]
* Users who have not [[Special:Preferences#mw-prefsection-personal-email|verified their email address]] will soon be receiving monthly Notification reminders to do so. This is because users who have verified their email can more easily recover their account. These reminders will not be sent if the user is inactive or removes the unverified email from their account. [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Email_confirmation][https://phabricator.wikimedia.org/T58074]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a fix was made for an occasional error with saving translated paragraphs in the Content Translation tool, and the related error messages are now easier to see. [https://phabricator.wikimedia.org/T376531]
'''Updates for technical contributors'''
* The Unsupported Tools Working Group has chosen [[c:Special:MyLanguage/Commons:Video2commons|Video2Commons]] as the first tool for its pilot cycle. The group will explore ways to improve and sustain the tool over the coming months. [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|Learn more on Meta]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.23|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/42|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:00, 13 October 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29434481 -->
== Wikipedia translation of the week: 2025-43 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Liberation of Auschwitz concentration camp]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Auschwitz Liberated January 1945.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
On 27 January 1945, Auschwitz—a Nazi concentration camp and extermination camp in occupied Poland where more than a million people were murdered as part of the Nazis' "Final Solution" to the Jewish question—was liberated by the Soviet Red Army during the Vistula–Oder Offensive. Although most of the prisoners had been forced onto a death march, about 7,000 had been left behind. The Soviet soldiers attempted to help the survivors and were shocked at the scale of Nazi crimes. The date is recognized as International Holocaust Remembrance Day.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:04, 20 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29452019 -->
== Tech News: 2025-43 ==
<section begin="technews-2025-W43"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/43|Translations]] are available.
'''Updates for editors'''
* To optimize how user data is stored in our databases, the saved preferences of users who haven't logged in for over five years and have fewer than 100 edits will be cleared. When those users return, default settings will apply. [https://phabricator.wikimedia.org/T406724]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a broken link from the GlobalContributions interface message to the XTools GlobalContributions page which has now been fixed. [https://phabricator.wikimedia.org/T406415]
'''Updates for technical contributors'''
* The work to reroute all traffic to API endpoints under the <code dir=ltr><nowiki>rest.php</nowiki></code> route through a common API gateway is now complete. If any issues are observed, please file a phabricator ticket to the [[phab:tag/serviceops/|Service Ops team board]].
* Edits to Wikidata references or qualifiers will now be shown in RecentChanges and Watchlist entries on other wikis less often, reducing unnecessary notifications. This will reduce the overall quantity of 'noisy' entries. Wikidata's own pages remain unchanged. [https://phabricator.wikimedia.org/T401290]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.24|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/43|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:37, 20 October 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29478670 -->
== Wikipedia translation of the week: 2025-44 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Black Diaries]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''Black Diaries''' are diaries purported to have been written by the Irish revolutionary Roger Casement, which contained accounts of homosexual liaisons with young men. They cover the years 1903, 1910 and 1911 (two) and were handed in to Scotland Yard after his capture in April 1916.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:51, 27 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29487357 -->
== Tech News: 2025-44 ==
<section begin="technews-2025-W44"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/44|Translations]] are available.
'''Updates for editors'''
* The Wikipedia iOS app has launched an A/B/C test of improvements made to the tabbed browsing feature for select regions and languages. The test, named “More dynamic tabs”, explores new tab experiences and includes “Did you know” and “Because you read” article recommendations. You can [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Tabbed Browsing (Tabs)/New Tab Experience and Recommendations Experiment|read more on the project page]].
* Autoconfirmed users on [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/small.dblist|small]] and [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/medium.dblist|medium wikis]] with the CampaignEvents extension can now use [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] without the Event Organizer right. This feature lets organizers enable registration, manage participants, and lets users register with one click instead of signing event pages.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue of flashing colors when holding or pressing the arrow keys under the dark mode settings in Vector 2022 has been fixed. [https://phabricator.wikimedia.org/T402285]
'''Updates for technical contributors'''
* The CampaignEvents extension will be deployed to all remaining wikis during the week of 17 November 2025. The extension currently includes three features: Event Registration, Collaboration List, and Invitation List. For this rollout, Invitation List will not be enabled on Wikifunctions and MediaWiki unless requested by those communities. [[m:Special:MyLanguage/CampaignEvents/Deployment status|Visit the deployment page to learn more]].
* The SwaggerUI-based REST sandbox experience is now live on all wiki projects. The sandbox can be accessed through the [[{{#special:RestSandbox}}]] page. Please report any issues to the MediaWiki Interfaces team board, or join the discussion on the [[mw:Special:MyLanguage/MediaWiki Interfaces Team/Feature Feedback/REST Sandbox|project launch]] page. [https://phabricator.wikimedia.org/project/board/6931/]
* Transform endpoints with a trailing slash path in the MediaWiki REST API are now marked as deprecated. They will remain functional during this time, but removal is expected by the end of January 2026. All API users currently calling them are encouraged to transition to the non-trailing slash versions. Both endpoint variations can be found and tested using the [https://test.wikipedia.org/w/index.php?api=mw-extra&title=Special%3ARestSandbox REST Sandbox]. See the [[mw:API/Deprecation|MediaWiki REST API Deprecation]] page for more detailed information about the API deprecation policies and procedures.
* A dedicated [[mw:API:REST API/Changelog|changelog now exists for the MediaWiki REST API]]. The changelog provides an overview of these changes, making it easier for developers to keep track of improvements and iterations. Announcements will also continue to flow through the standard communication channels, including Tech News and email distribution lists, but can now be more easily referenced from a central location. If you have feedback about the style, structure, or content of this changelog, please [[mw:API talk:REST API/Changelog|join the discussion]].
* Administrators can delete the tracking category which was previously added by the JsonConfig extension, as it is no longer used. See the categories linked from [[d:Q130635582#sitelinks-wikipedia|Q130635582]]. It is OK if there are still pages listed in the category as that is just a caching issue, and they will be automatically cleared out the next time each page is edited. [https://phabricator.wikimedia.org/T378352]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.25|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/44|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W44"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:32, 27 October 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29513638 -->
|}
== Wikipedia translation of the week: 2025-45 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Consolations (Liszt)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Franz Liszt - Consolation No. 3, Lento placido.ogg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Consolations''', S. 171a/172 (German: Tröstungen) are a set of six solo piano works by Franz Liszt. The compositions take the musical style of nocturnes with each having its own distinctive style.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:52, 3 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29558323 -->
== Tech News: 2025-45 ==
<section begin="technews-2025-W45"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/45|Translations]] are available.
'''Updates for editors'''
* Administrators will now find that [[{{#special:MergeHistory}}]] is now significantly more flexible about what it can merge. It can now merge sections taken from the middle of the history of the source (rather than only the start) and insert revisions anywhere in the history of the destination page (rather than only the start). [https://phabricator.wikimedia.org/T382958]
* For users with "{{int:discussiontools-preference-autotopicsub}}" [[Special:Preferences#mw-prefsection-editing|enabled in their preferences]], starting a new topic or adding a reply to an existing topic will now subscribe them to replies to that topic. Previously, this would only happen if the DiscussionTools "{{int:Skin-action-addsection}}" or "{{int:Discussiontools-replybutton}}" widgets were used. When DiscussionTools was originally launched existing accounts were not opted in to automatic topic subscriptions, so this change should primarily affect newer accounts and users who have deliberately changed their preferences since that time. [https://phabricator.wikimedia.org/T290778]
* Scribunto modules can now be used to [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#SVG library|generate SVG images]]. This can be used to build charts, graphics and other visualizations dynamically through Lua, reducing the need to compose them externally and upload them as files. [https://phabricator.wikimedia.org/T405861]
* Wikimedia sites now provide all anonymous users with the option to enable a dark mode color scheme, featuring light-colored text on a dark background. This enhancement aims to deliver a more enjoyable reading experience, especially in dimly lit environments. [https://phabricator.wikimedia.org/T395628]
* Users with large watchlists have long faced timeouts when editing [[Special:EditWatchlist|Special:EditWatchlist]]. The page now loads entries in smaller sections instead of all at once due to a paging update, allowing everyone to edit their watchlists smoothly. As part of the database update, sorting by expiry has been removed because it was over 100× slower than sorting by title. A [https://meta.wikimedia.org/wiki/Community_Wishlist/W454 community wish] has been created to explore alternative ways to restore sort-by-expiry. If this feature is important to you, please support the wish! [https://phabricator.wikimedia.org/T41510]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the fixing of the persisting highlighting when using VisualEditor find and replace during a query. [https://phabricator.wikimedia.org/T407318]
'''Updates for technical contributors'''
* Since 2019 the [[m:Special:MyLanguage/Wikimedia URL Shortener|Wikimedia URL Shortener]] at https://w.wiki is available for all Wikimedia wikis to create short links to articles, permalinks, diffs, etc. It is available in the sidebar as "Get shortened URL". There are 30 wikis that also install an older "ShortUrl" extension. The old extension will soon be removed. This means <code>/s/</code> URLs will not be advertised under article titles via HTML <code dir=ltr>class="title-shortlink"</code>. The <code>/s/</code> URLs will keep working. [https://phabricator.wikimedia.org/T107188]
* On Thursday, October 30, the [[:mw:Special:MyLanguage/MediaWiki Interfaces Team|MediaWiki Interfaces]] and [[:mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|SRE Service Operations]] teams began rerouting Action API traffic through a common API gateway. Individual wikis will be updated based on the standard release groups, with total traffic increased over time. This change is expected to be non-breaking and non-disruptive. If any issues are observed, please file a Phabricator ticket to the [https://phabricator.wikimedia.org/tag/serviceops/ Service Ops team] board.
* MediaWiki Train deployments will pause for the final two weeks of 2025: 22 December and 29 December. Backport windows will also pause between Monday, 22 December 2025 and Thursday, 2 January 2026. A backport window is a scheduled time to add things like bug fixes and configuration changes. There are seven deployment trains remaining for 2025. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/SMWTEAES4SDLDUSK4HMWNBSKNCXZAWYN/]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.26|MediaWiki]]
'''In depth'''
* In 2025, the Wikimedia Foundation reported that AI systems and search engines increasingly use Wikipedia content without driving users to the site, contributing to an 8% drop in human pageviews compared to 2024. After detecting bots disguised as humans, Wikimedia updated its traffic data to reflect this shift. Read more about current user trends on Wikipedia in [[diffblog:2025/10/17/new-user-trends-on-wikipedia/|a Diff blog post]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/45|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W45"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:35, 3 November 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29552512 -->
== Wikipedia translation of the week: 2025-46 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Marine coastal ecosystem]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Vegetation and fauna processes controlling benthic biogeochemical fluxes.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
A '''marine coastal ecosystem''' is a marine ecosystem which occurs where the land meets the ocean. Worldwide there is about 620,000 kilometres (390,000 mi) of coastline. Coastal habitats extend to the margins of the continental shelves, occupying about 7 percent of the ocean surface area. Marine coastal ecosystems include many very different types of marine habitats, each with their own characteristics and species composition. They are characterized by high levels of biodiversity and productivity.
For example, estuaries are areas where freshwater rivers meet the saltwater of the ocean, creating an environment that is home to a wide variety of species, including fish, shellfish, and birds. Salt marshes are coastal wetlands which thrive on low-energy shorelines in temperate and high-latitude areas, populated with salt-tolerant plants such as cordgrass and marsh elder that provide important nursery areas for many species of fish and shellfish. Mangrove forests survive in the intertidal zones of tropical or subtropical coasts, populated by salt-tolerant trees that protect habitat for many marine species, including crabs, shrimp, and fish.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:54, 10 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29584005 -->
== Tech News: 2025-46 ==
<section begin="technews-2025-W46"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/46|Translations]] are available.
'''Updates for editors'''
[[File:Talk pages default look (April 2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* Starting November 12, users will see a change in the [[m:Special:MyLanguage/Talk pages project/Feature summary#Usability improvements|appearance of talk pages]] on [[Phab:T379264|some Wikipedias]]. Almost [[phab:T392121|all wikis]] have received this design change; [[phab:T409297|English Wikipedia]] will get these changes later. You can read more [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|on ''Diff'']]. Users can opt out of these changes [[Special:Preferences#mw-prefsection-editing|in their user preferences]] in "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T379264]
* MediaWiki can now display a [[mw:Special:MyLanguage/Help:Protection indicators|page indicator]] automatically while a page is protected. This feature is disabled by default. It can be enabled by [[m:Special:MyLanguage/Requesting wiki configuration changes|community request]]. [https://phabricator.wikimedia.org/T12347]
* Using the "{{int:showpreview}}" or "{{int:showdiff}}" buttons in the wikitext editor will now carry over certain URL parameters like '[[mw:Special:MyLanguage/Manual:Parameters to index.php#useskin|useskin]]', '[[mw:Special:MyLanguage/Manual:Parameters to index.php#uselang|uselang]]' and '[[mw:Special:MyLanguage/Help:Section#Editing sections|section]]'. This update also fixes an issue where, if the browser crashed while previewing an edit to a single section, saving this edit could overwrite the entire page with just that section’s content. [https://phabricator.wikimedia.org/T62744][https://phabricator.wikimedia.org/T24029][https://phabricator.wikimedia.org/T155097]
* Wikivoyage wikis can use [[mw:Special:MyLanguage/Help:Extension:Kartographer#Markers and counters|colored map markers in the article text]]. The text of these markers will now be shown in contrasting black or white color, instead of always being white. Local workarounds for the problem can be removed. [https://phabricator.wikimedia.org/T369454]
* The Activity tab in the Wikipedia Android app is now available for all users. The new tab offers personalized insights into reading, editing, and donation activity, while simplifying navigation and making app use more engaging. [https://www.mediawiki.org/wiki/Wikimedia_Apps/Team/Android/Activity_Tab_Experiment]
* The Reader Growth team is launching an experiment called "Image browsing" to test how to make it easier for readers to browse and discover images on Wikipedia articles. This experiment, a mobile-only A/B test, will go live on English Wikipedia in the week of November 17 and will run for four weeks, affecting 0.05% of users on English wiki. The test launched on November 3 on Arabic, Chinese, French, Indonesian, and Vietnamese wikis, affecting up to 10% of users on those wikis. [https://www.mediawiki.org/wiki/Readers/Reader_Growth/WE3.1.3_Image_Browsing]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example the inability to lock accounts on mobile sites has been fixed. [https://phabricator.wikimedia.org/T256185]
'''Updates for technical contributors'''
* [[wikitech:Help talk:Toolforge/Toolforge standards committee#November 2025 committee nominations|Nominations are open on Wikitech]] for new [[wikitech:Help:Toolforge/Toolforge standards committee|Toolforge standards committee]] members. The committee oversees the Toolforge [[wikitech:Help:Toolforge/Right to fork policy|Right to fork policy]] and [[wikitech:Help:Toolforge/Abandoned tool policy|Abandoned tool policy]] among other duties. Nominations will remain open through 2025-11-28.
* The [[w:JSON Web Token#Standard fields|JWT issuer field]] in [[mw:Special:MyLanguage/OAuth/For Developers#OAuth 2|OAuth 2 access tokens]] for [[m:Special:MyLanguage/Help:Unified login|SUL wikis]] has been changed to <code><nowiki>https://meta.wikimedia.org</nowiki></code>. Old access tokens will still work. [https://phabricator.wikimedia.org/T399199]
* The [[w:JSON Web Token#Standard fields|JWT subject field]] in [[mw:Special:MyLanguage/OAuth/For Developers#OAuth 2|OAuth 2 access tokens]] will soon change from <code><user id></code> to <code dir=ltr style="white-space:nowrap">mw:<identity type>:<user id></code>, where <code><identity type></code> is typically <code dir=ltr>CentralAuth:</code><!-- not a typo --> (for [[m:Special:MyLanguage/Help:Unified login|SUL wikis]]) or <code dir=ltr style="white-space:nowrap">local:<wiki id></code> (for other wikis). This is to avoid conflicts between different user ID types, and to make OAuth 2 access tokens and the <code>sessionJwt</code> cookie more similar. Old access tokens will still work. [https://phabricator.wikimedia.org/T399199]
* MediaWiki's block messages ([[MediaWiki:Blockedtext|blockedtext]], [[MediaWiki:Blockedtext-partial|blockedtext-partial]], [[MediaWiki:Autoblockedtext|autoblockedtext]], [[MediaWiki:Systemblockedtext|systemblockedtext]], [[MediaWiki:Blockedtext-tempuser|blockedtext-tempuser]], [[MediaWiki:Autoblockedtext-tempuser|autoblockedtext-tempuser]]) now support additional parameters indicating whether the user is blocked from editing their own user talk page <code><nowiki>$9</nowiki></code> or emailing other users <code><nowiki>$</nowiki><nowiki>10</nowiki></code>. [https://phabricator.wikimedia.org/T285612]
* A <code>REL1_45</code> branch for MediaWiki core and each of the extensions and skins in Wikimedia git has been created. This is the first step in the release process for MediaWiki 1.45.0, scheduled for late November 2025. If you are working on a critical bug fix or working on a new feature, you may need to take note of this change. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/ZUY7TY3Z6XPZWZVAZV63OPO5OW52Q6GE/]
* The process for generating CirrusSearch dumps has been updated due to slowing performance. If you encounter any issues migrating to the replacement dumps, please contact the Search Platform Team for support. [https://phabricator.wikimedia.org/T366248][https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/3KQPOR6ACVN6OVLMLZPIBXQSWQKW4E3K/]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.2|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/46|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W46"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:38, 10 November 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29606150 -->
== Wikipedia translation of the week: 2025-47 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Elephant communication]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Three elephant's curly kisses.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Elephants communicate''' via touching, visual displays, vocalisations, seismic vibrations, and semiochemicals.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:24, 17 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29627457 -->
== Tech News: 2025-47 ==
<section begin="technews-2025-W47"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/47|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] is experimenting with [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4_Reading lists|reading lists on mobile web]], allowing logged-in readers with no edits to save private lists of articles for later. The experiment is running on Arabic, Chinese, French, Indonesian, and Vietnamese Wikipedias since the week of 10 November, and will begin on English Wikipedia the week of 17 November.
* Users who can’t receive their email verification code during login can now get help by submitting a form on a new special page. This update is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] initiative. If your account has an email address, please make sure you still have access to it. When logging in from a new device or location without 2FA, you may be asked to enter a 6-digit code sent by email to finish logging in. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Why are you requiring me to enter a code from my email to log in? Can I opt out of this?|Learn more]].
* One new wiki has been created: a {{int:project-localized-name-group-wikisource}} in [[d:Q13324|Minangkabau]] ([[s:min:|<code>s:min:</code>]]) [https://phabricator.wikimedia.org/T408317]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* As part of the [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parser Unification]] project, the Content Transform Team rolled out Parsoid as the default parser to many low-traffic Wikipedias and is preparing the next step to high traffic ones. This message is an invitation for you to opt-in to Parsoid, as described in the [[mw:Special:MyLanguage/Help:Extension:ParserMigration|Extension:ParserMigration]] documentation, and identify any issues you might encounter with your own workflow using bots, gadgets, or user scripts. Please, let us know through the ''"Report Visual Bug"'' link in the Tools sidebar or create a phab ticket and tag the [[phab:project/view/5846|Content Transform Team in Phabricator]].
* Unsupported Tools: Several issues with [[:c:Special:MyLanguage/Commons:Video2commons|Video2Commons]] have been fixed, including filename-related upload failures, black-video imports, and retry handling. AV1 support has also been added. Ongoing work focuses on backend stability, ffmpeg errors, subtitle imports, metadata handling, and playlist uploads. To track specific tasks, check the [[phab:tag/video2commons/|Phabricator board]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.3|MediaWiki]]
'''Meetings and events'''
* Save the date for the next Wikimedia Hackathon happening in Milan, Italy from May 1–3, 2026. Registration will open in January 2026. [https://pretix.eu/wikimedia/Hackathon-2026/ Scholarship applications are currently open], and will close on November 28, 2025. If you have any questions, please email <bdi lang="en" dir="ltr">hackathon@wikimedia.org</bdi>.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/47|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W47"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:27, 17 November 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29627455 -->
== Wikipedia translation of the week: 2025-48 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Animal-made art]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Painting Queen 1024x768.png|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Animal-made art''' consists of works by non-human animals, that have been considered by humans to be artistic, including visual works, music, photography, and videography. Some of these are created naturally by animals, often as courtship displays, while others are created with human involvement.
There have been debates about the copyright status of these works, with the United States Copyright Office stating in 2014 that works that lack human authorship cannot have their copyright registered at the US Copyright Office.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 24 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29627457 -->
== Tech News: 2025-48 ==
<section begin="technews-2025-W48"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/48|Translations]] are available.
'''Updates for editors'''
* Last week, the [[mw:Special:MyLanguage/Wikimedia Search Platform|Wikimedia Search Team]] recreated the "DWIM" (Do What I Mean) gadget functionality server-side, for Russian and Hebrew Wikipedias. This feature adds cross-keyboard suggestions to the standard search-box suggestions. For example, searching for ''<span lang="und" dir="ltr">cxfcnmt</span>'' on Russian Wikipedia will now add suggestions for ''<span lang="ru" dir="ltr">счастье</span>'' ("happiness") that the user probably intended. They plan to enable this feature for other Russian and Hebrew wikis this week. [https://phabricator.wikimedia.org/T408734]
* Later this week, users of the "{{int:codemirror-beta-feature-title}}" [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] will have syntax highlighting available in [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]]. This requires that the "{{int:discussiontools-preference-sourcemodetoolbar}}" preference be set. [https://phabricator.wikimedia.org/T407918]
* [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|Campaign events extension]] – the set of tools for coordinating events and other on-wiki collaborations has now been deployed to all Wikimedia wikis. A new feature known as [[m:Special:MyLanguage/CampaignEvents/Collaborative contributions|Collaborative contribution]] to help organizers and participants see the impact of activities has also been added. Join the upcoming [[m:Special:MyLanguage/Event:Connection learning session 3|learning session]] to see the new feature in action and share your feedback.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:24}} community-submitted {{PLURAL:24|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug which stopped CodeReviewBot from working, has now been fixed. [https://phabricator.wikimedia.org/T410417]
'''Updates for technical contributors'''
* Users of Wikimedia API can join a usability study to help validate the new design of Wikimedia REST API sandboxes. Interested participants should fill the [https://wikimediafoundation.limesurvey.net/487662 recruitment survey]. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/IREJRRWTZTGCYWQHDMSNJFTQAEPOOAE3/]
* The MediaWiki Interfaces team is deprecating XSLT stylesheets within the Action API. Support for <code dir=ltr>format=xml'''&xlst={stylesheet}'''</code> will be removed from Wikimedia projects by the end of November, 2025. In addition, it will soon be disabled by default in MediaWiki release versions: v1.43 (LTS), v1.44, and v1.45. Support for XSLT stylesheets will be fully removed from MediaWiki v1.46 (expected to release between April and May 2026). [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/5AX7UWAVVUNUSBOIRHMNOKWOZ5EZI3JX/]
* The WDQS legacy endpoint ([https://query-legacy-full.wikidata.org/ query-legacy-full.wikidata.org]) will be decommissioned at the end of December 2025, and finally closed down on 7th January 2026. After this date, users should expect requests to query.wikidata.org that require the full graph to fail or return invalid results if they are not rewritten to use SPARQL federation. The team encourages users to ensure that tools and workflows use the supported WDQS endpoints (<span dir=ltr><nowiki>https://query.wikidata.org/</nowiki></span> - Main graph or <span dir=ltr><nowiki>https://query-scholarly.wikidata.org/</nowiki></span> - Scholarly graph). For support with migrating use cases, please review the [[d:Special:MyLanguage/Wikidata:Data_access|Data Access]] and [[d:Wikidata:Request_a_query|Request a Query]] pages for details and assistance on alternative access methods.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.4|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/48|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W48"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:57, 24 November 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29702226 -->
== Wikipedia translation of the week: 2025-49 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Halachic state]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The term "'''halachic state'''" (Hebrew: מְדִינַת הֲלָכָה Medīnat Hălāḵā) refers to a sovereign state that endorses Judaism in an official capacity and governs by Jewish religious law. It has been a subject of discussion among Orthodox Jews, particularly with regard to modern Israel, which, although a Jewish state, is not classified as a theocracy.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 08:01, 1 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29719355 -->
== Tech News: 2025-49 ==
<section begin="technews-2025-W49"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/49|Translations]] are available.
'''Updates for editors'''
* The Wikipedia Year in Review 2025 will be available on December 2 for users of iOS and Android Wikipedia apps, featuring new personalized insights, updated reading highlights, and refreshed designs. Learn more on the review's [[mw:Special:MyLanguage/Wikimedia Apps/Team/Wikipedia Year in Review/Updates|project page]].
* The Growth team is working on improving the text and presentation of the Verification Email sent to new users to make them more welcoming, useful and informative. Some new text have been drafted for A/B testing and you can help by translating them. See [[phab:T396155|Phabricator]].
* [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]] will now be deployed at Japanese, Urdu and Chinese Wikipedias on December 2. Add a link is based on a prediction model that suggests links to be added to articles. While this feature has already been available on most Wikipedias, the prediction model could not support certain languages. A new model has now been developed to handle these languages, and it will be gradually rolled out to other Wikipedias over time. If you would like to know more, please contact [[mw:user:Trizek (WMF)|Trizek (WMF)]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where search boxes on some Commons pages showed no results due to switch from SpecialSearch to MediaSearch, has now been fixed. [https://phabricator.wikimedia.org/T399476]
* Two new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q36846|Toki Pona]] ([[w:tok:|<code>w:tok:</code>]]) [https://phabricator.wikimedia.org/T404457]
** a {{int:project-localized-name-group-wikiquote}} in [[d:Q33655|Nigerian Pidgin]] ([[q:pcm:|<code>q:pcm:</code>]]) [https://phabricator.wikimedia.org/T408318]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.5|MediaWiki]]
'''In depth'''
* The Wikimedia Foundation is in the early stages of exploring approaches to '''Article guidance'''. The initiative aims to identify interventions that could help new editors easily understand and apply existing Wikipedia practices and policies when creating an article. The project is in the exploration and early experimental design phase. All community members are encouraged to [[mw:Special:MyLanguage/Article guidance|learn more]] about the project, and share their thoughts on [[mw:Special:MyLanguage/Talk:Article guidance|the talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/49|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W49"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:58, 1 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29732328 -->
== Wikipedia translation of the week: 2025-50 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:ru:Сто лошадей]]'''<br /> <small>''([[:en:One Hundred Horses]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:A_Hundred_Steeds.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''One Hundred Horses''''' (Chinese: 百駿圖) is a Qing dynasty silk and ink painting by Giuseppe Castiglione. It was painted in 1728 for the Yongzheng emperor. The painting depicts a hundred horses in a variety of poses and activities, combining Western realism with traditional Chinese composition and brushwork.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:29, 8 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29719355 -->
== Tech News: 2025-50 ==
<section begin="technews-2025-W50"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/50|Translations]] are available.
'''Weekly highlight'''
* Anybody who wishes to secure their user account can now use [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] (2FA). This is available to all registered users of all Wikimedia projects. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] initiative. Later, 2FA will be required for all users who can take security- or privacy-sensitive actions.
'''Updates for editors'''
* Following last week's deployments, the [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]] feature, which allows editors to add suggested links during editing, will be available to an additional [[Phab:T410469|33 Wikipedias]] starting on 9 December. This expansion is possible thanks to the new prediction model that now supports all languages, including those that were previously not covered. While the feature has been available on most Wikipedias for some time, this rollout brings us closer to using the improved model everywhere. If you have any questions or would like more details please contact [[mw:user:Trizek (WMF)|Trizek (WMF)]].
* Last week, the [[mw:Special:MyLanguage/Wikimedia Search Platform|Search Platform team]] added [[w:en:Transliteration|transliterated]] as-you-type search suggestions to Georgian wikis. If there are only a few regular search suggestions, then queries in Latin or Cyrillic script [[phab:T127003|are now rewritten into Georgian script]] to look for more matches. For example, searching for either <bdi lang="ka-Latn" dir="ltr">''bedniereba''</bdi> or <bdi lang="ka-Cyrl" dir="ltr">''бедниереба''</bdi> will now suggest the existing article about <bdi lang="ka" dir="ltr">ბედნიერება</bdi> ("happiness"). You can recommend other languages where transliterated suggestions would be useful [[phab:T375215|on Phabricator]] for future development.
* Later this week, a controlled experiment will begin for editors on the 100 largest Wikipedias who are editing a section in the mobile web visual editor. 50% of these editors will notice a new "Edit full page" button that will enable them to expand their editing session to the whole page. This feature is intended to make it easier for people on mobile web to edit any article section, regardless of which section-edit icon they tapped to begin. The experiment will last ~4 weeks. You can find [[phab:T409112|more details]] about the project.
* Later this week, the [[mw:Special:MyLanguage/Readers/Reader Growth|Reader Growth team]] will launch a [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.1.14 Expanded Mobile Sections|mobile web experiment]] to expand all article sections by default (currently they are collapsed by default) and pin the section header the user is currently reading to the top of the page. The experiment will affect 10% of users on Arabic, Chinese, French, Indonesian, and Vietnamese Wikipedias. [https://phabricator.wikimedia.org/T409485]
* The [[mw:Special:MyLanguage/Wikimedia Apps/Team/Wikipedia Year in Review/2025 Year in Review|Wikipedia Year in Review 2025]], a feature in the Wikipedia mobile apps (iOS and Android) that provides users with a personalised summary of their engagement with Wikipedia over the year, is now available on the iOS and Android apps. This edition includes expanded personalised insights, improved reading highlights, new donor messaging, and updated designs. Open the app to view your Year in Review and explore your reading journey from 2025.
* A recent software bug caused edits made with VisualEditor to make unintended changes to wikitext, including removing whitespace and replacing spaces with underscores in wikilinks inside citations. This was partially fixed last week, and further fixes are in progress. Editors who used VisualEditor between November 28 and December 2 should review their edits for unexpected modifications. [https://phabricator.wikimedia.org/T411238]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the incorrect handling of URLs copied from the address bar of Microsoft Edge users, has been resolved. [https://phabricator.wikimedia.org/T341281]
'''Updates for technical contributors'''
* Starting this week, users of the "{{int:codemirror-beta-feature-title}}" [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] will have [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] as the editor for Lua, JavaScript, CSS, JSON and Vue content models, instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]]. With this, the [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|linters]] will be upgraded. This is part of a larger effort to eventually replace CodeEditor and provide a consistent code editing experience. [https://phabricator.wikimedia.org/T373711]
* Developers are encouraged to take the [https://wikimediafoundation.limesurvey.net/552643 2025 Developer Satisfaction Survey], which remains open until 5 January 2026. If you build software for the Wikimedia ecosystem and would like to share your experiences or feedback, your participation is greatly appreciated. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/W4WBKO6Q55UWWCCSFWQATKEXBEHP3QNR/]
* There is no new MediaWiki version this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/50|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W50"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:46, 8 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29738112 -->
== Wikipedia translation of the week: 2025-51 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:First Universal Races Congress]]'''<br /> <small>''([[:fr:Premier Congrès universel des races]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Universal Races Congress seated outside the entrance to the Imperial Institute, London, 1911.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''First Universal Races Congress''' met in 1911 for four days at the University of London as an early effort at anti-racism. Speakers from a number of countries discussed race relations and how to improve them. The congress, with 2,100 attendees, was organised by prominent humanists of that era.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:56, 15 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29779168 -->
== Tech News: 2025-51 ==
<section begin="technews-2025-W51"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/51|Translations]] are available.
'''Updates for editors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:18}} community-submitted {{PLURAL:18|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, one of the fixes addressed an issue for temporary accounts adding an external URL, which triggered an hCaptcha request in more cases than intended, and did not display the required popup on the first attempt to publish the edit. [https://phabricator.wikimedia.org/T411927]
'''Updates for technical contributors'''
* To improve database and site performance, external links to Wikimedia projects will no longer be stored in the database. This means they will not be searchable in [[{{#special:LinkSearch}}]], will not be checked by the Spam Blacklist or AbuseFilter as new links, and will not be in the <code dir=ltr>externallinks</code> table on database replicas. In the future this may be extended to other highly-linked trusted websites on a per-wiki basis, such as Creative Commons links on Wikimedia Commons. [https://phabricator.wikimedia.org/T405005]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.7|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/51|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W51"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:03, 15 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29796010 -->
== Wikipedia translation of the week: 2025-52 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pin Malakul]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Pin Malakul, January 1922.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Pin Malakul''' (24 October 1903 – 5 October 1995) was a Thai professor, educator and writer. His contributions to education in Thailand include the establishment of various institutions of higher education, the introduction of fixed class schedules, and the implementation of teacher-training programmes. In his career he served as Director-General of the Department of General Education, later becoming Permanent Secretary, and Minister, of Education. He was also a member of the executive board of UNESCO. His writings earned him the title of National Artist in 1987, and the 100th anniversary of his birth was celebrated by the UNESCO in 2003 as recognition of his contribution to the advancement of education in Thailand and Southeast Asia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
-[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:26, 22 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29802495 -->
== Tech News: 2025-52 ==
<section begin="technews-2025-W52"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/52|Translations]] are available.
'''Updates for editors'''
* From January, edit filters [[mw:Special:MyLanguage/Extension:AbuseFilter/Access flags|can be set]] to automatically suppress their details such as rules and list of attempted edits and actions. This will help oversighters use edit filters to prevent doxxing or other suppressible material. [https://phabricator.wikimedia.org/T290324]
* The next issue of Tech News will be sent out on 12 January 2026 because of the end of year holidays. Thank you to all of the translators, and people who submitted content or feedback, this year.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:16}} community-submitted {{PLURAL:16|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the crash that occurred when tapping "First Steps" in the Wikipedia Android Year in Review has now been fixed, and the feature opens as expected. [https://phabricator.wikimedia.org/T411546]
'''Updates for technical contributors'''
* Interface elements such as diffs and categories generated by MediaWiki used to have the attribute <code dir=ltr>data-mw="interface"</code> to distinguish from wiki content. The attribute has been replaced with <code dir=ltr>data-mw-interface=""</code>, to avoid potential conflicts with other <code dir=ltr>data-mw</code> attributes, which are generated by Parsoid. [https://phabricator.wikimedia.org/T409187]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] There is no new MediaWiki version this week or next week.
'''Meetings and events'''
* The [[mw:Wikimedia Hackathon Northwestern Europe 2026|Wikimedia Hackathon Northwestern Europe 2026]] will take place on 13-14 March 2026 in Arnhem, the Netherlands. Applications just opened mid-December and will close in mid-January or earlier if capacity is reached. With space for approximately 100 participants, early application is encouraged.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/52|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W52"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:46, 22 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29831856 -->
== Wikipedia translation of the week: 2026-01 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:The Morning of the Magicians]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Le Matin des magiciens, couverture.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''The Morning of the Magicians: Introduction to Fantastic Realism''''' (French: Le Matin des magiciens: Introduction au réalisme fantastique) is a 1960 book by the journalists Louis Pauwels and Jacques Bergier. It covers topics like cryptohistory, ufology, occultism in Nazism, alchemy, spiritual philosophy. The second half of the book is entirely dedicated to the Nazi-Occult connections; the book is widely credited with the proliferation of numerous myths related to occultism in Nazism.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:20, 29 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29802495 -->
== Wikipedia translation of the week: 2026-02 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Somaliland War of Independence]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Somaliland, fighters of the Somali National Movement (SNM), 1980s.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Somaliland War of Independence''' was a rebellion waged by the Somali National Movement (SNM) against the ruling military junta in Somalia led by General Siad Barre lasting from its founding on 6 April 1981 and ended on 18 May 1991 when the SNM declared what was then northern Somalia independent as the Republic of Somaliland. The conflict served as the main theater of the larger Somali Rebellion that started in 1978. The conflict was in response to the harsh policies enacted by the Barre regime against the main clan family in Somaliland, the Isaaq, including a declaration of economic warfare on the clan-family. These harsh policies were put into effect shortly after the conclusion of the disastrous Ogaden War in 1978.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:00, 5 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29871911 -->
== Wikipedia translation of the week: 2026-03 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Pietro Lauro]]'''<br /> <small>''([[:en:Pietro Lauro]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Master I.A.V.F., Pietro Lauro, born 1508, Modenese Poet and Scholar (obverse), 1555, NGA 45072.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Pietro Lauro''', conosciuto anche come Pietro Lauro Modonese o Pietro Lauro da Modona (Modena o dintorni, 1510 circa – Venezia, 1568 circa) è stato un traduttore, scrittore e divulgatore scientifico italiano. Nonostante non si conosca gran parte della sua biografia, fu uno dei poligrafi italiani più conosciuti del Cinquecento. La sua produzione raccoglie traduzioni dal latino, dal greco e dallo spagnolo e riguardano opere di autori classici, stranieri e protestanti. Lauro si dimostrò abile nel trattare testi con temi molto diversi, come la filosofia, l'architettura, la medicina, il giardinaggio, l'agronomia, le scienze biologiche, la storia, la teologia e l'astronomia. Si cimentò anche nella scrittura di un poema cavalleresco sullo stile di quelli spagnoli, il Polendo, sua magnum opus in questo senso.
Aderente alla Riforma protestante, sebbene le sue trasposizioni siano state oggetto di critiche già degli autori a lui contemporanei, che le giudicarono troppo letterali, rozze e imparziali, a Lauro si deve il merito di aver ultimato la traduzione in lingua volgare di numerosi testi sia classici, sia scientifici, sia epistolari. I suoi lavori ebbero una notevole diffusione, non solo tra i letterati veneziani della sua epoca, ma in tutta Italia, tanto che alcune sue traduzioni vengono ancora oggi ristampate in nuove edizioni.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:45, 12 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29894468 -->
== Tech News: 2026-03 ==
<section begin="technews-2026-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/03|Translations]] are available.
'''Weekly highlight'''
* The Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]].
'''Updates for editors'''
* As part of the current work of Community Tech team on the [[m:Special:MyLanguage/Community Wishlist/W372|Multiple watchlists]] project, the display of [[Special:EditWatchlist|EditWatchlist]] will be updated as a first step towards multiple watchlists. Additionally, the pagination on [[Special:Search|Search]] will be updated too, as a part of the work on the [[m:Special:MyLanguage/Community Wishlist/W186|Revamp pagination / page navigation]] wish. [https://phabricator.wikimedia.org/T411596]
* [[m:Special:GlobalWatchlist|The Global Watchlist]] is a MediaWiki [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that lets you see your watchlists from different wikis on the same page. It was recently updated to look more like the regular [[Special:Watchlist|Watchlist]], such as preparing it for temporary accounts in IP masking (including rerouting user links to contributions pages), making page titles bold, and opening links in edit summaries and tags in new browser tabs. [https://phabricator.wikimedia.org/T398361][https://phabricator.wikimedia.org/T298919][https://phabricator.wikimedia.org/T273526][https://phabricator.wikimedia.org/T286309]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where global blocks did not have the option to disable sending emails, has now been fixed, and will be available for use in the week of January 13. [https://phabricator.wikimedia.org/T401293]
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/VisualEditor/Citation tool|VisualEditor citation tool]] and [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] now support "map" as a reference type. [https://phabricator.wikimedia.org/T411083]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.10|MediaWiki]]/[[mw:MediaWiki 1.46/wmf.11|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:34, 12 January 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29907192 -->
== Wikipedia translation of the week: 2026-04 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Volto di Palazzo Vecchio]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Piazza della signoria angolo via della ninna, palazzo vecchio, cantonata con testa scolpita 02.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''volto di Palazzo Vecchio''' (conosciuto anche come L'importuno o L'inopportuno) è un incisione su pietraforte attibuita a Michelangelo Buonarroti, scolpita in una delle pietre di Palazzo Vecchio a Firenze.
Secondo le varie leggende, il profilo sarebbe stato realizzato come graffito dall'artista toscano, con soggetto un suo importunatore, un debitore, un condannato a morte o se stesso. Nel 2020, gli studiosi hanno ipotizzato possa invece trattarsi di un ritratto di Francesco Granacci, pittore amico di Michelangelo.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:14, 19 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-04 ==
<section begin="technews-2026-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/04|Translations]] are available.
'''Updates for editors'''
* The tray shown on [[Special:Diff|Special:Diff]] in mobile view has been redesigned. It is now collapsed by default, and incorporates a link to undo the edit being viewed, making it easier for mobile editors and reviewers to take action while keeping the interface uncluttered. [https://phabricator.wikimedia.org/T402297]
* [[m:Special:GlobalWatchlist|The Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now automatically determines the text direction (ensuring correct display of sites with unusual domain names) and shows detailed descriptions for log actions. Later this week, a new permanent link for page creations and CSS classes for each entry element will be added. [https://phabricator.wikimedia.org/T412505][https://phabricator.wikimedia.org/T287929][https://phabricator.wikimedia.org/T262768][https://phabricator.wikimedia.org/T414135]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the previously observed issue in Vector 2022, where anchor link targets were obscured by the sticky header, has now been addressed. [https://phabricator.wikimedia.org/T406114]
'''Updates for technical contributors'''
* As mentioned in the [[m:Special:MyLanguage/Tech/News/2025/44|October 2025 deprecation announcement]], MediaWiki Interfaces team will begin sunsetting all transform endpoints containing a trailing slash from the MediaWiki REST API the week of January 26. Changes are expected to roll out to all wikis on or before January 30th. All API users currently calling them are encouraged to transition to the non-trailing slash versions. Both endpoint variations can be found, compared, and tested using the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox]. If you have questions or encounter any problems, please file a ticket in Phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board].
* Interactive reference documentation for the [[mw:Special:MyLanguage/Wikimedia REST API|Wikimedia REST API]] has moved. Requests to API docs previously hosted through [[mw:Special:MyLanguage/RESTBase|RESTBase]] (e.g.: <code dir=ltr>https://en.wikipedia.org/api/rest_v1/</code>) are now redirected to the [[w:en:Special:RestSandbox|REST Sandbox]].
* The [[mw:Special:MyLanguage/Wikidata Platform|WMF Wikidata Platform team]] (WDP) has published its [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|January 2026 newsletter]]. It includes updates on the legacy full-graph endpoint decommissioning, the User-Agent policy change, the monthly Blazegraph migration office hours, and efforts to reduce regressions caused by the legacy endpoint shutdown. As a reminder, you can [[m:Special:MyLanguage/Global message delivery/Targets/WDP team updates|subscribe to the WDP newsletter]]!
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.12|MediaWiki]]
'''Meetings and events'''
* The [[mw:Wikimedia Hackathon Northwestern Europe 2026|Wikimedia Hackathon Northwestern Europe 2026]] will take place on 13-14 March 2026 in Arnhem, the Netherlands. Applications opened mid-December and will close soon or when capacity is reached. It's a two-day, technically oriented hackathon bringing together Wikimedians from the region. Hope to see you there!
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:30, 19 January 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29943403 -->
== Wikipedia translation of the week: 2026-05 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Raffaello Kobayashi]]'''<br /> <small>''([[:en:Raffaello Kobayashi]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Raffaello Kobayashi''', nato Raffaele Sanzio (Bari, 14 gennaio 1917 – Yokohama, 1 aprile 2011), è stato un militare italiano naturalizzato giapponese.
Sommergibilista durante la Seconda guerra mondiale, prestò servizio per tutte e tre le principali Potenze dell'Asse: Regno d'Italia, Germania nazista e Impero giapponese. Alla fine della guerra si nascose in Giappone per evitare di subire l'internamento in un campo di prigionia, divenendo poi cittadino nipponico e cambiando il proprio nome.
Prese parte all'affondamento della HMS Calypso nel 1940, primo successo italiano in campo navale nel corso del conflitto mondiale. Con l'abbattimento di un bombardiere statunitense il 22 agosto 1945, otto giorni dopo il discorso di resa del Giappone alle potenze alleate della seconda guerra mondiale, a bordo del Comandante Cappellini, sarebbe stata l'ultima persona in assoluto a mettere fuori combattimento un velivolo degli Alleati nella stessa guerra.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:05, 26 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-05 ==
<section begin="technews-2026-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/05|Translations]] are available.
'''Updates for editors'''
* Wikimedia Foundation invites comments on [[m:Special:MyLanguage/Product and Technology Advisory Council/Year1 Reflections and Proposed Way Forward 2026 Update|proposed future]] of the [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] until 28 February.
* All users with registered accounts can now use passkeys for [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] (2FA). Passkeys are a simple way to log in without using a second device. They verify the user's identity using a fingerprint, face scan, or a PIN code. To set up a passkey, first set up a regular 2FA method. Currently, to log in with a passkey, users must also use a password. Later this quarter, passwordless login will allow users to log in with a single click and a passkey. Users with advanced rights will also be required to have 2FA enabled. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project.
* Unregistered contributors on blocked IPs or blocked IP ranges can now interact on-wiki to appeal a block by creating a temporary account to appeal a block on the user talk page, unless the "prevent this user from editing their own talk page" is enabled. This solves the problem of logged-out users unable to use the default unblock process via user talk page. [https://phabricator.wikimedia.org/T398673]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Two-Factor Authentication (2FA) methods description on the management page has been updated. It is now clearer and easier for users to understand and make use of. [https://phabricator.wikimedia.org/T332385]
'''Updates for technical contributors'''
* A new AbuseFilter variable, <code>account_type</code>, has been added to provide a reliable way to determine the account type being created in the <code>createaccount</code> and <code>autocreateaccount</code> actions. As part of this change, the variable <code>accountname</code> has been renamed to <code>account_name</code>, and <code>accountname</code> is now deprecated. Edit filter managers should update any filters that use hardcoded account type checks or the deprecated variable. [https://phabricator.wikimedia.org/T414049]
* Image thumbnails that are requested in non-standard sizes, and using non-standard methods such as direct requests to <code dir=ltr><nowiki>upload.wikimedia.org/…</nowiki></code> will stop working in the near future. This change is to prevent ongoing external abuse by web-scrapers and bots. Some users with custom CSS/JS, Interface Admins who can fix gadgets and local skins, and Tool-authors, will need to update their code to use standard thumbnail sizes. [[phab:T414805|Details, search-links, and examples of how to fix them, are available in the task]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.13|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:18, 26 January 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29969530 -->
== Wikipedia translation of the week: 2026-06 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Censorship in the Czech Republic]]'''<br /> <small>''([[:cs:Cenzura v Česku]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Censorship in the Czech Republic''' had been highly active until 17 November 1989 and the fall of Communism in the former Czechoslovakia. Czech Republic was ranked as the 13th most free country in the World Press Freedom Index in 2014.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:32, 2 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-06 ==
<section begin="technews-2026-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/06|Translations]] are available.
'''Updates for editors'''
* The "{{int:pageinfo-toolboxlink}}" feature, which gives validating information about a page ([{{fullurl:{{FULLPAGENAME}}|action=info}} example]), now automatically includes a table of contents. If there is a local [[{{ns:8}}:Pageinfo-header]] page created by individual users, it can now be removed. [https://phabricator.wikimedia.org/T363726]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, VisualEditor previously added bold or italic formatting inside link descriptions, making the wikicode complex. This has now been fixed. [https://phabricator.wikimedia.org/T409669]
'''Updates for technical contributors'''
* There was no XML dump on 20 January. Additionally, from now on, dumps will be generated once per month only. [https://phabricator.wikimedia.org/T414389]
* The MediaWiki Interfaces team removed support for all transform endpoints containing a trailing slash from the [https://www.mediawiki.org/wiki/Special:MyLanguage/API:REST%20API MediaWiki REST API]. All API users currently calling those endpoints are encouraged to transition to the non-trailing slash versions. If you have questions or encounter any problems, please file a ticket in phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.14|MediaWiki]]
'''Weekly highlight'''
* Users are reminded that the Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:44, 2 February 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30000986 -->
== Wikipedia translation of the week: 2026-07 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Petites Heures of Jean de France, Duc de Berry]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Jacquemart de Hesdin 002.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Petites Heures of Jean de France, Duc de Berry''' is an illuminated book of hours commissioned by John, Duke of Berry between 1375 and 1385–90. It is known for its ornate miniature leaves and border decorations.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:59, 9 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-07 ==
<section begin="technews-2026-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/07|Translations]] are available.
'''Updates for editors'''
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] Logged-in contributors who manage large or complex watchlists can now organise and filter watched pages in ways that improve their workflows with the new [[mw:Special:MyLanguage/Help:Watchlist labels|Watchlist labels]] feature. By adding custom labels (for example: pages you created, pages being monitored for vandalism, or discussion pages) users can more quickly identify what needs attention, reduce cognitive load, and respond more efficiently. This improves watchlist usability, especially for highly active editors.
* A new feature available on [[Special:Contributions|Special:Contributions]] shows [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] that are likely operated by the same person, and so makes patrolling less time-consuming. Upon checking contributions of a temporary account, users with access to temporary account IP addresses can now see a view of contributions from the related temporary accounts. The feature looks up all the IPs associated with a given temporary account within the data retention period and shows all the contributions of all temporary accounts that have used these IPs. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts#February 2026: Improvements to the patroller tooling|Learn more]]. [https://phabricator.wikimedia.org/T415674]
* When editors preview a wikitext edit, the reminder box that they are only seeing a preview (which is shown at the top), now has a grey/neutral background instead of a yellow/warning background. This makes it easier to distinguish preview notes from actual warnings (for example, edit conflicts or problematic redirect targets), which will now be shown in separate warning or error boxes. [https://phabricator.wikimedia.org/T414742]
* The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now properly supports more than one Wikibase site, for example both [[d:|Wikidata]] and [[testwikidata:|testwikidata]]. In addition, issues regarding text direction have been fixed for users who prefer Wikidata or other Wikibase sites in right-to-left (RTL) languages. [https://phabricator.wikimedia.org/T415440][https://phabricator.wikimedia.org/T415458]
* The automatic "magic links" for ISBN, RFC, and PMID numbers have been [[mw:Special:MyLanguage/Help:Magic links|deprecated in wikitext since 2021]] due to inflexibility and difficulties with localization. Several wikis have successfully replaced RFC and PMID magic links with equivalent external links, but a template was often required to replace the functionality of the ISBN magic link. There is now a new [[mw:Special:MyLanguage/Help:Magic words#isbn|built-in parser function]] <code dir=ltr><nowiki>{{#isbn}}</nowiki></code> available to replace the basic functionality of the ISBN magic link. This makes it easier for wikis who wish to migrate off of the deprecated magic link functionality to do so. [https://phabricator.wikimedia.org/T145604]
* Two new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35401|Jju]] ([[w:kaj:|<code>w:kaj:</code>]]) [https://phabricator.wikimedia.org/T413283]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q1186896|Nawat]] ([[w:ppl:|<code>w:ppl:</code>]]) [https://phabricator.wikimedia.org/T413273]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* A new global user group has been created: [[{{int:grouppage-local-bot}}|{{int:group-local-bot}}]]. It will be used internally by the software to allow community bots to bypass rate limits that are applied to abusive [[w:en:Web scraping|web scrapers]]. Accounts that are approved as bots on at least one Wikimedia wiki will be automatically added to this group. It will not change what user permissions the bot has. [https://phabricator.wikimedia.org/T415588]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.15|MediaWiki]]
'''Meetings and events'''
* The [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Spring 2026|MediaWiki Users and Developers Conference, Spring 2026]] will be held March 25–27 in Salt Lake City, USA. This event is organized by and for the third-party MediaWiki community. You can propose sessions and register to attend. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/AZBWVI46SDEB65PGR5J6E4TYOQQEZXM7/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:31, 9 February 2026 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30026671 -->
== Wikipedia translation of the week: 2026-08 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lysmata grabhami]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lysmata grabhami1.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Lysmata grabhami''''' is a species of saltwater shrimp in the family Hippolytidae. It was first described by Gordon in 1935. It occurs in the tropical and subtropical Atlantic Ocean and is a cleaner shrimp, operating a cleaning station to which fish come to have parasites removed.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 13:45, 16 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-08 ==
<section begin="technews-2026-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/08|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|SRE Team]] will be performing a cleanup of Wikimedia's [[m:Special:MyLanguage/Etherpad|Etherpad]] instance, the web-based editor for real-time collaborative document editing. All pads will be permanently deleted after 30 April, 2026 – if there are still migration projects in progress at that point the team can revisit the date on a case by case basis. Please create local backups of any content you wish to keep, as deleted data cannot be recovered. This cleanup helps reduce database size and minimize infrastructure footprint. Etherpad will continue to support real-time collaboration, but long-term storage should not be expected. Additional cleanups may occur in the future without prior notice. [https://phabricator.wikimedia.org/T415237]
'''Updates for editors'''
* The Information Retrieval team will be launching an [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|Android mobile app experiment]] that tests hybrid search capabilities which can handle both semantic and keyword queries. The improvement of on-platform search will enable readers to find what they’re looking for directly on Wikipedia more easily. The experiment will first be launched on Greek Wikipedia in late February, followed by English, French, and Portuguese in March. [https://diff.wikimedia.org/2026/01/08/semantic-search-making-it-easier-to-find-the-information-readers-want/ Read more] on Diff blog. [https://www.mediawiki.org/wiki/Readers/Information_Retrieval]
* The Reader Growth team will run [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.10.2 Mobile Table of Contents|an experiment]] for mobile web users, that adds a table of contents and automatically expands all article sections, to learn more about navigation issues they face. The test will be available on Arabic, Chinese, English, French, Indonesian, and Vietnamese Wikipedias.
* Previously, site notices ([[{{ns:8}}:Sitenotice]] and [[{{ns:8}}:Anonnotice]]) would only render on the desktop site. Now, they will render on all platforms. Users on mobile web will now see these notices and be informed. Site administrators should be prepared to test and fix notices on mobile devices to avoid interference with articles. To opt out, interface admins can add <code dir="ltr">#siteNotice { display: none; }</code> to [[{{ns:8}}:Minerva.css]]. [https://phabricator.wikimedia.org/T138572][https://phabricator.wikimedia.org/T416644]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue on [[Special:RecentChanges|Special:RecentChanges]] has been fixed. Previously, clicking hide in the active filters caused the "view new changes since…" button to disappear, though it should have remained visible. The button now behaves as expected. [https://phabricator.wikimedia.org/T406339]
'''Updates for technical contributors'''
* New documentation is now available to help editors debug on-site search features. It supports troubleshooting when pages do not appear in results, when ranking seems unexpected, and when you need to inspect what content is being indexed, helping make search behavior easier to understand and analyze. [[mw:Help:CirrusSearch/Debug|Learn more]]. [https://phabricator.wikimedia.org/T411169]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.16|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:17, 16 February 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30086330 -->
== Wikipedia translation of the week: 2026-09 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Elefante di Cremona]]'''<br /> <small>''([[:de:Elefant von Cremona]]) ([[:eo:Elefanto de Cremona]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Matthew Paris Elephant from Parker MS 16 fol 151v.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
L''''elefante di Cremona''' (Asia, prima del 1228 - Parma, gennaio 1248) fu un esemplare di elefante donato nel 1228 a Federico II di Svevia da parte del sultano ayyubide al-Malik al-Kamil durante gli incontri che porteranno alla Pace di Giaffa. Usato principalmente per le manifestazioni trionfali del sovrano, l'elefante è citato da numerosi cronachisti e testimoni dell'epoca ed è noto per aver trainato il Carroccio dopo la grande vittoria delle armate di Federico II nella battaglia di Cortenuova del 1237. Rimasto a lungo nell'immaginario popolare collettivo, l'animale venne ucciso durante alcuni scontri occorsi nelle settimane immediatamente precedenti alla battaglia di Parma.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 11:43, 23 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30097839 -->
== Tech News: 2026-09 ==
<section begin="technews-2026-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/09|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Edit check/Reference Check|Reference Check]] has been deployed to English Wikipedia, completing its rollout across all Wikipedias. The feature prompts newcomers to add a citation before publishing new content, helping reduce common citation-related reverts and improve verifiability. In A/B testing, the impact was substantial: newcomers shown Reference Check were approximately 2.2 times more likely to include a reference on desktop and about 17.5 times more likely on mobile web. [https://analytics.wikimedia.org/published/reports/editing/reference_check_ab_test_report_final_2025.html]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Extension:InterwikiSorting|InterwikiSorting extension]], which allowed for the [[m:Special:MyLanguage/Interwiki sorting order|sorting of interwiki links]], has been undeployed from Wikipedia. As a result, editors who had enabled interwiki link sorting in non-compact mode (full list format) will now see links reordered. The links moving forward will be listed in the alphabetical order of language code. [https://phabricator.wikimedia.org/T253764]
* Later this week, people who are editing a page-section using the mobile visual editor, will notice a new "Edit full page" button. When tapped, you will be able to edit the entire article. This helps when the change you want to make is outside the section you initially opened. [https://phabricator.wikimedia.org/T387175][https://phabricator.wikimedia.org/T409112]
* [[mw:Special:MyLanguage/Readers/Reader Experience|The Reader Experience team]] is inviting editors to assess whether dark mode should still be considered "beta" on their wiki, based on their experience of how well it functions on desktop and mobile. If the feature is deemed mature, editors can update the interface messages in <code dir=ltr>MediaWiki:skin-theme-description</code> and <code dir=ltr>MediaWiki:Vector-night-mode-beta-tag</code> to indicate that dark mode is ready and no longer considered beta.
* The improved [[mw:Wikimedia_Apps/Team/iOS/Activity_Tab|Activity tab]] which displays user-insights is now available to all users of the Wikipedia iOS app (version 7.9.0 and later). Following earlier A/B testing that showed higher account creation among users with access to the feature, it has been rolled out to 100% of users along with some updates. The Activity tab now shows your edited articles in the timeline, offers editing impact insights like contribution counts and article view trends, and customization options to improve in-app experience for users.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug that prevented [[mw:Special:MyLanguage/Extension:DiscussionTools|DiscussionTools]] from working on mobile has now been fixed, restoring full functionality. [https://phabricator.wikimedia.org/T415303]
'''Updates for technical contributors'''
* The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that makes this possible continues to improve. The latest upgrade is the inclusion of a [[mw:Extension:GlobalWatchlist#hook|new hook]], <code dir=ltr>ext.globalwatchlist.rebuild</code>, which fires after each watchlist rebuild. This allows you to run gadgets and user scripts for the Special page. [https://phabricator.wikimedia.org/T275159]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.17|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:04, 23 February 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30119102 -->
== Wikipedia translation of the week: 2026-10 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Treaty of the Danish West Indies]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:The Virgin islands of the United States of America; historical and descriptive, commercial and industrial facts, figures, and resources (1918) (14596880870).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Treaty of the Danish West Indies''' (Danish: Vestindiens traktat), officially the Convention between the United States and Denmark for cession of the Danish West Indies (Danish: Konventionen mellem USA og Danmark), was a 1916 treaty transferring sovereignty of the Danish West Indies from Denmark to the United States in exchange for a sum of US$25,000,000 in gold ($722 million in 2024) and a declaration from the United States that it would "not object to the Danish Government extending their political and economic interests to the whole of Greenland". It is one of the most recent permanent expansions of United States territory.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:43, 2 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30097839 -->
== Tech News: 2026-10 ==
<section begin="technews-2026-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/10|Translations]] are available.
'''Weekly highlight'''
* Wikipedia 25 [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments|Birthday mode]] is now live on Betawi, Breton, Chinese, Czech, Dutch, English, French, Gorontalo, Indonesian, Italian, Luxembourgish, Madurese, Sicilian, Spanish, Thai, and Vietnamese Wikipedias! This limited-time campaign feature celebrates 25 years of Wikipedia with a birthday mascot, Baby Globe. When turned on, Baby Globe is shown on [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments/article configuration|~2,500 articles]], waiting to be discovered by readers. Communities can choose to turn Birthday mode on by getting consensus from their community and asking an admin to enable the feature and customize it via [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments#Community Configuration Demo|community configuration]] on the local wiki.
'''Updates for editors'''
* [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new feature to re-use references with different details has been released to Swedish Wikipedia, Polish Wikipedia and [[:phab:T418209|a couple of other wikis]]. You can [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#test|try the feature]] on these projects or on testwiki and [https://en.wikipedia.beta.wmcloud.org/wiki/Sub-referencing betawiki]. Learnings from the first pilot wiki German Wikipedia have been [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing/Learnings|published in a report]]. Reach out to the Wikimedia Deutschland team if you are [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Pilot wikis|interested in becoming a pilot wiki]].
* [[mw:Special:MyLanguage/Help:Edit check#Paste check|Paste Check]] will become available at all Wikipedias this week. The feature prompts newcomers who are pasting text they are not likely to have written into VisualEditor to consider whether doing so risks a copyright violation. Paste Check [[mw:Special:MyLanguage/Edit check/Tags|tags]] all edits where it is shown for potential review. Local administrators can configure various aspects of the feature via [[{{#special:EditChecks}}]]. [[mw:Special:MyLanguage/Edit check/Paste Check#A/B Experiment|Research]] across 22 wikis found that Paste Check resulted in an 18% decrease in relative reverted-edits compared to the control group. Translators can [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-visualeditor-ve-mw-editcheck&filter=&optional=1&action=translate help to localize] this and related features.
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] will be standardizing the user menu in the top right for all mobile users so that it is closer to the desktop experience. Currently this user menu is only visible to users with Advanced Mobile Controls (AMC) turned on. The only change is that a couple buttons previously in the left-side menu will move to the top right for users who do not have AMC turned on. This change is expected to go out March 9 and seeks to improve the user interface. [https://phabricator.wikimedia.org/T413912]
* Starting in the week of March 2, the emails sent out when an email address was added, removed, or changed for an account will switch to a substantially nicer and clearer HTML email from the prior plaintext one. [https://phabricator.wikimedia.org/T410807]
* Notifications are currently limited to 2,000 historic entries per user, and extend back to 2013 when the feature was released. This is going to be changed to only store Notifications from the last 5 years, but up to 10,000 of them. This will help with long-term infrastructure health and help to prevent more recent notifications from disappearing too soon. [https://phabricator.wikimedia.org/T383948]
* The [[m:Special:GlobalWatchlist|Global Watchlist]] which lets you view your watchlists from multiple wikis on a single page continues to see improvements. The latest update improves label usage experience. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] now allows activating the [[mw:Special:MyLanguage/Manual:Language#Fallback languages|language fallback system]] for Wikidata items without labels in the viewed language, and showing those labels in the user’s preferred Wikidata language if no <code dir=ltr>uselang=</code> URL parameter is provided. [https://phabricator.wikimedia.org/T373686][https://phabricator.wikimedia.org/T416111]
* The Wikipedia Android team has started a beta test of [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|hybrid search]] on Greek Wikipedia. Hybrid search capabilities can handle both semantic and keyword queries enabling readers to find what they’re looking for directly on Wikipedia more easily.
* For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Currently, 2FA is required to use the group, but not to be a member of it. Given that this model still has some vulnerabilities, the situation will [[phab:T418580|gradually change in March]]. Members of these groups will be unable to disable last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the second half of March, users without 2FA will be removed from these groups. This applies to: CentralNotice administrators, checkusers, interface administrators, suppressors, Wikidata staff, Wikifunctions staff, WMF Office IT and WMF Trust & Safety. Nothing will change for other users. See the linked task for deployment schedule. [https://phabricator.wikimedia.org/T418580]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue preventing users from creating an instance in [https://www.wikibase.cloud/ Wikibase.cloud] has now been fixed. [https://phabricator.wikimedia.org/T416807]
'''Updates for technical contributors'''
* To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], over the next month the Wikimedia Foundation will implement global API rate limits across our APIs. In early March, stricter limits will be applied to unidentified requests from outside Toolforge/WMCS and API requests that are made from web browsers. In April, higher limits will be applied to identified traffic. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]].
* The Wikidata Query Service Linked Data Fragment (LDF) endpoint will be decommissioned in February. This endpoint served limited traffic, which was successfully migrated to other data access methods that were better suited to support existing use cases. The hardware used to support the LDF endpoint will be reallocated to support the ongoing backend migration efforts. [https://phabricator.wikimedia.org/T415696]
* The new Parsoid parser [[mw:Special:MyLanguage/Parsoid/Parser Unification/Updates|continues to be deployed to additional wikis]], improving platform sustainability and making it easier to introduce new reading and editing features. Parsoid is now the default parser on 488 WMF wikis (268 Wikipedias), now covering more than 10% of all Wikipedia page views.
* The process and criteria for [[Special:MyLanguage/Wikimedia Enterprise#Access|requesting exceptional access]] to the high volume feed of the ''Wikimedia Enterprise'' APIs (at no cost for mission-aligned usecases), [[m:Talk:Wikimedia Enterprise#Exceptional access criteria|have now been published]]. This is to provide more thorough and clearer documentation for users.
* [https://techblog.wikimedia.org/ Tech Blog], the blog dedicated to the Wikimedia technical community [https://techblog.wikimedia.org/2026/02/24/a-tech-blog-diff/ will be migrating] to [[diffblog:|Diff]], the community news and event blog. The migration should be complete in April 2026, after which new posts will be accepted for publishing. Readers will be able to access posts – old and new – on the landing page at https://diff.wikimedia.org/techblog.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.18|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:52, 2 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30137798 -->
== Wikipedia translation of the week: 2026-11 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Steens Mountain]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Steens Mountain near Andrews, Oregon.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Steens Mountain''' is a large fault-block mountain in the northwest United States, located in Harney County, Oregon. Stretching some fifty miles (80 km) north to south, on its east side it rises from the Alvord Desert at an elevation of about 4,200 feet (1,280 m) to 9,738 feet (2,968 m) at the summit. Steens Mountain is not part of a mountain range but is properly a single mountain, the largest of Oregon's fault-block mountains.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 07:30, 9 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30097839 -->
== Tech News: 2026-11 ==
<section begin="technews-2026-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/11|Translations]] are available.
'''Weekly highlight'''
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies.
* Last week, all wikis had 2 hours of read-only time, and extended unavailability for user-scripts and gadgets. This was due to a security incident which has since been resolved. Work is ongoing to prevent re-occurrences. For current information please see the [[m:Steward's noticeboard#Statement on Meta about today's user script security incident|post on the Stewards' noticeboard]] ([[m:Special:MyLanguage/Wikimedia Foundation/Product and Technology/Product Safety and Integrity/March 2026 User Script Incident|translations]]).
'''Updates for editors'''
* Users facing multiple blocks on mobile will now see the reasons for each block separately, instead of a generic message. This helps them understand why they are blocked and what steps they can take to resolve the issue. For example, users affected for using common VPNs (such as [[Special:MyLanguage/Apple iCloud Private Relay|iCloud Private Relay]]) will receive clearer guidance on what they need to do to start editing again. [https://phabricator.wikimedia.org/T357118]
* Later this week, [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] will become available as a beta feature within the visual editor at all Wikipedias. This feature proactively suggests various types of actions that people can consider taking to improve Wikipedia articles, and learn about related guidelines. The feature is locally configurable, and can also be locally expanded with custom Suggestions. Current settings can be seen at [[Special:EditChecks]] and there are [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators %E2%80%93 local customization|instructions for how administrators can customize]] the links to point to local guidelines. The feature is connected to [[mw:Special:MyLanguage/Help:Edit check|Edit check]] which suggests improvements while someone is writing new content. In the future, the Editing team plans to evaluate the feature's impact with newcomers through a controlled experiment. [https://phabricator.wikimedia.org/T404600]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where the cursor became misaligned during the use of CodeMirror’s syntax highlighting, which makes wikitext and code easier to read, has now been fixed. This problem specifically affected users who defined a font rule in a custom stylesheet while creating a new topic with DiscussionTools. [https://phabricator.wikimedia.org/T418793]
'''Updates for technical contributors'''
* API rate limiting update: To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], global API rate limits will be applied this week to requests without a compliant User-Agent that originate from outside Toolforge/WMCS and to unauthenticated requests made from web browsers. Higher limits will be applied to identified traffic in April. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]].
* The new GraphQL API has been released. The API was developed as a flexible alternative to select features of the Wikidata Query Service (WDQS), to improve developer experience and foster adaptability, and efficient data access. Try it out and [[d:Wikidata:Wikibase GraphQL#Feedback and development|give feedback]]. You can also [https://greatquestion.co/wikimediadeutschland/GraphQLAPI/apply sign up for usability tests].
* The [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|PTAC Unsupported Tools Working Group]] continued improvements to [[commons:Special:MyLanguage/Commons:Video2commons#|Video2Commons]] in February, with fixes addressing authentication errors, large-file handling, task queue visibility, and clearer upload behavior. Work is still ongoing in some areas, including changes related to deprecated server-side uploads. Read [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group#February 2026|this update]] to learn more.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.19|MediaWiki]]
'''In depth'''
* The Article Guidance team invites experienced Wikipedia editors from selected [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators#Collaborators|pilot wikis]] and interested contributors from other Wikipedias to fill out this questionnaire which is available in [https://docs.google.com/forms/d/e/1FAIpQLSfmLeVWnxmsCbPoI_UF2jyRcn73WRGWCVPHzerXb4Cz97X_Ag/viewform English], [https://docs.google.com/forms/d/e/1FAIpQLSd6rzr4XXQw8r4024fE3geTPFe13M_6w7Mitj-YJi0sOlWTAw/viewform?usp=header Arabic], [https://docs.google.com/forms/d/e/1FAIpQLSdok3-RfB18lcugYTUMGkpwmqG_8p760Wv4dCXitOXOszjUDw/viewform?usp=header Bengali], [https://docs.google.com/forms/d/e/1FAIpQLSfjTfYp4jEo0akA4B1e-Nfg3QZPCudUjhJzHzzDi6AHyAaMGA/viewform?usp=header Japanese], [https://docs.google.com/forms/d/e/1FAIpQLScteVoI29Aue4xc72dekk-6RYtvmMgQxzMI900UOawrFrSTWg/viewform?usp=header Portuguese], [https://docs.google.com/forms/d/e/1FAIpQLSetdxnYwL3ub2vqA7awCg5hJZPMIYcDPaiTe12rY9h0GYnVlw/viewform?usp=header Persian], and [https://docs.google.com/forms/d/e/1FAIpQLScNvfJF-Ot-4pzA4qAN771_0QDJ4Li19YcUsaTgSKW8Nc7U_Q/viewform?usp=header Turkish]. Your answers will help the team customize guidance for less experienced editors and help them learn community policies and practices while creating an article. Learn more [[mw:Special:MyLanguage/Article guidance|on the project page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:53, 9 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30213008 -->
== Wikipedia translation of the week: 2026-12 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Casque (anatomy)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Great hornbill (Buceros bicornis) Photograph by Shantanu Kuveskar.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''casque''' is an anatomical feature found in some species of birds, reptiles, and amphibians. In birds, it is an enlargement of the bones of the upper mandible or the skull, either on the front of the face, the top of the head, or both. The casque has been hypothesized to serve as a visual cue to a bird's sex, state of maturity, or social status; as reinforcement to the beak's structure; or as a resonance chamber, enhancing calls.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:43, 16 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30245038 -->
== Tech News: 2026-12 ==
<section begin="technews-2026-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/12|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature, also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], has been used for wikitext syntax highlighting since November 2024. It will be promoted out of beta by May 2026 in order to bring improvements and new [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Features|features]] to all editors who use the standard syntax highlighter. If you have any questions or concerns about promoting the feature out of beta, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|please share]]. [https://phabricator.wikimedia.org/T259059]
* Some changes to local user groups are performed by stewards on Meta-Wiki and logged there only. Now, interwiki rights changes will be logged both on Meta-Wiki and the wiki of the target user to make it easier to access a full record of user's rights changes on a local wiki. Past log entries for such changes will be backfilled in the coming weeks. [https://phabricator.wikimedia.org/T6055]
* On wikis using [[m:Special:MyLanguage/Flagged Revisions|Flagged Revisions]], the number of pending changes shown on [[{{#Special:PendingChanges}}]] previously counted pages which were no longer pending review, because they have been removed from the system without being reviewed, e.g. due to being deleted, moved to a different namespace, or due to wiki configuration changes. The count will be correct now. On some wikis the number shown will be much smaller than before. There should be no change to the list of pages itself. [https://phabricator.wikimedia.org/T413016]
* Wikifunctions composition language has been rewritten, resulting in a new version of the language. This change aims to increase service stability by reducing the orchestrator's memory consumption. This rewrite also enables substantial latency reduction, code simplification, and better abstractions, which will open the door to later feature additions. Read more about [[f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-11|the changes]].
* Users can now sort search results alphabetically by page title. The update gives an additional option to finding pages more easily and quickly. Previously, results could be sorted by Edit date, Creation date, or Relevance. To use the new option, open 'Advanced Search' on the search results page and select 'Alphabetically' under 'Sorting Order'. [https://phabricator.wikimedia.org/T403775]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented UploadWizard on Wikimedia Commons from importing files from Flickr has now been fixed. [https://phabricator.wikimedia.org/T419263]
'''Updates for technical contributors'''
* A new special page, [[{{#special:LintTemplateErrors}}]], has been created to list transcluded pages that are flagged as containing lint errors to help users discover them easily. The list is sorted by the number of transclusions with errors. For example: [[{{#special:LintTemplateErrors}}/night-mode-unaware-background-color]]. [https://phabricator.wikimedia.org/T170874]
* Users of the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature have been using [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages, for some time now. Along with promoting CodeMirror 6 out of beta, the plan is to replace CodeEditor as the standard editor for these content models by May 2026. [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|Feedback or concerns are welcome]]. [https://phabricator.wikimedia.org/T419332]
* The [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] JavaScript modules will soon be upgraded to CodeMirror 6. Leading up to the upgrade, loading the <code dir=ltr>ext.CodeMirror</code> or <code dir=ltr>ext.CodeMirror.lib</code> modules from gadgets and user scripts was deprecated in July 2025. The use of the <code dir=ltr>ext.CodeMirror.switch</code> hook was also deprecated in March 2025. Contributors can now make their scripts or gadgets compatible with CodeMirror 6. See the [[mw:Special:MyLanguage/Extension:CodeMirror#Gadgets and user scripts|migration guide]] for more information. [https://phabricator.wikimedia.org/T373720]
* The MediaWiki Interfaces team is expanding coverage of REST API module definitions to include [[mw:Special:MyLanguage/API:REST API/Extensions|extension APIs]]. REST API modules are groups of related endpoints that can be independently managed and versioned. Modules now exist for [https://phabricator.wikimedia.org/T414470 GrowthExperiments] and [https://phabricator.wikimedia.org/T419053 Wikifunctions] APIs. As we migrate extension APIs to this structure, documentation will move out of the main MediaWiki OpenAPI spec and REST Sandbox view, and will instead be accessible via module-specific options in the dropdown on the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox] (i.e., [[{{#Special:RestSandbox}}]], available on all wiki projects).
* The [[mw:Special:MyLanguage/Extension:Scribunto|Scribunto]] extension provides different pieces of information about the wiki where the module is being used via the [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual|mw.site]] library. Starting last week, the library also provides a [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.site.wikiId|way]] of accessing the [[mw:Special:MyLanguage/Manual:Wiki ID|wiki ID]] that can be used to facilitate cross-wiki module maintenance. [https://phabricator.wikimedia.org/T146616]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.20|MediaWiki]]
'''In depth'''
* The [[m:Special:MyLanguage/Coolest Tool Award|2026 Coolest Tool Award]] celebrating outstanding community tools, is now open for nominations! Nominate your favorite tool using the [https://wikimediafoundation.limesurvey.net/435684?lang=en nomination survey] form by 23 March 2026. For more information on privacy and data handling, please see the [[foundation:Special:MyLanguage/Legal:Coolest_Tool_Award_2026_Survey_Privacy_Statement|survey privacy statement]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:36, 16 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30260505 -->
== Wikipedia translation of the week: 2026-13 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Etruscan sculpture]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Frontone A del grande tempio di luni con concilio degli dei, 175-150 ac. ca. 01.JPG|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Etruscan sculpture''' was one of the most important artistic expressions of the Etruscan people, who inhabited the regions of Northern Italy and Central Italy between about the 9th century BC and the 1st century BC. Etruscan art was largely a derivation of Greek art, although developed with many characteristics of its own. Given the almost total lack of Etruscan written documents, a problem compounded by the paucity of information on their language—still largely undeciphered—it is in their art that the keys to the reconstruction of their history are to be found, although Greek and Roman chronicles are also of great help. Like its culture in general, Etruscan sculpture has many obscure aspects for scholars, being the subject of controversy and forcing them to propose their interpretations always tentatively, but the consensus is that it was part of the most important and original legacy of Italian art and even contributed significantly to the initial formation of the artistic traditions of ancient Rome.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:07, 23 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30245038 -->
== Tech News: 2026-13 ==
<section begin="technews-2026-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/13|Translations]] are available.
'''Weekly highlight'''
* Wikimedia site users can now log in without a password using passkeys. This is a secure method supported by fingerprint, facial recognition, or PIN. With this change, all users who opt for passwordless login will find it easier, faster, and more secure to log in to their accounts using any device. The new passkey login option currently appears as an autofill suggestion in the username field. An additional [[phab:T417120|"Log in with passkey" button]] will soon be available for users who have already registered a passkey. This update will improve security and user experience. The [[c:File:Passwordless_login_screencast.webm|screen recording]] demonstrates the passwordless login process step by step.
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies.
'''Updates for editors'''
* Wikimedia site users can now export their notifications older than 5 years using a [[toolforge:echo-chamber|new Toolforge tool]]. This will ensure that users retain their important notifications and avoid them being lost based on the planned change to delete notifications older than 5 years, as previously announced. [https://phabricator.wikimedia.org/T383948]
* Wikipedia editors in Indonesian, Thai, Turkish, and Simple English now have access to Special:PersonalDashboard. This is an [[mw:Special:MyLanguage/Moderator Tools/Dashboard|early version of an experience]] that introduces newer editors to patrolling workflows, making it easier for them to move from making edits to participating in more advanced moderation work on their project. [https://phabricator.wikimedia.org/T402647]
* The [[Special:Block]] now has two minor interface changes. Administrators can now easily perform indefinite blocks through a dedicated radio button in the expiry section. Also, choosing an indefinite expiry provides a different set of common reasons to select from, which can be changed at: [[MediaWiki:Ipbreason-indef-dropdown]]. [https://phabricator.wikimedia.org/T401823]
* Mobile editors [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#Logged-out|at several wikis]] can now see an improved logged-out edit warning, thanks to the recent updates from the Growth team. These changes released last week are part of ongoing efforts and tests to enhance [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|account creation experience on mobile]] and then increase participation. [https://phabricator.wikimedia.org/T408484]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:36}} community-submitted {{PLURAL:36|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented mobile web users from seeing the block information when affected by multiple blocks has been fixed. They can now see messages of all the blocks currently affecting them when they access Wikipedia.
'''Updates for technical contributors'''
* Images built using Toolforge will soon get the upgraded buildpacks version, bringing support for newer language versions and other upstream improvements and fixes. If you use Toolforge Build Service, review the recent [https://lists.wikimedia.org/hyperkitty/list/cloud-announce@lists.wikimedia.org/thread/EMYTA32EV2V5SQ2JIEOD2CL66YFIZEKV/ cloud-announce email] and update your build configuration as necessary to ensure your tools are compatible. [https://wikitech.wikimedia.org/w/index.php?title=Help:Toolforge/Building_container_images&oldid=2392097#Buildpack_environment_upgrade_process][https://phabricator.wikimedia.org/T380127]
* The [https://api.wikimedia.org/wiki/Main_Page API Portal] documentation wiki will shut down in June 2026. API keys created on the API Portal will continue to work normally. api.wikimedia.org endpoints will be deprecated gradually starting in July 2026. Documentation on the API Portal is moving to [[mw:Wikimedia APIs|mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.21|MediaWiki]]
'''In depth'''
* [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] is considering improvements to [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|automatically generated reference names in VisualEditor]]. Please check out the [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names#Proposed solutions|proposed solutions]] and participate in the [[m:Talk:WMDE Technical Wishes/References/VisualEditor automatic reference names#Request for comment|request for comment]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:51, 23 March 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30268305 -->
== Wikipedia translation of the week: 2026-14 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pulse (nightclub)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Orlando FL Pulse Nightclub01.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Pulse''' was a gay bar, dance club, and nightclub in Orlando, Florida, founded in 2004 by Barbara Poma and Ron Legler. On June 12, 2016, the club was the scene of the second-deadliest mass shooting by a single gunman in U.S. history, and the second-deadliest terrorist attack on U.S. soil since the September 11 attacks. Forty-nine people were killed and 58 other people were injured.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:37, 30 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30306870 -->
== Tech News: 2026-14 ==
<section begin="technews-2026-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/14|Translations]] are available.
'''Weekly highlight'''
* The Beta version of [[abstract:|Abstract Wikipedia]] a new Wikimedia project which is language-independent, was launched last week. The project allows communities to build Wikipedia articles in their native language, which can be readily accessed by other users in their own languages. The wiki is powered by instructions from Wikifunctions and also based on structured content from Wikidata. [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-26|Read more]].
'''Updates for editors'''
* The Growth team is running an A/B test to evaluate a clearer, more user-friendly message that promotes account creation on wikis. Currently when logged-out mobile users begin editing, they see a jarring warning message that can feel abrupt and discouraging. This also presents temporary account editing as the default rather than encouraging account creation. The test is running on ten Wikipedias, including Arabic, French, Spanish and German. [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#2. Improve logged-out warning message (T415160)|Read more]].
* The Wikimedia Apps team is inviting feedback on [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|how editing should work on the Wikipedia mobile apps]]. The discussion focuses on improving how users access editing tools when they tap "Edit". This is part of a broader effort to convert readers who develop an interest in editing, to access a more user-friendly pathway to start contributing.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:45}} community-submitted {{PLURAL:45|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where citation fetching from the large newspaper archive [https://www.newspapers.com Newspapers.com] was no longer working, due to a block in [[mw:Special:MyLanguage/Citoid|Citoid]] requests, has now been fixed. [https://phabricator.wikimedia.org/T419903]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.22|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:26, 30 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30329462 -->
== Wikipedia translation of the week: 2026-15 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Tofana di Rozes]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Tofana di Rozes 04.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Tofana di Rozes''' (3,225 metres (10,581 ft)) is a mountain of the Dolomites in the Province of Belluno, Veneto, Italy. Located west of the resort of Cortina d'Ampezzo, the mountain's giant three-edged pyramid shape and its vertical south face, above the Falzarego Pass, makes it the most popular peak in the Tofane group, and one of the most popular in the Dolomites.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:27, 6 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30306870 -->
== Tech News: 2026-15 ==
<section begin="technews-2026-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/15|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] now includes a new group goal-setting feature, enabling organizers to set and track event goals such as the number of articles created and participating contributors in real time. Similarly, participants can work toward shared targets and see their collective impact as the event unfolds. The feature is now available on all Wikimedia wikis. Learn more in [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Collaborative contributions#Goal setting|the documentation]].
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] The new [[mw:Special:MyLanguage/Help:Watchlist labels|watchlist labels]] feature (announced in [[m:Special:MyLanguage/Tech/News/2026/07|Tech News 2026-07]]) is now available via VisualEditor, the source editor, and the 'watchstar' (or watch link, for skins that don't have a star icon). Previously it was only possible to assign labels via [[Special:EditWatchlist|EditWatchlist]]. In all three places it is a new field following the expiry field.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where talk pages on mobile with Parsoid are unusable after empty section headers, has now been fixed. [https://phabricator.wikimedia.org/T419171]
'''Updates for technical contributors'''
* The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|sub-referencing feature]], which lets editors add details to an existing reference without duplicating it, will be gradually rolled out to [[phab:T414094|more wikis]] later this year. Wikis using the [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]] gadget are encouraged to update their version (typically at [[m:MediaWiki:Gadget-ReferenceTooltips.js|MediaWiki:Gadget-ReferenceTooltips.js]] as shown [https://en.wikipedia.org/w/index.php?diff=1344408362 here]) to ensure compatibility. Other reference-related gadgets may also be affected. [https://phabricator.wikimedia.org/T416304]
* All Wikinews editions will be closed and switched to read-only mode on 4 May 2026. Content will remain accessible, but no new edits or articles can be added. This closure was approved by the Board of Trustees of the Wikimedia Foundation following extended discussions. [[m:Wikimedia Foundation Board noticeboard#Board of Trustees Approves Closure of Wikinews|Read more]].
* The [[:mw:Special:MyLanguage/API:Action API|Action API]] has had several formats for requested output. One of them, <bdi lang="zxx" dir="ltr"><code><nowiki>format=php</nowiki></code></bdi>, is being removed soon. Please ensure your scripts or bots use the [[mw:Special:MyLanguage/API:Data formats#Output|JSON format]]. This removal should affect very few scripts and bots. [https://phabricator.wikimedia.org/T118538]
* The [[Special:NamespaceInfo|Special:NamespaceInfo]] page now includes namespace aliases. For example "WP" for the "Project" ("Wikipedia") namespace on the German Wikipedia. [https://phabricator.wikimedia.org/T381455]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.23|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:19, 6 April 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30362761 -->
== Wikipedia translation of the week: 2026-16 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Very-low-calorie diet]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Green smoothie (8222465502).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''very-low-calorie diet''' (VLCD), also known as semistarvation diet and crash diet, is a type of diet with very or extremely low daily food energy consumption. VLCDs are defined as a diet of 800 kilocalories (3,300 kJ) per day or less. Modern medically supervised VLCDs use total meal replacements, with regulated formulations in Europe and Canada which contain the recommended daily requirements for vitamins, minerals, trace elements, fatty acids, protein and electrolyte balance.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:56, 13 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30306870 -->
== Tech News: 2026-16 ==
<section begin="technews-2026-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/16|Translations]] are available.
'''Weekly highlight'''
* Experienced editors are invited to [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Main_Page test] the [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature, designed to help less-experienced editors create well-structured, policy-compliant Wikipedia articles. Testing instructions are [[mw:Special:MyLanguage/Article guidance/Test feature guide|available]]. Also, after reviewing [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance the outlines], please provide feedback on the [[mw:Talk:Article guidance|project talk page]]. Based on your input, the feature will be refined and transferred to the pilot Wikipedias to translate and adapt. Check out [[c:File:Article Guidance workflow demo - April 2026.webm|the video]] explaining the feature.
'''Updates for editors'''
* On most wikis, all autoconfirmed users can now use [[Special:ChangeContentModel|Special:ChangeContentModel]] page to [[mw:Special:MyLanguage/Help:ChangeContentModel|create new pages with custom content models]], such as mass message lists, making custom page formats more accessible. Check [[Special:ListGroupRights|Special:ListGroupRights]] for the status of your wiki. [https://phabricator.wikimedia.org/T248294]
* The Growth team has launched an [[mw:Special:MyLanguage/Contributors/Account_Creation_Experiments|account creation experiment]] to evaluate whether adding an account creation button to the mobile web header increases new account registrations and encourages more mobile users to contribute to the wikis. The experiment is currently live on Hindi, Indonesian, Bengali, Thai, and Hebrew Wikipedia, and targets 10% of logged-out mobile web users.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where VisualEditor could get stuck loading on Windows devices with animations turned off, has now been fixed. [https://phabricator.wikimedia.org/T382856]
'''Updates for technical contributors'''
* Starting later this week, {{int:group-abusefilter}} who have the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature enabled will have [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] as the editor at [[Special:AbuseFilter|Special:AbuseFilter]]. This is part of the broader effort to make the user experience more consistent across all editors. [https://phabricator.wikimedia.org/T399673][https://phabricator.wikimedia.org/T419332]
* Tools and bots that access the [[mw:Special:MyLanguage/Notifications/API|Notifications API]] (<bdi lang="zxx" dir="ltr"><code><nowiki>action=query&meta=notifications</nowiki></code></bdi>) will need to update their OAuth or BotPassword grants to also include access to private notifications. [https://phabricator.wikimedia.org/T421991]
* Due to a library upgrade, listings on category pages may be displayed out of order starting on Monday, 20th April. A migration script will be run to correct this, and will take hours to days depending on the size of the wiki (up to a week for English Wikipedia). [https://phabricator.wikimedia.org/T422544]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.24|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:19, 13 April 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30380527 -->
== Wikipedia translation of the week: 2026-17 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Chromodoris willani]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Babosa de mar (Chromodoris willani), Anilao, Filipinas, 2023-08-24, DD 34.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Chromodoris willani''''', commonly known as Willan's chromodoris, is a species of sea slug, a dorid nudibranch, a shell-less marine gastropod mollusk in the family Chromodorididae. The species is named for the renowned nudibranch taxonomist Dr. Richard C. Willan.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:34, 20 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30430366 -->
== Tech News: 2026-17 ==
<section begin="technews-2026-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/17|Translations]] are available.
'''Weekly highlight'''
* After two years of development, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]], also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], is to be promoted out of beta on Tuesday, April 21. It brings better code and wikitext readability, reduction in typing errors, and other [[mw:Special:MyLanguage/Help:Extension:CodeMirror|benefits]] to all users of the standard syntax highlighter. A huge thank you to volunteer [https://phabricator.wikimedia.org/p/Bhsd/ Bhsd] who developed many of the new features, including [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Code folding|code folding]], [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|autocompletion]], and [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|linting]]. [https://phabricator.wikimedia.org/T259059]
* A major update to the Wikipedia app for iOS is now rolling out, redesigning the interface to align with Apple's latest "Liquid Glass" visual design. [https://apps.apple.com/us/app/wikipedia/id324715238 Download the latest version] and explore the update.
'''Updates for editors'''
* [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Reading lists]] is a feature which allows readers to save articles to a list for reading later. This feature is now in beta on Arabic, French, Indonesian, Vietnamese, and Chinese Wikipedias and by default for all new accounts on all Wikipedias.
* An experiment which explores extending [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Page Previews to mobile web]] will be launched in the week of April 20 on Arabic, English, French, Italian, Polish, and Vietnamese Wikipedias. Page Previews are pop-ups that display a thumbnail, lead paragraph, and a link to open the full article of a blue link, thereby improving content discovery. The feature is already available on desktop and in the apps. [[m:Special:MyLanguage/List of experiments in Product and Technology#Template|Read more about this experiment and others]].
* On several wikis, logged-in editors who haven't [[mw:Special:MyLanguage/Help:Email confirmation|confirmed their email addresses]] can now see a banner encouraging them to do so. Having the email address confirmed allows a user to restore access to the account if they lose it. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Encouraging users to confirm their email addresses|Learn more]]. [https://phabricator.wikimedia.org/T421366]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:15}} community-submitted {{PLURAL:15|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where editing very large wiki pages in the 2017 wikitext editor caused slow loading, preview and scrolling lag, and performance issues when selecting, cutting, or pasting content, has now been fixed. [https://phabricator.wikimedia.org/T184857]
'''Updates for technical contributors'''
* As part of the promotion of [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] from a beta feature, all users will use [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages. [https://phabricator.wikimedia.org/T419332]
* The <code>mirrors.wikimedia.org</code> service for Debian and Ubuntu users will sunset and stop working on May 15. The resources for the service will be replaced with new and better options. Some users may need to switch to a different server which should take about a minute. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LJYRIS4WB66HIRCAO4GIDTXCMDVZRBMA/ You can read more]. [https://phabricator.wikimedia.org/T416707]
* The <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> table will be removed from [[wikitech:Help:Wiki Replicas|wikireplicas]]. If your tools or queries access <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> or <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> directly, please update them to use the <bdi lang="zxx" dir="ltr"><code><nowiki>file</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>filerevision</nowiki></code></bdi> table before 28 May. [https://phabricator.wikimedia.org/T28741]
* Following the recent implementation of global API rate limits on unidentified traffic, the Wikimedia Foundation will continue efforts to ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]] by applying global limits to identified API traffic beginning the last week of April. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]].
* The [[mw:Special:MyLanguage/Attribution API|Attribution API]] is now available as a [[mw:Special:MyLanguage/Wikimedia APIs/Stability policy|beta]]. The API fetches information for crediting Wikimedia articles and media files wherever they are used. Reference documentation is available through the REST Sandbox special page available on all Wikimedia wikis (such as the [https://en.wikipedia.org/w/index.php?api=attribution.v0-beta&title=Special%3ARestSandbox REST sandbox on English Wikipedia]). Share your feedback on the [[mw:Talk:Attribution API|project talk page]].
* There is no new MediaWiki version this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:01, 20 April 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30432763 -->
== Wikipedia translation of the week: 2026-18 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Platypus venom]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Platypus spur.JPG|300px|center]]
<div style="text-align:left; padding: .4em;">
The platypus is one of the few living mammals to produce venom. The venom is made in venom glands that are connected to hollow spurs on their hind legs; it is primarily made during the mating season.[1] While the venom's effects are described as extremely painful, it is not lethal to humans. Many archaic mammal groups possess similar tarsal spurs, so it is thought that, rather than having developed this characteristic uniquely, the platypus simply inherited this characteristic from its ancestors. Rather than being a unique outlier, the platypus is the last demonstration of what was once a common mammalian characteristic, and it can be used as a model for non-therian mammals and their venom delivery and properties.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:04, 27 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30449041 -->
== Tech News: 2026-18 ==
<section begin="technews-2026-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/18|Translations]] are available.
'''Updates for editors'''
* There is a change in how new users are autoconfirmed that will improve anti-vandalism protection. Currently, users who have had an account for a few days and made a few edits are automatically added to the [[{{int:grouppage-autoconfirmed/{{CONTENTLANGUAGE}}}}|{{int:group-autoconfirmed}}]] group. This configuration tends to be exploited by some vandals, who create accounts and start to use them only after some time. To mitigate this, the configuration will be updated next week so that – for the purpose of becoming autoconfirmed – the account age will be counted from their first edit, instead of registration date. The numeric value of the age threshold will remain the same. This change will be deployed only to wikis which require at least one edit as part of the autoconfirmation conditions. [https://phabricator.wikimedia.org/T418484]
* All Wikipedia users with new accounts and those who activated the "automatically enable most beta features" option in their preference can now use the [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|reading lists]] beta feature to save articles for later reading. This helps organize reading interests in one place for convenient access.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where infobox images have huge padding in Firefox, has been fixed. [https://phabricator.wikimedia.org/T423676]
'''Updates for technical contributors'''
* As a reminder, the global API rate limits will be applied this week to identified API traffic. This is to help ensure [[mw:MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]]. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, including the actual rate limits, see [[mw:Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.26|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:06, 27 April 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30458046 -->
== Wikipedia translation of the week: 2026-19 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Kuwait National Assembly Building]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Kuwait City Arabian Gulf Street 10.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Kuwait National Assembly Building''' is the building that housed the National Assembly of Kuwait.
Designed by Danish architect Jørn Utzon in 1972, it was completed in 1982 under the direction of his son Jan. The structural design was by Max Walt. The building was seriously damaged in February 1991 when retreating Iraqi troops set it on fire but has since been restored.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:16, 4 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30464799 -->
== Tech News: 2026-19 ==
<section begin="technews-2026-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/19|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Article guidance|Article guidance]] team invites experienced editors of [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators|pilot Wikipedias]]—Arabic, Bangla, Japanese, Portuguese, Persian, Turkish, Simple English, Spanish, and French—to help translate and adapt [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance sample outlines]. These outlines will guide editors in creating clear, well-structured, and policy-compliant articles when using [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Special:NewArticle the feature] once it is launched in May 2026. [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|Simple instructions]] on how to translate and adapt the outlines are available.
'''Updates for editors'''
* The [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] has published [[:m:Special:MyLanguage/Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|draft recommendations]] on a model that affiliates can follow when contributing to the technical space. Community members are invited to provide feedback on the recommendation until May 8th [[:m:Talk:Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|on the talk page]].
* The number of available thumbnail size preferences in MediaWiki is being reduced to three standardized options—Small (180px), Regular (250px), and Large (400px), as part of ongoing efforts to improve performance and reduce strain on thumbnail services. As a result, existing preferences will be mapped to the nearest new size (for example, smaller selections like 120px or 150px will render at 180px, while larger ones like 300px or 360px will render at 400px). The preferences interface will soon be updated to reflect these changes, and users who wish to opt out or provide feedback can do so. [https://phabricator.wikimedia.org/T424909]
* From now on, even when a permission expires automatically, users will receive an Echo notification similar to the standard notification for permission changes. There is a difference between this and [[m:Special:MyLanguage/Global reminder bot|Global reminder bot]] in that the latter reminds users a week ''before'' the rights are due to expire, so that they can renew the rights.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the problem where the ULS language selector in [[m:Special:Translate|Special:Translate]] would scroll vertically when it shouldn't, has been resolved. Previously, when users opened the "Translate to English" dropdown and typed certain inputs, the dialog would scroll vertically by a few pixels even when there was enough space to display all results. The dropdown no longer shifts unnecessarily when filtering languages. [https://phabricator.wikimedia.org/T358864]
* The [[m:Special:GlobalWatchlist|Global Watchlist]], which lets you view your watchlists from multiple wikis on a single page, continues to improve. For example, watchlists for Wikibase sites such as [[:d:|Wikidata]] now support [[mw:Special:MyLanguage/Extension:EntitySchema|EntitySchema]] elements for better tracking. The Live Updates mode now refreshes the special page every 60 seconds to comply with the updated [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] for improved real-time responsiveness. Additionally, a directionality bug that displayed links as "changes 3" instead of "3 changes" in mixed-direction lists has been fixed. [https://phabricator.wikimedia.org/T415450][https://phabricator.wikimedia.org/T424422][https://phabricator.wikimedia.org/T418091]
'''Updates for technical contributors'''
* The second phase of [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] has been rolled out to reduce the [[diffblog:2026/03/26/quo-vadis-crawlers-progress-and-whats-next-on-safeguarding-our-infrastructure/|impact of AI crawlers]] and ensure fair, sustainable access to Wikimedia resources, prioritising human and mission-aligned traffic. [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits#Limits|Limits]] have been shifted from per-hour to per-minute, producing smoother traffic patterns and more predictable API load. Community users are not expected to be affected, and no action is required. Early indications show some User-Agent-based requestors are adjusting behaviour, and around 64% of automated API traffic has been identified. Monitoring continues, and Wikimedia Enterprise remains available for commercial support.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.27|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:44, 4 May 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30498077 -->
== Wikipedia translation of the week: 2026-20 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Macau National Security Law]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lei relative à defesa da segurança do Estado projecto.JPG|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Macau National Security Law''' is a law in Macau which prohibits and punishes acts of treason, secession, and subversion against the Central government, as well as preparative acts leading to any of the three acts. Taken into effect on 3 March 2009, the purpose of the law is to fulfil Article 23 of the Macau Basic Law, the de facto constitution of the Macau Special Administration Region.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:53, 11 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30513945 -->
== Tech News: 2026-20 ==
<section begin="technews-2026-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/20|Translations]] are available.
'''Weekly highlight'''
* Community Tech has published [[m:Special:MyLanguage/Community Wishlist/How to write a good wish|new guidance]] explaining how wishes on Community Wishlist are triaged and prioritized. The documentation is intended to help contributors write stronger proposals by clarifying the factors that influence prioritization decisions. Beyond vote counts, the guidance highlights considerations such as potential impact on the community when determining which wishes move forward.
'''Updates for editors'''
* The Reader Growth team is launching an experiment to test a new [[mw:Special:MyLanguage/Readers/Reader_Growth/Share_Card|Share Card feature]] that allows readers to create visually engaging cards from Wikipedia articles or selected article sections and share them online, with each card linking back to the original article to help expand readership and article discovery. The mobile-only A/B test will be available to a portion of readers on Arabic, Chinese, French, Vietnamese, and English Wikipedia to better understand reading and sharing habits, and is scheduled to begin the week of May 18 and run for four weeks.
* The Android and iOS Wikipedia apps recently released the [[mw:Special:MyLanguage/Wikimedia_Apps/Team/25th_Birthday_Reading_Challenge|25-day reading challenge]] into Beta, as part of efforts to drive reader engagement by encouraging users to complete reading milestones. To track their reading streak during the challenge, App users can add a widget featuring Baby Globe to their home screen. The challenge officially begins May 11.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:17}} community-submitted {{PLURAL:17|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the global preference for enabling syntax highlighting in wikitext could unexpectedly disable itself after being turned on, has now been fixed. [https://phabricator.wikimedia.org/T425286]
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The ResourceLoader module <bdi lang="zxx" dir="ltr"><code><nowiki>mediawiki.ui.input</nowiki></code></bdi>, deprecated since [[m:Special:MyLanguage/Tech/News/2023/39|September 2023]], will be removed this week. There is a [[mw:Special:MyLanguage/Codex/Migrating_from_MediaWiki_UI|guide for migrating from MediaWiki UI to Codex]] for any tools that use it. [https://phabricator.wikimedia.org/T420125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.2|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:21, 11 May 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30524429 -->
== Tech News: 2026-21 ==
<section begin="technews-2026-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/21|Translations]] are available.
'''Weekly highlight'''
* The Abstract Wikipedia team has identified five potential pilot wikis to assess their interest in adopting abstract articles on their wikis. The pilots are Malayalam, Bengali, Dagbani, Arabic, and Indonesian Wikipedia. The feedback period will be open until May 22. If your community is interested in becoming a pilot, [[m:Talk:Abstract Wikipedia|let us know on Meta]].
'''Updates for editors'''
* An experiment to show [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists]] to logged-out readers on mobile web will launch on May 18 across German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu Wikipedias, and will run for one month. The effort supports broader goals of helping readers save and organize articles for later reading, while encouraging habits that could lead to future Wikipedia contributions.
* To support a bookmark button in the Reading List beta feature, the "Tools > Action" menu has been updated to display icons, including the watch star indicator that helps editors identify temporarily watched articles. The icons now also match those used on mobile, improving consistency across platforms. The change is currently limited to the actions menu and mainly affects editors with privileged user rights. [https://phabricator.wikimedia.org/T426008]
* [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] was released as an [[w:en:A/B test|A/B test]] for newcomer editors on the mobile website at [[phab:T421189|~15 Wikipedias]]. The experiment will measure the impact that Suggestion Mode has on the proportion of newcomer mobile web edit sessions that result in constructive (un-reverted) article edits. The experiment will also evaluate the feature's impact on editor retention, and monitor changes in revert and block rates.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue in the Wikipedia Android app where images could sometimes fail to load after opening a recommended reading list notification, has now been fixed. [https://phabricator.wikimedia.org/T418231]
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/Wikidata Platform|Wikidata Platform team]] has published its [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/Backend Replacement|backend replacement recommendation]] and accompanying [[wikitech:Wikidata Query Service/WDQS Architecture re-design|technical architecture]] for the migration of the Wikidata Query Service (WDQS) away from Blazegraph. Feedback is invited until May 25th 2026, especially on potential gaps and impacts on advanced use cases. Wikidata community members and WDQS users are also encouraged to help identify high-impact tools and workflows that may need attention on [[d:Wikidata:SPARQL query service/WDQS backend update/High-Impact Use Cases|this page]]. Feedback can be shared on the [[d:Wikidata talk:SPARQL query service/WDQS backend update|Migration talk page]] or during the [[d:Special:MyLanguage/Wikidata:Blazegraph Migration Office Hours|next office hour]]. See the [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|WDP team newsletter]] for more details.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.3|MediaWiki]]
'''In depth'''
* On English, French, Japanese, and a few other Wikipedias, there was a [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|trial of hCaptcha]], a third-party bot detection service. The trial showed that hCaptcha effectively detects and deters some bad-faith automated activity, on its own and by giving [[w:en:Wikipedia:Village pump (technical)/Archive 225#Introducing SuggestedInvestigations|checkusers and stewards]] signals to look into. Because the results were positive, hCaptcha will be rolled out across all wikis over the next few weeks. [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|See the hCaptcha project page]] for technical information about the implementation and privacy protections. [[diffblog:2026/05/04/better-detecting-bots-and-replacing-our-captcha-part-2/|Learn more]].
* The latest Community Tech update is now available, with progress across several Community Wishlist initiatives, including Reading Lists expansion from the mobile app to the website, new language support for "Who Wrote That" and the Personal Dashboard, improvements to 3D rendering and Charts, and upcoming work on talk page sorting, audio playback, and editing workflows. The update also shares current priorities, wishlist status trends, and opportunities for community feedback on future focus areas and the Wikimedia Foundation’s 2026–2027 Annual Plan. [[m:Special:MyLanguage/Community Wishlist/Updates#May 13, 2026: Latest updates from the Community Tech team|Read the full newsletter for details]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W21"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:22, 18 May 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30539262 -->
== Wikipedia translation of the week: 2026-21 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Stela of the cactus bearer]]'''<br /> <small>''([[:es:Estela del portador del cactus]]) ([[:ca:Estela del portador del cactus]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Estela Wachumero en Chavin.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''stela of the cactus bearer''' is a monolith or stele of a single piece of granite, belonging to the Chavín culture of ancient Peru, which remains in its original location on the northwest side of the circular plaza at the archaeological site known as the ceremonial center of Chavín de Huántar in the Ancash region of Peru. It was discovered during the 1972 excavation season by Peruvian archaeologist Luis Guillermo Lumbreras.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 04:05, 21 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30529698 -->
== Wikipedia translation of the week: 2026-22 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Griffith Hughes]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The Reverend '''Griffith Hughes''' (1707 – c.1758), FRS, was a Welsh naturalist, clergyman, and author. Hughes wrote The Natural History of Barbados, which included the first description of the grapefruit (also known as "The Forbidden Fruit"). His work was praised by Linnaeus, but it has also been considered a "scientific fraud".
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:32, 25 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30529698 -->
== Tech News: 2026-22 ==
<section begin="technews-2026-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/22|Translations]] are available.
'''Weekly highlight'''
* Following a [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#LOWM|successful account creation experiment]], an improved logged-out edit warning message will be deployed to all Wikimedia wikis in the first week of June. The change will only affect logged-out users on mobile web who open an editing session. The updated experience is designed to encourage account creation more clearly, while still allowing users to edit with temporary accounts. Results from the experiment showed a significant increase in account creation, with a 27% relative lift among users shown the updated message. As expected, as more people funnel into account creation, temporary accounts decreased by a relative 16%. The experiment did not show any significant changes in constructive edit rates or other monitored contributor metrics. [https://phabricator.wikimedia.org/T424595]
'''Updates for editors'''
* For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Members of these groups will be unable to disable the last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the next few weeks, users without 2FA will be removed from these groups. Notably, this applies to bureaucrats. See the linked tasks for deployment schedules. [https://phabricator.wikimedia.org/T423119][https://phabricator.wikimedia.org/T423120]
* [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] will run an [[w:en:A/B testing|A/B test]] on [[:phab:T415904|10 wikis]], testing [[m:WMDE Technical Wishes/References/Reference Previews|potential improvements for Reference Previews]]. The experiment will run for ~2 weeks at the end of May / beginning of June and will affect 10% of desktop readers on the participating wikis.
* After two successful experiments, the Reader Growth team is rolling out an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature for all Wikipedias on mobile on May 25. This means that anyone who has all beta features on by default will start to see this feature, and others can check the box to turn it on in their preferences. The beta feature will include a carousel of all an article's images at the top of the article, with controls for editors to [[mw:Readers/Reader_Growth/Image_Browsing#Phase_2.1_beta_feature|exclude images from the article's carousel or to exclude an article from the feature entirely]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, three dimensional STL files were being rendered incorrectly by the media viewer 3D extension which is now fixed. [https://phabricator.wikimedia.org/T416723]
'''Updates for technical contributors'''
* The legacy CSS classes <bdi lang="zxx" dir="ltr"><code><nowiki>tleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>tright</nowiki></code></bdi> have been replaced with <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> as the former do not work consistently across all MediaWiki platforms, notably mobile web and mobile apps. Projects relying on these classes are encouraged to review related usage and plan for migration. Please note that <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> may also be deprecated in future, although there are currently no plans to do so. [[phab:T426452|Read more]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.4|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:52, 25 May 2026 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30584502 -->
== Wikipedia translation of the week: 2026-23 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Umuganda]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Umuganda"Rwandan community work".jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Umuganda''' is a national holiday in Rwanda taking place on the last Saturday of every month for mandatory nationwide community service from 08:00 to 11:00. Participation in Umuganda is required by law; failure to participate can result in a fine.
The program was most recently re-established under President Paul Kagame in 2009, having resulted in a notable improvement in the cleanliness of Rwanda. Also, there are other informal Umuganda day activities that occur in the middle of the month. These activities are initiated by either society or the government.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:55, 1 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30529698 -->
== Tech News: 2026-23 ==
<section begin="technews-2026-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/23|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] is conducting an experiment to show the [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|reading lists]] feature, which is still in development, to logged-out mobile readers to test whether it encourages account creation at a higher rate compared to the watchstar button. The [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists#Experiment timeline|experiment]] was launched on May 18th on German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu wikis, and it will run for a month.
* The Wikimedia Apps team released [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh/Phase 1|Phase 1]] of the redesigned Home Feed to the Android Beta app. The new Home Feed includes a refreshed "Community" tab and a personalized "For You" tab featuring daily updated reading recommendations. The redesign is part of a broader effort to improve content discovery and create more engaging learning experiences in the Wikipedia apps.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:18}} community-submitted {{PLURAL:18|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where images could fail to load for some suggested edits on [[w:Special:Homepage|Special:Homepage]], leaving the thumbnail stuck in a loading state, has now been fixed. [https://phabricator.wikimedia.org/T424048]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.5|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:09, 1 June 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30613639 -->
== Wikipedia translation of the week: 2026-24 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Juryeonggu]]'''<br /> <small>''([[:kr:주령구]]) ([[:ja:酒令具]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:주령구의 발굴 당시 사진.png|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''Juryeonggu''' (주령구?, 酒令具?, JuryeongguLR, ChuryŏngguMR) è un dado a 14 facce, risalente al periodo del Silla unificato (668-935 d.C.), ritrovato nel 1975 dopo alcuni scavi occorsi presso il Donggung e lo stagno Wolji di Gyeongju, in Corea del Sud. Le facce del dado mostravano inscrizioni recanti varie penalità o sfide, legate ad un gioco di bevute, dimostrando l'importanza dell'alcool e la raffinatezza con cui la sua assunzione veniva celebrata.
L'artefatto originale è andato perduto, incendiato in un maldestro tentativo di preservazione: oggi ne esistono delle repliche, disponibili anche commercialmente.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:20, 8 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30622359 -->
== Tech News: 2026-24 ==
<section begin="technews-2026-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/24|Translations]] are available.
'''Weekly highlight'''
* Wikimedia Enterprise has increased the free usage limits for its API offerings. The monthly request limit for the On-demand API has increased from 5,000 to 50,000 requests, while the Snapshot API limit has increased from 15 to 30 requests per month. In addition, Structured Contents snapshots are now available for free accounts. These changes expand access to Wikimedia Enterprise data for developers, researchers, and organizations using Wikimedia content. [https://enterprise.wikimedia.com/blog/enhanced-free-api]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|refreshed Explore Feed]], now called the Home Feed, is rolling out to 50% of users of the Wikipedia Android app. The Home Feed helps readers discover relevant content through two new tabs: ''Community'' and ''For You''. The Community tab provides a scrollable feed of curated content and updates from the broader Wikimedia community and movement, while the ''For You'' tab offers a full-screen, swipeable experience that shows content tailored to a user's interests. The redesign is part of a broader effort to improve discovery and enhance the learning experience in the Wikipedia app.
* The [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|Which came first?]] daily trivia game is now available in the beta version of the Wikipedia iOS app in English, German, French, Portuguese, Russian, Spanish, Arabic, Chinese, and Turkish. The game uses historical events from Wikipedia's "On This Day" content and challenges readers to guess which of two events happened first. The game was previously released on Android. Communities interested in making the game available in their languages can [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|read the instructions and requirements]].
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new MediaWiki feature that allows editors to reuse references with different details, will begin rolling out to Wikimedia wikis following a successful pilot phase. Deployment will start on 8 June for most [[wikitech:Deployments/Train#Wednesday|Group 1 wikis]] and French Wikipedia, with additional Wikipedia language editions receiving the feature over the coming months. Communities are encouraged to prepare by checking for [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate untranslated Cite extension messages] in their language and reviewing any use of [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]], which may require [[:phab:T416304#11668731|updates]] to support the new functionality. Wikis using [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] do not need to take any action. Communities may also wish to create the ''cite-tracking-category-ref-details'' [[Special:TrackingCategories|tracking category]] as a hidden category using <code><nowiki>__HIDDENCAT__</nowiki></code> (or a dedicated template), and connect it to the corresponding Wikidata item [[d:Q129764848]]. [https://phabricator.wikimedia.org/T425662]
* The [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|Page Previews experiment]] on mobile web has concluded. The team decided not to roll out the feature after the results showed no statistically significant impact on reader retention, as the primary success metric was retention improvement. Page Previews, which are already available on desktop and in the apps, display a thumbnail, lead paragraph, and link to the full article when readers tap a blue link. The experiment tested this experience on mobile web across six Wikipedias.
* The [[mw:Special:MyLanguage/Codex/Design/Icons|user interface icon library]] will be [[phab:T399175|updated later this week or next week]]. Most of the ~300 icons have been slightly refined and ~30 new icons have been added. These changes improve the icons to make them more consistent and comprehensible, and provide more visual balance when they are used in groups.
* The [[mw:Special:MyLanguage/Universal Language Selector|Universal Language Selector]] (ULS) interface in MediaWiki, which helps users select content in other languages, has been updated. The new version improves speed and accessibility, and users of Wikimedia projects can now pin languages for quicker language switching. The deployment to Wikimedia sites will happen gradually in the coming weeks. You can test it now as a beta feature by selecting [[Special:Preferences#mw-prefsection-betafeatures|beta features]] in your profile preferences and share your feedback on [[mw:Special:MyLanguage/Universal Language Selector/New ULS|the project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the Pageviews Analysis dashboard on pageviews.wmcloud.org stopped updating graph data in May 2026, affecting all users, has been fixed. [https://phabricator.wikimedia.org/T427171]
'''Updates for technical contributors'''
* The function signature for <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> has been simplified. Developers can now pass a configuration object instead of a list of positional parameters when creating portlet links. The previous function signature remains supported for backwards compatibility. For example, instead of: <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi> use <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Script maintainers are encouraged to review existing uses of <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> and update them where appropriate. This change will be available on all wikis from 11 June. Thanks to community volunteer Gerges for contributing this improvement. [https://phabricator.wikimedia.org/T427945]
* '''Community Wishlist discussion''': Product & Technology [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|introduced changes]] meant to increase the number and complexity of wishes fulfilled, including the disbanding of the Community Tech team. They are [[m:Special:MyLanguage/Community Wishlist/Updates|engaging in discussions]] about a [[m:Talk:Community Wishlist#Proposed direction for Wishlist|proposed direction for the wishlist]] from community members. Includes ways to structure annual voting, better tracking of wishes, removing focus areas, and [[m:Special:MyLanguage/Community Wishlist/Updates|staffing updates]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.6|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:30, 8 June 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 -->
== Wikipedia translation of the week: 2026-25 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cape Fiolent]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Beach of Cape Fiolent, Crimea.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Cape Fiolent''' (Crimean Tatar: Felenk Burun; Ukrainian: Фіолент; Russian: Фиолент; Latin: Parthenium), also historically called Cape Fiolente, is a cape and nature reserve (zakaznik) located in southern Sevastopol, a city within Crimea that is internationally recognised as part of Ukraine but currently occupied by Russia since 2014.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:24, 15 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30662919 -->
== Tech News: 2026-25 ==
<section begin="technews-2026-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/25|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Readers/Reader Growth|Reader Growth team]] has launched an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature on the mobile web version of all Wikipedias. The feature shows an image carousel at the top of articles with 3 or more images. Editors can configure this feature with the following controls: to hide a specific image from a page, either use <code>class=notpageimage</code> excluding it from thumbnail previews, or <code>class=noviewer</code> excluding it from MediaViewer. The carousel can also be disabled from a page entirely, with the magic word <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. To submit feedback or flag bugs, please visit the [[mw:Talk:Readers/Reader Growth/Image Browsing|project page]].
* [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitables]] can now be [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|sorted in descending order]] on the first click by adding <code dir=ltr>data-sort-order="desc"</code> to the header cell. Previously, by default, clicking a column header for the first time sorts it in ascending order. This addition to a Wikitable gives it more control and flexibility, while the default behavior for subsequent clicks remains unchanged. [https://phabricator.wikimedia.org/T398416]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature is currently being tested with some editors creating new articles on the Simple English, French, and Turkish Wikipedias. The experiment will soon begin on the Arabic and Bangla Wikipedias as well. [[w:simple:Special:NewArticle|This feature]] gives editors community-curated guidance to help them create articles that follow community standards. Experienced editors can continue creating or adapting outlines for specific article types that are commonly created by less experienced contributors. The outlines guide less experienced editors in creating high-quality articles. A quick guide to markups used in outlines can be found on [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|this page]]. [[w:simple:Wikipedia:Article Guidance|Example outlines]] that can be adapted and instructions for how to adapt them are on [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|this section]] of the project page.
* Wikis that wish to replace the "indefinitely" button in Special:Block for temporary accounts (for example, wikis that block temporary users only until account expiration) will be able to do so by creating [[MediaWiki:ipb-indefinite-expiry-temporary-account]] with the block duration they want. [https://phabricator.wikimedia.org/T427125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:41}} community-submitted {{PLURAL:41|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* By the end of June, a valid user-agent string will be required for automated dumps downloads from the dumps.wikimedia.org website. Automated requests that provide a generic or empty user-agent will be blocked. This [[phab:T400119|extends enforcement]] of the long standing [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|user-agent policy]]. Access to dumps through Wikimedia Cloud Services will not change.
* The roll out of global [[mw:Wikimedia APIs/Rate limits|API rate limits]] is now complete, with limits enforced across all APIs and at the documented levels for all groups. Bots running in Toolforge/WMCS or with the bot user right on any wiki remain exempt. All bots should continue to follow the documented best practices to avoid being rate limited.
* The [https://api.wikimedia.org/wiki/Main_Page API Portal wiki] will be read only starting this week (June 15-18). The following week (June 22-25), all API Portal wiki URLs will redirect to [[mw:Wikimedia APIs|Wikimedia APIs on mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]]
'''Meetings and events'''
* On June 17th at 6pm UTC the WMF will be holding Discord call focused on a code review. We've heard through the [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Developer Satisfaction Survey]] that volunteers are struggling with code review and we'd like to discuss these experiences with the goal of surfacing workable solutions. You can join the call [https://discord.gg/wikipedia?event=1514727511102062664 via the Wikimedia Community Discord server].
* The [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Latin American Wikimedia Conference]] will host a regional hackathon that will bring together the Wikimedia movement’s technical community including developers, system administrators, data scientists, and users with extended rights. Interested technical contributors can [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform apply for a scholarship] to participate until June 21 at midnight (Bolivia time, UTC-4).
* Sign up for Wikimania Team Challenges to join this special event. The Team challenges will take place online and in person from July 21 to 22, before Wikimania conference. Everyone is welcome, regardless of skills or Wikimania registration. Teams will work on 10 important challenges supporting the Wikimedia community. For details, visit [[wmania:Special:MyLanguage/2026:Team challenges|the Team Challenges page]] and [https://wikimedia.eventyay.com/wm/teamchallenges/ register there]. Registration closes on June 20th at 11pm UTC.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:49, 15 June 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 -->
== Wikipedia translation of the week: 2026-26 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Renovating Action Party]]'''<br /> <small>''([[:es:Partido de Acción Renovadora]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Flag of the Renovating Action Party.svg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Renovating Action Party''' was a left-wing Salvadoran political party that existed from 1944 to 1967. The party had three distinct phases of its existence under the leaderships of Colonel José Asencio Menéndez (1944–1950), the old line (1950–1964), and the new line (1964–1967).
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:52, 22 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30717601 -->
== Tech News: 2026-26 ==
<section begin="technews-2026-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/26|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Growth/Feature summary|Growth features]] are [[phab:T418115|now available at Wikidata]]. This update enables access to Mentorship ([[mw:Special:MyLanguage/Help:Growth/Mentorship|if configured]]), Impact module, the Help Panel, and a simplified Newcomer Homepage (without Suggested Edits). Wikidata administrators are still configuring the features through Community Configuration.
'''Updates for editors'''
* The special page [[{{#special:RangeCalculator}}]] has been created. It allows users to find an IP range without needing to rely on external tools. Until now, this tool was only available to CheckUsers. [https://phabricator.wikimedia.org/T268429]
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]] is a new MediaWiki feature that allows editors to reuse references with different details. It will be deployed to most small and medium-sized Wikipedia language versions on June 23. The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|FAQ]] lists possible actions to take on your wiki to support the deployment. Check the [[:phab:T414094|rollout plan]] for the next deployment steps. [https://phabricator.wikimedia.org/T428902]
* Starting next week, users will get a notification when they are blocked or unblocked from editing, or if this block changes. [https://phabricator.wikimedia.org/T100974]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Starting next week, abuse filters that are set to "require CAPTCHA verification" will begin to also affect users with the <code>skipcaptcha</code> right, which includes most autoconfirmed users. Bots are exempted. This change only affects edits that trigger an abuse filter. The <code>skipcaptcha</code> right will continue to exempt users from having to solve CAPTCHAs in the ordinary course of using the wikis. [https://phabricator.wikimedia.org/T402595]
* Reference documentation for the [[wikitech:Machine_Learning/LiftWing/API|Lift Wing API]] has moved from the API Portal to the interactive [https://wikitech.wikimedia.org/w/index.php?api=lift-wing&title=Special%3ARestSandbox REST Sandbox].
* The API Portal wiki is now closed. For API documentation, see [[mw:Special:MyLanguage/Wikimedia_APIs|Wikimedia APIs on mediawiki.org]]. All API Portal wiki URLs (https://api.wikimedia.org/wiki/) will redirect to the mediawiki.org page starting June 22. [https://phabricator.wikimedia.org/T427537]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.8|MediaWiki]]
'''Meetings and events'''
* Join an online call on 25 June at 2:30pm UTC to meet the current Wikimedia interns for [[mw:Google_Summer_of_Code/2026|Google Summer of Code]] and [[mw:Outreachy/Round_32|Outreachy]]. Interns will provide an overview of their projects and a brief demo of their work so far. Attendees are encouraged to [[mw:event:Google_Summer_of_Code/Summer_2026_June_Internship_open_session|share ideas and connections in their community]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:05, 23 June 2026 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30722494 -->
== Wikipedia translation of the week: 2026-27 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Facial age estimation]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Facial age estimation''' is the use of artificial intelligence to estimate the age of a person based on their facial features. Computer vision techniques are used to analyse the facial features in the images of millions of people whose age is known and then deep learning is used to create an algorithm that tries to predict the age of an unknown person. The key use of the technology is to prevent access to age-restricted goods and services. Examples include restricting children from accessing internet pornography, checking that they meet a mandatory minimum age when registering for an account on social media, or preventing adults from accessing websites, online chat or games designed only for use by children.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:44, 29 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30717601 -->
5g19mb6ekq6jp7f2q9esx2mhu94y7rx
4641671
4641593
2026-06-29T11:48:37Z
MediaWiki message delivery
1188004
/* Tech News: 2026-27 */ new section
4641671
wikitext
text/x-wiki
<noinclude>
{{User:Xeverything11/tabs}}
{{User:Xeverything11/header|Welcome to|Xeverything11's|updates talk page!|archives=
* [[User talk:Xeverything11/archives/2022|2022]]
* [[User talk:Xeverything11/archives/2023|2023]]
}}
</noinclude>
__NOTOC__
{{User:MiszaBot/config
|archive = User talk:Xeverything11/archives/%(year)d
|algo = old(60d)
|counter = 1
|minthreadsleft = 1
|minthreadstoarchive = 1
}}
== Tech News: 2023-03 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/03|Translations]] are available.
'''Problems'''
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] The URLs in "{{int:last}}" links on page history now contain <bdi lang="zxx" dir="ltr"><code><nowiki>diff=prev&oldid=[revision ID]</nowiki></code></bdi> in place of <bdi lang="zxx" dir="ltr"><code><nowiki>diff=[revision ID]&oldid=[revision ID]</nowiki></code></bdi>. This is to fix a problem with links pointing to incorrect diffs when history was filtered by a tag. Some user scripts may break as a result of this change. [https://phabricator.wikimedia.org/T243569]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.19|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-01-17|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-01-18|en}}. It will be on all wikis from {{#time:j xg|2023-01-19|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* Some [[mw:Special:MyLanguage/Talk pages project/Usability|changes to the appearance of talk pages]] have only been available on <code>{{ns:1}}:</code> and <code>{{ns:3}}:</code> namespaces. These will be extended to other talk namespaces, such as <code>{{ns:5}}:</code>. They will continue to be unavailable in non-talk namespaces, including <code>{{ns:4}}:</code> pages (e.g., at the Village Pump). You can [[Special:Preferences#mw-prefsection-editing-discussion|change your preferences]] ([[Special:Preferences#mw-prefsection-betafeatures|beta feature]]). [https://phabricator.wikimedia.org/T325417]
*On Wikisources, when an image is zoomed or panned in the Page: namespace, the same zoom and pan settings will be remembered for all Page: namespace pages that are linked to a particular Index: namespace page. [https://gerrit.wikimedia.org/r/c/mediawiki/extensions/ProofreadPage/+/868841]
* The Vector 2022 skin will become the default for the English Wikipedia desktop users. The change will take place on January 18 at 15:00 UTC. [[:en:w:Wikipedia:Vector 2022|Learn more]].
'''Future changes'''
* The 2023 edition of the [[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey]], which invites contributors to make technical proposals and vote for tools and improvements, starts next week on 23 January 2023 at 18:00 UTC. You can start drafting your proposals in [[m:Community Wishlist Survey/Sandbox|the CWS sandbox]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:11, 17 January 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24381020 -->
== Tech News: 2023-04 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/04|Translations]] are available.
'''Problems'''
* Last week, for ~15 minutes, all wikis were unreachable for logged-in users and non-cached pages. This was caused by a timing issue. [https://wikitech.wikimedia.org/wiki/Incidents/2023-01-17_MediaWiki]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.20|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-01-24|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-01-25|en}}. It will be on all wikis from {{#time:j xg|2023-01-26|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* If you have the Beta Feature for [[mw:Special:MyLanguage/Talk pages project|DiscussionTools]] enabled, the appearance of talk pages will add more information about discussion activity. [https://www.mediawiki.org/wiki/Special:MyLanguage/Talk_pages_project/Usability#Status][https://phabricator.wikimedia.org/T317907]
* The 2023 edition of the [[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey]] (CWS), which invites contributors to make technical proposals and vote for tools and improvements, starts on Monday 23 January 2023 at [https://zonestamp.toolforge.org/1674496814 18:00 UTC].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:46, 23 January 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24418874 -->
== Tech News: 2023-05 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/05|Translations]] are available.
'''Problems'''
* Last week, for ~15 minutes, some users were unable to log in or edit pages. This was caused by a problem with session storage. [https://wikitech.wikimedia.org/wiki/Incidents/2023-01-24_sessionstore_quorum_issues]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.21|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-01-31|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-01|en}}. It will be on all wikis from {{#time:j xg|2023-02-02|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
'''Future changes'''
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] Wikis that use localized numbering schemes for references need to add new CSS. This will help to show citation numbers the same way in all reading and editing modes. If your wiki would prefer to do it yourselves, please see the [[mw:Special:MyLanguage/Parsoid/Parser Unification/Cite CSS|details and example CSS to copy from]], and also add your wiki to the list. Otherwise, the developers will directly help out starting the week of February 5.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:06, 31 January 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24455949 -->
== Wikipedia translation of the week: 2023-06 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sweden Finns' Day]] '''<br /> <small>''([[:fi:Ruotsinsuomalaisten päivä]]) ([[:sv:Sverigefinnarnas dag]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sverigefinskaflaggan.svg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Sweden Finns' Day''' (Finnish: Ruotsinsuomalaisten päivä, Swedish: Sverigefinnarnas dag) is an anniversary celebrated in Sweden on 24 February. The anniversary of the calendar was approved by the Swedish Academy in 2010 and was celebrated for the first time in 2011. February 24 was chosen as the birthday of Carl Axel Gottlund, a collector of folk poetry and a defender of the status of the Finnish language. The purpose of the day is to celebrate the Sweden Finns and to recognize their history, language and culture as a prominent part of Sweden's cultural heritage.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:04, 6 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24491747 -->
== Tech News: 2023-06 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/06|Translations]] are available.
'''Recent changes'''
* In the [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements|Vector 2022 skin]], logged-out users using the full-width toggle will be able to see the setting of their choice even after refreshing pages or opening new ones. This only applies to wikis where Vector 2022 is the default. [https://phabricator.wikimedia.org/T321498]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.22|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-08|en}}. It will be on all wikis from {{#time:j xg|2023-02-09|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* Previously, we announced when some wikis would be in read-only for a few minutes because of a switch of their main database. These switches will not be announced any more, as the read-only time has become non-significant. Switches will continue to happen at 7AM UTC on Tuesdays and Thursdays. [https://phabricator.wikimedia.org/T292543#8568433]
* Across all the wikis, in the Vector 2022 skin, logged-in users will see the page-related links such as "What links here" in a [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Features/Page_tools|new side menu]]. It will be displayed on the other side of the screen. This change had previously been made on Czech, English, and Vietnamese Wikipedias. [https://phabricator.wikimedia.org/T328692]
*[[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey 2023]] will stop receiving new proposals on [https://zonestamp.toolforge.org/1675706431 Monday, 6 February 2023, at 18:00 UTC]. Proposers should complete any edits by then, to give time for [[m:Special:MyLanguage/Community_Wishlist_Survey/Help_us|translations]] and review. Voting will begin on Friday, 10 February.
'''Future changes'''
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] Gadgets and user scripts will be changing to load on desktop and mobile sites. Previously they would only load on the desktop site. It is recommended that wiki administrators audit the [[MediaWiki:Gadgets-definition|gadget definitions]] prior to this change, and add <bdi lang="zxx" dir="ltr"><code>skins=…</code></bdi> for any gadgets which should not load on mobile. [https://phabricator.wikimedia.org/T328610 More details are available].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 10:21, 6 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24491749 -->
== Wikipedia translation of the week: 2023-07 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Delivery robot]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Woman Takes Groceries from Dax Delivery Robot.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
A '''delivery robot''' is an autonomous robot that provides "last mile" delivery services. An operator may monitor and take control of the robot remotely in certain situations that the robot cannot resolve by itself such as when it is stuck in an obstacle. Delivery robots can be used in different settings such as food delivery, package delivery, hospital delivery, and room service.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:26, 13 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24515453 -->
== Tech News: 2023-07 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/07|Translations]] are available.
'''Problems'''
* On wikis where patrolled edits are enabled, changes made to the [[mw:Special:MyLanguage/Growth/Communities/How to configure the mentors' list|mentor list]] by autopatrolled mentors are not correctly marked as patrolled. It will be fixed later this week. [https://phabricator.wikimedia.org/T328444]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-15|en}}. It will be on all wikis from {{#time:j xg|2023-02-16|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* The Reply tool and other parts of [[mw:Special:MyLanguage/Help:DiscussionTools#Mobile|DiscussionTools]] will be deployed for all editors using the mobile site. You can [[mw:Special:MyLanguage/Talk_pages_project/Mobile#Status_Updates|read more about this decision]]. [https://phabricator.wikimedia.org/T298060]
'''Future changes'''
* All wikis will be read-only for a few minutes on March 1. This is planned for [https://zonestamp.toolforge.org/1677679222 14:00 UTC]. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T328287][https://phabricator.wikimedia.org/T327920][https://wikitech.wikimedia.org/wiki/Deployments]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:49, 14 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24540832 -->
== Wikipedia translation of the week: 2023-08 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Buddha Dhatu Jadi]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Swarno Mandir.JPG|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Buddha Dhatu Jadi''' (Bengali: বুদ্ধ ধাতু জাদি; Burmese: ဗုဒ္ဓဓာတုစေတီ also known as the Bandarban Golden Temple) is located close to Balaghata town, in Bandarban City, in Bangladesh. Dhatu are the material remains of a holy person, and in this temple the relics belong to Buddha. It is the largest Theravada Buddhist temple in Bangladesh and has the second-largest Buddha statue in the country.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:18, 20 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24581813 -->
== Tech News: 2023-08 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/08|Translations]] are available.
'''Problems'''
* Last week, during planned maintenance of Cloud Services, unforeseen complications forced the team to turn off all tools for 2–3 hours to prevent data corruption. Work is ongoing to prevent similar problems in the future. [https://phabricator.wikimedia.org/T329535]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-21|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-02-22|en}}. It will be on all wikis from {{#time:j xg|2023-02-23|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
*The voting phase for the [[m:Special:MyLanguage/Community Wishlist Survey 2023|Community Wishlist Survey 2023]] ends on [https://zonestamp.toolforge.org/1677261621 24 February at 18:00 UTC]. The results of the survey will be announced on 28 February.
'''Future changes'''
* All wikis will be read-only for a few minutes on March 1. This is planned for [https://zonestamp.toolforge.org/1677679222 14:00 UTC]. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T328287][https://phabricator.wikimedia.org/T327920][https://wikitech.wikimedia.org/wiki/Deployments]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:58, 21 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24570514 -->
== Wikipedia translation of the week: 2023-09 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Alina Scholtz]] '''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Alina Scholtz''' (24 September 1908 – 25 February 1996) was a Polish landscape architect, known as one of country's pioneers in developing the field. Throughout her career she worked on various public and private projects for cemeteries, parks and green spaces. Some of her most noted works include the grounds of a villa on Kielecka Street in Warsaw for which she won a Silver Medal at the 1937 World Exhibition in Paris, the memorial cemetery to the victims of the Palmiry massacre, and landscaping projects along the East-West traffic route of Warsaw. In addition to her design work, she served as one of the founding members of the International Federation of Landscape Architects.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:04, 27 February 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24617511 -->
== Tech News: 2023-09 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/09|Translations]] are available.
'''Problems'''
* Last week, in some areas of the world, there were problems with loading pages for 20 minutes and saving edits for 55 minutes. These issues were caused by a problem with our caching servers due to unforseen events during a routine maintenance task. [https://wikitech.wikimedia.org/wiki/Incidents/2023-02-22_wiki_outage][https://wikitech.wikimedia.org/wiki/Incidents/2023-02-22_read_only]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.25|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-02-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-01|en}}. It will be on all wikis from {{#time:j xg|2023-03-02|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* All wikis will be read-only for a few minutes on March 1. This is planned for [https://zonestamp.toolforge.org/1677679222 14:00 UTC]. [https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:47, 27 February 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24634242 -->
== Wikipedia translation of the week: 2023-10 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Mary Nzimiro]] '''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Mary Nzimiro''', birthname Mary Nwametu Onumonu, MBE (1898–1993) was a pioneering Nigerian businesswoman, politician and women's activist. In 1948, she was appointed principal representative of the United Africa Company (UAC) for Eastern Nigeria, while maintaining textile and cosmetics retail outlets of her own in Port Harcourt, Aba and Owerri. By the early 1950s, she was among the richest individuals in West Africa, becoming a resident of the exclusive Bernard Carr Street in Port Harcourt. On the political front, she was a member of the influential National Council of Nigeria and the Cameroons, becoming a member of its executive committee in 1957 and vice-president of the NCNC Estern Women's Association in 1962. During the Nigerian Civil War (1967–1970), she organized Igbo women in support of the Biafrans. As a result she lost most of her property in Port Harcourt and returned to her native Oguta where she died in 1993.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:47, 6 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24636259 -->
== Tech News: 2023-10 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/10|Translations]] are available.
'''Recent changes'''
* The Community Wishlist Survey 2023 edition has been concluded. Community Tech has [[m:Special:MyLanguage/Community Wishlist Survey 2023/Results|published the results]] of the survey and will provide an update on what is next in April 2023.
* On wikis which use [[mw:Special:MyLanguage/Writing_systems|LanguageConverter]] to handle multiple writing systems, articles which used custom conversion rules in the wikitext (primarily on Chinese Wikipedia) would have these rules applied inconsistently in the table of contents, especially in the Vector 2022 skin. This has now been fixed. [https://phabricator.wikimedia.org/T306862]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.26|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-08|en}}. It will be on all wikis from {{#time:j xg|2023-03-09|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* A search system has been added to the [[Special:Preferences|Preferences screen]]. This will let you find different options more easily. Making it work on mobile devices will happen soon. [https://phabricator.wikimedia.org/T313804]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:50, 6 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24676916 -->
== Wikipedia translation of the week: 2023-11 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Elizabeth Langdon Williams]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Elizabeth Langdon Williams.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Elizabeth Langdon Williams''' (February 8, 1879 in Putnam, Connecticut – 1981 in Enfield, New Hampshire) was an American human computer and astronomer whose work helped lead to the discovery of Pluto, or Planet X.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:21, 13 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24700408 -->
== Tech News: 2023-11 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/11|Translations]] are available.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.40/wmf.27|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-15|en}}. It will be on all wikis from {{#time:j xg|2023-03-16|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-cbk_zamwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cdowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cebwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-chwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-chrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-chywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ckbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-csbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cuwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-itwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T304542][https://phabricator.wikimedia.org/T304550]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:20, 13 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24700189 -->
== Wikipedia translation of the week: 2023-12 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:I Didn't Raise My Boy to Be a Soldier]] '''<br /> </div>
Please be bold and help translate this article!
----
[[File:Peerless Quartet - I Didn't Raise my Boy to be a Soldier.ogg|300px|center]]
<div style="text-align:left; padding: .4em;">
an American anti-war song that was influential within the pacifist movement that existed in the United States before it entered World War I.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:31, 20 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24720571 -->
== Tech News: 2023-12 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/12|Translations]] are available.
'''Problems'''
* Last week, some users experienced issues loading image thumbnails. This was due to incorrectly cached images. [https://phabricator.wikimedia.org/T331820]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.1|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-21|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-22|en}}. It will be on all wikis from {{#time:j xg|2023-03-23|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] A link to the user's [[{{#special:CentralAuth}}]] page will appear on [[{{#special:Contributions}}]] — some user scripts which previously added this link may cause conflicts. This feature request was [[:m:Community Wishlist Survey 2023/Admins and patrollers/Add link to CentralAuth on Special:Contributions|voted #17 in the 2023 Community Wishlist Survey]].
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The [[{{#special:AbuseFilter}}]] edit window will be resizable and larger by default. This feature request was [[:m:Community Wishlist Survey 2023/Anti-harassment/Make the AbuseFilter edit window resizable and larger by default|voted #80 in the 2023 Community Wishlist Survey]].
* There will be a new option for Administrators when they are unblocking a user, to add the unblocked user’s user page to their watchlist. This will work both via [[{{#special:Unblock}}]] and via the API. [https://phabricator.wikimedia.org/T257662]
'''Meetings'''
* You can join the next meeting with the Wikipedia mobile apps teams. During the meeting, we will discuss the current features and future roadmap. The meeting will be on [https://zonestamp.toolforge.org/1679677204 24 March at 17:00 (UTC)]. See [[mw:Special:MyLanguage/Wikimedia Apps/Office Hours|details and how to join]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:26, 21 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24732558 -->
== Wikipedia translation of the week: 2023-13 {{User:Xeverything11/tags/updates}} ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:es:Diana Aguavil]]'''<br /> <small>''([[:en:Diana Aguavil]]) ([[:pt:Diana Aguavil]]) ''</small> </div>
Please be bold and help translate this article!
----
[[File:Diana Aguavil.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Diana Alexandra Aguavil Calazacón''' (born 7 August 1983) is an Ecuadorian indigenous leader, since 25 August 2018, the first female governor of the Tsáchila nationality after 104 years of male administrations and winning the 2018 Tsáchila election. She was also the second woman to become a candidate.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:39, 27 March 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24758626 -->
== Tech News: 2023-13 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/13|Translations]] are available.
'''Recent changes'''
* The [[:mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilter]] condition limit was increased from 1000 to 2000. [https://phabricator.wikimedia.org/T309609]
* [[:m:Special:MyLanguage/Global AbuseFilter#Locally disabled actions|Some Global AbuseFilter]] actions will no longer apply to local projects. [https://phabricator.wikimedia.org/T332521]
* Desktop users are now able to subscribe to talk pages by clicking on the {{int:discussiontools-newtopicssubscription-button-subscribe-label}} link in the {{int:toolbox}} menu. If you subscribe to a talk page, you receive [[mw:Special:MyLanguage/Notifications|notifications]] when new topics are started on that talk page. This is separate from putting the page on your watchlist or subscribing to a single discussion. [https://phabricator.wikimedia.org/T263821]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.2|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-03-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-03-29|en}}. It will be on all wikis from {{#time:j xg|2023-03-30|en}} ([[mw:MediaWiki 1.40/Roadmap|calendar]]).
'''Future changes'''
* You will be able to choose [[mw:Special:MyLanguage/VisualEditor/Diffs|visual diffs]] on all [[m:Special:MyLanguage/Help:Page history|history pages]] at the Wiktionaries and Wikipedias. [https://phabricator.wikimedia.org/T314588]
* [[File:Octicons-tools.svg|15px|link=|alt=|Advanced item]] The legacy [[mw:Mobile Content Service|Mobile Content Service]] is going away in July 2023. Developers are encouraged to switch to Parsoid or another API before then to ensure service continuity. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/4MVQQTONJT7FJAXNVOFV3WWVVMCHRINE/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:14, 28 March 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24780854 -->
== Tech News: 2023-14 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/14|Translations]] are available.
'''Recent changes'''
* The system for automatically creating categories for the [[mw:Special:MyLanguage/Extension:Babel|Babel]] extension has had several important changes and fixes. One of them allows you to insert templates for automatic category descriptions on creation, allowing you to categorize the new categories. [https://phabricator.wikimedia.org/T211665][https://phabricator.wikimedia.org/T64714][https://phabricator.wikimedia.org/T170654][https://phabricator.wikimedia.org/T184941][https://phabricator.wikimedia.org/T33074]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.3|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-04|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-05|en}}. It will be on all wikis from {{#time:j xg|2023-04-06|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Some older [[w:en:Web browser|Web browsers]] will stop being able to use [[w:en:JavaScript|JavaScript]] on Wikimedia wikis from this week. This mainly affects users of Internet Explorer 11. If you have an old web browser on your computer you can try to upgrade to a newer version. [https://phabricator.wikimedia.org/T178356]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The deprecated <bdi lang="zxx" dir="ltr"><code>jquery.hoverIntent</code></bdi> module has been removed. This module could be used by gadgets and user scripts, to create an artificial delay in how JavaScript responds to a hover event. Gadgets and user scripts should now use jQuery <bdi lang="zxx" dir="ltr"><code>hover()</code></bdi> or <bdi lang="zxx" dir="ltr"><code>on()</code></bdi> instead. Examples can be found in the [[mw:Special:MyLanguage/ResourceLoader/Migration_guide_(users)#jquery.hoverIntent|migration guide]]. [https://phabricator.wikimedia.org/T311194]
* Some of the links in [[{{#special:SpecialPages}}]] will be re-arranged. There will be a clearer separation between links that relate to all users, and links related to your own user account. [https://phabricator.wikimedia.org/T333242]
* You will be able to hide the [[mw:Special:MyLanguage/Talk pages project/Replying|Reply button]] in archived discussion pages with a new <bdi lang="zxx" dir="ltr"><code><nowiki>__ARCHIVEDTALK__</nowiki></code></bdi> magic word. There will also be a new <bdi lang="zxx" dir="ltr"><code>.mw-archivedtalk</code></bdi> CSS class for hiding the Reply button in individual sections on a page. [https://phabricator.wikimedia.org/T249293][https://phabricator.wikimedia.org/T295553][https://gerrit.wikimedia.org/r/c/mediawiki/extensions/DiscussionTools/+/738221]
'''Future changes'''
* The Vega software that creates data visualizations in pages, such as graphs, will be upgraded to the newest version in the future. Graphs that still use the very old version 1.5 syntax may stop working properly. Most existing uses have been found and updated, but you can help to check, and to update any local documentation. [[phab:T260542|Examples of how to find and fix these graphs are available]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:40, 3 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24820268 -->
== Tech News: 2023-15 {{User:Xeverything11/tags/updates}} ==
<section begin="technews-2023-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/15|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] In the visual editor, it is now possible to edit captions of images in galleries without opening the gallery dialog. This feature request was [[:m:Community Wishlist Survey 2023/Editing/Editable gallery captions in Visual Editor|voted #61 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T190224]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] You can now receive notifications when another user edits your user page. See the "{{int:Echo-category-title-edit-user-page}}" option in [[Special:Preferences#mw-prefsection-echo|your Preferences]]. This feature request was [[:m:Community Wishlist Survey 2023/Anti-harassment/Notifications for user page edits|voted #3 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T3876]
'''Problems'''
* There was a problem with all types of CentralNotice banners still being shown to logged-in users even if they had [[Special:Preferences#mw-prefsection-centralnotice-banners|turned off]] specific banner types. This has now been fixed. [https://phabricator.wikimedia.org/T331671]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.4|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-11|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-12|en}}. It will be on all wikis from {{#time:j xg|2023-04-13|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-arywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dinwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dsbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-eewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-elwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-emlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-eowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-etwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-euwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-extwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tumwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ffwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fiu_vrowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fjwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frpwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-furwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gcrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-glwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-glkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gomwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gotwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-guwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-gvwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T304551][https://phabricator.wikimedia.org/T308133]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:05, 10 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24851886 -->
== Wikipedia translation of the week: 2023-16 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Lucy Salani]]'''<br /> <small>''([[:en:Lucy Salani]]) ([[:fr:Lucy Salani]]) ''</small> </div>
Please be bold and help translate this article!
----
[[File:Lucy Salani.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Lucy Salani''' was an Italian activist and is considered the only Italian transgender person to have survived the Nazi concentration camps.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:06, 17 April 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24872966 -->
== Tech News: 2023-16 ==
<section begin="technews-2023-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/16|Translations]] are available.
'''Recent changes'''
* You can now see [[mw:Special:MyLanguage/Help:Extension:Kartographer#Show_nearby_articles|nearby articles on a Kartographer map]] with the button for the new feature "{{int:Kartographer-sidebar-nearbybutton}}". Six wikis have been testing this feature since October. [https://meta.wikimedia.org/wiki/WMDE_Technical_Wishes/Geoinformation/Nearby_articles#Implementation][https://phabricator.wikimedia.org/T334079]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The [[m:Special:GlobalWatchlist|Special:GlobalWatchlist]] page now has links for "{{int:globalwatchlist-markpageseen}}" for each entry. This feature request was [[m:Community Wishlist Survey 2023/Notifications, Watchlists and Talk Pages/Button to mark a single change as read in the global watch list|voted #161 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334246]
'''Problems'''
* At Wikimedia Commons, some thumbnails have not been getting replaced correctly after a new version of the image is uploaded. This should be fixed later this week. [https://phabricator.wikimedia.org/T331138][https://phabricator.wikimedia.org/T333042]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] For the last few weeks, some external tools had inconsistent problems with logging-in with OAuth. This has now been fixed. [https://phabricator.wikimedia.org/T332650]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.5|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-18|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-19|en}}. It will be on all wikis from {{#time:j xg|2023-04-20|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:55, 18 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24881071 -->
== Wikipedia translation of the week: 2023-17 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:ca:María Fernanda Castro Maya]]'''<br /> <small>''([[:pt:María Fernanda Castro Maya]]) ([[:eu:María Fernanda Castro Maya]]) ''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''María Fernanda Castro Maya''' is a Mexican self-advocate disability rights activist.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:55, 24 April 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24872966 -->
== Tech News: 2023-17 ==
<section begin="technews-2023-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/17|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The date-selection menu on pages such as [[{{#special:Contributions}}]] will now show year-ranges that are in the current and past decade, instead of the current and future decade. This feature request was [[m:Community Wishlist Survey 2023/Miscellaneous/Change year range shown in date selection popup|voted #145 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334316]
'''Problems'''
* Due to security issues with the [[mw:Special:MyLanguage/Extension:Graph|Graph extension]], graphs have been disabled in all Wikimedia projects. Wikimedia Foundation teams are working to respond to these vulnerabilities. [https://phabricator.wikimedia.org/T334940]
* For a few days, it was not possible to save some kinds of edits on the mobile version of a wiki. This has been fixed. [https://phabricator.wikimedia.org/T334797][https://phabricator.wikimedia.org/T334799][https://phabricator.wikimedia.org/T334794]
'''Changes later this week'''
* All wikis will be read-only for a few minutes on April 26. This is planned for [https://zonestamp.toolforge.org/1682517653 14:00 UTC]. [https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.6|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-04-25|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-04-26|en}}. It will be on all wikis from {{#time:j xg|2023-04-27|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* The Editing team plans an A/B test for [[mw:Special:MyLanguage/Talk pages project/Usability|a usability analysis of the Talk page project]]. The [[mw:Special:MyLanguage/Talk pages project/Usability/Analysis|planned measurements are available]]. Your wiki [[phab:T332946|may be invited to participate]]. Please suggest improvements to the measurement plan at [[mw:Talk:Talk pages project/Usability|the discussion page]].
* [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2023-2024|The Wikimedia Foundation annual plan 2023-2024 draft is open for comment and input]] until May 19. The final plan will be published in July 2023 on Meta-wiki.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:04, 24 April 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24933592 -->
== Wikipedia translation of the week: 2023-18 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sonia Orbuch]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Sonia Shainwald Orbuch''' (born Sarah Shainwald, May 24, 1925 – September 30, 2018) was an American Holocaust educator. During the Second World War she was a Jewish resistance fighter in eastern Poland.
Orbuch hid in the forests of Poland with her family during the Second World War. She joined a group of Soviet partisans, being renamed Sonia in case she was captured, and helped fight against the Germans. After the war, she returned home, where she met her future husband. After having a daughter in a refugee camp in Germany, the family eventually emigrated to the United States.
She spent the rest of life in public engagement, speaking about her experiences and in 2009, published her autobiography, Here, There Are No Sarahs: A Woman's Courageous Fight Against the Nazis and Her Bittersweet Fulfillment of the American Dream.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 06:24, 1 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24872966 -->
== Tech News: 2023-18 ==
<section begin="technews-2023-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/18|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The content attribution tools [[mw:Special:MyLanguage/Who Wrote That?|Who Wrote That?]], [[xtools:authorship|XTools Authorship]], and [[xtools:blame|XTools Blame]] now support the French and Italian Wikipedias. More languages will be added in the near future. This is part of the [[m:Community Wishlist Survey 2023/Reading/Extend "Who Wrote That?" tool to more wikis|#7 wish in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T243711][https://phabricator.wikimedia.org/T270490][https://phabricator.wikimedia.org/T334891]
* The [[:commons:Special:MyLanguage/Commons:Video2commons|Video2commons]] tool has been updated. This fixed several bugs related to YouTube uploads. [https://github.com/toolforge/video2commons/pull/162/commits]
* The [[{{#special:Preferences}}]] page has been redesigned on mobile web. The new design makes it easier to browse the different categories and settings at low screen widths. You can also now access the page via a link in the Settings menu in the mobile web sidebar. [https://www.mediawiki.org/wiki/Moderator_Tools/Content_moderation_on_mobile_web/Preferences]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.7|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-02|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-03|en}}. It will be on all wikis from {{#time:j xg|2023-05-04|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:45, 2 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24966974 -->
== Wikipedia translation of the week: 2023-19 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Nadia Ghulam]]'''<br /><small>''([[:fr:Nadia Ghulam]]) ([[:es:Nadia Ghulam]]) ([[:ca:Nadia Ghulam]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Nadia Ghulam (cropped).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Nadia Ghulam Dastgir''' is an Afghan woman who spent ten years posing as her dead brother to evade the Taliban's strictures against women. Her book about her experiences, written with Agnès Rotger and published in 2010, El secret del meu turbant (The Secret of My Turban), won the Prudenci Bertrana Prize for fiction.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:37, 8 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=24966177 -->
== Tech News: 2023-19 ==
<section begin="technews-2023-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/19|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] Last week, Community Tech released the first update for providing [[m:Special:MyLanguage/Community Wishlist Survey 2022/Better diff handling of paragraph splits|better diffs]], the #1 request in the 2022 Community Wishlist Survey. [[phab:T324759|This update]] adds legends and tooltips to inline diffs so that users unfamiliar with the blue and yellow highlights can better understand the type of edits made.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] When you close an image that is displayed via MediaViewer, it will now return to the wiki page instead of going back in your browser history. This feature request was [[m:Community Wishlist Survey 2023/Reading/Return to the article when closing the MediaViewer|voted #65 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T236591]
* The [[mw:Special:MyLanguage/Extension:SyntaxHighlight|SyntaxHighlight]] extension now supports <bdi lang="en" dir="ltr"><code>wikitext</code></bdi> as a selected language. Old alternatives that were used to highlight wikitext, such as <bdi lang="en" dir="ltr"><code>html5</code></bdi>, <bdi lang="en" dir="ltr"><code>moin</code></bdi>, and <bdi lang="en" dir="ltr"><code>html+handlebars</code></bdi>, can now be replaced. [https://phabricator.wikimedia.org/T29828]
* [[mw:Special:MyLanguage/Manual:Creating pages with preloaded text|Preloading text to new pages/sections]] now supports preloading from localized MediaWiki interface messages. [https://cs.wikipedia.org/wiki/User_talk:Martin_Urbanec_(WMF)?action=edit§ion=new&preload=MediaWiki:July Here is an example] at the {{int:project-localized-name-cswiki/en}} that uses <bdi lang="zxx" dir="ltr"><code><nowiki>preload=MediaWiki:July</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T330337]
'''Problems'''
* Graph Extension update: Foundation developers have completed upgrading the visualization software to Vega5. Existing community graphs based on Vega2 are no longer compatible. Communities need to update local graphs and templates, and shared lua modules like <bdi lang="de" dir="ltr">[[:de:Modul:Graph]]</bdi>. The [https://vega.github.io/vega/docs/porting-guide/ Vega Porting guide] provides the most comprehensive detail on migration from Vega2 and [https://www.mediawiki.org/w/index.php?title=Template:Graph:PageViews&action=history here is an example migration]. Vega5 has currently just been enabled on mediawiki.org to provide a test environment for communities. [https://phabricator.wikimedia.org/T334940#8813922]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.8|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-09|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-10|en}}. It will be on all wikis from {{#time:j xg|2023-05-11|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Until now, all new OAuth apps went through manual review. Starting this week, apps using identification-only or basic authorizations will not require review. [https://phabricator.wikimedia.org/T67750]
'''Future changes'''
* During the next year, MediaWiki will stop using IP addresses to identify logged-out users, and will start automatically assigning unique temporary usernames. Read more at [[m:Special:MyLanguage/IP Editing: Privacy Enhancement and Abuse Mitigation/Updates|IP Editing: Privacy Enhancement and Abuse Mitigation/Updates]]. You can [[m:Talk:IP Editing: Privacy Enhancement and Abuse Mitigation#What should it look like?|join the discussion]] about the [[m:Special:MyLanguage/IP Editing: Privacy Enhancement and Abuse Mitigation/Updates#What will temporary usernames look like?|format of the temporary usernames]]. [https://phabricator.wikimedia.org/T332805]
* There will be an [[:w:en:A/B testing|A/B test]] on 10 Wikipedias where the Vector 2022 skin is the default skin. Half of logged-in desktop users will see an interface where the different parts of the page are more clearly separated. You can [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Updates/2023-05 Zebra9 A/B test|read more]]. [https://phabricator.wikimedia.org/T333180][https://phabricator.wikimedia.org/T335972]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] <code>jquery.tipsy</code> will be removed from the MediaWiki core. This will affect some user scripts. Many lines with <code>.tipsy(</code> can be commented out. <code>OO.ui.PopupWidget</code> can be used to keep things working like they are now. You can [[phab:T336019|read more]] and [[:mw:Help:Locating broken scripts|read about how to find broken scripts]]. [https://phabricator.wikimedia.org/T336019]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:36, 9 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=24998636 -->
== Wikipedia translation of the week: 2023-20 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Purple Day]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Epilepsy Warrior Brooch May 2018 Purple Day.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Purple Day''' is a global grassroots event that was formed with the intention to increase worldwide awareness of epilepsy, and to dispel common myths and fears of this neurological disorder.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:17, 15 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25000361 -->
== Tech News: 2023-20 ==
<section begin="technews-2023-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/20|Translations]] are available.
'''Problems'''
* Citations that are automatically generated based on [[d:Q33057|ISBN]] are currently broken. This affects citations made with the [[mw:Special:MyLanguage/Help:VisualEditor/User_guide/Citations-Full#Automatic|VisualEditor Automatic tab]], and the use of the citoid API in gadgets and user scripts. Work is ongoing to restore this feature. [https://phabricator.wikimedia.org/T336298]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.9|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-16|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-17|en}}. It will be on all wikis from {{#time:j xg|2023-05-18|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-gorwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hakwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hawwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hifwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hsbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-htwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-igwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ilowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-inhwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iuwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jamwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jvwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308134]
'''Future changes'''
* There is a recently formed team at the Wikimedia Foundation which will be focusing on experimenting with new tools. Currently they are building [[m:Wikimedia_Foundation_Annual_Plan/2023-2024/Draft/Future_Audiences#FA2.2_Conversational_AI|a prototype ChatGPT plugin that allows information generated by ChatGPT to be properly attributed]] to the Wikimedia projects.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Gadget and userscript developers should replace <bdi lang="zxx" dir="ltr"><code>jquery.cookie</code></bdi> with <bdi lang="zxx" dir="ltr"><code>mediawiki.cookie</code></bdi>. The <bdi lang="zxx" dir="ltr"><code>jquery.cookie</code></bdi> library will be removed in ~1 month, and staff developers will run a script to replace any remaining uses at that time. [https://phabricator.wikimedia.org/T336018]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:45, 15 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25011501 -->
== Tech News: 2023-21 ==
<section begin="technews-2023-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/21|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The "recent edits" time period for page watchers is now 30 days. It used to be 180 days. This was a [[m:Community Wishlist Survey 2023/Notifications, Watchlists and Talk Pages/Change information about the number of watchers on a page|Community Wishlist Survey proposal]]. [https://phabricator.wikimedia.org/T336250]
'''Changes later this week'''
* An [[mw:special:MyLanguage/Growth/Positive reinforcement#Impact|improved impact module]] will be available at Wikipedias. The impact module is a feature available to newcomers [[mw:Special:MyLanguage/Growth/Feature summary#Newcomer homepage|at their personal homepage]]. It will show their number of edits, how many readers their edited pages have, how many thanks they have received and similar things. It is also accessible by accessing Special:Impact. [https://phabricator.wikimedia.org/T336203]
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.10|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-23|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-24|en}}. It will be on all wikis from {{#time:j xg|2023-05-25|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W21"/>
16:55, 22 May 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25028325 -->
== Wikipedia translation of the week: 2023-22 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Valencian Art Nouveau]]'''<br /> <small>''([[:es:Modernismo valenciano]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Santuario Novelda.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Valencian Art Nouveau''' (Spanish: modernismo valenciano, Valencian: modernisme valencià), is the historiographic denomination given to an art and literature movement associated with the Art Nouveau in the Valencian Community, in Spain.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:46, 29 May 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25074014 -->
== Tech News: 2023-22 ==
<section begin="technews-2023-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/22|Translations]] are available.
'''Recent changes'''
* Citations can once again be added automatically from ISBNs, thanks to Zotero's ISBN searches. The current data sources are the Library of Congress (United States), the Bibliothèque nationale de France (French National Library), and K10plus ISBN (German repository). Additional data source searches can be [[mw:Citoid/Creating Zotero translators|proposed to Zotero]]. The ISBN labels in the [[mw:Special:MyLanguage/Help:VisualEditor/User_guide/Citations-Full#Automatic|VisualEditor Automatic tab]] will reappear later this week. [https://phabricator.wikimedia.org/T336298#8859917]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The page [[{{#special:EditWatchlist}}]] now has "{{int:watchlistedit-normal-check-all}}" options to select all the pages within a namespace. This feature request was [[m:Community Wishlist Survey 2023/Notifications, Watchlists and Talk Pages/Watchlist edit - "check all" checkbox|voted #161 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334252]
'''Problems'''
* For a few days earlier this month, the "Add interlanguage link" item in the Tools menu did not work properly. This has now been fixed. [https://phabricator.wikimedia.org/T337081]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.11|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-05-30|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-05-31|en}}. It will be on all wikis from {{#time:j xg|2023-06-01|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* VisualEditor will be switched to a new backend on [https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/dblists/small.dblist small] and [https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/dblists/medium.dblist medium] wikis this week. Large wikis will follow in the coming weeks. This is part of the effort to move Parsoid into MediaWiki core. The change should have no noticeable effect on users, but if you experience any slow loading or other strangeness when using VisualEditor, please report it on the phabricator ticket linked here. [https://phabricator.wikimedia.org/T320529]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:04, 29 May 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25079963 -->
== Wikipedia translation of the week: 2023-23 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:pt:Alessandra Korap]]'''<br /> <small>''([[:en:Alessandra Korap]]) ''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Alessandra Korap''' is an indigenous leader and Brazilian environmental activist from the Munduruku ethnic group. Her main work is defending the demarcation of indigenous territory and denouncing the illegal exploitation and activities of the mining and logging industries. Alessandra is internationally recognized for her work.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:33, 5 June 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25111481 -->
== Tech News: 2023-23 ==
<section begin="technews-2023-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/23|Translations]] are available.
'''Recent changes'''
* The [[:mw:Special:MyLanguage/Help:Extension:RealMe|RealMe]] extension allows you to mark URLs on your user page as verified for Mastodon and similar software.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] Citation and footnote editing can now be started from the reference list when using the visual editor. This feature request was [[m:Community Wishlist Survey 2023/Citations/Allow citations to be edited in the references section with VisualEditor|voted #2 in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T54750]
* Previously, clicking on someone else's link to Recent Changes with filters applied within the URL could unintentionally change your preference for "{{int:Rcfilters-group-results-by-page}}". This has now been fixed. [https://phabricator.wikimedia.org/T202916#8874081]
'''Problems'''
* For a few days last week, some tools and bots returned outdated information due to database replication problems, and may have been down entirely while it was being fixed. These issues have now been fixed. [https://phabricator.wikimedia.org/T337446]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.12|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-06-06|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-06-07|en}}. It will be on all wikis from {{#time:j xg|2023-06-08|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Bots will no longer be prevented from making edits because of URLs that match the [[mw:Special:MyLanguage/Extension:SpamBlacklist|spam blacklist]]. [https://phabricator.wikimedia.org/T313107]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:52, 5 June 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25114640 -->
== Wikipedia translation of the week: 2023-24 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cassinga Day]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Cassinga Day''' is a national public holiday in Namibia remembering the Cassinga Massacre. Commemorated annually on 4 May, the date "remembers those (approximately 600) killed in 1978 when the South African Defence Force attacked a SWAPO base at Cassinga in southern Angola".
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:07, 12 June 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25111481 -->
== Tech News: 2023-24 ==
<section begin="technews-2023-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/24|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] The content attribution tools [[mw:Special:MyLanguage/Who Wrote That?|Who Wrote That?]], [[xtools:authorship|XTools Authorship]], and [[xtools:blame|XTools Blame]] now support the Dutch, German, Hungarian, Indonesian, Japanese, Polish and Portuguese Wikipedias. This was the [[m:Community Wishlist Survey 2023/Reading/Extend "Who Wrote That?" tool to more wikis|#7 wish in the 2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T334891]
* The [[mw:Special:MyLanguage/Structured Data Across Wikimedia/Search Improvements#Search Preview panel|Search Preview panel]] has been deployed on four Wikipedias (Catalan, Dutch, Hungarian and Norwegian). The panel will show an image related to the article (if existing), the top sections of the article, related images (coming from MediaSearch on Commons), and eventually the sister projects associated with the article. [https://phabricator.wikimedia.org/T306341]
* The [[:mw:Special:MyLanguage/Help:Extension:RealMe#Verifying_a_link_on_non-user_pages|RealMe]] extension now allows administrators to verify URLs for any page, for Mastodon and similar software. [https://phabricator.wikimedia.org/T324937]
* The default project license [https://lists.wikimedia.org/hyperkitty/list/wikimediaannounce-l@lists.wikimedia.org/thread/7G6XPWZPQFLZ2JANN3ZX6RT4DVUI3HZQ/ has been officially upgraded] to CC BY-SA 4.0. The software interface messages have been updated. Communities should feel free to start updating any mentions of the old CC BY-SA 3.0 licensing within policies and related documentation pages. [https://phabricator.wikimedia.org/T319064]
'''Problems'''
* For three days last month, some Wikipedia pages edited with VisualEditor or DiscussionTools had an unintended <code><nowiki>__TOC__</nowiki></code> (or its localized form) added during an edit. There is [[mw:Parsoid/Deployments/T336101_followup|a listing of affected pages sorted by wiki]], that may still need to be fixed. [https://phabricator.wikimedia.org/T336101]
* Currently, the "{{int:Visualeditor-dialog-meta-categories-defaultsort-label}}" feature in VisualEditor is broken. Existing <code><nowiki>{{DEFAULTSORT:...}}</nowiki></code> keywords incorrectly appear as missing templates in VisualEditor. Developers are exploring how to fix this. In the meantime, those wishing to edit the default sortkey of a page are advised to switch to source editing. [https://phabricator.wikimedia.org/T337398]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Last week, an update to the delete form may have broken some gadgets or user scripts. If you need to manipulate (empty) the reason field, replace <bdi lang="zxx" dir="ltr"><code>#wpReason</code></bdi> with <bdi lang="zxx" dir="ltr" style="white-space: nowrap;"><code>#wpReason > input</code></bdi>. See [https://cs.wikipedia.org/w/index.php?title=MediaWiki%3AGadget-CleanDeleteReasons.js&diff=22859956&oldid=12794189 an example fix]. [https://phabricator.wikimedia.org/T337809]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.13|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-06-13|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-06-14|en}}. It will be on all wikis from {{#time:j xg|2023-06-15|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* VisualEditor will be switched to a new backend on English Wikipedia on Monday, and all other [https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/dblists/large.dblist large] wikis on Thursday. The change should have no noticeable effect on users, but if you experience any slow loading or other strangeness when using VisualEditor, please report it on the phabricator ticket linked here. [https://phabricator.wikimedia.org/T320529]
'''Future changes'''
* From 5 June to 17 July, the Foundation's [[:mw:Wikimedia Security Team|Security team]] is holding a consultation with contributors regarding a draft policy to govern the use of third-party resources in volunteer-developed gadgets and scripts. Feedback and suggestions are warmly welcome at [[m:Special:MyLanguage/Third-party resources policy|Third-party resources policy]] on meta-wiki.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:52, 12 June 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25133779 -->
== Tech News: 2023-25 ==
<section begin="technews-2023-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/25|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Flame graphs are now available in WikimediaDebug. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/JXNQD3EHG5V5QW5UXFDPSHQG4MJ3FWJQ/][https://techblog.wikimedia.org/2023/06/08/flame-graphs-arrive-in-wikimediadebug/]
'''Changes later this week'''
* There is no new MediaWiki version this week.
* There is now a toolbar search popup in the visual editor. You can trigger it by typing <code>\</code> or pressing <code>ctrl + shift + p</code>. It can help you quickly access most tools in the editor. [https://commons.wikimedia.org/wiki/File:Visual_editor_toolbar_search_feature.png][https://phabricator.wikimedia.org/T66905]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:09, 19 June 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25159510 -->
== Wikipedia translation of the week: 2023-26 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Rawon]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Rawon Setan.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Rawon''' (Javanese: ꦫꦮꦺꦴꦤ꧀) is an Indonesian beef soup. Originating from East Java, rawon utilizes the black keluak nut as the main seasoning, which gives a dark color and nutty flavor to the soup.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:18, 26 June 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25177056 -->
== Tech News: 2023-26 ==
<section begin="technews-2023-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/26|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Action API modules and Special:LinkSearch will now add a trailing <bdi lang="zxx" dir="ltr"><code>/</code></bdi> to all <bdi lang="zxx" dir="ltr"><code>prop=extlinks</code></bdi> responses for bare domains. This is part of the work to remove duplication in the <code>externallinks</code> database table. [https://phabricator.wikimedia.org/T337994]
'''Problems'''
* Last week, search was broken on Commons and Wikidata for 23 hours. [https://phabricator.wikimedia.org/T339810][https://wikitech.wikimedia.org/wiki/Incidents/2023-06-18_search_broken_on_wikidata_and_commons]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.15|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-06-27|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-06-28|en}}. It will be on all wikis from {{#time:j xg|2023-06-29|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Minerva skin now applies more predefined styles to the <bdi lang="zxx" dir="ltr"><code>.mbox-text</code></bdi> CSS class. This enables support for mbox templates that use divs instead of tables. Please make sure that the new styles won't affect other templates in your wiki. [https://gerrit.wikimedia.org/r/c/mediawiki/skins/MinervaNeue/+/930901/][https://phabricator.wikimedia.org/T339040]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Gadgets will now load on both desktop and mobile by default. Previously, gadgets loaded only on desktop by default. Changing this default using the <bdi lang="zxx" dir="ltr"><code>|targets=</code></bdi> parameter is also deprecated and should not be used. You should make gadgets work on mobile or disable them based on the skin (with the <bdi lang="zxx" dir="ltr"><code>|skins=</code></bdi> parameter in <bdi lang="en" dir="ltr">MediaWiki:Gadgets-definition</bdi>) rather than whether the user uses the mobile or the desktop website. Popular gadgets that create errors on mobile will be disabled by developers on the Minerva skin as a temporary solution. [https://phabricator.wikimedia.org/T127268]
* All namespace tabs now have the same browser [[m:Special:MyLanguage/Help:Keyboard_shortcuts|access key]] by default. Previously, custom and extension-defined namespaces would have to have their access keys set manually on-wiki, but that is no longer necessary. [https://phabricator.wikimedia.org/T22126]
* The review form of the Flagged Revisions extension now uses the standardized [[mw:Special:MyLanguage/Codex|user interface components]]. [https://phabricator.wikimedia.org/T191156]
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] How media is structured in the parser's HTML output will change in the coming weeks at [[:wikitech:Deployments/Train#Thursday|group2 wikis]]. This change improves the accessibility of content. You may need to update your site-CSS, or userscripts and gadgets. There are [[mw:Special:MyLanguage/Parsoid/Parser_Unification/Media_structure/FAQ|details on what code to check, how to update the code, and where to report any related problems]]. [https://phabricator.wikimedia.org/T314318]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:19, 26 June 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25202311 -->
== Wikipedia translation of the week: 2023-27 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Hook echo]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Tornadic classic supercell radar.gif|center|300px]]
<div style="text-align:left; padding: .4em;">
A '''hook echo''' is a pendant or hook-shaped weather radar signature as part of some supercell thunderstorms. It is found in the lower portions of a storm as air and precipitation flow into a mesocyclone, resulting in a curved feature of reflectivity. The echo is produced by rain, hail, or even debris being wrapped around the supercell
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:18, 3 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25241057 -->
== Tech News: 2023-27 ==
<section begin="technews-2023-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/27|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the rolling out of the [[m:Community Wishlist Survey 2022/Multimedia and Commons/Audio links that play on click|audio links that play on click]] wishlist proposal, [https://noc.wikimedia.org/conf/highlight.php?file=dblists/small.dblist small wikis] will now be able to use the [[mw:Special:MyLanguage/Help:Extension:Phonos#Inline audio player mode|inline audio player]] that is implemented by the [[mw:Extension:Phonos|Phonos]] extension. [https://phabricator.wikimedia.org/T336763]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] From this week all gadgets automatically load on mobile and desktop sites. If you see any problems with gadgets on your wikis, please adjust the [[mw:Special:MyLanguage/Extension:Gadgets#Options|gadget options]] in your gadget definitions file. [https://phabricator.wikimedia.org/T328610]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.16|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-04|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-05|en}}. It will be on all wikis from {{#time:j xg|2023-07-06|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:51, 3 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25231546 -->
== Tech News: 2023-28 ==
<section begin="technews-2023-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/28|Translations]] are available.
'''Recent changes'''
* The [[:mw:Special:MyLanguage/Structured Data Across Wikimedia/Section-level Image Suggestions|Section-level Image Suggestions feature]] has been deployed on seven Wikipedias (Portuguese, Russian, Indonesian, Catalan, Hungarian, Finnish and Norwegian Bokmål). The feature recommends images for articles on contributors' watchlists that are a good match for individual sections of those articles.
* [[:m:Special:MyLanguage/Global AbuseFilter|Global abuse filters]] have been enabled on all Wikimedia projects, except English and Japanese Wikipedias (who opted out). This change was made following a [[:m:Requests for comment/Make global abuse filters opt-out|global request for comments]]. [https://phabricator.wikimedia.org/T341159]
* [[{{#special:BlockedExternalDomains}}]] is a new tool for administrators to help fight spam. It provides a clearer interface for blocking plain domains (and their subdomains), is more easily searchable, and is faster for the software to process for each edit on the wiki. It does not support regex (for complex cases), nor URL path-matching, nor the [[MediaWiki:Spam-whitelist|MediaWiki:Spam-whitelist]], but otherwise it replaces most of the functionalities of the existing [[MediaWiki:Spam-blacklist|MediaWiki:Spam-blacklist]]. There is a Python script to help migrate all simple domains into this tool, and more feature details, within [[mw:Special:MyLanguage/Manual:BlockedExternalDomains|the tool's documentation]]. It is available at all wikis except for Meta-wiki, Commons, and Wikidata. [https://phabricator.wikimedia.org/T337431]
* The WikiEditor extension was updated. It includes some of the most frequently used features of wikitext editing. In the past, many of its messages could only be translated by administrators, but now all regular translators on translatewiki can translate them. Please check [https://translatewiki.net/wiki/Special:MessageGroupStats?group=ext-wikieditor&messages=&x=D#sortable:0=asc the state of WikiEditor localization into your language], and if the "Completion" for your language shows anything less than 100%, please complete the translation. See [https://lists.wikimedia.org/hyperkitty/list/wikitech-ambassadors@lists.wikimedia.org/thread/D4YELU2DXMZ75PGELUOKXXMFF3FH45XA/ a more detailed explanation].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.17|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-11|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-12|en}}. It will be on all wikis from {{#time:j xg|2023-07-13|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* The default protocol of [[{{#special:LinkSearch}}]] and API counterparts has changed from http to both http and https. [https://phabricator.wikimedia.org/T14810]
* [[{{#special:LinkSearch}}]] and its API counterparts will now search for all of the URL provided in the query. It used to be only the first 60 characters. This feature was requested fifteen years ago. [https://phabricator.wikimedia.org/T17218]
'''Future changes'''
* There is an experiment with a [[:w:en:ChatGPT|ChatGPT]] plugin. This is to show users where the information is coming from when they read information from Wikipedia. It has been tested by Wikimedia Foundation staff and other Wikimedians. Soon all ChatGPT plugin users can use the Wikipedia plugin. This is the same plugin which was mentioned in [[m:Special:MyLanguage/Tech/News/2023/20|Tech News 2023/20]]. [https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Annual_Plan/2023-2024/Draft/Future_Audiences#FA2.2_Conversational_AI]
* There is an ongoing discussion on a [[m:Special:MyLanguage/Third-party resources policy|proposed Third-party resources policy]]. The proposal will impact the use of third-party resources in gadgets and userscripts. Based on the ideas received so far, policy includes some of the risks related to user scripts and gadgets loading third-party resources, some best practices and exemption requirements such as code transparency and inspectability. Your feedback and suggestions are warmly welcome until July 17, 2023 on [[m:Talk:Third-party resources policy|on the policy talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W28"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:54, 10 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25278797 -->
== Wikipedia translation of the week: 2023-29 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Esther Cooper Jackson]]'''<br /> <small>''([[:fr:Esther Cooper Jackson]]) ([[:simple:Esther Cooper Jackson]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Esther Cooper Jackson, 1968, Great Barrington.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Esther Victoria Cooper Jackson''' was an American civil rights activist and social worker. She was one of the founding editors of the magazine Freedomways. She also was an organizational and executive secretary at the Southern Negro Youth Congress.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:14, 17 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25266525 -->
== Tech News: 2023-29 ==
<section begin="technews-2023-W29"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/29|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] We are now serving 1% of all global user traffic from [[w:en:Kubernetes|Kubernetes]] (you can [[wikitech:MediaWiki On Kubernetes|read more technical details]]). We are planning to increment this percentage regularly. You can [[phab:T290536|follow the progress of this work]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.18|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-18|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-19|en}}. It will be on all wikis from {{#time:j xg|2023-07-20|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] MediaWiki [[mw:Special:MyLanguage/Help:System_message|system messages]] will now look for available local fallbacks, instead of always using the default fallback defined by software. This means wikis no longer need to override each language on the [[mw:Special:MyLanguage/Manual:Language#Fallback_languages|fallback chain]] separately. For example, English Wikipedia doesn't have to create <bdi lang="zxx" dir="ltr"><code>en-ca</code></bdi> and <bdi lang="zxx" dir="ltr"><code>en-gb</code></bdi> subpages with a transclusion of the base pages anymore. This makes it easier to maintain local overrides. [https://phabricator.wikimedia.org/T229992]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The <bdi lang="zxx" dir="ltr"><code>action=growthsetmentorstatus</code></bdi> API will be deprecated with the new MediaWiki version. Bots or scripts calling that API should use the <bdi lang="zxx" dir="ltr"><code>action=growthmanagementorlist</code></bdi> API now. [https://phabricator.wikimedia.org/T321503]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/29|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:08, 17 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25289122 -->
== Wikipedia translation of the week: 2023-30 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cut of pork]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:American Pork Cuts.svg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''cuts of pork''' are the different parts of the pig which are consumed as food by humans. The terminology and extent of each cut varies from country to country. There are between four and six primal cuts, which are the large parts in which the pig is first cut: the shoulder (blade and picnic), loin, belly (spare ribs and side) and leg
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:21, 24 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25318972 -->
== Tech News: 2023-30 ==
<section begin="technews-2023-W30"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/30|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] On July 18, the Wikimedia Foundation launched a survey about the [[:mw:Technical_decision_making|technical decision making process]] for people who do technical work that relies on software that is maintained by the Foundation or affiliates. If this applies to you, [https://wikimediafoundation.limesurvey.net/885471 please take part in the survey]. The survey will be open for three weeks, until August 7. You can find more information in [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/Q7DUCFA75DXG3G2KHTO7CEWMLCYTSDB2/|the announcement e-mail on wikitech-l]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.19|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-07-25|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-07-26|en}}. It will be on all wikis from {{#time:j xg|2023-07-27|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/30|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:20, 25 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25332248 -->
== Wikipedia translation of the week: 2023-31 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Gunhild Cross]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Gunhildkorset.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Gunhild Cross''' (Danish: Gunhildkorset), named for its first owner, Gunhild, a daughter of Svend III of Denmark, is a mid-12th-century crucifix carved in walrus tusk and with both Latin and Runic inscriptions. It is now in the collection of the National Museum of Denmark.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:48, 31 July 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25380210 -->
== Tech News: 2023-31 ==
<section begin="technews-2023-W31"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/31|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[mw:Synchronizer|Synchronizer]] tool is now available to keep Lua modules synced across Wikimedia wikis, along with [[mw:Multilingual Templates and Modules|updated documentation]] to develop global Lua modules and templates.
* The tag filter on [[{{#special:NewPages}}]] and revision history pages can now be inverted. For example, you can hide edits that were made using an automated tool. [https://phabricator.wikimedia.org/T334337][https://phabricator.wikimedia.org/T334338]
* The Wikipedia [[:w:en:ChatGPT|ChatGPT]] plugin experiment can now be used by ChatGPT users who can use plugins. You can participate in a [[:m:Talk:Wikimedia Foundation Annual Plan/2023-2024/Draft/Future Audiences#Announcing monthly Future Audiences open "office hours"|video call]] if you want to talk about this experiment or similar work. [https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Annual_Plan/2023-2024/Draft/Future_Audiences#FA2.2_Conversational_AI]
'''Problems'''
* It was not possible to generate a PDF for pages with non-Latin characters in the title, for the last two weeks. This has now been fixed. [https://phabricator.wikimedia.org/T342442]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.20|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-01|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-02|en}}. It will be on all wikis from {{#time:j xg|2023-08-03|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Tuesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-kawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kaawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kabwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kbdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kbpwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-knwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kshwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kuwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kwwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308135]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/31|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:54, 31 July 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25362228 -->
== Wikipedia translation of the week: 2023-32 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Polyura athamas]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Close wing mud-puddling position of Charaxes bharata (C.& R. Felder,1867) - Indian Nawab.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''''Polyura athamas''''', the common nawab, is a species of fast-flying canopy butterfly found in tropical Asia. It belongs to the Charaxinae (rajahs and nawabs) in the brush-footed butterfly family (Nymphalidae).
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 03:14, 7 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25410866 -->
== Tech News: 2023-32 ==
<section begin="technews-2023-W32"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/32|Translations]] are available.
'''Recent changes'''
* Mobile Web editors can now [[mw:Special:MyLanguage/Reading/Web/Advanced_mobile_contributions#August_1,_2023_-_Full-page_editing_added_on_mobile|edit a whole page at once]]. To use this feature, turn on "{{int:Mobile-frontend-mobile-option-amc}}" in your settings and use the "{{int:Minerva-page-actions-editfull}}" button in the "{{int:Minerva-page-actions-overflow}}" menu. [https://phabricator.wikimedia.org/T203151]
'''Changes later this week'''
* There is no new MediaWiki version this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/32|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:21, 7 August 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25420038 -->
== Wikipedia translation of the week: 2023-33 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Women's page]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:"Doings in Pittsburg Society" The Pittsburg Press February 1, 1920.png|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''women's page''' (sometimes called home page or women's section) of a newspaper was a section devoted to covering news assumed to be of interest to women. Women's pages started out in the 19th century as society pages and eventually morphed into features sections in the 1970s. Although denigrated during much of that period, they had a significant impact on journalism and in their communities.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:51, 14 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-33 ==
<section begin="technews-2023-W33"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/33|Translations]] are available.
'''Recent changes'''
* The Content translation system is no longer using Youdao's [[mw:Special:MyLanguage/Help:Content_translation/Translating/Initial_machine_translation|machine translation service]]. The service was in place for several years, but due to no usage, and availability of alternatives, it was deprecated to reduce maintenance overheads. Other services which cover the same languages are still available. [https://phabricator.wikimedia.org/T329137]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.22|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-15|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-16|en}}. It will be on all wikis from {{#time:j xg|2023-08-17|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-lawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ladwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lbewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lezwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lfnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-liwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lijwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lmowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ltgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-maiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-map_bmswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mdfwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kywiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308136] <!-- TODO replace wiki codes -->
'''Future changes'''
* A few gadgets/user scripts which add icons to the Minerva skin need to have their CSS updated. There are more details available including a [[phab:T344067|search for all existing instances and how to update them]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/33|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 06:00, 15 August 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25428668 -->
== Wikipedia translation of the week: 2023-34 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Insect toxin]]'''<br /> <small>''([[:de:Insektengift]])''</small> </div>
Please be bold and help translate this article!
----
[[File:PDB 1lmr EBI.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Insect toxins''' are various protein toxins produced by insect species.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:32, 21 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-34 ==
<section begin="technews-2023-W34"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/34|Translations]] are available.
'''Recent changes'''
* The [https://gdrive-to-commons.toolforge.org/ GDrive to Commons Uploader] tool is now available. It enables [[m:Special:MyLanguage/GDrive to Commons Uploader|securely selecting and uploading files]] from your Google Drive directly to Wikimedia Commons. [https://phabricator.wikimedia.org/T267868]
* From now on, we will announce new Wikimedia wikis in Tech News, so you can update any tools or pages.
** Since the last edition, two new wikis have been created:
*** a Wiktionary in [[d:Q7121294|Pa'O]] ([[wikt:blk:|<code>wikt:blk:</code>]]) [https://phabricator.wikimedia.org/T343540]
*** a Wikisource in [[d:Q34002|Sundanese]] ([[s:su:|<code>s:su:</code>]]) [https://phabricator.wikimedia.org/T343539]
** To catch up, the next most recent six wikis are:
*** Wikifunctions ([[f:|<code>f:</code>]]) [https://phabricator.wikimedia.org/T275945]
*** a Wiktionary in [[d:Q2891049|Mandailing]] ([[wikt:btm:|<code>wikt:btm:</code>]]) [https://phabricator.wikimedia.org/T335216]
*** a Wikipedia in [[d:Q5555465|Ghanaian Pidgin]] ([[w:gpe:|<code>w:gpe:</code>]]) [https://phabricator.wikimedia.org/T335969]
*** a Wikinews in [[d:Q3111668|Gungbe]] ([[n:guw:|<code>n:guw:</code>]]) [https://phabricator.wikimedia.org/T334394]
*** a Wiktionary in [[d:Q33522|Kabardian]] ([[wikt:kbd:|<code>wikt:kbd:</code>]]) [https://phabricator.wikimedia.org/T333266]
*** a Wikipedia in [[d:Q35570|Fante]] ([[w:fat:|<code>w:fat:</code>]]) [https://phabricator.wikimedia.org/T335016]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-22|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-23|en}}. It will be on all wikis from {{#time:j xg|2023-08-24|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] There is an existing [[mw:Stable interface policy|stable interface policy]] for MediaWiki backend code. There is a [[mw:User:Jdlrobson/Stable interface policy/frontend|proposed stable interface policy for frontend code]]. This is relevant for anyone who works on gadgets or Wikimedia frontend code. You can read it, discuss it, and let the proposer know if there are any problems. [https://phabricator.wikimedia.org/T344079]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/34|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W34"/>
15:25, 21 August 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25497111 -->
== Wikipedia translation of the week: 2023-35 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Manchester Blitz]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Air Raid Damage in Britain- Manchester HU49833.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Manchester Blitz''' (also known as the Christmas Blitz) was the heavy bombing of the city of Manchester and its surrounding areas in North West England during the Second World War by the German Luftwaffe.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:16, 28 August 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-35 ==
<section begin="technews-2023-W35"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/35|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the changes for the [[m:Community Wishlist Survey 2022/Better diff handling of paragraph splits|better diff handling of paragraph splits]], improved detection of splits is being rolled out. Over the last two weeks, we deployed this support to [[wikitech:Deployments/Train#Groups|group0]] and group1 wikis. This week it will be deployed to group2 wikis. [https://phabricator.wikimedia.org/T341754]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] All [[{{#special:Contributions}}]] pages now show the user's local edit count and the account's creation date. [https://phabricator.wikimedia.org/T324166]
* Wikisource users can now use the <bdi lang="zxx" dir="ltr"><code>prpbengalicurrency</code></bdi> label to denote Bengali currency characters as page numbers inside the <bdi lang="zxx" dir="ltr"><code><nowiki><pagelist></nowiki></code></bdi> tag. [https://phabricator.wikimedia.org/T268932]
* Two preferences have been relocated. The preference "{{int:visualeditor-preference-visualeditor}}" is now shown on the [[Special:Preferences#mw-prefsection-editing|"{{int:prefs-editing}}" tab]] at all wikis. Previously it was shown on the "{{int:prefs-betafeatures}}" tab at some wikis. The preference "{{int:visualeditor-preference-newwikitexteditor-enable}}" is now also shown on the "{{int:prefs-editing}}" tab at all wikis, instead of the "{{int:prefs-betafeatures}}" tab. [https://phabricator.wikimedia.org/T335056][https://phabricator.wikimedia.org/T344158]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.24|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-08-29|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-08-30|en}}. It will be on all wikis from {{#time:j xg|2023-08-31|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] New signups for a Wikimedia developer account will start being pushed towards <bdi lang="en" dir="ltr">[https://idm.wikimedia.org/ idm.wikimedia.org]</bdi>, rather than going via Wikitech. [[wikitech:IDM|Further information about the new system is available]].
* All right-to-left language wikis, plus Korean, Armenian, Ukrainian, Russian, and Bulgarian Wikipedias, will have a link in the sidebar that provides a short URL of that page, using the [[m:Special:MyLanguage/Wikimedia URL Shortener|Wikimedia URL Shortener]]. This feature will come to more wikis in future weeks. [https://phabricator.wikimedia.org/T267921]
'''Future changes'''
* The removal of the [[mw:Special:MyLanguage/Extension:DoubleWiki|DoubleWiki extension]] is being discussed. This extension currently allows Wikisource users to view articles from multiple language versions side by side when the <bdi lang="zxx" dir="ltr"><code><=></code></bdi> symbol next to a specific language edition is selected. Comments on this are welcomed at [[phab:T344544|the phabricator task]].
* A proposal has been made to merge the second hidden-categories list (which appears below the wikitext editing form) with the main list of categories (which is further down the page). [[phab:T340606|More information is available on Phabricator]]; feedback is welcome!
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/35|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:00, 28 August 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25510866 -->
== Wikipedia translation of the week: 2023-36 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ghana Independence Act 1957]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
The '''Ghana Independence Act 1957''' is an Act of the Parliament of the United Kingdom that granted the Gold Coast fully responsible government within the British Commonwealth of Nations under the name of Ghana
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:18, 4 September 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-36 ==
<section begin="technews-2023-W36"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/36|Translations]] are available.
'''Recent changes'''
* [[m:Wikisource_EditInSequence|EditInSequence]], a feature that allows users to edit pages faster on Wikisource has been moved to a Beta Feature based on community feedback. To enable it, you can navigate to the [[Special:Preferences#mw-prefsection-betafeatures|beta features tab in Preferences]]. [https://phabricator.wikimedia.org/T308098]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the changes for the [[m:Special:MyLanguage/Community Wishlist Survey 2022/Generate Audio for IPA|Generate Audio for IPA]] and [[m:Community Wishlist Survey 2022/Multimedia and Commons/Audio links that play on click|Audio links that play on click]] wishlist proposals, the [[mw:Special:MyLanguage/Help:Extension:Phonos#Inline_audio_player_mode|inline audio player mode]] of [[mw:Extension:Phonos|Phonos]] has been deployed to all projects. [https://phabricator.wikimedia.org/T336763]
* There is a new option for Administrators when they are changing the usergroups for a user, to add the user’s user page to their watchlist. This works both via [[{{#special:UserRights}}]] and via the API. [https://phabricator.wikimedia.org/T272294]
* One new wiki has been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q34318|Talysh]] ([[w:tly:|<code>w:tly:</code>]]) [https://phabricator.wikimedia.org/T345166]
'''Problems'''
* The [[mw:Special:MyLanguage/Extension:LoginNotify|LoginNotify extension]] was not sending notifications since January. It has now been fixed, so going forward, you may see notifications for failed login attempts, and successful login attempts from a new device. [https://phabricator.wikimedia.org/T344785]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.25|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-05|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-06|en}}. It will be on all wikis from {{#time:j xg|2023-09-07|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-mhrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-miwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-minwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mrjwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mtwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mwlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-myvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mznwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nahwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-napwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ndswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nds_nlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-newiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-newwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-novwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nqowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nrmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nsowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ocwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-olowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-omwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-orwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-oswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pagwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pamwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-papwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pcdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pdcwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pflwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pihwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pmswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pnbwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pntwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pswiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308137][https://phabricator.wikimedia.org/T308138]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/36|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:34, 4 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25566983 -->
== Wikipedia translation of the week: 2023-37 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Betrayal trauma]]'''<br /> <small>''([[:sv:Svektrauma]]) ([[:ar:صدمة الخيانة]]) ([[:ko:배신 트라우마]])''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Betrayal trauma''' is defined as a trauma perpetrated by someone with whom the victim is close to and reliant upon for support and survival.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:49, 11 September 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25427472 -->
== Tech News: 2023-37 ==
<section begin="technews-2023-W37"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/37|Translations]] are available.
'''Recent changes'''
* [[mw:Special:MyLanguage/ORES|ORES]], the revision evaluation service, is now using a new open-source infrastructure on all wikis except for English Wikipedia and Wikidata. These two will follow this week. If you notice any unusual results from the Recent Changes filters that are related to ORES (for example, "{{int:ores-rcfilters-damaging-title}}" and "{{int:ores-rcfilters-goodfaith-title}}"), please [[mw:Talk:Machine Learning|report them]]. [https://phabricator.wikimedia.org/T342115]
* When you are logged in on one Wikimedia wiki and visit a different Wikimedia wiki, the system tries to log you in there automatically. This has been unreliable for a long time. You can now visit the login page to make the system try extra hard. If you feel that made logging in better or worse than it used to be, your feedback is appreciated. [https://phabricator.wikimedia.org/T326281]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.26|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-12|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-13|en}}. It will be on all wikis from {{#time:j xg|2023-09-14|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[mw:Special:MyLanguage/Technical decision making|Technical Decision-Making Forum Retrospective]] team invites anyone involved in the technical field of Wikimedia projects to signup to and join [[mw:Technical decision making/Listening Sessions|one of their listening sessions]] on 13 September. Another date will be scheduled later. The goal is to improve the technical decision-making processes.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] As part of the changes for the [[m:Special:MyLanguage/Community Wishlist Survey 2022/Better diff handling of paragraph splits|Better diff handling of paragraph splits]] wishlist proposal, the inline switch widget in diff pages is being rolled out this week to all wikis. The inline switch will allow viewers to toggle between a unified inline or two-column diff wikitext format. [https://phabricator.wikimedia.org/T336716]
'''Future changes'''
* All wikis will be read-only for a few minutes on 20 September. [[m:Special:MyLanguage/Tech/Server switch|This is planned at 14:00 UTC.]] More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T345263]
* The Enterprise API is launching a new feature called "[http://breakingnews-beta.enterprise.wikimedia.com/ breaking news]". Currently in BETA, this attempts to identify likely "newsworthy" topics as they are currently being written about in any Wikipedia. Your help is requested to improve the accuracy of its detection model, especially on smaller language editions, by recommending templates or identifiable editing patterns. See more information at [[mw:Special:MyLanguage/Wikimedia Enterprise/Breaking news|the documentation page]] on MediaWiki or [[m:Special:MyLanguage/Wikimedia Enterprise/FAQ#What is Breaking News|the FAQ]] on Meta.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/37|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:08, 11 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25589064 -->
== Wikipedia translation of the week: 2023-38 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:es:Genocidio del Putumayo]]'''<br /> <small>''([[:en:Putumayo genocide]]) ([[:ca:Genocidi del Putumayo]])''</small></div>
Please be bold and help translate this article!
----
[[File:The Putumayo - the devil's paradise, travels in the Peruvian Amazon Region and an account of the atrocities committed upon the Indians therein (1913) (14782203995).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Putumayo genocide''' is the term which is used in reference to the enslavement, massacres and ethnocide of the indigenous population of the Amazon at the hands of the Peruvian Amazon Company, specifically in the area between the Putumayo River and the Caquetá River during the Amazon rubber boom period from 1879 to 1912.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 03:38, 18 September 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25599361 -->
== Tech News: 2023-38 ==
<section begin="technews-2023-W38"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/38|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] MediaWiki now has a [[mw:Stable interface policy/frontend|stable interface policy for frontend code]] that more clearly defines how we deprecate MediaWiki code and wiki-based code (e.g. gadgets and user scripts). Thank you to everyone who contributed to the content and discussions. [https://phabricator.wikimedia.org/T346467][https://phabricator.wikimedia.org/T344079]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.27|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-19|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-20|en}}. It will be on all wikis from {{#time:j xg|2023-09-21|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* All wikis will be read-only for a few minutes on September 20. [[m:Special:MyLanguage/Tech/Server switch|This is planned at 14:00 UTC.]] [https://phabricator.wikimedia.org/T345263]
* All wikis will have a link in the sidebar that provides a short URL of that page, using the [[m:Special:MyLanguage/Wikimedia URL Shortener|Wikimedia URL Shortener]]. [https://phabricator.wikimedia.org/T267921]
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The team investigating the Graph Extension posted [[mw:Extension:Graph/Plans#Proposal|a proposal for reenabling it]] and they need your input.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/38|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:20, 18 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25623533 -->
== Tech News: 2023-39 ==
<section begin="technews-2023-W39"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/39|Translations]] are available.
'''Recent changes'''
* The Vector 2022 skin will now remember the pinned/unpinned status for the Table of Contents for all logged-out users. [https://phabricator.wikimedia.org/T316060]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.28|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-09-26|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-09-27|en}}. It will be on all wikis from {{#time:j xg|2023-09-28|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The ResourceLoader <bdi lang="zxx" dir="ltr"><code><nowiki>mediawiki.ui</nowiki></code></bdi> modules are now deprecated as part of the move to Vue.js and Codex. There is a [[mw:Codex/Migrating_from_MediaWiki_UI|guide for migrating from MediaWiki UI to Codex]] for any tools that use it. More [[phab:T346468|details are available in the task]] and your questions are welcome there.
* Gadget definitions will have a [[mw:Special:MyLanguage/Extension:Gadgets#Options|new "namespaces" option]]. The option takes a list of namespace IDs. Gadgets that use this option will only load on pages in the given namespaces.
'''Future changes'''
* New variables will be added to [[mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilter]]: <code><bdi lang="zxx" dir="ltr">global_account_groups</bdi></code> and <code><bdi lang="zxx" dir="ltr">global_account_editcount</bdi></code>. They are available only when an account is being created. You can use them to prevent blocking automatic creation of accounts when users with many edits elsewhere visit your wiki for the first time. [https://phabricator.wikimedia.org/T345632][https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:AbuseFilter/Rules_format]
'''Meetings'''
* You can join the next meeting with the Wikipedia mobile apps teams. During the meeting, we will discuss the current features and future roadmap. The meeting will be on [https://zonestamp.toolforge.org/1698426015 27 October at 17:00 (UTC)]. See [[mw:Special:MyLanguage/Wikimedia_Apps/Office_Hours#October_2023|details and how to join]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/39|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:51, 26 September 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25655264 -->
== Tech News: 2023-40 ==
<section begin="technews-2023-W40"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/40|Translations]] are available.
'''Recent changes'''
* There is a new [[Special:Preferences#mw-prefsection-rendering-advancedrendering|user preference]] for "{{int:tog-forcesafemode}}". This setting will make pages load without including any on-wiki JavaScript or on-wiki stylesheet pages. It can be useful for debugging broken JavaScript gadgets. [https://phabricator.wikimedia.org/T342347]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Gadget definitions now have a [[mw:Special:MyLanguage/Extension:Gadgets#Options|new "<var>contentModels</var>" option]]. The option takes a list of page content models, like <code><bdi lang="zxx" dir="ltr">wikitext</bdi></code> or <code><bdi lang="zxx" dir="ltr">css</bdi></code>. Gadgets that use this option will only load on pages with the given content models.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.29|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-03|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-04|en}}. It will be on all wikis from {{#time:j xg|2023-10-05|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Vector 2022 skin will no longer use the custom styles and scripts of Vector legacy (2010). The change will be made later this year or in early 2024. See [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Features/Loading Vector 2010 scripts|how to adjust the CSS and JS pages on your wiki]]. [https://phabricator.wikimedia.org/T331679]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/40|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:27, 3 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25686930 -->
== Tech News: 2023-41 ==
<section begin="technews-2023-W41"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/41|Translations]] are available.
'''Recent changes'''
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q33291|Fon]] ([[w:fon:|<code>w:fon:</code>]]) [https://phabricator.wikimedia.org/T347935]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.41/wmf.30|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-10|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-11|en}}. It will be on all wikis from {{#time:j xg|2023-10-12|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-swwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-wawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-warwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-wowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-xalwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-xhwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-xmfwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-yiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-yowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zeawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zh_min_nanwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zuwiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308139]
* At some wikis, newcomers are suggested images from Commons to add to articles without any images. Starting on Tuesday, newcomers at these wikis will be able to add images to unillustrated article sections. The specific wikis are listed under "Images recommendations" [[mw:Special:MyLanguage/Growth/Deployment table|at the Growth team deployment table]]. You can [[mw:Special:MyLanguage/Help:Growth/Tools/Add an image|learn more about this feature.]] [https://phabricator.wikimedia.org/T345940]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] In the mobile web skin (Minerva) the CSS ID <bdi lang="zxx" dir="ltr"><code><nowiki>#page-actions</nowiki></code></bdi> will be replaced with <bdi lang="zxx" dir="ltr"><code><nowiki>#p-views</nowiki></code></bdi>. This change is to make it consistent with other skins and to improve support for gadgets and extensions in the mobile skin. A few gadgets may need to be updated; there are [https://phabricator.wikimedia.org/T348267 details and search-links in the task].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/41|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W41"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:39, 9 October 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25712895 -->
== Wikipedia translation of the week: 2023-42 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Athyma nefte]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:VB 019 Color Sergeant UP.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''''Athyma nefte''''', the colour sergeant, is a species of brush-footed butterfly found in tropical South and Southeast Asia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:58, 16 October 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25693965 -->
== Tech News: 2023-42 ==
<section begin="technews-2023-W42"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/42|Translations]] are available.
'''Recent changes'''
* The [[m:Special:MyLanguage/Help:Unified login|Unified login]] system's edge login should now be fixed for some browsers (Chrome, Edge, Opera). This means that if you visit a new sister project wiki, you should be logged in automatically without the need to click "Log in" or reload the page. Feedback on whether it's working for you is welcome. [https://phabricator.wikimedia.org/T347889]
* [[mw:Special:MyLanguage/Manual:Interface/Edit_notice|Edit notices]] are now available within the MobileFrontend/Minerva skin. This feature was inspired by [[w:en:Wikipedia:EditNoticesOnMobile|the gadget on English Wikipedia]]. See more details in [[phab:T316178|T316178]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.1|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-17|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-18|en}}. It will be on all wikis from {{#time:j xg|2023-10-19|en}} ([[mw:MediaWiki 1.41/Roadmap|calendar]]).
'''Future changes'''
* In 3 weeks, in the Vector 2022 skin, code related to <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>#p-namespaces</nowiki></code></bdi> that was deprecated one year ago will be removed. If you notice tools that should appear next to the "Discussion" tab are then missing, please tell the gadget's maintainers to see [[phab:T347907|instructions in the Phabricator task]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/42|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:47, 16 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25745824 -->
== Wikipedia translation of the week: 2023-43 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Typhoon Rusa]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Rusa 2002-08-27 0350Z.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Typhoon Rusa''' was the most powerful typhoon to strike South Korea in 43 years. It was the 21st JTWC tropical depression, the 15th named storm, and the 10th typhoon of the 2002 Pacific typhoon season. It developed on August 22 from the monsoon trough in the northwestern Pacific Ocean, well to the southeast of Japan. For several days, Rusa moved to the northwest, eventually intensifying into a powerful typhoon. On August 26, the storm moved across the Amami Islands of Japan, where Rusa left 20,000 people without power and caused two fatalities. Across Japan, the typhoon dropped torrential rainfall peaking at 902 mm (35.5 in) in Tokushima Prefecture.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:50, 23 October 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25693965 -->
== Tech News: 2023-43 ==
<section begin="technews-2023-W43"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/43|Translations]] are available.
'''Recent changes'''
* There is a new [[mw:Special:MyLanguage/Wikimedia Language engineering/Newsletter/2023/October|Language and internationalization newsletter]], written quarterly. It contains updates on new feature development, improvements in various language-related technical projects, and related support work.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Source map support has been enabled on all wikis. When you open the debugger in your browser's developer tools, you should be able to see the unminified JavaScript source code. [https://phabricator.wikimedia.org/T47514]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.2|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-24|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-10-25|en}}. It will be on all wikis from {{#time:j xg|2023-10-26|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/43|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:17, 23 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25782286 -->
== Wikipedia translation of the week: 2023-44 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Hein Eersel]]'''<br /> <small>''([[:nl:Hein Eersel]]) ([[:it:Hein Eersel]])''</small> </div>
Please be bold and help translate this article!
----
[[File:HeinEersel.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Christiaan Hendrik "Hein" Eersel''' was a Surinamese linguist and cultural researcher. He served as Minister of Education and Population Development in the cabinet of acting Prime Minister Arthur Johan May. He was also the first chancellor of the University of Suriname.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:09, 30 October 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-44 ==
<section begin="technews-2023-W44"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/44|Translations]] are available.
'''Recent changes'''
* The Structured Content team, as part of its project of [[:commons:Commons:WMF support for Commons/Upload Wizard Improvements|improving UploadWizard on Commons]], made some UX improvements to the upload step of choosing own vs not own work ([[phab:T347590|T347590]]), as well as to the licensing step for own work ([[phab:T347756|T347756]]).
* The Design Systems team has released version 1.0.0 of [[wmdoc:codex/latest/|Codex]], the new design system for Wikimedia. See the [[mw:Special:MyLanguage/Design_Systems_Team/Announcing_Codex_1.0|full announcement about the release of Codex 1.0.0]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.3|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-10-31|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-01|en}}. It will be on all wikis from {{#time:j xg|2023-11-02|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
* Listings on category pages are sorted on each wiki for that language using a [[:w:en:International Components for Unicode|library]]. For a brief period on 2 November, changes to categories will not be sorted correctly for many languages. This is because the developers are upgrading to a new version of the library. They will then use a script to fix the existing categories. This will take a few hours or a few days depending on how big the wiki is. You can [[mw:Special:MyLanguage/Wikimedia Technical Operations/ICU announcement|read more]]. [https://phabricator.wikimedia.org/T345561][https://phabricator.wikimedia.org/T267145]
* Starting November 1, the impact module (Special:Impact) will be upgraded by the Growth team. The new impact module shows newcomers more data regarding their impact on the wiki. It was tested by a few wikis during the last few months. [https://phabricator.wikimedia.org/T336203]
'''Future changes'''
* There is [[mw:Special:MyLanguage/Extension:Graph/Plans#Roadmap|a proposed plan]] for re-enabling the Graph Extension. You can help by reviewing this proposal and [[mw:Extension_talk:Graph/Plans#c-PPelberg_(WMF)-20231020221600-Update:_20_October|sharing what you think about it]].
* The WMF is working on making it possible for administrators to [[mw:Special:MyLanguage/Community_configuration_2.0|edit MediaWiki configuration directly]]. This is similar to previous work on Special:EditGrowthConfig. [[phab:T349757|A technical RfC is running until November 08, where you can provide feedback.]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/44|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W44"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21, 30 October 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25801989 -->
== Tech News: 2023-45 ==
<section begin="technews-2023-W45"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/45|Translations]] are available.
'''Recent changes'''
* In the Vector 2022 skin, the default font-size of a number of navigational elements (tagline, tools menu, navigational links, and more) has been increased slightly to match the font size used in page content. [https://phabricator.wikimedia.org/T346062]
'''Problems'''
* Last week, there was a problem displaying some recent edits on [https://noc.wikimedia.org/conf/highlight.php?file=dblists/s5.dblist a few wikis], for 1-6 hours. The edits were saved but not immediately shown. This was due to a database problem. [https://phabricator.wikimedia.org/T350443]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.4|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-11-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-08|en}}. It will be on all wikis from {{#time:j xg|2023-11-09|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
* The Growth team will reassign newcomers from former mentors to [[mw:Special:MyLanguage/Growth/Structured mentor list|the currently active mentors]]. They have also changed the notification language to be more user-friendly. [https://phabricator.wikimedia.org/T330071][https://phabricator.wikimedia.org/T327493]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/45|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W45"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:06, 6 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25838105 -->
== Wikipedia translation of the week: 2023-45 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Reclaim the Night]]'''<br /> <small>''([[:de:Reclaim the Night]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Reclaim the Night 2014.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Reclaim the Night''' is a movement started in Leeds in 1977 as part of the Women's Liberation Movement. Marches demanding that women be able to move throughout public spaces at night took place across England until the 1990s. Later, the organisation was revived and sponsors annual and national marches against rape and violence against women.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 00:40, 8 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Wikipedia translation of the week: 2023-46 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ishe Komborera Africa]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Ishe Komborera Africa.mp3|center|300px|]]
<div style="text-align:left; padding: .4em;">
"'''Ishe Komborera Africa'''" (Shona for: God Bless Africa), also called "Ishe Komborera Zimbabwe" (Shona for: God Bless Zimbabwe), was the Zimbabwean national anthem from 1980 to 1994. It was the country's first national anthem after gaining independence in 1980. It is a translation of 19th-century South African schoolteacher Enoch Sontonga's popular African hymn "Nkosi Sikelel' iAfrika" into Zimbabwe's native Shona and Ndebele languages.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 00:38, 13 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-46 ==
<section begin="technews-2023-W46"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/46|Translations]] are available.
'''Recent changes'''
* Four new wikis have been created:
** a Wikipedia in [[d:Q7598268|Moroccan Amazigh]] ([[w:zgh:|<code>w:zgh:</code>]]) [https://phabricator.wikimedia.org/T350216]
** a Wikipedia in [[d:Q35159|Dagaare]] ([[w:dga:|<code>w:dga:</code>]]) [https://phabricator.wikimedia.org/T350218]
** a Wikipedia in [[d:Q33017|Toba Batak]] ([[w:bbc:|<code>w:bbc:</code>]]) [https://phabricator.wikimedia.org/T350320]
** a Wikiquote in [[d:Q33151|Banjar]] ([[q:bjn:|<code>q:bjn:</code>]]) [https://phabricator.wikimedia.org/T350217]
'''Problems'''
* Last week, users who previously visited Meta-Wiki or Wikimedia Commons and then became logged out on those wikis could not log in again. The problem is now resolved. [https://phabricator.wikimedia.org/T350695]
* Last week, some pop-up dialogs and menus were shown with the wrong font size. The problem is now resolved. [https://phabricator.wikimedia.org/T350544]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.5|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-11-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-15|en}}. It will be on all wikis from {{#time:j xg|2023-11-16|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]).
'''Future changes'''
* Reference Previews are coming to many wikis as a default feature. They are popups for references, similar to the [[mw:Special:MyLanguage/Page Previews|PagePreviews feature]]. [[m:WMDE Technical Wishes/ReferencePreviews#Opt-out feature|You can opt out]] of seeing them. If you are [[Special:Preferences#mw-prefsection-gadgets|using the gadgets]] Reference Tooltips or Navigation Popups, you won’t see Reference Previews. [[phab:T282999|Deployment]] is planned for November 22, 2023.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Canary (also known as heartbeat) events will be produced into [https://stream.wikimedia.org/?doc#/streams Wikimedia event streams] from December 11. Streams users are advised to filter out these events, by discarding all events where <bdi lang="zxx" dir="ltr"><code><nowiki>meta.domain == "canary"</nowiki></code></bdi>. Updates to [[mw:Special:MyLanguage/Manual:Pywikibot|Pywikibot]] or [https://github.com/ChlodAlejandro/wikimedia-streams wikimedia-streams] will discard these events by default. [https://phabricator.wikimedia.org/T266798]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/46|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W46"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:52, 13 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25859263 -->
== Wikipedia translation of the week: 2023-47 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Bhagavata Mela]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Bhagavata Mela''' is a classical Indian dance that is performed in Tamil Nadu, particularly the Thanjavur area. It is choreographed as an annual Vaishnavism tradition in Melattur and nearby regions, and celebrated as a dance-drama performance art. The dance art has roots in a historic migration of practitioners of Kuchipudi, another Indian classical dance art, from Andhra Pradesh to the kingdom of Tanjavur.
The term Bhagavata, state Brandon and Banham, refers to the Hindu text Bhagavata Purana. Mela is a Sanskrit word that means "gathering, meeting of a group" and connotes a folk festival. The traditional Bhagavata Mela performance acts out the legends of Hinduism, set to the Carnatic style music.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 00:38, 04:07, 20 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-47 ==
<section begin="technews-2023-W47"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/47|Translations]] are available.
'''Changes later this week'''
* There is no new MediaWiki version this week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting on Wednesday, a new set of Wikipedias will get "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]" ({{int:project-localized-name-quwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rmywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-roa_rupwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-roa_tarawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ruewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rwwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sahwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-satwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-scwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-scnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-scowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sdwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-shwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-siwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-skwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-slwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-smwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sqwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-srwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-srnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-sswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-stwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-stqwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-suwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-szlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tcywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tetwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tgwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-thwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-towiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tpiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ttwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-twwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tyvwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-udmwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ugwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-uzwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vecwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vepwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vlswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-vowiki/en}}). This is part of the [[phab:T304110|progressive deployment of this tool to more Wikipedias]]. The communities can [[mw:Special:MyLanguage/Growth/Community configuration|configure how this feature works locally]]. [https://phabricator.wikimedia.org/T308141][https://phabricator.wikimedia.org/T308142][https://phabricator.wikimedia.org/T308143]
* The Vector 2022 skin will have some minor visual changes to drop-down menus, column widths, and more. These changes were added to four Wikipedias last week. If no issues are found, these changes will proceed to all wikis this week. These changes will make it possible to add new menus for readability and dark mode. [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Updates#November_2023:_Visual_changes,_more_deployments,_and_shifting_focus|Learn more]]. [https://phabricator.wikimedia.org/T347711]
'''Future changes'''
* There is [[mw:Extension talk:Graph/Plans#Update: 15 November|an update on re-enabling the Graph Extension]]. To speed up the process, Vega 2 will not be supported and only [https://phabricator.wikimedia.org/T335325 some protocols] will be available at launch. You can help by sharing what you think about the plan.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/47|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W47"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:55, 21 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25884616 -->
== Wikipedia translation of the week: 2023-48 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:fr:Zanskari]]'''<br /> <small>''([[:en:Zaniskari]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Zaniskari Horse in Ladakh, India.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Zaniskari''' or '''Zanskari''' is a breed of small mountain horse or pony from Ladakh, in northern India. It is named for the Zanskar valley or region in Kargil district. It is similar to the Spiti breed of Himachal Pradesh, but is better adapted to work at high altitude. Like the Spiti, it shows similarities to the Tibetan breeds of neighbouring Tibet. It is of medium size, and is often grey in colour. The breed is considered endangered, as there are only a few hundred alive today, and a conservation programme has been started at Padum, Zanskar, in the Kargil district of Ladakh.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:44, 27 November 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25797248 -->
== Tech News: 2023-48 ==
<section begin="technews-2023-W48"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/48|Translations]] are available.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.7|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-11-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-11-29|en}}. It will be on all wikis from {{#time:j xg|2023-11-30|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). There is no new MediaWiki version next week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] MediaWiki's JavaScript system will now allow <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi> syntax in gadgets and user scripts. Gadget authors should remember that users' browsers may not support it, so it should be used appropriately. [https://phabricator.wikimedia.org/T343499]
* The deployment of "[[mw:Special:MyLanguage/Help:Growth/Tools/Add_a_link|Add a link]]" announced [[m:Special:MyLanguage/Tech/News/2023/47|last week]] was postponed. It will resume this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/48|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W48"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:09, 27 November 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25906379 -->
== Wikipedia translation of the week: 2023-49 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sheikh Hussein]]'''<br /> <small>''([[:fr:Sheikh Hussein]]) ([[:it:Scec Hussèn]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sheikh Hussein.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Sheikh Hussein''' is a town in south-eastern Ethiopia. The site has been recorded in the tentative list for UNESCO World Heritage List since 2011 as a religious, cultural and historical site.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:34, 4 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25921616 -->
== Tech News: 2023-49 ==
<section begin="technews-2023-W49"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/49|Translations]] are available.
'''Recent changes'''
* The spacing between paragraphs on Vector 2022 has been changed from 7px to 14px to match the size of the text. This will make it easier to distinguish paragraphs from sentences. [https://phabricator.wikimedia.org/T351754]
* The "{{int:Visualeditor-dialog-meta-categories-defaultsort-label}}" feature in VisualEditor is working again. You no longer need to switch to source editing to edit <bdi lang="zxx" dir="ltr"><code><nowiki>{{DEFAULTSORT:...}}</nowiki></code></bdi> keywords. [https://phabricator.wikimedia.org/T337398]
'''Changes later this week'''
* There is no new MediaWiki version this week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* On 6 December, people who have the enabled the preference for "{{int:Discussiontools-preference-visualenhancements}}" will notice the [[mw:Special:MyLanguage/Talk pages project/Usability|talk page usability improvements]] appear on pages that include the <bdi lang="zxx" dir="ltr"><code><nowiki>__NEWSECTIONLINK__</nowiki></code></bdi> magic word. If you notice any issues, please [[phab:T352232|share them with the team on Phabricator]].
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Toolforge [[wikitech:News/Toolforge Grid Engine deprecation|Grid Engine shutdown process]] will start on December 14. Maintainers of [[toolforge:grid-deprecation|tools that still use this old system]] should plan to migrate to Kubernetes, or tell the team your plans on Phabricator in the task about your tool, before that date. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/VIWWQKMSQO2ED3TVUR7KPPWRTOBYBVOA/]
* Communities using [[mw:Special:MyLanguage/Structured_Discussions|Structured Discussions]] are being contacted regarding [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|the upcoming deprecation of Structured Discussions]]. You can read more about this project, and share your comments, [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|on the project's page]].
'''Events'''
* Registration & Scholarship applications are now open for the [[mw:Special:MyLanguage/Wikimedia Hackathon 2024|Wikimedia Hackathon 2024]] that will take place from 3–5 May in Tallinn, Estonia. Scholarship applications are open until 5 January 2024.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/49|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W49"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:50, 4 December 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25914435 -->
== Wikipedia translation of the week: 2023-50 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:fr:Applaudissements aux fenêtres pendant la pandémie de Covid-19]]'''<br /> <small>''([[:es:Aplauso por los trabajadores de la salud]]) ([[:gl:Aplauso ao persoal sanitario]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Koronabirus konfinamendua Lasarten 2020-03-29.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
During the COVID-19 pandemic, applauding daily at a scheduled hour was a gesture of acclamation, recognition and gratitude towards health professionals in tribute to their work at the time. This habit emerged in January 2020 in Wuhan, where the pandemic originated, and then spread to several cities around the world during the quarantines and sanitary cordons ordered as preventive measures, Italy being the first one.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:26, 11 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25925561 -->
== Tech News: 2023-50 ==
<section begin="technews-2023-W50"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/50|Translations]] are available.
'''Recent changes'''
* On Wikimedia Commons, there are some minor user-interface improvements for the "choosing own vs not own work" step in the UploadWizard. This is part of the Structured Content team's project of [[:commons:Commons:WMF support for Commons/Upload Wizard Improvements|improving UploadWizard on Commons]]. [https://phabricator.wikimedia.org/T352707][https://phabricator.wikimedia.org/T352709]
'''Problems'''
* There was a problem showing the [[mw:Special:MyLanguage/Growth/Personalized first day/Newcomer homepage|Newcomer homepage]] feature with the "impact module" and their page-view graphs, for a few days in early December. This has now been fixed. [https://phabricator.wikimedia.org/T352352][https://phabricator.wikimedia.org/T352349]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.9|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-12-12|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-12-13|en}}. It will be on all wikis from {{#time:j xg|2023-12-14|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* [[File:Octicons-tools.svg|15px|link=]] The [https://wikimediafoundation.limesurvey.net/796964 2023 Developer Satisfaction Survey] is seeking the opinions of the Wikimedia developer community. Please take the survey if you have any role in developing software for the Wikimedia ecosystem. The survey is open until 5 January 2024, and has an associated [[foundation:Legal:December_2023_Developer_Satisfaction_Survey|privacy statement]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/50|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W50"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:13, 12 December 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25945501 -->
== Wikipedia translation of the week: 2023-51 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Jamaica Bay Wildlife Refuge]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Aerial view of Subway Island, July 2019.JPG|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Jamaica Bay Wildlife Refuge''' is a wildlife refuge in New York City managed by the National Park Service as part of Gateway National Recreation Area. It is composed of the open water and intertidal salt marshes of Jamaica Bay. It lies entirely within the boundaries of New York City, divided between the boroughs of Brooklyn to the west and Queens to the east.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:05, 18 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25951007 -->
== Tech News: 2023-51 ==
<section begin="technews-2023-W51"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2023/51|Translations]] are available.
'''Tech News'''
* The next issue of Tech News will be sent out on 8 January 2024 because of [[w:en:Christmas and holiday season|the holidays]].
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.10|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2023-12-19|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2023-12-20|en}}. It will be on all wikis from {{#time:j xg|2023-12-21|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). There is no new MediaWiki version next week. [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting December 18, it won't be possible to activate Structured Discussions on a user's own talk page using the Beta feature. The Beta feature option remains available for users who want to deactivate Structured Discussions. This is part of [[mw:Structured Discussions/Deprecation|Structured Discussions' deprecation work]]. [https://phabricator.wikimedia.org/T248309]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] There will be full support for redirects in the Module namespace. The "Move Page" feature will leave an appropriate redirect behind, and such redirects will be appropriately recognized by the software (e.g. hidden from [[{{#special:UnconnectedPages}}]]). There will also be support for [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Renaming or moving modules|manual redirects]]. [https://phabricator.wikimedia.org/T120794]
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The MediaWiki JavaScript documentation is moving to a new format. During the move, you can read the old docs using [https://doc.wikimedia.org/mediawiki-core/REL1_41/js/ version 1.41]. Feedback about [https://doc.wikimedia.org/mediawiki-core/master/js/ the new site] is welcome on the [[mw:Talk:JSDoc_WMF_theme|project talk page]].
* The Wishathon is a new initiative that encourages collaboration across the Wikimedia community to develop solutions for wishes collected through the [[m:Special:MyLanguage/Community Wishlist Survey|Community Wishlist Survey]]. The first community Wishathon will take place from 15–17 March. If you are interested in a project proposal as a user, developer, designer, or product lead, you can [[m:Special:MyLanguage/Event:WishathonMarch2024|register for the event and read more]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2023/51|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2023-W51"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:18, 18 December 2023 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=25959059 -->
== Wikipedia translation of the week: 2023-52 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2023 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Plant blindness]]'''<br /> <small>''([[:fr:Cécité botanique]]) ([[:de:Pflanzenblindheit]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Plant blindness 0323.png|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Plant blindness''' is an informally-proposed form of cognitive bias, which in its broadest meaning, is a human tendency to ignore plant species. This includes such phenomena as not noticing plants in the surrounding environment, not recognizing the importance of plant life to the whole biosphere and to human affairs, a philosophical view of plants as an inferior form of life to animals and/or the inability to appreciate the unique features or aesthetics of plants. Related terms include plant‐neglect, zoo-centrism, and zoo‐chauvinism.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:58, 25 December 2023 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=25971304 -->
== Wikipedia translation of the week: 2024-02 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pax airship disaster]]'''<br /> <small>''([[:pt:Catástrofe do dirigível Pax]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sim new-mcclures-magazine 1902-09 19 5 (page 75 crop).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''''Pax''''' '''airship disaster''' was the explosion of the ''Pax'' airship on May 12, 1902, in Paris, which killed the Brazilian inventor Augusto Severo and the French mechanic Georges Saché.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 12:14, 8 January 2024 (UTC)''
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26033876 -->
== Tech News: 2024-02 ==
<section begin="technews-2024-W02"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/02|Translations]] are available.
'''Recent changes'''
* [https://mediawiki2latex.wmflabs.org/ mediawiki2latex] is a tool that converts wiki content into the formats of LaTeX, PDF, ODT, and EPUB. The code now runs many times faster due to recent improvements. There is also an optional Docker container you can [[b:de:Benutzer:Dirk_Hünniger/wb2pdf/install#Using_Docker|install]] on your local machine.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The way that Random pages are selected has been updated. This will slowly reduce the problem of some pages having a lower chance of appearing. [https://phabricator.wikimedia.org/T309477]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.13|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-09|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-10|en}}. It will be on all wikis from {{#time:j xg|2024-01-11|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/02|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W02"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:20, 9 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26026251 -->
== Wikipedia translation of the week: 2024-03 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Conversion to Islam]]'''<br /> <small>''([[:fr:Conversion à l'islam]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Sahadah-Topkapi-Palace.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Conversion to Islam''' is accepting Islam as a religion or faith and rejecting any other religion or irreligion.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:11, 15 January 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26044632 -->
== Tech News: 2024-03 ==
<section begin="technews-2024-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/03|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Pages that use the JSON [[mw:Special:MyLanguage/Manual:ContentHandler|contentmodel]] will now use tabs instead of spaces for auto-indentation. This will significantly reduce the page size. [https://phabricator.wikimedia.org/T326065]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[mw:Special:MyLanguage/Extension:Gadgets|Gadgets]] and personal user scripts may now use JavaScript syntax introduced in ES6 (also known as "ES2015") and ES7 ("ES2016"). MediaWiki validates the source code to protect other site functionality from syntax errors, and to ensure scripts are valid in all [[mw:Special:MyLanguage/Compatibility#Browsers|supported browsers]]. Previously, Gadgets could use the <bdi lang="zxx" dir="ltr"><code><nowiki>requiresES6</nowiki></code></bdi> option. This option is no longer needed and will be removed in the future. [https://phabricator.wikimedia.org/T75714]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[mw:Special:MyLanguage/Manual:Bot passwords|Bot passwords]] and [[mw:Special:MyLanguage/OAuth/Owner-only consumers|owner-only OAuth consumers]] can now be restricted to allow editing only specific pages. [https://phabricator.wikimedia.org/T349957]
* You can now [[mw:Special:MyLanguage/Extension:Thanks|thank]] edits made by bots. [https://phabricator.wikimedia.org/T341388]
* An update on the status of the Community Wishlist Survey for 2024 [[m:Special:MyLanguage/Community Wishlist Survey/Future Of The Wishlist/January 4, 2024 Update|has been published]]. Please read and give your feedback.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.14|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-16|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-17|en}}. It will be on all wikis from {{#time:j xg|2024-01-18|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting on January 17, it will not be possible to login to Wikimedia wikis from some specific old versions of the Chrome browser (versions 51–66, released between 2016 and 2018). Additionally, users of iOS 12, or Safari on Mac OS 10.14, may need to login to each wiki separately. [https://phabricator.wikimedia.org/T344791]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The <bdi lang="zxx" dir="ltr"><code>jquery.cookie</code></bdi> module was deprecated and replaced with the <bdi lang="zxx" dir="ltr"><code>mediawiki.cookie</code></bdi> module last year. A script has now been run to replace any remaining uses, and this week the temporary alias will be removed. [https://phabricator.wikimedia.org/T354966]
'''Future changes'''
* Wikimedia Deutschland is working to [[m:WMDE Technical Wishes/Reusing references|make reusing references easier]]. They are looking for people who are interested in participating in [https://wikimedia.sslsurvey.de/User-research-into-Reusing-References-Sign-up-Form-2024/en/ individual video calls for user research in January and February].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:13, 16 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26074460 -->
== Wikipedia translation of the week: 2024-04 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Kinder der Landstrasse]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Kinderdlandstrasse plakat.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Kinder der Landstrasse''' (literally: Children of the Country Road) was a project implemented by the Swiss foundation Pro Juventute from 1926 to 1973. The project aimed to assimilate the itinerant Yenish people in Switzerland by forcibly removing their children from their parents and placing them in orphanages or foster homes. Approximately 590 children were affected by this program.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 02:02, 22 January 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26044632 -->
== Tech News: 2024-04 ==
<section begin="technews-2024-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/04|Translations]] are available.
'''Problems'''
* A bug in UploadWizard prevented linking to the userpage of the uploader when uploading. It has now been fixed. [https://phabricator.wikimedia.org/T354529]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.15|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-23|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-24|en}}. It will be on all wikis from {{#time:j xg|2024-01-25|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:04, 23 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26096197 -->
== Wikipedia translation of the week: 2024-05 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Qurm Nature Reserve]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Al-Qurm Wetlands.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Qurm Nature Reserve''' is a national nature reserve in Muscat Governorate, Oman. Located on the Gulf of Oman coast, the reserve protects a mangrove forest and the surrounding wetland in a small estuary within the urban area of Qurm. Established in 1975, the reserve has been designated as an Important Bird Area since 1994, and as a protected Ramsar site since 2013.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:03, 29 January 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26149847 -->
== Tech News: 2024-05 ==
<section begin="technews-2024-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/05|Translations]] are available.
'''Recent changes'''
* Starting Monday January 29, all talk pages messages' timestamps will become a link. This link is a permanent link to the comment. It allows users to find the comment they are looking for, even if this comment was moved elsewhere. This will affect all wikis except for the English Wikipedia. You can read more about this change [https://diff.wikimedia.org/2024/01/29/talk-page-permalinks-dont-lose-your-threads/ on Diff] or [[mw:Special:MyLanguage/Help:DiscussionTools#Talk_pages_permalinking|on Mediawiki.org]].<!-- The Diff post will be published on Monday morning UTC--> [https://phabricator.wikimedia.org/T302011]
* There are some improvements to the CAPTCHA to make it harder for spam bots and scripts to bypass it. If you have feedback on this change, please comment on [[phab:T141490|the task]]. Staff are monitoring metrics related to the CAPTCHA, as well as secondary metrics such as account creations and edit counts.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.16|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-01-30|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-01-31|en}}. It will be on all wikis from {{#time:j xg|2024-02-01|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] On February 1, a link will be added to the "Tools" menu to download a [[w:en:QR code|QR code]] that links to the page you are viewing. There will also be a new [[{{#special:QrCode}}]] page to create QR codes for any Wikimedia URL. This addresses the [[m:Community Wishlist Survey 2023/Mobile and apps/Add ability to share QR code for a page in any Wikimedia project|#19 most-voted wish]] from the [[m:Community Wishlist Survey 2023/Results|2023 Community Wishlist Survey]]. [https://phabricator.wikimedia.org/T329973]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[mw:Special:MyLanguage/Extension:Gadgets|Gadgets]] which only work in some skins have sometimes used the <bdi lang="zxx" dir="ltr"><code>targets</code></bdi> option to limit where you can use them. This will stop working this week. You should use the <bdi lang="zxx" dir="ltr"><code>skins</code></bdi> option instead. [https://phabricator.wikimedia.org/T328497]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:31, 29 January 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26137870 -->
== Wikipedia translation of the week: 2024-06 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Timurid architecture]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Gur-e-Amir Mausolueum - Samarkand - Uzbekistan (7488414078).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Timurid architecture''' was an important stage in the architectural history of Iran and Central Asia during the late 14th and 15th centuries. The Timurid Empire (1370–1507), founded by Timur (d. 1405) and conquering most of this region, oversaw a cultural renaissance. In architecture, the Timurid dynasty patronized the construction of palaces, mausoleums, and religious monuments across the region. Their architecture is distinguished by its grand scale, luxurious decoration in tilework, and sophisticated geometric vaulting. This architectural style, along with other aspects of Timurid art, spread across the empire and subsequently influenced the architecture of other empires from the Middle East to the Indian subcontinent.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:23, 5 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26169542 -->
== Tech News: 2024-06 ==
<section begin="technews-2024-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/06|Translations]] are available.
'''Recent changes'''
*The mobile site history pages now use the same HTML as the desktop history pages. If you hear of any problems relating to mobile history usage please point them to [[phab:T353388|the phabricator task]].
*On most wikis, admins can now block users from making specific actions. These actions are: uploading files, creating new pages, moving (renaming) pages, and sending thanks. The goal of this feature is to allow admins to apply blocks that are adequate to the blocked users' activity. [[m:Special:MyLanguage/Community health initiative/Partial blocks#action-blocks|Learn more about "action blocks"]]. [https://phabricator.wikimedia.org/T242541][https://phabricator.wikimedia.org/T280531]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.17|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-06|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-07|en}}. It will be on all wikis from {{#time:j xg|2024-02-08|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Talk pages permalinks that included diacritics and non-Latin script were malfunctioning. This issue is fixed. [https://phabricator.wikimedia.org/T356199]
'''Future changes'''
* [[m:WMDE Technical Wishes/ReferencePreviews#24WPs|24 Wikipedias]] with [[mw:Special:MyLanguage/Reference_Tooltips|Reference Tooltips]] as a default gadget are encouraged to remove that default flag. This would make [[mw:Special:MyLanguage/Help:Reference_Previews|Reference Previews]] the new default for reference popups, leading to a more consistent experience across wikis. For [[m:WMDE Technical Wishes/ReferencePreviews#46WPs|46 Wikipedias]] with less than 4 interface admins, the change is already scheduled for mid-February, [[m:Talk:WMDE Technical Wishes/ReferencePreviews#Reference Previews to become the default for previewing references on more wikis.|unless there are concerns]]. The older Reference Tooltips gadget will still remain usable and will override this feature, if it is available on your wiki and you have enabled it in your settings. [https://meta.wikimedia.org/wiki/WMDE_Technical_Wishes/ReferencePreviews#Reference_Previews_to_become_the_default_for_previewing_references_on_more_wikis][https://phabricator.wikimedia.org/T355312]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:22, 5 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26180971 -->
== Wikipedia translation of the week: 2024-07 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Adoration of the Magi (Fra Angelico and Filippo Lippi)]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Fra Angelico, Fra Filippo Lippi, The Adoration of the Magi.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''''Adoration of the Magi''''' is a tondo, or circular painting, of the Adoration of the Magi assumed to be that recorded in 1492 in the Palazzo Medici Riccardi in Florence as by Fra Angelico. It dates from the mid-15th century and is now in the National Gallery of Art in Washington D.C. Most art historians think that Filippo Lippi painted more of the original work, and that it was added to some years after by other artists, as well as including work by assistants in the workshops of both the original masters. It has been known as the Washington Tondo and Cook Tondo after Herbert Cook, and this latter name in particular continues to be used over 50 years after the painting left the Cook collection.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 07:00, 12 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26187446 -->
== Tech News: 2024-07 ==
<section begin="technews-2024-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/07|Translations]] are available.
'''Recent changes'''
* The [[d:Wikidata:SPARQL query service/WDQS graph split|WDQS Graph Split experiment]] is working and loaded onto 3 test servers. The team in charge is testing the split's impact and requires feedback from WDQS users through the UI or programmatically in different channels. [https://www.wikidata.org/wiki/Wikidata_talk:SPARQL_query_service/WDQS_graph_split][https://phabricator.wikimedia.org/T356773][https://www.wikidata.org/wiki/User:Sannita_(WMF)] Users' feedback will validate the impact of various use cases and workflows around the Wikidata Query service. [https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/WDQS_backend_update/October_2023_scaling_update][https://www.mediawiki.org/wiki/Wikidata_Query_Service/User_Manual#Federation]
'''Problems'''
*There was a bug that affected the appearance of visited links when using mobile device to access wiki sites. It made the links appear black; [[phab:T356928|this issue]] is fixed.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.18|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-13|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-14|en}}. It will be on all wikis from {{#time:j xg|2024-02-15|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] As work continues on the grid engine deprecation,[https://wikitech.wikimedia.org/wiki/News/Toolforge_Grid_Engine_deprecation] tools on the grid engine will be stopped starting on February 14th, 2024. If you have tools actively migrating you can ask for an extension so they are not stopped. [https://wikitech.wikimedia.org/wiki/Portal:Toolforge/About_Toolforge#Communication_and_support]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 05:49, 13 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26223994 -->
== Wikipedia translation of the week: 2024-08 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:nl:Graf met de handjes]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Weg langs het kerkhof tegenover 1, Roermond.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The monument '''Van Gorkum-Van Aefferden''', more well known as the "'''grave with the little hands'''" is a monumental Tombstone in the Dutch city of Roermond.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 13:24, 19 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26260848 -->
== Tech News: 2024-08 ==
<section begin="technews-2024-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/08|Translations]] are available.
'''Recent changes'''
* If you have the "{{int:Tog-enotifwatchlistpages}}" option enabled, edits by bot accounts no longer trigger notification emails. Previously, only minor edits would not trigger the notification emails. [https://phabricator.wikimedia.org/T356984]
* There are changes to how user and site scripts load for [[mw:Special:MyLanguage/Skin:Vector/2022| Vector 2022]] on specific wikis. The changes impacted the following Wikis: all projects with [[mw:Special:MyLanguage/Skin:Vector|Vector legacy]] as the default skin, Wikivoyage, and Wikibooks. Other wikis will be affected over the course of the next three months. Gadgets are not impacted. If you have been affected or want to minimize the impact on your project, see [[Phab:T357580| this ticket]]. Please coordinate and take action proactively.
*Newly auto-created accounts (the accounts you get when you visit a new wiki) now have the same local notification preferences as users who freshly register on that wiki. It is effected in four notification types listed in the [[phab:T353225|task's description]].
*The maximum file size when using [[c:Special:MyLanguage/Commons:Upload_Wizard|Upload Wizard]] is now 5 GiB. [https://phabricator.wikimedia.org/T191804]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.19|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-20|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-21|en}}. It will be on all wikis from {{#time:j xg|2024-02-22|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Selected tools on the grid engine have been [[wikitech:News/Toolforge_Grid_Engine_deprecation|stopped]] as we prepare to shut down the grid on March 14th, 2024. The tool's code and data have not been deleted. If you are a maintainer and you want your tool re-enabled reach out to the [[wikitech:Portal:Toolforge/About_Toolforge#Communication_and_support|team]]. Only tools that have asked for extension are still running on the grid.
* The CSS <bdi lang="zxx" dir="ltr"><code>[https://developer.mozilla.org/en-US/docs/Web/CSS/filter filter]</code></bdi> property can now be used in HTML <bdi lang="zxx" dir="ltr"><code>style</code></bdi> attributes in wikitext. [https://phabricator.wikimedia.org/T308160]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:37, 19 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26254282 -->
== Wikipedia translation of the week: 2024-09 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Doorway effect]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
The '''doorway effect''' is a known psychological event where a person's short-term memory declines when passing through a doorway moving from one location to another when it would not if they had remained in the same place. People experience this effect by forgetting what they were going to do, thinking about, or planning upon entering a different room. This is thought to be due to the change in one's physical environment, which is used to distinguish boundaries between remembered events: memories of events encountered in the present environment are more accessible than those beyond it.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:30, 26 February 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26260848 -->
== Tech News: 2024-09 ==
<section begin="technews-2024-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/09|Translations]] are available.
'''Recent changes'''
* The [[mw:Special:MyLanguage/VisualEditor_on_mobile|mobile visual editor]] is now the default editor for users who never edited before, at a small group of wikis. [[mw:Special:MyLanguage/VisualEditor_on_mobile/VE_mobile_default#A/B_test_results| Research ]] shows that users using this editor are slightly more successful publishing the edits they started, and slightly less successful publishing non-reverted edits. Users who defined the wikitext editor as their default on desktop will get the wikitext editor on mobile for their first edit on mobile as well. [https://phabricator.wikimedia.org/T352127]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[mw:Special:MyLanguage/ResourceLoader/Core modules#mw.config|mw.config]] value <code>wgGlobalGroups</code> now only contains groups that are active in the wiki. Scripts no longer have to check whether the group is active on the wiki via an API request. A code example of the above is: <bdi lang="zxx" dir="ltr"><code>if (/globalgroupname/.test(mw.config.get("wgGlobalGroups")))</code></bdi>. [https://phabricator.wikimedia.org/T356008]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.20|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-02-27|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-02-28|en}}. It will be on all wikis from {{#time:j xg|2024-02-29|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* The right to change [[mw:Special:MyLanguage/Manual:Tags|edit tags]] (<bdi lang="zxx" dir="ltr"><code>changetags</code></bdi>) will be removed from users in Wikimedia sites, keeping it by default for admins and bots only. Your community can ask to retain the old configuration on your wiki before this change happens. Please indicate in [[phab:T355639|this ticket]] to keep it for your community before the end of March 2024.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:23, 26 February 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26294125 -->
== Wikipedia translation of the week: 2024-10 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Sissieretta Jones]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:1899 poster of Mme. M. Sissieretta Jones.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Matilda Sissieretta Joyner Jones''' (January 5, 1868, or 1869 – June 24, 1933) was an American soprano. She sometimes was called "The Black Patti" in reference to Italian opera singer Adelina Patti. Jones' repertoire included grand opera, light opera, and popular music
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:33, 4 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26313143 -->
== Tech News: 2024-10 ==
<section begin="technews-2024-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/10|Translations]] are available.
'''Recent changes'''
* The <bdi lang="zxx" dir="ltr"><code>Special:Book</code></bdi> page (as well as the associated "Create a book" functionality) provided by the old [[mw:Special:MyLanguage/Extension:Collection|Collection extension]] has been removed from all Wikisource wikis, as it was broken. This does not affect the ability to download normal books, which is provided by the [[mw:Special:MyLanguage/Extension:Wikisource|Wikisource extension]]. [https://phabricator.wikimedia.org/T358437]
* [[m:Wikitech|Wikitech]] now uses the next-generation [[mw:Special:MyLanguage/Parsoid|Parsoid]] wikitext parser by default to generate all pages in the Talk namespace. Report any problems on the [[mw:Talk:Parsoid/Parser_Unification/Known_Issues|Known Issues discussion page]]. You can use the [[mw:Special:MyLanguage/Extension:ParserMigration|ParserMigration]] extension to control the use of Parsoid; see the [[mw:Special:MyLanguage/Help:Extension:ParserMigration|ParserMigration help documentation]] for more details.
* Maintenance on [https://etherpad.wikimedia.org etherpad] is completed. If you encounter any issues, please indicate in [[phab:T316421|this ticket]].
* [[File:Octicons-tools.svg|12px|link=|alt=| Advanced item]] [[mw:Special:MyLanguage/Extension:Gadgets|Gadgets]] allow interface admins to create custom features with CSS and JavaScript. The <bdi lang="zxx" dir="ltr"><code>Gadget</code></bdi> and <bdi lang="zxx" dir="ltr"><code>Gadget_definition</code></bdi> namespaces and <bdi lang="zxx" dir="ltr"><code>gadgets-definition-edit</code></bdi> user right were reserved for an experiment in 2015, but were never used. These were visible on Special:Search and Special:ListGroupRights. The unused namespaces and user rights are now removed. No pages are moved, and no changes need to be made. [https://phabricator.wikimedia.org/T31272]
* A usability improvement to the "Add a citation" in Wikipedia workflow has been made, the insert button was moved to the popup header. [https://phabricator.wikimedia.org/T354847]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.21|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-05|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-06|en}}. It will be on all wikis from {{#time:j xg|2024-03-07|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* All wikis will be read-only for a few minutes on March 20. This is planned at 14:00 UTC. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T358233]
* The HTML markup of headings and section edit links will be changed later this year to improve accessibility. See [[mw:Special:MyLanguage/Heading_HTML_changes|Heading HTML changes]] for details. The new markup will be the same as in the new Parsoid wikitext parser. You can test your gadget or stylesheet with the new markup if you add <bdi lang="zxx" dir="ltr"><code>?useparsoid=1</code></bdi> to your URL ([[mw:Special:MyLanguage/Help:Extension:ParserMigration#Selecting_a_parser_using_a_URL_query_string|more info]]) or turn on Parsoid read views in your user options ([[mw:Special:MyLanguage/Help:Extension:ParserMigration#Enabling_via_user_preference|more info]]).
*
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:47, 4 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26329807 -->
== Wikipedia translation of the week: 2024-11 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Preventative Coup of November 11]]'''<br /> <small>''([[:es:Golpe de Estado en Brasil de 1955]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Exército na casa de Café Filho.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Preventative Coup of November 11''' sometimes called the '''1955 Brazilian coup d'état''' or referred to as an "anti-coup" or a "counter-coup" (Portuguese: ''Novembrada, Movimento de 11 de Novembro, Contragolpe, Golpe Preventivo do Marechal Lott'') was a series of military and political events led by Henrique Teixeira Lott that resulted in Nereu Ramos assuming the presidency of Brazil until being peacefully succeeded by Juscelino Kubitschek a few months later. The bloodless coup removed Carlos Luz from the presidency because he was suspected of plotting to prevent Kubitschek from taking office. As a result of the tensions, Brazil had three presidents in the span of a single week.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:04, 11 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26366849 -->
== Tech News: 2024-11 ==
<section begin="technews-2024-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/11|Translations]] are available.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.22|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-12|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-13|en}}. It will be on all wikis from {{#time:j xg|2024-03-14|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* After consulting with various communities, the line height of the text on the [[mw:Special:MyLanguage/Skin:Minerva Neue|Minerva skin]] will be increased to its previous value of 1.65. Different options for typography can also be set using the options in the menu, as needed. [https://phabricator.wikimedia.org/T358498]
*The active link color in [[mw:Special:MyLanguage/Skin:Minerva Neue|Minerva]] will be changed to provide more consistency with our other platforms and best practices. [https://phabricator.wikimedia.org/T358516]
* [[c:Special:MyLanguage/Commons:Structured data|Structured data on Commons]] will no longer ask whether you want to leave the page without saving. This will prevent the “information you’ve entered may not be saved” popups from appearing when no information have been entered. It will also make file pages on Commons load faster in certain cases. However, the popups will be hidden even if information has indeed been entered. If you accidentally close the page before saving the structured data you entered, that data will be lost. [https://phabricator.wikimedia.org/T312315]
'''Future changes'''
* All wikis will be read-only for a few minutes on March 20. This is planned at 14:00 UTC. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T358233][https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:04, 11 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26374013 -->
== Wikipedia translation of the week: 2024-12 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Hojang Taret]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Hojang Taret''' is a classical Meitei language play based on Euripides's ancient Greek tragedy The Phoenician Women. It is directed by Oasis Sougaijam and produced by The Umbilical Theatre in Imphal, Kangleipak. It depicts the moral ambiguities of conflict between brothers resulting to the ruination of the ancient city of Thebes.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:52, 18 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26366849 -->
== Tech News: 2024-12 ==
<section begin="technews-2024-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/12|Translations]] are available.
'''Recent changes'''
* The notice "Language links are at the top of the page" that appears in the [[mw:Special:MyLanguage/Skin:Vector/2022|Vector 2022 skin]] main menu has been removed now that users have learned the new location of the Language switcher. [https://phabricator.wikimedia.org/T353619]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[m:Special:MyLanguage/IP_Editing:_Privacy_Enhancement_and_Abuse_Mitigation/IP_Info_feature|IP info feature]] displays data from Spur, an IP addresses database. Previously, the only data source for this feature was MaxMind. Now, IP info is more useful for patrollers. [https://phabricator.wikimedia.org/T341395]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The Toolforge Grid Engine services have been shut down after the final migration process from Grid Engine to Kubernetes. [https://wikitech.wikimedia.org/wiki/Obsolete:Toolforge/Grid][https://wikitech.wikimedia.org/wiki/News/Toolforge_Grid_Engine_deprecation][https://techblog.wikimedia.org/2022/03/14/toolforge-and-grid-engine/]
* Communities can now customize the default reasons for undeleting a page by creating [[MediaWiki:Undelete-comment-dropdown]]. [https://phabricator.wikimedia.org/T326746]
'''Problems'''
* [[m:Special:MyLanguage/WMDE_Technical_Wishes/RevisionSlider|RevisionSlider]] is an interface to interactively browse a page's history. Users in [[mw:Special:MyLanguage/Extension:RevisionSlider/Developing_a_RTL-accessible_feature_in_MediaWiki_-_what_we%27ve_learned_while_creating_the_RevisionSlider|right-to-left]] languages reported RevisionSlider reacting wrong to mouse clicks. This should be fixed now. [https://phabricator.wikimedia.org/T352169]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.23|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-19|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-20|en}}. It will be on all wikis from {{#time:j xg|2024-03-21|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* All wikis will be read-only for a few minutes on March 20. This is planned at [https://zonestamp.toolforge.org/1710943200 14:00 UTC]. [https://phabricator.wikimedia.org/T358233][https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/Server_switch]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:40, 18 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26410165 -->
== Wikipedia translation of the week: 2024-13 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Magna Lykseth-Skogman]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Magna Lykseth in Tristan och Isolde at Kungliga Operan 1909 - SMV - GL164.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Magna Elvine Lykseth-Skogman''' (6 February 1874 – 13 November 1949), also known as Magna Lykseth-Schjerven, was a Norwegian-born Swedish operatic soprano. After making her début at the Royal Swedish Opera in 1901 as Santuzza in Cavalleria rusticana, she was engaged there until 1918 becoming the company's prima donna. She performed leading roles in a wide range of operas but is remembered in particular for her Wagnerian interpretations, creating Brünnhilde in the Swedish premières of Siegfried and Götterdämmerung, and Isolde in 1909. Considered to be one of the most outstanding Swedish opera singers of her generation, she was awarded the Litteris et Artibus medal in 1907 and became a member of the Royal Swedish Academy of Music in 1912
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:00, 25 March 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26447450 -->
== Tech News: 2024-13 ==
<section begin="technews-2024-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/13|Translations]] are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] An update was made on March 18th 2024 to how various projects load site, user JavaScript and CSS in [[mw:Special:MyLanguage/Skin:Vector/2022|Vector 2022 skin]]. A [[phab:T360384|checklist]] is provided for site admins to follow.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.24|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-03-26|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-03-27|en}}. It will be on all wikis from {{#time:j xg|2024-03-28|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:57, 25 March 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26446209 -->
== Wikipedia translation of the week: 2024-14 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lidder Valley]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Pahalgam Valley.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Lidder Valley''' or Liddar Valley is a Himalayan sub-valley that forms the southeastern corner of Anantnag district in Indian-administered Kashmir. The Lidder River flows down the valley. The entrance to the valley lies 7 km northeast from Anantnag town and 62 km southeast from Srinagar, the summer capital of Jammu and Kashmir. It is a 40-km-long gorge valley with an average width of 3 km.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:15, 1 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26509189 -->
== Tech News: 2024-14 ==
<section begin="technews-2024-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/14|Translations]] are available.
'''Recent changes'''
* Users of the [[mw:Special:MyLanguage/Reading/Web/Accessibility_for_reading|reading accessibility]] beta feature will notice that the default line height for the standard and large text options has changed. [https://phabricator.wikimedia.org/T359030]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.25|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-02|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-03|en}}. It will be on all wikis from {{#time:j xg|2024-04-04|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* The Wikimedia Foundation has an annual plan. The annual plan decides what the Wikimedia Foundation will work on. You can now read [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2024-2025/Product & Technology OKRs#Draft Key Results|the draft key results]] for the Product and Technology department. They are suggestions for what results the Foundation wants from big technical changes from July 2024 to June 2025. You can [[m:Talk:Wikimedia Foundation Annual Plan/2024-2025/Product & Technology OKRs|comment on the talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 03:36, 2 April 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26462933 -->
== Wikipedia translation of the week: 2024-15 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Operation Kraai]]'''<br /> </div>
Please be bold and help translate this article!
----
[[File:Overzicht van het vliegveld te Djokja vanuit de 'Control Tower', Bestanddeelnr 5128.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Operation Kraai''' (Operation Crow) was a Dutch military offensive against the de facto Republic of Indonesia in December 1948 after negotiations failed. With the advantage of surprise the Dutch managed to capture the Indonesian Republic's temporary capital, Yogyakarta, and seized Indonesian leaders such as de facto Republican President Sukarno. This apparent military success was however followed by guerrilla warfare, while the violation of the Renville Agreement ceasefire diplomatically isolated the Dutch, leading to the Dutch–Indonesian Round Table Conference and recognition of the United States of Indonesia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:47, 8 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26550154 -->
== Tech News: 2024-15 ==
<section begin="technews-2024-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/15|Translations]] are available.
'''Recent changes'''
* Web browsers can use tools called [[:w:en:Browser extension|extensions]]. There is now a Chrome extension called [[m:Future Audiences/Experiment:Citation Needed|Citation Needed]] which you can use to see if an online statement is supported by a Wikipedia article. This is a small experiment to see if Wikipedia can be used this way. Because it is a small experiment, it can only be used in Chrome in English.
* [[File:Octicons-gift.svg|12px|link=|alt=|Wishlist item]] A new [[mw:Special:MyLanguage/Help:Edit Recovery|Edit Recovery]] feature has been added to all wikis, available as a [[Special:Preferences#mw-prefsection-editing|user preference]]. Once you enable it, your in-progress edits will be stored in your web browser, and if you accidentally close an editing window or your browser or computer crashes, you will be prompted to recover the unpublished text. Please leave any feedback on the [[m:Special:MyLanguage/Talk:Community Wishlist Survey 2023/Edit-recovery feature|project talk page]]. This was the #8 wish in the 2023 Community Wishlist Survey.
* Initial results of [[mw:Special:MyLanguage/Edit check|Edit check]] experiments [[mw:Special:MyLanguage/Edit_check#4_April_2024|have been published]]. Edit Check is now deployed as a default feature at [[phab:T342930#9538364|the wikis that tested it]]. [[mw:Talk:Edit check|Let us know]] if you want your wiki to be part of the next deployment of Edit check. [https://phabricator.wikimedia.org/T342930][https://phabricator.wikimedia.org/T361727]
* Readers using the [[mw:Special:MyLanguage/Skin:Minerva Neue|Minerva skin]] on mobile will notice there has been an improvement in the line height across all typography settings. [https://phabricator.wikimedia.org/T359029]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.42/wmf.26|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-09|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-10|en}}. It will be on all wikis from {{#time:j xg|2024-04-11|en}} ([[mw:MediaWiki 1.42/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* New accounts and logged-out users will get the [[mw:Special:MyLanguage/VisualEditor|visual editor]] as their default editor on mobile. This deployment is made at all wikis except for the English Wikipedia. [https://phabricator.wikimedia.org/T361134]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:38, 8 April 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26564838 -->
== Wikipedia translation of the week: 2024-16 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:ru:Павильон Росси]]'''<br /> <small>''([[:en:Rossi Pavilion]]) ([[:fr:Pavillon Rossi]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Rossi's Pavilion in Mikhailovsky Garden. Saint-Petersburg. 1825..jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Rossi Pavilion''' (Russian: Павильон Росси) is a pavilion on the bank of the Moyka River in the Mikhailovsky Garden in Saint Petersburg. It was designed by architect Carlo Rossi in the early 1820s and built in 1825 during his redevelopment of the garden.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:53, 15 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26565118 -->
== Tech News: 2024-16 ==
<section begin="technews-2024-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/16|Translations]] are available.
'''Problems'''
* Between 2 April and 8 April, on wikis using [[mw:Special:MyLanguage/Extension:FlaggedRevs|Flagged Revisions]], the "{{Int:tag-mw-reverted}}" tag was not applied to undone edits. In addition, page moves, protections and imports were not autoreviewed. This problem is now fixed. [https://phabricator.wikimedia.org/T361918][https://phabricator.wikimedia.org/T361940]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.1|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-16|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-17|en}}. It will be on all wikis from {{#time:j xg|2024-04-18|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[mw:Special:MyLanguage/Help:Magic words#DEFAULTSORT|Default category sort keys]] will now affect categories added by templates placed in [[mw:Special:MyLanguage/Help:Cite|footnotes]]. Previously footnotes used the page title as the default sort key even if a different default sort key was specified (category-specific sort keys already worked). [https://phabricator.wikimedia.org/T40435]
* A new variable <bdi lang="zxx" dir="ltr"><code>page_last_edit_age</code></bdi> will be added to [[Special:AbuseFilter|abuse filters]]. It tells how many seconds ago the last edit to a page was made. [https://phabricator.wikimedia.org/T269769]
'''Future changes'''
* Volunteer developers are kindly asked to update the code of their tools and features to handle [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]]. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers/2024-04 CTA|Learn more]].
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Four database fields will be removed from database replicas (including [[quarry:|Quarry]]). This affects only the <bdi lang="zxx" dir="ltr"><code>abuse_filter</code></bdi> and <bdi lang="zxx" dir="ltr"><code>abuse_filter_history</code></bdi> tables. Some queries might need to be updated. [https://phabricator.wikimedia.org/T361996]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:29, 15 April 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26564838 -->
== Wikipedia translation of the week: 2024-17 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Devorà Ascarelli]]'''<br /> <small>''([[:it:Debora Ascarelli]]) ([[:es:Devorà Ascarelli]])''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Devorà Ascarelli''' was a 16th-century Italian poet living in Rome, Italy. Ascarelli may have been the first Jewish woman to have a book of her own work published.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] 01:35, 22 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26624302 -->
== Tech News: 2024-17 ==
<section begin="technews-2024-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/17|Translations]] are available.
'''Recent changes'''
* Starting this week, newcomers editing Wikipedia [[mw:Special:MyLanguage/Growth/Positive reinforcement#Leveling up 3|will be encouraged]] to try structured tasks. [[mw:Special:MyLanguage/Growth/Feature summary#Newcomer tasks|Structured tasks]] have been shown to [[mw:Special:MyLanguage/Growth/Personalized first day/Structured tasks/Add a link/Experiment analysis, December 2021|improve newcomer activation and retention]]. [https://phabricator.wikimedia.org/T348086]
* You can [[m:Special:MyLanguage/Coolest Tool Award|nominate your favorite tools]] for the fifth edition of the Coolest Tool Award. Nominations will be open until May 10.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.2|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-23|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-04-24|en}}. It will be on all wikis from {{#time:j xg|2024-04-25|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* This is the last warning that by the end of May 2024 the Vector 2022 skin will no longer share site and user scripts/styles with old Vector. For user-scripts that you want to keep using on Vector 2022, copy the contents of [[{{#special:MyPage}}/vector.js]] to [[{{#special:MyPage}}/vector-2022.js]]. There are [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Features/Loading Vector 2010 scripts|more technical details]] available. Interface administrators who foresee this leading to lots of technical support questions may wish to send a mass message to your community, as was done on French Wikipedia. [https://phabricator.wikimedia.org/T362701]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:28, 22 April 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26647188 -->
== Wikipedia translation of the week: 2024-18 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:1989 Serbian general election]]'''<br /> <small>''([[:sr:Председнички избори у Србији 1989.]]) ([[:vi:Tổng tuyển cử Serbia 1989]])''</small></div>
Please be bold and help translate this article!
----
[[File:Parliament of SR Serbia (1989–1991).svg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''General elections were held in Serbia''', a constituent federal unit of SFR Yugoslavia, on 12 November 1989 to elect the president of the presidency of the Socialist Republic of Serbia and delegates of the Assembly of SR Serbia. Voting for delegates also took place on 10 and 30 November 1989. In addition to the general elections, local elections were held simultaneously. These were the first direct elections conducted after the adoption of the 1974 Yugoslav Constitution and the delegate electoral system, and the last elections conducted under a one-party system.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:32, 29 April 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26624302 -->
== Tech News: 2024-18 ==
<section begin="technews-2024-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/18|Translations]] are available.
'''Recent changes'''
[[File:Talk_pages_default_look_(April_2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* The appearance of talk pages changed for the following wikis: {{int:project-localized-name-azwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-bnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hiwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-idwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ptwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-rowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-thwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ukwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-viwiki/en}}. These wikis participated to a test, where 50% of users got the new design, for one year. As this test [[Mw:Special:MyLanguage/Talk pages project/Usability/Analysis|gave positive results]], the new design is deployed on these wikis as the default design. It is possible to opt-out these changes [[Special:Preferences#mw-prefsection-editing|in user preferences]] ("{{int:discussiontools-preference-visualenhancements}}"). The deployment will happen at all wikis in the coming weeks. [https://phabricator.wikimedia.org/T341491]
* Seven new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q33014|Betawi]] ([[w:bew:|<code>w:bew:</code>]]) [https://phabricator.wikimedia.org/T357866]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35708|Kusaal]] ([[w:kus:|<code>w:kus:</code>]]) [https://phabricator.wikimedia.org/T359757]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35513|Igala]] ([[w:igl:|<code>w:igl:</code>]]) [https://phabricator.wikimedia.org/T361644]
** a {{int:project-localized-name-group-wiktionary}} in [[d:Q33541|Karakalpak]] ([[wikt:kaa:|<code>wikt:kaa:</code>]]) [https://phabricator.wikimedia.org/T362135]
** a {{int:project-localized-name-group-wikisource}} in [[d:Q9228|Burmese]] ([[s:my:|<code>s:my:</code>]]) [https://phabricator.wikimedia.org/T361085]
** a {{int:project-localized-name-group-wikisource}} in [[d:Q9237|Malay]] ([[s:ms:|<code>s:ms:</code>]]) [https://phabricator.wikimedia.org/T363039]
** a {{int:project-localized-name-group-wikisource}} in [[d:Q8108|Georgian]] ([[s:ka:|<code>s:ka:</code>]]) [https://phabricator.wikimedia.org/T363085]
* You can now [https://translatewiki.net/wiki/Support#Early_access:_Watch_Message_Groups_on_Translatewiki.net watch message groups/projects] on [[m:Special:MyLanguage/translatewiki.net|Translatewiki.net]]. Initially, this feature will notify you of added or deleted messages in these groups. [https://phabricator.wikimedia.org/T348501]
* Dark mode is now available on all wikis, on mobile web for logged-in users who opt into the [[Special:MobileOptions|advanced mode]]. This is the early release of the feature. Technical editors are invited to [https://night-mode-checker.wmcloud.org/ check for accessibility issues on wikis]. See [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-04|more detailed guidelines]].
'''Problems'''
* [[mw:Special:MyLanguage/Help:Extension:Kartographer|Kartographer]] maps can use an alternative visual style without labels, by using <bdi lang="zxx" dir="ltr"><code><nowiki>mapstyle="osm"</nowiki></code></bdi>. This wasn't working in previews, creating the wrong impression that it wasn't supported. This has now been fixed. [https://phabricator.wikimedia.org/T362531]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.3|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-04-30|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-01|en}}. It will be on all wikis from {{#time:j xg|2024-05-02|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 03:34, 30 April 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26689057 -->
== Wikipedia translation of the week: 2024-19 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:#DDDDDD; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Heinrich Bünting]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Heinrich Bünting''' (1545 – 1606) was a Protestant pastor and theologian. He is best known for his book of woodcut maps titled Itinerarium Sacrae Scripturae (Travel book through Holy Scripture) first published in 1581.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:27, 6 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26624302 -->
== Tech News: 2024-19 ==
<section begin="technews-2024-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/19|Translations]] are available.
'''Recent changes'''
[[File:Talk_pages_default_look_(April_2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* The appearance of talk pages changed for all wikis, except for Commons, Wikidata and most Wikipedias ([[m:Special:MyLanguage/Tech/News/2024/18|a few]] have already received this design change). You can read the detail of the changes [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|on ''Diff'']]. It is possible to opt-out these changes [[Special:Preferences#mw-prefsection-editing|in user preferences]] ("{{int:discussiontools-preference-visualenhancements}}"). The deployment will happen at remaining wikis in the coming weeks. [https://phabricator.wikimedia.org/T352087][https://phabricator.wikimedia.org/T319146]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Interface admins now have greater control over the styling of article components on mobile with the introduction of the <code>SiteAdminHelper</code>. More information on how styles can be disabled can be found [[mw:Special:MyLanguage/Extension:WikimediaMessages#Site_admin_helper|at the extension's page]]. [https://phabricator.wikimedia.org/T363932]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]] has added article body sections in JSON format and a curated short description field to the existing parsed Infobox. This expansion to the API is also available via Wikimedia Cloud Services. [https://enterprise.wikimedia.com/blog/article-sections-and-description/]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.4|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-07|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-08|en}}. It will be on all wikis from {{#time:j xg|2024-05-09|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* When you look at the Special:Log page, the first view is labelled "All public logs", but it only shows some logs. This label will now say "Main public logs". [https://phabricator.wikimedia.org/T237729]
'''Future changes'''
* A new service will be built to replace [[mw:Special:MyLanguage/Extension:Graph|Extension:Graph]]. Details can be found in [[mw:Special:MyLanguage/Extension:Graph/Plans|the latest update]] regarding this extension.
* Starting May 21, English Wikipedia and German Wikipedia will get the possibility to activate "[[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]]". This is part of the [[phab:T304110|progressive deployment of this tool to all Wikipedias]]. These communities can [[mw:Special:MyLanguage/Growth/Community configuration|activate and configure the feature locally]]. [https://phabricator.wikimedia.org/T308144]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:45, 6 May 2024 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26729363 -->
== Wikipedia translation of the week: 2024-20 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background:var(--background-color-backdrop-dark, #DDDDDD); border:1px solid #BBBBBB; color:var(--color-inverted, #000000); padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ruyan (district)]]'''<br /> <small>''([[:fa:رویان (طبرستان)]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Northern Iran and its surroundings during the Iranian intermezzo.svg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Ruyan''' (Persian: رویان), later known as Rustamdar (رستمدار), was the name of a mountainous district that encompassed the western part of Tabaristan/Mazandaran, a region on the Caspian coast of northern Iran. In Iranian mythology, Ruyan appears as one of the places that the legendary archer Arash shot his arrow from, reaching the edge of Khorasan to mark the border between Iran and Turan.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:39, 13 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26755244 -->
== Tech News: 2024-20 ==
<section begin="technews-2024-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/20|Translations]] are available.
'''Recent changes'''
* On Wikisource there is a special page listing pages of works without corresponding scan images. Now you can use the new magic word <bdi lang="zxx" dir="ltr"><code>__EXPECTWITHOUTSCANS__</code></bdi> to exclude certain pages (list of editions or translations of works) from that list. [https://phabricator.wikimedia.org/T344214]
* If you use the [[Special:Preferences#mw-prefsection-editing|user-preference]] "{{int:tog-uselivepreview}}", then the template-page feature "{{int:Templatesandbox-editform-legend}}" will now also work without reloading the page. [https://phabricator.wikimedia.org/T136907]
* [[mw:Special:Mylanguage/Extension:Kartographer|Kartographer]] maps can now specify an alternative text via the <bdi lang="zxx" dir="ltr"><code><nowiki>alt=</nowiki></code></bdi> attribute. This is identical in usage to the <bdi lang="zxx" dir="ltr"><code><nowiki>alt=</nowiki></code></bdi> attribute in the [[mw:Special:MyLanguage/Help:Images#Syntax|image and gallery syntax]]. An exception for this feature is wikis like Wikivoyage where the miniature maps are interactive. [https://phabricator.wikimedia.org/T328137]
* The old [[mw:Special:MyLanguage/Extension:GuidedTour|Guided Tour]] for the "[[mw:Special:MyLanguage/Edit Review Improvements/New filters for edit review|New Filters for Edit Review]]" feature has been removed. It was created in 2017 to show people with older accounts how the interface had changed, and has now been seen by most of the intended people. [https://phabricator.wikimedia.org/T217451]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.5|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-14|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-15|en}}. It will be on all wikis from {{#time:j xg|2024-05-16|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The [[{{#special:search}}]] results page will now use CSS flex attributes, for better accessibility, instead of a table. If you have a gadget or script that adjusts search results, you should update your script to the new HTML structure. [https://phabricator.wikimedia.org/T320295]
'''Future changes'''
* In the Vector 2022 skin, main pages will be displayed at full width (like special pages). The goal is to keep the number of characters per line large enough. This is related to the coming changes to typography in Vector 2022. [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates|Learn more]]. [https://phabricator.wikimedia.org/T357706]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Two columns of the <bdi lang="zxx" dir="ltr"><code>[[mw:Special:MyLanguage/Manual:pagelinks table|pagelinks]]</code></bdi> database table (<bdi lang="zxx" dir="ltr"><code>pl_namespace</code></bdi> and <bdi lang="zxx" dir="ltr"><code>pl_title</code></bdi>) are being dropped soon. Users must use two columns of the new <bdi lang="zxx" dir="ltr"><code>[[mw:special:MyLanguage/Manual:linktarget table|linktarget]]</code></bdi> table instead (<bdi lang="zxx" dir="ltr"><code>lt_namespace</code></bdi> and <bdi lang="zxx" dir="ltr"><code>lt_title</code></bdi>). In your existing SQL queries:
*# Replace <bdi lang="zxx" dir="ltr"><code>JOIN pagelinks</code></bdi> with <bdi lang="zxx" dir="ltr"><code>JOIN linktarget</code></bdi> and <bdi lang="zxx" dir="ltr"><code>pl_</code></bdi> with <bdi lang="zxx" dir="ltr"><code>lt_</code></bdi> in the <bdi lang="zxx" dir="ltr"><code>ON</code></bdi> statement
*# Below that add <bdi lang="zxx" dir="ltr"><code>JOIN pagelinks ON lt_id = pl_target_id</code></bdi>
** See <bdi lang="en" dir="ltr">[[phab:T222224]]</bdi> for technical reasoning. [https://phabricator.wikimedia.org/T222224][https://phabricator.wikimedia.org/T299947]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:59, 13 May 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26762074 -->
== Wikipedia translation of the week: 2024-21 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Turlough (lake)]]'''<br /> <small>''([[:de:Turlough]]) ([[:no:Turlough]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Carran Turlough.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''turlough''' is a seasonal or periodic water body found mostly in limestone karst areas of Ireland, west of the River Shannon. [...] The water bodies fill and empty with the changes in the level of the water table, usually being very low or empty during summer and autumn and full in the winter. As groundwater levels drop the water drains away underground through cracks in the karstic limestone.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:31, 20 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26789673 -->
== Tech News: 2024-21 ==
<section begin="technews-2024-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/21|Translations]] are available.
'''Recent changes'''
* The [[mw:Special:MyLanguage/Extension:Nuke|Nuke]] feature, which enables administrators to mass delete pages, will now correctly delete pages which were moved to another title. [https://phabricator.wikimedia.org/T43351]
* New changes have been made to the UploadWizard in Wikimedia Commons: the overall layout has been improved, by following new styling and spacing for the form and its fields; the headers and helper text for each of the fields was changed; the Caption field is now a required field, and there is an option for users to copy their caption into the media description. [https://commons.wikimedia.org/wiki/Commons:WMF_support_for_Commons/Upload_Wizard_Improvements#Changes_to_%22Describe%22_workflow][https://phabricator.wikimedia.org/T361049]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.6|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-21|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-22|en}}. It will be on all wikis from {{#time:j xg|2024-05-23|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The HTML used to render all headings [[mw:Heading_HTML_changes|is being changed to improve accessibility]]. It will change on 22 May in some skins (Timeless, Modern, CologneBlue, Nostalgia, and Monobook). Please test gadgets on your wiki on these skins and [[phab:T13555|report any related problems]] so that they can be resolved before this change is made in all other skins. The developers are also considering the introduction of a [[phab:T337286|Gadget API for adding buttons to section titles]] if that would be helpful to tool creators, and would appreciate any input you have on that.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W21"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:04, 20 May 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26786311 -->
== Wikipedia translation of the week: 2024-22 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Geiranger Church]]'''<br /> <small>''([[:no:Geiranger kirke]])''</small> </div>
Please be bold and help translate this article!
----
[[File:Iglesia parroquial, Geiranger, Noruega, 2019-09-07, DD 84-97 PAN.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Geiranger Church''' (Norwegian: Geiranger kyrkje) is a parish church of the Church of Norway in Stranda Municipality in Møre og Romsdal county, Norway. It is located in the village of Geiranger, and the end of the famous Geirangerfjorden. It is the church for the Geiranger parish which is part of the Nordre Sunnmøre prosti (deanery) in the Diocese of Møre. The white, wooden church was built in an octagonal design in 1842 using plans drawn up by the architect Hans Klipe. The church seats about 165 people.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:48, 27 May 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26828106 -->
== Tech News: 2024-22 ==
<section begin="technews-2024-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/22|Translations]] are available.
'''Recent changes'''
* Several bugs related to the latest updates to the UploadWizard on Wikimedia Commons have been fixed. For more information, see [[:phab:T365107|T365107]] and [[:phab:T365119|T365119]].
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] In March 2024 a new [[mw:ResourceLoader/Core_modules#addPortlet|addPortlet]] API was added to allow gadgets to create new portlets (menus) in the skin. In certain skins this can be used to create dropdowns. Gadget developers are invited to try it and [[phab:T361661|give feedback]].
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Some CSS in the Minerva skin has been removed to enable easier community configuration. Interface editors should check the rendering on mobile devices for aspects related to the classes: <bdi lang="zxx" dir="ltr"><code>.collapsible</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.multicol</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.reflist</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.coordinates</code></bdi>{{int:comma-separator/en}}<bdi lang="zxx" dir="ltr"><code>.topicon</code></bdi>. [[phab:T361659|Further details are available on replacement CSS]] if it is needed.
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.7|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-05-28|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-05-29|en}}. It will be on all wikis from {{#time:j xg|2024-05-30|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* When you visit a wiki where you don't yet have a local account, local rules such as edit filters can sometimes prevent your account from being created. Starting this week, MediaWiki takes your global rights into account when evaluating whether you can override such local rules. [https://phabricator.wikimedia.org/T316303]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:15, 28 May 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26832205 -->
== Wikipedia translation of the week: 2024-23 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Guillermo Larrazábal]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Guillermo Larrazábal Arzubide''' (10 February 1907 – 1983) was a Spanish stained glass artist who was active in Ecuador. He is considered Ecuador's most important stained glass artist.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:14, 3 June 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26828106 -->
== Tech News: 2024-23 ==
<section begin="technews-2024-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/23|Translations]] are available.
'''Recent changes'''
* It is now possible for local administrators to add new links to the bottom of the site Tools menu without JavaScript. [[mw:Manual:Interface/Sidebar#Add or remove toolbox sections|Documentation is available]]. [https://phabricator.wikimedia.org/T6086]
* The message name for the definition of the tracking category of WikiHiero has changed from "<bdi lang="zxx" dir="ltr"><code>MediaWiki:Wikhiero-usage-tracking-category</code></bdi>" to "<bdi lang="zxx" dir="ltr"><code>MediaWiki:Wikihiero-usage-tracking-category</code></bdi>". [https://gerrit.wikimedia.org/r/c/mediawiki/extensions/wikihiero/+/1035855]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q5317225|Kadazandusun]] ([[w:dtp:|<code>w:dtp:</code>]]) [https://phabricator.wikimedia.org/T365220]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.8|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-04|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-05|en}}. It will be on all wikis from {{#time:j xg|2024-06-06|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Future changes'''
* Next week, on wikis with the Vector 2022 skin as the default, logged-out desktop users will be able to choose between different font sizes. The default font size will also be increased for them. This is to make Wikimedia projects easier to read. [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-06 deployments|Learn more]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:35, 3 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26844397 -->
== Tech News: 2024-24 ==
<section begin="technews-2024-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/24|Translations]] are available.
'''Recent changes'''
* The software used to render SVG files has been updated to a new version, fixing many longstanding bugs in SVG rendering. [https://phabricator.wikimedia.org/T265549]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The HTML used to render all headings [[mw:Heading HTML changes|is being changed to improve accessibility]]. It was changed last week in some skins (Vector legacy and Minerva). Please test gadgets on your wiki on these skins and [[phab:T13555|report any related problems]] so that they can be resolved before this change is made in Vector-2022. The developers are still considering the introduction of a [[phab:T337286|Gadget API for adding buttons to section titles]] if that would be helpful to tool creators, and would appreciate any input you have on that.
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The HTML markup used for citations by [[mw:Special:MyLanguage/Parsoid|Parsoid]] changed last week. In places where Parsoid previously added the <bdi lang="zxx" dir="ltr"><code>mw-reference-text</code></bdi> class, Parsoid now also adds the <bdi lang="zxx" dir="ltr"><code>reference-text</code></bdi> class for better compatibility with the legacy parser. [[mw:Specs/HTML/2.8.0/Extensions/Cite/Announcement|More details are available]]. [https://gerrit.wikimedia.org/r/1036705]
'''Problems'''
* There was a bug with the Content Translation interface that caused the tools menus to appear in the wrong location. This has now been fixed. [https://phabricator.wikimedia.org/T366374]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.9|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-11|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-12|en}}. It will be on all wikis from {{#time:j xg|2024-06-13|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The new version of MediaWiki includes another change to the HTML markup used for citations: [[mw:Special:MyLanguage/Parsoid|Parsoid]] will now generate a <bdi lang="zxx" dir="ltr"><code><nowiki><span class="mw-cite-backlink"></nowiki></code></bdi> wrapper for both named and unnamed references for better compatibility with the legacy parser. Interface administrators should verify that gadgets that interact with citations are compatible with the new markup. [[mw:Specs/HTML/2.8.0/Extensions/Cite/Announcement|More details are available]]. [https://gerrit.wikimedia.org/r/1035809]
* On multilingual wikis that use the <bdi lang="zxx" dir="ltr"><code><nowiki><translate></nowiki></code></bdi> system, there is a feature that shows potentially-outdated translations with a pink background until they are updated or confirmed. From this week, confirming translations will be logged, and there is a new user-right that can be required for confirming translations if the community [[m:Special:MyLanguage/Requesting wiki configuration changes|requests it]]. [https://phabricator.wikimedia.org/T49177]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:20, 10 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26893898 -->
== Wikipedia translation of the week: 2024-25 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:de:Magdalena Zeger]]'''<br /> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Magdalena Zeger''' ([mak.da.ˈleː.na ˈt͡seː.gɐ], * 1491; † 16. January 1568 in Kolding) was a calendar maker, astronomer and astrologist. Her Hamburg almanacs and forecasts from 1561 and 1563 have been preserved. Zeger's calendars are the first independent publications by a woman in the field of astronomy.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:29, 17 June 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26940351 -->
== Tech News: 2024-25 ==
<section begin="technews-2024-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/25|Translations]] are available.
'''Recent changes'''
* People who attempt to add an external link in the visual editor will now receive immediate feedback if they attempt to link to a domain that a project has decided to block. Please see [[mw:Special:MyLanguage/Edit_check#11_June_2024|Edit check]] for more details. [https://phabricator.wikimedia.org/T366751]
* The new [[mw:Special:MyLanguage/Extension:CommunityConfiguration|Community Configuration extension]] is available [[testwiki:Special:CommunityConfiguration|on Test Wikipedia]]. This extension allows communities to customize specific features to meet their local needs. Currently only Growth features are configurable, but the extension will support other [[mw:Special:MyLanguage/Community_configuration#Use_cases|Community Configuration use cases]] in the future. [https://phabricator.wikimedia.org/T323811][https://phabricator.wikimedia.org/T360954]
* The dark mode [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] is now available on category and help pages, as well as more special pages. There may be contrast issues. Please report bugs on the [[mw:Talk:Reading/Web/Accessibility_for_reading|project talk page]]. [https://phabricator.wikimedia.org/T366370]
'''Problems'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] Cloud Services tools were not available for 25 minutes last week. This was caused by a faulty hardware cable in the data center. [https://wikitech.wikimedia.org/wiki/Incidents/2024-06-11_WMCS_Ceph]
* Last week, styling updates were made to the Vector 2022 skin. This caused unforeseen issues with templates, hatnotes, and images. Changes to templates and hatnotes were reverted. Most issues with images were fixed. If you still see any, [[phab:T367463|report them here]]. [https://phabricator.wikimedia.org/T367480]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.10|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-18|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-19|en}}. It will be on all wikis from {{#time:j xg|2024-06-20|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting June 18, the [[mw:Special:MyLanguage/Help:Edit check#ref|Reference Edit Check]] will be deployed to [[phab:T361843|a new set of Wikipedias]]. This feature is intended to help newcomers and to assist edit-patrollers by inviting people who are adding new content to a Wikipedia article to add a citation when they do not do so themselves. During [[mw:Special:MyLanguage/Edit_check#Reference_Check_A/B_Test|a test at 11 wikis]], the number of citations added [https://diff.wikimedia.org/?p=127553 more than doubled] when Reference Check was shown to people. Reference Check is [[mw:Special:MyLanguage/Edit check/Configuration|community configurable]]. [https://phabricator.wikimedia.org/T361843]<!-- NOTE: THE DIFF BLOG WILL BE PUBLISHED ON MONDAY -->
* [[m:Special:MyLanguage/Mailing_lists|Mailing lists]] will be unavailable for roughly two hours on Tuesday 10:00–12:00 UTC. This is to enable migration to a new server and upgrade its software. [https://phabricator.wikimedia.org/T367521]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:49, 17 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26911987 -->
== Wikipedia translation of the week: 2024-26 ==
{| class="plainlinks mw-content-ltr" lang="en" dir="ltr" style="width:100%; margin:0; background: #f8f9fa; border:1px solid #BBBBBB; color:#000000; padding .4em;"
|-
|style="text-align:center;"| The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Koreans in Micronesia]]'''<br /> <small>''([[:zh:朝鮮裔密克羅尼西亞人]])''</small> </div>
Please be bold and help translate this article!
----
<div style="text-align:left; padding: .4em;">
'''Koreans in Micronesia''' used to form a significant population before World War II, when most of the region was ruled as the South Seas Mandate of the Empire of Japan; for example, they formed 7.3% of the population of Palau in 1943. However, after the area came under the control of the United States as the Trust Territory of the Pacific Islands, most Koreans returned to their homeland. As of 2013, about seven thousand South Korean expatriates & immigrants and Korean Americans reside in the Marianas (Guam and the Commonwealth of the Northern Mariana Islands), which have remained under U.S. control, while only around two hundred South Korean expatriates reside in the independent countries of Micronesia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 04:03, 24 June 2024 (UTC)''
</div>
|}
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=26940351 -->
== Tech News: 2024-26 ==
<section begin="technews-2024-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/26|Translations]] are available.
'''Recent changes'''
* Editors will notice that there have been some changes to the background color of text in the diff view, and the color of the byte-change numbers, last week. These changes are intended to make text more readable in both light mode and dark mode, and are part of a larger effort to increase accessibility. You can share your comments or questions [[mw:Talk:Reading/Web/Accessibility for reading|on the project talkpage]]. [https://phabricator.wikimedia.org/T361717]
* The text colors that are used for visited-links, hovered-links, and active-links, were also slightly changed last week to improve their accessibility in both light mode and dark mode. [https://phabricator.wikimedia.org/T366515]
'''Problems'''
* You can [[mw:Special:MyLanguage/Help:DiscussionTools#Talk pages permalinking|copy permanent links to talk page comments]] by clicking on a comment's timestamp. [[mw:Talk pages project/Permalinks|This feature]] did not always work when the topic title was very long and the link was used as a wikitext link. This has been fixed. Thanks to Lofhi for submitting the bug. [https://phabricator.wikimedia.org/T356196]
'''Changes later this week'''
* [[File:Octicons-sync.svg|12px|link=|alt=|Recurrent item]] The [[mw:MediaWiki 1.43/wmf.11|new version]] of MediaWiki will be on test wikis and MediaWiki.org from {{#time:j xg|2024-06-25|en}}. It will be on non-Wikipedia wikis and some Wikipedias from {{#time:j xg|2024-06-26|en}}. It will be on all wikis from {{#time:j xg|2024-06-27|en}} ([[mw:MediaWiki 1.43/Roadmap|calendar]]). [https://wikitech.wikimedia.org/wiki/Deployments/Train][https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
* Starting 26 June, all talk pages messages' timestamps will become a link at English Wikipedia, making this feature available for you to use at all wikis. This link is a permanent link to the comment. It allows users to find the comment they were linked to, even if this comment has since been moved elsewhere. You can read more about this feature [[DiffBlog:/2024/01/29/talk-page-permalinks-dont-lose-your-threads/|on Diff]] or [[mw:Special:MyLanguage/Help:DiscussionTools#Talk pages permalinking|on Mediawiki.org]]. [https://phabricator.wikimedia.org/T365974]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:33, 24 June 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=26989424 -->
== Wikipedia translation of the week: 2024-27 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Roller printing on textiles]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Silverstudio.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Roller printing''' on fabrics is a textile printing process patented by Thomas Bell of Scotland in 1783 in an attempt to reduce the cost of the earlier copperplate printing. This method was used in Lancashire fabric mills to produce cotton dress fabrics from the 1790s, most often reproducing small monochrome patterns characterized by striped motifs and tiny dotted patterns called "machine grounds". Improvements in the technology resulted in more elaborate roller prints in bright, rich colours from the 1820s; Turkey red and chrome yellow were particularly popular.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:44, 1 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-27 ==
<section begin="technews-2024-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/27|Translations]] are available.
'''Recent changes'''
* Over the next three weeks, dark mode will become available for all users, both logged-in and logged-out, starting with the mobile web version. This fulfils one of the [[m:Special:MyLanguage/Community_Wishlist_Survey_2023/Reading/Dark_mode|top-requested community wishes]], and improves low-contrast reading and usage in low-light settings. As part of these changes, dark mode will also work on User-pages and Portals. There is more information in [[mw:Special:MyLanguage/Reading/Web/Accessibility_for_reading/Updates#June_2024:_Typography_and_dark_mode_deployments,_new_global_preferences|the latest Web team update]]. [https://phabricator.wikimedia.org/T366364]
* Logged-in users can now set [[m:Special:GlobalPreferences#mw-prefsection-rendering-skin-skin-prefs|global preferences for the text-size and dark-mode]], thanks to a combined effort across Foundation teams. This allows Wikimedians using multiple wikis to set up a consistent reading experience easily, for example by switching between light and dark mode only once for all wikis. [https://phabricator.wikimedia.org/T341278]
* If you use a very old web browser some features might not work on the Wikimedia wikis. This affects Internet Explorer 11 and versions of Chrome, Firefox and Safari older than 2016. This change makes it possible to use new [[d:Q46441|CSS]] features and to send less code to all readers. [https://phabricator.wikimedia.org/T288287][https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:How_to_make_a_MediaWiki_skin#Using_CSS_variables_for_supporting_different_themes_e.g._dark_mode]
* Wikipedia Admins can customize local wiki configuration options easily using [[mw:Special:MyLanguage/Community Configuration|Community Configuration]]. Community Configuration was created to allow communities to customize how some features work, because each language wiki has unique needs. At the moment, admins can configure [[mw:Special:MyLanguage/Growth/Feature_summary|Growth features]] on their home wikis, in order to better recruit and retain new editors. More options will be provided in the coming months. [https://phabricator.wikimedia.org/T366458]
* Editors interested in language issues that are related to [[w:en:Unicode|Unicode standards]], can now discuss those topics at [[mw:Talk:WMF membership with Unicode Consortium|a new conversation space in MediaWiki.org]]. The Wikimedia Foundation is now a [[mw:Special:MyLanguage/WMF membership with Unicode Consortium|member of the Unicode Consortium]], and the coordination group can collaboratively review the issues discussed and, where appropriate, bring them to the attention of the Unicode Consortium.
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q2891049|Mandailing]] ([[w:btm:|<code>w:btm:</code>]]) [https://phabricator.wikimedia.org/T368038]
'''Problems'''
* Editors can once again click on links within the visual editor's citation-preview, thanks to a bug fix by the Editing Team. [https://phabricator.wikimedia.org/T368119]
'''Future changes'''
* Please [https://wikimediafoundation.limesurvey.net/758713?lang=en help us to improve Tech News by taking this short survey]. The goal is to better meet the needs of the various types of people who read Tech News. The survey will be open for 2 weeks. The survey is covered by [https://foundation.wikimedia.org/wiki/Legal:Tech_News_Survey_2024_Privacy_Statement this privacy statement]. Some translations are available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:59, 1 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27038456 -->
== Wikipedia translation of the week: 2024-28 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:simple:India naming dispute]]'''<br /> <small>''([[:ur:انڈیا نام کا تنازعہ]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''India naming dispute''' in 1947 refers to the argument over the use of the name India during and after the partition of British Raj, between the countries of Pakistan and the Republic of India. This dispute involved key figures such as Lord Mountbatten, the last Viceroy of British Raj, and Muhammad Ali Jinnah, the leader of the Muslim League and a founder of Pakistan. By 1947, the British Raj was going to be divided into two new nation states – Hindustan and Pakistan. Jinnah was initially convinced that Hindustan would not use the term India, since it lacked indigenous pedigree, etymologically and historically India meant the Indus Valley (modern-Pakistan). He also opposed the use of the name India as it would cause confusion regarding history. The disagreement had significant implications for national identity and international recognition.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 8 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-28 ==
<section begin="technews-2024-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/28|Translations]] are available.
'''Recent changes'''
* At the Wikimedia Foundation a new task force was formed to replace the disabled Graph with [[mw:Special:MyLanguage/Extension:Chart/Project|more secure, easy to use, and extensible Chart]]. You can [[mw:Special:MyLanguage/Newsletter:Chart Project|subscribe to the newsletter]] to get notified about new project updates and other news about Chart.
* The [[m:Special:MyLanguage/CampaignEvents|CampaignEvents]] extension is now available on Meta-wiki, Igbo Wikipedia, and Swahili Wikipedia, and can be requested on your wiki. This extension helps in managing and making events more visible, giving Event organizers the ability to use tools like the Event registration tool. To learn more about the deployment status and how to request this extension for your wiki, visit the [[m:Special:MyLanguage/CampaignEvents/Deployment_status|CampaignEvents page on Meta-wiki]].
* Editors using the iOS Wikipedia app who have more than 50 edits can now use the [[mw:Special:MyLanguage/Wikimedia Apps/iOS Suggested edits#Add an image|Add an Image]] feature. This feature presents opportunities for small but useful contributions to Wikipedia.
* Thank you to [[mw:MediaWiki Product Insights/Contributor retention and growth/Celebration|all of the authors]] who have contributed to MediaWiki Core. As a result of these contributions, the [[mw:MediaWiki Product Insights/Contributor retention and growth|percentage of authors contributing more than 5 patches has increased by 25% since last year]], which helps ensure the sustainability of the platform for the Wikimedia projects.
'''Problems'''
* A problem with the color of the talkpage tabs always showing as blue, even for non-existent pages which should have been red, affecting the Vector 2022 skin, [[phab:T367982|has been fixed]].
'''Future changes'''
* The Trust and Safety Product team wants to introduce [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] with as little disruption to tools and workflows as possible. Volunteer developers, including gadget and user-script maintainers, are kindly asked to update the code of their tools and features to handle temporary accounts. The team has [[mw:Trust and Safety Product/Temporary Accounts/For developers|created documentation]] explaining how to do the update. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers/2024-04 CTA|Learn more]].
'''Tech News survey'''
* Please [https://wikimediafoundation.limesurvey.net/758713?lang=en help us to improve Tech News by taking this short survey]. The goal is to better meet the needs of the various types of people who read Tech News. The survey will be open for 1 more week. The survey is covered by [https://foundation.wikimedia.org/wiki/Legal:Tech_News_Survey_2024_Privacy_Statement this privacy statement]. Some translations are available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W28"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:32, 8 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27080357 -->
== Wikipedia translation of the week: 2024-29 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Adumu]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Maasai 2012 05 31 2782 (7522645058).jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Adumu''', is a type of dance that the Maasai people of Kenya and Tanzania practice. Young Maasai warriors generally perform the energetic and acrobatic dance at ceremonial occasions including weddings, religious rites, and other significant cultural events. The Adumu dance is characterized by a sequence of jumps performed by the dancers, who stand in a circle and alternately jump while keeping their bodies as straight and upright as possible. In addition to wearing vividly colored shúkàs (clothes) and beaded jewelry, the dancers are typically clad in traditional Maasai costume. Traditional Maasai songs and chants are also performed during the dance.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:15, 15 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-29 ==
<section begin="technews-2024-W29"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/29|Translations]] are available.
'''Tech News survey'''
* Please [https://wikimediafoundation.limesurvey.net/758713?lang=en help us to improve Tech News by taking this short survey]. The goal is to better meet the needs of the various types of people who read Tech News. The survey will be open for 3 more days. The survey is covered by [https://foundation.wikimedia.org/wiki/Legal:Tech_News_Survey_2024_Privacy_Statement this privacy statement]. Some translations are available.
'''Recent changes'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Wikimedia developers can now officially continue to use both [[mw:Special:MyLanguage/Gerrit|Gerrit]] and [[mw:Special:MyLanguage/GitLab|GitLab]], due to a June 24 decision by the Wikimedia Foundation to support software development on both platforms. Gerrit and GitLab are both code repositories used by developers to write, review, and deploy the software code that supports the MediaWiki software that the wiki projects are built on, as well as the tools used by editors to create and improve content. This decision will safeguard the productivity of our developers and prevent problems in code review from affecting our users. More details are available in the [[mw:GitLab/Migration status|Migration status]] page.
* The Wikimedia Foundation seeks applicants for the [[m:Special:MyLanguage/Product and Technology Advisory Council/Proposal|Product and Technology Advisory Council]] (PTAC). This group will bring technical contributors and Wikimedia Foundation together to co-define a more resilient, future-proof technological platform. Council members will evaluate and consult on the movement's product and technical activities, so that we develop multi-generational projects. We are looking for a range of technical contributors across the globe, from a variety of Wikimedia projects. [[m:Special:MyLanguage/Product and Technology Advisory Council/Proposal#Joining the PTAC as a technical volunteer|Please apply here by August 10]].
* Editors with rollback user-rights who use the Wikipedia App for Android can use the new [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/Anti Vandalism|Edit Patrol]] features. These features include a new feed of Recent Changes, related links such as Undo and Rollback, and the ability to create and save a personal library of user talk messages to use while patrolling. If your wiki wants to make these features available to users who do not have rollback rights but have reached a certain edit threshold, [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android#Contact us|you can contact the team]]. You can [[diffblog:2024/07/10/ِaddressing-vandalism-with-a-tap-the-journey-of-introducing-the-patrolling-feature-in-the-mobile-app/|read more about this project on Diff blog]].
* Editors who have access to [[m:Special:MyLanguage/The_Wikipedia_Library|The Wikipedia Library]] can once again use non-open access content in SpringerLinks, after the Foundation [[phab:T368865|contacted]] them to restore access. You can read more about [[m:Tech/News/Recently_resolved_community_tasks|this and 21 other community-submitted tasks that were completed last week]].
'''Changes later this week'''
* This week, [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-07 deployments|dark mode will be available on a number of Wikipedias]], both desktop and mobile, for logged-in and logged-out users. Interface admins and user script maintainers are encouraged to check gadgets and user scripts in the dark mode, to find any hard-coded colors and fix them. There are some [[mw:Special:MyLanguage/Recommendations for night mode compatibility on Wikimedia wikis|recommendations for dark mode compatibility]] to help.
'''Future changes'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Next week, functionaries, volunteers maintaining tools, and software development teams are invited to test the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] feature on testwiki. Temporary accounts is a feature that will help improve privacy on the wikis. No further temporary account deployments are scheduled yet. Please [[mw:Talk:Trust and Safety Product/Temporary Accounts|share your opinions and questions on the project talk page]]. [https://phabricator.wikimedia.org/T348895]
* Editors who upload files cross-wiki, or teach other people how to do so, may wish to join a Wikimedia Commons discussion. The Commons community is discussing limiting who can upload files through the cross-wiki upload/Upload dialog feature to users auto-confirmed on Wikimedia Commons. This is due to the large amount of copyright violations uploaded this way. There is a short summary at [[c:Special:MyLanguage/Commons:Cross-wiki upload|Commons:Cross-wiki upload]] and [[c:Commons:Village pump/Proposals#Deactivate cross-wiki uploads for new users|discussion at Commons:Village Pump]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/29|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' You can also get other news from the [[m:Special:MyLanguage/Wikimedia Foundation Bulletin|Wikimedia Foundation Bulletin]].
</div><section end="technews-2024-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:31, 16 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27124561 -->
== Wikipedia translation of the week: 2024-30 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Rathaus-Glockenspiel]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:2019-11-16, Glockenspiel, Neues Münchner Rathaus, IMG 7463 edit Christoph Braun.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Rathaus-Glockenspiel''' is a large mechanical clock located in Marienplatz Square, in the heart of Munich, Germany. Famous for its life-size characters, the clock twice daily re-enacts scenes from Munich's history. First is the story of the marriage of Duke Wilhelm V to Renata of Lorraine in 1568, followed by the story of the Schäfflerstanz, also known as the coopers' dance.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:56, 22 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27031540 -->
== Tech News: 2024-30 ==
<section begin="technews-2024-W30"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/30|Translations]] are available.
'''Feature News'''
* Stewards can now [[:m:Special:MyLanguage/Global_blocks|globally block]] accounts. Before [[phab:T17294|the change]] only IP addresses and IP ranges could be blocked globally. Global account blocks are useful when the blocked user should not be logged out. [[:m:Special:MyLanguage/Global_locks|Global locks]] (a similar tool logging the user out of their account) are unaffected by this change. The new global account block feature is related to the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|Temporary Accounts]] project, which is a new type of user account that replaces IP addresses of unregistered editors that are no longer made public.
* Later this week, Wikimedia site users will notice that the Interface of [[mw:Special:MyLanguage/Extension:FlaggedRevs|FlaggedRevs]] (also known as "Pending Changes") is improved and consistent with the rest of the MediaWiki interface and [[mw:Special:MyLanguage/Codex|Wikimedia's design system]]. The FlaggedRevs interface experience on mobile and [[mw:Special:MyLanguage/Skin:MinervaNeue|Minerva skin]] was inconsistent before it was fixed and ported to [[mw:Special:MyLanguage/Codex|Codex]] by the WMF Growth team and some volunteers. [https://phabricator.wikimedia.org/T191156]
* Wikimedia site users can now submit account vanishing requests via [[m:Special:GlobalVanishRequest|GlobalVanishRequest]]. This feature is used when a contributor wishes to stop editing forever. It helps you hide your past association and edit to protect your privacy. Once processed, the account will be locked and renamed. [https://phabricator.wikimedia.org/T367329]
* Have you tried monitoring and addressing vandalism in Wikipedia using your phone? [https://diff.wikimedia.org/2024/07/10/%d9%90addressing-vandalism-with-a-tap-the-journey-of-introducing-the-patrolling-feature-in-the-mobile-app/ A Diff blog post on Patrolling features in the Mobile App] highlights some of the new capabilities of the feature, including swiping through a feed of recent changes and a personal library of user talk messages for use when patrolling from your phone.
* Wikimedia contributors and GLAM (galleries, libraries, archives, and museums) organisations can now learn and measure the impact Wikimedia Commons is having towards creating quality encyclopedic content using the [https://doc.wikimedia.org/generated-data-platform/aqs/analytics-api/reference/commons.html Commons Impact Metrics] analytics dashboard. The dashboard offers organizations analytics on things like monthly edits in a category, the most viewed files, and which Wikimedia articles are using Commons images. As a result of these new data dumps, GLAM organisation can more reliably measure their return on investment for programs bringing content into the digital Commons. [https://diff.wikimedia.org/2024/07/19/commons-impact-metrics-now-available-via-data-dumps-and-api/]
'''Project Updates'''
* Come share your ideas for improving the wikis on the newly reopened [[m:Special:MyLanguage/Community Wishlist|Community Wishlist]]. The Community Wishlist is Wikimedia’s forum for volunteers to share ideas (called wishes) to improve how the wikis work. The new version of the wishlist is always open, works with both wikitext and Visual Editor, and allows wishes in any language.
'''Learn more'''
* Have you ever wondered how Wikimedia software works across over 300 languages? This is 253 languages more than the Google Chrome interface, and it's no accident. The Language and Product Localization Team at the Wikimedia Foundation supports your work by adapting all the tools and interfaces in the MediaWiki software so that contributors in our movement who translate pages and strings can translate them and have the sites in all languages. Read more about the team and their upcoming work on [https://diff.wikimedia.org/2024/07/17/building-towards-a-robust-multilingual-knowledge-ecosystem-for-the-wikimedia-movement/ Diff].
* How can Wikimedia build innovative and experimental products while maintaining such heavily used websites? A recent [https://diff.wikimedia.org/2024/07/09/on-the-value-of-experimentation/ blog post] by WMF staff Johan Jönsson highlights the work of the [[m:Future Audiences#Objectives and Key Results|WMF Future Audience initiative]], where the goal is not to build polished products but test out new ideas, such as a [[m:Future_Audiences/Experiments: conversational/generative AI|ChatGPT plugin]] and [[m:Future_Audiences/Experiment:Add a Fact|Add a Fact]], to help take Wikimedia into the future.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/30|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' You can also get other news from the [[m:Special:MyLanguage/Wikimedia Foundation Bulletin|Wikimedia Foundation Bulletin]].
</div><section end="technews-2024-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:05, 23 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27142915 -->
== Wikipedia translation of the week: 2024-31 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Nederlandsche Cocaïnefabriek]]'''<br /> <small>''([[:es:Nederlandsche Cocaïnefabriek]]) ([[:nl:Nederlandsche Cocaïnefabriek]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Nederlandsche Cocainefabriek Schinkelstraat Amsterdam architect HH Baanders 1902.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Nederlandsche Cocaïnefabriek''' (Dutch pronunciation: [ˈneːdərlɑntsə koːkaːˈinəfaːˌbrik]; English: Dutch Cocaine Factory) or NCF was an Amsterdam-based company producing cocaine for medical purposes in the 20th century. It imported its raw materials mainly from the Dutch East Indies and sold its products across Europe, making good profits especially in the early years of World War I. The NCF produced morphine, heroin and ephedrine as well.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:44, 29 July 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27150339 -->
== Tech News: 2024-31 ==
<section begin="technews-2024-W31"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/31|Translations]] are available.
'''Feature news'''
* Editors using the Visual Editor in languages that use non-Latin characters for numbers, such as Hindi, Manipuri and Eastern Arabic, may notice some changes in the formatting of reference numbers. This is a side effect of preparing a new sub-referencing feature, and will also allow fixing some general numbering issues in Visual Editor. If you notice any related problems on your wiki, please share details at the [[m:Talk:WMDE Technical Wishes/Sub-referencing|project talkpage]].
'''Bugs status'''
* Some logged-in editors were briefly unable to edit or load pages last week. [[phab:T370304|These errors]] were mainly due to the addition of new [[mw:Special:MyLanguage/Help:Extension:Linter|linter]] rules which led to caching problems. Fixes have been applied and investigations are continuing.
* Editors can use the [[mw:Special:MyLanguage/Trust and Safety Product/IP Info|IP Information tool]] to get information about IP addresses. This tool is available as a Beta Feature in your preferences. The tool was not available for a few days last week, but is now working again. Thank you to Shizhao for filing the bug report. You can read about that, and [[m:Tech/News/Recently resolved community tasks#2024-07-25|28 other community-submitted tasks]] that were resolved last week.
'''Project updates'''
* There are new features and improvements to Phabricator from the Release Engineering and Collaboration Services teams, and some volunteers, including: the search systems, the new task creation system, the login systems, the translation setup which has resulted in support for more languages (thanks to Pppery), and fixes for many edge-case errors. You can [[phab:phame/post/view/316/iterative_improvements/|read details about these and other improvements in this summary]].
* There is an [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|update on the Charts project]]. The team has decided which visualization library to use, which chart types to start focusing on, and where to store chart definitions.
* One new wiki has been created: a {{int:project-localized-name-group-wikivoyage}} in [[d:Q9056|Czech]] ([[voy:cs:|<code>voy:cs:</code>]]) [https://phabricator.wikimedia.org/T370905]
'''Learn more'''
* There is a [[diffblog:2024/07/26/the-journey-to-open-our-first-data-center-in-south-america/|new Wikimedia Foundation data center]] in São Paulo, Brazil which helps to reduce load times.
* There is new [[diffblog:2024/07/22/the-perplexing-process-of-uploading-images-to-wikipedia/|user research]] on problems with the process of uploading images.
* Commons Impact Metrics are [[diffblog:2024/07/19/commons-impact-metrics-now-available-via-data-dumps-and-api/|now available]] via data dumps and API.
* The latest quarterly [[mw:Technical Community Newsletter/2024/July|Technical Community Newsletter]] is now available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/31|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:11, 29 July 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27164109 -->
== Wikipedia translation of the week: 2024-32 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Suffrage drama]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Pamphlet from NAWSA for women's suffrage plays, page 1.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Suffrage drama''' (also known as suffrage plays or suffrage theatre) is a form of dramatic literature that emerged during the British women's suffrage movement in the early twentieth century. Suffrage performances lasted approximately from 1907-1914. Many suffrage plays called for a predominant or all female cast. Suffrage plays served to reveal issues behind the suffrage movement.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 5 August 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27150339 -->
== Tech News: 2024-32 ==
<section begin="technews-2024-W32"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/32|Translations]] are available.
'''Feature news'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Two new parser functions will be available this week: <code><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic_words#dir|#dir]]<nowiki>}}</nowiki></code> and <code><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic_words#bcp47|#bcp47]]<nowiki>}}</nowiki></code>. These will reduce the need for <code>Template:Dir</code> and <code>Template:BCP47</code> on Commons and allow us to [[phab:T343131|drop 100 million rows]] from the "what links here" database. Editors at any wiki that use these templates, can help by replacing the templates with these new functions. The templates at Commons will be updated during the Hackathon at Wikimania. [https://phabricator.wikimedia.org/T359761][https://phabricator.wikimedia.org/T366623]
* Communities can request the activation of the visual editor on entire namespaces where discussions sometimes happen (for instance ''Wikipedia:'' or ''Wikisource:'' namespaces) if they understand the [[mw:Special:MyLanguage/Help:VisualEditor/FAQ#WPNS|known limitations]]. For discussions, users can already use [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]] in these namespaces.
* The tracking category "Pages using Timeline" has been renamed to "Pages using the EasyTimeline extension" [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3ATimeline-tracking-category&namespace=8 in TranslateWiki]. Wikis that have created the category locally should rename their local creation to match.
'''Project updates'''
* Editors who help to organize WikiProjects and similar on-wiki collaborations, are invited to share ideas and examples of successful collaborations with the Campaigns and Programs teams. You can fill out [[m:Special:MyLanguage/Campaigns/WikiProjects|a brief survey]] or share your thoughts [[m:Talk:Campaigns/WikiProjects|on the talkpage]]. The teams are particularly looking for details about successful collaborations on non-English wikis.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The new parser is being rolled out on {{int:project-localized-name-group-wikivoyage}} wikis over the next few months. The {{int:project-localized-name-enwikivoyage}} and {{int:project-localized-name-hewikivoyage}} were [[phab:T365367|switched]] to Parsoid last week. For more information, see [[mw:Parsoid/Parser_Unification|Parsoid/Parser Unification]].
'''Learn more'''
* There will be more than 200 sessions at Wikimania this week. Here is a summary of some of the [[diffblog:2024/08/05/interested-in-product-and-tech-here-are-some-wikimania-sessions-you-dont-want-to-miss/|key sessions related to the product and technology area]].
* The latest [[m:Special:MyLanguage/Wikimedia Foundation Bulletin/2024/07-02|Wikimedia Foundation Bulletin]] is available.
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2024/July|Language and Internationalization newsletter]] is available. It includes: New design previews for Translatable pages; Updates about MinT for Wiki Readers; the release of Translation dumps; and more.
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/31|Growth newsletter]] is available.
* The latest monthly [[mw:Special:MyLanguage/MediaWiki Product Insights/Reports/July 2024|MediaWiki Product Insights newsletter]] is available.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/32|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:44, 5 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27233905 -->
== Wikipedia translation of the week: 2024-33 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Karatgurk]]'''<br /> <small>''([[:it:Karatgurk]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
In the Australian Aboriginal mythology of the Aboriginal people of south-eastern Australian state of Victoria, the '''Karatgurk''' were seven sisters who represented the constellation known in western astronomy as the Pleiades.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] --[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 12 August 2024 (UTC)''
</div>
</div>
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27264174 -->
== Tech News: 2024-33 ==
<section begin="technews-2024-W33"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/33|Translations]] are available.
'''Feature news'''
* [[mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilter]] editors and maintainers can now [[mw:Special:MyLanguage/Extension:AbuseFilter/Actions#Show a CAPTCHA|make a CAPTCHA show if a filter matches an edit]]. This allows communities to quickly respond to spamming by automated bots. [https://phabricator.wikimedia.org/T20110]
* [[m:Special:MyLanguage/Stewards|Stewards]] can now specify if global blocks should prevent account creation. Before [[phab:T17273|this change]] by the [[mw:Special:MyLanguage/Trust and Safety Product|Trust and Safety Product]] Team, all global blocks would prevent account creation. This will allow stewards to reduce the unintended side-effects of global blocks on IP addresses.
'''Project updates'''
* [[wikitech:Help talk:Toolforge/Toolforge standards committee#August_2024_committee_nominations|Nominations are open on Wikitech]] for new members to refresh the [[wikitech:Help:Toolforge/Toolforge standards committee|Toolforge standards committee]]. The committee oversees the Toolforge [[wikitech:Help:Toolforge/Right to fork policy|Right to fork policy]] and [[wikitech:Help:Toolforge/Abandoned tool policy|Abandoned tool policy]] among other duties. Nominations will remain open until at least 2024-08-26.
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q2880037|West Coast Bajau]] ([[w:bdr:|<code>w:bdr:</code>]]) [https://phabricator.wikimedia.org/T371757]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/33|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:22, 12 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27253654 -->
== Wikipedia translation of the week: 2024-34 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:B1 (classification)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''B1''' is a medical-based Paralympic classification for blind sport. Athletes in this classification are totally or almost totally blind. It is used by a number of blind sports including blind tennis, para-alpine skiing, para-Nordic skiing, blind cricket, blind golf, five-a-side football, goalball and judo. Some other sports, including adaptive rowing, athletics and swimming, have equivalents to this class.
The B1 classification was first created by the IBSA in the 1970s, and has largely remained unchanged since despite an effort by the International Paralympic Committee (IPC) to move towards a more functional and evidence-based classification system. Classification is often handled on the international level by the International Blind Sports Federation (IBSA) but it sometimes handled by national sport federations. There are exceptions for sports like athletics and cycling, where classification is handled by their own governing bodies.
Equipment utilized by competitors in this class may differ from sport to sport, and may include sighted guides, guide rails, beeping balls and clapsticks. There may be some modifications related to equipment and rules to specifically address needs of competitors in this class to allow them to compete in specific sports. Some sports specifically do not allow a guide, whereas cycling and skiing require one.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:56, 19 August 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27278917 -->
== Tech News: 2024-34 ==
<section begin="technews-2024-W34"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/34|Translations]] are available.
'''Feature news'''
* Editors who want to re-use references but with different details such as page numbers, will be able to do so by the end of 2024, using a new [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#Sub-referencing in a nutshell|sub-referencing]] feature. You can read more [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|about the project]] and [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#Test|how to test the prototype]].
* Editors using tracking categories to identify which pages use specific extensions may notice that six of the categories have been renamed to make them more easily understood and consistent. These categories are automatically added to pages that use specialized MediaWiki extensions. The affected names are for: [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Aintersection-category&namespace=8 DynamicPageList], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Akartographer-tracking-category&namespace=8 Kartographer], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Aphonos-tracking-category&namespace=8 Phonos], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Arss-tracking-category&namespace=8 RSS], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Ascore-use-category&namespace=8 Score], [https://translatewiki.net/wiki/Special:Translations?message=MediaWiki%3Awikihiero-usage-tracking-category&namespace=8 WikiHiero]. Wikis that have created the category locally should rename their local creation to match. Thanks to Pppery for these improvements. [https://phabricator.wikimedia.org/T347324]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Technical volunteers who edit modules and want to get a list of the categories used on a page, can now do so using the <code><bdi lang="zxx" dir="ltr">categories</bdi></code> property of <code><bdi lang="zxx" dir="ltr">[[mediawikiwiki:Special:MyLanguage/Extension:Scribunto/Lua reference manual#Title objects|mw.title objects]]</bdi></code>. This enables wikis to configure workflows such as category-specific edit notices. Thanks to SD001 for these improvements. [https://phabricator.wikimedia.org/T50175][https://phabricator.wikimedia.org/T85372]
'''Bugs status'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Your help is needed to check if any pages need to be moved or deleted. A maintenance script was run to clean up unreachable pages (due to Unicode issues or introduction of new namespaces/namespace aliases). The script tried to find appropriate names for the pages (e.g. by following the Unicode changes or by moving pages whose titles on Wikipedia start with <code>Talk:WP:</code> so that their titles start with <code>Wikipedia talk:</code>), but it may have failed for some pages, and moved them to <bdi lang="zxx" dir="ltr">[[Special:PrefixIndex/T195546/]]</bdi> instead. Your community should check if any pages are listed there, and move them to the correct titles, or delete them if they are no longer needed. A full log (including pages for which appropriate names could be found) is available in [[phab:P67388]].
* Editors who volunteer as [[mw:Special:MyLanguage/Help:Growth/Mentorship|mentors]] to newcomers on their wiki are once again able to access lists of potential mentees who they can connect with to offer help and guidance. This functionality was restored thanks to [[phab:T372164|a bug fix]]. Thank you to Mbch331 for filing the bug report. You can read about that, and 18 other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Project updates'''
* The application deadline for the [[m:Special:MyLanguage/Product and Technology Advisory Council/Proposal|Product & Technology Advisory Council]] (PTAC) has been extended to September 16. Members will help by providing advice to Foundation Product and Technology leadership on short and long term plans, on complex strategic problems, and help to get feedback from more contributors and technical communities. Selected members should expect to spend roughly 5 hours per month for the Council, during the one year pilot. Please consider applying, and spread the word to volunteers you think would make a positive contribution to the committee.
'''Learn more'''
* The [[m:Special:MyLanguage/Coolest Tool Award#2024 Winners|2024 Coolest Tool Awards]] were awarded at Wikimania, in seven categories. For example, one award went to the ISA Tool, used for adding structured data to files on Commons, which was recently improved during the [[m:Event:Wiki Mentor Africa ISA Hackathon 2024|Wiki Mentor Africa Hackathon]]. You can see video demonstrations of each tool at the awards page. Congratulations to this year's recipients, and thank you to all tool creators and maintainers.
* The latest [[m:Special:MyLanguage/Wikimedia Foundation Bulletin/2024/08-01|Wikimedia Foundation Bulletin]] is available, and includes some highlights from Wikimania, an upcoming Language community meeting, and other news from the movement.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/34|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W34"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:54, 20 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27307284 -->
== Wikipedia translation of the week: 2024-35 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Erzi (village)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Caucasus, Ingushetia, Ингушские боевые и смотровые башни, горы Кавказа.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Erzi''' (Russian: Эрзи; Ingush: Аьрзи, romanized: Ärzi, lit. 'Eagle') is a medieval village (aul) in the Dzheyrakhsky District of Ingushetia. It is part of the rural settlement (administrative center) of Olgeti. The entire territory of the settlement is included in the Dzheyrakh-Assa State Historical-Architectural and Natural Museum-Reserve and is under state protection.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:19, 26 August 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27345183 -->
== Tech News: 2024-35 ==
<section begin="technews-2024-W35"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/35|Translations]] are available.
'''Feature news'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Administrators can now test the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] feature on test2wiki. This was done to allow cross-wiki testing of temporary accounts, for when temporary accounts switch between projects. The feature was enabled on testwiki a few weeks ago. No further temporary account deployments are scheduled yet. Temporary Accounts is a project to create a new type of user account that replaces IP addresses of unregistered editors which are no longer made public. Please [[mw:Talk:Trust and Safety Product/Temporary Accounts|share your opinions and questions on the project talk page]].
* Later this week, editors at wikis that use [[mw:Special:MyLanguage/Extension:FlaggedRevs|FlaggedRevs]] (also known as "Pending Changes") may notice that the indicators at the top of articles have changed. This change makes the system more consistent with the rest of the MediaWiki interface. [https://phabricator.wikimedia.org/T191156]
'''Bugs status'''
* Editors who use the 2010 wikitext editor, and use the Character Insert buttons, will [[phab:T361465|no longer]] experience problems with the buttons adding content into the edit-summary instead of the edit-window. You can read more about that, and 26 other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Project updates'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] Please review and vote on [[m:Special:MyLanguage/Community Wishlist/Focus areas|Focus Areas]], which are groups of wishes that share a problem. Focus Areas were created for the newly reopened Community Wishlist, which is now open year-round for submissions. The first batch of focus areas are specific to moderator workflows, around welcoming newcomers, minimizing repetitive tasks, and prioritizing tasks. Once volunteers have reviewed and voted on focus areas, the Foundation will then review and select focus areas for prioritization.
* Do you have a project and are willing to provide a three (3) month mentorship for an intern? [[mw:Special:MyLanguage/Outreachy|Outreachy]] is a twice a year program for people to participate in a paid internship that will start in December 2024 and end in early March 2025, and they need mentors and projects to work on. Projects can be focused on coding or non-coding (design, documentation, translation, research). See the Outreachy page for more details, and a list of past projects since 2013.
'''Learn more'''
* If you're curious about the product and technology improvements made by the Wikimedia Foundation last year, read [[diffblog:2024/08/21/wikimedia-foundation-product-technology-improving-the-user-experience/|this recent highlights summary on Diff]].
* To learn more about the technology behind the Wikimedia projects, you can now watch sessions from the technology track at Wikimania 2024 on Commons. This week, check out:
** [[c:File:Wikimania 2024 - Ohrid - Day 2 - Community Configuration - Shaping On-Wiki Functionality Together.webm|Community Configuration - Shaping On-Wiki Functionality Together]] (55 mins) - about the [[mw:Special:MyLanguage/Community Configuration|Community Configuration]] project.
** [[c:File:Wikimania 2024 - Belgrade - Day 1 - Future of MediaWiki. A sustainable platform to support a collaborative user base and billions of page views.webm|Future of MediaWiki. A sustainable platform to support a collaborative user base and billions of page views]] (30 mins) - an overview for both technical and non technical audiences, covering some of the challenges and open questions, related to the [[mw:MediaWiki Product Insights|platform evolution, stewardship and developer experiences]] research.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/35|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:34, 26 August 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27341211 -->
== Tech News: 2024-36 ==
<section begin="technews-2024-W36"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/36|Translations]] are available.
'''Weekly highlight'''
* Editors and volunteer developers interested in data visualisation can now test the new software for charts. Its early version is available on beta Commons and beta Wikipedia. This is an important milestone before making charts available on regular wikis. You can [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|read more about this project update]] and help to test the charts.
'''Feature news'''
* Editors who use the [[{{#special:Unusedtemplates}}]] page can now filter out pages which are expected to be there permanently, such as sandboxes, test-cases, and templates that are always substituted. Editors can add the new magic word [[mw:Special:MyLanguage/Help:Magic words#EXPECTUNUSEDTEMPLATE|<code dir="ltr"><nowiki>__EXPECTUNUSEDTEMPLATE__</nowiki></code>]] to a template page to hide it from the listing. Thanks to Sophivorus and DannyS712 for these improvements. [https://phabricator.wikimedia.org/T184633]
* Editors who use the New Topic tool on discussion pages, will [[phab:T334163|now be reminded]] to add a section header, which should help reduce the quantity of newcomers who add sections without a header. You can read more about that, and {{formatnum:28}} other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
* Last week, some Toolforge tools had occasional connection problems. The cause is still being investigated, but the problems have been resolved for now. [https://phabricator.wikimedia.org/T373243]
* Translation administrators at multilingual wikis, when editing multiple translation units, can now easily mark which changes require updates to the translation. This is possible with the [[phab:T298852#10087288|new dropdown menu]].
'''Project updates'''
* A new draft text of a policy discussing the use of Wikimedia's APIs [[m:Special:MyLanguage/API Policy Update 2024|has been published on Meta-Wiki]]. The draft text does not reflect a change in policy around the APIs; instead, it is an attempt to codify existing API rules. Comments, questions, and suggestions are welcome on [[m:Talk:API Policy Update 2024|the proposed update’s talk page]] until September 13 or until those discussions have concluded.
'''Learn more'''
* To learn more about the technology behind the Wikimedia projects, you can now watch sessions from the technology track at Wikimania 2024 on Commons. This week, check out:
** [[c:File:Wikimania 2024 - Ohrid - Day 2 - Charts, the successor of Graphs - A secure and extensible tool for data visualization.webm|Charts, the successor of Graphs - A secure and extensible tool for data visualization]] (25 mins) – about the above-mentioned Charts project.
** [[c:File:Wikimania 2024 - Ohrid - Day 3 - State of Language Technology and Onboarding at Wikimedia.webm|State of Language Technology and Onboarding at Wikimedia]] (90 mins) – about some of the language tools that support Wikimedia sites, such as [[mw:Special:MyLanguage/Content translation|Content]]/[[mw:Special:MyLanguage/Content translation/Section translation|Section Translation]], [[mw:Special:MyLanguage/MinT|MinT]], and LanguageConverter; also the current state and future of languages onboarding. [https://phabricator.wikimedia.org/T368772]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/36|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:08, 3 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27390268 -->
== Wikipedia translation of the week: 2024-37 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cappadocian calendar]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''Cappadocian calendar''' was a solar calendar that was derived from the Persian Zoroastrian calendar. It is named after the historic region Cappadocia in present-day Turkey, where it was used. The calendar, which had 12 months of 30 days each and five epagomenal days, originated between 550 and 330 BC, when Cappadocia was part of the Persian Achaemenid Empire. The Cappadocian calendar was identical to the Zoroastrian calendar; this can be seen in its structure, in the Avestan names and in the order of the months. The Cappadocian calendar reflects the Iranian cultural influence in the region.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:42, 9 September 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27357319 -->
== Tech News: 2024-37 ==
<section begin="technews-2024-W37"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/37|Translations]] are available.
'''Feature news'''
* Starting this week, the standard [[mw:Special:MyLanguage/Extension:CodeMirror|syntax highlighter]] will receive new colors that make them compatible in dark mode. This is the first of many changes to come as part of a major upgrade to syntax highlighting. You can learn more about what's to come on the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|help page]]. [https://phabricator.wikimedia.org/T365311][https://phabricator.wikimedia.org/T259059]
* Editors of wikis using Wikidata will now be notified of only relevant Wikidata changes in their watchlist. This is because the Lua functions <bdi lang="zxx" dir="ltr"><code>entity:getSitelink()</code></bdi> and <bdi lang="zxx" dir="ltr"><code>mw.wikibase.getSitelink(qid)</code></bdi> will have their logic unified for tracking different aspects of sitelinks to reduce junk notifications from [[m:Wikidata For Wikimedia Projects/Projects/Watchlist Wikidata Sitelinks Tracking|inconsistent sitelinks tracking]]. [https://phabricator.wikimedia.org/T295356]
'''Project updates'''
* Users of all Wikis will have access to Wikimedia sites as read-only for a few minutes on September 25, starting at 15:00 UTC. This is a planned datacenter switchover for maintenance purposes. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T370962]
* Contributors of [[phab:T363538#10123348|11 Wikipedias]], including English will have a new <bdi lang="zxx" dir="ltr"><code>MOS</code></bdi> namespace added to their Wikipedias. This improvement ensures that links beginning with <bdi lang="zxx" dir="ltr"><code>MOS:</code></bdi> (usually shortcuts to the [[w:en:Wikipedia:Manual of Style|Manual of Style]]) are not broken by [[w:en:Mooré|Mooré]] Wikipedia (language code <bdi lang="zxx" dir="ltr"><code>mos</code></bdi>). [https://phabricator.wikimedia.org/T363538]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/37|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:53, 9 September 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27424457 -->
== Tech News: 2024-38 ==
<section begin="technews-2024-W38"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/38|Translations]] are available.
'''Improvements and Maintenance'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] Editors interested in templates can help by reading the latest Wishlist focus area, [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|Template recall and discovery]], and share your feedback on the talkpage. This input helps the Community Tech team to decide the right technical approach to build. Everyone is also encouraged to continue adding [[m:Special:MyLanguage/Community Wishlist|new wishes]].
* The new automated [[{{#special:NamespaceInfo}}]] page helps editors understand which [[mw:Special:MyLanguage/Help:Namespaces|namespaces]] exist on each wiki, and some details about how they are configured. Thanks to DannyS712 for these improvements. [https://phabricator.wikimedia.org/T263513]
* [[mw:Special:MyLanguage/Help:Edit check#Reference check|References Check]] is a feature that encourages editors to add a citation when they add a new paragraph to a Wikipedia article. For a short time, the corresponding tag "Edit Check (references) activated" was erroneously being applied to some edits outside of the main namespace. This has been fixed. [https://phabricator.wikimedia.org/T373692]
* It is now possible for a wiki community to change the order in which a page’s categories are displayed on their wiki. By default, categories are displayed in the order they appear in the wikitext. Now, wikis with a consensus to do so can [[m:Special:MyLanguage/Requesting wiki configuration changes|request]] a configuration change to display them in alphabetical order. [https://phabricator.wikimedia.org/T373480]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Tool authors can now access ToolsDB's [[wikitech:Portal:Data Services#ToolsDB|public databases]] from both [[m:Special:MyLanguage/Research:Quarry|Quarry]] and [[wikitech:Superset|Superset]]. Those databases have always been accessible to every [[wikitech:Portal:Toolforge|Toolforge]] user, but they are now more broadly accessible, as Quarry can be accessed by anyone with a Wikimedia account. In addition, Quarry's internal database can now be [[m:Special:MyLanguage/Research:Quarry#Querying Quarry's own database|queried from Quarry itself]]. This database contains information about all queries that are being run and starred by users in Quarry. This information was already public through the web interface, but you can now query it using SQL. You can read more about that, and {{formatnum:20}} other community-submitted tasks that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
* Any pages or tools that still use the very old CSS classes <bdi lang="zxx" dir="ltr"><code>mw-message-box</code></bdi> need to be updated. These old classes will be removed next week or soon afterwards. Editors can use a [https://global-search.toolforge.org/?q=mw-message-box®ex=1&namespaces=&title= global-search] to determine what needs to be changed. It is possible to use the newer <bdi lang="zxx" dir="ltr"><code>cdx-message</code></bdi> group of classes as a replacement (see [https://doc.wikimedia.org/codex/latest/components/demos/message.html#css-only-version the relevant Codex documentation], and [https://meta.wikimedia.org/w/index.php?title=Tech/Header&diff=prev&oldid=27449042 an example update]), but using locally defined onwiki classes would be best. [https://phabricator.wikimedia.org/T374499]
'''Technical project updates'''
* Next week, all Wikimedia wikis will be read-only for a few minutes. This will start on September 25 at [https://zonestamp.toolforge.org/1727276400 15:00 UTC]. This is a planned datacenter switchover for maintenance purposes. [[m:Special:MyLanguage/Tech/Server switch|This maintenance process also targets other services.]] The previous switchover took 3 minutes, and the Site Reliability Engineering teams use many tools to make sure that this essential maintenance work happens as quickly as possible. [https://phabricator.wikimedia.org/T370962]
'''Tech in depth'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The latest monthly [[mw:Special:MyLanguage/MediaWiki Product Insights/Reports/August 2024|MediaWiki Product Insights newsletter]] is available. This edition includes details about: research about [[mw:Special:MyLanguage/Manual:Hooks|hook]] handlers to help simplify development, research about performance improvements, work to improve the REST API for end-users, and more.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] To learn more about the technology behind the Wikimedia projects, you can now watch sessions from the technology track at Wikimania 2024 on Commons. This week, check out:
** [[c:File:Wikimania 2024 - Auditorium Kyiv - Day 4 - Hackathon Showcase.webm|Hackathon Showcase]] (45 mins) - 19 short presentations by some of the Hackathon participants, describing some of the projects they worked on, such as automated testing of maintenance scripts, a video-cutting command line tool, and interface improvements for various tools. There are [[phab:T369234|more details and links available]] in the Phabricator task.
** [[c:File:Co-Creating a Sustainable Future for the Toolforge Ecosystem.webm|Co-Creating a Sustainable Future for the Toolforge Ecosystem]] (40 mins) - a roundtable discussion for tool-maintainers, users, and supporters of Toolforge about how to make the platform sustainable and how to evaluate the tools available there.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/38|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:03, 17 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27460876 -->
== Wikipedia translation of the week: 2024-39 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Independence Day (Albania)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Independence Day''' (Albanian: Dita e Pavarësisë) is a public holiday in Albania observed on 28 November. It commemorates the Albanian Declaration of Independence (from the Ottoman Empire), which was ratified by the All-Albanian Congress on 28 November 1912, establishing the state of Albania.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:29, 23 September 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27456350 -->
== Tech News: 2024-39 ==
<section begin="technews-2024-W39"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/39|Translations]] are available.
'''Weekly highlight'''
* All wikis will be [[m:Special:MyLanguage/Tech/Server switch|read-only]] for a few minutes on Wednesday September 25 at [https://zonestamp.toolforge.org/1727276400 15:00 UTC]. Reading the wikis will not be interrupted, but editing will be paused. These twice-yearly processes allow WMF's site reliability engineering teams to remain prepared to keep the wikis functioning even in the event of a major interruption to one of our data centers.
'''Updates for editors'''
[[File:Add alt text from a halfsheet, with the article behind.png|thumb|A screenshot of the interface for the Alt Text suggested-edit feature]]
* Editors who use the iOS Wikipedia app in Spanish, Portuguese, French, or Chinese, may see the [[mw:Special:MyLanguage/Wikimedia Apps/iOS Suggested edits project/Alt Text Experiment|Alt Text suggested-edit experiment]] after editing an article, or completing a suggested edit using "[[mw:Special:MyLanguage/Wikimedia Apps/iOS Suggested edits project#Hypothesis 2 Add an Image Suggested Edit|Add an image]]". Alt-text helps people with visual impairments to read Wikipedia articles. The team aims to learn if adding alt-text to images is a task that editors can be successful with. Please share any feedback on [[mw:Talk:Wikimedia Apps/iOS Suggested edits project/Alt Text Experiment|the discussion page]].
* The Codex color palette has been updated with new and revised colors for the MediaWiki user interfaces. The [[mw:Special:MyLanguage/Design System Team/Color/Design documentation#Updates|most noticeable changes]] for editors include updates for: dark mode colors for Links and for quiet Buttons (progressive and destructive), visited Link colors for both light and dark modes, and background colors for system-messages in both light and dark modes.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] It is now possible to include clickable wikilinks and external links inside code blocks. This includes links that are used within <code><nowiki><syntaxhighlight></nowiki></code> tags and on code pages (JavaScript, CSS, Scribunto and Sanitized CSS). Uses of template syntax <code><nowiki>{{…}}</nowiki></code> are also linked to the template page. Thanks to SD0001 for these improvements. [https://phabricator.wikimedia.org/T368166]
* Two bugs were fixed in the [[m:Special:MyLanguage/Account vanishing|GlobalVanishRequest]] system by improving the logging and by removing an incorrect placeholder message. [https://phabricator.wikimedia.org/T370595][https://phabricator.wikimedia.org/T372223]
* View all {{formatnum:25}} community-submitted {{PLURAL:25|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] From [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]]:
** The API now enables 5,000 on-demand API requests per month and twice-monthly HTML snapshots freely (gratis and libre). More information on the updates and also improvements to the software development kits (SDK) are explained on [https://enterprise.wikimedia.com/blog/enhanced-free-api/ the project's blog post]. While Wikimedia Enterprise APIs are designed for high-volume commercial reusers, this change enables many more community use-cases to be built on the service too.
** The Snapshot API (html dumps) have added beta Structured Contents endpoints ([https://enterprise.wikimedia.com/blog/structured-contents-snapshot-api/ blog post on that]) as well as released two beta datasets (English and French Wikipedia) from that endpoint to Hugging Face for public use and feedback ([https://enterprise.wikimedia.com/blog/hugging-face-dataset/ blog post on that]). These pre-parsed data sets enable new options for researchers, developers, and data scientists to use and study the content.
'''In depth'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The Wikidata Query Service (WDQS) is used to get answers to questions using the Wikidata data set. As Wikidata grows, we had to make a major architectural change so that WDQS could remain performant. As part of the [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS graph split|WDQS Graph Split project]], we have new SPARQL endpoints available for serving the "[https://query-scholarly.wikidata.org scholarly]" and "[https://query-main.wikidata.org main]" subgraphs of Wikidata. The [http://query.wikidata.org query.wikidata.org endpoint] will continue to serve the full Wikidata graph until March 2025. After this date, it will only serve the main graph. For more information, please see [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/September 2024 scaling update|the announcement on Wikidata]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/39|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:37, 23 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27493779 -->
== Wikipedia translation of the week: 2024-40 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Wildlife of Bahrain]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Birds in Al-Areen Wildlife Park.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The wildlife of the archipelago of Bahrain, is more varied than might be expected of this small group of islands in the Persian Gulf. Apart from a strip of the north and west of the main island, where crops are grown with irrigation, the land is arid. With a very hot dry summer, a mild winter, and brackish groundwater, the plants need adaptations in order to survive. Nevertheless, 196 species of higher plant have been recorded here, as well as about seventeen species of terrestrial mammals, many birds and reptiles, and many migratory birds visit the islands in autumn and spring.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:57, 30 September 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27456350 -->
== Tech News: 2024-40 ==
<section begin="technews-2024-W40"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/40|Translations]] are available.
'''Updates for editors'''
* Readers of [[phab:T375401|42 more wikis]] can now use Dark Mode. If the option is not yet available for logged-out users of your wiki, this is likely because many templates do not yet display well in Dark Mode. Please use the [https://night-mode-checker.wmcloud.org/ night-mode-checker tool] if you are interested in helping to reduce the number of issues. The [[mw:Special:MyLanguage/Recommendations for night mode compatibility on Wikimedia wikis|recommendations page]] provides guidance on this. Dark Mode is enabled on additional wikis once per month.
* Editors using the 2010 wikitext editor as their default can access features from the 2017 wikitext editor by adding <code dir=ltr>?veaction=editsource</code> to the URL. If you would like to enable the 2017 wikitext editor as your default, it can be set in [[Special:Preferences#mw-input-wpvisualeditor-newwikitext|your preferences]]. [https://phabricator.wikimedia.org/T239796]
* For logged-out readers using the Vector 2022 skin, the "donate" link has been moved from a collapsible menu next to the content area into a more prominent top menu, next to "Create an account". This restores the link to the level of prominence it had in the Vector 2010 skin. [[mw:Readers/2024 Reader and Donor Experiences#Donor Experiences (Key Result WE 3.2 and the related hypotheses)|Learn more]] about the changes related to donor experiences. [https://phabricator.wikimedia.org/T373585]
* The CampaignEvents extension provides tools for organizers to more easily manage events, communicate with participants, and promote their events on the wikis. The extension has been [[m:Special:MyLanguage/CampaignEvents/Deployment status|enabled]] on Arabic Wikipedia, Igbo Wikipedia, Swahili Wikipedia, and Meta-Wiki. [[w:zh:Wikipedia:互助客栈/其他#引進CampaignEvents擴充功能|Chinese Wikipedia has decided]] to enable the extension, and discussions on the extension are in progress [[w:es:Wikipedia:Votaciones/2024/Sobre la política de Organizadores de Eventos|on Spanish Wikipedia]] and [[d:Wikidata:Project chat#Enabling the CampaignEvents Extention on Wikidata|on Wikidata]]. To learn how to enable the extension on your wiki, you can visit [[m:Special:MyLanguage/CampaignEvents|the CampaignEvents page on Meta-Wiki]].
* View all {{formatnum:22}} community-submitted {{PLURAL:22|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Developers with an account on Wikitech-wiki should [[wikitech:Wikitech/SUL-migration|check if any action is required]] for their accounts. The wiki is being changed to use the single-user-login (SUL) system, and other configuration changes. This change will help reduce the overall complexity for the weekly software updates across all our wikis.
'''In depth'''
* The [[m:Special:MyLanguage/Tech/Server switch|server switch]] was completed successfully last week with a read-only time of [[wikitech:Switch Datacenter#Past Switches|only 2 minutes 46 seconds]]. This periodic process makes sure that engineers can switch data centers and keep all of the wikis available for readers, even if there are major technical issues. It also gives engineers a chance to do maintenance and upgrades on systems that normally run 24 hours a day, and often helps to reveal weaknesses in the infrastructure. The process involves dozens of software services and hundreds of hardware servers, and requires multiple teams working together. Work over the past few years has reduced the time from 17 minutes down to 2–3 minutes. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/66ZW7B2MG63AESQVTXDIFQBDBS766JGW/]
'''Meetings and events'''
* October 4–6: [[m:Special:MyLanguage/WikiIndaba conference 2024|WikiIndaba Conference's Hackathon]] in Johannesburg, South Africa
* November 4–6: [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Fall 2024|MediaWiki Users and Developers Conference Fall 2024]] in Vienna, Austria
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/40|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:21, 30 September 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27530062 -->
== Tech News: 2024-41 ==
<section begin="technews-2024-W41"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/41|Translations]] are available.
'''Weekly highlight'''
* Communities can now request installation of [[mw:Special:MyLanguage/Moderator Tools/Automoderator|Automoderator]] on their wiki. Automoderator is an automated anti-vandalism tool that reverts bad edits based on scores from the new "Revert Risk" machine learning model. You can [[mw:Special:MyLanguage/Extension:AutoModerator/Deploying|read details about the necessary steps]] for installation and configuration. [https://phabricator.wikimedia.org/T336934]
'''Updates for editors'''
* Translators in wikis where [[mw:Special:MyLanguage/Content translation/Section translation#Try the tool|the mobile experience of Content Translation is available]], can now customize their articles suggestion list from 41 filtering options when using the tool. This topic-based article suggestion feature makes it easy for translators to self-discover relevant articles based on their area of interest and translate them. You can [https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&active-list=suggestions try it with your mobile device]. [https://phabricator.wikimedia.org/T368422]
* View all {{formatnum:12}} community-submitted {{PLURAL:12|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* It is now possible for <bdi lang="zxx" dir="ltr"><code><nowiki><syntaxhighlight></nowiki></code></bdi> code blocks to offer readers a "Copy" button if the <bdi lang="zxx" dir="ltr"><code><nowiki>copy=1</nowiki></code></bdi> attribute is [[mw:Special:MyLanguage/Extension:SyntaxHighlight#copy|set on the tag]]. Thanks to SD0001 for these improvements. [https://phabricator.wikimedia.org/T40932]
* Customized copyright footer messages on all wikis will be updated. The new versions will use wikitext markup instead of requiring editing raw HTML. [https://phabricator.wikimedia.org/T375789]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Later this month, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] will be rolled out on several pilot wikis. The final list of the wikis will be published in the second half of the month. If you maintain any tools, bots, or gadgets on [[phab:T376499|these 11 wikis]], and your software is using data about IP addresses or is available for logged-out users, please check if it needs to be updated to work with temporary accounts. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|Guidance on how to update the code is available]].
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Rate limiting has been enabled for the code review tools [[Wikitech:Gerrit|Gerrit]] and [[Wikitech:GitLab|GitLab]] to address ongoing issues caused by malicious traffic and scraping. Clients that open too many concurrent connections will be restricted for a few minutes. This rate limiting is managed through [[Wikitech:nftables|nftables]] firewall rules. For more details, see Wikitech's pages on [[Wikitech:Firewall#Throttling with nftables|Firewall]], [[Wikitech:GitLab/Abuse and rate limiting|GitLab limits]] and [[Wikitech:Gerrit/Operations#Throttling IPs|Gerrit operations]].
* Five new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q49224|Komering]] ([[w:kge:|<code>w:kge:</code>]]) [https://phabricator.wikimedia.org/T374813]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q36096|Mooré]] ([[m:mos:|<code>m:mos:</code>]]) [https://phabricator.wikimedia.org/T374641]
** a {{int:project-localized-name-group-wiktionary}} in [[d:Q36213|Madurese]] ([[wikt:mad:|<code>wikt:mad:</code>]]) [https://phabricator.wikimedia.org/T374968]
** a {{int:project-localized-name-group-wikiquote}} in [[d:Q2501174|Gorontalo]] ([[q:gor:|<code>q:gor:</code>]]) [https://phabricator.wikimedia.org/T375088]
** a {{int:project-localized-name-group-wikinews}} in [[d:Q56482|Shan]] ([[n:shn:|<code>n:shn:</code>]]) [https://phabricator.wikimedia.org/T375430]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/41|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W41"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:43, 7 October 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27557422 -->
== Wikipedia translation of the week: 2024-42 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Little Danes experiment]]'''<br /> <small>''([[:fa:آزمایش دانمارکیهای کوچک]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Children play at a Danish Red Cross-run orphanage in Greenland.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''little Danes experiment''' was a 1951 Danish operation where 22 Greenlandic Inuit children were sent to Danish foster families in an attempt to re-educate them as "little Danes". While the children were all supposed to be orphans, most were not. Six children were adopted while in Denmark, and sixteen returned to Greenland, only to be placed in Danish-speaking orphanages and never live with their families again. Half of the children experienced mental health disturbances, and half of them died in young adulthood. The government of Denmark officially apologised in 2020, after several years of demands from Greenlandic officials.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:16, 14 October 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27572997 -->
== Tech News: 2024-42 ==
<section begin="technews-2024-W42"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/42|Translations]] are available.
'''Updates for editors'''
* The Structured Discussion extension (also known as Flow) is starting to be removed. This extension is unmaintained and causes issues. It will be replaced by [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]], which is used on any regular talk page. [[mw:Special:MyLanguage/Structured Discussions/Deprecation#Deprecation timeline|A first set of wikis]] are being contacted. These wikis are invited to stop using Flow, and to move all Flow boards to sub-pages, as archives. At these wikis, a script will move all Flow pages that aren't a sub-page to a sub-page automatically, starting on 22 October 2024. On 28 October 2024, all Flow boards at these wikis will be set in read-only mode. [https://www.mediawiki.org/wiki/Structured_Discussions/Deprecation][https://phabricator.wikimedia.org/T370722]
* WMF's Search Platform team is working on making it easier for readers to perform text searches in their language. A [[phab:T332342|change last week]] on over 30 languages makes it easier to find words with accents and other diacritics. This applies to both full-text search and to types of advanced search such as the <bdi lang="en" dir="ltr">''hastemplate''</bdi> and <bdi lang="en" dir="ltr">''incategory''</bdi> keywords. More technical details (including a few other minor search upgrades) are available. [https://www.mediawiki.org/wiki/User:TJones_%28WMF%29/Notes/Language_Analyzer_Harmonization_Notes#ASCII-folding/ICU-folding_%28T332342%29]
* View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]]. For example, [[mw:Special:MyLanguage/Help:Edit check|EditCheck]] was installed at Russian Wikipedia, and fixes were made for some missing user interface styles.
'''Updates for technical contributors'''
* Editors who use the Toolforge tool [[toolforge:copyvios|Earwig's Copyright Violation Detector]] will now be required to log in with their Wikimedia account before running checks using the "search engine" option. This change is needed to help prevent external bots from misusing the system. Thanks to Chlod for these improvements. [https://en.wikipedia.org/wiki/Wikipedia_talk:New_pages_patrol/Reviewers#Authentication_is_now_required_for_search_engine_checks_on_Earwig's_Copyvio_Tool]
* [[m:Special:MyLanguage/Phabricator|Phabricator]] users can create tickets and add comments on existing tickets via Email again. [[mw:Special:MyLanguage/Phabricator/Help#Using email|Sending email to Phabricator]] has been fixed. [https://phabricator.wikimedia.org/T356077]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Some HTML elements in the interface are now wrapped with a <code><nowiki><bdi></nowiki></code> element, to make our HTML output more aligned with Web standards. More changes like this will be coming in future weeks. This change might break some tools that rely on the previous HTML structure of the interface. Note that relying on the HTML structure of the interface is [[mw:Special:MyLanguage/Stable interface policy/Frontend#What is not stable?|not recommended]] and might break at any time. [https://phabricator.wikimedia.org/T375975]
'''In depth'''
* The latest monthly [[mw:Special:MyLanguage/MediaWiki Product Insights/Reports/September 2024|MediaWiki Product Insights newsletter]] is available. This edition includes: updates on Wikimedia's authentication system, research to simplify feature development in the MediaWiki platform, updates on Parser Unification and MathML rollout, and more.
* The latest quarterly [[mw:Technical Community Newsletter/2024/October|Technical Community Newsletter]] is now available. This edition include: research about improving topic suggestions related to countries, improvements to PHPUnit tests, and more.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/42|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:22, 14 October 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27597254 -->
== Wikipedia translation of the week: 2024-43 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Kharayeb]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Muharram 1Oth-Ashouraa 2007 in Kharayeb - panoramio.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Kharayeb''' (Arabic: الخرايب) is a historic town in the Sidon District in the South Governorate, Lebanon. The town is 77 km (48 mi) south of Beirut, and stands at an average altitude of 190 m (620 ft) above sea level. The town boasts a rich historical legacy, with archaeological excavations revealing a complex settlement history spanning from Prehistory to the Ottoman period. Notably, Kharayeb's origins can be traced back to the Persian period (539–330 BC), when it played a pivotal role in the region's agricultural and economic landscape, culminating in the construction of its Phoenician temple around the 6th century BC.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:38, 21 October 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27572997 -->
== Tech News: 2024-43 ==
<section begin="technews-2024-W43"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/43|Translations]] are available.
'''Weekly highlight'''
* The Mobile Apps team has released an [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Navigation Refresh#Phase 1: Creating a user Profile Menu (T373714)|update]] to the iOS app's navigation, and it is now available in the latest App store version. The team added a new Profile menu that allows for easy access to editor features like Notifications and Watchlist from the Article view, and brings the "Donate" button into a more accessible place for users who are reading an article. This is the first phase of a larger planned [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Navigation Refresh|navigation refresh]] to help the iOS app transition from a primarily reader-focused app, to an app that fully supports reading and editing. The Wikimedia Foundation has added more editing features and support for on-wiki communication based on volunteer requests in recent years.
[[File:IOS App Navigation refresh first phase 05.png|thumb|iOS Wikipedia App's profile menu and contents]]
'''Updates for editors'''
* Wikipedia readers can now download a browser extension to experiment with some early ideas on potential features that recommend articles for further reading, automatically summarize articles, and improve search functionality. For more details and to stay updated, check out the Web team's [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments|Content Discovery Experiments page]] and [[mw:Special:MyLanguage/Newsletter:Web team's projects|subscribe to their newsletter]].
* Later this month, logged-out editors of [[phab:T376499|these 12 wikis]] will start to have [[mw:Special:Mylanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] created. The list may slightly change - some wikis may be removed but none will be added. Temporary account is a new [[mw:Special:MyLanguage/User account types|type of user account]]. It enhances the logged-out editors' privacy and makes it easier for community members to communicate with them. If you maintain any tools, bots, or gadgets on these 12 wikis, and your software is using data about IP addresses or is available for logged-out users, please check if it needs to be updated to work with temporary accounts. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|Guidance on how to update the code is available]]. Read more about the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|deployment plan across all wikis]].
* View all {{formatnum:33}} community-submitted {{PLURAL:33|task|tasks}} that were [[m:Tech/News/Recently resolved community tasks|resolved last week]]. For example, the [[w:nr:Main Page|South Ndebele]], [[w:rsk:Главни бок|Pannonian Rusyn]], [[w:ann:Uwu|Obolo]], [[w:iba:Lambar Keterubah|Iban]] and [[w:tdd:ᥞᥨᥝᥴ ᥘᥣᥲ ᥖᥥᥰ|Tai Nüa]] Wikipedia languages were created last week. [https://www.wikidata.org/wiki/Q36785][https://www.wikidata.org/wiki/Q35660][https://www.wikidata.org/wiki/Q36614][https://www.wikidata.org/wiki/Q33424][https://www.wikidata.org/wiki/Q36556]
* It is now possible to create functions on Wikifunctions using Wikidata lexemes, through the new [[f:Z6005|Wikidata lexeme type]] launched last week. When you go to one of these functions, the user interface provides a lexeme selector that helps you pick a lexeme from Wikidata that matches the word you type. After hitting run, your selected lexeme is retrieved from Wikidata, transformed into a Wikidata lexeme type, and passed into the selected function. Read more about this in [[f:Special:MyLanguage/Wikifunctions:Status updates/2024-10-17#Function of the Week: select representation from lexeme|the latest Wikifunctions newsletter]].
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Users of the Wikimedia sites can now format dates more easily in different languages with the new <code dir="ltr">{{[[mw:Special:MyLanguage/Help:Extension:ParserFunctions##timef|#timef]]:…}}</code> parser function. For example, <code dir="ltr"><nowiki>{{#timef:now|date|en}}</nowiki></code> will show as "<bdi lang="en" dir="ltr">{{#timef:now|date|en}}</bdi>". Previously, <code dir="ltr"><nowiki>{{#time:…}}</nowiki></code> could be used to format dates, but this required knowledge of the order of the time and date components and their intervening punctuation. <code dir="ltr">#timef</code> (or <code dir="ltr">#timefl</code> for local time) provides access to the standard date formats that MediaWiki uses in its user interface. This may help to simplify some templates on multi-lingual wikis like Commons and Meta. [https://phabricator.wikimedia.org/T223772][https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:ParserFunctions##timef]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Commons and Meta users can now efficiently [[mw:Special:MyLanguage/Help:Magic words#Localization|retrieve the user's language]] using <code dir="ltr"><nowiki>{{USERLANGUAGE}}</nowiki></code> instead of using <code dir="ltr"><nowiki>{{int:lang}}</nowiki></code>. [https://phabricator.wikimedia.org/T4085]
* The [[m:Special:MyLanguage/Product and Technology Advisory Council|Product and Tech Advisory Council]] (PTAC) now has its pilot members with representation across Africa, Asia, Europe, North America and South America. They will work to address the [[Special:MyLanguage/Movement Strategy/Initiatives/Technology Council|Movement Strategy's Technology Council]] initiative of having a co-defined and more resilient technological platform. [https://meta.wikimedia.org/wiki/Movement_Strategy/Initiatives/Technology_Council]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/32|Growth newsletter]] is available. It includes: an upcoming Newcomer Homepage Community Updates module, new Community Configuration options, and details on new projects.
* The Wikimedia Foundation is [[mw:Special:MyLanguage/Wikimedia Security Team#CNA Partnership|now an official partner of the CVE program]], which is an international effort to catalog publicly disclosed cybersecurity vulnerabilities. This partnership will allow the Security Team to instantly publish [[w:en:Common Vulnerabilities and Exposures|common vulnerabilities and exposures]] (CVE) records that are affecting MediaWiki core, extensions, and skins, along with any other code the Foundation is a steward of.
* The [[m:Special:MyLanguage/Community Wishlist|Community Wishlist]] is now [[m:Community Wishlist/Updates#October 16, 2024: Conversations Made Easier: Machine-Translated Wishes Are Here!|testing machine translations]] for Wishlist content. Volunteers can now read machine-translated versions of wishes and dive into discussions even before translators arrive to translate content.
'''Meetings and events'''
* 24 October - Wiki Education Speaker Series Webinar - [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/N4XTB4G55BUY3M3PNGUAKQWJ7A4UOPAK/ Open Source Tech: Building the Wiki Education Dashboard], featuring Wikimedia interns and a Web developer in the panel.
* 20–22 December 2024 - [[m:Special:MyLanguage/Indic Wikimedia Hackathon Bhubaneswar 2024|Indic Wikimedia Hackathon Bhubaneswar 2024]] in Odisha, India. A hackathon for community members, including developers, designers and content editors, to build technical solutions that improve contributors' experiences.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/43|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:53, 21 October 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27634672 -->
== Wikipedia translation of the week: 2024-44 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Christmas horror]]'''<br /> <small>''([[:es:Terror navideño]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Christmascarol1843 -- 169.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Christmas horror''' is a fiction genre and film genre that incorporates horror elements into a seasonal setting. It is popular in multiple countries.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:05, 28 October 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27647428 -->
== Tech News: 2024-44 ==
<section begin="technews-2024-W44"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/44|Translations]] are available.
'''Updates for editors'''
* Later in November, the Charts extension will be deployed to the test wikis in order to help identify and fix any issue. A security review is underway to then enable deployment to pilot wikis for broader testing. You can read [[mw:Special:MyLanguage/Extension:Chart/Project/Updates#October 2024: Working towards production deployment|the October project update]] and see the [https://en.wikipedia.beta.wmflabs.org/wiki/Charts latest documentation and examples on Beta Wikipedia].
* View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, [[w:en:PediaPress|Pediapress.com]], an external service that creates books from Wikipedia, can now use [[mw:Special:MyLanguage/Wikimedia Maps|Wikimedia Maps]] to include existing pre-rendered infobox map images in their printed books on Wikipedia. [https://phabricator.wikimedia.org/T375761]
'''Updates for technical contributors'''
* Wikis can use [[:mw:Special:MyLanguage/Extension:GuidedTour|the Guided Tour extension]] to help newcomers understand how to edit. The Guided Tours extension now works with [[mw:Special:MyLanguage/Manual:Dark mode|dark mode]]. Guided Tour maintainers can check their tours to see that nothing looks odd. They can also set <code>emitTransitionOnStep</code> to <code>true</code> to fix an old bug. They can use the new flag <code>allowAutomaticBack</code> to avoid back-buttons they don't want. [https://phabricator.wikimedia.org/T73927#10241528]
* Administrators in the Wikimedia projects who use the [[mw:Special:MyLanguage/Help:Extension:Nuke|Nuke Extension]] will notice that mass deletions done with this tool have the "Nuke" tag. This change will make reviewing and analyzing deletions performed with the tool easier. [https://phabricator.wikimedia.org/T366068]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/44|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W44"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:57, 28 October 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27668811 -->
== Wikipedia translation of the week: 2024-45 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Placenta cake]]'''<br /> <small>''([[:simple:Placenta cake]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Bucharest, Greek pie-maker, 1880.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Placenta cake''' is a dish from ancient Greece and Rome consisting of many dough layers interspersed with a mixture of cheese and honey and flavored with bay leaves, baked and then covered in honey. The dessert is mentioned in classical texts such as the Greek poems of Archestratos and Antiphanes, as well as the De agri cultura of Cato the Elder. It is often seen as the predecessor of baklava and börek.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:16, 4 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27647428 -->
== Tech News: 2024-45 ==
<section begin="technews-2024-W45"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/45|Translations]] are available.
'''Updates for editors'''
* Stewards can now make [[m:Special:MyLanguage/Global blocks|global account blocks]] cause global [[mw:Special:MyLanguage/Autoblock|autoblocks]]. This will assist stewards in preventing abuse from users who have been globally blocked. This includes preventing globally blocked temporary accounts from exiting their session or switching browsers to make subsequent edits for 24 hours. Previously, temporary accounts could exit their current session or switch browsers to continue editing. This is an anti-abuse tool improvement for the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|Temporary Accounts]] project. You can read more about the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|progress on key features for temporary accounts]]. [https://phabricator.wikimedia.org/T368949]
* Wikis that have the [[m:Special:MyLanguage/CampaignEvents/Deployment status|CampaignEvents extension enabled]] can now use the [[m:Special:MyLanguage/Campaigns/Foundation Product Team/Event list#October 29, 2024: Collaboration List launched|Collaboration List]] feature. This list provides a new, easy way for contributors to learn about WikiProjects on their wikis. Thanks to the Campaign team for this work that is part of [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2024-2025/Product %26 Technology OKRs#WE KRs|the 2024/25 annual plan]]. If you are interested in bringing the CampaignEvents extension to your wiki, you can [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|follow these steps]] or you can reach out to User:Udehb-WMF for help.
* The text color for red links will be slightly changed later this week to improve their contrast in light mode. [https://phabricator.wikimedia.org/T370446]
* View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, on multilingual wikis, users [[phab:T216368|can now]] hide translations from the WhatLinksHere special page.
'''Updates for technical contributors'''
* XML [[m:Special:MyLanguage/Data dumps|data dumps]] have been temporarily paused whilst a bug is investigated. [https://lists.wikimedia.org/hyperkitty/list/xmldatadumps-l@lists.wikimedia.org/message/BXWJDPO5QI2QMBCY7HO36ELDCRO6HRM4/]
'''In depth'''
* Temporary Accounts have been deployed to six wikis; thanks to the Trust and Safety Product team for [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|this work]], you can read about [[phab:T340001|the deployment plans]]. Beginning next week, Temporary Accounts will also be enabled on [[phab:T378336|seven other projects]]. If you are active on these wikis and need help migrating your tools, please reach out to [[m:User:Udehb-WMF|User:Udehb-WMF]] for assistance.
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2024/October|Language and Internationalization newsletter]] is available. It includes: New languages supported in translatewiki or in MediaWiki; New keyboard input methods for some languages; details about recent and upcoming meetings, and more.
'''Meetings and events'''
* [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Fall 2024|MediaWiki Users and Developers Conference Fall 2024]] is happening in Vienna, Austria and online from 4 to 6 November 2024. The conference will feature discussions around the usage of MediaWiki software by and within companies in different industries and will inspire and onboard new users.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/45|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W45"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:51, 4 November 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27693917 -->
== Wikipedia translation of the week: 2024-46 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Trisomy 16]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Chromosome 16.svg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Trisomy 16''' is a chromosomal abnormality in which there are 3 copies of chromosome 16 rather than two. It is the most common trisomy leading to miscarriage and the second most common chromosomal cause of it, closely following X-chromosome monosomy. About 6% of miscarriages have trisomy 16.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:09, 11 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27708700 -->
== Tech News: 2024-46 ==
<section begin="technews-2024-W46"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/46|Translations]] are available.
'''Updates for editors'''
* On wikis with the [[mw:Special:MyLanguage/Help:Extension:Translate|Translate extension]] enabled, users will notice that the FuzzyBot will now automatically create translated versions of categories used on translated pages. [https://phabricator.wikimedia.org/T285463]
* View all {{formatnum:29}} community-submitted {{PLURAL:29|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the submitted task to use the [[mw:Special:MyLanguage/Extension:SecurePoll|SecurePoll extension]] for English Wikipedia's special [[w:en:Wikipedia:Administrator elections|administrator election]] was resolved on time. [https://phabricator.wikimedia.org/T371454]
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] In <code dir="ltr">[[mw:MediaWiki_1.44/wmf.2|1.44.0-wmf-2]]</code>, the logic of Wikibase function <code>getAllStatements</code> changed to behave like <code>getBestStatements</code>. Invoking the function now returns a copy of values which are immutable. [https://phabricator.wikimedia.org/T270851]
* [https://en.wikipedia.org/api/rest_v1/ Wikimedia REST API] users, such as bot operators and tool maintainers, may be affected by ongoing upgrades. The API will be rerouting some page content endpoints from RESTbase to the newer [[mw:Special:MyLanguage/API:REST API|MediaWiki REST API]] endpoints. The [[phab:T374683|impacted endpoints]] include getting page/revision metadata and rendered HTML content. These changes will be available on testwiki later this week, with other projects to follow. This change should not affect existing functionality, but active users of the impacted endpoints should verify behavior on testwiki, and raise any concerns on the related [[phab:T374683|Phabricator ticket]].
'''In depth'''
* Admins and users of the Wikimedia projects [[mw:Special:MyLanguage/Moderator_Tools/Automoderator#Usage|where Automoderator is enabled]] can now monitor and evaluate important metrics related to Automoderator's actions. [https://superset.wmcloud.org/superset/dashboard/unified-automoderator-activity-dashboard/ This Superset dashboard] calculates and aggregates metrics about Automoderator's behaviour on the projects in which it is deployed. Thanks to the Moderator Tools team for this Dashboard; you can visit [[mw:Special:MyLanguage/Moderator Tools/Automoderator/Unified Activity Dashboard|the documentation page]] for more information about this work. [https://phabricator.wikimedia.org/T369488]
'''Meetings and events'''
* 21 November 2024 ([[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 8:00 UTC|8:00 UTC]] & [[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 16:00 UTC|16:00 UTC]]) - [[c:Commons:WMF support for Commons/Commons community calls|Community call]] with Wikimedia Commons volunteers and stakeholders to help prioritize support efforts for 2025-2026 Fiscal Year. The theme of this call is how content should be organised on Wikimedia Commons.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/46|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W46"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:08, 12 November 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27732268 -->
== Wikipedia translation of the week: 2024-47 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Boana platanera]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Rana platanera - Boana platanera.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Boana platanera''''', commonly known as the banana tree dwelling frog, is a species of tree frog in the family Hylidae. It is distributed within Venezuela, Colombia, Panama, and Trinidad and Tobago. Boana platanera was described in 2021, and individuals of the species were previously classified as Boana crepitans or Boana xerophylla.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:53, 18 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27735014 -->
== Tech News: 2024-47 ==
<section begin="technews-2024-W47"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/47|Translations]] are available.
'''Updates for editors'''
* Users of Wikimedia sites will now be warned when they create a [[mw:Special:MyLanguage/Help:Redirects|redirect]] to a page that doesn't exist. This will reduce the number of broken redirects to red links in our projects. [https://phabricator.wikimedia.org/T326057]
* View all {{formatnum:42}} community-submitted {{PLURAL:42|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, [[mw:Special:MyLanguage/Manual:Pywikibot/Overview|Pywikibot]], which automates work on MediaWiki sites, was upgraded to 9.5.0 on Toolforge. [https://phabricator.wikimedia.org/T378676]
'''Updates for technical contributors'''
* On wikis that use the [[mw:Special:MyLanguage/Extension:FlaggedRevs|FlaggedRevs extension]], pages created or moved by users with the appropriate permissions are marked as flagged automatically. This feature has not been working recently, and changes fixing it should be deployed this week. Thanks to Daniel and Wargo for working on this. [https://phabricator.wikimedia.org/T379218][https://phabricator.wikimedia.org/T368380]
'''In depth'''
* There is a new [https://diff.wikimedia.org/2024/11/05/say-hi-to-temporary-accounts-easier-collaboration-with-logged-out-editors-with-better-privacy-protection Diff post] about Temporary Accounts, available in more than 15 languages. Read it to learn about what Temporary Accounts are, their impact on different groups of users, and the plan to introduce the change on all wikis.
'''Meetings and events'''
* Technical volunteers can now register for the [[mw:Special:MyLanguage/Wikimedia Hackathon 2025|2025 Wikimedia Hackathon]], which will take place in Istanbul, Turkey. [https://pretix.eu/wikimedia/hackathon2025/ Application for travel and accommodation scholarships] is open from '''November 12 to December 10 2024'''. The registration for the event will close in mid-April 2025. The Wikimedia Hackathon is an annual gathering that unites the global technical community to collaborate on existing projects and explore new ideas.
* Join the [[C:Special:MyLanguage/Commons:WMF%20support%20for%20Commons/Commons%20community%20calls|Wikimedia Commons community calls]] this week to help prioritize support for Commons which will be planned for 2025–2026. The theme will be how content should be organised on Wikimedia Commons. This is an opportunity for volunteers who work on different things to come together and talk about what matters for the future of the project. The calls will take place '''November 21, 2024, [[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 8:00 UTC|8:00 UTC]] and [[m:Special:MyLanguage/Event:Commons community discussion - 21 November 2024 16:00 UTC|16:00 UTC]]'''.
* A [[mw:Special:MyLanguage/Wikimedia_Language_and_Product_Localization/Community meetings#29 November 2024|Language community meeting]] will take place '''November 29, 16:00 UTC''' to discuss updates and technical problem-solving.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/47|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W47"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:01, 19 November 2024 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27806858 -->
== Wikipedia translation of the week: 2024-48 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Wang Su-bok]]'''<br /> <small>''([[:fa:وانگ سو بوک]]) ([[:ko:왕수복]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Wang Su-bok''' was a singer from North Korea, who was the most popular singer in Japanese-occupied Korea in 1935. She was credited as a ground-breaking female artist, whose work led the way for the modern K-pop phenomenon.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:57, 25 November 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27846897 -->
== Tech News: 2024-48 ==
<section begin="technews-2024-W48"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/48|Translations]] are available.
'''Updates for editors'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] A new version of the standard wikitext editor-mode [[mw:Special:MyLanguage/Extension:CodeMirror|syntax highlighter]] will be available as a [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] later this week. This brings many new features and bug fixes, including right-to-left support, [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Template folding|template folding]], [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|autocompletion]], and an improved search panel. You can learn more on the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|help page]].
* The 2010 wikitext editor now supports common keyboard shortcuts such <bdi lang="zxx" dir="ltr"><code>Ctrl</code>+<code>B</code></bdi> for bold and <bdi lang="zxx" dir="ltr"><code>Ctrl</code>+<code>I</code></bdi> for italics. A full [[mw:Help:Extension:WikiEditor#Keyboard shortcuts|list of all six shortcuts]] is available. Thanks to SD0001 for this improvement. [https://phabricator.wikimedia.org/T62928]
* Starting November 28, Flow/Structured Discussions pages will be automatically archived and set to read-only at the following wikis: <bdi>bswiki</bdi>{{int:comma-separator/en}}<bdi>elwiki</bdi>{{int:comma-separator/en}}<bdi>euwiki</bdi>{{int:comma-separator/en}}<bdi>fawiki</bdi>{{int:comma-separator/en}}<bdi>fiwiki</bdi>{{int:comma-separator/en}}<bdi>frwikiquote</bdi>{{int:comma-separator/en}}<bdi>frwikisource</bdi>{{int:comma-separator/en}}<bdi>frwikiversity</bdi>{{int:comma-separator/en}}<bdi>frwikivoyage</bdi>{{int:comma-separator/en}}<bdi>idwiki</bdi>{{int:comma-separator/en}}<bdi>lvwiki</bdi>{{int:comma-separator/en}}<bdi>plwiki</bdi>{{int:comma-separator/en}}<bdi>ptwiki</bdi>{{int:comma-separator/en}}<bdi>urwiki</bdi>{{int:comma-separator/en}}<bdi>viwikisource</bdi>{{int:comma-separator/en}}<bdi>zhwikisource</bdi>. This is done as part of [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|StructuredDiscussions deprecation work]]. If you need any assistance to archive your page in advance, please contact [[m:User:Trizek (WMF)|Trizek (WMF)]].
* View all {{formatnum:25}} community-submitted {{PLURAL:25|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a user creating a new AbuseFilter can now only set the filter to "protected" [[phab:T377765|if it includes a protected variable]].
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]], which can be used in JavaScript, CSS, JSON, and Lua pages, [[phab:T377663|now offers]] live autocompletion. Thanks to SD0001 for this improvement. The feature can be temporarily disabled on a page by pressing <bdi lang="zxx" dir="ltr"><code>Ctrl</code>+<code>,</code></bdi> and un-selecting "<bdi lang="en" dir="ltr">Live Autocompletion</bdi>".
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Tool-maintainers who use the Graphite system for tracking metrics, need to migrate to the newer Prometheus system. They can check [https://grafana.wikimedia.org/d/K6DEOo5Ik/grafana-graphite-datasource-utilization?orgId=1 this dashboard] and the list in the Description of the [[phab:T350592|task T350592]] to see if their tools are listed, and they should claim metrics and dashboards connected to their tools. They can then disable or migrate all existing metrics by following the instructions in the task. The Graphite service will become read-only in April. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/KLUV4IOLRYXPQFWD6WKKJUHMWE77BMSZ/]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The [[mw:Special:MyLanguage/NewPP parser report|New PreProcessor parser performance report]] has been fixed to give an accurate count for the number of Wikibase entities accessed. It had previously been resetting after 400 entities. [https://phabricator.wikimedia.org/T279069]
'''Meetings and events'''
* A [[mw:Special:MyLanguage/Wikimedia_Language_and_Product_Localization/Community meetings#29 November 2024|Language community meeting]] will take place November 29 at [https://zonestamp.toolforge.org/1732896000 16:00 UTC]. There will be presentations on topics like developing language keyboards, the creation of the Mooré Wikipedia, the language support track at [[m:Wiki Indaba|Wiki Indaba]], and a report from the Wayuunaiki community on their experiences with the Incubator and as a new community over the last 3 years. This meeting will be in English and will also have Spanish interpretation.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/48|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W48"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:42, 25 November 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27847039 -->
== Wikipedia translation of the week: 2024-49 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Storm Filomena]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Spain’s chilly blanket ESA22415247.jpeg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Storm Filomena''' was an extratropical cyclone in early January 2021 that was most notable for bringing unusually heavy snowfall to parts of Spain, with Madrid recording its heaviest snowfall in over a century, and with Portugal being hit less severely. The eighth named storm of the 2020–21 European windstorm season, Filomena formed over the Atlantic Ocean close to the Canary Islands on 7 January, subsequently taking a slow track north-eastwards towards the Iberian Peninsula and then eastwards across the Mediterranean Sea.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:48, 2 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27846897 -->
== Tech News: 2024-49 ==
<section begin="technews-2024-W49"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/49|Translations]] are available.
'''Updates for editors'''
* Two new parser functions were added this week. The <code dir="ltr"><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic words#interwikilink|#interwikilink]]<nowiki>}}</nowiki></code> function adds an [[mw:Special:MyLanguage/Help:Links#Interwiki links|interwiki link]] and the <code dir="ltr"><nowiki>{{</nowiki>[[mw:Special:MyLanguage/Help:Magic words#interlanguagelink|#interlanguagelink]]<nowiki>}}</nowiki></code> function adds an [[mw:Special:MyLanguage/Help:Links#Interlanguage links|interlanguage link]]. These parser functions are useful on wikis where namespaces conflict with interwiki prefixes. For example, links beginning with <bdi lang="zxx" dir="ltr"><code>MOS:</code></bdi> on English Wikipedia [[phab:T363538|conflict with the <code>mos</code> language code prefix of Mooré Wikipedia]].
* Starting this week, Wikimedia wikis no longer support connections using old RSA-based HTTPS certificates, specifically rsa-2048. This change is to improve security for all users. Some older, unsupported browser or smartphone devices will be unable to connect; Instead, they will display a connectivity error. See the [[wikitech:HTTPS/Browser_Recommendations|HTTPS Browser Recommendations page]] for more-detailed information. All modern operating systems and browsers are always able to reach Wikimedia projects. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/CTYEHVNSXUD3NFAAMG3BLZVTVQWJXJAH/]
* Starting December 16, Flow/Structured Discussions pages will be automatically archived and set to read-only at the following wikis: <bdi>arwiki</bdi>{{int:comma-separator/en}}<bdi>cawiki</bdi>{{int:comma-separator/en}}<bdi>frwiki</bdi>{{int:comma-separator/en}}<bdi>mediawikiwiki</bdi>{{int:comma-separator/en}}<bdi>orwiki</bdi>{{int:comma-separator/en}}<bdi>wawiki</bdi>{{int:comma-separator/en}}<bdi>wawiktionary</bdi>{{int:comma-separator/en}}<bdi>wikidatawiki</bdi>{{int:comma-separator/en}}<bdi>zhwiki</bdi>. This is done as part of [[mw:Special:MyLanguage/Structured_Discussions/Deprecation|StructuredDiscussions deprecation work]]. If you need any assistance to archive your page in advance, please contact [[m:User:Trizek (WMF)|Trizek (WMF)]]. [https://phabricator.wikimedia.org/T380910]
* This month the Chart extension was deployed to production and is now available on Commons and Testwiki. With the security review complete, pilot wiki deployment is expected to start in the first week of December. You can see a working version [[testwiki:Charts|on Testwiki]] and read [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|the November project update]] for more details.
* View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug with the "Download as PDF" system was fixed. [https://phabricator.wikimedia.org/T376438]
'''Updates for technical contributors'''
* In late February, temporary accounts will be rolled out on at least 10 large wikis. This deployment will have a significant effect on the community-maintained code. This is about Toolforge tools, bots, gadgets, and user scripts that use IP address data or that are available for logged-out users. The Trust and Safety Product team wants to identify this code, monitor it, and assist in updating it ahead of the deployment to minimize disruption to workflows. The team asks technical editors and volunteer developers to help identify such tools by adding them to [[mw:Trust and Safety Product/Temporary Accounts/For developers/Impacted tools|this list]]. In addition, review the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|updated documentation]] to learn how to adjust the tools. Join the discussions on the [[mw:Talk:Trust and Safety Product/Temporary Accounts|project talk page]] or in the [[discord:channels/221049808784326656/1227616742340034722|dedicated thread]] on the [[w:Wikipedia:Discord|Wikimedia Community Discord server (in English)]] for support and to share feedback.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/49|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W49"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:23, 2 December 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27873992 -->
== Wikipedia translation of the week: 2024-50 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Syrian literature]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Poem about Baybars page 1 from Hakawati book.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Syrian literature''' is modern fiction written or orally performed in Arabic by writers from Syria since the independence of the Syrian Arab Republic in 1946. It is part of the historically and geographically wider Arabic literature. The modern states of Syria, Lebanon, Jordan, Israel as well as the Palestinian autonomous areas only came into being in the mid-20th century. Therefore, Syrian literature has since been referred to by literary scholarship as the national literature of the Syrian Arab Republic, as well as the works created in Arabic by Syrian writers in the diaspora. This literature has been influenced by the country's political history, the literature of other Arabic-speaking countries and, especially in its early days, by French literature.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:59, 9 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27846897 -->
== Tech News: 2024-50 ==
<section begin="technews-2024-W50"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/50|Translations]] are available.
'''Weekly highlight'''
* Technical documentation contributors can find updated resources, and new ways to connect with each other and the Wikimedia Technical Documentation Team, at the [[mw:Special:MyLanguage/Documentation|Documentation hub]] on MediaWiki.org. This page links to: resources for writing and improving documentation, a new <bdi lang="zxx" dir="ltr">#wikimedia-techdocs</bdi> IRC channel on libera.chat, a listing of past and upcoming documentation events, and ways to request a documentation consultation or review. If you have any feedback or ideas for improvements to the documentation ecosystem, please [[mw:Wikimedia Technical Documentation Team#Contact us|contact the Technical Documentation Team]].
'''Updates for editors'''
[[File:Edit Check on Desktop.png|thumb|Layout change for the Edit Check feature]]
* Later this week, [[mw:Special:MyLanguage/Edit check|Edit Check]] will be relocated to a sidebar on desktop. Edit check is the feature for new editors to help them follow policies and guidelines. This layout change creates space to present people with [[mw:Edit check#1 November 2024|new Checks]] that appear ''while'' they are typing. The [[mw:Special:MyLanguage/Edit check#Reference Check A/B Test|initial results]] show newcomers encountering Edit Check are 2.2 times more likely to publish a new content edit that includes a reference and is not reverted.
* The Chart extension, which enables editors to create data visualizations, was successfully made available on MediaWiki.org and three pilot wikis (Italian, Swedish, and Hebrew Wikipedias). You can see a working examples [[testwiki:Charts|on Testwiki]] and read [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|the November project update]] for more details.
* Translators in wikis where the [[mw:Special:MyLanguage/Content translation/Section translation#Try the tool|mobile experience of Content Translation is available]], can now discover articles in Wikiproject campaigns of their interest from the "[https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&campaign=specialcx&filter-type=automatic&filter-id=collections&active-list=suggestions&from=es&to=en All collection]" category in the articles suggestion feature. Wikiproject Campaign organizers can use this feature, to help translators to discover articles of interest, by adding the <code dir=ltr><nowiki><page-collection> </page-collection></nowiki></code> tag to their campaign article list page on Meta-wiki. This will make those articles discoverable in the Content Translation tool. For more detailed information on how to use the tool and tag, please refer to [[mw:Special:MyLanguage/Translation suggestions: Topic-based & Community-defined lists/How to use the features|the step-by-step guide]]. [https://phabricator.wikimedia.org/T378958]
* The [[mw:Special:MyLanguage/Extension:Nuke|Nuke]] feature, which enables administrators to mass delete pages, now has a [[phab:T376379#10310998|multiselect filter for namespace selection]]. This enables users to select multiple specific namespaces, instead of only one or all, when fetching pages for deletion.
* The Nuke feature also now [[phab:T364225#10371365|provides links]] to the userpage of the user whose pages were deleted, and to the pages which were not selected for deletion, after page deletions are queued. This enables easier follow-up admin-actions. Thanks to Chlod and the Moderator Tools team for both of these improvements. [https://phabricator.wikimedia.org/T364225#10371365]
* The Editing Team is working on making it easier to populate citations from archive.org using the [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|Citoid]] tool, the auto-filled citation generator. They are asking communities to add two parameters preemptively, <code dir=ltr>archiveUrl</code> and <code dir=ltr>archiveDate</code>, within the TemplateData for each citation template using Citoid. You can see an [https://en.wikipedia.org/w/index.php?title=Template%3ACite_web%2Fdoc&diff=1261320172&oldid=1260788022 example of a change in a template], and a [https://global-search.toolforge.org/?namespaces=10&q=%5C%22citoid%5C%22%3A%20%5C%7B®ex=1&title= list of all relevant templates]. [https://phabricator.wikimedia.org/T374831]
* One new wiki has been created: a {{int:project-localized-name-group-wikivoyage}} in [[d:Q9240|Indonesian]] ([[voy:id:|<code>voy:id:</code>]]) [https://phabricator.wikimedia.org/T380726]
* Last week, all wikis had problems serving pages to logged-in users and some logged-out users for 30–45 minutes. This was caused by a database problem, and investigation is ongoing. [https://www.wikimediastatus.net/incidents/3g2ckc7bp6l9]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug in the [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add Link]] feature has been fixed. Previously, the list of sections which are excluded from Add Link was partially ignored in certain cases. [https://phabricator.wikimedia.org/T380455][https://phabricator.wikimedia.org/T380329]
'''Updates for technical contributors'''
* [[mw:Special:MyLanguage/Codex|Codex]], the design system for Wikimedia, now has an early-stage [[gitiles:design/codex-php|implementation in PHP]]. It is available for general use in MediaWiki extensions and Toolforge apps through [https://packagist.org/packages/wikimedia/codex Composer], with use in MediaWiki core coming soon. More information is available in [[wmdoc:design-codex-php/main/index.html|the documentation]]. Thanks to Doğu for the inspiration and many contributions to the library. [https://phabricator.wikimedia.org/T379662]
* [https://en.wikipedia.org/api/rest_v1/ Wikimedia REST API] users, such as bot operators and tool maintainers, may be affected by ongoing upgrades. On December 4, the MediaWiki Interfaces team began rerouting page/revision metadata and rendered HTML content endpoints on [[testwiki:|testwiki]] from RESTbase to comparable MediaWiki REST API endpoints. The team encourages active users of these endpoints to verify their tool's behavior on testwiki and raise any concerns on the related [[phab:T374683|Phabricator ticket]] before the end of the year, as they intend to roll out the same change across all Wikimedia projects in early January. These changes are part of the work to replace the outdated [[mw:RESTBase/deprecation|RESTBase]] system.
* The [https://wikimediafoundation.limesurvey.net/986172 2024 Developer Satisfaction Survey] is seeking the opinions of the Wikimedia developer community. Please take the survey if you have any role in developing software for the Wikimedia ecosystem. The survey is open until 3 January 2025, and has an associated [[foundation:Legal:Developer Satisfaction Survey 2024 Privacy Statement|privacy statement]].
* There is no new MediaWiki version this week. [https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar]
'''Meetings and events'''
* The next meeting in the series of [[c:Commons:WMF support for Commons/Commons community calls|Wikimedia Foundation discussions with the Wikimedia Commons community]] will take place on [[m:Event:Commons community discussion - 12 December 2024 08:00 UTC|December 12 at 8:00 UTC]] and [[m:Event:Commons community discussion - 12_December 2024 16:00 UTC|at 16:00 UTC]]. The topic of this call is new media and new contributors. Contributors from all wikis are welcome to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/50|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W50"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:16, 9 December 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27919424 -->
== Wikipedia translation of the week: 2024-51 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Mars ocean theory]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:AncientMars.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Mars ocean theory''' states that nearly a third of the surface of Mars was covered by an ocean of liquid water early in the planet's geologic history. This primordial ocean, dubbed Paleo-Ocean or Oceanus Borealis (/oʊˈsiːənəs ˌbɒriˈælɪs/ oh-SEE-ə-nəs BORR-ee-AL-iss), would have filled the basin Vastitas Borealis in the northern hemisphere, a region that lies 4–5 km (2.5–3 miles) below the mean planetary elevation, at a time period of approximately 4.1–3.8 billion years ago. Evidence for this ocean includes geographic features resembling ancient shorelines, and the chemical properties of the Martian soil and atmosphere
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:44, 16 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27933909 -->
== Tech News: 2024-51 ==
<section begin="technews-2024-W51"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2024/51|Translations]] are available.
'''Weekly highlight'''
* Interested in improving event management on your home wiki? The [[m:Special:MyLanguage/CampaignEvents|CampaignEvents extension]] offers organizers features like event registration management, event/wikiproject promotion, finding potential participants, and more - all directly on-wiki. If you are an organizer or think your community would benefit from this extension, start a discussion to enable it on your wiki today. To learn more about how to enable this extension on your wiki, visit the [[m:CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|deployment status page]].
'''Updates for editors'''
* Users of the iOS Wikipedia App in Italy and Mexico on the Italian, Spanish, and English Wikipedias, can see a [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Personalized Wikipedia Year in Review|personalized Year in Review]] with insights based on their reading and editing history.
* Users of the Android Wikipedia App in Sub-Saharan Africa and South Asia can see the new [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/Rabbit Holes|Rabbit Holes]] feature. This feature shows a suggested search term in the Search bar based on the current article being viewed, and a suggested reading list generated from the user’s last two visited articles.
* The [[m:Special:MyLanguage/Global reminder bot|global reminder bot]] is now active and running on nearly 800 wikis. This service reminds most users holding temporary rights when they are about to expire, so that they can renew should they want to. See [[m:Global reminder bot/Technical details|the technical details page]] for more information.
* The next issue of Tech News will be sent out on 13 January 2025 because of the end of year holidays. Thank you to all of the translators, and people who submitted content or feedback, this year.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was [[phab:T374988|fixed]] in the Android Wikipedia App which had caused translatable SVG images to show the wrong language when they were tapped.
'''Updates for technical contributors'''
* There is no new MediaWiki version next week. The next deployments will start on 14 January. [https://wikitech.wikimedia.org/wiki/Deployments/Yearly_calendar/2025]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2024/51|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2024-W51"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:25, 16 December 2024 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=27942374 -->
== Wikipedia translation of the week: 2024-52 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2024 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:2023 Slovenia floods]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Sava v Tacnu 4. avgusta ob 16h.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
In August 2023, major floods occurred in large part of Slovenia and neighbouring areas of Austria and Croatia due to heavy rain. Amongst others, the level of rivers Sava, Mur and Drava was exceptionally high. Several settlements and transport links in Slovene Littoral, Upper Carniola and Slovenian Carinthia were flooded. Due to the amount of rain, the streams in Idrija, Cerkno and Škofja Loka Hills overflowed.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:55, 23 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=27933909 -->
== Wikipedia translation of the week: 2025-01 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Uganda Railways Corporation]]'''<br /> <small>''([[:de:Schienenverkehr in Uganda]]) ([[:no:Uganda Railways Corporation]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:9620 mit Güterzug.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Uganda Railways Corporation''' (URC) is the parastatal railway of Uganda. It was formed after the breakup of the East African Railways Corporation (EARC) in 1977 when it took over the Ugandan part of the East African railways.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:37, 30 December 2024 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28019313 -->
== Wikipedia translation of the week: 2025-02 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Internment of Japanese Canadians]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Japanese road camp.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
From 1942 to 1949, Canada forcibly relocated and incarcerated over 22,000 Japanese Canadians—comprising over 90% of the total Japanese Canadian population—from British Columbia in the name of "national security". The majority were Canadian citizens by birth and were targeted based on their ancestry. This decision followed the events of the Japanese Empire's war in the Pacific against the Western Allies, such as the invasion of Hong Kong, the attack on Pearl Harbor in Hawaii, and the Fall of Singapore which led to the Canadian declaration of war on Japan during World War II. Similar to the actions taken against Japanese Americans in neighbouring United States, this forced relocation subjected many Japanese Canadians to government-enforced curfews and interrogations, job and property losses, and forced repatriation to Japan
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:56, 6 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28070038 -->
== Wikipedia translation of the week: 2025-03 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Christmas seals]]'''<br /> <small>''([[:no:Julemerke]]) ([[:ru:Рождественская виньетка]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:1915 US Christmas Seal.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Christmas seals''' are adhesive labels that are similar in appearance to postage stamps that are sold then affixed to mail during the Christmas season to raise funds and awareness for charitable programs. Christmas seals have become particularly associated with lung diseases such as tuberculosis, and with child welfare in general. They were first issued in Denmark beginning in 1904, with Sweden and Iceland following with issues that same year. Thereafter the use of Christmas seals proved to be popular and spread quickly around the world, with 130 countries producing their own issues.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:24, 13 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28086717 -->
== Tech News: 2025-03 ==
<section begin="technews-2025-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/03|Translations]] are available.
'''Weekly highlight'''
* The Single User Login system is being updated over the next few months. This is the system which allows users to fill out the login form on one Wikimedia site and get logged in on all others at the same time. It needs to be updated because of the ways that browsers are increasingly restricting cross-domain cookies. To accommodate these restrictions, login and account creation pages will move to a central domain, but it will still appear to the user as if they are on the originating wiki. The updated code will be enabled this week for users on test wikis. This change is planned to roll out to all users during February and March. See [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3#Deployment|the SUL3 project page]] for more details and a timeline.
'''Updates for editors'''
* On wikis with [[mw:Special:MyLanguage/Extension:PageAssessments|PageAssessments]] installed, you can now [[mw:Special:MyLanguage/Extension:PageAssessments#Search|filter search results]] to pages in a given WikiProject by using the <code dir=ltr>inproject:</code> keyword. (These wikis: {{int:project-localized-name-arwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-enwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-enwikivoyage/en}}{{int:comma-separator/en}}{{int:project-localized-name-frwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-huwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-newiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zhwiki/en}}) [https://phabricator.wikimedia.org/T378868]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia}} in [[d:Q34129|Tigre]] ([[w:tig:|<code>w:tig:</code>]]) [https://phabricator.wikimedia.org/T381377]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:35}} community-submitted {{PLURAL:35|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a bug with updating a user's edit-count after making a rollback edit, which is now fixed. [https://phabricator.wikimedia.org/T382592]
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Wikimedia REST API users, such as bot operators and tool maintainers, may be affected by ongoing upgrades. Starting the week of January 13, we will begin rerouting [[phab:T374683|some page content endpoints]] from RESTbase to the newer MediaWiki REST API endpoints for all wiki projects. This change was previously available on testwiki and should not affect existing functionality, but active users of the impacted endpoints may raise issues directly to the [[phab:project/view/6931/|MediaWiki Interfaces Team]] in Phabricator if they arise.
* Toolforge tool maintainers can now share their feedback on Toolforge UI, an initiative to provide a web platform that allows creating and managing Toolforge tools through a graphic interface, in addition to existing command-line workflows. This project aims to streamline active maintainers’ tasks, as well as make registration and deployment processes more accessible for new tool creators. The initiative is still at a very early stage, and the Cloud Services team is in the process of collecting feedback from the Toolforge community to help shape the solution to their needs. [[wikitech:Wikimedia Cloud Services team/EnhancementProposals/Toolforge UI|Read more and share your thoughts about Toolforge UI]].
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] For tool and library developers who use the OAuth system: The identity endpoint used for [[mw:Special:MyLanguage/OAuth/For Developers#Identifying the user|OAuth 1]] and [[mw:Special:MyLanguage/OAuth/For Developers#Identifying the user 2|OAuth 2]] returned a JSON object with an integer in its <code>sub</code> field, which was incorrect (the field must always be a string). This has been fixed; the fix will be deployed to Wikimedia wikis on the week of January 13. [https://phabricator.wikimedia.org/T382139]
* Many wikis currently use [[:mw:Parsoid/Parser Unification/Cite CSS|Cite CSS]] to render custom footnote markers in Parsoid output. Starting January 20 these rules will be disabled, but the developers ask you to ''not'' clean up your <bdi lang="en" dir="ltr">[[MediaWiki:Common.css]]</bdi> until February 20 to avoid issues during the migration. Your wikis might experience some small changes to footnote markers in Visual Editor and when using experimental Parsoid read mode, but if there are changes these are expected to bring the rendering in line with the legacy parser output. [https://phabricator.wikimedia.org/T370027]
'''Meetings and events'''
* The next meeting in the series of [[c:Special:MyLanguage/Commons:WMF support for Commons/Commons community calls|Wikimedia Foundation Community Conversations with the Wikimedia Commons community]] will take place on [[m:Special:MyLanguage/Event:Commons community discussion - 15 January 2025 08:00 UTC|January 15 at 8:00 UTC]] and [[m:Special:MyLanguage/Event:Commons community discussion - 15 January 2025 16:00 UTC|at 16:00 UTC]]. The topic of this call is defining the priorities in tool investment for Commons. Contributors from all wikis, especially users who are maintaining tools for Commons, are welcome to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:42, 14 January 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28048614 -->
== Wikipedia translation of the week: 2025-04 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:2010 Nagorno-Karabakh clashes]]'''<br /> <small>''([[:it:Scontri del Nagorno Karabakh del 2010]]) ([[:tr:2010 Dağlık Karabağ çatışmaları]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''2010 Nahorno karabakh war''' were a series of exchanges of gunfire that took place on February 18 on the line of contact dividing Azerbaijani and the Karabakh Armenian military forces. Azerbaijan accused the Armenian forces of firing on the Azerbaijani positions near Tap Qaraqoyunlu, Qızıloba, Qapanlı, Yusifcanlı and Cavahirli villages, as well as in uplands of Agdam Rayon with small arms fire including snipers. As a result, three Azerbaijani soldiers were killed and one wounded.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:20, 20 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28099770 -->
== Tech News: 2025-04 ==
<section begin="technews-2025-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/04|Translations]] are available.
'''Updates for editors'''
* Administrators can mass-delete multiple pages created by a user or IP address using [[mw:Special:MyLanguage/Extension:Nuke|Extension:Nuke]]. It previously only allowed deletion of pages created in the last 30 days. It can now delete pages from the last 90 days, provided it is targeting a specific user or IP address. [https://phabricator.wikimedia.org/T380846]
* On [[phab:P72148|wikis that use]] the [[mw:Special:MyLanguage/Help:Patrolled edits|Patrolled edits]] feature, when the rollback feature is used to revert an unpatrolled page revision, that revision will now be marked as "manually patrolled" instead of "autopatrolled", which is more accurate. Some editors that use [[mw:Special:MyLanguage/Help:New filters for edit review/Filtering|filters]] on Recent Changes may need to update their filter settings. [https://phabricator.wikimedia.org/T302140]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Visual Editor's "Insert link" feature did not always suggest existing pages properly when an editor started typing, which has now been [[phab:T383497|fixed]].
'''Updates for technical contributors'''
* The Structured Discussion extension (also known as Flow) is being progressively removed from the wikis. This extension is unmaintained and causes issues. It will be replaced by [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]], which is used on any regular talk page. [[mw:Special:MyLanguage/Structured Discussions/Deprecation#Deprecation timeline|The last group of wikis]] ({{int:project-localized-name-cawikiquote/en}}{{int:comma-separator/en}}{{int:project-localized-name-fiwikimedia/en}}{{int:comma-separator/en}}{{int:project-localized-name-gomwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kabwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ptwikibooks/en}}{{int:comma-separator/en}}{{int:project-localized-name-sewikimedia/en}}) will soon be contacted. If you have questions about this process, please ping [[m:User:Trizek (WMF)|Trizek (WMF)]] at your wiki. [https://phabricator.wikimedia.org/T380912]
* The latest quarterly [[mw:Technical_Community_Newsletter/2025/January|Technical Community Newsletter]] is now available. This edition includes: updates about services from the Data Platform Engineering teams, information about Codex from the Design System team, and more.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:37, 21 January 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28129769 -->
== Wikipedia translation of the week: 2025-05 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Jinnah's birthday]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Yorkstatue.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Jinnah's Birthday''', officially Quaid-e-Azam Day and sometimes known as Quaid Day, is a public holiday in Pakistan observed annually on 25 December to celebrate the birthday of the founder of Pakistan, Muhammad Ali Jinnah, known as Quaid-i-Azam ("Great Leader"). A major holiday, commemorations for Jinnah began during his lifetime in 1942, and have continued ever since. The event is primarily observed by the government and the citizens of the country where the national flag is hoisted at major architectural structures such as private and public buildings, particularly at the top of Quaid-e-Azam House in Karachi.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:30, 27 January 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28156501 -->
== Tech News: 2025-05 ==
<section begin="technews-2025-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/05|Translations]] are available.
'''Weekly highlight'''
* Patrollers and admins - what information or context about edits or users could help you to make patroller or admin decisions more quickly or easily? The Wikimedia Foundation wants to hear from you to help guide its upcoming annual plan. Please consider sharing your thoughts on this and [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Product & Technology OKRs|13 other questions]] to shape the technical direction for next year.
'''Updates for editors'''
* iOS Wikipedia App users worldwide can now access a [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Personalized Wikipedia Year in Review/How your data is used|personalized Year in Review]] feature, which provides insights based on their reading and editing history on Wikipedia. This project is part of a broader effort to help welcome new readers as they discover and interact with encyclopedic content.
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] Edit patrollers now have a new feature available that can highlight potentially problematic new pages. When a page is created with the same title as a page which was previously deleted, a tag ('Recreated') will now be added, which users can filter for in [[{{#special:RecentChanges}}]] and [[{{#special:NewPages}}]]. [https://phabricator.wikimedia.org/T56145]
* Later this week, there will be a new warning for editors if they attempt to create a redirect that links to another redirect (a [[mw:Special:MyLanguage/Help:Redirects#Double redirects|double redirect]]). The feature will recommend that they link directly to the second redirect's target page. Thanks to the user SomeRandomDeveloper for this improvement. [https://phabricator.wikimedia.org/T326056]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Wikimedia wikis allow [[w:en:WebAuthn|WebAuthn]]-based second factor checks (such as hardware tokens) during login, but the feature is [[m:Community Wishlist Survey 2023/Miscellaneous/Fix security key (WebAuthn) support|fragile]] and has very few users. The MediaWiki Platform team is temporarily disabling adding new WebAuthn keys, to avoid interfering with the rollout of [[mw:MediaWiki Platform Team/SUL3|SUL3]] (single user login version 3). Existing keys are unaffected. [https://phabricator.wikimedia.org/T378402]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* For developers that use the [[wikitech:Data Platform/Data Lake/Edits/MediaWiki history dumps|MediaWiki History dumps]]: The Data Platform Engineering team has added a couple of new fields to these dumps, to support the [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|Temporary Accounts]] initiative. If you maintain software that reads those dumps, please review your code and the updated documentation, since the order of the fields in the row will change. There will also be one field rename: in the <bdi lang="zxx" dir="ltr"><code>mediawiki_user_history</code></bdi> dump, the <bdi lang="zxx" dir="ltr"><code>anonymous</code></bdi> field will be renamed to <bdi lang="zxx" dir="ltr"><code>is_anonymous</code></bdi>. The changes will take effect with the next release of the dumps in February. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LKMFDS62TXGDN6L56F4ABXYLN7CSCQDI/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:15, 27 January 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28149374 -->
== Wikipedia translation of the week: 2025-06 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:French conquest of Corsica]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Bataille de Ponte Novu.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''French conquest of Corsica''' was a successful expedition by French forces of the Kingdom of France under Comte de Vaux, against Corsican forces under Pasquale Paoli of the Corsican Republic. The expedition was launched in May 1768, in the aftermath of the Seven Years' War.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:20, 3 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28200320 -->
== Tech News: 2025-06 ==
<section begin="technews-2025-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/06|Translations]] are available.
'''Updates for editors'''
* Editors who use the "Special characters" editing-toolbar menu can now see the 32 special characters you have used most recently, across editing sessions on that wiki. This change should help make it easier to find the characters you use most often. The feature is in both the 2010 wikitext editor and VisualEditor. [https://phabricator.wikimedia.org/T110722]
* Editors using the 2010 wikitext editor can now create sublists with correct indentation by selecting the line(s) you want to indent and then clicking the toolbar buttons.[https://phabricator.wikimedia.org/T380438] You can now also insert <code><nowiki><code></nowiki></code> tags using a new toolbar button.[https://phabricator.wikimedia.org/T383010] Thanks to user stjn for these improvements.
* Help is needed to ensure the [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|citation generator]] works properly on each wiki.
** (1) Administrators should update the local versions of the page <code dir=ltr>MediaWiki:Citoid-template-type-map.json</code> to include entries for <code dir=ltr>preprint</code>, <code dir=ltr>standard</code>, and <code dir=ltr>dataset</code>; Here are example diffs to replicate [https://en.wikipedia.org/w/index.php?title=MediaWiki%3ACitoid-template-type-map.json&diff=1189164774&oldid=1165783565 for 'preprint'] and [https://en.wikipedia.org/w/index.php?title=MediaWiki%3ACitoid-template-type-map.json&diff=1270832208&oldid=1270828390 for 'standard' and 'dataset'].
** (2.1) If the citoid map in the citation template used for these types of references is missing, [[mediawikiwiki:Citoid/Enabling Citoid on your wiki#Step 2.a: Create a 'citoid' maps value for each citation template|one will need to be added]]. (2.2) If the citoid map does exist, the TemplateData will need to be updated to include new field names. Here are example updates [https://en.wikipedia.org/w/index.php?title=Template%3ACitation%2Fdoc&diff=1270829051&oldid=1262470053 for 'preprint'] and [https://en.wikipedia.org/w/index.php?title=Template%3ACitation%2Fdoc&diff=1270831369&oldid=1270829480 for 'standard' and 'dataset']. The new fields that may need to be supported are <code dir=ltr>archiveID</code>, <code dir=ltr>identifier</code>, <code dir=ltr>repository</code>, <code dir=ltr>organization</code>, <code dir=ltr>repositoryLocation</code>, <code dir=ltr>committee</code>, and <code dir=ltr>versionNumber</code>. [https://phabricator.wikimedia.org/T383666]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q15637215|Central Kanuri]] ([[w:knc:|<code>w:knc:</code>]]) [https://phabricator.wikimedia.org/T385181]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the [[mediawikiwiki:Special:MyLanguage/Help:Extension:Wikisource/Wikimedia OCR|OCR (optical character recognition) tool]] used for Wikisource now supports a new language, Church Slavonic. [https://phabricator.wikimedia.org/T384782]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:09, 4 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28203495 -->
== Wikipedia translation of the week: 2025-07 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Assassination of Spencer Perceval]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:PercevalShooting.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
On 11 May 1812, at about 5:15 pm, Spencer Perceval, the prime minister of the United Kingdom of Great Britain and Ireland, was shot dead in the lobby of the House of Commons by John Bellingham, a Liverpool merchant with a grievance against the government. Bellingham was detained; four days after the murder, he was tried, convicted and sentenced to death. He was hanged at Newgate Prison on 18 May, one week after the assassination and one month before the start of the War of 1812. Perceval remains the sole British prime minister to have been assassinated.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 10 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28200320 -->
== Tech News: 2025-07 ==
<section begin="technews-2025-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/07|Translations]] are available.
'''Weekly highlight'''
* The Product and Technology Advisory Council (PTAC) has published [[m:Special:MyLanguage/Product and Technology Advisory Council/February 2025 draft PTAC recommendation for feedback|a draft of their recommendations]] for the Wikimedia Foundation's Product and Technology department. They have recommended focusing on [[m:Special:MyLanguage/Product and Technology Advisory Council/February 2025 draft PTAC recommendation for feedback/Mobile experiences|mobile experiences]], particularly contributions. They request community [[m:Talk:Product and Technology Advisory Council/February 2025 draft PTAC recommendation for feedback|feedback at the talk page]] by 21 February.
'''Updates for editors'''
* The "Special pages" portlet link will be moved from the "Toolbox" into the "Navigation" section of the main menu's sidebar by default. This change is because the Toolbox is intended for tools relating to the current page, not tools relating to the site, so the link will be more logically and consistently located. To modify this behavior and update CSS styling, administrators can follow the instructions at [[phab:T385346|T385346]]. [https://phabricator.wikimedia.org/T333211]
* As part of this year's work around improving the ways readers discover content on the wikis, the Web team will be running an experiment with a small number of readers that displays some suggestions for related or interesting articles within the search bar. Please check out [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments#Experiment 1: Display article recommendations in more prominent locations, search|the project page]] for more information.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Template editors who use TemplateStyles can now customize output for users with specific accessibility needs by using accessibility related media queries (<code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion prefers-reduced-motion]</code>, <code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-transparency prefers-reduced-transparency]</code>, <code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast prefers-contrast]</code>, and <code dir=ltr>[https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors forced-colors]</code>). Thanks to user Bawolff for these improvements. [https://phabricator.wikimedia.org/T384175]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:22}} community-submitted {{PLURAL:22|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the global blocks log will now be shown directly on the {{#special:CentralAuth}} page, similarly to global locks, to simplify the workflows for stewards. [https://phabricator.wikimedia.org/T377024]
'''Updates for technical contributors'''
* Wikidata [[d:Special:MyLanguage/Help:Default values for labels and aliases|now supports a special language as a "default for all languages"]] for labels and aliases. This is to avoid excessive duplication of the same information across many languages. If your Wikidata queries use labels, you may need to update them as some existing labels are getting removed. [https://phabricator.wikimedia.org/T312511]
* The function <code dir="ltr">getDescription</code> was invoked on every Wiki page read and accounts for ~2.5% of a page's total load time. The calculated value will now be cached, reducing load on Wikimedia servers. [https://phabricator.wikimedia.org/T383660]
* As part of the RESTBase deprecation [[mw:RESTBase/deprecation|effort]], the <code dir="ltr">/page/related</code> endpoint has been blocked as of February 6, 2025, and will be removed soon. This timeline was chosen to align with the deprecation schedules for older Android and iOS versions. The stable alternative is the "<code dir="ltr">morelike</code>" action API in MediaWiki, and [[gerrit:c/mediawiki/services/mobileapps/+/982154/13/pagelib/src/transform/FooterReadMore.js|a migration example]] is available. The MediaWiki Interfaces team [[phab:T376297|can be contacted]] for any questions. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/GFC2IJO7L4BWO3YTM7C5HF4MCCBE2RJ2/]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/January|Language and Internationalization newsletter]] is available. It includes: Updates about the "Contribute" menu; details on some of the newest language editions of Wikipedia; details on new languages supported by the MediaWiki interface; updates on the Community-defined lists feature; and more.
* The latest [[mw:Extension:Chart/Project/Updates#January 2025: Better visibility into charts and tabular data usage|Chart Project newsletter]] is available. It includes updates on the progress towards bringing better visibility into global charts usage and support for categorizing pages in the Data namespace on Commons.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:12, 11 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28231022 -->
== Wikipedia translation of the week: 2025-08 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:2010 Malagasy constitutional referendum]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
A constitutional referendum was held in Madagascar on 17 November 2010, in which voters approved a proposal for the state's fourth Constitution. The Malagasy people were asked to answer "Yes" or "No" to the proposed new constitution, which was considered to help consolidate Andry Rajoelina's grip on power. At the time of the referendum, Rajoelina headed the governing Highest Transitional Authority (HAT), an interim junta established following the military-backed coup d'état against then President Marc Ravalomanana in March 2009.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:21, 17 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28245290 -->
== Tech News: 2025-08 ==
<section begin="technews-2025-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/08|Translations]] are available.
'''Weekly highlight'''
* Communities using growth tools can now showcase one event on the <code>{{#special:Homepage}}</code> for newcomers. This feature will help newcomers to be informed about editing activities they can participate in. Administrators can create a new event to showcase at <code>{{#special:CommunityConfiguration}}</code>. To learn more about this feature, please read [[diffblog:2025/02/12/community-updates-module-connecting-newcomers-to-your-initiatives/|the Diff post]], have a look [[mw:Special:MyLanguage/Help:Growth/Tools/Community updates module|at the documentation]], or contact [[mw:Talk:Growth|the Growth team]].
'''Updates for editors'''
[[File:Page Frame Features on desktop.png|thumb|Highlighted talk pages improvements]]
* Starting next week, talk pages at these wikis – {{int:project-localized-name-eswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-itwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jawiki/en}} – will get [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|a new design]]. This change was extensively tested as a Beta feature and is the last step of [[mw:Special:MyLanguage/Talk pages project/Feature summary|talk pages improvements]]. [https://phabricator.wikimedia.org/T379102]
* You can now navigate to view a redirect page directly from its action pages, such as the history page. Previously, you were forced to first go to the redirect target. This change should help editors who work with redirects a lot. Thanks to user stjn for this improvement. [https://phabricator.wikimedia.org/T5324]
* When a Cite reference is reused many times, wikis currently show either numbers like "1.23" or localized alphabetic markers like "a b c" in the reference list. Previously, if there were so many reuses that the alphabetic markers were all used, [[MediaWiki:Cite error references no backlink label|an error message]] was displayed. As part of the work to [[phab:T383036|modernize Cite customization]], these errors will no longer be shown and instead the backlinks will fall back to showing numeric markers like "1.23" once the alphabetic markers are all used.
* The log entries for each change to an editor's user-groups are now clearer by specifying exactly what has changed, instead of the plain before and after listings. Translators can [[phab:T369466|help to update the localized versions]]. Thanks to user Msz2001 for these improvements.
* A new filter has been added to the [[{{#special:Nuke}}]] tool, which allows administrators to mass delete pages, to enable users to filter for pages in a range of page sizes (in bytes). This allows, for example, deleting pages only of a certain size or below. [https://phabricator.wikimedia.org/T378488]
* Non-administrators can now check which pages are able to be deleted using the [[{{#special:Nuke}}]] tool. Thanks to user MolecularPilot for this and the previous improvements. [https://phabricator.wikimedia.org/T376378]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:25}} community-submitted {{PLURAL:25|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed in the configuration for the AV1 video file format, which enables these files to play again. [https://phabricator.wikimedia.org/T382193]
'''Updates for technical contributors'''
* Parsoid Read Views is going to be rolling out to most Wiktionaries over the next few weeks, following the successful transition of Wikivoyage to Parsoid Read Views last year. For more information, see the [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parsoid/Parser Unification]] project page. [https://phabricator.wikimedia.org/T385923][https://phabricator.wikimedia.org/T371640]
* Developers of tools that run on-wiki should note that <code dir=ltr>mw.Uri</code> is deprecated. Tools requiring <code dir=ltr>mw.Uri</code> must explicitly declare <code dir=ltr>mediawiki.Uri</code> as a ResourceLoader dependency, and should migrate to the browser native <code dir=ltr>URL</code> API soon. [https://phabricator.wikimedia.org/T384515]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:17, 17 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28275610 -->
== Wikipedia translation of the week: 2025-09 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cooler Heads Coalition]]'''<br /> <small>''([[:de:Cooler Heads Coalition]]) ([[:fr:Cooler Heads Coalition]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''Cooler Heads Coalition''' is a politically conservative "informal and ad-hoc group" in the United States, financed and operated by the Competitive Enterprise Institute. The group, which rejects the scientific consensus on climate change, made efforts to stop the government from addressing climate change.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:23, 24 February 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28300238 -->
== Tech News: 2025-09 ==
<section begin="technews-2025-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/09|Translations]] are available.
'''Updates for editors'''
* Administrators can now customize how the [[m:Special:MyLanguage/User language|Babel feature]] creates categories using [[{{#special:CommunityConfiguration/Babel}}]]. They can rename language categories, choose whether they should be auto-created, and adjust other settings. [https://phabricator.wikimedia.org/T374348]
* The <bdi lang="en" dir="ltr">[https://www.wikimedia.org/ wikimedia.org]</bdi> portal has been updated – and is receiving some ongoing improvements – to modernize and improve the accessibility of our portal pages. It now has better support for mobile layouts, updated wording and links, and better language support. Additionally, all of the Wikimedia project portals, such as <bdi lang="en" dir="ltr">[https://wikibooks.org wikibooks.org]</bdi>, now support dark mode when a reader is using that system setting. [https://phabricator.wikimedia.org/T373204][https://phabricator.wikimedia.org/T368221][https://meta.wikimedia.org/wiki/Project_portals]
* One new wiki has been created: a {{int:project-localized-name-group-wiktionary/en}} in [[d:Q33965|Santali]] ([[wikt:sat:|<code>wikt:sat:</code>]]) [https://phabricator.wikimedia.org/T386619]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that prevented clicking on search results in the web-interface for some Firefox for Android phone configurations. [https://phabricator.wikimedia.org/T381289]
'''Meetings and events'''
* The next Language Community Meeting is happening soon, February 28th at [https://zonestamp.toolforge.org/1740751200 14:00 UTC]. This week's meeting will cover: highlights and technical updates on keyboard and tools for the Sámi languages, Translatewiki.net contributions from the Bahasa Lampung community in Indonesia, and technical Q&A. If you'd like to join, simply [[mw:Wikimedia Language and Product Localization/Community meetings#28 February 2025|sign up on the wiki page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:42, 25 February 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28296129 -->
== Wikipedia translation of the week: 2025-10 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:pt:Transmissor de Ondas]]'''<br /> <small>''([[:en:Wave Transmitter]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Esq eletr transm ondas color.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Transmissor de Ondas''' é um equipamento precursor do rádio, desenvolvido por Roberto Landell de Moura na década de 1890, capaz de transmitir áudio via ondas eletromagnéticas, com sua primeira demonstração pública documentada tendo ocorrido no dia 16 de julho de 1899.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:49, 3 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28317097 -->
== Tech News: 2025-10 ==
<section begin="technews-2025-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/10|Translations]] are available.
'''Updates for editors'''
* All logged-in editors using the mobile view can now edit a full page. The "{{int:Minerva-page-actions-editfull}}" link is accessible from the "{{int:minerva-page-actions-overflow}}" menu in the toolbar. This was previously only available to editors using the [[mw:Special:MyLanguage/Reading/Web/Advanced mobile contributions|Advanced mobile contributions]] setting. [https://phabricator.wikimedia.org/T387180]
* Interface administrators can now help to remove the deprecated Cite CSS code matching "<code dir="ltr">mw-ref</code>" from their local <bdi lang="en" dir="ltr">[[MediaWiki:Common.css]]</bdi>. The list of wikis in need of cleanup, and the code to remove, [https://global-search.toolforge.org/?q=mw-ref%5B%5E-a-z%5D®ex=1&namespaces=8&title=.*css can be found with this global search] and in [https://ace.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=145662#L-139--L-144 this example], and you can learn more about how to help on the [[mw:Parsoid/Parser Unification/Cite CSS|CSS migration project page]]. The Cite footnote markers ("<code dir="ltr">[1]</code>") are now rendered by [[mw:Special:MyLanguage/Parsoid|Parsoid]], and the deprecated CSS is no longer needed. The CSS for backlinks ("<code dir="ltr">mw:referencedBy</code>") should remain in place for now. This cleanup is expected to cause no visible changes for readers. Please help to remove this code before March 20, after which the development team will do it for you.
* When editors embed a file (e.g. <code><nowiki>[[File:MediaWiki.png]]</nowiki></code>) on a page that is protected with cascading protection, the software will no longer restrict edits to the file description page, only to new file uploads.[https://phabricator.wikimedia.org/T24521] In contrast, transcluding a file description page (e.g. <code><nowiki>{{:File:MediaWiki.png}}</nowiki></code>) will now restrict edits to the page.[https://phabricator.wikimedia.org/T62109]
* When editors revert a file to an earlier version it will now require the same permissions as ordinarily uploading a new version of the file. The software now checks for 'reupload' or 'reupload-own' rights,[https://phabricator.wikimedia.org/T304474] and respects cascading protection.[https://phabricator.wikimedia.org/T140010]
* When administrators are listing pages for deletion with the Nuke tool, they can now also list associated talk pages and redirects for deletion, alongside pages created by the target, rather than needing to manually delete these pages afterwards. [https://phabricator.wikimedia.org/T95797]
* The [[m:Special:MyLanguage/Tech/News/2025/03|previously noted]] update to Single User Login, which will accommodate browser restrictions on cross-domain cookies by moving login and account creation to a central domain, will now roll out to all users during March and April. The team plans to enable it for all new account creation on [[wikitech:Deployments/Train#Tuesday|Group0]] wikis this week. See [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3#Deployment|the SUL3 project page]] for more details and an updated timeline.
* Since last week there has been a bug that shows some interface icons as black squares until the page has fully loaded. It will be fixed this week. [https://phabricator.wikimedia.org/T387351]
* One new wiki has been created: a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q2044560|Sylheti]] ([[w:syl:|<code>w:syl:</code>]]) [https://phabricator.wikimedia.org/T386441]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed with loading images in very old versions of the Firefox browser on mobile. [https://phabricator.wikimedia.org/T386400]
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.19|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 02:31, 4 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28334563 -->
== Wikipedia translation of the week: 2025-11 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Smoky (mascotte olimpica)]]'''<br /> <small>''([[:en:Smoky (Olympic mascot)]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Smoky 1932 Olympic Village Mascot.webp|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Smoky''' (Los Angeles, 1931 o 1932 - Los Angeles, aprile 1934), occasionalmente scritto Smokey, è stato un cane che divenne la mascotte del villaggio olimpico estivo del 1932 e, successivamente, dell'evento generale. Pur non essendo oggi riconosciuto dal CIO, è stato, seppur non in modo ufficiale, la prima mascotte olimpica dei Giochi, oltre che a essere attualmente l'unica a essere stata un animale vero. Le successive edizioni non ebbero mascotte, dovendo aspettare i X Giochi olimpici invernali di Grenoble nel 1968 per ritrovarne una ufficialmente riconosciuta, lo sciatore stilizzato Schuss, allora non considerato ufficiale ma successivamente riconosciuto come tale.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:50, 10 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28317097 -->
== Tech News: 2025-11 ==
<section begin="technews-2025-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/11|Translations]] are available.
'''Updates for editors'''
* Editors who use password managers at multiple wikis may notice changes in the future. The way that our wikis provide information to password managers about reusing passwords across domains has recently been updated, so some password managers might now offer you login credentials that you saved for a different Wikimedia site. Some password managers already did this, and are now doing it for more Wikimedia domains. This is part of the [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3|SUL3 project]] which aims to improve how our unified login works, and to keep it compatible with ongoing changes to the web-browsers we use. [https://phabricator.wikimedia.org/T385520][https://phabricator.wikimedia.org/T384844]
* The Wikipedia Apps Team is inviting interested users to help improve Wikipedia’s offline and limited internet use. After discussions in [[m:Afrika Baraza|Afrika Baraza]] and the last [[m:Special:MyLanguage/ESEAP Hub/Meetings|ESEAP call]], key challenges like search, editing, and offline access are being explored, with upcoming focus groups to dive deeper into these topics. All languages are welcome, and interpretation will be available. Want to share your thoughts? [[mw:Special:MyLanguage/Wikimedia Apps/Improving Wikipedia Mobile Apps for Offline & Limited Internet Use|Join the discussion]] or email <bdi lang="en" dir="ltr">aramadan@wikimedia.org</bdi>!
* All wikis will be read-only for a few minutes on March 19. This is planned at [https://zonestamp.toolforge.org/1742392800 14:00 UTC]. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.20|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/33|Growth newsletter]] is available. It includes: the launch of the Community Updates module, the most recent changes in Community Configuration, and the upcoming test of in-article suggestions for first-time editors.
* An old API that was previously used in the Android Wikipedia app is being removed at the end of March. There are no current software uses, but users of the app with a version that is older than 6 months by the time of removal (2025-03-31), will no longer have access to the Suggested Edits feature, until they update their app. You can [[diffblog:2025/02/24/sunset-of-wikimedia-recommendation-api/|read more details about this change]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:10, 10 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28372257 -->
== Wikipedia translation of the week: 2025-12 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Amazonas, o maior rio do mundo]]'''<br /> <small>''([[:pt:Amazonas, o maior rio do mundo]]) ([[:es:Amazonas, o maior rio do mundo]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Frame A from Amazonas, o maior rio do mundo.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''''Amazonas, o maior rio do mundo''''' (lit. 'Amazon: The Greatest River in the World') is a 1922 Brazilian silent documentary film produced in 1918 by Silvino Santos. It is a black-and-white film that portrays life in the Amazon rainforest. Completed in 1920, it is considered one of the oldest cinematic records of the Amazon. It was presumed lost in 1931 and only rediscovered in 2023 at the Czech Film Archive.
Silvino Santos produced the work over three years using sophisticated cinematic techniques, which led it to be deemed of "immense artistic value" by Le Monde. It has also been described as the "Holy Grail of Brazilian silent cinema" by The Guardian.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:57, 17 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28392163 -->
== Tech News: 2025-12 ==
<section begin="technews-2025-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/12|Translations]] are available.
'''Weekly highlight'''
* Twice a year, around the equinoxes, the Wikimedia Foundation's Site Reliability Engineering (SRE) team performs [[m:Special:MyLanguage/Tech/Server switch|a datacenter server switchover]], redirecting all traffic from one primary server to its backup. This provides reliability in case of a crisis, as we can always fall back on the other datacenter. [http://listen.hatnote.com/ Thanks to the Listen to Wikipedia] tool, you can hear the switchover take place: Before it begins, you'll hear the steady stream of edits; Then, as the system enters a brief read-only phase, the sound stops for a couple of minutes, before resuming after the switchover. You can [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|read more about the background and details of this process on the Diff blog]]. If you want to keep an ear out for the next server switchover, listen to the wikis on [https://zonestamp.toolforge.org/1742392800 March 19 at 14:00 UTC].
'''Updates for editors'''
* The [https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&filter-type=automatic&filter-id=previous-edits&active-list=suggestions&from=en&to=es improved Content Translation tool dashboard] is now available in [[phab:T387820|10 Wikipedias]] and will be available for all Wikipedias [[phab:T387821|soon]]. With [[mw:Special:MyLanguage/Content translation#Improved translation experience|the unified dashboard]], desktop users can now: Translate new sections of an article; Discover and access topic-based [https://ig.m.wikipedia.org/w/index.php?title=Special:ContentTranslation&active-list=suggestions&from=en&to=ig&filter-type=automatic&filter-id=previous-edits article suggestion filters] (initially available only for mobile device users); Discover and access the [[mw:Special:MyLanguage/Translation suggestions: Topic-based & Community-defined lists|Community-defined lists]] filter, also known as "Collections", from wiki-projects and campaigns.
* On Wikimedia Commons, a [[c:Commons:WMF support for Commons/Upload Wizard Improvements#Improve category selection|new system to select the appropriate file categories]] has been introduced: if a category has one or more subcategories, users will be able to click on an arrow that will open the subcategories directly within the form, and choose the correct one. The parent category name will always be shown on top, and it will always be possible to come back to it. This should decrease the amount of work for volunteers in fixing/creating new categories. The change is also available on mobile. These changes are part of planned improvements to the UploadWizard.
* The Community Tech team is seeking wikis to join a pilot for the [[m:Special:MyLanguage/Community Wishlist Survey 2023/Multiblocks|Multiblocks]] feature and a refreshed Special:Block page in late March. Multiblocks enables administrators to impose multiple different types of blocks on the same user at the same time. If you are an admin or steward and would like us to discuss joining the pilot with your community, please leave a message on the [[m:Talk:Community Wishlist Survey 2023/Multiblocks|project talk page]].
* Starting March 25, the Editing team will test a new feature for Edit Check at [[phab:T384372|12 Wikipedias]]: [[mw:Special:MyLanguage/Help:Edit check#Multi-check|Multi-Check]]. Half of the newcomers on these wikis will see all [[mw:Special:MyLanguage/Help:Edit check#ref|Reference Checks]] during their edit session, while the other half will continue seeing only one. The goal of this test is to see if users are confused or discouraged when shown multiple Reference Checks (when relevant) within a single editing session. At these wikis, the tags used on edits that show References Check will be simplified, as multiple tags could be shown within a single edit. Changes to the tags are documented [[phab:T373949|on Phabricator]]. [https://phabricator.wikimedia.org/T379131]
* The [[m:Special:MyLanguage/Global reminder bot|Global reminder bot]], which is a service for notifying users that their temporary user-rights are about to expire, now supports using the localized name of the user-rights group in the message heading. Translators can see the [[m:Global reminder bot/Translation|listing of existing translations and documentation]] to check if their language needs updating or creation.
* The [[Special:GlobalPreferences|GlobalPreferences]] gender setting, which is used for how the software should refer to you in interface messages, now works as expected by overriding the local defaults. [https://phabricator.wikimedia.org/T386584]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:26}} community-submitted {{PLURAL:26|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Wikipedia App for Android had a bug fixed for when a user is browsing and searching in multiple languages. [https://phabricator.wikimedia.org/T379777]
'''Updates for technical contributors'''
* Later this week, the way that Codex styles are loaded will be changing. There is a small risk that this may result in unstyled interface message boxes on certain pages. User generated content (e.g. templates) is not impacted. Gadgets may be impacted. If you see any issues [[phab:T388847|please report them]]. See the linked task for details, screenshots, and documentation on how to fix any affected gadgets.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.21|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:48, 17 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28412594 -->
== Wikipedia translation of the week: 2025-13 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ali of the Eretnids]]'''<br /> <small>''([[:tr:Alaaddin Ali Bey]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Ala al-Din Ali''' (January 1353 – August 1380) was the third Sultan of the Eretnids ruling from 1366 until his death. He inherited the throne at a very early age and was removed from administrative matters. He was characterized as particularly keen on personal pleasures, which later discredited his authority. During his rule, emirs under the Eretnids enjoyed considerable autonomy, and the state continued to shrink as neighboring powers captured several towns.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:59, 24 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28433698 -->
== Tech News: 2025-13 ==
<section begin="technews-2025-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/13|Translations]] are available.
'''Weekly highlight'''
* The Wikimedia Foundation is seeking your feedback on the [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Product & Technology OKRs|drafts of the objectives and key results that will shape the Foundation's Product and Technology priorities]] for the next fiscal year (starting in July). The objectives are broad high-level areas, and the key-results are measurable ways to track the success of their objectives. Please share your feedback on the talkpage, in any language, ideally before the end of April.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] will be released to multiple wikis (see [[m:Special:MyLanguage/CampaignEvents/Deployment status#Global Deployment Plan|deployment plan]] for details) in April 2025, and the team has begun the process of engaging communities on the identified wikis. The extension provides tools to organize, manage, and promote collaborative activities (like events, edit-a-thons, and WikiProjects) on the wikis. The extension has three tools: [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Collaboration List]], and [[m:Special:MyLanguage/Campaigns/Foundation Product Team/Invitation list|Invitation Lists]]. It is currently on 13 Wikipedias, including English Wikipedia, French Wikipedia, and Spanish Wikipedia, as well as Wikidata. Questions or requests can be directed to the [[mw:Help talk:Extension:CampaignEvents|extension talk page]] or in Phabricator (with <bdi lang="en" dir="ltr" style="white-space: nowrap;">#campaigns-product-team</bdi> tag).
* Starting the week of March 31st, wikis will be able to set which user groups can view private registrants in [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], as part of the [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents]] extension. By default, event organizers and the local wiki admins will be able to see private registrants. This is a change from the current behavior, in which only event organizers can see private registrants. Wikis can change the default setup by [[m:Special:MyLanguage/Requesting wiki configuration changes|requesting a configuration change]] in Phabricator (and adding the <bdi lang="en" dir="ltr" style="white-space: nowrap;">#campaigns-product-team</bdi> tag). Participants of past events can cancel their registration at any time.
* Administrators at wikis that have a customized <bdi lang="en" dir="ltr">[[MediaWiki:Sidebar]]</bdi> should check that it contains an entry for the {{int:specialpages}} listing. If it does not, they should add it using <code dir=ltr style="white-space: nowrap;">* specialpages-url|specialpages</code>. Wikis with a default sidebar will see the link moved from the page toolbox into the sidebar menu in April. [https://phabricator.wikimedia.org/T388927]
* The Minerva skin (mobile web) combines both Notice and Alert notifications within the bell icon ([[File:OOjs UI icon bell.svg|16px|link=|class=skin-invert]]). There was a long-standing bug where an indication for new notifications was only shown if you had unseen Alerts. This bug is now fixed. In the future, Minerva users will notice a counter atop the bell icon when you have 1 or more unseen Notices and/or Alerts. [https://phabricator.wikimedia.org/T344029]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* VisualEditor has introduced a [[mw:VisualEditor/Hooks|new client-side hook]] for developers to use when integrating with the VisualEditor target lifecycle. This hook should replace the existing lifecycle-related hooks, and be more consistent between different platforms. In addition, the new hook will apply to uses of VisualEditor outside of just full article editing, allowing gadgets to interact with the editor in DiscussionTools as well. The Editing Team intends to deprecate and eventually remove the old lifecycle hooks, so any use cases that this new hook does not cover would be of interest to them and can be [[phab:T355555|shared in the task]].
* Developers who use the <code dir=ltr>mw.Api</code> JavaScript library, can now identify the tool using it with the <code dir=ltr>userAgent</code> parameter: <code dir=ltr>var api = new mw.Api( { userAgent: 'GadgetNameHere/1.0.1' } );</code>. If you maintain a gadget or user script, please set a user agent, because it helps with library and server maintenance and with differentiating between legitimate and illegitimate traffic. [https://phabricator.wikimedia.org/T373874][https://foundation.wikimedia.org/wiki/Policy:Wikimedia_Foundation_User-Agent_Policy]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.22|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:43, 24 March 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28443127 -->
== Wikipedia translation of the week: 2025-14 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Chilembwe uprising]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Chilembwe supporters being led to be executed (cropped).jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Chilembwe uprising''' was a rebellion against British colonial rule in Nyasaland (modern-day Malawi) which took place in January 1915. It was led by John Chilembwe, an American-educated Baptist minister. Based around his church in the village of Mbombwe in the south-east of the colony, the leaders of the revolt were mainly from an emerging black middle class. They were motivated by grievances against the British colonial system, which included forced labour, racial discrimination and new demands imposed on the African population following the outbreak of World War I.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:52, 31 March 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28454663 -->
== Tech News: 2025-14 ==
<section begin="technews-2025-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/14|Translations]] are available.
'''Updates for editors'''
* The Editing team is working on a new [[mw:Special:MyLanguage/Edit Check|Edit check]]: [[mw:Special:MyLanguage/Edit check#26 March 2025|Peacock check]]. This check's goal is to identify non-neutral terms while a user is editing a wikipage, so that they can be informed that their edit should perhaps be changed before they publish it. This project is at the early stages, and the team is looking for communities' input: [[phab:T389445|in this Phabricator task]], they are gathering on-wiki policies, templates used to tag non-neutral articles, and the terms (jargon and keywords) used in edit summaries for the languages they are currently researching. You can participate by editing the table on Phabricator, commenting on the task, or directly messaging [[m:user:Trizek (WMF)|Trizek (WMF)]].
* [[mw:Special:MyLanguage/MediaWiki Platform Team/SUL3|Single User Login]] has now been updated on all wikis to move login and account creation to a central domain. This makes user login compatible with browser restrictions on cross-domain cookies, which have prevented users of some browsers from staying logged in.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:35}} community-submitted {{PLURAL:35|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Starting on March 31st, the MediaWiki Interfaces team will begin a limited release of generated OpenAPI specs and a SwaggerUI-based sandbox experience for [[mw:Special:MyLanguage/API:REST API|MediaWiki REST APIs]]. They invite developers from a limited group of non-English Wikipedia communities (Arabic, German, French, Hebrew, Interlingua, Dutch, Chinese) to review the documentation and experiment with the sandbox in their preferred language. In addition to these specific Wikipedia projects, the sandbox and OpenAPI spec will be available on the [[testwiki:Special:RestSandbox|on the test wiki REST Sandbox special page]] for developers with English as their preferred language. During the preview period, the MediaWiki Interfaces Team also invites developers to [[mw:MediaWiki Interfaces Team/Feature Feedback/REST Sandbox|share feedback about your experience]]. The preview will last for approximately 2 weeks, after which the sandbox and OpenAPI specs will be made available across all wiki projects.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.23|MediaWiki]]
'''In depth'''
* Sometimes a small, [[gerrit:c/operations/cookbooks/+/1129184|one line code change]] can have great significance: in this case, it means that for the first time in years we're able to run all of the stack serving <bdi lang="en" dir="ltr">[http://maps.wikimedia.org/ maps.wikimedia.org]</bdi> - a host dedicated to serving our wikis and their multi-lingual maps needs - from a single core datacenter, something we test every time we perform a [[m:Special:MyLanguage/Tech/Server switch|datacenter switchover]]. This is important because it means that in case one of our datacenters is affected by a catastrophe, we'll still be able to serve the site. This change is the result of [[phab:T216826|extensive work]] by two developers on porting the last component of the maps stack over to [[w:en:Kubernetes|kubernetes]], where we can allocate resources more efficiently than before, thus we're able to withstand more traffic in a single datacenter. This work involved a lot of complicated steps because this software, and the software libraries it uses, required many long overdue upgrades. This type of work makes the Wikimedia infrastructure more sustainable.
'''Meetings and events'''
* [[mw:Special:MyLanguage/MediaWiki Users and Developers Workshop Spring 2025|MediaWiki Users and Developers Workshop Spring 2025]] is happening in Sandusky, USA, and online, from 14–16 May 2025. The workshop will feature discussions around the usage of MediaWiki software by and within companies in different industries and will inspire and onboard new users. Registration and presentation signup is now available at the workshop's website.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:06, 1 April 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28473566 -->
== Wikipedia translation of the week: 2025-15 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:1930 Bago earthquake]]'''<br /> <small>''([[:my:၁၉၃၀ ပဲခူးငလျင်]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Thiao Mueang Phama (1955, p. 165).jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
An earthquake affected Myanmar on 5 May 1930 with a moment magnitude (Mw ) 7.4. The shock occurred 35 km (22 mi) beneath the surface with a maximum Rossi–Forel intensity of IX (Devastating tremor). The earthquake was the result of rupture along a 131 km (81 mi) segment of the Sagaing Fault—a major strike-slip fault that runs through the country. Extensive damage was reported in the southern part of the country, particularly in Bago and Yangon, where buildings collapsed and fires erupted. At least 550, and possibly up to 7,000 people were killed. A moderate tsunami struck the Burmese coast which caused minor damage to ships and a port. It was felt for over 570,000 km2 (220,000 sq mi) and as far as Shan State and Thailand. The mainshock was followed by many aftershocks; several were damaging. The December earthquake was similarly sized which also occurred along the Sagaing Fault.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:54, 7 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28454663 -->
== Tech News: 2025-15 ==
<section begin="technews-2025-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/15|Translations]] are available.
'''Updates for editors'''
* From now on, [[m:Special:MyLanguage/Interface administrators|interface admins]] and [[m:Special:MyLanguage/Central notice administrators|centralnotice admins]] are technically required to enable [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] before they can use their privileges. In the future this might be expanded to more groups with advanced user-rights. [https://phabricator.wikimedia.org/T150898]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The Design System Team is preparing to release the next major version of Codex (v2.0.0) on April 29. Editors and developers who use CSS from Codex should see the [[mw:Codex/Release Timeline/2.0|2.0 overview documentation]], which includes guidance related to a few of the breaking changes such as <code dir=ltr style="white-space: nowrap;">font-size</code>, <code dir=ltr style="white-space: nowrap;">line-height</code>, and <code dir=ltr style="white-space: nowrap;">size-icon</code>.
* The results of the [[mw:Developer Satisfaction Survey/2025|Developer Satisfaction Survey (2025)]] are now available. Thank you to all participants. These results help the Foundation decide what to work on next and to review what they recently worked on.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.24|MediaWiki]]
'''Meetings and events'''
* The [[mw:Special:MyLanguage/Wikimedia Hackathon 2025|2025 Wikimedia Hackathon]] will take place in Istanbul, Turkey, between 2–4 May. Registration for attending the in-person event will close on 13 April. Before registering, please note the potential need for a [https://www.mfa.gov.tr/turkish-representations.en.mfa visa] or [https://www.mfa.gov.tr/visa-information-for-foreigners.en.mfa e-visa] to enter the country.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:53, 7 April 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28507470 -->
== Wikipedia translation of the week: 2025-16 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Museum of Zoology of the University of São Paulo]]'''<br /> <small>''([[:pt:Museu de Zoologia da Universidade de São Paulo]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Museu de Zoologia da USP 02.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Museum of Zoology of the University of São Paulo''' (Portuguese: Museu de Zoologia da Universidade de São Paulo, abbreviated MZUSP) is a public natural history museum located in the historic Ipiranga district of São Paulo, Brazil. The MZUSP is an educational and research institution that is part of the University of São Paulo. The museum began at the end of the 19th century as part of the Museu Paulista; in 1941, it moved into a dedicated building. In 1969 the museum became a part of the University of São Paulo, receiving its current name.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:27, 14 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28454663 -->
== Tech News: 2025-16 ==
<section begin="technews-2025-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/16|Translations]] are available.
'''Weekly highlight'''
* Later this week, the default thumbnail size will be increased from 220px to 250px. This changes how pages are shown in all wikis and has been requested by some communities for many years, but wasn't previously possible due to technical limitations. [https://phabricator.wikimedia.org/T355914]
* File thumbnails are now stored in discrete sizes. If a page specifies a thumbnail size that's not among the standard sizes (20, 40, 60, 120, 250, 330, 500, 960), then MediaWiki will pick the closest larger thumbnail size but will tell the browser to downscale it to the requested size. In these cases, nothing will change visually but users might load slightly larger images. If it doesn't matter which thumbnail size is used in a page, please pick one of the standard sizes to avoid the extra in-browser down-scaling step. [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Images#Thumbnail_sizes][https://phabricator.wikimedia.org/T355914]
'''Updates for editors'''
* The Wikimedia Foundation are working on a system called [[m:Edge Uniques|Edge Uniques]] which will enable [[:w:en:A/B testing|A/B testing]], help protect against [[:w:en:Denial-of-service attack|Distributed denial-of-service attacks]] (DDoS attacks), and make it easier to understand how many visitors the Wikimedia sites have. This is so that they can more efficiently build tools which help readers, and make it easier for readers to find what they are looking for.
* To improve security for users, a small percentage of logins will now require that the account owner input a one-time password [[mw:Special:MyLanguage/Help:Extension:EmailAuth|emailed to their account]]. It is recommended that you [[Special:Preferences#mw-prefsection-personal-email|check]] that the email address on your account is set correctly, and that it has been confirmed, and that you have an email set for this purpose. [https://phabricator.wikimedia.org/T390662]
* "Are you interested in taking a short survey to improve tools used for reviewing or reverting edits on your Wiki?" This question will be [[phab:T389401|asked at 7 wikis starting next week]], on Recent Changes and Watchlist pages. The [[mw:Special:MyLanguage/Moderator Tools|Moderator Tools team]] wants to know more about activities that involve looking at new edits made to your Wikimedia project, and determining whether they adhere to your project's policies.
* On April 15, the full Wikidata graph will no longer be supported on <bdi lang="zxx" dir="ltr">[https://query.wikidata.org/ query.wikidata.org]</bdi>. After this date, scholarly articles will be available through <bdi lang="zxx" dir="ltr" style="white-space:nowrap;">[https://query-scholarly.wikidata.org/ query-scholarly.wikidata.org]</bdi>, while the rest of the data hosted on Wikidata will be available through the <bdi lang="zxx" dir="ltr">[https://query.wikidata.org/ query.wikidata.org]</bdi> endpoint. This is part of the scheduled split of the Wikidata Graph, which was [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/September 2024 scaling update|announced in September 2024]]. More information is [[d:Wikidata:SPARQL query service/WDQS graph split|available on Wikidata]].
* The latest quarterly [[m:Special:MyLanguage/Wikimedia Apps/Newsletter/First quarter of 2025|Wikimedia Apps Newsletter]] is now available. It covers updates, experiments, and improvements made to the Wikipedia mobile apps.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The latest quarterly [[mw:Technical Community Newsletter/2025/April|Technical Community Newsletter]] is now available. This edition includes: an invitation for tool maintainers to attend the Toolforge UI Community Feedback Session on April 15th; recent community metrics; and recent technical blog posts.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.25|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:25, 15 April 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28540654 -->
== Wikipedia translation of the week: 2025-17 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Fear of crime]]'''<br /> <small>''([[:ar:الخوف من الجريمة]]) ([[:it:Criminofobia]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Fear of crime''' refers to the fear of being a victim of crime, which is not necessarily reflective of the actual probability of being such a victim.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:23, 21 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28559524 -->
== Tech News: 2025-17 ==
<section begin="technews-2025-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/17|Translations]] are available.
'''Updates for editors'''
* [[f:Special:MyLanguage/Wikifunctions:Main Page|Wikifunctions]] is now integrated with [[w:dag:Solɔɣu|Dagbani Wikipedia]] since April 15. It is the first project that will be able to call [[f:Special:MyLanguage/Wikifunctions:Introduction|functions from Wikifunctions]] and integrate them in articles. A function is something that takes one or more inputs and transforms them into a desired output, such as adding up two numbers, converting miles into metres, calculating how much time has passed since an event, or declining a word into a case. Wikifunctions will allow users to do that through a simple call of [[f:Special:MyLanguage/Wikifunctions:Catalogue|a stable and global function]], rather than via a local template. [https://www.wikifunctions.org/wiki/Special:MyLanguage/Wikifunctions:Status_updates/2025-04-16]
* A new type of lint error has been created: [[Special:LintErrors/empty-heading|{{int:linter-category-empty-heading}}]] ([[mw:Special:MyLanguage/Help:Lint errors/empty-heading|documentation]]). The [[mw:Special:MyLanguage/Help:Extension:Linter|Linter extension]]'s purpose is to identify wikitext patterns that must or can be fixed in pages and provide some guidance about what the problems are with those patterns and how to fix them. [https://phabricator.wikimedia.org/T368722]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:37}} community-submitted {{PLURAL:37|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Following its publication on HuggingFace, the "Structured Contents" dataset, developed by Wikimedia Enterprise, is [https://enterprise.wikimedia.com/blog/kaggle-dataset/ now also available on Kaggle]. This Beta initiative is focused on making Wikimedia data more machine-readable for high-volume reusers. They are releasing this beta version in a location that open dataset communities already use, in order to seek feedback, to help improve the product for a future wider release. You can read more about the overall [https://enterprise.wikimedia.com/blog/structured-contents-snapshot-api/#open-datasets Structured Contents project], and about the [https://enterprise.wikimedia.com/blog/structured-contents-wikipedia-infobox/ first release that's freely usable].
* There is no new MediaWiki version this week.
'''Meetings and events'''
* The Editing and Machine Learning Teams invite interested volunteers to a video meeting to discuss [[mw:Special:MyLanguage/Edit check/Peacock check|Peacock check]], which is the latest [[mw:Special:MyLanguage/Edit check|Edit check]] that will detect "peacock" or "overly-promotional" or "non-neutral" language whilst an editor is typing. Editors who work with newcomers, or help to fix this kind of writing, or are interested in how we use artificial intelligence in our projects are encouraged to attend. The [[mw:Special:MyLanguage/Editing team/Community Conversations#Next Conversation|meeting will be on April 28, 2025]] at [https://zonestamp.toolforge.org/1745863200 18:00–19:00 UTC] and hosted on Zoom.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:01, 21 April 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28578245 -->
== Wikipedia translation of the week: 2025-18 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Heritage preservation in South Korea]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Korean.Dance-03.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The heritage preservation system of South Korea is a multi-level program aiming to preserve and cultivate Korean cultural heritage. The program is administered by the Cultural Heritage Administration (CHA), and the legal framework is provided by the Cultural Heritage Protection Act of 1962, last updated in 2012. The program started in 1962 and has gradually been extended and upgraded since then.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:57, 28 April 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28583422 -->
== Tech News: 2025-18 ==
<section begin="technews-2025-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/18|Translations]] are available.
'''Updates for editors'''
* Event organizers who host collaborative activities on [[m:Special:MyLanguage/CampaignEvents/Deployment status#Global Deployment Plan|multiple wikis]], including Bengali, Japanese, and Korean Wikipedias, will have access to the [[mw:Special:MyLanguage/Extension:CampaignEvents|CampaignEvents extension]] this week. Also, admins in the Wikipedia where the extension is enabled will automatically be granted the event organizer right soon. They won't have to manually grant themselves the right before they can manage events as [[phab:T386861|requested by a community]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The release of the next major version of [[mw:Special:MyLanguage/Codex|Codex]], the design system for Wikimedia, is scheduled for 29 April 2025. Technical editors will have access to the release by the week of 5 May 2025. This update will include a number of [[mw:Special:MyLanguage/Codex/Release_Timeline/2.0#Breaking_changes|breaking changes]] and minor [[mw:Special:MyLanguage/Codex/Release_Timeline/2.0#Visual_changes|visual changes]]. Instructions on handling the breaking and visual changes are documented on [[mw:Special:MyLanguage/Codex/Release Timeline/2.0#|this page]]. Pre-release testing is reported in [[phab:T386298|T386298]], with post-release issues tracked in [[phab:T392379|T392379]] and [[phab:T392390|T392390]].
* Users of [[wikitech:Special:MyLanguage/Help:Wiki_Replicas|Wiki Replicas]] will notice that the database views of <code dir="ltr">ipblocks</code>, <code dir="ltr">ipblocks_ipindex</code>, and <code dir="ltr">ipblocks_compat</code> are [[phab:T390767|now deprecated]]. Users can query the <code dir="ltr">[[mw:Special:MyLanguage/Manual:Block_table|block]]</code> and <code dir="ltr">[[mw:Special:MyLanguage/Manual:Block_target_table|block_target]]</code> new views that mirror the new tables in the production database instead. The deprecated views will be removed entirely from Wiki Replicas in June, 2025.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.27|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/April|Language and Internationalization Newsletter]] is now available. This edition includes an overview of the improved [https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&campaign=contributionsmenu&to=es&filter-type=automatic&filter-id=previous-edits&active-list=suggestions&from=en#/ Content Translation Dashboard Tool], [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/April#Language Support for New and Existing Languages|support for new languages]], [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/April#Wiki Loves Ramadan Articles Made In Content Translation Mobile Workflow|highlights from the Wiki Loves Ramadan campaign]], [[m:Special:MyLanguage/Research:Languages Onboarding Experiment 2024 - Executive Summary|results from the Language Onboarding Experiment]], an analysis of topic diversity in articles, and information on upcoming community meetings and events.
'''Meetings and events'''
* The [[Special:MyLanguage/Grants:Knowledge_Sharing/Connect/Calendar|Let's Connect Learning Clinic]] will take place on [https://zonestamp.toolforge.org/1745937000 April 29 at 14:30 UTC]. This edition will focus on "Understanding and Navigating Conflict in Wikimedia Projects". You can [[m:Special:MyLanguage/Event:Learning Clinic %E2%80%93 Understanding and Navigating Conflict in Wikimedia Projects (Part_1)|register now]] to attend.
* The [[mw:Special:MyLanguage/Wikimedia Hackathon 2025|2025 Wikimedia Hackathon]], which brings the global technical community together to connect, brainstorm, and hack existing projects, will take place from May 2 to 4th, 2025, at Istanbul, Turkey.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:32, 28 April 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28585685 -->
== Wikipedia translation of the week: 2025-19 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lhamana]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:We-Wa, a Zuni berdache, weaving - NARA - 523796 (cropped).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Lhamana''', in traditional Zuni culture, are biologically male people who take on the social and ceremonial roles usually performed by women in their culture, at least some of the time. They wear a mixture of women's and men's clothing and much of their work is in the areas usually occupied by Zuni women. Some contemporary lhamana participate in the pan-Indian two-spirit community.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 07:28, 5 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28583422 -->
== Tech News: 2025-19 ==
<section begin="technews-2025-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/19|Translations]] are available.
'''Weekly highlight'''
* The Wikimedia Foundation has shared the latest draft update to their [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026|annual plan]] for next year (July 2025–June 2026). This includes an [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026|executive summary]] (also on [[diffblog:2025/04/25/sharing-the-wikimedia-foundations-2025-2026-draft-annual-plan/|Diff]]), details about the three main [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Goals|goals]] ([[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Product & Technology OKRs|Infrastructure]], [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Goals/Volunteer Support|Volunteer Support]], and [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Goals/Effectiveness|Effectiveness]]), [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Global Trends|global trends]], and the [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Budget Overview|budget]] and [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026/Financial Model|financial model]]. Feedback and questions are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2025-2026|talk page]] until the end of May.
'''Updates for editors'''
* For wikis that have the [[m:Special:MyLanguage/CampaignEvents/Deployment status|CampaignEvents extension enabled]], two new feature improvements have been released:
** Admins can now choose which namespaces are permitted for [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] via [[mw:Special:MyLanguage/Community Configuration|Community Configuration]] ([[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Permitted namespaces|documentation]]). The default setup is for event registration to be permitted in the Event namespace, but other namespaces (such as the project namespace or WikiProject namespace) can now be added. With this change, communities like WikiProjects can now more easily use Event Registration for their collaborative activities.
** Editors can now [[mw:Special:MyLanguage/Transclusion|transclude]] the Collaboration List on a wiki page ([[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Collaboration list/Transclusion|documentation]]). The Collaboration List is an automated list of events and WikiProjects on the wikis, accessed via {{#special:AllEvents}} ([[w:en:Special:AllEvents|example]]). Now, the Collaboration List can be added to all sorts of wiki pages, such as: a wiki mainpage, a WikiProject page, an affiliate page, an event page, or even a user page.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Developers who use the <code dir=ltr>moment</code> library in gadgets and user scripts should revise their code to use alternatives like the <code dir=ltr>Intl</code> library or the new <code dir=ltr>mediawiki.DateFormatter</code> library. The <code dir=ltr>moment</code> library has been deprecated and will begin to log messages in the developer console. You can see a global search for current uses, and [[phab:T392532|ask related questions in this Phabricator task]].
* Developers who maintain a tool that queries the Wikidata term store tables (<code dir=ltr style="white-space: nowrap;">wbt_*</code>) need to update their code to connect to a separate database cluster. These tables are being split into a separate database cluster. Tools that query those tables via the wiki replicas must be adapted to connect to the new cluster instead. [[wikitech:News/2025 Wikidata term store database split|Documentation and related links are available]]. [https://phabricator.wikimedia.org/T390954]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.44/wmf.28|MediaWiki]]
'''In depth'''
* The latest [[mw:Special:MyLanguage/Extension:Chart/Project/Updates|Chart Project newsletter]] is available. It includes updates on preparing to expand the deployment to additional wikis as soon as this week (starting May 6) and scaling up over the following weeks, plus exploring filtering and transforming source data.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:15, 6 May 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28665011 -->
== Wikipedia translation of the week: 2025-20 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Gruppo del Sileno]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Parco3.JPG|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Sileno ed Egle con Mnasilo e Cromi''', meglio noto come Gruppo del Sileno, è un monumento in marmo di Carrara, realizzato da Jean-Baptiste Boudard nel 1765 per il Giardino Ducale di Parma; sostituito nel 1991 con una copia in polvere di marmo e resina, l'originale si trova provvisoriamente nel chiostro della Fontana del monastero di San Paolo, in attesa della definitiva collocazione prevista all'interno del palazzetto Eucherio Sanvitale nel parco Ducale.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:28, 12 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28709947 -->
== Tech News: 2025-20 ==
<section begin="technews-2025-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/20|Translations]] are available.
'''Weekly highlight'''
* The [[m:Special:MyLanguage/Wikimedia URL Shortener|"Get shortened URL"]] link on the sidebar now includes a [[phab:T393309|QR code]]. Wikimedia site users can now use it by scanning or downloading it to quickly share and access shared content from Wikimedia sites, conveniently.
'''Updates for editors'''
* The Wikimedia Foundation is working on a system called [[m:Edge Uniques|Edge Uniques]], which will enable [[w:en:A/B testing|A/B testing]], help protect against [[w:en:Denial-of-service attack|distributed denial-of-service attacks]] (DDoS attacks), and make it easier to understand how many visitors the Wikimedia sites have. This is to help more efficiently build tools which help readers, and make it easier for readers to find what they are looking for. Tech News has [[m:Special:MyLanguage/Tech/News/2025/16|previously written about this]]. The deployment will be gradual. Some might see the Edge Uniques cookie the week of 19 May. You can discuss this on the [[m:Talk:Edge Uniques|talk page]].
* Starting May 19, 2025, Event organisers in wikis with the [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] enabled can use [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] in the project namespace (e.g., Wikipedia namespace, Wikidata namespace). With this change, communities don't need admins to use the feature. However, wikis that don't want this change can remove and add the permitted namespaces at [[Special:CommunityConfiguration/CampaignEvents]].
* The Wikipedia project now has a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q36720|Nupe]] ([[w:nup:|<code>w:nup:</code>]]). This is a language primarily spoken in the North Central region of Nigeria. Speakers of this language are invited to contribute to [[w:nup:Tatacin feregi|new Wikipedia]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Developers can now access pre-parsed Dutch Wikipedia, amongst others (English, German, French, Spanish, Italian, and Portuguese) through the [https://enterprise.wikimedia.com/docs/snapshot/#structured-contents-snapshot-bundle-info-beta Structured Contents snapshots (beta)]. The content includes parsed Wikipedia abstracts, descriptions, main images, infoboxes, article sections, and references.
* The <code dir="ltr">/page/data-parsoid</code> REST API endpoint is no longer in use and will be deprecated. It is [[phab:T393557|scheduled to be turned off]] on June 7, 2025.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.1|MediaWiki]]
'''In depth'''
* The [https://wikitech.wikimedia.org/wiki/News/2025_Cloud_VPS_VXLAN_IPv6_migration IPv6 support] is a newly introduced Cloud virtual network that significantly boosts Wikimedia platforms' scalability, security, and readiness for the future. If you are a technical contributor eager to learn more, check out [https://techblog.wikimedia.org/2025/05/06/wikimedia-cloud-vps-ipv6-support/ this blog post] for an in-depth look at the journey to IPv6.
'''Meetings and events'''
* The 2nd edition of 2025 of [[m:Special:MyLanguage/Afrika Baraza|Afrika Baraza]], a virtual platform for African Wikimedians to connect, will take place on [https://zonestamp.toolforge.org/1747328400 May 15 at 17:00 UTC]. This edition will focus on discussions regarding [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2025-2026|Wikimedia Annual planning and progress]].
* The [[m:Special:MyLanguage/MENA Connect Community Call|MENA Connect Community Call]], a virtual meeting for [[w:en:Middle East and North Africa|MENA]] Wikimedians to connect, will take place on [https://zonestamp.toolforge.org/1747501200 May 17 at 17:00 UTC]. You can [[m:Event:MENA Connect (Wiki_Diwan) APP Call|register now]] to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:38, 12 May 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28714188 -->
== Wikipedia translation of the week: 2025-21 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lorrin A. Thurston]]'''<br /> <small>''([[:fi:Lorrin Thurston]]) ([[:ko:로린 A. 서스턴]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lorrinandrewsthurston1892.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Lorrin Andrews Thurston''' (July 31, 1858 – May 11, 1931) was a Hawaiian citizen lawyer, politician, and businessman. Thurston played a prominent role in the revolution that overthrew the Hawaiian Kingdom to replace Queen Liliʻuokalani with the Republic of Hawaii, with discreet US support for which Congress much later apologized. He published the Pacific Commercial Advertiser (a forerunner of the present-day Honolulu Star-Advertiser), and owned other enterprises. From 1906 to 1916, he and his network lobbied with national politicians to create a national park to preserve the Hawaiian volcanoes.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:33, 19 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28731710 -->
== Tech News: 2025-21 ==
<section begin="technews-2025-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/21|Translations]] are available.
'''Weekly highlight'''
* The Editing Team and the Machine Learning Team are working on a new check for newcomers: [[mw:Edit check/Peacock check|Peacock check]]. Using a prediction model, this check will encourage editors to improve the tone of their edits, using artificial intelligence. We invite volunteers to review the first version of the Peacock language model for the following languages: Arabic, Spanish, Portuguese, English, and Japanese. Users from these wikis interested in reviewing this model are [[mw:Edit check/Peacock check/model test|invited to sign up at MediaWiki.org]]. The deadline to sign up is on May 23, which will be the start date of the test.
'''Updates for editors'''
* From May 20, 2025, [[m:Special:MyLanguage/Oversight policy|oversighters]] and [[m:Special:MyLanguage/Meta:CheckUsers|checkusers]] will need to have their accounts secured with two-factor authentication (2FA) to be able to use their advanced rights. All users who belong to these two groups and do not have 2FA enabled have been informed. In the future, this requirement may be extended to other users with advanced rights. [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|Learn more]].
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] [[m:Special:MyLanguage/Community Wishlist Survey 2023/Multiblocks|Multiblocks]] will begin mass deployment by the end of the month: all non-Wikipedia projects plus Catalan Wikipedia will adopt Multiblocks in the week of May 26, while all other Wikipedias will adopt it in the week of June 2. Please [[m:Talk:Community Wishlist Survey 2023/Multiblocks|contact the team]] if you have concerns. Administrators can test the new user interface now on your own wiki by browsing to [{{fullurl:Special:Block|usecodex=1}} {{#special:Block}}?usecodex=1], and can test the full multiblocks functionality [[testwiki:Special:Block|on testwiki]]. Multiblocks is the feature that makes it possible for administrators to impose different types of blocks on the same user at the same time. See the [[mw:Special:MyLanguage/Help:Manage blocks|help page]] for more information. [https://phabricator.wikimedia.org/T377121]
* Later this week, the [[{{#special:SpecialPages}}]] listing of almost all special pages will be updated with a new design. This page has been [[phab:T219543|redesigned]] to improve the user experience in a few ways, including: The ability to search for names and aliases of the special pages, sorting, more visible marking of restricted special pages, and a more mobile-friendly look. The new version can be [https://meta.wikimedia.beta.wmflabs.org/wiki/Special:SpecialPages previewed] at Beta Cluster now, and feedback shared in the task. [https://phabricator.wikimedia.org/T219543]
* The [[mw:Special:MyLanguage/Extension:Chart|Chart extension]] is being enabled on more wikis. For a detailed list of when the extension will be enabled on your wiki, please read the [[mw:Special:MyLanguage/Extension:Chart/Project#Deployment Timeline|deployment timeline]].
* [[f:Special:MyLanguage/Wikifunctions:Main Page|Wikifunctions]] will be deployed on May 27 on five Wiktionaries: [[wikt:ha:|Hausa]], [[wikt:ig:|Igbo]], [[wikt:bn:|Bengali]], [[wikt:ml:|Malayalam]], and [[wikt:dv:|Dhivehi/Maldivian]]. This is the second batch of deployment planned for the project. After deployment, the projects will be able to call [[f:Special:MyLanguage/Wikifunctions:Introduction|functions from Wikifunctions]] and integrate them in their pages. A function is something that takes one or more inputs and transforms them into a desired output, such as adding up two numbers, converting miles into metres, calculating how much time has passed since an event, or declining a word into a case. Wikifunctions will allow users to do that through a simple call of [[f:Special:MyLanguage/Wikifunctions:Catalogue|a stable and global function]], rather than via a local template.
* Later this week, the Wikimedia Foundation will publish a hub for [[diffblog:2024/07/09/on-the-value-of-experimentation/|experiments]]. This is to showcase and get user feedback on product experiments. The experiments help the Wikimedia movement [[diffblog:2023/07/13/exploring-paths-for-the-future-of-free-knowledge-new-wikipedia-chatgpt-plugin-leveraging-rich-media-social-apps-and-other-experiments/|understand new users]], how they interact with the internet and how it could affect the Wikimedia movement. Some examples are [[m:Special:MyLanguage/Future Audiences/Generated Video|generated video]], the [[m:Special:MyLanguage/Future Audiences/Roblox game|Wikipedia Roblox speedrun game]] and [[m:Special:MyLanguage/Future Audiences/Discord bot|the Discord bot]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:29}} community-submitted {{PLURAL:29|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a bug with creating an account using the API, which has now been fixed. [https://phabricator.wikimedia.org/T390751]
'''Updates for technical contributors'''
* Gadgets and user scripts that interact with [[{{#special:Block}}]] may need to be updated to work with the new [[mw:Special:MyLanguage/Help:Manage blocks|manage blocks interface]]. Please review the [[mw:Help:Manage blocks/Developers|developer guide]] for more information. If you need help or are unable to adapt your script to the new interface, please let the team know on the [[mw:Help talk:Manage blocks/Developers|talk page]]. [https://phabricator.wikimedia.org/T377121]
* The <code dir=ltr>mw.title</code> object allows you to get information about a specific wiki page in the [[w:en:Wikipedia:Lua|Lua]] programming language. Starting this week, a new property will be added to the object, named <code dir=ltr>isDisambiguationPage</code>. This property allows you to check if a page is a disambiguation page, without the need to write a custom function. [https://phabricator.wikimedia.org/T71441]
* [[File:Octicons-tools.svg|15px|link=|class=skin-invert|Advanced item]] User script developers can use a [[toolforge:gitlab-content|new reverse proxy tool]] to load javascript and css from [[gitlab:|gitlab.wikimedia.org]] with <code dir=ltr>mw.loader.load</code>. The tool's author hopes this will enable collaborative development workflows for user scripts including linting, unit tests, code generation, and code review on <bdi lang="zxx" dir="ltr">gitlab.wikimedia.org</bdi> without a separate copy-and-paste step to publish scripts to a Wikimedia wiki for integration and acceptance testing. See [[wikitech:Tool:Gitlab-content|Tool:Gitlab-content on Wikitech]] for more information.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.2|MediaWiki]]
'''Meetings and events'''
* The 12th edition of [[m:Special:MyLanguage/Wiki Workshop 2025|Wiki Workshop 2025]], a forum that brings together researchers that explore all aspects of Wikimedia projects, will be held virtually on 21-22 May. Researchers can [https://pretix.eu/wikimedia/wikiworkshop2025/ register now].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W21"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:13, 19 May 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28724712 -->
== Wikipedia translation of the week: 2025-22 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Lamiera bugnata]]'''<br /> <small>''([[:en:Tread plate]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Diamond Plate.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Una '''lamiera bugnata''' o mandorlata è una lamiera di metallo ottenuta dalla laminazione di una bramma attraverso rulli che, tramite punzonatura o goffratura, imprimono sulla lamina rilievi a forma di rombo o ellisse, detti bugne. Nel caso questi rilievi siano alternati singolarmente nei due assi, si parla di lamiera diamantata, mentre se le forme sono predisposte in maniera parallela per formare piccoli quadranti tra di loro tangenti, questo pattern viene identificato con il nome di mandorlato.
We tend to ignore the fact that this type of plate is the only reason we don't slip when we walk on steel and wet or frozen surfaces. The Italian article it's short but quite complete, and has just the right amount of citations, unlike other poor languages' versions.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 06:03, 26 May 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28751788 -->
== Tech News: 2025-22 ==
<section begin="technews-2025-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/22|Translations]] are available.
'''Weekly highlight'''
* A community-wide discussion about a very delicate issue for the development of [[m:Special:MyLanguage/Abstract Wikipedia|Abstract Wikipedia]] is now open on Meta: where to store the abstract content that will be developed through functions from Wikifunctions and data from Wikidata. The discussion is open until June 12 at [[m:Special:MyLanguage/Abstract Wikipedia/Location of Abstract Content|Abstract Wikipedia/Location of Abstract Content]], and every opinion is welcomed. The decision will be made and communicated after the consultation period by the Foundation.
'''Updates for editors'''
* Since last week, on all wikis except [[phab:T388604|the largest 20]], people using the mobile visual editor will have [[phab:T385851|additional tools in the menu bar]], accessed using the new <code>+</code> toolbar button. To start, the new menu will include options to add: citations, hieroglyphs, and code blocks. Deployment to the remaining wikis is [[phab:T388605|scheduled]] to happen in June.
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] The <code dir=ltr>[[mw:Special:MyLanguage/Help:Extension:ParserFunctions##ifexist|#ifexist]]</code> parser function will no longer register a link to its target page. This will improve the usefulness of [[{{#special:WantedPages}}]], which will eventually only list pages that are the target of an actual red link. This change will happen gradually as the source pages are updated. [https://phabricator.wikimedia.org/T14019]
* This week, the Moderator Tools team will launch [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|a new filter to Recent Changes]], starting at Indonesian Wikipedia. This new filter highlights edits that are likely to be reverted. The goal is to help Recent Changes patrollers identify potentially problematic edits. Other wikis will benefit from this filter in the future.
* Upon clicking an empty search bar, logged-out users will see suggestions of articles for further reading. The feature will be available on both desktop and mobile. Readers of Catalan, Hebrew, and Italian Wikipedias and some sister projects will receive the change between May 21 and mid-June. Readers of other wikis will receive the change later. The goal is to encourage users to read the wikis more. [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments/Search Suggestions|Learn more]].
* Some users of the Wikipedia Android app can use a new feature for readers, [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/TrivaGame|WikiGames]], a daily trivia game based on real historical events. The release has started as an A/B test, available to 50% of users in the following languages: English, French, Portuguese, Russian, Spanish, Arabic, Chinese, and Turkish.
* The [[mw:Special:MyLanguage/Extension:Newsletter|Newsletter extension]] that is available on MediaWiki.org allows the creation of [[mw:Special:Newsletters|various newsletters]] for global users. The extension can now publish new issues as section links on an existing page, instead of requiring a new page for each issue. [https://phabricator.wikimedia.org/T393844]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The previously deprecated <code dir=ltr>[[mw:Special:MyLanguage/Manual:Ipblocks table|ipblocks]]</code> views in [[wikitech:Help:Wiki Replicas|Wiki Replicas]] will be removed in the beginning of June. Users are encouraged to query the new <code dir=ltr>[[mw:Special:MyLanguage/Manual:Block table|block]]</code> and <code dir=ltr>[[mw:Special:MyLanguage/Manual:Block target table|block_target]]</code> views instead.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.3|MediaWiki]]
'''Meetings and events'''
* [[d:Special:MyLanguage/Event:Wikidata and Sister Projects|Wikidata and Sister Projects]] is a multi-day online event that will focus on how Wikidata is integrated to Wikipedia and the other Wikimedia projects. The event runs from May 29 – June 1. You can [[d:Special:MyLanguage/Event:Wikidata and Sister Projects#Sessions|read the Program schedule]] and [[d:Special:RegisterForEvent/1291|register]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:05, 26 May 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28788673 -->
== Wikipedia translation of the week: 2025-23 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Angelo azzurro (cocktail)]]'''<br /> <small>''([[:es:Ángel azul (cóctel)]]) ([[:fr:Ange bleu (cocktail)]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Angelo Azzurro Cocktail.png|300px|center]]
<div style="text-align:left; padding: .4em;">
L''''angelo azzurro''' è un cocktail alcolico italiano. È considerato uno dei cocktail più popolari in Italia negli anni novanta, insieme al B-52 e all'Invisibile.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 05:39, 2 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-23 ==
<section begin="technews-2025-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/23|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Extension:Chart|Chart extension]] is now available on all Wikimedia wikis. Editors can use this new extension to create interactive data visualizations like bar, line, area, and pie charts. Charts are designed to replace many of the uses of the legacy [[mw:Special:MyLanguage/Extension:Graph|Graph extension]].
'''Updates for editors'''
* It is now easier to configure automatic citations for your wiki within the visual editor's [[mw:Special:MyLanguage/Citoid/Enabling Citoid on your wiki|citation generator]]. Administrators can now set a default template by using the <code dir=ltr>_default</code> key in the local <bdi lang="en" dir="ltr">[[MediaWiki:Citoid-template-type-map.json]]</bdi> page ([[mw:Special:Diff/6969653/7646386|example diff]]). Setting this default will also help to future-proof your existing configurations when [[phab:T347823|new item types]] are added in the future. You can still set templates for individual item types as they will be preferred to the default template. [https://phabricator.wikimedia.org/T384709]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Starting the week of June 2, bots logging in using <code dir=ltr>action=login</code> or <code dir=ltr>action=clientlogin</code> will fail more often. This is because of stronger protections against suspicious logins. Bots using [[mw:Special:MyLanguage/Manual:Bot passwords|bot passwords]] or using a loginless authentication method such as [[mw:Special:MyLanguage/OAuth/Owner-only consumers|OAuth]] are not affected. If your bot is not using one of those, you should update it; using <code dir=ltr>action=login</code> without a bot password was deprecated [[listarchive:list/wikitech-l@lists.wikimedia.org/message/3EEMN7VQX5G7WMQI5K2GP5JC2336DPTD/|in 2016]]. For most bots, this only requires changing what password the bot uses. [https://phabricator.wikimedia.org/T395205]
* From this week, Wikimedia wikis will allow ES2017 features in JavaScript code for official code, gadgets, and user scripts. The most visible feature of ES2017 is <bdi lang="zxx" dir="ltr"><code>async</code>/<code>await</code></bdi> syntax, allowing for easier-to-read code. Until this week, the platform only allowed up to ES2016, and a few months before that, up to ES2015. [https://phabricator.wikimedia.org/T381537]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.4|MediaWiki]]
'''Meetings and events'''
* Scholarship applications to participate in the [[m:Special:MyLanguage/GLAM Wiki 2025|GLAM Wiki Conference 2025]] are now open. The conference will take place from 30 October to 1 November, in Lisbon, Portugal. GLAM contributors who lack the means to support their participation can [[m:Special:MyLanguage/GLAM Wiki 2025/Scholarships|apply here]]. Scholarship applications close on June 7th.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:55, 2 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28819186 -->
== Wikipedia translation of the week: 2025-24 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:fi:Kotiryssä]]'''<br /> <small>''([[:en:Kotiryssä]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
A '''kotiryssä''' (jocular Finnish: one’s home Russky or home Russian) was a Soviet or Russian contact person of a Finnish politician, bureaucrat, businessman or other important person.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:33, 9 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-24 ==
<section begin="technews-2025-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/24|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Trust and Safety Product|Trust and Safety Product team]] is finalizing work needed to roll out [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] on large Wikipedias later this month. The team has worked with stewards and other users with extended rights to predict and address many use cases that may arise on larger wikis, so that community members can continue to effectively moderate and patrol temporary accounts. This will be the second of three phases of deployment – the last one will take place in September at the earliest. For more information about the recent developments on the project, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|see this update]]. If you have any comments or questions, write on the [[mw:Talk:Trust and Safety Product/Temporary Accounts|talk page]], and [[m:Event:CEE Catch up Nr. 10 (June 2025)|join a CEE Catch Up]] this Tuesday.
'''Updates for editors'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] The [[mw:Special:MyLanguage/Help:Watchlist expiry|watchlist expiry]] feature allows editors to watch pages for a limited period of time. After that period, the page is automatically removed from your watchlist. Starting this week, you can set a preference for the default period of time to watch pages. The [[Special:Preferences#mw-prefsection-watchlist-pageswatchlist|preferences]] also allow you to set different default watch periods for editing existing pages, pages you create, and when using rollback. [https://phabricator.wikimedia.org/T265716]
[[File:Talk pages default look (April 2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* The appearance of talk pages will change at almost all Wikipedias ([[m:Special:MyLanguage/Tech/News/2024/19|some]] have already received this design change, [[phab:T379264|a few]] will get these changes later). You can read details about the changes [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|on ''Diff'']]. It is possible to opt out of these changes [[Special:Preferences#mw-prefsection-editing-discussion|in user preferences]] ("{{int:discussiontools-preference-visualenhancements}}"). [https://phabricator.wikimedia.org/T319146][https://phabricator.wikimedia.org/T392121]
* Users with specific extended rights (including administrators, bureaucrats, checkusers, oversighters, and stewards) can now have IP addresses of all temporary accounts [[phab:T358853|revealed automatically]] during time-limited periods where they need to combat high-speed account-hopping vandalism. This feature was requested by stewards. [https://phabricator.wikimedia.org/T386492]
* This week, the Moderator Tools and Machine Learning teams will continue the rollout of [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|a new filter to Recent Changes]], releasing it to several more Wikipedias. This filter utilizes the Revert Risk model, which was created by the Research team, to highlight edits that are likely to be reverted and help Recent Changes patrollers identify potentially problematic contributions. The feature will be rolled out to the following Wikipedias: {{int:project-localized-name-afwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-bewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-bnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cywiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hawwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-iswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-simplewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}. The rollout will continue in the coming weeks to include [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|the rest of the Wikipedias in this project]]. [https://phabricator.wikimedia.org/T391964]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* AbuseFilter editors active on Meta-Wiki and large Wikipedias are kindly asked to update AbuseFilter to make it compatible with temporary accounts. A link to the instructions and the private lists of filters needing verification are [[phab:T369611|available on Phabricator]].
* Lua modules now have access to the name of a page's associated thumbnail image, and on [https://gerrit.wikimedia.org/g/operations/mediawiki-config/+/2e4ab14aa15bb95568f9c07dd777065901eb2126/wmf-config/InitialiseSettings.php#10849 some wikis] to the WikiProject assessment information. This is possible using two new properties on [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#added-by-extensions|mw.title objects]], named <code dir=ltr>pageImage</code> and <code dir=ltr>pageAssessments</code>. [https://phabricator.wikimedia.org/T131911][https://phabricator.wikimedia.org/T380122]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.5|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:17, 10 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28846858 -->
== Wikipedia translation of the week: 2025-25 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Future self]]'''<br /> <small>''([[:pl:Przyszła jaźń]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
In the psychology of self, the '''future self''' concerns the processes and consequences associated with thinking about oneself in the future. People think about their future selves similarly to how they think about other people. The extent to which people feel psychologically connected (e.g., similarity, closeness) to their future self influences how well they treat their future self. When people feel connected to their future self, they are more likely to save for retirement, make healthy decisions, and avoid ethical transgressions. Interventions that increase feelings of connectedness with future selves can improve future-oriented decision making across these domains.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 16 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-25 ==
<section begin="technews-2025-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/25|Translations]] are available.
'''Updates for editors'''
* You can [https://wikimediafoundation.limesurvey.net/359761?lang=en nominate your favorite tools] for the sixth edition of the [[m:Special:MyLanguage/Coolest Tool Award|Coolest Tool Award]]. Nominations are anonymous and will be open until June 25. You can re-use the survey to nominate multiple tools.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:33}} community-submitted {{PLURAL:33|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.6|MediaWiki]]
'''In depth'''
* Foundation staff and technical volunteers use Wikimedia APIs to build the tools, applications, features, and integrations that enhance user experiences. Over the coming years, the MediaWiki Interfaces team will be investing in Wikimedia web (HTTP) APIs to better serve technical volunteer needs and protect Wikimedia infrastructure from potential abuse. You can [https://techblog.wikimedia.org/2025/06/12/apis-as-a-product-investing-in-the-current-and-next-generation-of-technical-contributors/ read more about their plans to evolve the APIs in this Techblog post].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:39, 16 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 -->
== Wikipedia translation of the week: 2025-26 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pictorial map]]'''<br /> <small>''([[:fa:نقشه تصویری]]) ([[:ja:絵地図]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Blake Britain Spearhead of Attack.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
'''Pictorial maps''' (also known as illustrated maps, panoramic maps, perspective maps, bird's-eye view maps, and geopictorial maps) depict a given territory with a more artistic rather than technical style. It is a type of map in contrast to road map, atlas, or topographic map. The cartography can be a sophisticated 3-D perspective landscape or a simple map graphic enlivened with illustrations of buildings, people and animals. They can feature all sorts of varied topics like historical events, legendary figures or local agricultural products and cover anything from an entire continent to a college campus. Drawn by specialized artists and illustrators, pictorial maps are a rich, centuries-old tradition and a diverse art form that ranges from cartoon maps on restaurant placemats to treasured art prints in museums.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:18, 23 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-26 ==
<section begin="technews-2025-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/26|Translations]] are available.
'''Weekly highlight'''
* This week, the Moderator Tools and Machine Learning teams will continue the rollout of [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|a new filter to Recent Changes]], releasing it to the third and last batch of Wikipedias. This filter utilizes the Revert Risk model, which was created by the Research team, to highlight edits that are likely to be reverted and help Recent Changes patrollers identify potentially problematic contributions. The feature will be rolled out to the following Wikipedias: {{int:project-localized-name-azwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-lawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mkwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-mrwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nnwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-pawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-swwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-tlwiki/en}}. The rollout will continue in the coming weeks to include [[mw:Special:MyLanguage/2025 RecentChanges Language Agnostic Revert Risk Filtering|the rest of the Wikipedias in this project]]. [https://phabricator.wikimedia.org/T391964]
'''Updates for editors'''
* Last week, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] were rolled out on Czech, Korean, and Turkish Wikipedias. This and next week, deployments on larger Wikipedias will follow. [[mw:Talk:Trust and Safety Product/Temporary Accounts|Share your thoughts]] about the project. [https://phabricator.wikimedia.org/T340001]
* Later this week, the Editing team will release [[mw:Special:MyLanguage/Help:Edit check#Multi check|Multi Check]] to all Wikipedias (except English Wikipedia). This feature shows multiple [[mw:Special:MyLanguage/Help:Edit check#Reference check|Reference checks]] within the editing experience. This encourages users to add citations when they add multiple new paragraphs to a Wikipedia article. This feature was previously available as an A/B test. [https://analytics.wikimedia.org/published/reports/editing/multi_check_ab_test_report_final.html#summary-of-results The test shows] that users who are shown multiple checks are 1.3 times more likely to add a reference to their edit, and their edit is less likely to be reverted (-34.7%). [https://phabricator.wikimedia.org/T395519]
* A few pages need to be renamed due to software updates and to match more recent Unicode standards. All of these changes are related to title-casing changes. Approximately 71 pages and 3 files will be renamed, across 15 wikis; the complete list is in [[phab:T396903|the task]]. The developers will rename these pages next week, and they will fix redirects and embedded file links a few minutes later via a system settings update.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:24}} community-submitted {{PLURAL:24|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that had caused pages to scroll upwards when text near the top was selected. [https://phabricator.wikimedia.org/T364023]
'''Updates for technical contributors'''
* Editors can now use Lua modules to filter and transform tabular data for use with [[mw:Special:MyLanguage/Extension:Chart|Extension:Chart]]. This can be used for things like selecting a subset of rows or columns from the source data, converting between units, statistical processing, and many other useful transformations. [[mw:Special:MyLanguage/Extension:Chart/Transforms|Information on how to use transforms is available]]. [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Chart/Project/Updates]
* The <code dir=ltr>all_links</code> variable in [[Special:AbuseFilter|AbuseFilter]] is now renamed to <code dir=ltr>new_links</code> for consistency with other variables. Old usages will still continue to work. [https://phabricator.wikimedia.org/T391811]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.7|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Growth/Newsletters/34|Growth newsletter]] is available. It includes: the recent updates for the "Add a Link" Task, two new Newcomer Engagement Features, and updates to Community Configuration.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:21, 23 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28870688 -->
== Wikipedia translation of the week: 2025-27 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Queen Elizabeth University Hospital]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:QEUH.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Queen Elizabeth University Hospital''' (QEUH) is a 1,677-bed acute hospital located in Govan, in the south-west of Glasgow, Scotland. The hospital is built on the site of the former Southern General Hospital and opened at the end of April 2015. The hospital comprises a 1,109-bed adult hospital, a 256-bed children's hospital and two major Emergency Departments; one for adults and one for children. There is also an Immediate Assessment Unit for local GPs and out-of-hours services, to send patients directly, without having to be processed through the Emergency Department. The retained buildings from the former Southern General Hospital include the Maternity Unit, the Institute of Neurological Sciences, the Langlands Unit for medicine of the elderly and the laboratory. The whole facility is operated by NHS Greater Glasgow and Clyde, and is one of the largest acute hospital campuses in Europe.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:05, 30 June 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-27 ==
<section begin="technews-2025-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/27|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] has been enabled on all Wikipedias. The extension makes it easier to organize and participate in collaborative activities, like edit-a-thons and WikiProjects, on the wikis. The extension has three features: [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Collaboration List]], and [[m:Campaigns/Foundation Product Team/Invitation list|Invitation List]]. To request the extension for your wiki, visit the [[m:Special:MyLanguage/CampaignEvents/Deployment status#How to Request the CampaignEvents Extension for your wiki|Deployment information page]].
'''Updates for editors'''
* AbuseFilter maintainers can now [[mw:Special:MyLanguage/Extension:IPReputation/AbuseFilter variables|match against IP reputation data]] in [[mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilters]]. IP reputation data is information about the proxies and VPNs associated with the user's IP address. This data is not shown publicly and is not generated for actions performed by registered accounts. [https://phabricator.wikimedia.org/T354599]
* Hidden content that is within [[mw:Special:MyLanguage/Manual:Collapsible elements|collapsible parts of wikipages]] will now be revealed when someone searches the page using the web browser's "Find in page" function (Ctrl+F or ⌘F) in supporting browsers. [https://phabricator.wikimedia.org/T327893][https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#browser_compatibility]
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] A new feature, called [[mw:Special:MyLanguage/Help:TemplateData/Template discovery|Favourite Templates]], will be deployed later this week on all projects (except English Wikipedia, which will receive the feature next week), following a piloting phase on Polish and Arabic Wikipedia, and Italian and English Wikisource. The feature will provide a better way for new and experienced contributors to recall and discover templates via the template dialog, by allowing users to put templates on a special "favourite list". The feature works with both the visual editor and the wikitext editor. The feature is a [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|community wishlist focus area]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that had caused some Notifications to be sent multiple times. [https://phabricator.wikimedia.org/T397103]
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.8|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:41, 30 June 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28917415 -->
== Wikipedia translation of the week: 2025-28 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Non-constituency Member of Parliament]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
A '''Non-constituency Member of Parliament''' (NCMP) is a member of an opposition political party in Singapore who, as stipulated in Article 39 of the Constitution and the Parliamentary Elections Act, is declared to have been elected a Member of Parliament (MP) without constituency representation, despite having lost in a general election, by virtue of having been one of the opposition candidates with the highest vote shares among the unelected.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:10, 7 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28788623 -->
== Tech News: 2025-28 ==
<section begin="technews-2025-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/28|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Help:Temporary accounts|Temporary accounts]] have been rolled out on 18 large and medium-sized Wikipedias, including German, Japanese, French, and Chinese. Now, about 1/3 of all logged-out activity across wikis is coming from temporary accounts. Users involved in patrolling may be interested in two new documentation pages: [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Access to IP|Access to IP]], explaining everything related to access to temporary account IP addresses, and [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Repository|Repository]] with a list of new gadgets and user scripts.
'''Updates for editors'''
* Anyone can play an experimental new game, [[mw:Special:MyLanguage/New Engagement Experiments/WikiRun|WikiRun]], that lets you race through Wikipedia by clicking from one article to another, aiming to reach a target page in as few steps and in as little time as possible. The project's goal is to explore new ways of engaging readers. [https://wikirun-game.toolforge.org/ Try playing the game] and let the team know what you think [[mw:Talk:New Engagement Experiments/WikiRun|on the talk page]].
* Users of the Wikipedia Android app in some languages can now play the new [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/TrivaGame|trivia game]]. ''Which came first?'' is a simple history game where you guess which of two events happened earlier on today's date. It was previously available as an A/B test. It is now available to all users in English, German, French, Spanish, Portuguese, Russian, Arabic, Turkish, and Chinese. The goal of the feature is to help engage with new generations of readers. [https://meta.wikimedia.org/wiki/Special:MyLanguage/Tech/News/2025/22]
* Users of the iOS Wikipedia App in some languages may see a new tabbed browsing feature that enables you to open multiple tabs while reading. This feature makes it easier to explore related topics and switch between articles. The A/B test is currently running in Arabic, English, and Japanese in selected regions. More details are available on the [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Tabbed Browsing (Tabs)|Tabbed Browsing project page]].
* Bureaucrats on Wikimedia wikis can now use [[{{#special:VerifyOATHForUser}}]] to check if users have enabled [[mw:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]]. [https://phabricator.wikimedia.org/T265726]
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] A new feature related to [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|Template Recall and Discovery]] will be deployed later this week to all Wikimedia projects: a [[mw:Special:MyLanguage/Help:TemplateData/Template discovery#Template categories|template category browser]] will be introduced to assist users in finding templates to put in their “favourite” list. The browser will allow users to browse a list of templates which have been organised into a given category tree. The feature has been requested by the community [[m:Special:MyLanguage/Community Wishlist/Wishes/Select templates by categories|through the Community Wishlist]].
* It is now possible to access watchlist preferences from the watchlist page. Also the redundant button to edit the watchlist has been removed. [https://www.mediawiki.org/wiki/Moderator_Tools/Watchlist]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* As part of [[mw:MediaWiki_1.44|MediaWiki 1.44]] there is now a unified built-in Notifications system that makes it easier for developers to send, manage, and customize notifications. Check out the updated documentation at [[mw:Manual:Notifications|Manual:Notifications]], information about migration in [[phab:T388663|T388663]] and details on deprecated hooks in [[phab:T389624|T389624]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.9|MediaWiki]]
'''Meetings and events'''
* [[d:Special:MyLanguage/Event:WikidataCon 2025|WikidataCon 2025]], the conference dedicated to Wikidata is now open for [https://pretalx.com/wikidatacon-2025/cfp session proposals] and for [[d:Special:RegisterForEvent/1340|registration]]. This year's event will be held online from October 31 – November 02 and will explore on the theme of "Connecting People through Linked Open Data".
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W28"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:06, 8 July 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28930584 -->
== Wikipedia translation of the week: 2025-29 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Immunolabeling]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Immunolabeling process image.png|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Immunolabeling''' is a biochemical process that enables the detection and localization of an antigen to a particular site within a cell, tissue, or organ. Antigens are organic molecules, usually proteins, capable of binding to an antibody. These antigens can be visualized using a combination of antigen-specific antibody as well as a means of detection, called a tag, that is covalently linked to the antibody
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
---[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 13:44, 14 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28945528 -->
== Tech News: 2025-29 ==
<section begin="technews-2025-W29"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/29|Translations]] are available.
'''Updates for editors'''
* [[mw:Special:MyLanguage/Help:TemplateData/Template discovery#Featured templates|Featured templates]], a new feature related to [[m:Special:MyLanguage/Community Wishlist/Focus areas/Template recall and discovery|Template Recall and Discovery]] will be deployed this week to all Wikimedia projects: With this feature, editors will be able to quickly access a list of templates that are likely to be useful. These templates will be displayed in a list, under the "featured" tab of the template discovery interface. Administrators can define the list via the Community Configuration interface. The feature fulfills a request by the community [[m:Special:MyLanguage/Community Wishlist/Wishes/Easy access Templates|through the Community Wishlist]]. [https://phabricator.wikimedia.org/T367428][https://phabricator.wikimedia.org/T392896]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the request to add Malayalam fonts in the [[oldWikisource:Special:MyLanguage/Wikisource:WS Export|Wikisource Book Export Tool]] was resolved and now, the rendering of Malayalam letters in exported Wikisource books are accurate. [https://phabricator.wikimedia.org/T374457]
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.10|MediaWiki]]
'''In depth'''
* Developers, designers, and all Wikimedians are invited to [https://phabricator.wikimedia.org/project/board/7953/ submit a project idea] for the Wikimania Hackathon 2025. Read [https://diff.wikimedia.org/2025/06/30/call-for-projects-wikimania-hackathon-2025-is-coming-to-nairobi/ this Diff blog post] for more details.
'''Meetings and events'''
* [[m:WikiIndaba conference 2025|WikiIndaba 2025]] scholarship application and program submission is open until 23:59 GMT on July 20. WikiIndaba is a regional conference for African Wikimedians both on the continent and in the diaspora to unite and grow together. Submit [https://docs.google.com/forms/d/e/1FAIpQLSdJTv68R1OPASXXDfpIl8EWiMLTM-TDwh6_5gNVvFuWccFZ2Q/viewform your scholarship application] and [https://ee.kobotoolbox.org/x/BI3omIfH program proposal] now!
* [https://br.wikimedia.org/wiki/WikiCon_Brasil_2025 WikiCon Brasil 2025] will take place on July 19-20 in Salvador, Bahia, Brazil. The Brazilian community members are encouraged to register and attend!
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/29|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:10, 14 July 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=28980963 -->
== Wikipedia translation of the week: 2025-30 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Vespa analis]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Plumpy hornet on the ground - 1.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Vespa analis''''', the yellow-vented hornet, is a species of common hornet found in Southeast Asia
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:28, 21 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=28984647 -->
== Tech News: 2025-30 ==
<section begin="technews-2025-W30"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/30|Translations]] are available.
'''Updates for editors'''
* The Translation Suggestions feature in the [[mw:Special:MyLanguage/Content translation|Content Translation tool]] now has another level of article filters added to the "[https://en.wikipedia.org/w/index.php?title=Special:ContentTranslation&filter-type=automatic&filter-id=previous-edits&active-list=suggestions&from=en&to=fi#/ ... More]" category. Translators who use the Suggestions feature can now select and receive article suggestions that are customized to geographical locations of their interest using the new "{{int:Cx-sx-suggestions-filters-tab-regions}}" filter. [https://phabricator.wikimedia.org/T113257]
* Administrators can now limit "Add a Link" to newcomers. The [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|"Add a Link"]] Structured Task [[mw:Special:MyLanguage/Growth/Constructive activation experimentation#Enwiki A/B test & "Add a Link" Improvements (Wiki Experiences 1.2.11 & 1.2.16)|helps new account holders start editing]], but some communities have requested the ability to restrict it to its intended audience: newcomers. Administrators can configure this setting within the [[Special:CommunityConfiguration/GrowthSuggestedEdits|Community Configuration]] feature.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:29}} community-submitted {{PLURAL:29|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* For AbuseFilter editors on [[phab:T392144|some wikis]], it is now possible to filter edits based on the RevertRisk score of the edit being attempted. It is only populated if the action being evaluated is an edit. For more information, please see the [[mw:Special:MyLanguage/Extension:ORES/AbuseFilter variables#What variables are available for use|ORES/AbuseFilter variables]] documentation.
* The [[mw:Special:MyLanguage/Beta Cluster|Beta Cluster]] wikis have [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/YDABPV75LADRQCXMJAFWUP256N4EQ25B/|been moved]] from <code dir=ltr>beta.wmflabs.org</code> to <code dir=ltr>beta.wmcloud.org</code>. Users may need to update URLs in any tools, or in their password managers. Any related issues can be [[phab:T289318|reported in the task]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.11|MediaWiki]]
'''Meetings and events'''
* [[m:Special:MyLanguage/WikiCite 2025|WikiCite 2025]] will take place from 29–31 August, both online and in-person in Bern, Switzerland. The event's goals are to reconnect communities, institutions, and individuals working with open citations, bibliographic data, and the Wikidata/Wikibase ecosystem. Registration is open and the call for proposals will be announced soon. [https://lists.wikimedia.org/hyperkitty/list/wikidata@lists.wikimedia.org/message/KQZUG3ETKLBWPBYSB2YAWZIRPWHS24TG/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/30|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:43, 21 July 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29005283 -->
== Wikipedia translation of the week: 2025-31 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Fernando de Noronha Marine National Park]]'''<br /> <small>''([[:pt:Parque Nacional Marinho de Fernando de Noronha]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Baía dos Porcos - Fernando de Noronha (32811749914).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Fernando de Noronha Marine National Park''' (Portuguese: Parque Nacional Marinho de Fernando de Noronha) is a national park in the state of Pernambuco, Brazil.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:40, 28 July 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29047614 -->
== Tech News: 2025-31 ==
<section begin="technews-2025-W31"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/31|Translations]] are available.
'''Weekly highlight'''
* The Community Tech team will be focusing on wishes related to Watchlists and Recent Changes pages, over the next few months. They are looking for feedback. Please [[m:Special:MyLanguage/Community Wishlist/Updates#July 24, 2025: Watchlists and Recent Changes pages|read the latest update]], and if you have ideas, please [[m:Special:MyLanguage/Community Wishlist|submit a wish]] on the topic.
'''Updates for editors'''
* The Wikimedia Commons community has decided to block [[:mw:Special:MyLanguage/Upload dialog|cross-wiki uploads]] to Wikimedia Commons, for all users without autoconfirmed rights on that wiki, starting on August 16. This is because of [[:c:Commons:Cross-wiki media upload tool/History|widespread problems]] related to files that are uploaded by newcomers. Users who are affected by this will get an error message with a link to the less restrictive UploadWizard on Commons. Please help translating the [[:c:Special:MyLanguage/MediaWiki:Abusefilter-disallowed-cross-wiki-upload|message]] or give feedback on the message text. Please also update your local help pages to explain this restriction. [https://phabricator.wikimedia.org/T370598]
* On wikis with temporary accounts enabled and Meta-Wiki, administrators may now set up a footer for the Special:Contributions pages of temporary accounts, similar to those which can be shown on IP and user-account pages. They may do it by creating the page named <code dir=ltr>MediaWiki:Sp-contributions-footer-temp</code>. [https://phabricator.wikimedia.org/T398347]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.12|MediaWiki]]
'''Meetings and events'''
* [[wmania:Special:MyLanguage/2025:Wikimania|Wikimania 2025]] will run from August 6–9. The [https://wikimedia.eventyay.com/talk/wikimania2025/schedule/ program is available] for you to plan which sessions you want to attend. Most sessions will be live-streamed, with exceptions for those that show the "no camera" icon. If you are joining online to watch live-streams and use the interactive features, please [[wmania:Special:MyLanguage/2025:Registration|register]] for a free virtual ticket. For example, you may be interested in technical sessions such as:
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/KFEFVG/ Temporary Accounts: Enhancing privacy for our unregistered editors]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/TVCVAB/ Building a Sustainable Future for Wikimedia Contributors]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/WTRQCJ/ A dozen visions for wikitext!]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/8YKKP9/ Coordinate Across Stakeholders with the Product and Technology Advisory Council]
* The [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Fall 2025|MediaWiki Users and Developers Conference, Fall 2025]] will be held 28–30 October 2025 in Hanover, Germany. This event is organized by and for the third-party MediaWiki community. You can propose sessions and register to attend.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/31|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:27, 29 July 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29051727 -->
== Wikipedia translation of the week: 2025-32 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Xie Zhiliu]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Xie Zhiliu''' (Chinese: 谢稚柳; 1910–1997) was a leading traditional painter, calligrapher, and art connoisseur of modern China.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:21, 4 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29077280 -->
== Tech News: 2025-32 ==
<section begin="technews-2025-W32"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/32|Translations]] are available.
'''Updates for editors'''
* Editors can now enable the [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/User Info|User Info card]]. This feature adds an icon next to usernames on history pages and similar user-contribution log pages. When you tap or click on the icon, it displays data related to that user account such as the number of edits, reverted edits, blocks, and more. It's part of a broader project to make it easier for moderators to evaluate account trustworthiness. The feature can be enabled in [[testwiki:Special:GlobalPreferences#mw-prefsection-rendering|your global preferences]], and later this week it will be available in local preferences. [https://phabricator.wikimedia.org/T386439]
* Everybody is invited to share comments on [[m:Special:MyLanguage/CampaignEvents/Collaborative contributions|Collaborative Contributions]], a project recently launched by the [[m:Special:MyLanguage/Connection Team|Connection team]]. The project aims to create a new way to display the impact of collaborative editing activities (such as edit-a-thons, backlog drives, and WikiProjects) on the wikis. Post your comments on the [[m:Talk:CampaignEvents/Collaborative contributions|project talk page]]. [https://phabricator.wikimedia.org/T378035]
* Administrators can now define the default block duration for temporary accounts. To do that, they need to create a page named <code dir=ltr>MediaWiki:Ipb-default-expiry-temporary-account</code> and use a value defined in <code dir=ltr>MediaWiki:Ipboptions</code>. This allows administrators to easily block temporary accounts for 90 days, which is functionally equivalent to an indefinite block. The advantage of this solution is that it does not clutter Special:BlockList. [[mw:Special:MyLanguage/Manual:Block and unblock#Default block duration options|More documentation]] is available. [https://phabricator.wikimedia.org/T398626]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Gadgets can now include <code dir=ltr>.vue</code> files. This makes it easier to develop modern user interfaces using [[mw:Vue.js|Vue.js]], in particular using [[mw:Special:MyLanguage/Codex|Codex]], the official design system of Wikimedia. [[wmdoc:codex/latest/icons/overview.html|Codex icons]] can be loaded through the gadget definition. [[mw:Special:MyLanguage/Extension:Gadgets#Pages|The documentation]] has examples. For user scripts that use Vue.js, an [[mw:API:CodexIcons|API module]] now exists to load Codex icons. [https://phabricator.wikimedia.org/T340460][https://phabricator.wikimedia.org/T311099]
* Module developers can now use a [[mw:Help:Extension:Translate/Message Bundles/Lua reference|Lua interface]] to simplify the preparation of Lua modules for translation on Meta-Wiki. This improvement makes it easier for translators to find and edit module strings without dealing with raw Lua code. It helps prevent mistakes that could break the module during translation. Module developers and translators are invited to [[commons:File:Translatable modules video demo July 2025.webm|watch the demo video]], read more about [[mw:Special:MyLanguage/Translatable modules|translatable modules]] to understand how it works, refer to Meta-Wiki's [[m:Module:User Wikimedia project|Module:User Wikimedia project]] for example usage, and [[mw:Talk:Translatable modules|share their feedback]] on how well it addresses the challenges in their workflow. The interface still has some performance issues, so it should not be used in widely used modules yet. [https://phabricator.wikimedia.org/T359918]
* Developers of external tools that connect to Wikimedia pages must set a user-agent that complies with [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|the user-agent policy]]. This policy will start to be more strongly enforced in August because of external crawlers that are [[diffblog:2025/04/01/how-crawlers-impact-the-operations-of-the-wikimedia-projects/|overusing]] Wikimedia's resources. Tools that are hosted on Wikimedia's Toolforge or Cloud VPS will not be affected by this for now, but should still set a user-agent. [[phab:T400119|More technical details are available]], and related questions are welcome in that task.
* Parsoid Read Views is going to be rolling out to some smaller Wikipedias over the next few weeks, following the successful transition of Wikivoyages and Wiktionaries to Parsoid Read Views. For more information, see the [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parsoid/Parser Unification]] project page. [https://phabricator.wikimedia.org/project/profile/7694/]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.13|MediaWiki]]
'''Meetings and events'''
* [[wmania:Special:MyLanguage/2025:Wikimania|Wikimania 2025]] will run from August 6–9. The [https://wikimedia.eventyay.com/talk/wikimania2025/schedule/ program is available] for you to plan which sessions you want to attend. Most sessions will be live-streamed, with exceptions for those that show the "no camera" icon. If you are joining online to watch live-streams and use the interactive features, please [[wmania:Special:MyLanguage/2025:Registration|register]] for a free virtual ticket. For example, you may be interested in technical sessions such as:
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/GEH9DH/ Wikimedia’s knowledge infrastructure in a changing internet: Establishing sustainable pathways for content reuse]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/7ELN9Q/ Wikifunctions is coming soon to a wiki near you!]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/ZMGVJV/ Shaping the Future of Wikipedia’s Reader Experience]
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/KCKTFZ/ Making Wikipedia More Readable: What Comes Next]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/32|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 03:41, 5 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29083927 -->
== Wikipedia translation of the week: 2025-33 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lethocerus patruelis]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lethocerus patruelis.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Lethocerus patruelis''''' is a giant water bug in the family Belostomatidae. It is native to southeastern Europe, through Southwest Asia, to Pakistan, India and Burma.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:20, 11 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29085671 -->
== Tech News: 2025-33 ==
<section begin="technews-2025-W33"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/33|Translations]] are available.
'''Updates for editors'''
* The WikiEditor toolbar now includes [[mw:Special:MyLanguage/Help:Extension:WikiEditor#Keyboard shortcuts|its keyboard shortcuts]] in the tooltips for its buttons. This will help to improve the discoverability of this feature. [https://phabricator.wikimedia.org/T400583]
* The [[m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] published a set of [[m:Special:MyLanguage/Product and Technology Advisory Council/August 2025 draft PTAC proposals for feedback|proposed experiments]] the Wikimedia Foundation can try to improve communication with community. Feedback on the proposals are welcomed until August 22 on [[m:Talk:Product and Technology Advisory Council/August 2025 draft PTAC proposals for feedback|this talk page]].
* The search bar on the Minerva skin (mobile) has been updated to use the same type-ahead search component that is used on the Vector 2022 skin. There are no changes in search functionality but there are minor visual changes. Specifically, the close-search button has been changed from an "X" to a back arrow. This helps to distinguish it from the other "X" button that is used to clear any text. [https://phabricator.wikimedia.org/T393944]
* Editors on some wikis will see a new toggle for "Group results by page" on watchlist, related changes, and recent changes pages. This is [[mw:Special:MyLanguage/Moderator Tools/Watchlist/Experiment|an A/B experiment]] that is planned to start on August 11, and will run for 3–6 weeks on the Bengali, Chinese, Czech, French, Greek, Portuguese, and Urdu Wikipedias. The experiment will examine how making this feature more discoverable might affect editors' ability to find the edits they are looking for. [https://phabricator.wikimedia.org/T396789]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* The multiwiki datasets of [[:wikt:en:Module:Unicode data|Unicode data]] have been moved to [[c:Category:Unicode Module Datasets|Category:Unicode Module Datasets]] on Wikimedia Commons, to follow the idea of "One common data source, multiple local wikis". Most wikis have been updated to use the Commons version. You can ask questions at [[c:Category talk:Unicode Module Datasets|the talkpage]]. [https://en.wiktionary.org/wiki/Module_talk:Unicode_data#Data_from_commons]
* Lua code can add warnings when something is wrong, by using the <code dir=ltr>mw.addWarning()</code> function. It is now possible to add more than one warning, instead of new warnings replacing old ones. If you maintain a Lua module that used warnings, you should check it still works as expected. [https://phabricator.wikimedia.org/T398390]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.14|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/33|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:30, 11 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29106516 -->
== Wikipedia translation of the week: 2025-34 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Ikiza]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:CIA map of Burundi and surrounding countries during 1972 killings.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Ikiza''' (variously translated from Kirundi as the Catastrophe, the Great Calamity, and the Scourge), or the Ubwicanyi (Killings), was a series of mass killings—often characterised as a genocide—which were committed in Burundi in 1972 by the Tutsi-dominated army and government, primarily against educated and elite Hutus who lived in the country. Conservative estimates place the death toll of the event between 100,000 and 150,000 killed, while some estimates of the death toll go as high as 300,000.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:43, 18 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29115447 -->
== Tech News: 2025-34 ==
<section begin="technews-2025-W34"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/34|Translations]] are available.
'''Updates for editors'''
* Later this week, people who are logged-in and have the "[[mw:Special:MyLanguage/Talk pages project/Feature summary|Discussion tools]]" [[Special:Preferences#mw-prefsection-betafeatures|Beta Feature]] enabled will gain the ability to "Thank" individual comments directly from talk pages, rather than needing to navigate to page history. [[mw:Special:MyLanguage/Talk pages project/Feature summary#Comment actions|Learn more about this feature]]. [https://phabricator.wikimedia.org/T400849]
* An A/B test comparing two versions of the desktop donate link launched on testwiki on 12 August and on English Wikipedia 14 August for 0.1% of logged out users on the desktop site. The experiment will run for three weeks, ending on 12 September. [https://phabricator.wikimedia.org/T395716]
* An A/A test to measure the baseline for reader retention was launched 12 August using [[wikitech:Experimentation Lab|Experimentation Lab]]. This measures the percentage of users who revisit a wiki after their initial visit over a 14-day period. No visual changes are expected. The experiment will run through 31 August. [https://phabricator.wikimedia.org/T399227]
* Five new wikis have been created:
** a {{int:project-localized-name-group-wikisource/en}} in [[d:Q34057|Tagalog]] ([[s:tl:|<code>s:tl:</code>]]) [https://phabricator.wikimedia.org/T388639]
** a {{int:project-localized-name-group-wikisource/en}} in [[d:Q36213|Madurese]] ([[s:mad:|<code>s:mad:</code>]]) [https://phabricator.wikimedia.org/T391747]
** a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q3450749|Rakhine]] ([[w:rki:|<code>w:rki:</code>]]) [https://phabricator.wikimedia.org/T392490]
** a {{int:project-localized-name-group-wikibooks/en}} in [[d:Q13324|Minangkabau]] ([[b:min:|<code>b:min:</code>]]) [https://phabricator.wikimedia.org/T395452]
** a {{int:project-localized-name-group-wiktionary/en}} in [[d:Q7598268|Standard Moroccan Amazigh]] ([[wikt:zgh:|<code>wikt:zgh:</code>]]) [https://phabricator.wikimedia.org/T399684]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:46}} community-submitted {{PLURAL:46|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.15|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/34|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W34"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:39, 19 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29127690 -->
== Wikipedia translation of the week: 2025-35 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Corallite]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Recent azooxanthellate Scleractinia (Cnidaria, Anthozoa) - ZooKeys-227-001-g004.jpeg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''corallite''' is the skeletal cup, formed by an individual stony coral polyp, in which the polyp sits and into which it can retract. The cup is composed of aragonite, a crystalline form of calcium carbonate, and is secreted by the polyp. Corallites vary in size, but in most colonial corals they are less than 3 mm (0.12 in) in diameter.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 25 August 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29115447 -->
== Tech News: 2025-35 ==
<section begin="technews-2025-W35"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/35|Translations]] are available.
'''Updates for editors'''
* [[File:Octicons-gift.svg|12px|link=|class=skin-invert|Wishlist item]] [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Template authors can now use additional CSS properties, since the CSS sanitizer used by [[mw:Special:MyLanguage/Help:TemplateStyles|TemplateStyles]] was updated. For example: <code>width: fit-content</code>; <code>ruby-align</code>; relative units such as <code>lh</code>; and custom strings in <code>list-style-type</code>. These improvements are a [[m:Special:MyLanguage/Community Wishlist/Wishes/Allow use of modern CSS in templates by updating the TemplateStyles CSS sanitizer|Community Wishlist wish]]. [https://phabricator.wikimedia.org/T271958][https://phabricator.wikimedia.org/T277755][https://phabricator.wikimedia.org/T293633][https://phabricator.wikimedia.org/T295088][https://phabricator.wikimedia.org/T326906][https://phabricator.wikimedia.org/T340057][https://phabricator.wikimedia.org/T360725][https://phabricator.wikimedia.org/T371809][https://phabricator.wikimedia.org/T375344][https://phabricator.wikimedia.org/T394619]
* On large wikis, the default time period to display edits from, within the Special:RecentChanges page, has been changed from 7 days to 1 day. This is part of a performance improvement project. This should have no user-facing impact due to the quantity of edits on these wikis. [https://phabricator.wikimedia.org/T399455]
* Administrators can now access the [[{{#special:BlockedExternalDomains}}]] page from the [[{{#special:CommunityConfiguration}}]] list page. This makes it easier to find. [https://phabricator.wikimedia.org/T393240]
* Wikimedia Commons videos were not shown in the Videos tab in Google Search. The problem was investigated and reported to Google who have now fixed the issue. [https://phabricator.wikimedia.org/T396168][https://meta.wikimedia.org/wiki/Community_Wishlist/Wishes/Do_something_about_Google_%26_DuckDuckGo_search_not_indexing_media_files_and_categories_on_Commons]
* One new wiki has been created: a {{int:project-localized-name-group-wiktionary/en}} in [[d:Q33014|Betawi]] ([[wikt:bew:|<code>wikt:bew:</code>]]) [https://phabricator.wikimedia.org/T402130]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:39}} community-submitted {{PLURAL:39|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Two fields of the [[mw:Special:MyLanguage/Manual:Recentchanges table|recentchanges database table]] are being removed. <code>rc_new</code> and <code>rc_type</code> are being removed in favor of <code>rc_source</code>. Queries to these older fields will start to fail starting this week and developers should use <code>rc_source</code> instead. These older fields were deprecated over 10 years ago and should not be in use. This is part of work to improve the performance and stability of queries to the recentchanges table. [https://phabricator.wikimedia.org/T400696]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.16|MediaWiki]]
'''In depth'''
* The latest quarterly [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/July|Language and Internationalization Newsletter]] is now available. This edition includes: support for new languages in MediaWiki and translatewiki; the start of the Language Onboarding and Development project to help support the growth of new and small wikis; updates on research projects; and more.
'''Meetings and events'''
* The next [[mw:Special:MyLanguage/Wikimedia Language and Product Localization/Community meetings#29 August 2025|Language Community Meeting]] is happening soon, August 29th at [https://zonestamp.toolforge.org/1756479600 15:00 UTC]. This week's meeting will cover: the Avro keyboard developers from Wikimedia Bangladesh, who were recently awarded a national award for their contributions to this keyboard; and other topics.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/35|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:13, 26 August 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29175124 -->
== Wikipedia translation of the week: 2025-36 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Diksam Plateau]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Dixam plateau (6407168437).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Diksam Plateau''' or Dixam Plateau (Arabic: دكسم) is a limestone plateau in Socotra, Yemen. The Firmihin forest, located east of the Dirhur canyon within the plateau, has the highest concentration of Dragon's Blood Trees on the entire island.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:40, 1 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29195081 -->
== Tech News: 2025-36 ==
<section begin="technews-2025-W36"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/36|Translations]] are available.
'''Weekly highlight'''
* The Editing team wants to compile a list of templates, jargon terms, and policies used in edit summaries when a copyright violation is removed. This will help them identify the number of edits reverted due to copyright issues. We invite community members from the following Wikis to list these terms in [[Phab:T402601|T402601]], or to share their list with [[User:Trizek (WMF)|Trizek_(WMF)]]: {{int:project-localized-name-arwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-cswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-dewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-enwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-eswiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-fawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-frwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-hewiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-idwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-itwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-jawiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-kowiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-nlwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-plwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ptwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-trwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-ukwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-viwiki/en}}{{int:comma-separator/en}}{{int:project-localized-name-zhwiki/en}}. This project is open until September 9th 2025.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] has been enabled for all Wikisources. The extension makes it easier to organize and participate in collaborative activities, like edit-a-thons and WikiProjects, on the wikis. The extension has three features: [[m:Special:MyLanguage/Event Center/Registration|Event Registration]], [[m:Special:MyLanguage/CampaignEvents/Collaboration list|Collaboration List]], and [[m:Special:MyLanguage/Connection Team/Invitation list|Invitation List]]. To request the extension for your wiki, visit the Deployment information page. [https://meta.wikimedia.org/wiki/CampaignEvents/Deployment_status#How_to_Request_the_CampaignEvents_Extension_for_your_wiki]
* The lists in the footer of the editing interface, such as "Templates used on this page," will now be organized into columns when there is enough space. This enhancement minimizes scrolling when editing lengthy articles on Wikipedia. [https://phabricator.wikimedia.org/T401066]
* On September 3rd, 2025 we will increase the sampling percentages of our [[mw:Special:MyLanguage/Moderator Tools/Watchlist/Experiment#Scope of the experiment|group by toggle experiment]] of the <code>Special:RecentChanges</code>, <code>Special:Watchlist</code>, and <code>Special:RelatedChanges</code> pages on the Chinese, French, and Portuguese Wikipedias to 100 percent, allowing more editors to be part of this experiment. This adjustment is intended to ensure we have sufficient data to make informed decisions when evaluating the experiment results. [https://phabricator.wikimedia.org/T402958][https://phabricator.wikimedia.org/T396789]
* Upon clicking an empty search bar, logged-out users will see suggestions of articles for further reading on English Wikipedia beginning the week of September 22. The feature will be available on both desktop and mobile. All non-English wikis received this change in June and July. The goal is to make it easier for users to find articles. [[mw:Special:MyLanguage/Reading/Web/Content Discovery Experiments/Search Suggestions|Learn more]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:37}} community-submitted {{PLURAL:37|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.17|MediaWiki]]
'''In depth'''
* Wikifunctions now has a new capability called "lightweight enumeration types", an enumeration type is simply a fixed set of values that's in the type's definition. This capability makes it quick and easy to define such a type, and allows for the reuse of values that are already present in Wikidata. Here is [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-07-19|a newsletter]] to learn more.
* The latest [[mw:Special:MyLanguage/Readers/Newsletter updates#August 2025: Newsletter #1|Readers Newsletter]] is now available. This edition includes: the formation of two new teams — Reader Growth and Reader Experience; insights into declining pageviews and account creations; highlights from the Wikimania Nairobi panel on improving the reading experience; upcoming experiments to engage new and existing readers; and more.
'''Meetings and events'''
* Spotlight on some Wikimania 2025 Sessions:
** Identifying AI-generated text by searching for ISBNs whose checksums fail: Mathias Schindler of WMDE [https://www.youtube.com/watch?v=Dw9o8Lsl974&t=15910s shared tools to help communities search for these].
** [https://wikimedia.eventyay.com/talk/wikimania2025/talk/TCHZKH/ La durabilité du mouvement Wikimedia face aux défis actuels et futurs]: This session explored how Wikimedia can stay a trusted source of knowledge in the age of generative AI, information overload, and disinformation.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/36|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:51, 1 September 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29196010 -->
== Wikipedia translation of the week: 2025-37 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Ttongsul]]'''<br /> <small>''([[:ja:トンスル]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Ttongsul (imitation).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''ttongsul''' (똥술), o vino di feci, è una tradizionale preparazione medicinale coreana con gradazione alcolica al 9% a base di feci, solitamente umane e preferibilmente di bambino. Nato probabilmente traendo spunto dalla medicina tradizionale cinese, nelle credenze popolari il vino di feci avrebbe proprietà benefiche per molti tipi di malesseri: sarebbe un rimedio per dolori muscolari, ustioni, infiammazioni, epilessia e fratture ossee.
Sebbene alcuni media occidentali abbiano in passato riportato che questa bevanda sia diffusa tra la popolazione coreana, al giorno d'oggi un numero molto limitato di persone ne fa uso, dopo aver subito un declino di popolarità nei secoli scorsi, tanto che la maggioranza dei giovani coreani non ne ha mai sentito parlare.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:28, 8 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29195081 -->
== Tech News: 2025-37 ==
<section begin="technews-2025-W37"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/37|Translations]] are available.
'''Weekly highlight'''
* The Editing team is working on a new check: [[mw:Special:MyLanguage/Paste check|Paste check]]. This check informs newcomers who paste text into Wikipedia that the content might not be accepted. This check is an effort to increase the likelihood that the new content people are adding to Wikipedia is aligned with the Movement's commitment to offering information under a free content license. This check will soon be tested at a few wikis. If your community is interested in this test, please [[phab:T403680|tell us in this task]], or [[mw:Talk:Edit check|contact the team]].
'''Updates for editors'''
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] Later this week, users of the "{{int:codemirror-beta-feature-title}}" [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] will be able to use a [[w:en:Lint (software)|linting tool]] to see errors or other potential problems in wikitext in real time. See the [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|help page for more information]]. [https://phabricator.wikimedia.org/T381577]
* [[File:Octicons-tools.svg|12px|link=|class=skin-invert|Advanced item]] When browsing a wiki (like <code dir=ltr>en.wikipedia.org</code>), the software responds in one of two ways: a desktop page, or a redirect to a mobile version on an "m" domain (like <code dir=ltr>en.m.wikipedia.org</code>). Over the next three weeks, MediaWiki will start displaying the mobile version to mobile devices directly on the standard domain, without this redirect. This change does not affect existing m-dot URLs, or the "Desktop view" opt-out. [[mw:Requests for comment/Mobile domain sunsetting/2025 Announcement|Learn more]]. [https://phabricator.wikimedia.org/T214998]
* When an edit changes the categories of a page, the changes to the category membership counts are now happening asynchronously. This improves the speed of saving edits, especially when moving many pages to or from the same category, and reduces the risk of site outages, but it means that the counts can show outdated information for a few minutes. [https://phabricator.wikimedia.org/T365303]
* Edits on Wikidata to qualifiers (properties and values) and references (properties and values) in a Wikidata item statement will now not add entries to the RecentChanges or Watchlist pages on all other Wikis. This is a temporary change to improve performance while other solutions are created. Wikidata's own pages remain unchanged. [[m:Wikidata For Wikimedia Projects/Reduce change propagation noise#Phase 1: Turn off (temporarily) Qualifiers and References Wikidata edits to the Recent Changes tables|Learn more]]. [https://phabricator.wikimedia.org/T401286][https://phabricator.wikimedia.org/T400698]
* Japanese-language wikis have had a major upgrade to the way that search works. The new search should generally give more accurate and more relevant search results. [https://phabricator.wikimedia.org/T318269]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.18|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/37|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 01:15, 9 September 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29238161 -->
== Wikipedia translation of the week: 2025-38 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pak Kum-chol]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Pak Kum-chol in 1961 (cropped).jpg|center]]
<div style="text-align:left; padding: .4em;">
'''Pak Kum-chol''' was a North Korean politician. Having been a guerrilla during the anti-Japanese struggle, he became a high-ranking politician after the liberation of Korea. Pak aligned himself with his former guerrilla brothers in arms from the Kapsan Operation Committee to form a faction within the ruling Workers' Party of Korea (WPK) called the "Kapsan faction". This faction sought to replace Kim Il Sung with Pak. Kim retaliated by purging the faction in 1967 in what is known as the Kapsan faction incident.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:18, 15 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29249252 -->
== Tech News: 2025-38 ==
<section begin="technews-2025-W38"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/38|Translations]] are available.
'''Updates for editors'''
* References lists that are made using the <code dir=ltr><nowiki><references/></nowiki></code> [[mw:Special:MyLanguage/Help:Cite#references-tag|tag]] will now automatically display with columns in Vector 2022 when readers are using its 'standard' settings for text-size and page-width. [https://phabricator.wikimedia.org/T334941]
* Starting in the week of October 6, on [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/small.dblist|small wikis]] and [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/medium.dblist|medium wikis]] that have the [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] enabled, all autoconfirmed users will be able to use [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] as an organizer. No changes will be made for [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/large.dblist|large wikis]] unless requested in Phabricator. This change is being made to make it easier for more people to use Event Registration, especially on wikis that are less likely to have policies related to the Event Organizer right. [[m:Special:MyLanguage/CampaignEvents/Proposal to grant autoconfirmed users on small and medium wikis the organizer access to the event registration tool|Learn more]].
* Users that search using regular expressions (regex) can now use additional features including:
** for the <code dir=ltr>intitle:</code> keyword: [[mw:Special:MyLanguage/Help:CirrusSearch#Metacharacters|metacharacters]] for start-of-line (<code dir=ltr>^</code>) and end-of-line (<code dir=ltr>$</code>) anchors [https://phabricator.wikimedia.org/T317599]
** for both <code dir=ltr>intitle:</code> and <code dir=ltr>insource:</code> keywords: shorthand [[mw:Special:MyLanguage/Help:CirrusSearch#Character_Classes|character classes]] for digits (<code dir=ltr>\d</code>), whitespace (<code dir=ltr>\s</code>), and word characters (<code dir=ltr>\w</code>); and [[mw:Special:MyLanguage/Help:CirrusSearch#Escape codes|escape codes]] for line feed (<code dir=ltr>\r</code>), newline (<code dir=ltr>\n</code>), tab (<code dir=ltr>\t</code>), and unicode (e.g. <code dir=ltr>\uHHHH</code>). [https://phabricator.wikimedia.org/T403212]
* When you search for text that looks like an IP, the system will now show search results. It used to take you to the contributions for that IP instead of showing search results. [https://phabricator.wikimedia.org/T306325]
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on September 24. This is planned at [https://zonestamp.toolforge.org/1758726000 15:00 UTC]. This is for the datacenter server switchover backup tests which happen twice a year. You can [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|read more about the background and details of this process on the Diff blog]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:24}} community-submitted {{PLURAL:24|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug was fixed that affected users who used the page-tabs to switch from wikitext editing of a section into the visualeditor. [https://phabricator.wikimedia.org/T401043]
'''Updates for technical contributors'''
* The MediaWiki Interfaces team is redesigning the Wikimedia REST API Sandbox with Codex. If you have feedback on improvements for the API documentation or what makes developer experiences smooth (or frustrating), you’re invited to [https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2aZzbXeQvjOF7gB1fJXiwAYemQjKf4sXNaRODPA7_obFyNBwkzNkoVCoTF-aeov89kIjXHbCQm join an upcoming discovery interview], or [[mw:MediaWiki Interfaces Team/Developer Feedback/Wikimedia Web APIs|leave feedback onwiki]]. [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/C4FBAOA57PH6G5ORVMAUF5TGYBLZDU5Q/|Learn more]].
* Edits to Wikidata aliases (an alternative name for an item or a property) will now be shown in RecentChanges and Watchlist entries on other wikis less often, reducing unnecessary notifications. This will reduce the overall quantity of 'noisy' entries. Wikidata's own pages remain unchanged. [[m:Wikidata For Wikimedia Projects/Reduce change propagation noise#Phase 1: More granular Alias tracking|Learn more]]. [https://phabricator.wikimedia.org/T401288]
* The new [https://www.unicode.org/versions/Unicode17.0.0/ Unicode 17.0] version has been released. The [[:c:Category:Unicode Module Datasets|datasets on Commons]] for the [[:d:Q39301585|Module:Unicode data]] have been updated. Wikipedias that do not use the Commons datasets should either update their own data or switch to the Commons datasets.
* Users of the [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]] Structured Contents endpoints can now access [https://enterprise.wikimedia.com/blog/parsed-wikipedia-tables/ Parsed Tables]. The new Parsed Tables feature extracts and represents Wikipedia tables in structured JSON. This improves machine accessibility as part of the [https://enterprise.wikimedia.com/api/structured-contents/ Structured Contents initiative]. Structured Contents output is freely available through the [https://enterprise.wikimedia.com/docs/on-demand/#article-structured-contents-beta On-demand API], or through Wikimedia Cloud Services.
* A [https://www.kaggle.com/datasets/wikimedia-foundation/english-wikipedia-people-dataset dataset of English Wikipedia biographical information] from [[m:Special:MyLanguage/Wikimedia Enterprise|Wikimedia Enterprise]] has been published on Kaggle, for evaluation and research. This provides structured data from more than 1.5 million biographies, including birth and death dates, education, affiliations, careers, awards, and more (from a June 2024 snapshot).
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.19|MediaWiki]]
'''Meetings and events'''
* [[wmania:Special:MyLanguage/2026:Scholarships|Scholarship applications]] for Wikimania 2026 in Paris, France, are open until October 31.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/38|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:08, 15 September 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29263921 -->
== Wikipedia translation of the week: 2025-39 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Federation of Central America (1921–1922)]]'''<br /> <small>''([[:es:Federación de Centro América (1921-1922)]]) ([[:ar:اتحاد أمريكا الوسطى (1921-1922)]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Central America's Northern Triangle (orthographic projection).png|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Federation of Central America''' (Spanish: Federación de Centro América)[1] was a short-lived federal republic that existed in Central America between 1921 and 1922. The federation consisted of the Central American nations of El Salvador, Guatemala, and Honduras.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:45, 22 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29311347 -->
== Tech News: 2025-39 ==
<section begin="technews-2025-W39"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/39|Translations]] are available.
'''Weekly highlight'''
* [https://zonestamp.toolforge.org/1758726000 On September 24th at 15:00 UTC], all Wikimedia sites users will experience a brief read-only period due to a scheduled [[m:Special:MyLanguage/Tech/Server switch|datacenter server switchover]]. The Wikimedia Foundation's Site Reliability Engineering (SRE) team will redirect all traffic from one primary server to its backup. You can listen to the switchover using the [http://listen.hatnote.com/ "Listen to Wikipedia"] tool, where you will hear edits stop for a few minutes during the read-only phase, then resume. This twice-yearly datacenter server switchover ensures reliability by testing the backup datacenter, so that our sites can stay online even if the primary datacenter fails. You can [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|read more about the process on the Diff blog]].
'''Updates for editors'''
* Editors of [[f:Special:Mylanguage/Wikifunctions:Status updates/2025-09-12#Next round of Wiktionaries to receive embedded Wikifunctions calls|60 more Wiktionaries]] will soon be able to call [[f:Special:MyLanguage/Wikifunctions:Introduction|functions from Wikifunctions]] and integrate them into their pages. A function takes one or more inputs and transforms them into a desired output, like adding numbers, converting miles to meters, calculating elapsed time, or declining a word into a case. They will join the other [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-08-29#Wikifunctions available on 65 Wiktionaries|65 Wiktionary language editions]], which already have access to embedded Wikifunctions calls. Later this year, plans are in place to expand to more Wiktionaries and the Incubator.
* A new [[mw:Special:MyLanguage/Help:Magic words#Technical metadata of another page|parser function]] has been added: <code><nowiki>{{#contentmodel}}</nowiki></code>. Template editors and admins can use it to get the localized or canonical name of the [[mw:Special:MyLanguage/Help:ChangeContentModel|content model]] of a specific page. The function makes it easier to create and edit system messages, such as ''MediaWiki:editinginterface'', even when you switch types of pages, like wiki, JavaScript, CSS or JSON page. [https://phabricator.wikimedia.org/T328254]
* Adding or editing a <code>DISPLAYTITLE</code> for an article using VisualEditor will no longer be broken. Editors who use VisualEditor mode to modify the <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> would no longer have the literal text "DISPLAYTITLE" or its localized variant added to their articles. A list of pages that may have been affected and might need cleanup is documented in [[phab:P83438|this ticket]].
* Beta users of the Wikipedia Android app can now try the redesigned [[mw:Special:MyLanguage/Wikimedia Apps/Team/Android/Activity Tab Experiment|Activity tab]], which replaces the Edits tab. The new tab offers personalized insights into reading, editing, and donation activity, while simplifying navigation and making app use more engaging.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:12}} community-submitted {{PLURAL:12|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.20|MediaWiki]]
'''In depth'''
* Wikifunctions users can now import many essential facts involving [[f:Special:MyLanguage/Z6011|geo-coordinates]], [[f:Special:MyLanguage/Z6010|quantities]] and [[f:Special:MyLanguage/Z6064|time]] values from Wikidata. This is made possible by the creation of Wikifunctions types for these values, which makes them available for use by functions in Wikifunctions. Learn more about how this works in [[c:File:ImportingWikidataDatatypesIntoWikifunctions.webm|this video]] and Wikifunctions' [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-08-01#News in Types I: Wikidata quantity|August 1 newsletter]] (for quantities) and [[f:Special:MyLanguage/Wikifunctions:Status updates/2025-08-22#News in Types: Wikidata geo-coordinate|August 22 newsletter]] (for geo-coordinates).
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/39|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22:56, 22 September 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29305556 -->
== Wikipedia translation of the week: 2025-40 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Palazzo delle Poste (Latina)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Postelittoria2.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''Palazzo delle Poste''', fino al 1945 Ricevitoria Postelegrafonica di Littoria, è un edificio postale di Latina, situato in piazzale dei Bonificatori.
Costruito nel 1932 in stile razionalista con influenze futuriste, riscontrabili nell'utilizzo di ampie superfici vetrate e di volumi verticali, oltre che per la presenza di l’utilizzo di materiali e scelte di design molto in voga all'epoca come, come i mattoni a vista, il travertino di Tivoli e l'Anticorodal (una lega di alluminio), ospita l'ufficio postale Latina Centro.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:58, 29 September 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29341788 -->
== Tech News: 2025-40 ==
<section begin="technews-2025-W40"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/40|Translations]] are available.
'''Weekly highlight'''
* A major software upgrade has been made to [[phab:|Phabricator]]. The update introduces performance improvements, a refreshed search interface, enhancements to Maniphest task search, updates to user profile pages and project workboards, new Herald automation features, as well as general text input, mobile experience improvements and more. [https://phabricator.wikimedia.org/phame/post/view/321/iterative_improvements_september_2025/]
'''Updates for editors'''
* The Community Tech team will release the new Community Wishlist extension on October 1, that will improve the way wishes will be submitted. The new extension will allow users to add tags to their wishes to better categorise them, and (in a future iteration) to filter them by status, tags and focus areas. It will also be possible to support individual wishes again, as requested by the community in many instances. The old system will be retired. There will be a brief period of downtime while the extension is deployed and wishes are migrated to the new system. You can read more about this [[:m:Special:MyLanguage/Community Wishlist/Updates|in the latest update]] or you can consult the [[:mw:Special:MyLanguage/Help:Extension:CommunityRequests|current documentation on MediaWiki]].
* As announced [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|on Diff blog]], the production trial of the [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|hCaptcha]] service for bot detection has begun. The trial is currently using hCaptcha to protect account creation on Chinese, Persian, Portuguese, Indonesian, Japanese, and Turkish Wikipedias, where it will replace our existing [[mw:Special:MyLanguage/Extension:ConfirmEdit#FancyCaptcha|CAPTCHA]] (FancyCaptcha). The goal with the trial is to better block bots while also improving usability and accessibility for users who encounter CAPTCHA challenges.
* The [[mw:Special:MyLanguage/Extension:CampaignEvents|CampaignEvents]] extension has been [[m:Special:MyLanguage/CampaignEvents/Deployment status|deployed]] to Wikimedia Commons. The extension makes it easier to organize and participate in collaborative activities, like edit-a-thons and WikiProjects, on the wikis. On Commons, anyone who is a registered user can use it as an event participant. To use it as an organizer, someone needs to have the [[c:Special:MyLanguage/Commons:Event organizers|event organizer right]].
* [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new feature to re-use references with different details has been released to German Wikipedia. You can [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#test|test the feature]] on testwiki or [https://en.wikipedia.beta.wmcloud.org/wiki/Sub-referencing on betawiki] as well. Please share your thoughts on [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Templates used in sub-references|using templates in sub-references]] or [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Pilot wikis|volunteer to become a pilot wiki]].
* On wikis using the [[mw:Special:MyLanguage/Help:Growth/Mentorship|Mentorship]] system, communities can now opt experienced editors out of Mentorship through [[{{#special:CommunityConfiguration/Mentorship}}]]. Within this setting, communities may define thresholds, based on edit count and account age, to decide when an editor is considered experienced enough to no longer receive Mentorship. [https://phabricator.wikimedia.org/T403563]
* The Editing Team and the Machine Learning Team are working on a new check for newcomers: [[mw:Special:MyLanguage/Edit check/Tone Check|Tone check]]. Using a prediction model, this check will encourage editors to improve the tone of their edits, using artificial intelligence. We invite volunteers to review the first version of the Tone language model for the following languages: Arabic, Czech, German, Hebrew, Indonesian, Dutch, Polish, Russian, Turkish, Chinese, Farsi, Italian, Norwegian, Romanian and Latvian. Users from these wikis interested in reviewing this model are [[mw:Special:MyLanguage/Edit_check/Tone_Check/Model_evaluation|invited to sign up at MediaWiki.org]]. The deadline to sign up is on October 3, which will be the start date of the test.
* The rollout of [[:mw:Special:MyLanguage/Help:Manage blocks|multiblocks]] had the side effect that non-active block logs may have been shown on {{#special:Contributions}} and on blocked users' user and user_talk pages. This issue will be fully resolved in a few days. As part of the fix, [{{fullurl:Special:Allmessages|prefix=sp-contributions-blocked-notice}} messages prefixed with <code>sp-contributions-blocked-notice</code>] will be removed and replaced with [{{fullurl:Special:Allmessages|prefix=blocked-notice-logextract}} those prefixed with <code>blocked-notice-logextract</code>] in a few weeks. Please help translate the new messages and update any local overrides if needed.
* There was a bug with links added using visual editor if they included characters such as <code dir=ltr><nowiki>[ ] |</nowiki></code> after the fragment identifier (<code><nowiki>#</nowiki></code>). They were not encoded properly creating an incorrect link. This has been fixed. [https://phabricator.wikimedia.org/T404823]
* One new wiki has been created: a {{int:project-localized-name-group-wikiquote/en}} in [[d:Q9237|Malay]] ([[q:ms:|<code>q:ms:</code>]]) [https://phabricator.wikimedia.org/T404698]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/User Info|User Info Card]] now displays currently active global lock/blocks. [https://phabricator.wikimedia.org/T401128]
'''Updates for technical contributors'''
* Later this week, editors using Lua modules will be able to use the <code>[[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.title.newBatch|mw.title.newBatch]]</code> function to look up the existence of up to 25 pages at once, in a way that only increases the [[mw:Special:MyLanguage/Manual:Parser functions#Expensive parser functions|expensive function]] count once.
* A new [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|Unsupported Tools Working Group]] has been formed as part of ongoing efforts to collectively determine technical work priorities, similar to the [[m:Special:MyLanguage/Product and Technology Advisory Council|Product & Technology Advisory Council]] (PTAC). The working group will help prioritize and review requests for support of unmaintained extensions, gadgets, bots, and tools. For the first cycle, the group will be prioritizing an unsupported Wikimedia Commons tool.
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.21|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/40|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:54, 29 September 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29355230 -->
== Wikipedia translation of the week: 2025-41 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Majed Abu Maraheel]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Majed Abu Maraheel''' was a Palestinian long-distance runner, football player, security officer, and athletics coach, who was the first Palestinian to compete at the Olympic Games.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:48, 6 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29341788 -->
== Tech News: 2025-41 ==
<section begin="technews-2025-W41"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/41|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Help:Edit check#paste|Paste Check]] is a new Edit Check feature to help avoid and fight copyright violations. When editors paste text into an article, Paste Check prompts them to confirm the origin and licensing of the content. Starting Wednesday, 8 October, [[phab:T403680|22 wikis will test Paste Check]]. Paste Check will help new volunteers understand and follow the policies and guidelines necessary to make constructive contributions to Wikipedia projects.
'''Updates for editors'''
* Mobile devices will receive mobile articles directly on the standard domain (like <code>en.wikipedia.org</code>), instead of via a redirect to an "m" domain (like <code>en.m.wikipedia.org</code>). This change improves performance. This week it will be enabled on Wikipedias. The existing mobile URLs and the "Desktop view" opt-out remain available. [[mw:Requests for comment/Mobile domain sunsetting/2025 Announcement|Learn more]]. [https://phabricator.wikimedia.org/T214998]
* New [[mw:Special:MyLanguage/Help:CirrusSearch#creationdate and lasteditdate|date filters]], <code dir=ltr>creationdate:</code> and <code dir=ltr>lasteditdate:</code>, are now available in the wiki search engine. This allows users to filter search results by a page's first or last revision date. The filters support comparison operators (e.g. <code dir=ltr>>2024</code>) and relative dates (e.g. <code dir=ltr>today-1d</code>), making it easier to find recently updated content or pages within specific age ranges. [https://phabricator.wikimedia.org/T403593]
* [[f:|Wikifunctions]] now supports rich text in embedded calls across the 150 wikis where it's enabled. To showcase this, the team created a [[f:Z26333|Latin declination table]] that Wiktionary editors can use to automatically generate noun forms, producing clear, formatted results — see an [[f:Wikifunctions:Embedded function calls/Wiktionary tables demonstration|example output]]. If you need any help or have any feedback, please [[f:Wikifunctions:Project chat|contact the Wikifunctions Team]]. [https://phabricator.wikimedia.org/T397402]
* An edit link will now appear inside the categories box on article pages for logged in users, which will directly launch the VisualEditor category dialog. [https://phabricator.wikimedia.org/T291691]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a problem downloading pdf files last week and that has been resolved. [https://phabricator.wikimedia.org/T405957]
'''Updates for technical contributors'''
* The field <code dir=ltr>rev_sha1</code> in the revision database table is being removed in favor of <code dir=ltr>content_sha1</code> in the content database table. See [https://lists.wikimedia.org/hyperkitty/list/cloud@lists.wikimedia.org/thread/2D2M3SP4WHR6BXXKTZ2PBLZQYR3EGQVR/ the announcement] for more information.
* The [[mw:Special:MyLanguage/Reading/Web|Reader Experience team]] will roll out [[w:en:Light-on-dark color scheme|Dark Mode]] user interface on all Wikimedia sites on October 29, 2025. All anonymous users of Wikimedia sites will have the option to activate a color scheme that features light-colored text on a dark background. This is designed to provide a more comfortable reading experience, especially in low-light situations. Template authors and technical contributors are encouraged to [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-04|learn how to make pages ready for Dark mode]] and address any compatibility issues found in templates in their wiki before the enablement. Please contact the Web team for questions or any support on [[mw:Talk:Reading/Web/Accessibility for reading#|this talk page]] before the enablement. [https://phabricator.wikimedia.org/T395628]
* Starting on Monday, October 6, API endpoints under the <code>rest.php</code> path will be rerouted through a new internal API Gateway. Individual wikis will be updated based on the standard release groups, with total traffic increased over time. This change is expected to be non-breaking and non-disruptive. If any issues are observed, please file a Phabricator ticket to the [[phab:tag/serviceops/|Service Ops team board]]. [https://phabricator.wikimedia.org/T400130]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.22|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/41|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W41"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:24, 6 October 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29400897 -->
== Wikipedia translation of the week: 2025-42 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Abortion in Eritrea]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
In Eritrea, abortion is banned except on the grounds of pregnancy from rape or incest, pregnancy of a minor, or risk to physical or mental health. Legal abortions require medical or judicial approval. Prior to Eritrea's independence, it applied Ethiopia's abortion law of the 1950s, which banned abortion unless life-saving. After independence, the 1991 penal code adapted this law to lift punishments on abortions on the grounds of rape, incest, or risk to life or health, but legal abortions did not exist in effect. The penal codes of 2001 and 2015 required physicians to prove health grounds for abortion. Unsafe abortion is common and contributes to maternal mortality in Eritrea. Post-abortion care is unavailable in some regions.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:06, 13 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29341788 -->
== Tech News: 2025-42 ==
<section begin="technews-2025-W42"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/42|Translations]] are available.
'''Weekly highlight'''
* Last week, improvements to account security and two-factor authentication (2FA) features were enabled across all wikis. These changes include user interface improvements for [https://auth.wikimedia.org/metawiki/wiki/Special:AccountSecurity Special:AccountSecurity], the support of multiple 2FA methods via authenticator apps and portable security keys (previously users could only enable one method), and a new Recovery Codes module which facilitates fewer account lockouts due to lost two-factor apps and devices. As part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project, work is continuing through the rest of 2025 on further user experience improvements, and support for passkeys as an alternate second factor.
'''Updates for editors'''
* Another part of the Account security project is making 2FA generally available to all users. Along with editors with advanced privileges, such as administrators and bureaucrats, 40% of editors now have access to 2FA. You can check if you have access at [https://auth.wikimedia.org/metawiki/wiki/Special:AccountSecurity Special:AccountSecurity]. Instructions for activation are on the linked page. The plan is to continue increasing availability if it is determined that the user support capabilities are able to support global usage. [https://phabricator.wikimedia.org/T400579]
* This week, users at wikis where talk page [[mw:Special:MyLanguage/Talk pages project/Usability|Usability Improvements]] are already available by default (everywhere ''except'' the 12 wikis listed in [[phab:T379264|T379264]]) will gain the ability to Thank a comment directly from the talk page it appears on. Before this change, Thanking could only be done by visiting the revision history of the talk page. You can [[diffblog:2025/10/13/revolutionizing-gratitude-a-new-era-of-thanking-comments/|learn more about this change]]. [https://phabricator.wikimedia.org/T366095]
* Users who have not [[Special:Preferences#mw-prefsection-personal-email|verified their email address]] will soon be receiving monthly Notification reminders to do so. This is because users who have verified their email can more easily recover their account. These reminders will not be sent if the user is inactive or removes the unverified email from their account. [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Email_confirmation][https://phabricator.wikimedia.org/T58074]
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a fix was made for an occasional error with saving translated paragraphs in the Content Translation tool, and the related error messages are now easier to see. [https://phabricator.wikimedia.org/T376531]
'''Updates for technical contributors'''
* The Unsupported Tools Working Group has chosen [[c:Special:MyLanguage/Commons:Video2commons|Video2Commons]] as the first tool for its pilot cycle. The group will explore ways to improve and sustain the tool over the coming months. [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|Learn more on Meta]].
* [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.23|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/42|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:00, 13 October 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29434481 -->
== Wikipedia translation of the week: 2025-43 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Liberation of Auschwitz concentration camp]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Auschwitz Liberated January 1945.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
On 27 January 1945, Auschwitz—a Nazi concentration camp and extermination camp in occupied Poland where more than a million people were murdered as part of the Nazis' "Final Solution" to the Jewish question—was liberated by the Soviet Red Army during the Vistula–Oder Offensive. Although most of the prisoners had been forced onto a death march, about 7,000 had been left behind. The Soviet soldiers attempted to help the survivors and were shocked at the scale of Nazi crimes. The date is recognized as International Holocaust Remembrance Day.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:04, 20 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29452019 -->
== Tech News: 2025-43 ==
<section begin="technews-2025-W43"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/43|Translations]] are available.
'''Updates for editors'''
* To optimize how user data is stored in our databases, the saved preferences of users who haven't logged in for over five years and have fewer than 100 edits will be cleared. When those users return, default settings will apply. [https://phabricator.wikimedia.org/T406724]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, there was a broken link from the GlobalContributions interface message to the XTools GlobalContributions page which has now been fixed. [https://phabricator.wikimedia.org/T406415]
'''Updates for technical contributors'''
* The work to reroute all traffic to API endpoints under the <code dir=ltr><nowiki>rest.php</nowiki></code> route through a common API gateway is now complete. If any issues are observed, please file a phabricator ticket to the [[phab:tag/serviceops/|Service Ops team board]].
* Edits to Wikidata references or qualifiers will now be shown in RecentChanges and Watchlist entries on other wikis less often, reducing unnecessary notifications. This will reduce the overall quantity of 'noisy' entries. Wikidata's own pages remain unchanged. [https://phabricator.wikimedia.org/T401290]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.24|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/43|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:37, 20 October 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29478670 -->
== Wikipedia translation of the week: 2025-44 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Black Diaries]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The '''Black Diaries''' are diaries purported to have been written by the Irish revolutionary Roger Casement, which contained accounts of homosexual liaisons with young men. They cover the years 1903, 1910 and 1911 (two) and were handed in to Scotland Yard after his capture in April 1916.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:51, 27 October 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29487357 -->
== Tech News: 2025-44 ==
<section begin="technews-2025-W44"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/44|Translations]] are available.
'''Updates for editors'''
* The Wikipedia iOS app has launched an A/B/C test of improvements made to the tabbed browsing feature for select regions and languages. The test, named “More dynamic tabs”, explores new tab experiences and includes “Did you know” and “Because you read” article recommendations. You can [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Tabbed Browsing (Tabs)/New Tab Experience and Recommendations Experiment|read more on the project page]].
* Autoconfirmed users on [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/small.dblist|small]] and [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/medium.dblist|medium wikis]] with the CampaignEvents extension can now use [[m:Special:MyLanguage/Event Center/Registration|Event Registration]] without the Event Organizer right. This feature lets organizers enable registration, manage participants, and lets users register with one click instead of signing event pages.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue of flashing colors when holding or pressing the arrow keys under the dark mode settings in Vector 2022 has been fixed. [https://phabricator.wikimedia.org/T402285]
'''Updates for technical contributors'''
* The CampaignEvents extension will be deployed to all remaining wikis during the week of 17 November 2025. The extension currently includes three features: Event Registration, Collaboration List, and Invitation List. For this rollout, Invitation List will not be enabled on Wikifunctions and MediaWiki unless requested by those communities. [[m:Special:MyLanguage/CampaignEvents/Deployment status|Visit the deployment page to learn more]].
* The SwaggerUI-based REST sandbox experience is now live on all wiki projects. The sandbox can be accessed through the [[{{#special:RestSandbox}}]] page. Please report any issues to the MediaWiki Interfaces team board, or join the discussion on the [[mw:Special:MyLanguage/MediaWiki Interfaces Team/Feature Feedback/REST Sandbox|project launch]] page. [https://phabricator.wikimedia.org/project/board/6931/]
* Transform endpoints with a trailing slash path in the MediaWiki REST API are now marked as deprecated. They will remain functional during this time, but removal is expected by the end of January 2026. All API users currently calling them are encouraged to transition to the non-trailing slash versions. Both endpoint variations can be found and tested using the [https://test.wikipedia.org/w/index.php?api=mw-extra&title=Special%3ARestSandbox REST Sandbox]. See the [[mw:API/Deprecation|MediaWiki REST API Deprecation]] page for more detailed information about the API deprecation policies and procedures.
* A dedicated [[mw:API:REST API/Changelog|changelog now exists for the MediaWiki REST API]]. The changelog provides an overview of these changes, making it easier for developers to keep track of improvements and iterations. Announcements will also continue to flow through the standard communication channels, including Tech News and email distribution lists, but can now be more easily referenced from a central location. If you have feedback about the style, structure, or content of this changelog, please [[mw:API talk:REST API/Changelog|join the discussion]].
* Administrators can delete the tracking category which was previously added by the JsonConfig extension, as it is no longer used. See the categories linked from [[d:Q130635582#sitelinks-wikipedia|Q130635582]]. It is OK if there are still pages listed in the category as that is just a caching issue, and they will be automatically cleared out the next time each page is edited. [https://phabricator.wikimedia.org/T378352]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.25|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/44|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W44"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:32, 27 October 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29513638 -->
|}
== Wikipedia translation of the week: 2025-45 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Consolations (Liszt)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Franz Liszt - Consolation No. 3, Lento placido.ogg|center|300px|]]
<div style="text-align:left; padding: .4em;">
The '''Consolations''', S. 171a/172 (German: Tröstungen) are a set of six solo piano works by Franz Liszt. The compositions take the musical style of nocturnes with each having its own distinctive style.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:52, 3 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29558323 -->
== Tech News: 2025-45 ==
<section begin="technews-2025-W45"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/45|Translations]] are available.
'''Updates for editors'''
* Administrators will now find that [[{{#special:MergeHistory}}]] is now significantly more flexible about what it can merge. It can now merge sections taken from the middle of the history of the source (rather than only the start) and insert revisions anywhere in the history of the destination page (rather than only the start). [https://phabricator.wikimedia.org/T382958]
* For users with "{{int:discussiontools-preference-autotopicsub}}" [[Special:Preferences#mw-prefsection-editing|enabled in their preferences]], starting a new topic or adding a reply to an existing topic will now subscribe them to replies to that topic. Previously, this would only happen if the DiscussionTools "{{int:Skin-action-addsection}}" or "{{int:Discussiontools-replybutton}}" widgets were used. When DiscussionTools was originally launched existing accounts were not opted in to automatic topic subscriptions, so this change should primarily affect newer accounts and users who have deliberately changed their preferences since that time. [https://phabricator.wikimedia.org/T290778]
* Scribunto modules can now be used to [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#SVG library|generate SVG images]]. This can be used to build charts, graphics and other visualizations dynamically through Lua, reducing the need to compose them externally and upload them as files. [https://phabricator.wikimedia.org/T405861]
* Wikimedia sites now provide all anonymous users with the option to enable a dark mode color scheme, featuring light-colored text on a dark background. This enhancement aims to deliver a more enjoyable reading experience, especially in dimly lit environments. [https://phabricator.wikimedia.org/T395628]
* Users with large watchlists have long faced timeouts when editing [[Special:EditWatchlist|Special:EditWatchlist]]. The page now loads entries in smaller sections instead of all at once due to a paging update, allowing everyone to edit their watchlists smoothly. As part of the database update, sorting by expiry has been removed because it was over 100× slower than sorting by title. A [https://meta.wikimedia.org/wiki/Community_Wishlist/W454 community wish] has been created to explore alternative ways to restore sort-by-expiry. If this feature is important to you, please support the wish! [https://phabricator.wikimedia.org/T41510]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:31}} community-submitted {{PLURAL:31|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the fixing of the persisting highlighting when using VisualEditor find and replace during a query. [https://phabricator.wikimedia.org/T407318]
'''Updates for technical contributors'''
* Since 2019 the [[m:Special:MyLanguage/Wikimedia URL Shortener|Wikimedia URL Shortener]] at https://w.wiki is available for all Wikimedia wikis to create short links to articles, permalinks, diffs, etc. It is available in the sidebar as "Get shortened URL". There are 30 wikis that also install an older "ShortUrl" extension. The old extension will soon be removed. This means <code>/s/</code> URLs will not be advertised under article titles via HTML <code dir=ltr>class="title-shortlink"</code>. The <code>/s/</code> URLs will keep working. [https://phabricator.wikimedia.org/T107188]
* On Thursday, October 30, the [[:mw:Special:MyLanguage/MediaWiki Interfaces Team|MediaWiki Interfaces]] and [[:mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|SRE Service Operations]] teams began rerouting Action API traffic through a common API gateway. Individual wikis will be updated based on the standard release groups, with total traffic increased over time. This change is expected to be non-breaking and non-disruptive. If any issues are observed, please file a Phabricator ticket to the [https://phabricator.wikimedia.org/tag/serviceops/ Service Ops team] board.
* MediaWiki Train deployments will pause for the final two weeks of 2025: 22 December and 29 December. Backport windows will also pause between Monday, 22 December 2025 and Thursday, 2 January 2026. A backport window is a scheduled time to add things like bug fixes and configuration changes. There are seven deployment trains remaining for 2025. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/SMWTEAES4SDLDUSK4HMWNBSKNCXZAWYN/]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.45/wmf.26|MediaWiki]]
'''In depth'''
* In 2025, the Wikimedia Foundation reported that AI systems and search engines increasingly use Wikipedia content without driving users to the site, contributing to an 8% drop in human pageviews compared to 2024. After detecting bots disguised as humans, Wikimedia updated its traffic data to reflect this shift. Read more about current user trends on Wikipedia in [[diffblog:2025/10/17/new-user-trends-on-wikipedia/|a Diff blog post]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/45|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W45"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:35, 3 November 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29552512 -->
== Wikipedia translation of the week: 2025-46 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Marine coastal ecosystem]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Vegetation and fauna processes controlling benthic biogeochemical fluxes.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
A '''marine coastal ecosystem''' is a marine ecosystem which occurs where the land meets the ocean. Worldwide there is about 620,000 kilometres (390,000 mi) of coastline. Coastal habitats extend to the margins of the continental shelves, occupying about 7 percent of the ocean surface area. Marine coastal ecosystems include many very different types of marine habitats, each with their own characteristics and species composition. They are characterized by high levels of biodiversity and productivity.
For example, estuaries are areas where freshwater rivers meet the saltwater of the ocean, creating an environment that is home to a wide variety of species, including fish, shellfish, and birds. Salt marshes are coastal wetlands which thrive on low-energy shorelines in temperate and high-latitude areas, populated with salt-tolerant plants such as cordgrass and marsh elder that provide important nursery areas for many species of fish and shellfish. Mangrove forests survive in the intertidal zones of tropical or subtropical coasts, populated by salt-tolerant trees that protect habitat for many marine species, including crabs, shrimp, and fish.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:54, 10 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29584005 -->
== Tech News: 2025-46 ==
<section begin="technews-2025-W46"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/46|Translations]] are available.
'''Updates for editors'''
[[File:Talk pages default look (April 2023).jpg|thumb|alt=Screenshot of the visual improvements made on talk pages|Example of a talk page with the new design, in French.]]
* Starting November 12, users will see a change in the [[m:Special:MyLanguage/Talk pages project/Feature summary#Usability improvements|appearance of talk pages]] on [[Phab:T379264|some Wikipedias]]. Almost [[phab:T392121|all wikis]] have received this design change; [[phab:T409297|English Wikipedia]] will get these changes later. You can read more [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|on ''Diff'']]. Users can opt out of these changes [[Special:Preferences#mw-prefsection-editing|in their user preferences]] in "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T379264]
* MediaWiki can now display a [[mw:Special:MyLanguage/Help:Protection indicators|page indicator]] automatically while a page is protected. This feature is disabled by default. It can be enabled by [[m:Special:MyLanguage/Requesting wiki configuration changes|community request]]. [https://phabricator.wikimedia.org/T12347]
* Using the "{{int:showpreview}}" or "{{int:showdiff}}" buttons in the wikitext editor will now carry over certain URL parameters like '[[mw:Special:MyLanguage/Manual:Parameters to index.php#useskin|useskin]]', '[[mw:Special:MyLanguage/Manual:Parameters to index.php#uselang|uselang]]' and '[[mw:Special:MyLanguage/Help:Section#Editing sections|section]]'. This update also fixes an issue where, if the browser crashed while previewing an edit to a single section, saving this edit could overwrite the entire page with just that section’s content. [https://phabricator.wikimedia.org/T62744][https://phabricator.wikimedia.org/T24029][https://phabricator.wikimedia.org/T155097]
* Wikivoyage wikis can use [[mw:Special:MyLanguage/Help:Extension:Kartographer#Markers and counters|colored map markers in the article text]]. The text of these markers will now be shown in contrasting black or white color, instead of always being white. Local workarounds for the problem can be removed. [https://phabricator.wikimedia.org/T369454]
* The Activity tab in the Wikipedia Android app is now available for all users. The new tab offers personalized insights into reading, editing, and donation activity, while simplifying navigation and making app use more engaging. [https://www.mediawiki.org/wiki/Wikimedia_Apps/Team/Android/Activity_Tab_Experiment]
* The Reader Growth team is launching an experiment called "Image browsing" to test how to make it easier for readers to browse and discover images on Wikipedia articles. This experiment, a mobile-only A/B test, will go live on English Wikipedia in the week of November 17 and will run for four weeks, affecting 0.05% of users on English wiki. The test launched on November 3 on Arabic, Chinese, French, Indonesian, and Vietnamese wikis, affecting up to 10% of users on those wikis. [https://www.mediawiki.org/wiki/Readers/Reader_Growth/WE3.1.3_Image_Browsing]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example the inability to lock accounts on mobile sites has been fixed. [https://phabricator.wikimedia.org/T256185]
'''Updates for technical contributors'''
* [[wikitech:Help talk:Toolforge/Toolforge standards committee#November 2025 committee nominations|Nominations are open on Wikitech]] for new [[wikitech:Help:Toolforge/Toolforge standards committee|Toolforge standards committee]] members. The committee oversees the Toolforge [[wikitech:Help:Toolforge/Right to fork policy|Right to fork policy]] and [[wikitech:Help:Toolforge/Abandoned tool policy|Abandoned tool policy]] among other duties. Nominations will remain open through 2025-11-28.
* The [[w:JSON Web Token#Standard fields|JWT issuer field]] in [[mw:Special:MyLanguage/OAuth/For Developers#OAuth 2|OAuth 2 access tokens]] for [[m:Special:MyLanguage/Help:Unified login|SUL wikis]] has been changed to <code><nowiki>https://meta.wikimedia.org</nowiki></code>. Old access tokens will still work. [https://phabricator.wikimedia.org/T399199]
* The [[w:JSON Web Token#Standard fields|JWT subject field]] in [[mw:Special:MyLanguage/OAuth/For Developers#OAuth 2|OAuth 2 access tokens]] will soon change from <code><user id></code> to <code dir=ltr style="white-space:nowrap">mw:<identity type>:<user id></code>, where <code><identity type></code> is typically <code dir=ltr>CentralAuth:</code><!-- not a typo --> (for [[m:Special:MyLanguage/Help:Unified login|SUL wikis]]) or <code dir=ltr style="white-space:nowrap">local:<wiki id></code> (for other wikis). This is to avoid conflicts between different user ID types, and to make OAuth 2 access tokens and the <code>sessionJwt</code> cookie more similar. Old access tokens will still work. [https://phabricator.wikimedia.org/T399199]
* MediaWiki's block messages ([[MediaWiki:Blockedtext|blockedtext]], [[MediaWiki:Blockedtext-partial|blockedtext-partial]], [[MediaWiki:Autoblockedtext|autoblockedtext]], [[MediaWiki:Systemblockedtext|systemblockedtext]], [[MediaWiki:Blockedtext-tempuser|blockedtext-tempuser]], [[MediaWiki:Autoblockedtext-tempuser|autoblockedtext-tempuser]]) now support additional parameters indicating whether the user is blocked from editing their own user talk page <code><nowiki>$9</nowiki></code> or emailing other users <code><nowiki>$</nowiki><nowiki>10</nowiki></code>. [https://phabricator.wikimedia.org/T285612]
* A <code>REL1_45</code> branch for MediaWiki core and each of the extensions and skins in Wikimedia git has been created. This is the first step in the release process for MediaWiki 1.45.0, scheduled for late November 2025. If you are working on a critical bug fix or working on a new feature, you may need to take note of this change. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/ZUY7TY3Z6XPZWZVAZV63OPO5OW52Q6GE/]
* The process for generating CirrusSearch dumps has been updated due to slowing performance. If you encounter any issues migrating to the replacement dumps, please contact the Search Platform Team for support. [https://phabricator.wikimedia.org/T366248][https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/3KQPOR6ACVN6OVLMLZPIBXQSWQKW4E3K/]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.2|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/46|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W46"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:38, 10 November 2025 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29606150 -->
== Wikipedia translation of the week: 2025-47 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Elephant communication]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Three elephant's curly kisses.jpg|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Elephants communicate''' via touching, visual displays, vocalisations, seismic vibrations, and semiochemicals.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:24, 17 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29627457 -->
== Tech News: 2025-47 ==
<section begin="technews-2025-W47"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/47|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] is experimenting with [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4_Reading lists|reading lists on mobile web]], allowing logged-in readers with no edits to save private lists of articles for later. The experiment is running on Arabic, Chinese, French, Indonesian, and Vietnamese Wikipedias since the week of 10 November, and will begin on English Wikipedia the week of 17 November.
* Users who can’t receive their email verification code during login can now get help by submitting a form on a new special page. This update is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] initiative. If your account has an email address, please make sure you still have access to it. When logging in from a new device or location without 2FA, you may be asked to enter a 6-digit code sent by email to finish logging in. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Why are you requiring me to enter a code from my email to log in? Can I opt out of this?|Learn more]].
* One new wiki has been created: a {{int:project-localized-name-group-wikisource}} in [[d:Q13324|Minangkabau]] ([[s:min:|<code>s:min:</code>]]) [https://phabricator.wikimedia.org/T408317]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* As part of the [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parser Unification]] project, the Content Transform Team rolled out Parsoid as the default parser to many low-traffic Wikipedias and is preparing the next step to high traffic ones. This message is an invitation for you to opt-in to Parsoid, as described in the [[mw:Special:MyLanguage/Help:Extension:ParserMigration|Extension:ParserMigration]] documentation, and identify any issues you might encounter with your own workflow using bots, gadgets, or user scripts. Please, let us know through the ''"Report Visual Bug"'' link in the Tools sidebar or create a phab ticket and tag the [[phab:project/view/5846|Content Transform Team in Phabricator]].
* Unsupported Tools: Several issues with [[:c:Special:MyLanguage/Commons:Video2commons|Video2Commons]] have been fixed, including filename-related upload failures, black-video imports, and retry handling. AV1 support has also been added. Ongoing work focuses on backend stability, ffmpeg errors, subtitle imports, metadata handling, and playlist uploads. To track specific tasks, check the [[phab:tag/video2commons/|Phabricator board]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.3|MediaWiki]]
'''Meetings and events'''
* Save the date for the next Wikimedia Hackathon happening in Milan, Italy from May 1–3, 2026. Registration will open in January 2026. [https://pretix.eu/wikimedia/Hackathon-2026/ Scholarship applications are currently open], and will close on November 28, 2025. If you have any questions, please email <bdi lang="en" dir="ltr">hackathon@wikimedia.org</bdi>.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/47|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W47"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:27, 17 November 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29627455 -->
== Wikipedia translation of the week: 2025-48 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Animal-made art]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Painting Queen 1024x768.png|center|300px|]]
<div style="text-align:left; padding: .4em;">
'''Animal-made art''' consists of works by non-human animals, that have been considered by humans to be artistic, including visual works, music, photography, and videography. Some of these are created naturally by animals, often as courtship displays, while others are created with human involvement.
There have been debates about the copyright status of these works, with the United States Copyright Office stating in 2014 that works that lack human authorship cannot have their copyright registered at the US Copyright Office.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:13, 24 November 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29627457 -->
== Tech News: 2025-48 ==
<section begin="technews-2025-W48"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/48|Translations]] are available.
'''Updates for editors'''
* Last week, the [[mw:Special:MyLanguage/Wikimedia Search Platform|Wikimedia Search Team]] recreated the "DWIM" (Do What I Mean) gadget functionality server-side, for Russian and Hebrew Wikipedias. This feature adds cross-keyboard suggestions to the standard search-box suggestions. For example, searching for ''<span lang="und" dir="ltr">cxfcnmt</span>'' on Russian Wikipedia will now add suggestions for ''<span lang="ru" dir="ltr">счастье</span>'' ("happiness") that the user probably intended. They plan to enable this feature for other Russian and Hebrew wikis this week. [https://phabricator.wikimedia.org/T408734]
* Later this week, users of the "{{int:codemirror-beta-feature-title}}" [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] will have syntax highlighting available in [[mw:Special:MyLanguage/Help:DiscussionTools|DiscussionTools]]. This requires that the "{{int:discussiontools-preference-sourcemodetoolbar}}" preference be set. [https://phabricator.wikimedia.org/T407918]
* [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|Campaign events extension]] – the set of tools for coordinating events and other on-wiki collaborations has now been deployed to all Wikimedia wikis. A new feature known as [[m:Special:MyLanguage/CampaignEvents/Collaborative contributions|Collaborative contribution]] to help organizers and participants see the impact of activities has also been added. Join the upcoming [[m:Special:MyLanguage/Event:Connection learning session 3|learning session]] to see the new feature in action and share your feedback.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:24}} community-submitted {{PLURAL:24|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug which stopped CodeReviewBot from working, has now been fixed. [https://phabricator.wikimedia.org/T410417]
'''Updates for technical contributors'''
* Users of Wikimedia API can join a usability study to help validate the new design of Wikimedia REST API sandboxes. Interested participants should fill the [https://wikimediafoundation.limesurvey.net/487662 recruitment survey]. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/IREJRRWTZTGCYWQHDMSNJFTQAEPOOAE3/]
* The MediaWiki Interfaces team is deprecating XSLT stylesheets within the Action API. Support for <code dir=ltr>format=xml'''&xlst={stylesheet}'''</code> will be removed from Wikimedia projects by the end of November, 2025. In addition, it will soon be disabled by default in MediaWiki release versions: v1.43 (LTS), v1.44, and v1.45. Support for XSLT stylesheets will be fully removed from MediaWiki v1.46 (expected to release between April and May 2026). [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/5AX7UWAVVUNUSBOIRHMNOKWOZ5EZI3JX/]
* The WDQS legacy endpoint ([https://query-legacy-full.wikidata.org/ query-legacy-full.wikidata.org]) will be decommissioned at the end of December 2025, and finally closed down on 7th January 2026. After this date, users should expect requests to query.wikidata.org that require the full graph to fail or return invalid results if they are not rewritten to use SPARQL federation. The team encourages users to ensure that tools and workflows use the supported WDQS endpoints (<span dir=ltr><nowiki>https://query.wikidata.org/</nowiki></span> - Main graph or <span dir=ltr><nowiki>https://query-scholarly.wikidata.org/</nowiki></span> - Scholarly graph). For support with migrating use cases, please review the [[d:Special:MyLanguage/Wikidata:Data_access|Data Access]] and [[d:Wikidata:Request_a_query|Request a Query]] pages for details and assistance on alternative access methods.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.4|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/48|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W48"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:57, 24 November 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29702226 -->
== Wikipedia translation of the week: 2025-49 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Halachic state]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The term "'''halachic state'''" (Hebrew: מְדִינַת הֲלָכָה Medīnat Hălāḵā) refers to a sovereign state that endorses Judaism in an official capacity and governs by Jewish religious law. It has been a subject of discussion among Orthodox Jews, particularly with regard to modern Israel, which, although a Jewish state, is not classified as a theocracy.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 08:01, 1 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29719355 -->
== Tech News: 2025-49 ==
<section begin="technews-2025-W49"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/49|Translations]] are available.
'''Updates for editors'''
* The Wikipedia Year in Review 2025 will be available on December 2 for users of iOS and Android Wikipedia apps, featuring new personalized insights, updated reading highlights, and refreshed designs. Learn more on the review's [[mw:Special:MyLanguage/Wikimedia Apps/Team/Wikipedia Year in Review/Updates|project page]].
* The Growth team is working on improving the text and presentation of the Verification Email sent to new users to make them more welcoming, useful and informative. Some new text have been drafted for A/B testing and you can help by translating them. See [[phab:T396155|Phabricator]].
* [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]] will now be deployed at Japanese, Urdu and Chinese Wikipedias on December 2. Add a link is based on a prediction model that suggests links to be added to articles. While this feature has already been available on most Wikipedias, the prediction model could not support certain languages. A new model has now been developed to handle these languages, and it will be gradually rolled out to other Wikipedias over time. If you would like to know more, please contact [[mw:user:Trizek (WMF)|Trizek (WMF)]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where search boxes on some Commons pages showed no results due to switch from SpecialSearch to MediaSearch, has now been fixed. [https://phabricator.wikimedia.org/T399476]
* Two new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q36846|Toki Pona]] ([[w:tok:|<code>w:tok:</code>]]) [https://phabricator.wikimedia.org/T404457]
** a {{int:project-localized-name-group-wikiquote}} in [[d:Q33655|Nigerian Pidgin]] ([[q:pcm:|<code>q:pcm:</code>]]) [https://phabricator.wikimedia.org/T408318]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.5|MediaWiki]]
'''In depth'''
* The Wikimedia Foundation is in the early stages of exploring approaches to '''Article guidance'''. The initiative aims to identify interventions that could help new editors easily understand and apply existing Wikipedia practices and policies when creating an article. The project is in the exploration and early experimental design phase. All community members are encouraged to [[mw:Special:MyLanguage/Article guidance|learn more]] about the project, and share their thoughts on [[mw:Special:MyLanguage/Talk:Article guidance|the talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/49|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W49"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:58, 1 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29732328 -->
== Wikipedia translation of the week: 2025-50 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:ru:Сто лошадей]]'''<br /> <small>''([[:en:One Hundred Horses]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:A_Hundred_Steeds.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''One Hundred Horses''''' (Chinese: 百駿圖) is a Qing dynasty silk and ink painting by Giuseppe Castiglione. It was painted in 1728 for the Yongzheng emperor. The painting depicts a hundred horses in a variety of poses and activities, combining Western realism with traditional Chinese composition and brushwork.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:29, 8 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29719355 -->
== Tech News: 2025-50 ==
<section begin="technews-2025-W50"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/50|Translations]] are available.
'''Weekly highlight'''
* Anybody who wishes to secure their user account can now use [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] (2FA). This is available to all registered users of all Wikimedia projects. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] initiative. Later, 2FA will be required for all users who can take security- or privacy-sensitive actions.
'''Updates for editors'''
* Following last week's deployments, the [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Add a link]] feature, which allows editors to add suggested links during editing, will be available to an additional [[Phab:T410469|33 Wikipedias]] starting on 9 December. This expansion is possible thanks to the new prediction model that now supports all languages, including those that were previously not covered. While the feature has been available on most Wikipedias for some time, this rollout brings us closer to using the improved model everywhere. If you have any questions or would like more details please contact [[mw:user:Trizek (WMF)|Trizek (WMF)]].
* Last week, the [[mw:Special:MyLanguage/Wikimedia Search Platform|Search Platform team]] added [[w:en:Transliteration|transliterated]] as-you-type search suggestions to Georgian wikis. If there are only a few regular search suggestions, then queries in Latin or Cyrillic script [[phab:T127003|are now rewritten into Georgian script]] to look for more matches. For example, searching for either <bdi lang="ka-Latn" dir="ltr">''bedniereba''</bdi> or <bdi lang="ka-Cyrl" dir="ltr">''бедниереба''</bdi> will now suggest the existing article about <bdi lang="ka" dir="ltr">ბედნიერება</bdi> ("happiness"). You can recommend other languages where transliterated suggestions would be useful [[phab:T375215|on Phabricator]] for future development.
* Later this week, a controlled experiment will begin for editors on the 100 largest Wikipedias who are editing a section in the mobile web visual editor. 50% of these editors will notice a new "Edit full page" button that will enable them to expand their editing session to the whole page. This feature is intended to make it easier for people on mobile web to edit any article section, regardless of which section-edit icon they tapped to begin. The experiment will last ~4 weeks. You can find [[phab:T409112|more details]] about the project.
* Later this week, the [[mw:Special:MyLanguage/Readers/Reader Growth|Reader Growth team]] will launch a [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.1.14 Expanded Mobile Sections|mobile web experiment]] to expand all article sections by default (currently they are collapsed by default) and pin the section header the user is currently reading to the top of the page. The experiment will affect 10% of users on Arabic, Chinese, French, Indonesian, and Vietnamese Wikipedias. [https://phabricator.wikimedia.org/T409485]
* The [[mw:Special:MyLanguage/Wikimedia Apps/Team/Wikipedia Year in Review/2025 Year in Review|Wikipedia Year in Review 2025]], a feature in the Wikipedia mobile apps (iOS and Android) that provides users with a personalised summary of their engagement with Wikipedia over the year, is now available on the iOS and Android apps. This edition includes expanded personalised insights, improved reading highlights, new donor messaging, and updated designs. Open the app to view your Year in Review and explore your reading journey from 2025.
* A recent software bug caused edits made with VisualEditor to make unintended changes to wikitext, including removing whitespace and replacing spaces with underscores in wikilinks inside citations. This was partially fixed last week, and further fixes are in progress. Editors who used VisualEditor between November 28 and December 2 should review their edits for unexpected modifications. [https://phabricator.wikimedia.org/T411238]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the incorrect handling of URLs copied from the address bar of Microsoft Edge users, has been resolved. [https://phabricator.wikimedia.org/T341281]
'''Updates for technical contributors'''
* Starting this week, users of the "{{int:codemirror-beta-feature-title}}" [[Special:Preferences#mw-prefsection-betafeatures|beta feature]] will have [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] as the editor for Lua, JavaScript, CSS, JSON and Vue content models, instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]]. With this, the [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|linters]] will be upgraded. This is part of a larger effort to eventually replace CodeEditor and provide a consistent code editing experience. [https://phabricator.wikimedia.org/T373711]
* Developers are encouraged to take the [https://wikimediafoundation.limesurvey.net/552643 2025 Developer Satisfaction Survey], which remains open until 5 January 2026. If you build software for the Wikimedia ecosystem and would like to share your experiences or feedback, your participation is greatly appreciated. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/W4WBKO6Q55UWWCCSFWQATKEXBEHP3QNR/]
* There is no new MediaWiki version this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/50|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W50"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:46, 8 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29738112 -->
== Wikipedia translation of the week: 2025-51 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:First Universal Races Congress]]'''<br /> <small>''([[:fr:Premier Congrès universel des races]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Universal Races Congress seated outside the entrance to the Imperial Institute, London, 1911.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''First Universal Races Congress''' met in 1911 for four days at the University of London as an early effort at anti-racism. Speakers from a number of countries discussed race relations and how to improve them. The congress, with 2,100 attendees, was organised by prominent humanists of that era.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:56, 15 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29779168 -->
== Tech News: 2025-51 ==
<section begin="technews-2025-W51"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/51|Translations]] are available.
'''Updates for editors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:18}} community-submitted {{PLURAL:18|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, one of the fixes addressed an issue for temporary accounts adding an external URL, which triggered an hCaptcha request in more cases than intended, and did not display the required popup on the first attempt to publish the edit. [https://phabricator.wikimedia.org/T411927]
'''Updates for technical contributors'''
* To improve database and site performance, external links to Wikimedia projects will no longer be stored in the database. This means they will not be searchable in [[{{#special:LinkSearch}}]], will not be checked by the Spam Blacklist or AbuseFilter as new links, and will not be in the <code dir=ltr>externallinks</code> table on database replicas. In the future this may be extended to other highly-linked trusted websites on a per-wiki basis, such as Creative Commons links on Wikimedia Commons. [https://phabricator.wikimedia.org/T405005]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.7|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/51|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W51"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:03, 15 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29796010 -->
== Wikipedia translation of the week: 2025-52 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2025 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pin Malakul]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Pin Malakul, January 1922.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Pin Malakul''' (24 October 1903 – 5 October 1995) was a Thai professor, educator and writer. His contributions to education in Thailand include the establishment of various institutions of higher education, the introduction of fixed class schedules, and the implementation of teacher-training programmes. In his career he served as Director-General of the Department of General Education, later becoming Permanent Secretary, and Minister, of Education. He was also a member of the executive board of UNESCO. His writings earned him the title of National Artist in 1987, and the 100th anniversary of his birth was celebrated by the UNESCO in 2003 as recognition of his contribution to the advancement of education in Thailand and Southeast Asia.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
-[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:26, 22 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29802495 -->
== Tech News: 2025-52 ==
<section begin="technews-2025-W52"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2025/52|Translations]] are available.
'''Updates for editors'''
* From January, edit filters [[mw:Special:MyLanguage/Extension:AbuseFilter/Access flags|can be set]] to automatically suppress their details such as rules and list of attempted edits and actions. This will help oversighters use edit filters to prevent doxxing or other suppressible material. [https://phabricator.wikimedia.org/T290324]
* The next issue of Tech News will be sent out on 12 January 2026 because of the end of year holidays. Thank you to all of the translators, and people who submitted content or feedback, this year.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:16}} community-submitted {{PLURAL:16|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the crash that occurred when tapping "First Steps" in the Wikipedia Android Year in Review has now been fixed, and the feature opens as expected. [https://phabricator.wikimedia.org/T411546]
'''Updates for technical contributors'''
* Interface elements such as diffs and categories generated by MediaWiki used to have the attribute <code dir=ltr>data-mw="interface"</code> to distinguish from wiki content. The attribute has been replaced with <code dir=ltr>data-mw-interface=""</code>, to avoid potential conflicts with other <code dir=ltr>data-mw</code> attributes, which are generated by Parsoid. [https://phabricator.wikimedia.org/T409187]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] There is no new MediaWiki version this week or next week.
'''Meetings and events'''
* The [[mw:Wikimedia Hackathon Northwestern Europe 2026|Wikimedia Hackathon Northwestern Europe 2026]] will take place on 13-14 March 2026 in Arnhem, the Netherlands. Applications just opened mid-December and will close in mid-January or earlier if capacity is reached. With space for approximately 100 participants, early application is encouraged.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2025/52|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2025-W52"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:46, 22 December 2025 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29831856 -->
== Wikipedia translation of the week: 2026-01 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:The Morning of the Magicians]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Le Matin des magiciens, couverture.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''The Morning of the Magicians: Introduction to Fantastic Realism''''' (French: Le Matin des magiciens: Introduction au réalisme fantastique) is a 1960 book by the journalists Louis Pauwels and Jacques Bergier. It covers topics like cryptohistory, ufology, occultism in Nazism, alchemy, spiritual philosophy. The second half of the book is entirely dedicated to the Nazi-Occult connections; the book is widely credited with the proliferation of numerous myths related to occultism in Nazism.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:20, 29 December 2025 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29802495 -->
== Wikipedia translation of the week: 2026-02 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Somaliland War of Independence]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Somaliland, fighters of the Somali National Movement (SNM), 1980s.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Somaliland War of Independence''' was a rebellion waged by the Somali National Movement (SNM) against the ruling military junta in Somalia led by General Siad Barre lasting from its founding on 6 April 1981 and ended on 18 May 1991 when the SNM declared what was then northern Somalia independent as the Republic of Somaliland. The conflict served as the main theater of the larger Somali Rebellion that started in 1978. The conflict was in response to the harsh policies enacted by the Barre regime against the main clan family in Somaliland, the Isaaq, including a declaration of economic warfare on the clan-family. These harsh policies were put into effect shortly after the conclusion of the disastrous Ogaden War in 1978.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:00, 5 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29871911 -->
== Wikipedia translation of the week: 2026-03 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Pietro Lauro]]'''<br /> <small>''([[:en:Pietro Lauro]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Master I.A.V.F., Pietro Lauro, born 1508, Modenese Poet and Scholar (obverse), 1555, NGA 45072.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Pietro Lauro''', conosciuto anche come Pietro Lauro Modonese o Pietro Lauro da Modona (Modena o dintorni, 1510 circa – Venezia, 1568 circa) è stato un traduttore, scrittore e divulgatore scientifico italiano. Nonostante non si conosca gran parte della sua biografia, fu uno dei poligrafi italiani più conosciuti del Cinquecento. La sua produzione raccoglie traduzioni dal latino, dal greco e dallo spagnolo e riguardano opere di autori classici, stranieri e protestanti. Lauro si dimostrò abile nel trattare testi con temi molto diversi, come la filosofia, l'architettura, la medicina, il giardinaggio, l'agronomia, le scienze biologiche, la storia, la teologia e l'astronomia. Si cimentò anche nella scrittura di un poema cavalleresco sullo stile di quelli spagnoli, il Polendo, sua magnum opus in questo senso.
Aderente alla Riforma protestante, sebbene le sue trasposizioni siano state oggetto di critiche già degli autori a lui contemporanei, che le giudicarono troppo letterali, rozze e imparziali, a Lauro si deve il merito di aver ultimato la traduzione in lingua volgare di numerosi testi sia classici, sia scientifici, sia epistolari. I suoi lavori ebbero una notevole diffusione, non solo tra i letterati veneziani della sua epoca, ma in tutta Italia, tanto che alcune sue traduzioni vengono ancora oggi ristampate in nuove edizioni.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:45, 12 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29894468 -->
== Tech News: 2026-03 ==
<section begin="technews-2026-W03"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/03|Translations]] are available.
'''Weekly highlight'''
* The Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]].
'''Updates for editors'''
* As part of the current work of Community Tech team on the [[m:Special:MyLanguage/Community Wishlist/W372|Multiple watchlists]] project, the display of [[Special:EditWatchlist|EditWatchlist]] will be updated as a first step towards multiple watchlists. Additionally, the pagination on [[Special:Search|Search]] will be updated too, as a part of the work on the [[m:Special:MyLanguage/Community Wishlist/W186|Revamp pagination / page navigation]] wish. [https://phabricator.wikimedia.org/T411596]
* [[m:Special:GlobalWatchlist|The Global Watchlist]] is a MediaWiki [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that lets you see your watchlists from different wikis on the same page. It was recently updated to look more like the regular [[Special:Watchlist|Watchlist]], such as preparing it for temporary accounts in IP masking (including rerouting user links to contributions pages), making page titles bold, and opening links in edit summaries and tags in new browser tabs. [https://phabricator.wikimedia.org/T398361][https://phabricator.wikimedia.org/T298919][https://phabricator.wikimedia.org/T273526][https://phabricator.wikimedia.org/T286309]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where global blocks did not have the option to disable sending emails, has now been fixed, and will be available for use in the week of January 13. [https://phabricator.wikimedia.org/T401293]
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/VisualEditor/Citation tool|VisualEditor citation tool]] and [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] now support "map" as a reference type. [https://phabricator.wikimedia.org/T411083]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.10|MediaWiki]]/[[mw:MediaWiki 1.46/wmf.11|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/03|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W03"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:34, 12 January 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29907192 -->
== Wikipedia translation of the week: 2026-04 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Volto di Palazzo Vecchio]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Piazza della signoria angolo via della ninna, palazzo vecchio, cantonata con testa scolpita 02.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''volto di Palazzo Vecchio''' (conosciuto anche come L'importuno o L'inopportuno) è un incisione su pietraforte attibuita a Michelangelo Buonarroti, scolpita in una delle pietre di Palazzo Vecchio a Firenze.
Secondo le varie leggende, il profilo sarebbe stato realizzato come graffito dall'artista toscano, con soggetto un suo importunatore, un debitore, un condannato a morte o se stesso. Nel 2020, gli studiosi hanno ipotizzato possa invece trattarsi di un ritratto di Francesco Granacci, pittore amico di Michelangelo.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:14, 19 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-04 ==
<section begin="technews-2026-W04"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/04|Translations]] are available.
'''Updates for editors'''
* The tray shown on [[Special:Diff|Special:Diff]] in mobile view has been redesigned. It is now collapsed by default, and incorporates a link to undo the edit being viewed, making it easier for mobile editors and reviewers to take action while keeping the interface uncluttered. [https://phabricator.wikimedia.org/T402297]
* [[m:Special:GlobalWatchlist|The Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now automatically determines the text direction (ensuring correct display of sites with unusual domain names) and shows detailed descriptions for log actions. Later this week, a new permanent link for page creations and CSS classes for each entry element will be added. [https://phabricator.wikimedia.org/T412505][https://phabricator.wikimedia.org/T287929][https://phabricator.wikimedia.org/T262768][https://phabricator.wikimedia.org/T414135]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the previously observed issue in Vector 2022, where anchor link targets were obscured by the sticky header, has now been addressed. [https://phabricator.wikimedia.org/T406114]
'''Updates for technical contributors'''
* As mentioned in the [[m:Special:MyLanguage/Tech/News/2025/44|October 2025 deprecation announcement]], MediaWiki Interfaces team will begin sunsetting all transform endpoints containing a trailing slash from the MediaWiki REST API the week of January 26. Changes are expected to roll out to all wikis on or before January 30th. All API users currently calling them are encouraged to transition to the non-trailing slash versions. Both endpoint variations can be found, compared, and tested using the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox]. If you have questions or encounter any problems, please file a ticket in Phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board].
* Interactive reference documentation for the [[mw:Special:MyLanguage/Wikimedia REST API|Wikimedia REST API]] has moved. Requests to API docs previously hosted through [[mw:Special:MyLanguage/RESTBase|RESTBase]] (e.g.: <code dir=ltr>https://en.wikipedia.org/api/rest_v1/</code>) are now redirected to the [[w:en:Special:RestSandbox|REST Sandbox]].
* The [[mw:Special:MyLanguage/Wikidata Platform|WMF Wikidata Platform team]] (WDP) has published its [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|January 2026 newsletter]]. It includes updates on the legacy full-graph endpoint decommissioning, the User-Agent policy change, the monthly Blazegraph migration office hours, and efforts to reduce regressions caused by the legacy endpoint shutdown. As a reminder, you can [[m:Special:MyLanguage/Global message delivery/Targets/WDP team updates|subscribe to the WDP newsletter]]!
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.12|MediaWiki]]
'''Meetings and events'''
* The [[mw:Wikimedia Hackathon Northwestern Europe 2026|Wikimedia Hackathon Northwestern Europe 2026]] will take place on 13-14 March 2026 in Arnhem, the Netherlands. Applications opened mid-December and will close soon or when capacity is reached. It's a two-day, technically oriented hackathon bringing together Wikimedians from the region. Hope to see you there!
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/04|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W04"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:30, 19 January 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29943403 -->
== Wikipedia translation of the week: 2026-05 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Raffaello Kobayashi]]'''<br /> <small>''([[:en:Raffaello Kobayashi]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Raffaello Kobayashi''', nato Raffaele Sanzio (Bari, 14 gennaio 1917 – Yokohama, 1 aprile 2011), è stato un militare italiano naturalizzato giapponese.
Sommergibilista durante la Seconda guerra mondiale, prestò servizio per tutte e tre le principali Potenze dell'Asse: Regno d'Italia, Germania nazista e Impero giapponese. Alla fine della guerra si nascose in Giappone per evitare di subire l'internamento in un campo di prigionia, divenendo poi cittadino nipponico e cambiando il proprio nome.
Prese parte all'affondamento della HMS Calypso nel 1940, primo successo italiano in campo navale nel corso del conflitto mondiale. Con l'abbattimento di un bombardiere statunitense il 22 agosto 1945, otto giorni dopo il discorso di resa del Giappone alle potenze alleate della seconda guerra mondiale, a bordo del Comandante Cappellini, sarebbe stata l'ultima persona in assoluto a mettere fuori combattimento un velivolo degli Alleati nella stessa guerra.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:05, 26 January 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-05 ==
<section begin="technews-2026-W05"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/05|Translations]] are available.
'''Updates for editors'''
* Wikimedia Foundation invites comments on [[m:Special:MyLanguage/Product and Technology Advisory Council/Year1 Reflections and Proposed Way Forward 2026 Update|proposed future]] of the [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] until 28 February.
* All users with registered accounts can now use passkeys for [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] (2FA). Passkeys are a simple way to log in without using a second device. They verify the user's identity using a fingerprint, face scan, or a PIN code. To set up a passkey, first set up a regular 2FA method. Currently, to log in with a passkey, users must also use a password. Later this quarter, passwordless login will allow users to log in with a single click and a passkey. Users with advanced rights will also be required to have 2FA enabled. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project.
* Unregistered contributors on blocked IPs or blocked IP ranges can now interact on-wiki to appeal a block by creating a temporary account to appeal a block on the user talk page, unless the "prevent this user from editing their own talk page" is enabled. This solves the problem of logged-out users unable to use the default unblock process via user talk page. [https://phabricator.wikimedia.org/T398673]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Two-Factor Authentication (2FA) methods description on the management page has been updated. It is now clearer and easier for users to understand and make use of. [https://phabricator.wikimedia.org/T332385]
'''Updates for technical contributors'''
* A new AbuseFilter variable, <code>account_type</code>, has been added to provide a reliable way to determine the account type being created in the <code>createaccount</code> and <code>autocreateaccount</code> actions. As part of this change, the variable <code>accountname</code> has been renamed to <code>account_name</code>, and <code>accountname</code> is now deprecated. Edit filter managers should update any filters that use hardcoded account type checks or the deprecated variable. [https://phabricator.wikimedia.org/T414049]
* Image thumbnails that are requested in non-standard sizes, and using non-standard methods such as direct requests to <code dir=ltr><nowiki>upload.wikimedia.org/…</nowiki></code> will stop working in the near future. This change is to prevent ongoing external abuse by web-scrapers and bots. Some users with custom CSS/JS, Interface Admins who can fix gadgets and local skins, and Tool-authors, will need to update their code to use standard thumbnail sizes. [[phab:T414805|Details, search-links, and examples of how to fix them, are available in the task]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.13|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/05|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W05"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:18, 26 January 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29969530 -->
== Wikipedia translation of the week: 2026-06 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Censorship in the Czech Republic]]'''<br /> <small>''([[:cs:Cenzura v Česku]])''</small> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Censorship in the Czech Republic''' had been highly active until 17 November 1989 and the fall of Communism in the former Czechoslovakia. Czech Republic was ranked as the 13th most free country in the World Press Freedom Index in 2014.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:32, 2 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-06 ==
<section begin="technews-2026-W06"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/06|Translations]] are available.
'''Updates for editors'''
* The "{{int:pageinfo-toolboxlink}}" feature, which gives validating information about a page ([{{fullurl:{{FULLPAGENAME}}|action=info}} example]), now automatically includes a table of contents. If there is a local [[{{ns:8}}:Pageinfo-header]] page created by individual users, it can now be removed. [https://phabricator.wikimedia.org/T363726]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, VisualEditor previously added bold or italic formatting inside link descriptions, making the wikicode complex. This has now been fixed. [https://phabricator.wikimedia.org/T409669]
'''Updates for technical contributors'''
* There was no XML dump on 20 January. Additionally, from now on, dumps will be generated once per month only. [https://phabricator.wikimedia.org/T414389]
* The MediaWiki Interfaces team removed support for all transform endpoints containing a trailing slash from the [https://www.mediawiki.org/wiki/Special:MyLanguage/API:REST%20API MediaWiki REST API]. All API users currently calling those endpoints are encouraged to transition to the non-trailing slash versions. If you have questions or encounter any problems, please file a ticket in phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.14|MediaWiki]]
'''Weekly highlight'''
* Users are reminded that the Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/06|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W06"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:44, 2 February 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30000986 -->
== Wikipedia translation of the week: 2026-07 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Petites Heures of Jean de France, Duc de Berry]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Jacquemart de Hesdin 002.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Petites Heures of Jean de France, Duc de Berry''' is an illuminated book of hours commissioned by John, Duke of Berry between 1375 and 1385–90. It is known for its ornate miniature leaves and border decorations.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 03:59, 9 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-07 ==
<section begin="technews-2026-W07"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/07|Translations]] are available.
'''Updates for editors'''
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] Logged-in contributors who manage large or complex watchlists can now organise and filter watched pages in ways that improve their workflows with the new [[mw:Special:MyLanguage/Help:Watchlist labels|Watchlist labels]] feature. By adding custom labels (for example: pages you created, pages being monitored for vandalism, or discussion pages) users can more quickly identify what needs attention, reduce cognitive load, and respond more efficiently. This improves watchlist usability, especially for highly active editors.
* A new feature available on [[Special:Contributions|Special:Contributions]] shows [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] that are likely operated by the same person, and so makes patrolling less time-consuming. Upon checking contributions of a temporary account, users with access to temporary account IP addresses can now see a view of contributions from the related temporary accounts. The feature looks up all the IPs associated with a given temporary account within the data retention period and shows all the contributions of all temporary accounts that have used these IPs. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts#February 2026: Improvements to the patroller tooling|Learn more]]. [https://phabricator.wikimedia.org/T415674]
* When editors preview a wikitext edit, the reminder box that they are only seeing a preview (which is shown at the top), now has a grey/neutral background instead of a yellow/warning background. This makes it easier to distinguish preview notes from actual warnings (for example, edit conflicts or problematic redirect targets), which will now be shown in separate warning or error boxes. [https://phabricator.wikimedia.org/T414742]
* The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now properly supports more than one Wikibase site, for example both [[d:|Wikidata]] and [[testwikidata:|testwikidata]]. In addition, issues regarding text direction have been fixed for users who prefer Wikidata or other Wikibase sites in right-to-left (RTL) languages. [https://phabricator.wikimedia.org/T415440][https://phabricator.wikimedia.org/T415458]
* The automatic "magic links" for ISBN, RFC, and PMID numbers have been [[mw:Special:MyLanguage/Help:Magic links|deprecated in wikitext since 2021]] due to inflexibility and difficulties with localization. Several wikis have successfully replaced RFC and PMID magic links with equivalent external links, but a template was often required to replace the functionality of the ISBN magic link. There is now a new [[mw:Special:MyLanguage/Help:Magic words#isbn|built-in parser function]] <code dir=ltr><nowiki>{{#isbn}}</nowiki></code> available to replace the basic functionality of the ISBN magic link. This makes it easier for wikis who wish to migrate off of the deprecated magic link functionality to do so. [https://phabricator.wikimedia.org/T145604]
* Two new wikis have been created:
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35401|Jju]] ([[w:kaj:|<code>w:kaj:</code>]]) [https://phabricator.wikimedia.org/T413283]
** a {{int:project-localized-name-group-wikipedia}} in [[d:Q1186896|Nawat]] ([[w:ppl:|<code>w:ppl:</code>]]) [https://phabricator.wikimedia.org/T413273]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* A new global user group has been created: [[{{int:grouppage-local-bot}}|{{int:group-local-bot}}]]. It will be used internally by the software to allow community bots to bypass rate limits that are applied to abusive [[w:en:Web scraping|web scrapers]]. Accounts that are approved as bots on at least one Wikimedia wiki will be automatically added to this group. It will not change what user permissions the bot has. [https://phabricator.wikimedia.org/T415588]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.15|MediaWiki]]
'''Meetings and events'''
* The [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Spring 2026|MediaWiki Users and Developers Conference, Spring 2026]] will be held March 25–27 in Salt Lake City, USA. This event is organized by and for the third-party MediaWiki community. You can propose sessions and register to attend. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/AZBWVI46SDEB65PGR5J6E4TYOQQEZXM7/]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/07|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W07"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:31, 9 February 2026 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30026671 -->
== Wikipedia translation of the week: 2026-08 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Lysmata grabhami]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lysmata grabhami1.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Lysmata grabhami''''' is a species of saltwater shrimp in the family Hippolytidae. It was first described by Gordon in 1935. It occurs in the tropical and subtropical Atlantic Ocean and is a cleaner shrimp, operating a cleaning station to which fish come to have parasites removed.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 13:45, 16 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=29945240 -->
== Tech News: 2026-08 ==
<section begin="technews-2026-W08"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/08|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|SRE Team]] will be performing a cleanup of Wikimedia's [[m:Special:MyLanguage/Etherpad|Etherpad]] instance, the web-based editor for real-time collaborative document editing. All pads will be permanently deleted after 30 April, 2026 – if there are still migration projects in progress at that point the team can revisit the date on a case by case basis. Please create local backups of any content you wish to keep, as deleted data cannot be recovered. This cleanup helps reduce database size and minimize infrastructure footprint. Etherpad will continue to support real-time collaboration, but long-term storage should not be expected. Additional cleanups may occur in the future without prior notice. [https://phabricator.wikimedia.org/T415237]
'''Updates for editors'''
* The Information Retrieval team will be launching an [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|Android mobile app experiment]] that tests hybrid search capabilities which can handle both semantic and keyword queries. The improvement of on-platform search will enable readers to find what they’re looking for directly on Wikipedia more easily. The experiment will first be launched on Greek Wikipedia in late February, followed by English, French, and Portuguese in March. [https://diff.wikimedia.org/2026/01/08/semantic-search-making-it-easier-to-find-the-information-readers-want/ Read more] on Diff blog. [https://www.mediawiki.org/wiki/Readers/Information_Retrieval]
* The Reader Growth team will run [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.10.2 Mobile Table of Contents|an experiment]] for mobile web users, that adds a table of contents and automatically expands all article sections, to learn more about navigation issues they face. The test will be available on Arabic, Chinese, English, French, Indonesian, and Vietnamese Wikipedias.
* Previously, site notices ([[{{ns:8}}:Sitenotice]] and [[{{ns:8}}:Anonnotice]]) would only render on the desktop site. Now, they will render on all platforms. Users on mobile web will now see these notices and be informed. Site administrators should be prepared to test and fix notices on mobile devices to avoid interference with articles. To opt out, interface admins can add <code dir="ltr">#siteNotice { display: none; }</code> to [[{{ns:8}}:Minerva.css]]. [https://phabricator.wikimedia.org/T138572][https://phabricator.wikimedia.org/T416644]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue on [[Special:RecentChanges|Special:RecentChanges]] has been fixed. Previously, clicking hide in the active filters caused the "view new changes since…" button to disappear, though it should have remained visible. The button now behaves as expected. [https://phabricator.wikimedia.org/T406339]
'''Updates for technical contributors'''
* New documentation is now available to help editors debug on-site search features. It supports troubleshooting when pages do not appear in results, when ranking seems unexpected, and when you need to inspect what content is being indexed, helping make search behavior easier to understand and analyze. [[mw:Help:CirrusSearch/Debug|Learn more]]. [https://phabricator.wikimedia.org/T411169]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.16|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/08|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W08"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:17, 16 February 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30086330 -->
== Wikipedia translation of the week: 2026-09 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Elefante di Cremona]]'''<br /> <small>''([[:de:Elefant von Cremona]]) ([[:eo:Elefanto de Cremona]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Matthew Paris Elephant from Parker MS 16 fol 151v.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
L''''elefante di Cremona''' (Asia, prima del 1228 - Parma, gennaio 1248) fu un esemplare di elefante donato nel 1228 a Federico II di Svevia da parte del sultano ayyubide al-Malik al-Kamil durante gli incontri che porteranno alla Pace di Giaffa. Usato principalmente per le manifestazioni trionfali del sovrano, l'elefante è citato da numerosi cronachisti e testimoni dell'epoca ed è noto per aver trainato il Carroccio dopo la grande vittoria delle armate di Federico II nella battaglia di Cortenuova del 1237. Rimasto a lungo nell'immaginario popolare collettivo, l'animale venne ucciso durante alcuni scontri occorsi nelle settimane immediatamente precedenti alla battaglia di Parma.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 11:43, 23 February 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30097839 -->
== Tech News: 2026-09 ==
<section begin="technews-2026-W09"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/09|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Edit check/Reference Check|Reference Check]] has been deployed to English Wikipedia, completing its rollout across all Wikipedias. The feature prompts newcomers to add a citation before publishing new content, helping reduce common citation-related reverts and improve verifiability. In A/B testing, the impact was substantial: newcomers shown Reference Check were approximately 2.2 times more likely to include a reference on desktop and about 17.5 times more likely on mobile web. [https://analytics.wikimedia.org/published/reports/editing/reference_check_ab_test_report_final_2025.html]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Extension:InterwikiSorting|InterwikiSorting extension]], which allowed for the [[m:Special:MyLanguage/Interwiki sorting order|sorting of interwiki links]], has been undeployed from Wikipedia. As a result, editors who had enabled interwiki link sorting in non-compact mode (full list format) will now see links reordered. The links moving forward will be listed in the alphabetical order of language code. [https://phabricator.wikimedia.org/T253764]
* Later this week, people who are editing a page-section using the mobile visual editor, will notice a new "Edit full page" button. When tapped, you will be able to edit the entire article. This helps when the change you want to make is outside the section you initially opened. [https://phabricator.wikimedia.org/T387175][https://phabricator.wikimedia.org/T409112]
* [[mw:Special:MyLanguage/Readers/Reader Experience|The Reader Experience team]] is inviting editors to assess whether dark mode should still be considered "beta" on their wiki, based on their experience of how well it functions on desktop and mobile. If the feature is deemed mature, editors can update the interface messages in <code dir=ltr>MediaWiki:skin-theme-description</code> and <code dir=ltr>MediaWiki:Vector-night-mode-beta-tag</code> to indicate that dark mode is ready and no longer considered beta.
* The improved [[mw:Wikimedia_Apps/Team/iOS/Activity_Tab|Activity tab]] which displays user-insights is now available to all users of the Wikipedia iOS app (version 7.9.0 and later). Following earlier A/B testing that showed higher account creation among users with access to the feature, it has been rolled out to 100% of users along with some updates. The Activity tab now shows your edited articles in the timeline, offers editing impact insights like contribution counts and article view trends, and customization options to improve in-app experience for users.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug that prevented [[mw:Special:MyLanguage/Extension:DiscussionTools|DiscussionTools]] from working on mobile has now been fixed, restoring full functionality. [https://phabricator.wikimedia.org/T415303]
'''Updates for technical contributors'''
* The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that makes this possible continues to improve. The latest upgrade is the inclusion of a [[mw:Extension:GlobalWatchlist#hook|new hook]], <code dir=ltr>ext.globalwatchlist.rebuild</code>, which fires after each watchlist rebuild. This allows you to run gadgets and user scripts for the Special page. [https://phabricator.wikimedia.org/T275159]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.17|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/09|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W09"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:04, 23 February 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30119102 -->
== Wikipedia translation of the week: 2026-10 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Treaty of the Danish West Indies]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:The Virgin islands of the United States of America; historical and descriptive, commercial and industrial facts, figures, and resources (1918) (14596880870).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Treaty of the Danish West Indies''' (Danish: Vestindiens traktat), officially the Convention between the United States and Denmark for cession of the Danish West Indies (Danish: Konventionen mellem USA og Danmark), was a 1916 treaty transferring sovereignty of the Danish West Indies from Denmark to the United States in exchange for a sum of US$25,000,000 in gold ($722 million in 2024) and a declaration from the United States that it would "not object to the Danish Government extending their political and economic interests to the whole of Greenland". It is one of the most recent permanent expansions of United States territory.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:43, 2 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30097839 -->
== Tech News: 2026-10 ==
<section begin="technews-2026-W10"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/10|Translations]] are available.
'''Weekly highlight'''
* Wikipedia 25 [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments|Birthday mode]] is now live on Betawi, Breton, Chinese, Czech, Dutch, English, French, Gorontalo, Indonesian, Italian, Luxembourgish, Madurese, Sicilian, Spanish, Thai, and Vietnamese Wikipedias! This limited-time campaign feature celebrates 25 years of Wikipedia with a birthday mascot, Baby Globe. When turned on, Baby Globe is shown on [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments/article configuration|~2,500 articles]], waiting to be discovered by readers. Communities can choose to turn Birthday mode on by getting consensus from their community and asking an admin to enable the feature and customize it via [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments#Community Configuration Demo|community configuration]] on the local wiki.
'''Updates for editors'''
* [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new feature to re-use references with different details has been released to Swedish Wikipedia, Polish Wikipedia and [[:phab:T418209|a couple of other wikis]]. You can [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#test|try the feature]] on these projects or on testwiki and [https://en.wikipedia.beta.wmcloud.org/wiki/Sub-referencing betawiki]. Learnings from the first pilot wiki German Wikipedia have been [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing/Learnings|published in a report]]. Reach out to the Wikimedia Deutschland team if you are [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Pilot wikis|interested in becoming a pilot wiki]].
* [[mw:Special:MyLanguage/Help:Edit check#Paste check|Paste Check]] will become available at all Wikipedias this week. The feature prompts newcomers who are pasting text they are not likely to have written into VisualEditor to consider whether doing so risks a copyright violation. Paste Check [[mw:Special:MyLanguage/Edit check/Tags|tags]] all edits where it is shown for potential review. Local administrators can configure various aspects of the feature via [[{{#special:EditChecks}}]]. [[mw:Special:MyLanguage/Edit check/Paste Check#A/B Experiment|Research]] across 22 wikis found that Paste Check resulted in an 18% decrease in relative reverted-edits compared to the control group. Translators can [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-visualeditor-ve-mw-editcheck&filter=&optional=1&action=translate help to localize] this and related features.
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] will be standardizing the user menu in the top right for all mobile users so that it is closer to the desktop experience. Currently this user menu is only visible to users with Advanced Mobile Controls (AMC) turned on. The only change is that a couple buttons previously in the left-side menu will move to the top right for users who do not have AMC turned on. This change is expected to go out March 9 and seeks to improve the user interface. [https://phabricator.wikimedia.org/T413912]
* Starting in the week of March 2, the emails sent out when an email address was added, removed, or changed for an account will switch to a substantially nicer and clearer HTML email from the prior plaintext one. [https://phabricator.wikimedia.org/T410807]
* Notifications are currently limited to 2,000 historic entries per user, and extend back to 2013 when the feature was released. This is going to be changed to only store Notifications from the last 5 years, but up to 10,000 of them. This will help with long-term infrastructure health and help to prevent more recent notifications from disappearing too soon. [https://phabricator.wikimedia.org/T383948]
* The [[m:Special:GlobalWatchlist|Global Watchlist]] which lets you view your watchlists from multiple wikis on a single page continues to see improvements. The latest update improves label usage experience. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] now allows activating the [[mw:Special:MyLanguage/Manual:Language#Fallback languages|language fallback system]] for Wikidata items without labels in the viewed language, and showing those labels in the user’s preferred Wikidata language if no <code dir=ltr>uselang=</code> URL parameter is provided. [https://phabricator.wikimedia.org/T373686][https://phabricator.wikimedia.org/T416111]
* The Wikipedia Android team has started a beta test of [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|hybrid search]] on Greek Wikipedia. Hybrid search capabilities can handle both semantic and keyword queries enabling readers to find what they’re looking for directly on Wikipedia more easily.
* For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Currently, 2FA is required to use the group, but not to be a member of it. Given that this model still has some vulnerabilities, the situation will [[phab:T418580|gradually change in March]]. Members of these groups will be unable to disable last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the second half of March, users without 2FA will be removed from these groups. This applies to: CentralNotice administrators, checkusers, interface administrators, suppressors, Wikidata staff, Wikifunctions staff, WMF Office IT and WMF Trust & Safety. Nothing will change for other users. See the linked task for deployment schedule. [https://phabricator.wikimedia.org/T418580]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue preventing users from creating an instance in [https://www.wikibase.cloud/ Wikibase.cloud] has now been fixed. [https://phabricator.wikimedia.org/T416807]
'''Updates for technical contributors'''
* To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], over the next month the Wikimedia Foundation will implement global API rate limits across our APIs. In early March, stricter limits will be applied to unidentified requests from outside Toolforge/WMCS and API requests that are made from web browsers. In April, higher limits will be applied to identified traffic. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]].
* The Wikidata Query Service Linked Data Fragment (LDF) endpoint will be decommissioned in February. This endpoint served limited traffic, which was successfully migrated to other data access methods that were better suited to support existing use cases. The hardware used to support the LDF endpoint will be reallocated to support the ongoing backend migration efforts. [https://phabricator.wikimedia.org/T415696]
* The new Parsoid parser [[mw:Special:MyLanguage/Parsoid/Parser Unification/Updates|continues to be deployed to additional wikis]], improving platform sustainability and making it easier to introduce new reading and editing features. Parsoid is now the default parser on 488 WMF wikis (268 Wikipedias), now covering more than 10% of all Wikipedia page views.
* The process and criteria for [[Special:MyLanguage/Wikimedia Enterprise#Access|requesting exceptional access]] to the high volume feed of the ''Wikimedia Enterprise'' APIs (at no cost for mission-aligned usecases), [[m:Talk:Wikimedia Enterprise#Exceptional access criteria|have now been published]]. This is to provide more thorough and clearer documentation for users.
* [https://techblog.wikimedia.org/ Tech Blog], the blog dedicated to the Wikimedia technical community [https://techblog.wikimedia.org/2026/02/24/a-tech-blog-diff/ will be migrating] to [[diffblog:|Diff]], the community news and event blog. The migration should be complete in April 2026, after which new posts will be accepted for publishing. Readers will be able to access posts – old and new – on the landing page at https://diff.wikimedia.org/techblog.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.18|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/10|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W10"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:52, 2 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30137798 -->
== Wikipedia translation of the week: 2026-11 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Steens Mountain]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Steens Mountain near Andrews, Oregon.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Steens Mountain''' is a large fault-block mountain in the northwest United States, located in Harney County, Oregon. Stretching some fifty miles (80 km) north to south, on its east side it rises from the Alvord Desert at an elevation of about 4,200 feet (1,280 m) to 9,738 feet (2,968 m) at the summit. Steens Mountain is not part of a mountain range but is properly a single mountain, the largest of Oregon's fault-block mountains.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 07:30, 9 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30097839 -->
== Tech News: 2026-11 ==
<section begin="technews-2026-W11"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/11|Translations]] are available.
'''Weekly highlight'''
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies.
* Last week, all wikis had 2 hours of read-only time, and extended unavailability for user-scripts and gadgets. This was due to a security incident which has since been resolved. Work is ongoing to prevent re-occurrences. For current information please see the [[m:Steward's noticeboard#Statement on Meta about today's user script security incident|post on the Stewards' noticeboard]] ([[m:Special:MyLanguage/Wikimedia Foundation/Product and Technology/Product Safety and Integrity/March 2026 User Script Incident|translations]]).
'''Updates for editors'''
* Users facing multiple blocks on mobile will now see the reasons for each block separately, instead of a generic message. This helps them understand why they are blocked and what steps they can take to resolve the issue. For example, users affected for using common VPNs (such as [[Special:MyLanguage/Apple iCloud Private Relay|iCloud Private Relay]]) will receive clearer guidance on what they need to do to start editing again. [https://phabricator.wikimedia.org/T357118]
* Later this week, [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] will become available as a beta feature within the visual editor at all Wikipedias. This feature proactively suggests various types of actions that people can consider taking to improve Wikipedia articles, and learn about related guidelines. The feature is locally configurable, and can also be locally expanded with custom Suggestions. Current settings can be seen at [[Special:EditChecks]] and there are [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators %E2%80%93 local customization|instructions for how administrators can customize]] the links to point to local guidelines. The feature is connected to [[mw:Special:MyLanguage/Help:Edit check|Edit check]] which suggests improvements while someone is writing new content. In the future, the Editing team plans to evaluate the feature's impact with newcomers through a controlled experiment. [https://phabricator.wikimedia.org/T404600]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where the cursor became misaligned during the use of CodeMirror’s syntax highlighting, which makes wikitext and code easier to read, has now been fixed. This problem specifically affected users who defined a font rule in a custom stylesheet while creating a new topic with DiscussionTools. [https://phabricator.wikimedia.org/T418793]
'''Updates for technical contributors'''
* API rate limiting update: To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], global API rate limits will be applied this week to requests without a compliant User-Agent that originate from outside Toolforge/WMCS and to unauthenticated requests made from web browsers. Higher limits will be applied to identified traffic in April. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]].
* The new GraphQL API has been released. The API was developed as a flexible alternative to select features of the Wikidata Query Service (WDQS), to improve developer experience and foster adaptability, and efficient data access. Try it out and [[d:Wikidata:Wikibase GraphQL#Feedback and development|give feedback]]. You can also [https://greatquestion.co/wikimediadeutschland/GraphQLAPI/apply sign up for usability tests].
* The [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|PTAC Unsupported Tools Working Group]] continued improvements to [[commons:Special:MyLanguage/Commons:Video2commons#|Video2Commons]] in February, with fixes addressing authentication errors, large-file handling, task queue visibility, and clearer upload behavior. Work is still ongoing in some areas, including changes related to deprecated server-side uploads. Read [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group#February 2026|this update]] to learn more.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.19|MediaWiki]]
'''In depth'''
* The Article Guidance team invites experienced Wikipedia editors from selected [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators#Collaborators|pilot wikis]] and interested contributors from other Wikipedias to fill out this questionnaire which is available in [https://docs.google.com/forms/d/e/1FAIpQLSfmLeVWnxmsCbPoI_UF2jyRcn73WRGWCVPHzerXb4Cz97X_Ag/viewform English], [https://docs.google.com/forms/d/e/1FAIpQLSd6rzr4XXQw8r4024fE3geTPFe13M_6w7Mitj-YJi0sOlWTAw/viewform?usp=header Arabic], [https://docs.google.com/forms/d/e/1FAIpQLSdok3-RfB18lcugYTUMGkpwmqG_8p760Wv4dCXitOXOszjUDw/viewform?usp=header Bengali], [https://docs.google.com/forms/d/e/1FAIpQLSfjTfYp4jEo0akA4B1e-Nfg3QZPCudUjhJzHzzDi6AHyAaMGA/viewform?usp=header Japanese], [https://docs.google.com/forms/d/e/1FAIpQLScteVoI29Aue4xc72dekk-6RYtvmMgQxzMI900UOawrFrSTWg/viewform?usp=header Portuguese], [https://docs.google.com/forms/d/e/1FAIpQLSetdxnYwL3ub2vqA7awCg5hJZPMIYcDPaiTe12rY9h0GYnVlw/viewform?usp=header Persian], and [https://docs.google.com/forms/d/e/1FAIpQLScNvfJF-Ot-4pzA4qAN771_0QDJ4Li19YcUsaTgSKW8Nc7U_Q/viewform?usp=header Turkish]. Your answers will help the team customize guidance for less experienced editors and help them learn community policies and practices while creating an article. Learn more [[mw:Special:MyLanguage/Article guidance|on the project page]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/11|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W11"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:53, 9 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30213008 -->
== Wikipedia translation of the week: 2026-12 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Casque (anatomy)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Great hornbill (Buceros bicornis) Photograph by Shantanu Kuveskar.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''casque''' is an anatomical feature found in some species of birds, reptiles, and amphibians. In birds, it is an enlargement of the bones of the upper mandible or the skull, either on the front of the face, the top of the head, or both. The casque has been hypothesized to serve as a visual cue to a bird's sex, state of maturity, or social status; as reinforcement to the beak's structure; or as a resonance chamber, enhancing calls.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:43, 16 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30245038 -->
== Tech News: 2026-12 ==
<section begin="technews-2026-W12"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/12|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature, also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], has been used for wikitext syntax highlighting since November 2024. It will be promoted out of beta by May 2026 in order to bring improvements and new [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Features|features]] to all editors who use the standard syntax highlighter. If you have any questions or concerns about promoting the feature out of beta, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|please share]]. [https://phabricator.wikimedia.org/T259059]
* Some changes to local user groups are performed by stewards on Meta-Wiki and logged there only. Now, interwiki rights changes will be logged both on Meta-Wiki and the wiki of the target user to make it easier to access a full record of user's rights changes on a local wiki. Past log entries for such changes will be backfilled in the coming weeks. [https://phabricator.wikimedia.org/T6055]
* On wikis using [[m:Special:MyLanguage/Flagged Revisions|Flagged Revisions]], the number of pending changes shown on [[{{#Special:PendingChanges}}]] previously counted pages which were no longer pending review, because they have been removed from the system without being reviewed, e.g. due to being deleted, moved to a different namespace, or due to wiki configuration changes. The count will be correct now. On some wikis the number shown will be much smaller than before. There should be no change to the list of pages itself. [https://phabricator.wikimedia.org/T413016]
* Wikifunctions composition language has been rewritten, resulting in a new version of the language. This change aims to increase service stability by reducing the orchestrator's memory consumption. This rewrite also enables substantial latency reduction, code simplification, and better abstractions, which will open the door to later feature additions. Read more about [[f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-11|the changes]].
* Users can now sort search results alphabetically by page title. The update gives an additional option to finding pages more easily and quickly. Previously, results could be sorted by Edit date, Creation date, or Relevance. To use the new option, open 'Advanced Search' on the search results page and select 'Alphabetically' under 'Sorting Order'. [https://phabricator.wikimedia.org/T403775]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented UploadWizard on Wikimedia Commons from importing files from Flickr has now been fixed. [https://phabricator.wikimedia.org/T419263]
'''Updates for technical contributors'''
* A new special page, [[{{#special:LintTemplateErrors}}]], has been created to list transcluded pages that are flagged as containing lint errors to help users discover them easily. The list is sorted by the number of transclusions with errors. For example: [[{{#special:LintTemplateErrors}}/night-mode-unaware-background-color]]. [https://phabricator.wikimedia.org/T170874]
* Users of the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature have been using [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages, for some time now. Along with promoting CodeMirror 6 out of beta, the plan is to replace CodeEditor as the standard editor for these content models by May 2026. [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|Feedback or concerns are welcome]]. [https://phabricator.wikimedia.org/T419332]
* The [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] JavaScript modules will soon be upgraded to CodeMirror 6. Leading up to the upgrade, loading the <code dir=ltr>ext.CodeMirror</code> or <code dir=ltr>ext.CodeMirror.lib</code> modules from gadgets and user scripts was deprecated in July 2025. The use of the <code dir=ltr>ext.CodeMirror.switch</code> hook was also deprecated in March 2025. Contributors can now make their scripts or gadgets compatible with CodeMirror 6. See the [[mw:Special:MyLanguage/Extension:CodeMirror#Gadgets and user scripts|migration guide]] for more information. [https://phabricator.wikimedia.org/T373720]
* The MediaWiki Interfaces team is expanding coverage of REST API module definitions to include [[mw:Special:MyLanguage/API:REST API/Extensions|extension APIs]]. REST API modules are groups of related endpoints that can be independently managed and versioned. Modules now exist for [https://phabricator.wikimedia.org/T414470 GrowthExperiments] and [https://phabricator.wikimedia.org/T419053 Wikifunctions] APIs. As we migrate extension APIs to this structure, documentation will move out of the main MediaWiki OpenAPI spec and REST Sandbox view, and will instead be accessible via module-specific options in the dropdown on the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox] (i.e., [[{{#Special:RestSandbox}}]], available on all wiki projects).
* The [[mw:Special:MyLanguage/Extension:Scribunto|Scribunto]] extension provides different pieces of information about the wiki where the module is being used via the [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual|mw.site]] library. Starting last week, the library also provides a [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.site.wikiId|way]] of accessing the [[mw:Special:MyLanguage/Manual:Wiki ID|wiki ID]] that can be used to facilitate cross-wiki module maintenance. [https://phabricator.wikimedia.org/T146616]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.20|MediaWiki]]
'''In depth'''
* The [[m:Special:MyLanguage/Coolest Tool Award|2026 Coolest Tool Award]] celebrating outstanding community tools, is now open for nominations! Nominate your favorite tool using the [https://wikimediafoundation.limesurvey.net/435684?lang=en nomination survey] form by 23 March 2026. For more information on privacy and data handling, please see the [[foundation:Special:MyLanguage/Legal:Coolest_Tool_Award_2026_Survey_Privacy_Statement|survey privacy statement]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/12|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W12"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:36, 16 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30260505 -->
== Wikipedia translation of the week: 2026-13 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Etruscan sculpture]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Frontone A del grande tempio di luni con concilio degli dei, 175-150 ac. ca. 01.JPG|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Etruscan sculpture''' was one of the most important artistic expressions of the Etruscan people, who inhabited the regions of Northern Italy and Central Italy between about the 9th century BC and the 1st century BC. Etruscan art was largely a derivation of Greek art, although developed with many characteristics of its own. Given the almost total lack of Etruscan written documents, a problem compounded by the paucity of information on their language—still largely undeciphered—it is in their art that the keys to the reconstruction of their history are to be found, although Greek and Roman chronicles are also of great help. Like its culture in general, Etruscan sculpture has many obscure aspects for scholars, being the subject of controversy and forcing them to propose their interpretations always tentatively, but the consensus is that it was part of the most important and original legacy of Italian art and even contributed significantly to the initial formation of the artistic traditions of ancient Rome.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:07, 23 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30245038 -->
== Tech News: 2026-13 ==
<section begin="technews-2026-W13"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/13|Translations]] are available.
'''Weekly highlight'''
* Wikimedia site users can now log in without a password using passkeys. This is a secure method supported by fingerprint, facial recognition, or PIN. With this change, all users who opt for passwordless login will find it easier, faster, and more secure to log in to their accounts using any device. The new passkey login option currently appears as an autofill suggestion in the username field. An additional [[phab:T417120|"Log in with passkey" button]] will soon be available for users who have already registered a passkey. This update will improve security and user experience. The [[c:File:Passwordless_login_screencast.webm|screen recording]] demonstrates the passwordless login process step by step.
* [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies.
'''Updates for editors'''
* Wikimedia site users can now export their notifications older than 5 years using a [[toolforge:echo-chamber|new Toolforge tool]]. This will ensure that users retain their important notifications and avoid them being lost based on the planned change to delete notifications older than 5 years, as previously announced. [https://phabricator.wikimedia.org/T383948]
* Wikipedia editors in Indonesian, Thai, Turkish, and Simple English now have access to Special:PersonalDashboard. This is an [[mw:Special:MyLanguage/Moderator Tools/Dashboard|early version of an experience]] that introduces newer editors to patrolling workflows, making it easier for them to move from making edits to participating in more advanced moderation work on their project. [https://phabricator.wikimedia.org/T402647]
* The [[Special:Block]] now has two minor interface changes. Administrators can now easily perform indefinite blocks through a dedicated radio button in the expiry section. Also, choosing an indefinite expiry provides a different set of common reasons to select from, which can be changed at: [[MediaWiki:Ipbreason-indef-dropdown]]. [https://phabricator.wikimedia.org/T401823]
* Mobile editors [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#Logged-out|at several wikis]] can now see an improved logged-out edit warning, thanks to the recent updates from the Growth team. These changes released last week are part of ongoing efforts and tests to enhance [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|account creation experience on mobile]] and then increase participation. [https://phabricator.wikimedia.org/T408484]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:36}} community-submitted {{PLURAL:36|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented mobile web users from seeing the block information when affected by multiple blocks has been fixed. They can now see messages of all the blocks currently affecting them when they access Wikipedia.
'''Updates for technical contributors'''
* Images built using Toolforge will soon get the upgraded buildpacks version, bringing support for newer language versions and other upstream improvements and fixes. If you use Toolforge Build Service, review the recent [https://lists.wikimedia.org/hyperkitty/list/cloud-announce@lists.wikimedia.org/thread/EMYTA32EV2V5SQ2JIEOD2CL66YFIZEKV/ cloud-announce email] and update your build configuration as necessary to ensure your tools are compatible. [https://wikitech.wikimedia.org/w/index.php?title=Help:Toolforge/Building_container_images&oldid=2392097#Buildpack_environment_upgrade_process][https://phabricator.wikimedia.org/T380127]
* The [https://api.wikimedia.org/wiki/Main_Page API Portal] documentation wiki will shut down in June 2026. API keys created on the API Portal will continue to work normally. api.wikimedia.org endpoints will be deprecated gradually starting in July 2026. Documentation on the API Portal is moving to [[mw:Wikimedia APIs|mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.21|MediaWiki]]
'''In depth'''
* [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] is considering improvements to [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|automatically generated reference names in VisualEditor]]. Please check out the [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names#Proposed solutions|proposed solutions]] and participate in the [[m:Talk:WMDE Technical Wishes/References/VisualEditor automatic reference names#Request for comment|request for comment]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/13|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W13"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:51, 23 March 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30268305 -->
== Wikipedia translation of the week: 2026-14 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Pulse (nightclub)]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Orlando FL Pulse Nightclub01.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Pulse''' was a gay bar, dance club, and nightclub in Orlando, Florida, founded in 2004 by Barbara Poma and Ron Legler. On June 12, 2016, the club was the scene of the second-deadliest mass shooting by a single gunman in U.S. history, and the second-deadliest terrorist attack on U.S. soil since the September 11 attacks. Forty-nine people were killed and 58 other people were injured.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:37, 30 March 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30306870 -->
== Tech News: 2026-14 ==
<section begin="technews-2026-W14"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/14|Translations]] are available.
'''Weekly highlight'''
* The Beta version of [[abstract:|Abstract Wikipedia]] a new Wikimedia project which is language-independent, was launched last week. The project allows communities to build Wikipedia articles in their native language, which can be readily accessed by other users in their own languages. The wiki is powered by instructions from Wikifunctions and also based on structured content from Wikidata. [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-26|Read more]].
'''Updates for editors'''
* The Growth team is running an A/B test to evaluate a clearer, more user-friendly message that promotes account creation on wikis. Currently when logged-out mobile users begin editing, they see a jarring warning message that can feel abrupt and discouraging. This also presents temporary account editing as the default rather than encouraging account creation. The test is running on ten Wikipedias, including Arabic, French, Spanish and German. [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#2. Improve logged-out warning message (T415160)|Read more]].
* The Wikimedia Apps team is inviting feedback on [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|how editing should work on the Wikipedia mobile apps]]. The discussion focuses on improving how users access editing tools when they tap "Edit". This is part of a broader effort to convert readers who develop an interest in editing, to access a more user-friendly pathway to start contributing.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:45}} community-submitted {{PLURAL:45|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where citation fetching from the large newspaper archive [https://www.newspapers.com Newspapers.com] was no longer working, due to a block in [[mw:Special:MyLanguage/Citoid|Citoid]] requests, has now been fixed. [https://phabricator.wikimedia.org/T419903]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.22|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/14|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W14"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:26, 30 March 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30329462 -->
== Wikipedia translation of the week: 2026-15 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Tofana di Rozes]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Tofana di Rozes 04.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Tofana di Rozes''' (3,225 metres (10,581 ft)) is a mountain of the Dolomites in the Province of Belluno, Veneto, Italy. Located west of the resort of Cortina d'Ampezzo, the mountain's giant three-edged pyramid shape and its vertical south face, above the Falzarego Pass, makes it the most popular peak in the Tofane group, and one of the most popular in the Dolomites.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:27, 6 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30306870 -->
== Tech News: 2026-15 ==
<section begin="technews-2026-W15"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/15|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] now includes a new group goal-setting feature, enabling organizers to set and track event goals such as the number of articles created and participating contributors in real time. Similarly, participants can work toward shared targets and see their collective impact as the event unfolds. The feature is now available on all Wikimedia wikis. Learn more in [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Collaborative contributions#Goal setting|the documentation]].
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] The new [[mw:Special:MyLanguage/Help:Watchlist labels|watchlist labels]] feature (announced in [[m:Special:MyLanguage/Tech/News/2026/07|Tech News 2026-07]]) is now available via VisualEditor, the source editor, and the 'watchstar' (or watch link, for skins that don't have a star icon). Previously it was only possible to assign labels via [[Special:EditWatchlist|EditWatchlist]]. In all three places it is a new field following the expiry field.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where talk pages on mobile with Parsoid are unusable after empty section headers, has now been fixed. [https://phabricator.wikimedia.org/T419171]
'''Updates for technical contributors'''
* The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|sub-referencing feature]], which lets editors add details to an existing reference without duplicating it, will be gradually rolled out to [[phab:T414094|more wikis]] later this year. Wikis using the [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]] gadget are encouraged to update their version (typically at [[m:MediaWiki:Gadget-ReferenceTooltips.js|MediaWiki:Gadget-ReferenceTooltips.js]] as shown [https://en.wikipedia.org/w/index.php?diff=1344408362 here]) to ensure compatibility. Other reference-related gadgets may also be affected. [https://phabricator.wikimedia.org/T416304]
* All Wikinews editions will be closed and switched to read-only mode on 4 May 2026. Content will remain accessible, but no new edits or articles can be added. This closure was approved by the Board of Trustees of the Wikimedia Foundation following extended discussions. [[m:Wikimedia Foundation Board noticeboard#Board of Trustees Approves Closure of Wikinews|Read more]].
* The [[:mw:Special:MyLanguage/API:Action API|Action API]] has had several formats for requested output. One of them, <bdi lang="zxx" dir="ltr"><code><nowiki>format=php</nowiki></code></bdi>, is being removed soon. Please ensure your scripts or bots use the [[mw:Special:MyLanguage/API:Data formats#Output|JSON format]]. This removal should affect very few scripts and bots. [https://phabricator.wikimedia.org/T118538]
* The [[Special:NamespaceInfo|Special:NamespaceInfo]] page now includes namespace aliases. For example "WP" for the "Project" ("Wikipedia") namespace on the German Wikipedia. [https://phabricator.wikimedia.org/T381455]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.23|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/15|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W15"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:19, 6 April 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30362761 -->
== Wikipedia translation of the week: 2026-16 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Very-low-calorie diet]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Green smoothie (8222465502).jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
A '''very-low-calorie diet''' (VLCD), also known as semistarvation diet and crash diet, is a type of diet with very or extremely low daily food energy consumption. VLCDs are defined as a diet of 800 kilocalories (3,300 kJ) per day or less. Modern medically supervised VLCDs use total meal replacements, with regulated formulations in Europe and Canada which contain the recommended daily requirements for vitamins, minerals, trace elements, fatty acids, protein and electrolyte balance.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:56, 13 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30306870 -->
== Tech News: 2026-16 ==
<section begin="technews-2026-W16"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/16|Translations]] are available.
'''Weekly highlight'''
* Experienced editors are invited to [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Main_Page test] the [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature, designed to help less-experienced editors create well-structured, policy-compliant Wikipedia articles. Testing instructions are [[mw:Special:MyLanguage/Article guidance/Test feature guide|available]]. Also, after reviewing [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance the outlines], please provide feedback on the [[mw:Talk:Article guidance|project talk page]]. Based on your input, the feature will be refined and transferred to the pilot Wikipedias to translate and adapt. Check out [[c:File:Article Guidance workflow demo - April 2026.webm|the video]] explaining the feature.
'''Updates for editors'''
* On most wikis, all autoconfirmed users can now use [[Special:ChangeContentModel|Special:ChangeContentModel]] page to [[mw:Special:MyLanguage/Help:ChangeContentModel|create new pages with custom content models]], such as mass message lists, making custom page formats more accessible. Check [[Special:ListGroupRights|Special:ListGroupRights]] for the status of your wiki. [https://phabricator.wikimedia.org/T248294]
* The Growth team has launched an [[mw:Special:MyLanguage/Contributors/Account_Creation_Experiments|account creation experiment]] to evaluate whether adding an account creation button to the mobile web header increases new account registrations and encourages more mobile users to contribute to the wikis. The experiment is currently live on Hindi, Indonesian, Bengali, Thai, and Hebrew Wikipedia, and targets 10% of logged-out mobile web users.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where VisualEditor could get stuck loading on Windows devices with animations turned off, has now been fixed. [https://phabricator.wikimedia.org/T382856]
'''Updates for technical contributors'''
* Starting later this week, {{int:group-abusefilter}} who have the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature enabled will have [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] as the editor at [[Special:AbuseFilter|Special:AbuseFilter]]. This is part of the broader effort to make the user experience more consistent across all editors. [https://phabricator.wikimedia.org/T399673][https://phabricator.wikimedia.org/T419332]
* Tools and bots that access the [[mw:Special:MyLanguage/Notifications/API|Notifications API]] (<bdi lang="zxx" dir="ltr"><code><nowiki>action=query&meta=notifications</nowiki></code></bdi>) will need to update their OAuth or BotPassword grants to also include access to private notifications. [https://phabricator.wikimedia.org/T421991]
* Due to a library upgrade, listings on category pages may be displayed out of order starting on Monday, 20th April. A migration script will be run to correct this, and will take hours to days depending on the size of the wiki (up to a week for English Wikipedia). [https://phabricator.wikimedia.org/T422544]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.24|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/16|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W16"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:19, 13 April 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30380527 -->
== Wikipedia translation of the week: 2026-17 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Chromodoris willani]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Babosa de mar (Chromodoris willani), Anilao, Filipinas, 2023-08-24, DD 34.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''''Chromodoris willani''''', commonly known as Willan's chromodoris, is a species of sea slug, a dorid nudibranch, a shell-less marine gastropod mollusk in the family Chromodorididae. The species is named for the renowned nudibranch taxonomist Dr. Richard C. Willan.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:34, 20 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30430366 -->
== Tech News: 2026-17 ==
<section begin="technews-2026-W17"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/17|Translations]] are available.
'''Weekly highlight'''
* After two years of development, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]], also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], is to be promoted out of beta on Tuesday, April 21. It brings better code and wikitext readability, reduction in typing errors, and other [[mw:Special:MyLanguage/Help:Extension:CodeMirror|benefits]] to all users of the standard syntax highlighter. A huge thank you to volunteer [https://phabricator.wikimedia.org/p/Bhsd/ Bhsd] who developed many of the new features, including [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Code folding|code folding]], [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|autocompletion]], and [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|linting]]. [https://phabricator.wikimedia.org/T259059]
* A major update to the Wikipedia app for iOS is now rolling out, redesigning the interface to align with Apple's latest "Liquid Glass" visual design. [https://apps.apple.com/us/app/wikipedia/id324715238 Download the latest version] and explore the update.
'''Updates for editors'''
* [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Reading lists]] is a feature which allows readers to save articles to a list for reading later. This feature is now in beta on Arabic, French, Indonesian, Vietnamese, and Chinese Wikipedias and by default for all new accounts on all Wikipedias.
* An experiment which explores extending [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Page Previews to mobile web]] will be launched in the week of April 20 on Arabic, English, French, Italian, Polish, and Vietnamese Wikipedias. Page Previews are pop-ups that display a thumbnail, lead paragraph, and a link to open the full article of a blue link, thereby improving content discovery. The feature is already available on desktop and in the apps. [[m:Special:MyLanguage/List of experiments in Product and Technology#Template|Read more about this experiment and others]].
* On several wikis, logged-in editors who haven't [[mw:Special:MyLanguage/Help:Email confirmation|confirmed their email addresses]] can now see a banner encouraging them to do so. Having the email address confirmed allows a user to restore access to the account if they lose it. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Encouraging users to confirm their email addresses|Learn more]]. [https://phabricator.wikimedia.org/T421366]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:15}} community-submitted {{PLURAL:15|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where editing very large wiki pages in the 2017 wikitext editor caused slow loading, preview and scrolling lag, and performance issues when selecting, cutting, or pasting content, has now been fixed. [https://phabricator.wikimedia.org/T184857]
'''Updates for technical contributors'''
* As part of the promotion of [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] from a beta feature, all users will use [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages. [https://phabricator.wikimedia.org/T419332]
* The <code>mirrors.wikimedia.org</code> service for Debian and Ubuntu users will sunset and stop working on May 15. The resources for the service will be replaced with new and better options. Some users may need to switch to a different server which should take about a minute. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LJYRIS4WB66HIRCAO4GIDTXCMDVZRBMA/ You can read more]. [https://phabricator.wikimedia.org/T416707]
* The <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> table will be removed from [[wikitech:Help:Wiki Replicas|wikireplicas]]. If your tools or queries access <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> or <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> directly, please update them to use the <bdi lang="zxx" dir="ltr"><code><nowiki>file</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>filerevision</nowiki></code></bdi> table before 28 May. [https://phabricator.wikimedia.org/T28741]
* Following the recent implementation of global API rate limits on unidentified traffic, the Wikimedia Foundation will continue efforts to ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]] by applying global limits to identified API traffic beginning the last week of April. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]].
* The [[mw:Special:MyLanguage/Attribution API|Attribution API]] is now available as a [[mw:Special:MyLanguage/Wikimedia APIs/Stability policy|beta]]. The API fetches information for crediting Wikimedia articles and media files wherever they are used. Reference documentation is available through the REST Sandbox special page available on all Wikimedia wikis (such as the [https://en.wikipedia.org/w/index.php?api=attribution.v0-beta&title=Special%3ARestSandbox REST sandbox on English Wikipedia]). Share your feedback on the [[mw:Talk:Attribution API|project talk page]].
* There is no new MediaWiki version this week.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/17|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W17"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:01, 20 April 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30432763 -->
== Wikipedia translation of the week: 2026-18 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Platypus venom]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Platypus spur.JPG|300px|center]]
<div style="text-align:left; padding: .4em;">
The platypus is one of the few living mammals to produce venom. The venom is made in venom glands that are connected to hollow spurs on their hind legs; it is primarily made during the mating season.[1] While the venom's effects are described as extremely painful, it is not lethal to humans. Many archaic mammal groups possess similar tarsal spurs, so it is thought that, rather than having developed this characteristic uniquely, the platypus simply inherited this characteristic from its ancestors. Rather than being a unique outlier, the platypus is the last demonstration of what was once a common mammalian characteristic, and it can be used as a model for non-therian mammals and their venom delivery and properties.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:04, 27 April 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30449041 -->
== Tech News: 2026-18 ==
<section begin="technews-2026-W18"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/18|Translations]] are available.
'''Updates for editors'''
* There is a change in how new users are autoconfirmed that will improve anti-vandalism protection. Currently, users who have had an account for a few days and made a few edits are automatically added to the [[{{int:grouppage-autoconfirmed/{{CONTENTLANGUAGE}}}}|{{int:group-autoconfirmed}}]] group. This configuration tends to be exploited by some vandals, who create accounts and start to use them only after some time. To mitigate this, the configuration will be updated next week so that – for the purpose of becoming autoconfirmed – the account age will be counted from their first edit, instead of registration date. The numeric value of the age threshold will remain the same. This change will be deployed only to wikis which require at least one edit as part of the autoconfirmation conditions. [https://phabricator.wikimedia.org/T418484]
* All Wikipedia users with new accounts and those who activated the "automatically enable most beta features" option in their preference can now use the [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|reading lists]] beta feature to save articles for later reading. This helps organize reading interests in one place for convenient access.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where infobox images have huge padding in Firefox, has been fixed. [https://phabricator.wikimedia.org/T423676]
'''Updates for technical contributors'''
* As a reminder, the global API rate limits will be applied this week to identified API traffic. This is to help ensure [[mw:MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]]. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, including the actual rate limits, see [[mw:Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.26|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/18|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W18"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:06, 27 April 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30458046 -->
== Wikipedia translation of the week: 2026-19 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Kuwait National Assembly Building]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Kuwait City Arabian Gulf Street 10.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Kuwait National Assembly Building''' is the building that housed the National Assembly of Kuwait.
Designed by Danish architect Jørn Utzon in 1972, it was completed in 1982 under the direction of his son Jan. The structural design was by Max Walt. The building was seriously damaged in February 1991 when retreating Iraqi troops set it on fire but has since been restored.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:16, 4 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30464799 -->
== Tech News: 2026-19 ==
<section begin="technews-2026-W19"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/19|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Article guidance|Article guidance]] team invites experienced editors of [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators|pilot Wikipedias]]—Arabic, Bangla, Japanese, Portuguese, Persian, Turkish, Simple English, Spanish, and French—to help translate and adapt [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance sample outlines]. These outlines will guide editors in creating clear, well-structured, and policy-compliant articles when using [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Special:NewArticle the feature] once it is launched in May 2026. [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|Simple instructions]] on how to translate and adapt the outlines are available.
'''Updates for editors'''
* The [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] has published [[:m:Special:MyLanguage/Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|draft recommendations]] on a model that affiliates can follow when contributing to the technical space. Community members are invited to provide feedback on the recommendation until May 8th [[:m:Talk:Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|on the talk page]].
* The number of available thumbnail size preferences in MediaWiki is being reduced to three standardized options—Small (180px), Regular (250px), and Large (400px), as part of ongoing efforts to improve performance and reduce strain on thumbnail services. As a result, existing preferences will be mapped to the nearest new size (for example, smaller selections like 120px or 150px will render at 180px, while larger ones like 300px or 360px will render at 400px). The preferences interface will soon be updated to reflect these changes, and users who wish to opt out or provide feedback can do so. [https://phabricator.wikimedia.org/T424909]
* From now on, even when a permission expires automatically, users will receive an Echo notification similar to the standard notification for permission changes. There is a difference between this and [[m:Special:MyLanguage/Global reminder bot|Global reminder bot]] in that the latter reminds users a week ''before'' the rights are due to expire, so that they can renew the rights.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the problem where the ULS language selector in [[m:Special:Translate|Special:Translate]] would scroll vertically when it shouldn't, has been resolved. Previously, when users opened the "Translate to English" dropdown and typed certain inputs, the dialog would scroll vertically by a few pixels even when there was enough space to display all results. The dropdown no longer shifts unnecessarily when filtering languages. [https://phabricator.wikimedia.org/T358864]
* The [[m:Special:GlobalWatchlist|Global Watchlist]], which lets you view your watchlists from multiple wikis on a single page, continues to improve. For example, watchlists for Wikibase sites such as [[:d:|Wikidata]] now support [[mw:Special:MyLanguage/Extension:EntitySchema|EntitySchema]] elements for better tracking. The Live Updates mode now refreshes the special page every 60 seconds to comply with the updated [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] for improved real-time responsiveness. Additionally, a directionality bug that displayed links as "changes 3" instead of "3 changes" in mixed-direction lists has been fixed. [https://phabricator.wikimedia.org/T415450][https://phabricator.wikimedia.org/T424422][https://phabricator.wikimedia.org/T418091]
'''Updates for technical contributors'''
* The second phase of [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] has been rolled out to reduce the [[diffblog:2026/03/26/quo-vadis-crawlers-progress-and-whats-next-on-safeguarding-our-infrastructure/|impact of AI crawlers]] and ensure fair, sustainable access to Wikimedia resources, prioritising human and mission-aligned traffic. [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits#Limits|Limits]] have been shifted from per-hour to per-minute, producing smoother traffic patterns and more predictable API load. Community users are not expected to be affected, and no action is required. Early indications show some User-Agent-based requestors are adjusting behaviour, and around 64% of automated API traffic has been identified. Monitoring continues, and Wikimedia Enterprise remains available for commercial support.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.27|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/19|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W19"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:44, 4 May 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30498077 -->
== Wikipedia translation of the week: 2026-20 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Macau National Security Law]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Lei relative à defesa da segurança do Estado projecto.JPG|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''Macau National Security Law''' is a law in Macau which prohibits and punishes acts of treason, secession, and subversion against the Central government, as well as preparative acts leading to any of the three acts. Taken into effect on 3 March 2009, the purpose of the law is to fulfil Article 23 of the Macau Basic Law, the de facto constitution of the Macau Special Administration Region.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:53, 11 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30513945 -->
== Tech News: 2026-20 ==
<section begin="technews-2026-W20"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/20|Translations]] are available.
'''Weekly highlight'''
* Community Tech has published [[m:Special:MyLanguage/Community Wishlist/How to write a good wish|new guidance]] explaining how wishes on Community Wishlist are triaged and prioritized. The documentation is intended to help contributors write stronger proposals by clarifying the factors that influence prioritization decisions. Beyond vote counts, the guidance highlights considerations such as potential impact on the community when determining which wishes move forward.
'''Updates for editors'''
* The Reader Growth team is launching an experiment to test a new [[mw:Special:MyLanguage/Readers/Reader_Growth/Share_Card|Share Card feature]] that allows readers to create visually engaging cards from Wikipedia articles or selected article sections and share them online, with each card linking back to the original article to help expand readership and article discovery. The mobile-only A/B test will be available to a portion of readers on Arabic, Chinese, French, Vietnamese, and English Wikipedia to better understand reading and sharing habits, and is scheduled to begin the week of May 18 and run for four weeks.
* The Android and iOS Wikipedia apps recently released the [[mw:Special:MyLanguage/Wikimedia_Apps/Team/25th_Birthday_Reading_Challenge|25-day reading challenge]] into Beta, as part of efforts to drive reader engagement by encouraging users to complete reading milestones. To track their reading streak during the challenge, App users can add a widget featuring Baby Globe to their home screen. The challenge officially begins May 11.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:17}} community-submitted {{PLURAL:17|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the global preference for enabling syntax highlighting in wikitext could unexpectedly disable itself after being turned on, has now been fixed. [https://phabricator.wikimedia.org/T425286]
'''Updates for technical contributors'''
* [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The ResourceLoader module <bdi lang="zxx" dir="ltr"><code><nowiki>mediawiki.ui.input</nowiki></code></bdi>, deprecated since [[m:Special:MyLanguage/Tech/News/2023/39|September 2023]], will be removed this week. There is a [[mw:Special:MyLanguage/Codex/Migrating_from_MediaWiki_UI|guide for migrating from MediaWiki UI to Codex]] for any tools that use it. [https://phabricator.wikimedia.org/T420125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.2|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/20|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W20"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:21, 11 May 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30524429 -->
== Tech News: 2026-21 ==
<section begin="technews-2026-W21"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/21|Translations]] are available.
'''Weekly highlight'''
* The Abstract Wikipedia team has identified five potential pilot wikis to assess their interest in adopting abstract articles on their wikis. The pilots are Malayalam, Bengali, Dagbani, Arabic, and Indonesian Wikipedia. The feedback period will be open until May 22. If your community is interested in becoming a pilot, [[m:Talk:Abstract Wikipedia|let us know on Meta]].
'''Updates for editors'''
* An experiment to show [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists]] to logged-out readers on mobile web will launch on May 18 across German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu Wikipedias, and will run for one month. The effort supports broader goals of helping readers save and organize articles for later reading, while encouraging habits that could lead to future Wikipedia contributions.
* To support a bookmark button in the Reading List beta feature, the "Tools > Action" menu has been updated to display icons, including the watch star indicator that helps editors identify temporarily watched articles. The icons now also match those used on mobile, improving consistency across platforms. The change is currently limited to the actions menu and mainly affects editors with privileged user rights. [https://phabricator.wikimedia.org/T426008]
* [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] was released as an [[w:en:A/B test|A/B test]] for newcomer editors on the mobile website at [[phab:T421189|~15 Wikipedias]]. The experiment will measure the impact that Suggestion Mode has on the proportion of newcomer mobile web edit sessions that result in constructive (un-reverted) article edits. The experiment will also evaluate the feature's impact on editor retention, and monitor changes in revert and block rates.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue in the Wikipedia Android app where images could sometimes fail to load after opening a recommended reading list notification, has now been fixed. [https://phabricator.wikimedia.org/T418231]
'''Updates for technical contributors'''
* The [[mw:Special:MyLanguage/Wikidata Platform|Wikidata Platform team]] has published its [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/Backend Replacement|backend replacement recommendation]] and accompanying [[wikitech:Wikidata Query Service/WDQS Architecture re-design|technical architecture]] for the migration of the Wikidata Query Service (WDQS) away from Blazegraph. Feedback is invited until May 25th 2026, especially on potential gaps and impacts on advanced use cases. Wikidata community members and WDQS users are also encouraged to help identify high-impact tools and workflows that may need attention on [[d:Wikidata:SPARQL query service/WDQS backend update/High-Impact Use Cases|this page]]. Feedback can be shared on the [[d:Wikidata talk:SPARQL query service/WDQS backend update|Migration talk page]] or during the [[d:Special:MyLanguage/Wikidata:Blazegraph Migration Office Hours|next office hour]]. See the [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|WDP team newsletter]] for more details.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.3|MediaWiki]]
'''In depth'''
* On English, French, Japanese, and a few other Wikipedias, there was a [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|trial of hCaptcha]], a third-party bot detection service. The trial showed that hCaptcha effectively detects and deters some bad-faith automated activity, on its own and by giving [[w:en:Wikipedia:Village pump (technical)/Archive 225#Introducing SuggestedInvestigations|checkusers and stewards]] signals to look into. Because the results were positive, hCaptcha will be rolled out across all wikis over the next few weeks. [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|See the hCaptcha project page]] for technical information about the implementation and privacy protections. [[diffblog:2026/05/04/better-detecting-bots-and-replacing-our-captcha-part-2/|Learn more]].
* The latest Community Tech update is now available, with progress across several Community Wishlist initiatives, including Reading Lists expansion from the mobile app to the website, new language support for "Who Wrote That" and the Personal Dashboard, improvements to 3D rendering and Charts, and upcoming work on talk page sorting, audio playback, and editing workflows. The update also shares current priorities, wishlist status trends, and opportunities for community feedback on future focus areas and the Wikimedia Foundation’s 2026–2027 Annual Plan. [[m:Special:MyLanguage/Community Wishlist/Updates#May 13, 2026: Latest updates from the Community Tech team|Read the full newsletter for details]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W21"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:22, 18 May 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30539262 -->
== Wikipedia translation of the week: 2026-21 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Stela of the cactus bearer]]'''<br /> <small>''([[:es:Estela del portador del cactus]]) ([[:ca:Estela del portador del cactus]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Estela Wachumero en Chavin.jpg|center|300px]]
<div style="text-align:left; padding: .4em;">
The '''stela of the cactus bearer''' is a monolith or stele of a single piece of granite, belonging to the Chavín culture of ancient Peru, which remains in its original location on the northwest side of the circular plaza at the archaeological site known as the ceremonial center of Chavín de Huántar in the Ancash region of Peru. It was discovered during the 1972 excavation season by Peruvian archaeologist Luis Guillermo Lumbreras.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 04:05, 21 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30529698 -->
== Wikipedia translation of the week: 2026-22 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Griffith Hughes]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
The Reverend '''Griffith Hughes''' (1707 – c.1758), FRS, was a Welsh naturalist, clergyman, and author. Hughes wrote The Natural History of Barbados, which included the first description of the grapefruit (also known as "The Forbidden Fruit"). His work was praised by Linnaeus, but it has also been considered a "scientific fraud".
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:32, 25 May 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30529698 -->
== Tech News: 2026-22 ==
<section begin="technews-2026-W22"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/22|Translations]] are available.
'''Weekly highlight'''
* Following a [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#LOWM|successful account creation experiment]], an improved logged-out edit warning message will be deployed to all Wikimedia wikis in the first week of June. The change will only affect logged-out users on mobile web who open an editing session. The updated experience is designed to encourage account creation more clearly, while still allowing users to edit with temporary accounts. Results from the experiment showed a significant increase in account creation, with a 27% relative lift among users shown the updated message. As expected, as more people funnel into account creation, temporary accounts decreased by a relative 16%. The experiment did not show any significant changes in constructive edit rates or other monitored contributor metrics. [https://phabricator.wikimedia.org/T424595]
'''Updates for editors'''
* For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Members of these groups will be unable to disable the last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the next few weeks, users without 2FA will be removed from these groups. Notably, this applies to bureaucrats. See the linked tasks for deployment schedules. [https://phabricator.wikimedia.org/T423119][https://phabricator.wikimedia.org/T423120]
* [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] will run an [[w:en:A/B testing|A/B test]] on [[:phab:T415904|10 wikis]], testing [[m:WMDE Technical Wishes/References/Reference Previews|potential improvements for Reference Previews]]. The experiment will run for ~2 weeks at the end of May / beginning of June and will affect 10% of desktop readers on the participating wikis.
* After two successful experiments, the Reader Growth team is rolling out an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature for all Wikipedias on mobile on May 25. This means that anyone who has all beta features on by default will start to see this feature, and others can check the box to turn it on in their preferences. The beta feature will include a carousel of all an article's images at the top of the article, with controls for editors to [[mw:Readers/Reader_Growth/Image_Browsing#Phase_2.1_beta_feature|exclude images from the article's carousel or to exclude an article from the feature entirely]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, three dimensional STL files were being rendered incorrectly by the media viewer 3D extension which is now fixed. [https://phabricator.wikimedia.org/T416723]
'''Updates for technical contributors'''
* The legacy CSS classes <bdi lang="zxx" dir="ltr"><code><nowiki>tleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>tright</nowiki></code></bdi> have been replaced with <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> as the former do not work consistently across all MediaWiki platforms, notably mobile web and mobile apps. Projects relying on these classes are encouraged to review related usage and plan for migration. Please note that <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> may also be deprecated in future, although there are currently no plans to do so. [[phab:T426452|Read more]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.4|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/22|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W22"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:52, 25 May 2026 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30584502 -->
== Wikipedia translation of the week: 2026-23 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Umuganda]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Umuganda"Rwandan community work".jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Umuganda''' is a national holiday in Rwanda taking place on the last Saturday of every month for mandatory nationwide community service from 08:00 to 11:00. Participation in Umuganda is required by law; failure to participate can result in a fine.
The program was most recently re-established under President Paul Kagame in 2009, having resulted in a notable improvement in the cleanliness of Rwanda. Also, there are other informal Umuganda day activities that occur in the middle of the month. These activities are initiated by either society or the government.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:55, 1 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30529698 -->
== Tech News: 2026-23 ==
<section begin="technews-2026-W23"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/23|Translations]] are available.
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] is conducting an experiment to show the [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|reading lists]] feature, which is still in development, to logged-out mobile readers to test whether it encourages account creation at a higher rate compared to the watchstar button. The [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists#Experiment timeline|experiment]] was launched on May 18th on German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu wikis, and it will run for a month.
* The Wikimedia Apps team released [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh/Phase 1|Phase 1]] of the redesigned Home Feed to the Android Beta app. The new Home Feed includes a refreshed "Community" tab and a personalized "For You" tab featuring daily updated reading recommendations. The redesign is part of a broader effort to improve content discovery and create more engaging learning experiences in the Wikipedia apps.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:18}} community-submitted {{PLURAL:18|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where images could fail to load for some suggested edits on [[w:Special:Homepage|Special:Homepage]], leaving the thumbnail stuck in a loading state, has now been fixed. [https://phabricator.wikimedia.org/T424048]
'''Updates for technical contributors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.5|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/23|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W23"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:09, 1 June 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30613639 -->
== Wikipedia translation of the week: 2026-24 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:it:Juryeonggu]]'''<br /> <small>''([[:kr:주령구]]) ([[:ja:酒令具]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:주령구의 발굴 당시 사진.png|300px|center]]
<div style="text-align:left; padding: .4em;">
Il '''Juryeonggu''' (주령구?, 酒令具?, JuryeongguLR, ChuryŏngguMR) è un dado a 14 facce, risalente al periodo del Silla unificato (668-935 d.C.), ritrovato nel 1975 dopo alcuni scavi occorsi presso il Donggung e lo stagno Wolji di Gyeongju, in Corea del Sud. Le facce del dado mostravano inscrizioni recanti varie penalità o sfide, legate ad un gioco di bevute, dimostrando l'importanza dell'alcool e la raffinatezza con cui la sua assunzione veniva celebrata.
L'artefatto originale è andato perduto, incendiato in un maldestro tentativo di preservazione: oggi ne esistono delle repliche, disponibili anche commercialmente.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:20, 8 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30622359 -->
== Tech News: 2026-24 ==
<section begin="technews-2026-W24"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/24|Translations]] are available.
'''Weekly highlight'''
* Wikimedia Enterprise has increased the free usage limits for its API offerings. The monthly request limit for the On-demand API has increased from 5,000 to 50,000 requests, while the Snapshot API limit has increased from 15 to 30 requests per month. In addition, Structured Contents snapshots are now available for free accounts. These changes expand access to Wikimedia Enterprise data for developers, researchers, and organizations using Wikimedia content. [https://enterprise.wikimedia.com/blog/enhanced-free-api]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|refreshed Explore Feed]], now called the Home Feed, is rolling out to 50% of users of the Wikipedia Android app. The Home Feed helps readers discover relevant content through two new tabs: ''Community'' and ''For You''. The Community tab provides a scrollable feed of curated content and updates from the broader Wikimedia community and movement, while the ''For You'' tab offers a full-screen, swipeable experience that shows content tailored to a user's interests. The redesign is part of a broader effort to improve discovery and enhance the learning experience in the Wikipedia app.
* The [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|Which came first?]] daily trivia game is now available in the beta version of the Wikipedia iOS app in English, German, French, Portuguese, Russian, Spanish, Arabic, Chinese, and Turkish. The game uses historical events from Wikipedia's "On This Day" content and challenges readers to guess which of two events happened first. The game was previously released on Android. Communities interested in making the game available in their languages can [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|read the instructions and requirements]].
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new MediaWiki feature that allows editors to reuse references with different details, will begin rolling out to Wikimedia wikis following a successful pilot phase. Deployment will start on 8 June for most [[wikitech:Deployments/Train#Wednesday|Group 1 wikis]] and French Wikipedia, with additional Wikipedia language editions receiving the feature over the coming months. Communities are encouraged to prepare by checking for [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate untranslated Cite extension messages] in their language and reviewing any use of [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]], which may require [[:phab:T416304#11668731|updates]] to support the new functionality. Wikis using [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] do not need to take any action. Communities may also wish to create the ''cite-tracking-category-ref-details'' [[Special:TrackingCategories|tracking category]] as a hidden category using <code><nowiki>__HIDDENCAT__</nowiki></code> (or a dedicated template), and connect it to the corresponding Wikidata item [[d:Q129764848]]. [https://phabricator.wikimedia.org/T425662]
* The [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|Page Previews experiment]] on mobile web has concluded. The team decided not to roll out the feature after the results showed no statistically significant impact on reader retention, as the primary success metric was retention improvement. Page Previews, which are already available on desktop and in the apps, display a thumbnail, lead paragraph, and link to the full article when readers tap a blue link. The experiment tested this experience on mobile web across six Wikipedias.
* The [[mw:Special:MyLanguage/Codex/Design/Icons|user interface icon library]] will be [[phab:T399175|updated later this week or next week]]. Most of the ~300 icons have been slightly refined and ~30 new icons have been added. These changes improve the icons to make them more consistent and comprehensible, and provide more visual balance when they are used in groups.
* The [[mw:Special:MyLanguage/Universal Language Selector|Universal Language Selector]] (ULS) interface in MediaWiki, which helps users select content in other languages, has been updated. The new version improves speed and accessibility, and users of Wikimedia projects can now pin languages for quicker language switching. The deployment to Wikimedia sites will happen gradually in the coming weeks. You can test it now as a beta feature by selecting [[Special:Preferences#mw-prefsection-betafeatures|beta features]] in your profile preferences and share your feedback on [[mw:Special:MyLanguage/Universal Language Selector/New ULS|the project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the Pageviews Analysis dashboard on pageviews.wmcloud.org stopped updating graph data in May 2026, affecting all users, has been fixed. [https://phabricator.wikimedia.org/T427171]
'''Updates for technical contributors'''
* The function signature for <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> has been simplified. Developers can now pass a configuration object instead of a list of positional parameters when creating portlet links. The previous function signature remains supported for backwards compatibility. For example, instead of: <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi> use <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Script maintainers are encouraged to review existing uses of <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> and update them where appropriate. This change will be available on all wikis from 11 June. Thanks to community volunteer Gerges for contributing this improvement. [https://phabricator.wikimedia.org/T427945]
* '''Community Wishlist discussion''': Product & Technology [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|introduced changes]] meant to increase the number and complexity of wishes fulfilled, including the disbanding of the Community Tech team. They are [[m:Special:MyLanguage/Community Wishlist/Updates|engaging in discussions]] about a [[m:Talk:Community Wishlist#Proposed direction for Wishlist|proposed direction for the wishlist]] from community members. Includes ways to structure annual voting, better tracking of wishes, removing focus areas, and [[m:Special:MyLanguage/Community Wishlist/Updates|staffing updates]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.6|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/24|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:30, 8 June 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 -->
== Wikipedia translation of the week: 2026-25 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Cape Fiolent]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
[[File:Beach of Cape Fiolent, Crimea.jpg|300px|center]]
<div style="text-align:left; padding: .4em;">
'''Cape Fiolent''' (Crimean Tatar: Felenk Burun; Ukrainian: Фіолент; Russian: Фиолент; Latin: Parthenium), also historically called Cape Fiolente, is a cape and nature reserve (zakaznik) located in southern Sevastopol, a city within Crimea that is internationally recognised as part of Ukraine but currently occupied by Russia since 2014.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 02:24, 15 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30662919 -->
== Tech News: 2026-25 ==
<section begin="technews-2026-W25"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/25|Translations]] are available.
'''Weekly highlight'''
* The [[mw:Special:MyLanguage/Readers/Reader Growth|Reader Growth team]] has launched an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature on the mobile web version of all Wikipedias. The feature shows an image carousel at the top of articles with 3 or more images. Editors can configure this feature with the following controls: to hide a specific image from a page, either use <code>class=notpageimage</code> excluding it from thumbnail previews, or <code>class=noviewer</code> excluding it from MediaViewer. The carousel can also be disabled from a page entirely, with the magic word <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. To submit feedback or flag bugs, please visit the [[mw:Talk:Readers/Reader Growth/Image Browsing|project page]].
* [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitables]] can now be [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|sorted in descending order]] on the first click by adding <code dir=ltr>data-sort-order="desc"</code> to the header cell. Previously, by default, clicking a column header for the first time sorts it in ascending order. This addition to a Wikitable gives it more control and flexibility, while the default behavior for subsequent clicks remains unchanged. [https://phabricator.wikimedia.org/T398416]
'''Updates for editors'''
* The [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature is currently being tested with some editors creating new articles on the Simple English, French, and Turkish Wikipedias. The experiment will soon begin on the Arabic and Bangla Wikipedias as well. [[w:simple:Special:NewArticle|This feature]] gives editors community-curated guidance to help them create articles that follow community standards. Experienced editors can continue creating or adapting outlines for specific article types that are commonly created by less experienced contributors. The outlines guide less experienced editors in creating high-quality articles. A quick guide to markups used in outlines can be found on [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|this page]]. [[w:simple:Wikipedia:Article Guidance|Example outlines]] that can be adapted and instructions for how to adapt them are on [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|this section]] of the project page.
* Wikis that wish to replace the "indefinitely" button in Special:Block for temporary accounts (for example, wikis that block temporary users only until account expiration) will be able to do so by creating [[MediaWiki:ipb-indefinite-expiry-temporary-account]] with the block duration they want. [https://phabricator.wikimedia.org/T427125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:41}} community-submitted {{PLURAL:41|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* By the end of June, a valid user-agent string will be required for automated dumps downloads from the dumps.wikimedia.org website. Automated requests that provide a generic or empty user-agent will be blocked. This [[phab:T400119|extends enforcement]] of the long standing [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|user-agent policy]]. Access to dumps through Wikimedia Cloud Services will not change.
* The roll out of global [[mw:Wikimedia APIs/Rate limits|API rate limits]] is now complete, with limits enforced across all APIs and at the documented levels for all groups. Bots running in Toolforge/WMCS or with the bot user right on any wiki remain exempt. All bots should continue to follow the documented best practices to avoid being rate limited.
* The [https://api.wikimedia.org/wiki/Main_Page API Portal wiki] will be read only starting this week (June 15-18). The following week (June 22-25), all API Portal wiki URLs will redirect to [[mw:Wikimedia APIs|Wikimedia APIs on mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]]
'''Meetings and events'''
* On June 17th at 6pm UTC the WMF will be holding Discord call focused on a code review. We've heard through the [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Developer Satisfaction Survey]] that volunteers are struggling with code review and we'd like to discuss these experiences with the goal of surfacing workable solutions. You can join the call [https://discord.gg/wikipedia?event=1514727511102062664 via the Wikimedia Community Discord server].
* The [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Latin American Wikimedia Conference]] will host a regional hackathon that will bring together the Wikimedia movement’s technical community including developers, system administrators, data scientists, and users with extended rights. Interested technical contributors can [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform apply for a scholarship] to participate until June 21 at midnight (Bolivia time, UTC-4).
* Sign up for Wikimania Team Challenges to join this special event. The Team challenges will take place online and in person from July 21 to 22, before Wikimania conference. Everyone is welcome, regardless of skills or Wikimania registration. Teams will work on 10 important challenges supporting the Wikimedia community. For details, visit [[wmania:Special:MyLanguage/2026:Team challenges|the Team Challenges page]] and [https://wikimedia.eventyay.com/wm/teamchallenges/ register there]. Registration closes on June 20th at 11pm UTC.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/25|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:49, 15 June 2026 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 -->
== Wikipedia translation of the week: 2026-26 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Renovating Action Party]]'''<br /> <small>''([[:es:Partido de Acción Renovadora]])''</small> </div>
Please be bold and help translate this article!
</div>
----
[[File:Flag of the Renovating Action Party.svg|300px|center]]
<div style="text-align:left; padding: .4em;">
The '''Renovating Action Party''' was a left-wing Salvadoran political party that existed from 1944 to 1967. The party had three distinct phases of its existence under the leaderships of Colonel José Asencio Menéndez (1944–1950), the old line (1950–1964), and the new line (1964–1967).
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>
--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 01:52, 22 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30717601 -->
== Tech News: 2026-26 ==
<section begin="technews-2026-W26"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/26|Translations]] are available.
'''Weekly highlight'''
* [[mw:Special:MyLanguage/Growth/Feature summary|Growth features]] are [[phab:T418115|now available at Wikidata]]. This update enables access to Mentorship ([[mw:Special:MyLanguage/Help:Growth/Mentorship|if configured]]), Impact module, the Help Panel, and a simplified Newcomer Homepage (without Suggested Edits). Wikidata administrators are still configuring the features through Community Configuration.
'''Updates for editors'''
* The special page [[{{#special:RangeCalculator}}]] has been created. It allows users to find an IP range without needing to rely on external tools. Until now, this tool was only available to CheckUsers. [https://phabricator.wikimedia.org/T268429]
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]] is a new MediaWiki feature that allows editors to reuse references with different details. It will be deployed to most small and medium-sized Wikipedia language versions on June 23. The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|FAQ]] lists possible actions to take on your wiki to support the deployment. Check the [[:phab:T414094|rollout plan]] for the next deployment steps. [https://phabricator.wikimedia.org/T428902]
* Starting next week, users will get a notification when they are blocked or unblocked from editing, or if this block changes. [https://phabricator.wikimedia.org/T100974]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]].
'''Updates for technical contributors'''
* Starting next week, abuse filters that are set to "require CAPTCHA verification" will begin to also affect users with the <code>skipcaptcha</code> right, which includes most autoconfirmed users. Bots are exempted. This change only affects edits that trigger an abuse filter. The <code>skipcaptcha</code> right will continue to exempt users from having to solve CAPTCHAs in the ordinary course of using the wikis. [https://phabricator.wikimedia.org/T402595]
* Reference documentation for the [[wikitech:Machine_Learning/LiftWing/API|Lift Wing API]] has moved from the API Portal to the interactive [https://wikitech.wikimedia.org/w/index.php?api=lift-wing&title=Special%3ARestSandbox REST Sandbox].
* The API Portal wiki is now closed. For API documentation, see [[mw:Special:MyLanguage/Wikimedia_APIs|Wikimedia APIs on mediawiki.org]]. All API Portal wiki URLs (https://api.wikimedia.org/wiki/) will redirect to the mediawiki.org page starting June 22. [https://phabricator.wikimedia.org/T427537]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.8|MediaWiki]]
'''Meetings and events'''
* Join an online call on 25 June at 2:30pm UTC to meet the current Wikimedia interns for [[mw:Google_Summer_of_Code/2026|Google Summer of Code]] and [[mw:Outreachy/Round_32|Outreachy]]. Interns will provide an overview of their projects and a brief demo of their work so far. Attendees are encouraged to [[mw:event:Google_Summer_of_Code/Summer_2026_June_Internship_open_session|share ideas and connections in their community]].
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/26|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:05, 23 June 2026 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30722494 -->
== Wikipedia translation of the week: 2026-27 ==
<div lang="en" dir="ltr" style="width:100%; margin:0; background: var(--background-color-neutral-subtle,#f8f9fa); border:1px solid var(--border-color-base,#BBBBBB); padding .4em;color: inherit;">
<div style="text-align:center;">The winner this [[m:Translation of the week/2026 translations|Translation of the week]] is
<div style="font-size:140%;">'''[[:en:Facial age estimation]]'''<br /> </div>
Please be bold and help translate this article!
</div>
----
<div style="text-align:left; padding: .4em;">
'''Facial age estimation''' is the use of artificial intelligence to estimate the age of a person based on their facial features. Computer vision techniques are used to analyse the facial features in the images of millions of people whose age is known and then deep learning is used to create an algorithm that tries to predict the age of an unknown person. The key use of the technology is to prevent access to age-restricted goods and services. Examples include restricting children from accessing internet pornography, checking that they meet a mandatory minimum age when registering for an account on social media, or preventing adults from accessing websites, online chat or games designed only for use by children.
<small>(Please update the interwiki links on [[d:|Wikidata]] of your language version of the article after each week's translation is finished so that all languages are linked to each other.)</small>
----
[[File:TOTW.svg|24px|]] ''[[m:Translation of the week|About]] · '''[[m:Translation of the week/Translation candidates|Nominate/Review]]''' · [[m:Translation of the week/MassMessage|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]]''
</div>
</div>--[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 00:44, 29 June 2026 (UTC)
<!-- Message sent by User:Shizhao@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Translation_of_the_week/MassMessage&oldid=30717601 -->
== Tech News: 2026-27 ==
<section begin="technews-2026-W27"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/27|Translations]] are available.
'''Updates for editors'''
* As part of the [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Account Creation Experiments]], the Growth team tested adding a user account icon in the mobile web header for logged-out users, providing direct access to "Create account" and "Log in" actions. The experiment increased account creation by about 20% without negatively affecting edit quality or constructive edit rates. The feature will now be rolled out to all Wikimedia Foundation wikis on mobile web in the first week of July. [https://phabricator.wikimedia.org/T428220]
* After a [[phab:T426248|successful experiment]], logged-in users who did not [[mw:Special:MyLanguage/Help:Email_confirmation|confirm their email address]] when their account was created see a new banner asking them to complete that process. This helps reduce the risk that users get locked out of their account, and makes account email addresses overall more reliable. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project. [https://phabricator.wikimedia.org/T428292]
* An update to [[Special:Search|Search]] is refining how the <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> behaves when used to exclude results. Previously, using <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> with negation could unintentionally broaden search results by adding the namespaces included in the search scope, leading to confusing behavior for users expecting a straightforward exclusion filter. With the update, <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> will now strictly exclude matching page titles as intended and may display a warning if the relevant namespace has not been explicitly selected. The behavior of <bdi lang="zxx" dir="ltr"><code><nowiki>prefix:</nowiki></code></bdi> without negation however remains unchanged. [https://phabricator.wikimedia.org/T427443]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:33}} community-submitted {{PLURAL:33|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where reviewers using the Page Curation toolbar were not automatically subscribed to talk page discussions they started has now been fixed. Reviewers will now receive notifications when someone replies to those discussions. [https://phabricator.wikimedia.org/T329346]
'''Updates for technical contributors'''
* Starting June 29th, automated downloads from the dumps.wikimedia.org website will be subject to the [[Foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|user-agent policy]]. Automated requests that provide a generic or empty user-agent will be blocked. Access to dumps through Wikimedia Cloud Services remains unaffected. This is a follow up to the announcement made in the [[m:Special:MyLanguage/Tech/News/2026/25|2026/25 issue of Tech News]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.9|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/27|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 11:48, 29 June 2026 (UTC)
<!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30744833 -->
6cbb5jklb23r2dxp02rvhcy6uceoa09
The Linux Kernel/Debugging
0
462887
4641503
4640299
2026-06-28T14:03:09Z
Conan
3188
Debugging: kprobes, hung_task detector, kernel panic source references
4641503
wikitext
text/x-wiki
{{DISPLAYTITLE:Debugging Linux kernel}}
⚲ API
: {{The Linux Kernel/include|linux/err.h}} – helper macros for error pointer handling and propagation
: {{The Linux Kernel/include|linux/errno.h}} – standard error codes used throughout the kernel.
== Performance ==
There are many factors that can affect the performance of the Linux kernel, including hardware configurations, software configurations, and workload characteristics.
In this context, performance optimization of the Linux kernel involves identifying and addressing performance {{w|Bottleneck (software)|bottlenecks}} in the system.
This can involve tuning kernel parameters, optimizing system resources, and identifying and fixing bugs and other issues that may be impacting performance.
Given the complexity of the Linux kernel and the wide range of factors that can affect performance, performance optimization can be a challenging task.
However, with the right tools and techniques, it is possible to significantly improve the performance and reliability of Linux-based systems.
=== Perf_events ===
{{w|perf (Linux)|Perf_events}}, short for performance events, is a powerful interface that provides detailed insights into the performance characteristics of software running on a system.
By analyzing the data collected by perf_events, developers can identify performance bottlenecks and optimize software to improve performance and reduce resource utilization.
Perf_events is designed to be a lightweight, low-overhead monitoring solution that has minimal impact on system performance.
🔧 TODO
⚲ Interfaces
: {{The Linux Kernel/man|1|perf}} – performance analysis tools
<!-- generated with
man -k perf | grep ^perf- | sed -n 's%\([^ ]*\) (\(.\+\)) \W\+\(.*\)%:: {{The Linux Kernel/man|\2|\1}} \– \3%p'
-->
: Basic commands:
:: {{The Linux Kernel/man|1|perf-help}} – display help information about perf
:: {{The Linux Kernel/man|1|perf-top}} – System profiling tool.
:: {{The Linux Kernel/man|1|perf-record}} – Run a command and record its profile into perf.data
:: {{The Linux Kernel/man|1|perf-report}} – Read perf.data (created by perf record) and display the profile
: Other commands:
:: {{The Linux Kernel/man|1|perf-annotate}} – Read perf.data (created by perf record) and display annotated code
:: {{The Linux Kernel/man|1|perf-archive}} – Create archive with object files with build-ids found ...
:: {{The Linux Kernel/man|1|perf-arm-spe}} – Support for Arm Statistical Profiling Extension within...
:: {{The Linux Kernel/man|1|perf-bench}} – General framework for benchmark suites
:: {{The Linux Kernel/man|1|perf-buildid-cache}} – Manage build-id cache.
:: {{The Linux Kernel/man|1|perf-buildid-list}} – List the buildids in a perf.data file
:: {{The Linux Kernel/man|1|perf-c2c}} – Shared Data C2C/HITM Analyzer.
:: {{The Linux Kernel/man|1|perf-config}} – Get and set variables in a configuration file.
:: {{The Linux Kernel/man|1|perf-daemon}} – Run record sessions on background
:: {{The Linux Kernel/man|1|perf-data}} – Data file related processing
:: {{The Linux Kernel/man|1|perf-diff}} – Read perf.data files and display the differential profile
:: {{The Linux Kernel/man|1|perf-dlfilter}} – Filter sample events using a dynamically loaded shared...
:: {{The Linux Kernel/man|1|perf-evlist}} – List the event names in a perf.data file
:: {{The Linux Kernel/man|1|perf-ftrace}} – simple wrapper for kernel's ftrace functionality
:: {{The Linux Kernel/man|1|perf-inject}} – Filter to augment the events stream with additional in...
:: {{The Linux Kernel/man|1|perf-intel-pt}} – Support for Intel Processor Trace within perf tools
:: {{The Linux Kernel/man|1|perf-iostat}} – Show I/O performance metrics
:: {{The Linux Kernel/man|1|perf-kallsyms}} – Searches running kernel for symbols
:: {{The Linux Kernel/man|1|perf-kmem}} – Tool to trace/measure kernel memory properties
:: {{The Linux Kernel/man|1|perf-kvm}} – Tool to trace/measure kvm guest os
:: {{The Linux Kernel/man|1|perf-kwork}} – Tool to trace/measure kernel work properties (latencies)
:: {{The Linux Kernel/man|1|perf-list}} – List all symbolic event types
:: {{The Linux Kernel/man|1|perf-lock}} – Analyze lock events
:: {{The Linux Kernel/man|1|perf-mem}} – Profile memory accesses
:: {{The Linux Kernel/man|1|perf-probe}} – Define new dynamic tracepoints
:: {{The Linux Kernel/man|1|perf-sched}} – Tool to trace/measure scheduler properties (latencies)
:: {{The Linux Kernel/man|1|perf-script}} – Read perf.data (created by perf record) and display tr...
::: {{The Linux Kernel/man|1|perf-script-perl}} – Process trace data with a Perl script
::: {{The Linux Kernel/man|1|perf-script-python}} – Process trace data with a Python script
:: {{The Linux Kernel/man|1|perf-stat}} – Run a command and gather performance counter statistics
:: {{The Linux Kernel/man|1|perf-test}} – Runs sanity tests.
:: {{The Linux Kernel/man|1|perf-timechart}} – Tool to visualize total system behavior during a workload
:: {{The Linux Kernel/man|1|perf-trace}} – strace inspired tool
:: {{The Linux Kernel/man|1|perf-version}} – display the version of perf binary
⚙️ Internals
: {{The Linux Kernel/man|2|perf_event_open}} – sets up performance monitoring
: {{The Linux Kernel/include|uapi/linux/perf_event.h}}
: {{The Linux Kernel/source|tools/perf}} – performance analysis tools
: {{The Linux Kernel/include|linux/perf_event.h}}
: {{The Linux Kernel/source|kernel/events/core.c}} – performance events core
: {{The Linux Kernel/source|kernel/profile.c}} – simple profiling
📖 References
: {{w|perf (Linux)|perf}} – instruments CPU performance counters, tracepoints, kprobes, and uprobes
: https://perfwiki.github.io/main/
📚 Further reading
: [https://www.brendangregg.com/perf.html perf Examples]
: [https://web.eece.maine.edu/~vweaver/projects/perf_events/ The Unofficial Linux Perf Events Web-Page]
---------------
🛠️ Utilities
: {{w|Performance Co-Pilot}}, https://pcp.io/ – Performance Co-Pilot
: {{w|Prometheus (software)|Prometheus}}, https://prometheus.io/
: https://github.com/redhat-nfvpe/container-perf-tools
: https://github.com/brendangregg/perf-tools – performance analysis tools based on Linux perf_events (aka perf) and ftrace
: [https://linux.die.net/man/1/readprofile readprofile] – a tool to read kernel profiling information
📚 Further reading
: [https://wiki.ubuntu.com/Kernel/Reference/stress-ng stress-ng] – exercises various kernel interfaces
: http://trac.gateworks.com/wiki/linux/profiling
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/9/html/optimizing_rhel_9_for_real_time_for_low_latency_operation/assembly_analyzing-application-performance_optimizing-rhel9-for-real-time-for-low-latency-operation Analyzing application performance in RHEL 9]
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/index Monitoring and managing system status and performance in RHEL 9]
: [[Embedded_Systems/Linux#Real-time|Real-time Linux]]
== User space debug interfaces ==
⚲ Interfaces
: {{The Linux Kernel/man|1|dmesg}} – prints or control the kernel ring buffer
:: {{The Linux Kernel/man|2|syslog}} – system call, which is used to control the kernel printk() buffer
: {{The Linux Kernel/man|1|strace}} – system calls and signals tracing tool
:: {{The Linux Kernel/man|2|ptrace}} – process trace system call
: {{The Linux Kernel/man|3|klogctl}}
: {{The Linux Kernel/man|5|core}}
: /sys/kernel/debug/ – {{w|debugfs}}
: dmesg --console-level <level>
: gdb /usr/src/linux/vmlinux /proc/kcore
: /proc/self/stack
: {{The Linux Kernel/doc|dynamic|admin-guide/dynamic-debug-howto.html}} debug
:: <big>⌨️</big> hands-on:
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
⚙️ Internals
: {{The Linux Kernel/id|handle_sysrq}}
: {{The Linux Kernel/include|linux/debugfs.h}} – debugfs API
: {{The Linux Kernel/source|fs/debugfs}} – debugfs implementation
: {{The Linux Kernel/include|linux/tracefs.h}}, {{The Linux Kernel/source|fs/tracefs}} – filesystem backing /sys/kernel/tracing
: {{The Linux Kernel/include|linux/pstore.h}}, {{The Linux Kernel/source|fs/pstore}} – preserves crash logs across reboots
📚 '''References'''
: {{The Linux Kernel/doc|Development tools for the kernel|dev-tools}}
: {{The Linux Kernel/doc|DebugFS|filesystems/debugfs.html}}, {{The Linux Kernel/source|samples/qmi/qmi_sample_client.c}}
: {{The Linux Kernel/doc|Kprobe-based Event Tracing|trace/kprobetrace.html}}
: {{The Linux Kernel/doc|Dynamic debug|admin-guide/dynamic-debug-howto.html}}
: {{The Linux Kernel/doc|Linux Magic System Request Key Hacks|admin-guide/sysrq.html}}
: {{w|Magic SysRq key}}
== Tracing and logging ==
⚲ API:
'''User-space interface:'''
: {{The Linux Kernel/man|1|dmesg}} – prints or control the kernel ring buffer
:: {{The Linux Kernel/man|2|syslog}} – system call, which is used to control the kernel printk() buffer
: /proc/kmsg
: https://kernelshark.org/ – front end reader of trace-cmd
: https://trace-cmd.org/, {{The Linux Kernel/man|1|trace-cmd}} – CLI for {{The Linux Kernel/doc|Ftrace|trace/ftrace.html}} – Linux kernel internal tracer /sys/kernel/debug/tracing/
'''The most commonly used functions'''
: {{The Linux Kernel/include|linux/printk.h}}
:: {{The Linux Kernel/id|dump_stack}} – prints the current kernel stack trace for debugging purposes
:: {{The Linux Kernel/id|pr_alert}} – logs an alert-level message, indicating a critical event that requires immediate attention
:: {{The Linux Kernel/id|pr_cont}} – continues printing the current message on the same line
:: {{The Linux Kernel/id|pr_crit}} – logs a critical-level message, indicating a severe condition that might require system halt
:: {{The Linux Kernel/id|pr_debug}} – logs a debug-level message for developers, usually enabled in debug builds
:: {{The Linux Kernel/id|pr_devel}} – logs a developer-specific message, typically used for fine-grained debug purposes, see {{The Linux Kernel/doc|dynamic|admin-guide/dynamic-debug-howto.html}}
:: {{The Linux Kernel/id|pr_emerg}} – logs an emergency-level message, indicating a serious error that could cause system crash
:: {{The Linux Kernel/id|pr_err}} – logs an error-level message, typically indicating an issue that requires attention
:: {{The Linux Kernel/id|pr_err_ratelimited}} – logs an error-level message with rate limiting to prevent excessive logging
:: {{The Linux Kernel/id|pr_fmt}} – defines a format string for kernel messages
:: {{The Linux Kernel/id|pr_info}} – logs an informational-level message, providing status updates or diagnostics
:: {{The Linux Kernel/id|pr_info_ratelimited}} – logs an informational-level message with rate limiting
:: {{The Linux Kernel/id|pr_notice}} – logs a notice-level message, typically used for events that aren't errors but should be noted
:: {{The Linux Kernel/id|pr_warn}} – logs a warning-level message, indicating a potential issue that doesn't immediately affect system functionality
:: {{The Linux Kernel/id|pr_warn_once}} – logs a warning message once, preventing repeated warnings for the same event
:: {{The Linux Kernel/id|pr_warn_ratelimited}} – logs a warning-level message with rate limiting
:: {{The Linux Kernel/id|print_hex_dump}} – prints a hexdump of data for debugging purposes
:: {{The Linux Kernel/id|print_hex_dump_debug}} – prints a detailed hexdump with debugging-level verbosity
:: {{The Linux Kernel/id|printk}} – the primary function for printing kernel messages with varying severity levels
:: {{The Linux Kernel/id|va_format}} – formats a variable argument list into a string for logging or printing purposes
::: <big>⌨️</big> hands-on:
::: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control; dmesg -w
::: and type on built-in keyboard
: {{The Linux Kernel/include|linux/dev_printk.h}} – device-specific logging
:: {{The Linux Kernel/id|dev_crit}} – prints a critical-level message for a device
:: {{The Linux Kernel/id|dev_dbg}} – prints a debug-level message for a device if debugging is enabled
:: {{The Linux Kernel/id|dev_dbg_ratelimited}} – prints debug messages for a device with rate limiting
:: {{The Linux Kernel/id|dev_err}} – prints an error-level message for a device
:: {{The Linux Kernel/id|dev_err_once}} – prints an error message for a device only once
:: {{The Linux Kernel/id|dev_err_probe}} – prints an error related to probe failure with standard formatting
:: {{The Linux Kernel/id|dev_err_ratelimited}} – prints error messages for a device with rate limiting
:: {{The Linux Kernel/id|dev_fmt}} – defines a format string used by device-specific printk macros
:: {{The Linux Kernel/id|dev_info}} – prints an informational-level message for a device
:: {{The Linux Kernel/id|dev_notice}} – prints a notice-level message for a device
:: {{The Linux Kernel/id|dev_printk}} – generic function to print kernel messages with specified log level for a device
:: {{The Linux Kernel/id|dev_vdbg}} – prints verbose debug messages for a device if enabled at compile time
:: {{The Linux Kernel/id|dev_warn}} – prints a warning-level message for a device
:: {{The Linux Kernel/id|dev_warn_once}} – prints a warning message for a device only once
:: {{The Linux Kernel/id|dev_warn_ratelimited}} – prints warning messages for a device with rate limiting
: {{The Linux Kernel/include|asm-generic/bug.h}}
:: {{The Linux Kernel/id|WARN_ON}}
:: {{The Linux Kernel/id|WARN}}
⚙️ Internals
: {{The Linux Kernel/id|printk}}
: {{The Linux Kernel/source|kernel/printk/printk.c}} – kernel message logging
: {{The Linux Kernel/source|arch/x86/kernel/traps.c}} – x86 exception and trap handling
: {{The Linux Kernel/source|lib/dump_stack.c}} – stack trace dumping
: {{The Linux Kernel/include|linux/kprobes.h}}, {{The Linux Kernel/source|kernel/kprobes.c}} – {{The Linux Kernel/doc|dynamic tracing probes|trace/kprobes.html}}
: {{The Linux Kernel/source|kernel/trace}} – tracing infrastructure
: {{The Linux Kernel/source|scripts/tracing/draw_functrace.py}} – visualize function call graph from trace
: {{The Linux Kernel/ltp|kernel|logging}}, {{The Linux Kernel/ltp|kernel|tracing}}
: {{The Linux Kernel/source|samples/ftrace}} – ftrace usage examples
: {{The Linux Kernel/source|samples/trace_events}} – trace event examples
: {{The Linux Kernel/source|samples/trace_printk}} – trace_printk examples
: {{The Linux Kernel/include|linux/instrumentation.h}}
📚 '''References''':
: [https://elinux.org/Debugging_by_printing Debugging by printing]
: {{The Linux Kernel/doc|Message logging with printk|core-api/printk-basics.html}}
: {{The Linux Kernel/doc|Dynamic debug|admin-guide/dynamic-debug-howto.html}}
: {{w|SystemTap}}
:: {{The Linux Kernel/man|1|stap}} – systemtap script translator/driver
: {{w|strace}}
:: {{The Linux Kernel/man|1|strace}} – trace system calls and signals
: {{w|LTTng}}
: {{w|ftrace}}
: {{The Linux Kernel/doc|Linux Tracing Technologies|trace}}
:: {{The Linux Kernel/doc|Tracepoint Analysis|trace/tracepoint-analysis.html}}
:: {{The Linux Kernel/doc|Function Tracer|trace/ftrace.html}} – function, latency and event tracing
::: {{The Linux Kernel/doc|Event Tracing|trace/events.html}}
:: {{The Linux Kernel/doc|Using ftrace to hook to functions|trace/ftrace-uses.html}}
:: {{The Linux Kernel/doc|Fprobe - Function entry/exit probe|trace/fprobe.html}}
:: {{The Linux Kernel/doc|Kprobes|trace/kprobes.html}}
:: {{The Linux Kernel/doc|Kprobe-based Event Tracing|trace/kprobetrace.html}}
:: {{The Linux Kernel/doc|Uprobe-tracer: Uprobe-based Event Tracing|trace/uprobetracer.html}}
:: {{The Linux Kernel/doc|Using the Linux Kernel Tracepoints|trace/tracepoints.html}}
:: {{The Linux Kernel/doc|Subsystem Trace Points: kmem|trace/events-kmem.html}}
:: {{The Linux Kernel/doc|Subsystem Trace Points: power|trace/events-power.html}}
:: {{The Linux Kernel/doc|NMI Trace Events|trace/events-nmi.html}}
:: {{The Linux Kernel/doc|In-kernel memory-mapped I/O tracing|trace/mmiotrace.html}}
:: {{The Linux Kernel/doc|Event Histograms|trace/histogram.html}}
:: {{The Linux Kernel/doc|Histogram Design Notes|trace/histogram-design.html}}
:: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
:: {{The Linux Kernel/doc|Hardware Latency Detector|trace/hwlat_detector.html}}
:: {{The Linux Kernel/doc|Intel(R) Trace Hub (TH)|trace/intel_th.html}}
:: {{The Linux Kernel/doc|Lockless Ring Buffer Design|trace/ring-buffer-design.html}}
:: {{The Linux Kernel/doc|System Trace Module|trace/stm.html}}
:: {{The Linux Kernel/doc|CoreSight - ARM Hardware Trace|trace/coresight}}
'''🔧 TODO. 🚀 advanced features'''
: {{The Linux Kernel/include|linux/kmemleak.h}} – memory leak detector
: {{The Linux Kernel/id|pr_cont}} - continues a previous log message in the same line
: {{The Linux Kernel/id|print_hex_dump_bytes}}
: {{The Linux Kernel/id|print_hex_dump_debug}}
: {{The Linux Kernel/id|dump_stack}}
: {{The Linux Kernel/id|CONFIG_PRINTK_CALLER}}
: {{The Linux Kernel/id|CONFIG_DEBUG_KERNEL}}
: {{The Linux Kernel/id|CONFIG_DEBUG_INFO}}
: https://git.kernel.org/pub/scm/libs/libtrace/
📚 Further reading
: https://lore.kernel.org/linux-trace-kernel/
: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git/
== Memory debugging ==
⚙️ Internals:
: {{The Linux Kernel/source|mm/kasan}} – {{The Linux Kernel/doc|KernelAddressSANitizer|dev-tools/kasan.html}}, detects out-of-bounds and use-after-free bugs
: {{The Linux Kernel/source|mm/kfence}} – {{The Linux Kernel/doc|Kernel Electric-Fence|dev-tools/kfence.html}}, low-overhead sampling-based memory safety detector
: {{The Linux Kernel/include|linux/kmemleak.h}} – {{The Linux Kernel/doc|memory leak detector|dev-tools/kmemleak.html}}, {{The Linux Kernel/source|mm/kmemleak.c}}
: {{The Linux Kernel/include|linux/kcsan-checks.h}} – {{The Linux Kernel/doc|KCSAN - Kernel Concurrency Sanitizer|dev-tools/kcsan.html}}, {{The Linux Kernel/source|kernel/kcsan}}
: {{The Linux Kernel/source|kernel/gcov}} – {{The Linux Kernel/doc|gcov code coverage|dev-tools/gcov.html}}
== kgdb and kdb ==
⚲ Interfaces
: {{The Linux Kernel/include|linux/kgdb.h}}
: {{The Linux Kernel/include|linux/kdb.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/debug}} – kgdb/kdb debugger
📚 '''References'''
: {{The Linux Kernel/doc|Using kgdb, kdb and the kernel debugger internals|dev-tools/kgdb.html}}
: {{w|kdump (Linux)|kdump}}
: {{The Linux Kernel/doc|kdump|admin-guide/kdump}}
: {{The Linux Kernel/man|8|crash}} – Analyze Linux crash dump data or a live system
== {{w|eBPF}} ==
⚲ API:
: {{The Linux Kernel/man|2|bpf}} ↪ {{The Linux Kernel/source|kernel/bpf/syscall.c}}
: {{The Linux Kernel/include|linux/bpf.h}} – BPF core definitions
⚙️ Internals:
: {{The Linux Kernel/source|kernel/bpf}} – BPF subsystem core
: {{The Linux Kernel/source|net/bpf}} – BPF networking hooks
📖 References
: {{The Linux Kernel/doc|eBPF and BPF|bpf}}
📚 Further reading
: {{The Linux Kernel/man|7|bpf-helpers}}
: [https://www.brendangregg.com/ebpf.html Linux Extended BPF (eBPF) Tracing Tools]
: [https://github.com/iovisor/bpftrace bpftrace – High-level tracing language for Linux eBPF]
: [https://github.com/iovisor/bcc#tools BCC – Tools for BPF-based Linux IO analysis, networking, monitoring, and more]
:: [https://github.com/iovisor/bcc/blob/master/tools/trace_example.txt Example] of [https://github.com/iovisor/bcc/blob/master/tools/trace.py trace.py]
: {{The Linux Kernel/man|8|stapbpf}}
: [https://medium.com/@zone24x7_inc/ebpf-programming-for-linux-kernel-tracing-30364dde3fb7 eBPF Programming for Linux Kernel Tracing]
: {{The Linux Kernel/doc|lockdep - Runtime locking correctness validator|locking/lockdep-design.html}}
== Watchdogs ==
[[../Softdog Driver]]
{{The Linux Kernel/id|dev_watchdog}} – network device watchdog
The NMI watchdog lockup detectors:
⚲ API
: /proc/sys/kernel/nmi_watchdog
: /proc/sys/kernel/soft_watchdog
: /proc/sys/kernel/watchdog
: /proc/sys/kernel/watchdog_cpumask
: /proc/sys/kernel/watchdog_thresh
: /proc/sys/kernel/hardlockup_all_cpu_backtrace
: /proc/sys/kernel/hardlockup_panic
: /proc/sys/kernel/softlockup_all_cpu_backtrace
: /proc/sys/kernel/softlockup_panic
: {{The Linux Kernel/include|linux/nmi.h}}
👁️ Example
: {{The Linux Kernel/source|lib/test_lockup.c}} – test module to generate lockups
Provoke NMI watchdog without panic:
echo 0 > /proc/sys/kernel/hardlockup_panic
insmod test_lockup.ko disable_irq=1 time_secs=13
⚙️ Internals
: {{The Linux Kernel/source|kernel/watchdog.c}} – detects hard and soft lockups on a system
: {{The Linux Kernel/source|kernel/watchdog_perf.c}} – detects hard lockups on a system using perf
: {{The Linux Kernel/source|kernel/watchdog_buddy.c}} – coordinates watchdog checks across CPUs
: {{The Linux Kernel/include|linux/hung_task.h}}, {{The Linux Kernel/source|kernel/hung_task.c}} – detects tasks stuck in uninterruptible sleep
📚 References
: {{The Linux Kernel/doc|Documentation for /proc/sys/kernel/|admin-guide/sysctl/kernel.html}}
: {{The Linux Kernel/doc|Softlockup detector and hardlockup detector (aka nmi_watchdog)|admin-guide/lockup-watchdogs.html}}
: kernel parameters:
:: {{The Linux Kernel/param|nmi_watchdog|nmi_watchdog}}
:: {{The Linux Kernel/param|nowatchdog|nowatchdog%09}}
:: {{The Linux Kernel/param|nosoftlockup|nosoftlockup}}
:: {{The Linux Kernel/param|softlockup_panic|softlockup_panic}}
<hr>
==...==
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/kernel/traps.c}} – x86 exception and trap handling
: {{The Linux Kernel/include|linux/panic.h}}, {{The Linux Kernel/source|kernel/panic.c}} – kernel panic, oops and BUG handling
📖 References for debugging
: {{The Linux Kernel/doc|Ramoops oops/panic logger|admin-guide/ramoops.html}}
: {{The Linux Kernel/doc|pstore block oops/panic logger|admin-guide/pstore-blk.html}}
: {{The Linux Kernel/doc|Fault injection|fault-injection}}
: {{The Linux Kernel/doc|Bisecting a bug|admin-guide/bug-bisect.html}}
: {{The Linux Kernel/doc|Development tools for the kernel|dev-tools}}
:: {{The Linux Kernel/doc|Kernel Testing Guide|dev-tools/testing-overview.html}}
:: {{The Linux Kernel/doc|Checkpatch|dev-tools/checkpatch.html}}, {{The Linux Kernel/source|scripts/checkpatch.pl}}
:: {{The Linux Kernel/doc|Selftests|dev-tools/kselftest.html}}, {{The Linux Kernel/source|tools/testing/selftests}}
: {{The Linux Kernel/include|linux/tracepoint.h}}
: {{The Linux Kernel/doc|Tracking down and identifying problems|admin-guide/index.html#tracking-down-and-identifying-problems}}
:: {{The Linux Kernel/doc|Bug hunting|admin-guide/bug-hunting.html}}
:: ...
📚 Further reading
: {{w|Linux kernel oops}}
: {{w|kdump (Linux)}}
: https://deepwiki.com/torvalds/linux/2.4-kernel-tracing-and-profiling
: https://drgn.readthedocs.io/ – programmable debugger
: https://crash-utility.github.io/
: https://wiki.ubuntu.com/Kernel/Debugging
: [https://www.intel.com/content/www/us/en/docs/vtune-profiler/user-guide/2025-1/enabling-linux-kernel-analysis.html Intel VTune Profiler]
: [[Linux Applications Debugging Techniques]]
{{BookCat}}
6n3uu65dwbglkyw3nclydicptljaosm
4641517
4641503
2026-06-28T14:59:50Z
Conan
3188
Debugging: coredump.c reference near panic/pstore
4641517
wikitext
text/x-wiki
{{DISPLAYTITLE:Debugging Linux kernel}}
⚲ API
: {{The Linux Kernel/include|linux/err.h}} – helper macros for error pointer handling and propagation
: {{The Linux Kernel/include|linux/errno.h}} – standard error codes used throughout the kernel.
== Performance ==
There are many factors that can affect the performance of the Linux kernel, including hardware configurations, software configurations, and workload characteristics.
In this context, performance optimization of the Linux kernel involves identifying and addressing performance {{w|Bottleneck (software)|bottlenecks}} in the system.
This can involve tuning kernel parameters, optimizing system resources, and identifying and fixing bugs and other issues that may be impacting performance.
Given the complexity of the Linux kernel and the wide range of factors that can affect performance, performance optimization can be a challenging task.
However, with the right tools and techniques, it is possible to significantly improve the performance and reliability of Linux-based systems.
=== Perf_events ===
{{w|perf (Linux)|Perf_events}}, short for performance events, is a powerful interface that provides detailed insights into the performance characteristics of software running on a system.
By analyzing the data collected by perf_events, developers can identify performance bottlenecks and optimize software to improve performance and reduce resource utilization.
Perf_events is designed to be a lightweight, low-overhead monitoring solution that has minimal impact on system performance.
🔧 TODO
⚲ Interfaces
: {{The Linux Kernel/man|1|perf}} – performance analysis tools
<!-- generated with
man -k perf | grep ^perf- | sed -n 's%\([^ ]*\) (\(.\+\)) \W\+\(.*\)%:: {{The Linux Kernel/man|\2|\1}} \– \3%p'
-->
: Basic commands:
:: {{The Linux Kernel/man|1|perf-help}} – display help information about perf
:: {{The Linux Kernel/man|1|perf-top}} – System profiling tool.
:: {{The Linux Kernel/man|1|perf-record}} – Run a command and record its profile into perf.data
:: {{The Linux Kernel/man|1|perf-report}} – Read perf.data (created by perf record) and display the profile
: Other commands:
:: {{The Linux Kernel/man|1|perf-annotate}} – Read perf.data (created by perf record) and display annotated code
:: {{The Linux Kernel/man|1|perf-archive}} – Create archive with object files with build-ids found ...
:: {{The Linux Kernel/man|1|perf-arm-spe}} – Support for Arm Statistical Profiling Extension within...
:: {{The Linux Kernel/man|1|perf-bench}} – General framework for benchmark suites
:: {{The Linux Kernel/man|1|perf-buildid-cache}} – Manage build-id cache.
:: {{The Linux Kernel/man|1|perf-buildid-list}} – List the buildids in a perf.data file
:: {{The Linux Kernel/man|1|perf-c2c}} – Shared Data C2C/HITM Analyzer.
:: {{The Linux Kernel/man|1|perf-config}} – Get and set variables in a configuration file.
:: {{The Linux Kernel/man|1|perf-daemon}} – Run record sessions on background
:: {{The Linux Kernel/man|1|perf-data}} – Data file related processing
:: {{The Linux Kernel/man|1|perf-diff}} – Read perf.data files and display the differential profile
:: {{The Linux Kernel/man|1|perf-dlfilter}} – Filter sample events using a dynamically loaded shared...
:: {{The Linux Kernel/man|1|perf-evlist}} – List the event names in a perf.data file
:: {{The Linux Kernel/man|1|perf-ftrace}} – simple wrapper for kernel's ftrace functionality
:: {{The Linux Kernel/man|1|perf-inject}} – Filter to augment the events stream with additional in...
:: {{The Linux Kernel/man|1|perf-intel-pt}} – Support for Intel Processor Trace within perf tools
:: {{The Linux Kernel/man|1|perf-iostat}} – Show I/O performance metrics
:: {{The Linux Kernel/man|1|perf-kallsyms}} – Searches running kernel for symbols
:: {{The Linux Kernel/man|1|perf-kmem}} – Tool to trace/measure kernel memory properties
:: {{The Linux Kernel/man|1|perf-kvm}} – Tool to trace/measure kvm guest os
:: {{The Linux Kernel/man|1|perf-kwork}} – Tool to trace/measure kernel work properties (latencies)
:: {{The Linux Kernel/man|1|perf-list}} – List all symbolic event types
:: {{The Linux Kernel/man|1|perf-lock}} – Analyze lock events
:: {{The Linux Kernel/man|1|perf-mem}} – Profile memory accesses
:: {{The Linux Kernel/man|1|perf-probe}} – Define new dynamic tracepoints
:: {{The Linux Kernel/man|1|perf-sched}} – Tool to trace/measure scheduler properties (latencies)
:: {{The Linux Kernel/man|1|perf-script}} – Read perf.data (created by perf record) and display tr...
::: {{The Linux Kernel/man|1|perf-script-perl}} – Process trace data with a Perl script
::: {{The Linux Kernel/man|1|perf-script-python}} – Process trace data with a Python script
:: {{The Linux Kernel/man|1|perf-stat}} – Run a command and gather performance counter statistics
:: {{The Linux Kernel/man|1|perf-test}} – Runs sanity tests.
:: {{The Linux Kernel/man|1|perf-timechart}} – Tool to visualize total system behavior during a workload
:: {{The Linux Kernel/man|1|perf-trace}} – strace inspired tool
:: {{The Linux Kernel/man|1|perf-version}} – display the version of perf binary
⚙️ Internals
: {{The Linux Kernel/man|2|perf_event_open}} – sets up performance monitoring
: {{The Linux Kernel/include|uapi/linux/perf_event.h}}
: {{The Linux Kernel/source|tools/perf}} – performance analysis tools
: {{The Linux Kernel/include|linux/perf_event.h}}
: {{The Linux Kernel/source|kernel/events/core.c}} – performance events core
: {{The Linux Kernel/source|kernel/profile.c}} – simple profiling
📖 References
: {{w|perf (Linux)|perf}} – instruments CPU performance counters, tracepoints, kprobes, and uprobes
: https://perfwiki.github.io/main/
📚 Further reading
: [https://www.brendangregg.com/perf.html perf Examples]
: [https://web.eece.maine.edu/~vweaver/projects/perf_events/ The Unofficial Linux Perf Events Web-Page]
---------------
🛠️ Utilities
: {{w|Performance Co-Pilot}}, https://pcp.io/ – Performance Co-Pilot
: {{w|Prometheus (software)|Prometheus}}, https://prometheus.io/
: https://github.com/redhat-nfvpe/container-perf-tools
: https://github.com/brendangregg/perf-tools – performance analysis tools based on Linux perf_events (aka perf) and ftrace
: [https://linux.die.net/man/1/readprofile readprofile] – a tool to read kernel profiling information
📚 Further reading
: [https://wiki.ubuntu.com/Kernel/Reference/stress-ng stress-ng] – exercises various kernel interfaces
: http://trac.gateworks.com/wiki/linux/profiling
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/9/html/optimizing_rhel_9_for_real_time_for_low_latency_operation/assembly_analyzing-application-performance_optimizing-rhel9-for-real-time-for-low-latency-operation Analyzing application performance in RHEL 9]
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/index Monitoring and managing system status and performance in RHEL 9]
: [[Embedded_Systems/Linux#Real-time|Real-time Linux]]
== User space debug interfaces ==
⚲ Interfaces
: {{The Linux Kernel/man|1|dmesg}} – prints or control the kernel ring buffer
:: {{The Linux Kernel/man|2|syslog}} – system call, which is used to control the kernel printk() buffer
: {{The Linux Kernel/man|1|strace}} – system calls and signals tracing tool
:: {{The Linux Kernel/man|2|ptrace}} – process trace system call
: {{The Linux Kernel/man|3|klogctl}}
: {{The Linux Kernel/man|5|core}}
: /sys/kernel/debug/ – {{w|debugfs}}
: dmesg --console-level <level>
: gdb /usr/src/linux/vmlinux /proc/kcore
: /proc/self/stack
: {{The Linux Kernel/doc|dynamic|admin-guide/dynamic-debug-howto.html}} debug
:: <big>⌨️</big> hands-on:
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
⚙️ Internals
: {{The Linux Kernel/id|handle_sysrq}}
: {{The Linux Kernel/include|linux/debugfs.h}} – debugfs API
: {{The Linux Kernel/source|fs/debugfs}} – debugfs implementation
: {{The Linux Kernel/include|linux/tracefs.h}}, {{The Linux Kernel/source|fs/tracefs}} – filesystem backing /sys/kernel/tracing
: {{The Linux Kernel/include|linux/pstore.h}}, {{The Linux Kernel/source|fs/pstore}} – preserves crash logs across reboots
📚 '''References'''
: {{The Linux Kernel/doc|Development tools for the kernel|dev-tools}}
: {{The Linux Kernel/doc|DebugFS|filesystems/debugfs.html}}, {{The Linux Kernel/source|samples/qmi/qmi_sample_client.c}}
: {{The Linux Kernel/doc|Kprobe-based Event Tracing|trace/kprobetrace.html}}
: {{The Linux Kernel/doc|Dynamic debug|admin-guide/dynamic-debug-howto.html}}
: {{The Linux Kernel/doc|Linux Magic System Request Key Hacks|admin-guide/sysrq.html}}
: {{w|Magic SysRq key}}
== Tracing and logging ==
⚲ API:
'''User-space interface:'''
: {{The Linux Kernel/man|1|dmesg}} – prints or control the kernel ring buffer
:: {{The Linux Kernel/man|2|syslog}} – system call, which is used to control the kernel printk() buffer
: /proc/kmsg
: https://kernelshark.org/ – front end reader of trace-cmd
: https://trace-cmd.org/, {{The Linux Kernel/man|1|trace-cmd}} – CLI for {{The Linux Kernel/doc|Ftrace|trace/ftrace.html}} – Linux kernel internal tracer /sys/kernel/debug/tracing/
'''The most commonly used functions'''
: {{The Linux Kernel/include|linux/printk.h}}
:: {{The Linux Kernel/id|dump_stack}} – prints the current kernel stack trace for debugging purposes
:: {{The Linux Kernel/id|pr_alert}} – logs an alert-level message, indicating a critical event that requires immediate attention
:: {{The Linux Kernel/id|pr_cont}} – continues printing the current message on the same line
:: {{The Linux Kernel/id|pr_crit}} – logs a critical-level message, indicating a severe condition that might require system halt
:: {{The Linux Kernel/id|pr_debug}} – logs a debug-level message for developers, usually enabled in debug builds
:: {{The Linux Kernel/id|pr_devel}} – logs a developer-specific message, typically used for fine-grained debug purposes, see {{The Linux Kernel/doc|dynamic|admin-guide/dynamic-debug-howto.html}}
:: {{The Linux Kernel/id|pr_emerg}} – logs an emergency-level message, indicating a serious error that could cause system crash
:: {{The Linux Kernel/id|pr_err}} – logs an error-level message, typically indicating an issue that requires attention
:: {{The Linux Kernel/id|pr_err_ratelimited}} – logs an error-level message with rate limiting to prevent excessive logging
:: {{The Linux Kernel/id|pr_fmt}} – defines a format string for kernel messages
:: {{The Linux Kernel/id|pr_info}} – logs an informational-level message, providing status updates or diagnostics
:: {{The Linux Kernel/id|pr_info_ratelimited}} – logs an informational-level message with rate limiting
:: {{The Linux Kernel/id|pr_notice}} – logs a notice-level message, typically used for events that aren't errors but should be noted
:: {{The Linux Kernel/id|pr_warn}} – logs a warning-level message, indicating a potential issue that doesn't immediately affect system functionality
:: {{The Linux Kernel/id|pr_warn_once}} – logs a warning message once, preventing repeated warnings for the same event
:: {{The Linux Kernel/id|pr_warn_ratelimited}} – logs a warning-level message with rate limiting
:: {{The Linux Kernel/id|print_hex_dump}} – prints a hexdump of data for debugging purposes
:: {{The Linux Kernel/id|print_hex_dump_debug}} – prints a detailed hexdump with debugging-level verbosity
:: {{The Linux Kernel/id|printk}} – the primary function for printing kernel messages with varying severity levels
:: {{The Linux Kernel/id|va_format}} – formats a variable argument list into a string for logging or printing purposes
::: <big>⌨️</big> hands-on:
::: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control; dmesg -w
::: and type on built-in keyboard
: {{The Linux Kernel/include|linux/dev_printk.h}} – device-specific logging
:: {{The Linux Kernel/id|dev_crit}} – prints a critical-level message for a device
:: {{The Linux Kernel/id|dev_dbg}} – prints a debug-level message for a device if debugging is enabled
:: {{The Linux Kernel/id|dev_dbg_ratelimited}} – prints debug messages for a device with rate limiting
:: {{The Linux Kernel/id|dev_err}} – prints an error-level message for a device
:: {{The Linux Kernel/id|dev_err_once}} – prints an error message for a device only once
:: {{The Linux Kernel/id|dev_err_probe}} – prints an error related to probe failure with standard formatting
:: {{The Linux Kernel/id|dev_err_ratelimited}} – prints error messages for a device with rate limiting
:: {{The Linux Kernel/id|dev_fmt}} – defines a format string used by device-specific printk macros
:: {{The Linux Kernel/id|dev_info}} – prints an informational-level message for a device
:: {{The Linux Kernel/id|dev_notice}} – prints a notice-level message for a device
:: {{The Linux Kernel/id|dev_printk}} – generic function to print kernel messages with specified log level for a device
:: {{The Linux Kernel/id|dev_vdbg}} – prints verbose debug messages for a device if enabled at compile time
:: {{The Linux Kernel/id|dev_warn}} – prints a warning-level message for a device
:: {{The Linux Kernel/id|dev_warn_once}} – prints a warning message for a device only once
:: {{The Linux Kernel/id|dev_warn_ratelimited}} – prints warning messages for a device with rate limiting
: {{The Linux Kernel/include|asm-generic/bug.h}}
:: {{The Linux Kernel/id|WARN_ON}}
:: {{The Linux Kernel/id|WARN}}
⚙️ Internals
: {{The Linux Kernel/id|printk}}
: {{The Linux Kernel/source|kernel/printk/printk.c}} – kernel message logging
: {{The Linux Kernel/source|arch/x86/kernel/traps.c}} – x86 exception and trap handling
: {{The Linux Kernel/source|lib/dump_stack.c}} – stack trace dumping
: {{The Linux Kernel/include|linux/kprobes.h}}, {{The Linux Kernel/source|kernel/kprobes.c}} – {{The Linux Kernel/doc|dynamic tracing probes|trace/kprobes.html}}
: {{The Linux Kernel/source|kernel/trace}} – tracing infrastructure
: {{The Linux Kernel/source|scripts/tracing/draw_functrace.py}} – visualize function call graph from trace
: {{The Linux Kernel/ltp|kernel|logging}}, {{The Linux Kernel/ltp|kernel|tracing}}
: {{The Linux Kernel/source|samples/ftrace}} – ftrace usage examples
: {{The Linux Kernel/source|samples/trace_events}} – trace event examples
: {{The Linux Kernel/source|samples/trace_printk}} – trace_printk examples
: {{The Linux Kernel/include|linux/instrumentation.h}}
📚 '''References''':
: [https://elinux.org/Debugging_by_printing Debugging by printing]
: {{The Linux Kernel/doc|Message logging with printk|core-api/printk-basics.html}}
: {{The Linux Kernel/doc|Dynamic debug|admin-guide/dynamic-debug-howto.html}}
: {{w|SystemTap}}
:: {{The Linux Kernel/man|1|stap}} – systemtap script translator/driver
: {{w|strace}}
:: {{The Linux Kernel/man|1|strace}} – trace system calls and signals
: {{w|LTTng}}
: {{w|ftrace}}
: {{The Linux Kernel/doc|Linux Tracing Technologies|trace}}
:: {{The Linux Kernel/doc|Tracepoint Analysis|trace/tracepoint-analysis.html}}
:: {{The Linux Kernel/doc|Function Tracer|trace/ftrace.html}} – function, latency and event tracing
::: {{The Linux Kernel/doc|Event Tracing|trace/events.html}}
:: {{The Linux Kernel/doc|Using ftrace to hook to functions|trace/ftrace-uses.html}}
:: {{The Linux Kernel/doc|Fprobe - Function entry/exit probe|trace/fprobe.html}}
:: {{The Linux Kernel/doc|Kprobes|trace/kprobes.html}}
:: {{The Linux Kernel/doc|Kprobe-based Event Tracing|trace/kprobetrace.html}}
:: {{The Linux Kernel/doc|Uprobe-tracer: Uprobe-based Event Tracing|trace/uprobetracer.html}}
:: {{The Linux Kernel/doc|Using the Linux Kernel Tracepoints|trace/tracepoints.html}}
:: {{The Linux Kernel/doc|Subsystem Trace Points: kmem|trace/events-kmem.html}}
:: {{The Linux Kernel/doc|Subsystem Trace Points: power|trace/events-power.html}}
:: {{The Linux Kernel/doc|NMI Trace Events|trace/events-nmi.html}}
:: {{The Linux Kernel/doc|In-kernel memory-mapped I/O tracing|trace/mmiotrace.html}}
:: {{The Linux Kernel/doc|Event Histograms|trace/histogram.html}}
:: {{The Linux Kernel/doc|Histogram Design Notes|trace/histogram-design.html}}
:: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
:: {{The Linux Kernel/doc|Hardware Latency Detector|trace/hwlat_detector.html}}
:: {{The Linux Kernel/doc|Intel(R) Trace Hub (TH)|trace/intel_th.html}}
:: {{The Linux Kernel/doc|Lockless Ring Buffer Design|trace/ring-buffer-design.html}}
:: {{The Linux Kernel/doc|System Trace Module|trace/stm.html}}
:: {{The Linux Kernel/doc|CoreSight - ARM Hardware Trace|trace/coresight}}
'''🔧 TODO. 🚀 advanced features'''
: {{The Linux Kernel/include|linux/kmemleak.h}} – memory leak detector
: {{The Linux Kernel/id|pr_cont}} - continues a previous log message in the same line
: {{The Linux Kernel/id|print_hex_dump_bytes}}
: {{The Linux Kernel/id|print_hex_dump_debug}}
: {{The Linux Kernel/id|dump_stack}}
: {{The Linux Kernel/id|CONFIG_PRINTK_CALLER}}
: {{The Linux Kernel/id|CONFIG_DEBUG_KERNEL}}
: {{The Linux Kernel/id|CONFIG_DEBUG_INFO}}
: https://git.kernel.org/pub/scm/libs/libtrace/
📚 Further reading
: https://lore.kernel.org/linux-trace-kernel/
: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git/
== Memory debugging ==
⚙️ Internals:
: {{The Linux Kernel/source|mm/kasan}} – {{The Linux Kernel/doc|KernelAddressSANitizer|dev-tools/kasan.html}}, detects out-of-bounds and use-after-free bugs
: {{The Linux Kernel/source|mm/kfence}} – {{The Linux Kernel/doc|Kernel Electric-Fence|dev-tools/kfence.html}}, low-overhead sampling-based memory safety detector
: {{The Linux Kernel/include|linux/kmemleak.h}} – {{The Linux Kernel/doc|memory leak detector|dev-tools/kmemleak.html}}, {{The Linux Kernel/source|mm/kmemleak.c}}
: {{The Linux Kernel/include|linux/kcsan-checks.h}} – {{The Linux Kernel/doc|KCSAN - Kernel Concurrency Sanitizer|dev-tools/kcsan.html}}, {{The Linux Kernel/source|kernel/kcsan}}
: {{The Linux Kernel/source|kernel/gcov}} – {{The Linux Kernel/doc|gcov code coverage|dev-tools/gcov.html}}
== kgdb and kdb ==
⚲ Interfaces
: {{The Linux Kernel/include|linux/kgdb.h}}
: {{The Linux Kernel/include|linux/kdb.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/debug}} – kgdb/kdb debugger
📚 '''References'''
: {{The Linux Kernel/doc|Using kgdb, kdb and the kernel debugger internals|dev-tools/kgdb.html}}
: {{w|kdump (Linux)|kdump}}
: {{The Linux Kernel/doc|kdump|admin-guide/kdump}}
: {{The Linux Kernel/man|8|crash}} – Analyze Linux crash dump data or a live system
== {{w|eBPF}} ==
⚲ API:
: {{The Linux Kernel/man|2|bpf}} ↪ {{The Linux Kernel/source|kernel/bpf/syscall.c}}
: {{The Linux Kernel/include|linux/bpf.h}} – BPF core definitions
⚙️ Internals:
: {{The Linux Kernel/source|kernel/bpf}} – BPF subsystem core
: {{The Linux Kernel/source|net/bpf}} – BPF networking hooks
📖 References
: {{The Linux Kernel/doc|eBPF and BPF|bpf}}
📚 Further reading
: {{The Linux Kernel/man|7|bpf-helpers}}
: [https://www.brendangregg.com/ebpf.html Linux Extended BPF (eBPF) Tracing Tools]
: [https://github.com/iovisor/bpftrace bpftrace – High-level tracing language for Linux eBPF]
: [https://github.com/iovisor/bcc#tools BCC – Tools for BPF-based Linux IO analysis, networking, monitoring, and more]
:: [https://github.com/iovisor/bcc/blob/master/tools/trace_example.txt Example] of [https://github.com/iovisor/bcc/blob/master/tools/trace.py trace.py]
: {{The Linux Kernel/man|8|stapbpf}}
: [https://medium.com/@zone24x7_inc/ebpf-programming-for-linux-kernel-tracing-30364dde3fb7 eBPF Programming for Linux Kernel Tracing]
: {{The Linux Kernel/doc|lockdep - Runtime locking correctness validator|locking/lockdep-design.html}}
== Watchdogs ==
[[../Softdog Driver]]
{{The Linux Kernel/id|dev_watchdog}} – network device watchdog
The NMI watchdog lockup detectors:
⚲ API
: /proc/sys/kernel/nmi_watchdog
: /proc/sys/kernel/soft_watchdog
: /proc/sys/kernel/watchdog
: /proc/sys/kernel/watchdog_cpumask
: /proc/sys/kernel/watchdog_thresh
: /proc/sys/kernel/hardlockup_all_cpu_backtrace
: /proc/sys/kernel/hardlockup_panic
: /proc/sys/kernel/softlockup_all_cpu_backtrace
: /proc/sys/kernel/softlockup_panic
: {{The Linux Kernel/include|linux/nmi.h}}
👁️ Example
: {{The Linux Kernel/source|lib/test_lockup.c}} – test module to generate lockups
Provoke NMI watchdog without panic:
echo 0 > /proc/sys/kernel/hardlockup_panic
insmod test_lockup.ko disable_irq=1 time_secs=13
⚙️ Internals
: {{The Linux Kernel/source|kernel/watchdog.c}} – detects hard and soft lockups on a system
: {{The Linux Kernel/source|kernel/watchdog_perf.c}} – detects hard lockups on a system using perf
: {{The Linux Kernel/source|kernel/watchdog_buddy.c}} – coordinates watchdog checks across CPUs
: {{The Linux Kernel/include|linux/hung_task.h}}, {{The Linux Kernel/source|kernel/hung_task.c}} – detects tasks stuck in uninterruptible sleep
📚 References
: {{The Linux Kernel/doc|Documentation for /proc/sys/kernel/|admin-guide/sysctl/kernel.html}}
: {{The Linux Kernel/doc|Softlockup detector and hardlockup detector (aka nmi_watchdog)|admin-guide/lockup-watchdogs.html}}
: kernel parameters:
:: {{The Linux Kernel/param|nmi_watchdog|nmi_watchdog}}
:: {{The Linux Kernel/param|nowatchdog|nowatchdog%09}}
:: {{The Linux Kernel/param|nosoftlockup|nosoftlockup}}
:: {{The Linux Kernel/param|softlockup_panic|softlockup_panic}}
<hr>
==...==
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/kernel/traps.c}} – x86 exception and trap handling
: {{The Linux Kernel/include|linux/panic.h}}, {{The Linux Kernel/source|kernel/panic.c}} – kernel panic, oops and BUG handling
: {{The Linux Kernel/include|linux/coredump.h}}, {{The Linux Kernel/source|fs/coredump.c}} – {{The Linux Kernel/man|5|core}} dump generation
📖 References for debugging
: {{The Linux Kernel/doc|Ramoops oops/panic logger|admin-guide/ramoops.html}}
: {{The Linux Kernel/doc|pstore block oops/panic logger|admin-guide/pstore-blk.html}}
: {{The Linux Kernel/doc|Fault injection|fault-injection}}
: {{The Linux Kernel/doc|Bisecting a bug|admin-guide/bug-bisect.html}}
: {{The Linux Kernel/doc|Development tools for the kernel|dev-tools}}
:: {{The Linux Kernel/doc|Kernel Testing Guide|dev-tools/testing-overview.html}}
:: {{The Linux Kernel/doc|Checkpatch|dev-tools/checkpatch.html}}, {{The Linux Kernel/source|scripts/checkpatch.pl}}
:: {{The Linux Kernel/doc|Selftests|dev-tools/kselftest.html}}, {{The Linux Kernel/source|tools/testing/selftests}}
: {{The Linux Kernel/include|linux/tracepoint.h}}
: {{The Linux Kernel/doc|Tracking down and identifying problems|admin-guide/index.html#tracking-down-and-identifying-problems}}
:: {{The Linux Kernel/doc|Bug hunting|admin-guide/bug-hunting.html}}
:: ...
📚 Further reading
: {{w|Linux kernel oops}}
: {{w|kdump (Linux)}}
: https://deepwiki.com/torvalds/linux/2.4-kernel-tracing-and-profiling
: https://drgn.readthedocs.io/ – programmable debugger
: https://crash-utility.github.io/
: https://wiki.ubuntu.com/Kernel/Debugging
: [https://www.intel.com/content/www/us/en/docs/vtune-profiler/user-guide/2025-1/enabling-linux-kernel-analysis.html Intel VTune Profiler]
: [[Linux Applications Debugging Techniques]]
{{BookCat}}
fld1mbk8kzrahi6b8iwcs6e04pq55rl
4641530
4641517
2026-06-28T15:36:27Z
Conan
3188
Debugging: bug.h header reference
4641530
wikitext
text/x-wiki
{{DISPLAYTITLE:Debugging Linux kernel}}
⚲ API
: {{The Linux Kernel/include|linux/err.h}} – helper macros for error pointer handling and propagation
: {{The Linux Kernel/include|linux/errno.h}} – standard error codes used throughout the kernel.
== Performance ==
There are many factors that can affect the performance of the Linux kernel, including hardware configurations, software configurations, and workload characteristics.
In this context, performance optimization of the Linux kernel involves identifying and addressing performance {{w|Bottleneck (software)|bottlenecks}} in the system.
This can involve tuning kernel parameters, optimizing system resources, and identifying and fixing bugs and other issues that may be impacting performance.
Given the complexity of the Linux kernel and the wide range of factors that can affect performance, performance optimization can be a challenging task.
However, with the right tools and techniques, it is possible to significantly improve the performance and reliability of Linux-based systems.
=== Perf_events ===
{{w|perf (Linux)|Perf_events}}, short for performance events, is a powerful interface that provides detailed insights into the performance characteristics of software running on a system.
By analyzing the data collected by perf_events, developers can identify performance bottlenecks and optimize software to improve performance and reduce resource utilization.
Perf_events is designed to be a lightweight, low-overhead monitoring solution that has minimal impact on system performance.
🔧 TODO
⚲ Interfaces
: {{The Linux Kernel/man|1|perf}} – performance analysis tools
<!-- generated with
man -k perf | grep ^perf- | sed -n 's%\([^ ]*\) (\(.\+\)) \W\+\(.*\)%:: {{The Linux Kernel/man|\2|\1}} \– \3%p'
-->
: Basic commands:
:: {{The Linux Kernel/man|1|perf-help}} – display help information about perf
:: {{The Linux Kernel/man|1|perf-top}} – System profiling tool.
:: {{The Linux Kernel/man|1|perf-record}} – Run a command and record its profile into perf.data
:: {{The Linux Kernel/man|1|perf-report}} – Read perf.data (created by perf record) and display the profile
: Other commands:
:: {{The Linux Kernel/man|1|perf-annotate}} – Read perf.data (created by perf record) and display annotated code
:: {{The Linux Kernel/man|1|perf-archive}} – Create archive with object files with build-ids found ...
:: {{The Linux Kernel/man|1|perf-arm-spe}} – Support for Arm Statistical Profiling Extension within...
:: {{The Linux Kernel/man|1|perf-bench}} – General framework for benchmark suites
:: {{The Linux Kernel/man|1|perf-buildid-cache}} – Manage build-id cache.
:: {{The Linux Kernel/man|1|perf-buildid-list}} – List the buildids in a perf.data file
:: {{The Linux Kernel/man|1|perf-c2c}} – Shared Data C2C/HITM Analyzer.
:: {{The Linux Kernel/man|1|perf-config}} – Get and set variables in a configuration file.
:: {{The Linux Kernel/man|1|perf-daemon}} – Run record sessions on background
:: {{The Linux Kernel/man|1|perf-data}} – Data file related processing
:: {{The Linux Kernel/man|1|perf-diff}} – Read perf.data files and display the differential profile
:: {{The Linux Kernel/man|1|perf-dlfilter}} – Filter sample events using a dynamically loaded shared...
:: {{The Linux Kernel/man|1|perf-evlist}} – List the event names in a perf.data file
:: {{The Linux Kernel/man|1|perf-ftrace}} – simple wrapper for kernel's ftrace functionality
:: {{The Linux Kernel/man|1|perf-inject}} – Filter to augment the events stream with additional in...
:: {{The Linux Kernel/man|1|perf-intel-pt}} – Support for Intel Processor Trace within perf tools
:: {{The Linux Kernel/man|1|perf-iostat}} – Show I/O performance metrics
:: {{The Linux Kernel/man|1|perf-kallsyms}} – Searches running kernel for symbols
:: {{The Linux Kernel/man|1|perf-kmem}} – Tool to trace/measure kernel memory properties
:: {{The Linux Kernel/man|1|perf-kvm}} – Tool to trace/measure kvm guest os
:: {{The Linux Kernel/man|1|perf-kwork}} – Tool to trace/measure kernel work properties (latencies)
:: {{The Linux Kernel/man|1|perf-list}} – List all symbolic event types
:: {{The Linux Kernel/man|1|perf-lock}} – Analyze lock events
:: {{The Linux Kernel/man|1|perf-mem}} – Profile memory accesses
:: {{The Linux Kernel/man|1|perf-probe}} – Define new dynamic tracepoints
:: {{The Linux Kernel/man|1|perf-sched}} – Tool to trace/measure scheduler properties (latencies)
:: {{The Linux Kernel/man|1|perf-script}} – Read perf.data (created by perf record) and display tr...
::: {{The Linux Kernel/man|1|perf-script-perl}} – Process trace data with a Perl script
::: {{The Linux Kernel/man|1|perf-script-python}} – Process trace data with a Python script
:: {{The Linux Kernel/man|1|perf-stat}} – Run a command and gather performance counter statistics
:: {{The Linux Kernel/man|1|perf-test}} – Runs sanity tests.
:: {{The Linux Kernel/man|1|perf-timechart}} – Tool to visualize total system behavior during a workload
:: {{The Linux Kernel/man|1|perf-trace}} – strace inspired tool
:: {{The Linux Kernel/man|1|perf-version}} – display the version of perf binary
⚙️ Internals
: {{The Linux Kernel/man|2|perf_event_open}} – sets up performance monitoring
: {{The Linux Kernel/include|uapi/linux/perf_event.h}}
: {{The Linux Kernel/source|tools/perf}} – performance analysis tools
: {{The Linux Kernel/include|linux/perf_event.h}}
: {{The Linux Kernel/source|kernel/events/core.c}} – performance events core
: {{The Linux Kernel/source|kernel/profile.c}} – simple profiling
📖 References
: {{w|perf (Linux)|perf}} – instruments CPU performance counters, tracepoints, kprobes, and uprobes
: https://perfwiki.github.io/main/
📚 Further reading
: [https://www.brendangregg.com/perf.html perf Examples]
: [https://web.eece.maine.edu/~vweaver/projects/perf_events/ The Unofficial Linux Perf Events Web-Page]
---------------
🛠️ Utilities
: {{w|Performance Co-Pilot}}, https://pcp.io/ – Performance Co-Pilot
: {{w|Prometheus (software)|Prometheus}}, https://prometheus.io/
: https://github.com/redhat-nfvpe/container-perf-tools
: https://github.com/brendangregg/perf-tools – performance analysis tools based on Linux perf_events (aka perf) and ftrace
: [https://linux.die.net/man/1/readprofile readprofile] – a tool to read kernel profiling information
📚 Further reading
: [https://wiki.ubuntu.com/Kernel/Reference/stress-ng stress-ng] – exercises various kernel interfaces
: http://trac.gateworks.com/wiki/linux/profiling
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/9/html/optimizing_rhel_9_for_real_time_for_low_latency_operation/assembly_analyzing-application-performance_optimizing-rhel9-for-real-time-for-low-latency-operation Analyzing application performance in RHEL 9]
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/index Monitoring and managing system status and performance in RHEL 9]
: [[Embedded_Systems/Linux#Real-time|Real-time Linux]]
== User space debug interfaces ==
⚲ Interfaces
: {{The Linux Kernel/man|1|dmesg}} – prints or control the kernel ring buffer
:: {{The Linux Kernel/man|2|syslog}} – system call, which is used to control the kernel printk() buffer
: {{The Linux Kernel/man|1|strace}} – system calls and signals tracing tool
:: {{The Linux Kernel/man|2|ptrace}} – process trace system call
: {{The Linux Kernel/man|3|klogctl}}
: {{The Linux Kernel/man|5|core}}
: /sys/kernel/debug/ – {{w|debugfs}}
: dmesg --console-level <level>
: gdb /usr/src/linux/vmlinux /proc/kcore
: /proc/self/stack
: {{The Linux Kernel/doc|dynamic|admin-guide/dynamic-debug-howto.html}} debug
:: <big>⌨️</big> hands-on:
:: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control
⚙️ Internals
: {{The Linux Kernel/id|handle_sysrq}}
: {{The Linux Kernel/include|linux/debugfs.h}} – debugfs API
: {{The Linux Kernel/source|fs/debugfs}} – debugfs implementation
: {{The Linux Kernel/include|linux/tracefs.h}}, {{The Linux Kernel/source|fs/tracefs}} – filesystem backing /sys/kernel/tracing
: {{The Linux Kernel/include|linux/pstore.h}}, {{The Linux Kernel/source|fs/pstore}} – preserves crash logs across reboots
📚 '''References'''
: {{The Linux Kernel/doc|Development tools for the kernel|dev-tools}}
: {{The Linux Kernel/doc|DebugFS|filesystems/debugfs.html}}, {{The Linux Kernel/source|samples/qmi/qmi_sample_client.c}}
: {{The Linux Kernel/doc|Kprobe-based Event Tracing|trace/kprobetrace.html}}
: {{The Linux Kernel/doc|Dynamic debug|admin-guide/dynamic-debug-howto.html}}
: {{The Linux Kernel/doc|Linux Magic System Request Key Hacks|admin-guide/sysrq.html}}
: {{w|Magic SysRq key}}
== Tracing and logging ==
⚲ API:
'''User-space interface:'''
: {{The Linux Kernel/man|1|dmesg}} – prints or control the kernel ring buffer
:: {{The Linux Kernel/man|2|syslog}} – system call, which is used to control the kernel printk() buffer
: /proc/kmsg
: https://kernelshark.org/ – front end reader of trace-cmd
: https://trace-cmd.org/, {{The Linux Kernel/man|1|trace-cmd}} – CLI for {{The Linux Kernel/doc|Ftrace|trace/ftrace.html}} – Linux kernel internal tracer /sys/kernel/debug/tracing/
'''The most commonly used functions'''
: {{The Linux Kernel/include|linux/printk.h}}
:: {{The Linux Kernel/id|dump_stack}} – prints the current kernel stack trace for debugging purposes
:: {{The Linux Kernel/id|pr_alert}} – logs an alert-level message, indicating a critical event that requires immediate attention
:: {{The Linux Kernel/id|pr_cont}} – continues printing the current message on the same line
:: {{The Linux Kernel/id|pr_crit}} – logs a critical-level message, indicating a severe condition that might require system halt
:: {{The Linux Kernel/id|pr_debug}} – logs a debug-level message for developers, usually enabled in debug builds
:: {{The Linux Kernel/id|pr_devel}} – logs a developer-specific message, typically used for fine-grained debug purposes, see {{The Linux Kernel/doc|dynamic|admin-guide/dynamic-debug-howto.html}}
:: {{The Linux Kernel/id|pr_emerg}} – logs an emergency-level message, indicating a serious error that could cause system crash
:: {{The Linux Kernel/id|pr_err}} – logs an error-level message, typically indicating an issue that requires attention
:: {{The Linux Kernel/id|pr_err_ratelimited}} – logs an error-level message with rate limiting to prevent excessive logging
:: {{The Linux Kernel/id|pr_fmt}} – defines a format string for kernel messages
:: {{The Linux Kernel/id|pr_info}} – logs an informational-level message, providing status updates or diagnostics
:: {{The Linux Kernel/id|pr_info_ratelimited}} – logs an informational-level message with rate limiting
:: {{The Linux Kernel/id|pr_notice}} – logs a notice-level message, typically used for events that aren't errors but should be noted
:: {{The Linux Kernel/id|pr_warn}} – logs a warning-level message, indicating a potential issue that doesn't immediately affect system functionality
:: {{The Linux Kernel/id|pr_warn_once}} – logs a warning message once, preventing repeated warnings for the same event
:: {{The Linux Kernel/id|pr_warn_ratelimited}} – logs a warning-level message with rate limiting
:: {{The Linux Kernel/id|print_hex_dump}} – prints a hexdump of data for debugging purposes
:: {{The Linux Kernel/id|print_hex_dump_debug}} – prints a detailed hexdump with debugging-level verbosity
:: {{The Linux Kernel/id|printk}} – the primary function for printing kernel messages with varying severity levels
:: {{The Linux Kernel/id|va_format}} – formats a variable argument list into a string for logging or printing purposes
::: <big>⌨️</big> hands-on:
::: echo "module atkbd +pfl" | sudo tee /sys/kernel/debug/dynamic_debug/control; dmesg -w
::: and type on built-in keyboard
: {{The Linux Kernel/include|linux/dev_printk.h}} – device-specific logging
:: {{The Linux Kernel/id|dev_crit}} – prints a critical-level message for a device
:: {{The Linux Kernel/id|dev_dbg}} – prints a debug-level message for a device if debugging is enabled
:: {{The Linux Kernel/id|dev_dbg_ratelimited}} – prints debug messages for a device with rate limiting
:: {{The Linux Kernel/id|dev_err}} – prints an error-level message for a device
:: {{The Linux Kernel/id|dev_err_once}} – prints an error message for a device only once
:: {{The Linux Kernel/id|dev_err_probe}} – prints an error related to probe failure with standard formatting
:: {{The Linux Kernel/id|dev_err_ratelimited}} – prints error messages for a device with rate limiting
:: {{The Linux Kernel/id|dev_fmt}} – defines a format string used by device-specific printk macros
:: {{The Linux Kernel/id|dev_info}} – prints an informational-level message for a device
:: {{The Linux Kernel/id|dev_notice}} – prints a notice-level message for a device
:: {{The Linux Kernel/id|dev_printk}} – generic function to print kernel messages with specified log level for a device
:: {{The Linux Kernel/id|dev_vdbg}} – prints verbose debug messages for a device if enabled at compile time
:: {{The Linux Kernel/id|dev_warn}} – prints a warning-level message for a device
:: {{The Linux Kernel/id|dev_warn_once}} – prints a warning message for a device only once
:: {{The Linux Kernel/id|dev_warn_ratelimited}} – prints warning messages for a device with rate limiting
: {{The Linux Kernel/include|linux/bug.h}}, {{The Linux Kernel/include|asm-generic/bug.h}} – BUG, WARN, BUILD_BUG_ON macros
:: {{The Linux Kernel/id|WARN_ON}}
:: {{The Linux Kernel/id|WARN}}
⚙️ Internals
: {{The Linux Kernel/id|printk}}
: {{The Linux Kernel/source|kernel/printk/printk.c}} – kernel message logging
: {{The Linux Kernel/source|arch/x86/kernel/traps.c}} – x86 exception and trap handling
: {{The Linux Kernel/source|lib/dump_stack.c}} – stack trace dumping
: {{The Linux Kernel/include|linux/kprobes.h}}, {{The Linux Kernel/source|kernel/kprobes.c}} – {{The Linux Kernel/doc|dynamic tracing probes|trace/kprobes.html}}
: {{The Linux Kernel/source|kernel/trace}} – tracing infrastructure
: {{The Linux Kernel/source|scripts/tracing/draw_functrace.py}} – visualize function call graph from trace
: {{The Linux Kernel/ltp|kernel|logging}}, {{The Linux Kernel/ltp|kernel|tracing}}
: {{The Linux Kernel/source|samples/ftrace}} – ftrace usage examples
: {{The Linux Kernel/source|samples/trace_events}} – trace event examples
: {{The Linux Kernel/source|samples/trace_printk}} – trace_printk examples
: {{The Linux Kernel/include|linux/instrumentation.h}}
📚 '''References''':
: [https://elinux.org/Debugging_by_printing Debugging by printing]
: {{The Linux Kernel/doc|Message logging with printk|core-api/printk-basics.html}}
: {{The Linux Kernel/doc|Dynamic debug|admin-guide/dynamic-debug-howto.html}}
: {{w|SystemTap}}
:: {{The Linux Kernel/man|1|stap}} – systemtap script translator/driver
: {{w|strace}}
:: {{The Linux Kernel/man|1|strace}} – trace system calls and signals
: {{w|LTTng}}
: {{w|ftrace}}
: {{The Linux Kernel/doc|Linux Tracing Technologies|trace}}
:: {{The Linux Kernel/doc|Tracepoint Analysis|trace/tracepoint-analysis.html}}
:: {{The Linux Kernel/doc|Function Tracer|trace/ftrace.html}} – function, latency and event tracing
::: {{The Linux Kernel/doc|Event Tracing|trace/events.html}}
:: {{The Linux Kernel/doc|Using ftrace to hook to functions|trace/ftrace-uses.html}}
:: {{The Linux Kernel/doc|Fprobe - Function entry/exit probe|trace/fprobe.html}}
:: {{The Linux Kernel/doc|Kprobes|trace/kprobes.html}}
:: {{The Linux Kernel/doc|Kprobe-based Event Tracing|trace/kprobetrace.html}}
:: {{The Linux Kernel/doc|Uprobe-tracer: Uprobe-based Event Tracing|trace/uprobetracer.html}}
:: {{The Linux Kernel/doc|Using the Linux Kernel Tracepoints|trace/tracepoints.html}}
:: {{The Linux Kernel/doc|Subsystem Trace Points: kmem|trace/events-kmem.html}}
:: {{The Linux Kernel/doc|Subsystem Trace Points: power|trace/events-power.html}}
:: {{The Linux Kernel/doc|NMI Trace Events|trace/events-nmi.html}}
:: {{The Linux Kernel/doc|In-kernel memory-mapped I/O tracing|trace/mmiotrace.html}}
:: {{The Linux Kernel/doc|Event Histograms|trace/histogram.html}}
:: {{The Linux Kernel/doc|Histogram Design Notes|trace/histogram-design.html}}
:: {{The Linux Kernel/doc|Boot-time tracing|trace/boottime-trace.html}}
:: {{The Linux Kernel/doc|Hardware Latency Detector|trace/hwlat_detector.html}}
:: {{The Linux Kernel/doc|Intel(R) Trace Hub (TH)|trace/intel_th.html}}
:: {{The Linux Kernel/doc|Lockless Ring Buffer Design|trace/ring-buffer-design.html}}
:: {{The Linux Kernel/doc|System Trace Module|trace/stm.html}}
:: {{The Linux Kernel/doc|CoreSight - ARM Hardware Trace|trace/coresight}}
'''🔧 TODO. 🚀 advanced features'''
: {{The Linux Kernel/include|linux/kmemleak.h}} – memory leak detector
: {{The Linux Kernel/id|pr_cont}} - continues a previous log message in the same line
: {{The Linux Kernel/id|print_hex_dump_bytes}}
: {{The Linux Kernel/id|print_hex_dump_debug}}
: {{The Linux Kernel/id|dump_stack}}
: {{The Linux Kernel/id|CONFIG_PRINTK_CALLER}}
: {{The Linux Kernel/id|CONFIG_DEBUG_KERNEL}}
: {{The Linux Kernel/id|CONFIG_DEBUG_INFO}}
: https://git.kernel.org/pub/scm/libs/libtrace/
📚 Further reading
: https://lore.kernel.org/linux-trace-kernel/
: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git/
== Memory debugging ==
⚙️ Internals:
: {{The Linux Kernel/source|mm/kasan}} – {{The Linux Kernel/doc|KernelAddressSANitizer|dev-tools/kasan.html}}, detects out-of-bounds and use-after-free bugs
: {{The Linux Kernel/source|mm/kfence}} – {{The Linux Kernel/doc|Kernel Electric-Fence|dev-tools/kfence.html}}, low-overhead sampling-based memory safety detector
: {{The Linux Kernel/include|linux/kmemleak.h}} – {{The Linux Kernel/doc|memory leak detector|dev-tools/kmemleak.html}}, {{The Linux Kernel/source|mm/kmemleak.c}}
: {{The Linux Kernel/include|linux/kcsan-checks.h}} – {{The Linux Kernel/doc|KCSAN - Kernel Concurrency Sanitizer|dev-tools/kcsan.html}}, {{The Linux Kernel/source|kernel/kcsan}}
: {{The Linux Kernel/source|kernel/gcov}} – {{The Linux Kernel/doc|gcov code coverage|dev-tools/gcov.html}}
== kgdb and kdb ==
⚲ Interfaces
: {{The Linux Kernel/include|linux/kgdb.h}}
: {{The Linux Kernel/include|linux/kdb.h}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/debug}} – kgdb/kdb debugger
📚 '''References'''
: {{The Linux Kernel/doc|Using kgdb, kdb and the kernel debugger internals|dev-tools/kgdb.html}}
: {{w|kdump (Linux)|kdump}}
: {{The Linux Kernel/doc|kdump|admin-guide/kdump}}
: {{The Linux Kernel/man|8|crash}} – Analyze Linux crash dump data or a live system
== {{w|eBPF}} ==
⚲ API:
: {{The Linux Kernel/man|2|bpf}} ↪ {{The Linux Kernel/source|kernel/bpf/syscall.c}}
: {{The Linux Kernel/include|linux/bpf.h}} – BPF core definitions
⚙️ Internals:
: {{The Linux Kernel/source|kernel/bpf}} – BPF subsystem core
: {{The Linux Kernel/source|net/bpf}} – BPF networking hooks
📖 References
: {{The Linux Kernel/doc|eBPF and BPF|bpf}}
📚 Further reading
: {{The Linux Kernel/man|7|bpf-helpers}}
: [https://www.brendangregg.com/ebpf.html Linux Extended BPF (eBPF) Tracing Tools]
: [https://github.com/iovisor/bpftrace bpftrace – High-level tracing language for Linux eBPF]
: [https://github.com/iovisor/bcc#tools BCC – Tools for BPF-based Linux IO analysis, networking, monitoring, and more]
:: [https://github.com/iovisor/bcc/blob/master/tools/trace_example.txt Example] of [https://github.com/iovisor/bcc/blob/master/tools/trace.py trace.py]
: {{The Linux Kernel/man|8|stapbpf}}
: [https://medium.com/@zone24x7_inc/ebpf-programming-for-linux-kernel-tracing-30364dde3fb7 eBPF Programming for Linux Kernel Tracing]
: {{The Linux Kernel/doc|lockdep - Runtime locking correctness validator|locking/lockdep-design.html}}
== Watchdogs ==
[[../Softdog Driver]]
{{The Linux Kernel/id|dev_watchdog}} – network device watchdog
The NMI watchdog lockup detectors:
⚲ API
: /proc/sys/kernel/nmi_watchdog
: /proc/sys/kernel/soft_watchdog
: /proc/sys/kernel/watchdog
: /proc/sys/kernel/watchdog_cpumask
: /proc/sys/kernel/watchdog_thresh
: /proc/sys/kernel/hardlockup_all_cpu_backtrace
: /proc/sys/kernel/hardlockup_panic
: /proc/sys/kernel/softlockup_all_cpu_backtrace
: /proc/sys/kernel/softlockup_panic
: {{The Linux Kernel/include|linux/nmi.h}}
👁️ Example
: {{The Linux Kernel/source|lib/test_lockup.c}} – test module to generate lockups
Provoke NMI watchdog without panic:
echo 0 > /proc/sys/kernel/hardlockup_panic
insmod test_lockup.ko disable_irq=1 time_secs=13
⚙️ Internals
: {{The Linux Kernel/source|kernel/watchdog.c}} – detects hard and soft lockups on a system
: {{The Linux Kernel/source|kernel/watchdog_perf.c}} – detects hard lockups on a system using perf
: {{The Linux Kernel/source|kernel/watchdog_buddy.c}} – coordinates watchdog checks across CPUs
: {{The Linux Kernel/include|linux/hung_task.h}}, {{The Linux Kernel/source|kernel/hung_task.c}} – detects tasks stuck in uninterruptible sleep
📚 References
: {{The Linux Kernel/doc|Documentation for /proc/sys/kernel/|admin-guide/sysctl/kernel.html}}
: {{The Linux Kernel/doc|Softlockup detector and hardlockup detector (aka nmi_watchdog)|admin-guide/lockup-watchdogs.html}}
: kernel parameters:
:: {{The Linux Kernel/param|nmi_watchdog|nmi_watchdog}}
:: {{The Linux Kernel/param|nowatchdog|nowatchdog%09}}
:: {{The Linux Kernel/param|nosoftlockup|nosoftlockup}}
:: {{The Linux Kernel/param|softlockup_panic|softlockup_panic}}
<hr>
==...==
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/kernel/traps.c}} – x86 exception and trap handling
: {{The Linux Kernel/include|linux/panic.h}}, {{The Linux Kernel/source|kernel/panic.c}} – kernel panic, oops and BUG handling
: {{The Linux Kernel/include|linux/coredump.h}}, {{The Linux Kernel/source|fs/coredump.c}} – {{The Linux Kernel/man|5|core}} dump generation
📖 References for debugging
: {{The Linux Kernel/doc|Ramoops oops/panic logger|admin-guide/ramoops.html}}
: {{The Linux Kernel/doc|pstore block oops/panic logger|admin-guide/pstore-blk.html}}
: {{The Linux Kernel/doc|Fault injection|fault-injection}}
: {{The Linux Kernel/doc|Bisecting a bug|admin-guide/bug-bisect.html}}
: {{The Linux Kernel/doc|Development tools for the kernel|dev-tools}}
:: {{The Linux Kernel/doc|Kernel Testing Guide|dev-tools/testing-overview.html}}
:: {{The Linux Kernel/doc|Checkpatch|dev-tools/checkpatch.html}}, {{The Linux Kernel/source|scripts/checkpatch.pl}}
:: {{The Linux Kernel/doc|Selftests|dev-tools/kselftest.html}}, {{The Linux Kernel/source|tools/testing/selftests}}
: {{The Linux Kernel/include|linux/tracepoint.h}}
: {{The Linux Kernel/doc|Tracking down and identifying problems|admin-guide/index.html#tracking-down-and-identifying-problems}}
:: {{The Linux Kernel/doc|Bug hunting|admin-guide/bug-hunting.html}}
:: ...
📚 Further reading
: {{w|Linux kernel oops}}
: {{w|kdump (Linux)}}
: https://deepwiki.com/torvalds/linux/2.4-kernel-tracing-and-profiling
: https://drgn.readthedocs.io/ – programmable debugger
: https://crash-utility.github.io/
: https://wiki.ubuntu.com/Kernel/Debugging
: [https://www.intel.com/content/www/us/en/docs/vtune-profiler/user-guide/2025-1/enabling-linux-kernel-analysis.html Intel VTune Profiler]
: [[Linux Applications Debugging Techniques]]
{{BookCat}}
5dmgqu2keb0bia3q5saq245svifvdtt
Chinese (Mandarin)/Lesson 12
0
468823
4641670
4641375
2026-06-29T11:47:39Z
一隻北極熊
3609960
4641670
wikitext
text/x-wiki
{{Chinese (Mandarin)TOC}}
{{in use}}
{{Under construction}}
= Lesson 12: Mandarin is so interesting/ 第十二课:汉语真有趣! =
=== '''繁体字/Traditional Characters''' ===
(仲文在走廊遇到了他的好友思源)
思源:嗨!仲文!你吃早飯了嗎?
仲文:早上好,思源!我吃過早飯了。
思源:根據天氣預報,這一天都會有雨。我沒辦法到操場踢毽子了,真無聊啊。
仲文:確實很無聊,不如咱們來玩斷句遊戲吧!
思源:好啊,你先來!
仲文:這幾天天天天氣不好,請根據語意斷開它吧!
思源:我看看。嗯,答案應該是“這幾天/天天/天氣不好“對吧! 【1】
仲文:答案正確,換你來考我吧。
思源:這句怎麼樣?小明明明明白白的卻裝作不明白。
仲文:答案是“小明/明明/明明白白/的/卻裝作不明白“對吧? 【2】
思源:答案正確,你真厲害!
仲文:過獎了,你也很厲害!
思源:漢語真有趣啊!我們兩個的句中都有反復出現的同一個字,可它們卻有不同的意思,還成功構成了一個完整的句子。
仲文:確實。漢語真有趣!
(上課鈴響起)
思源:上課了,我先走了。回見!
仲文:回見!
=== '''简体字/Simplified Characters''' ===
(仲文在走廊遇到了他的好友思源)
思源:嗨!仲文!你吃早饭了吗?
仲文:早上好,思源!我吃过早饭了。
思源:根据天气预报,这一天都会有雨。我没办法到操场踢毽子了,真无聊啊。
仲文:确实很无聊,不如咱们来玩断句游戏吧!
思源:好啊,你先来!
仲文:这几天天天天气不好,请语意断开它吧!
思源:我看看。嗯,答案应该是“这几天/天天/天气不好”对吧!【1】
仲文:答案正确,换你来考我吧。
思源:这句怎么样?小明明明明明白白的却装作不明白。
仲文:答案是“小明/明明/明明白白/的/却装作不明白”对吧?【2】
思源:答案正确,你真厉害!
仲文:过奖了,你也很厉害!
思源:汉语真有趣啊!我们两个的句中都有反复出现的同一个字,可它们却有不同的意思,还成功构成了一个完整的句子。
仲文:确实。汉语真有趣!
(上课铃响起)
思源:上课了,我先走了。回见!
仲文:回见!
=== 汉语拼音 / Chinese Pinyin ===
(Zhòng wén zài zǒuláng yù dàole tā de hǎoyǒu sīyuán)
sīyuán: Hāi! Zhòng wén! Nǐ chī zǎofànle ma?
Zhòng wén: Zǎoshang hǎo, sīyuán! Wǒ chīguò zǎofànle.
Sīyuán: Gēnjù tiānqì yùbào, zhè yītiān dūhuì yǒu yǔ. Wǒ méi bànfǎ dào cāochǎng tī jiànzile, zhēn wúliáo a.
Zhòng wén: Quèshí hěn wúliáo, bùrú zánmen lái wán duànjù yóuxì ba!
Sīyuán: Hǎo ya, nǐ xiān lái!
Zhòng wén: Zhè jǐ tiāntiāntiān tiānqì bù hǎo, qǐng yǔyì duàn kāi tā ba!
Sīyuán: Wǒ kàn kàn.ng , dá'àn yīnggāi shì “zhè jǐ tiān/tiān tiān/tiānqì bù hǎo” duì ba![1]
Zhòng wén: Dá'àn zhèngquè, huàn nǐ lái kǎo wǒ ba.
Sīyuán: Zhè jù zěnme yàng? Xiǎomíngmíngmíngmíngmíngbáibái de què zhuāng zuò bù míngbái.
Zhòng wén: Dá'àn shì “xiǎo míng/míng míng/míng míngbái bái/de/què zhuāng zuò bù míng bái” duì ba?[2]
Sīyuán: Dá'àn zhèngquè, nǐ zhēn lìhài!
Zhòng wén: Guòjiǎngle, nǐ yě hěn lìhài!
Sīyuán: Hànyǔ zhēn yǒuqù a! Wǒmen liǎng gè de jù zhōng dōu yǒu fǎnfù chūxiàn de tóng yīgè zì, kě tāmen què yǒu bùtóng de yìsi, hái chénggōng gòuchéngle yīgè wánzhěng de jùzi.
Zhòng wén: Quèshí. Hànyǔ zhēn yǒuqù!
(Shàngkè líng xiǎngqǐ)
sīyuán: Shàngkèle, wǒ xiān zǒule. Zàijiàn!
Zhòng wén: Zàijiàn!
=== 翻译/translate ===
(Zhongwen runs into his good friend Siyuan in the hallway.)
Siyuan: Hi, Zhongwen! Have you had breakfast?
Zhongwen: Good morning, Siyuan! Yes, I have.
Siyuan: The weather forecast says it’s going to rain all day. I won't be able to go to the sports field to play shuttlecock; it’s such a bore.
Zhongwen: It really is boring. How about we play a sentence-parsing game?
Siyuan: Sure! You go first.
Zhongwen: Here’s one: "The weather has been bad every day lately." Try breaking it down based on meaning!
Siyuan: Let me see... Hmm, the answer should be "These past few days / every day / the weather is bad," right? [1]
Zhongwen: That’s correct! Now it’s your turn to test me.
Siyuan: How about this one? "Xiao Ming clearly understood, yet pretended not to understand."
Zhongwen: The answer is "Xiao Ming / clearly / understood / yet / pretended not to understand," right? [2]
Siyuan: Correct! You’re really good at this.
Zhongwen: You’re too kind—you’re great at it too!
Siyuan: Chinese is so interesting! Both of our sentences feature the same character repeated multiple times, yet they carry different meanings and still form complete, coherent sentences.
Zhongwen: Indeed. Chinese is fascinating!
(The class bell rings.)
Siyuan: Class is starting; I’ve got to go. See you later!
Zhongwen: See you later!
=== 笔记/notes ===
=== 语法/Grammar ===
=== 作业/homework ===
{{BookCat}}
ew9qr7bk473didcfeme90y4nvfyht1e
The Linux Kernel/Processes
0
470360
4641510
4640232
2026-06-28T14:20:26Z
Conan
3188
Processes: ptrace source reference with man page
4641510
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Linux processes}}</noinclude><includeonly>== Processes ==</includeonly>
'''Process''' is a running user space program.
Kernel starts the first process '''/sbin/init''' in function {{The Linux Kernel/id|run_init_process}} using {{The Linux Kernel/id|kernel_execve}}.
Processes occupy system resources, like memory, CPU time.
System calls {{The Linux Kernel/id|sys_fork}} and {{The Linux Kernel/id|sys_execve}} are used to create new processes from user space.
The process exit with an {{The Linux Kernel/id|sys_exit}} system call.
Linux inherits from Unix its basic process management system calls (⚲ API ↪ ⚙️ implementations):
{{The Linux Kernel/man|2|fork}} ↪ {{The Linux Kernel/id|kernel_clone}} creates a new process by {{w|Prototype_pattern|duplicating}} the process invoking it.
{{The Linux Kernel/man|2|_exit}} ↪ {{The Linux Kernel/id|do_exit}} terminates the calling process "immediately". Any open file descriptors belonging to the process are closed.
{{The Linux Kernel/man|2|wait}} ↪ {{The Linux Kernel/id|kernel_waitid}} suspends the execution of the calling process until one of its children processes terminates.
Linux enhances the traditional Unix process API with its own system calls {{The Linux Kernel/man|2|clone}}.
Clone creates a child process that may share parts of its execution context with the parent.
It is often used to implement threads (though programmers will typically use a higher-level interface such as {{The Linux Kernel/man|7|pthreads}}, implemented on top of clone).
PID - {{w|Process identifier}} defined as {{The Linux Kernel/id|pid_t}} is unique sequential number.
{{The Linux Kernel/man|1|ps}} -A lists current processes.
⚲ API
: [https://man7.org/linux/man-pages/man0/unistd.h.0p.html unistd.h]
: [https://man7.org/linux/man-pages/man0/sys_types.h.0p.html sys/types.h]
: [https://man7.org/linux/man-pages/man0/sys_wait.h.0p.html sys/wait.h]
⚙️ Internals
: {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/id|pid_type}}
: {{The Linux Kernel/source|kernel/fork.c}} – process creation and cloning
:: syscalls:
:: {{The Linux Kernel/man|2|set_tid_address}} – set pointer to thread ID
:: {{The Linux Kernel/man|2|fork}} – create a child process
:: {{The Linux Kernel/man|2|vfork}} – create a child process and block parent
:: {{The Linux Kernel/man|2|clone}} – create a child process
:: {{The Linux Kernel/man|2|unshare}} – disassociate parts of the process execution context
: {{The Linux Kernel/source|kernel/sys.c}} – system and process operations
:: syscalls:
:: {{The Linux Kernel/man|2|prctl}} – operations on a process or thread
: {{The Linux Kernel/source|kernel/pid.c}} – PID allocation and management
:: syscalls:
:: {{The Linux Kernel/man|2|pidfd_open}} – obtain a file descriptor that refers to a process
:: {{The Linux Kernel/man|2|pidfd_getfd}} – obtain a duplicate of another process's file descriptor
: {{The Linux Kernel/source|kernel/exit.c}} – process termination
:: syscalls:
:: {{The Linux Kernel/man|2|exit}} – terminate the calling process
:: {{The Linux Kernel/man|2|exit_group}} – exit all threads in a process
:: {{The Linux Kernel/man|2|waitid}} – wait for process to change state
:: {{The Linux Kernel/man|2|waitpid}} – wait for process to change state
: {{The Linux Kernel/source|fs/exec.c}} – program execution (execve)
: {{The Linux Kernel/man|2|ptrace}} ↪ {{The Linux Kernel/source|kernel/ptrace.c}} – process tracing, used by {{The Linux Kernel/man|1|strace}} and debuggers
📖 References
: {{w|fork (system call)}}
: {{w|exit (system call)}}
: {{w|wait (system call)}}
: {{w|exec (system call)}}
{{BookCat}}
4mq24wlxofi0l6t04zawf6z3558it1o
User:Akásọrọ̀bíàgbà
2
471556
4641648
4461176
2026-06-29T09:07:36Z
J ansari
3036709
J ansari moved page [[User:Waliyullah Tunde]] to [[User:Akásọrọ̀bíàgbà]]: Automatically moved page while renaming the user "[[Special:CentralAuth/Waliyullah Tunde|Waliyullah Tunde]]" to "[[Special:CentralAuth/Akásọrọ̀bíàgbà|Akásọrọ̀bíàgbà]]"
4461176
wikitext
text/x-wiki
Hello, folks. I have nothing to say, actually. I just want them to stop writing my name in red. Thanks.
fswdqkoa95dlgv0cksdhmeqhdn3sdp2
U.S. Presidents/Introduction
0
474390
4641609
4490002
2026-06-29T06:30:46Z
All About World History
3610638
4641609
wikitext
text/x-wiki
[[File:Flag_of_the_President_of_the_United_States.svg|thumb|200px|Flag of the President of the United States]]
As the leader of powerful country, the President of the United States is one of the most powerful figures in the world. Being president is an enormous responsibility; the officeholder is both the country's head of state and head of government as well as and commander-in-chief of its military. The president is the chief executive, tasked to enforce the law and to protect, preserve, and defend the Constitution. As of 2025, forty-five people, all men, have had the privilege to lead the United States. The president is joined by their vice president, whose main duty is to assume office if the president is no longer able to serve, and their cabinet, a team of senior executive officers who advise and assist the president. The president's spouse and children are referred to as the First Family.
Every four years, on the Tuesday after the first Monday in November, American voters select their choice for president and vice president. The winners are inaugurated the following January 20th to a four-year term. Since 1952, no one can be elected to the presidency more than twice. To be president, one needs to be a natural-born citizen of the United States, be at least thirty-five years old, and have been a permanent resident of the United States for at least fourteen years. Most presidents held other government roles, such as state governor or member of Congress, but there are many paths to the presidency. Ready to take a look at who's made it to the top so far? Then read on!
{{Wikipedia|President of the United States}}
{{chapnav||The White House}}
{{status|100%}}
3bk2yf9onbsnhmtawfixplkovhwc7c6
4641610
4641609
2026-06-29T06:33:32Z
All About World History
3610638
4641610
wikitext
text/x-wiki
[[File:Flag_of_the_President_of_the_United_States.svg|thumb|200px|Flag of the President of the United States]]
As the leader of powerful country, the '''President of the United States''' is one of the most powerful figures in the world. Being president is an enormous responsibility; the officeholder is both the country's head of state and head of government as well as and commander-in-chief of its military. The president is the chief executive, tasked to enforce the law and to protect, preserve, and defend the Constitution. As of 2025, forty-five people, all men, have had the privilege to lead the United States. The president is joined by their vice president, whose main duty is to assume office if the president is no longer able to serve, and their cabinet, a team of senior executive officers who advise and assist the president. The president's spouse and children are referred to as the First Family.
Every four years, on the Tuesday after the first Monday in November, American voters select their choice for president and vice president. The winners are inaugurated the following January 20th to a four-year term. Since 1952, no one can be elected to the presidency more than twice. To be president, one needs to be a natural-born citizen of the United States, be at least thirty-five years old, and have been a permanent resident of the United States for at least fourteen years. Most presidents held other government roles, such as state governor or member of Congress, but there are many paths to the presidency. Ready to take a look at who's made it to the top so far? Then read on!
{{Wikipedia|President of the United States}}
{{chapnav||The White House}}
{{status|100%}}
t6kfc00yjb0u1ncb6iquobu0nbml3u0
4641652
4641610
2026-06-29T09:19:01Z
Xania
40302
tidied up, removed some cringey, jingoistic language
4641652
wikitext
text/x-wiki
[[File:Flag_of_the_President_of_the_United_States.svg|thumb|200px|Flag of the President of the United States]]
The '''President of the United States''' is one of the most powerful figures in the world. Being president is an enormous responsibility; the officeholder is both the country's head of state and head of government as well as commander-in-chief of its military. The president is the chief executive, tasked to enforce the law and to protect, preserve, and defend the Constitution. As of 2025, forty-five people, all men, have led the United States. The president is joined by their vice president, whose main duty is to assume office if the president is no longer able to serve, and their cabinet, a team of senior executive officers who advise and assist the president. The president's spouse and children are referred to as the First Family.
Every four years, on the Tuesday after the first Monday in November, American voters select their choice for president and vice president. The winners are inaugurated the following January 20th to a four-year term. Since 1952, no one can be elected to the presidency more than twice. To be president, one needs to be a natural-born citizen of the United States, be at least thirty-five years old, and have been a permanent resident of the United States for at least fourteen years. Most presidents held other government roles, such as state governor or member of Congress, but there are many paths to the presidency. Ready to take a look at who's made it to the top so far? Then read on!
{{Wikipedia|President of the United States}}
{{chapnav||The White House}}
{{status|100%}}
5ik895u3b87w1f924ig221k9sscth1x
The Linux Kernel/Multitasking/CPU
0
475313
4641560
4641429
2026-06-28T17:48:59Z
Conan
3188
Multitasking/CPU: cache line alignment macros, __read_mostly, __ro_after_init, CACHE_HOT
4641560
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Interrupts and CPU}}</noinclude>
== Interrupts ==
An {{w|interrupt}} is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention.
An interrupt alerts the processor to a high-priority condition requiring the interruption of the current code the processor is executing.
The processor responds by suspending its current activities, saving its state, and executing a function called an ''interrupt handler'' (or an interrupt service routine, ISR) to deal with the event.
This interruption is temporary, and, after the interrupt handler finishes, the processor resumes normal activities.
There are two types of interrupts: hardware interrupts and software interrupts.
Hardware interrupts are used by devices to communicate that they require attention from the operating system.
For example, pressing a key on the keyboard or moving the mouse triggers hardware interrupts that cause the processor to read the keystroke or mouse position.
Unlike the software type, hardware interrupts are asynchronous and can occur in the middle of instruction execution, requiring additional care in programming.
The act of initiating a hardware interrupt is referred to as an ''interrupt request'' - IRQ ↪ {{w|Interrupt descriptor table|IDT}} ↪ {{The Linux Kernel/id|common_interrupt}} on x86.
A software interrupt is caused either by an exceptional condition in the processor itself, or a special instruction in the instruction set which causes an interrupt when it is executed.
The former is often called a ''{{w|Trap (computing)|trap}}'' (⚙️ {{The Linux Kernel/id|do_trap}}) or ''exception'' and is used for errors or events occurring during program execution that are exceptional enough that they cannot be handled within the program itself.
For example, if the processor's arithmetic logic unit is commanded to divide a number by zero, this impossible demand will cause a ''divide-by-zero exception'' (⚙️ {{The Linux Kernel/id|X86_TRAP_DE}}), perhaps causing the computer to abandon the calculation or display an error message.
Software interrupt instructions function similarly to subroutine calls and are used for a variety of purposes, such as to request services from low-level system software such as device drivers.
For example, computers often use software interrupt instructions to communicate with the disk controller to request data be read or written to the disk.
Each interrupt has its own interrupt handler. The number of hardware interrupts is limited by the number of interrupt request (IRQ) lines to the processor, but there may be hundreds of different software interrupts.
⚲ API
: /proc/interrupts
: {{The Linux Kernel/man|1|irqtop}} – utility to display kernel interrupt information
: [https://github.com/Irqbalance/irqbalance irqbalance] – distribute hardware interrupts across processors on a multiprocessor system
: There are many ways to request ISR, two of them
: {{The Linux Kernel/id|devm_request_threaded_irq}} – preferable function to allocate an interrupt line for a managed device with a threaded ISR
: {{The Linux Kernel/id|request_irq}}, {{The Linux Kernel/id|free_irq}} – old and common functions to add and remove a handler for an interrupt line
: {{The Linux Kernel/include|linux/interrupt.h}} – main interrupt support header
:: {{The Linux Kernel/id|irqaction}} – contains handler functions
: {{The Linux Kernel/include|linux/irq.h}}
:: {{The Linux Kernel/id|irq_data}}
: {{The Linux Kernel/include|linux/irqflags.h}}
:: {{The Linux Kernel/id|irqs_disabled}}
:: {{The Linux Kernel/id|local_irq_save}} ...
:: {{The Linux Kernel/id|local_irq_disable}} ...
: {{The Linux Kernel/include|linux/irqdesc.h}}
:: {{The Linux Kernel/id|irq_desc}}
: {{The Linux Kernel/include|linux/irqdomain.h}}
:: {{The Linux Kernel/id|irq_domain}} – hardware interrupt number translation object
:: {{The Linux Kernel/id|irq_domain_get_irq_data}}
: {{The Linux Kernel/include|linux/msi.h}} – {{w|Message Signaled Interrupts}}
:: {{The Linux Kernel/id|msi_desc}}
: Structure of structures:
:: {{The Linux Kernel/id|irq_desc}} is container of
::: {{The Linux Kernel/id|irq_data}}
:::: irq – interrupt number
::: {{The Linux Kernel/id|irq_common_data}}
::: list of {{The Linux Kernel/id|irqaction}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/irq/settings.h}} – IRQ descriptor status flags
: {{The Linux Kernel/source|kernel/irq}} – generic IRQ handling
:: {{The Linux Kernel/source|kernel/irq/internals.h}} – IRQ subsystem internal functions
: ls /sys/kernel/debug/irq/domains/
:: {{The Linux Kernel/id|x86_vector_domain}}, {{The Linux Kernel/id|x86_vector_domain_ops}}
: {{The Linux Kernel/id|irq_chip}}
: {{The Linux Kernel/id|load_idt}} – load Interrupt Descriptor Table
: {{The Linux Kernel/source|arch/x86/include/asm/idtentry.h}} – interrupt entry/exit definitions
: {{The Linux Kernel/source|arch/x86/include/asm/hw_irq.h}} – x86 hardware IRQ definitions
:: {{The Linux Kernel/id|irq_entries_start}} – hardware IRQ entry stubs
: {{The Linux Kernel/source|arch/x86/kernel/irq.c}} – x86 interrupt handling
:: {{The Linux Kernel/id|common_interrupt}} – handles all normal device IRQs on x86
📖 References
: {{The Linux Kernel/doc|IRQs|core-api/irq}}
:: {{The Linux Kernel/doc|The irq_domain interrupt number mapping library|core-api/irq/irq-domain.html}}
: {{The Linux Kernel/doc|Linux generic IRQ handling|core-api/genericirq.html}}
: {{The Linux Kernel/doc|Message Signaled Interrupts: The MSI Driver Guide|PCI/msi-howto.html}}
: {{The Linux Kernel/doc|Lock types and their rules|locking/locktypes.html}}
: {{The Linux Kernel/doc|Hard IRQ Context|kernel-hacking/locking.html#hard-irq-context}}
: [https://0xax.gitbooks.io/linux-insides/content/Interrupts/ Interrupts]
👁 Examples
: {{The Linux Kernel/id|dummy_irq_chip}} – dummy interrupt chip implementation
: {{The Linux Kernel/source|lib/locking-selftest.c}} – locking correctness self-tests
=== IRQ affinity ===
⚲ API
: /proc/irq/default_smp_affinity
: /proc/irq/*/smp_affinity and /proc/irq/*/smp_affinity_list
Common types and functions:
: struct {{The Linux Kernel/id|irq_affinity}} – description for automatic irq affinity assignments, see {{The Linux Kernel/id|devm_platform_get_irqs_affinity}}
: struct {{The Linux Kernel/id|irq_affinity_desc}} – interrupt affinity descriptor, see {{The Linux Kernel/id|irq_update_affinity_desc}}, {{The Linux Kernel/id|irq_create_affinity_masks}}
: {{The Linux Kernel/id|irq_set_affinity}}
: {{The Linux Kernel/id|irq_get_affinity_mask}}
: {{The Linux Kernel/id|irq_can_set_affinity}}
: {{The Linux Kernel/id|irq_set_affinity_hint}}
: {{The Linux Kernel/id|irqd_affinity_is_managed}}
: {{The Linux Kernel/id|irq_data_get_affinity_mask}}
: {{The Linux Kernel/id|irq_data_get_effective_affinity_mask}}
: {{The Linux Kernel/id|irq_data_update_effective_affinity}}
: {{The Linux Kernel/id|irq_set_affinity_notifier}}
: {{The Linux Kernel/id|irq_affinity_notify}}
: {{The Linux Kernel/id|irq_chip_set_affinity_parent}}
: {{The Linux Kernel/id|irq_set_vcpu_affinity}}
🛠️ Utilities
: [https://man.archlinux.org/man/extra/irqbalance/irqbalance.1.en irqbalance] – distributes hardware interrupts across CPUs
📖 References
: {{The Linux Kernel/doc|SMP IRQ affinity|core-api/irq/irq-affinity.html}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cpu-partitioning/start#irq_affinity IRQ affinity, LF]
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=managed_irq managed_irq kernel parameter], [https://lore.kernel.org/lkml/?q=managed_irq @LKML]
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=irqaffinity= irqaffinity kernel parameter], [https://lore.kernel.org/lkml/?q=irqaffinity @LKML]
=== Non-maskable interrupts ===
⚲ API
: {{The Linux Kernel/include|linux/nmi.h}}
:: {{The Linux Kernel/id|in_nmi}}
:: {{The Linux Kernel/id|touch_nmi_watchdog}}
:: ...
: {{The Linux Kernel/include|trace/events/nmi.h}}
: {{The Linux Kernel/source|arch/x86/include/asm/nmi.h}} – x86 NMI handler registration
:: {{The Linux Kernel/id|register_nmi_handler}}
:: {{The Linux Kernel/id|unregister_nmi_handler}}
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/kernel/nmi.c}} – x86 NMI handler
: {{The Linux Kernel/source|arch/x86/kernel/nmi_selftest.c}} – NMI IPI self-tests
📖 References
: {{The Linux Kernel/doc|NMI Trace Events|trace/events-nmi.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/Interrupts/linux-interrupts-6.html Non-maskable interrupt handler] (NMI)
=== ... ===
📚 Further reading about interrupts
: IDT – {{w|Interrupt descriptor table}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/ticklesskernel Tickless (Full dynticks)] reduces timer interrupts overhead, {{The Linux Kernel/id|CONFIG_NO_HZ_FULL}}
: [https://www.felixcloutier.com/x86/lgdt:lidt LGDT/LIDT – Load Global/Interrupt Descriptor Table Register] asm instruction
== Deferred works ==
=== Scheduler context ===
==== kthread work ====
This framework simplifies the use of kernel kthreads.
A {{The Linux Kernel/id|kthread_work}} item can be queued with {{The Linux Kernel/id|kthread_queue_work}} and flushed using {{The Linux Kernel/id|kthread_flush_work}}.
All queued kthread_work items are processed by a dedicated kernel thread executing the {{The Linux Kernel/id|kthread_worker_fn}} function.
⚲ API
: {{The Linux Kernel/id|kthread_work}} – contains {{The Linux Kernel/id|kthread_work_func_t}} to execute
:: {{The Linux Kernel/id|kthread_init_work}}
:: {{The Linux Kernel/id|kthread_flush_work}}
: {{The Linux Kernel/id|kthread_worker}} – links a kthread_work and a task
:: {{The Linux Kernel/id|kthread_run_worker}} – creates and wakes a kthread worker
::: {{The Linux Kernel/id|kthread_create_worker}}
::: {{The Linux Kernel/id|kthread_flush_worker}}
:: {{The Linux Kernel/id|kthread_destroy_worker}}
: {{The Linux Kernel/id|kthread_queue_work}} – queues a kthread_work on a kthread_worker
⚙️ Internals
: {{The Linux Kernel/id|__kthread_create_worker_on_node}}
: {{The Linux Kernel/id|kthread_worker_fn}} – executes work's function
👁 Example usages
: {{The Linux Kernel/id|watchdog_kworker}}, {{The Linux Kernel/id|pwq_release_worker}}, {{The Linux Kernel/id|pump_messages}}
==== Threaded IRQ ====
⚲ API
{{The Linux Kernel/id|devm_request_threaded_irq}}, {{The Linux Kernel/id|request_threaded_irq}}
ISR should return IRQ_WAKE_THREAD to run thread function
⚙️ Internals
: {{The Linux Kernel/id|setup_irq_thread}}, {{The Linux Kernel/id|irq_thread}}
: {{The Linux Kernel/source|kernel/irq/manage.c}} – IRQ request, free and affinity management
📖 References
: {{The Linux Kernel/doc|request_threaded_irq|core-api/genericirq.html#c.request_threaded_irq}}
==== Work and workqueue ====
Generic async execution with shared worker pool.
⚲ API
: {{The Linux Kernel/id|PF_WQ_WORKER}} – workqueue worker process flag
: {{The Linux Kernel/include|linux/workqueue.h}}, {{The Linux Kernel/include|linux/workqueue_types.h}}
: {{The Linux Kernel/id|work_struct}}, {{The Linux Kernel/id|INIT_WORK}}, {{The Linux Kernel/id|schedule_work}},
: {{The Linux Kernel/id|delayed_work}}, {{The Linux Kernel/id|INIT_DELAYED_WORK}}, {{The Linux_Kernel/id|schedule_delayed_work}}, {{The Linux Kernel/id|cancel_delayed_work_sync}}
: {{The Linux Kernel/id|workqueue_struct}}
:: {{The Linux Kernel/id|alloc_workqueue}}
:: {{The Linux Kernel/id|destroy_workqueue}}
: {{The Linux Kernel/id|queue_work}} – queues work on a workqueue
: {{The Linux Kernel/id|show_all_workqueues}}
:: {{The Linux Kernel/id|show_one_workqueue}}
: {{The Linux Kernel/id|system_power_efficient_wq}} ...
👁 Example usage {{The Linux Kernel/source|samples/ftrace/sample-trace-array.c}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/workqueue.c}} – generic async execution with shared worker pool
:: {{The Linux Kernel/id|workqueue_init}}
::: {{The Linux Kernel/id|create_worker}}
:::: {{The Linux Kernel/id|worker_thread}}
::::: {{The Linux Kernel/id|process_one_work}}
:: {{The Linux Kernel/id|format_worker_id}} – names kworker kthreads
:: {{The Linux Kernel/id|pool_workqueue}}
::: {{The Linux Kernel/id|worker_pool}}
📖 References
: {{The Linux Kernel/doc|Concurrency Managed Workqueue|core-api/workqueue.html}}
=== Interrupt context ===
: {{The Linux Kernel/include|linux/irq_work.h}} – framework for enqueueing and running callbacks from hardirq context
:: {{The Linux Kernel/source|samples/trace_printk/trace-printk.c}}
==== Timers ====
===== softirq timer =====
This timer is a softirq for periodical tasks with jiffies resolution
⚲ API
: {{The Linux Kernel/include|linux/timer.h}}
: {{The Linux Kernel/id|timer_list}}, {{The Linux Kernel/id|DEFINE_TIMER}}, {{The Linux Kernel/id|timer_setup}}
: {{The Linux Kernel/id|mod_timer}} — sets expiration time in jiffies.
: {{The Linux Kernel/id|del_timer}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/timer.c}} – kernel internal timers
:: {{The Linux Kernel/id|timer_bases}}
👁 Examples
: {{The Linux Kernel/id|input_enable_softrepeat}} and {{The Linux Kernel/id|input_start_autorepeat}}
📚 References
: {{The Linux Kernel/doc|Time and timer routines|driver-api/basics.html#time-and-timer-routines}}
:: {{The Linux Kernel/doc|mod_timer_pending ... |driver-api/basics.html#c.mod_timer_pending}}
===== High-resolution timer =====
⚲ API
: /proc/timer_list
: /proc/sys/kernel/timer_migration
: {{The Linux Kernel/include|linux/hrtimer_defs.h}}
: {{The Linux Kernel/include|linux/hrtimer.h}}
: {{The Linux Kernel/id|hrtimer}}, hrtimer.function — callback
: {{The Linux Kernel/id|hrtimer_init}}
: {{The Linux Kernel/id|hrtimer_setup}}
: {{The Linux Kernel/id|hrtimer_start}} — starts a timer with nanosecond resolution
: {{The Linux Kernel/id|hrtimer_cancel}}
👁 Examples {{The Linux Kernel/id|alarm_init}}, {{The Linux Kernel/id|watchdog_enable}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_HIGH_RES_TIMERS}}
: {{The Linux Kernel/source|kernel/time/tick-internal.h}} – tick and timer internal definitions
:: {{The Linux Kernel/id|hrtimer_bases}}
: {{The Linux Kernel/source|kernel/time/hrtimer.c}} – high-resolution timer implementation
: {{The Linux Kernel/source|kernel/time/itimer.c}} – interval timers
: {{The Linux Kernel/source|kernel/time/timer_list.c}} – /proc/timer_list debugfs
📚 HR timers references
: {{The Linux Kernel/doc|High-resolution timers|driver-api/basics.html#high-resolution-timers}}
: {{The Linux Kernel/doc|hrtimers - subsystem for high-resolution kernel timers|timers/hrtimers.html}}
: {{The Linux Kernel/doc|high resolution timers and dynamic ticks design notes|timers/highres.html}}
===== ... =====
📚 Timers references
: {{The Linux Kernel/doc|Timers|timers}}
: [https://lwn.net/Articles/913568/ Better CPU selection for timer expiration]
==== Tasklet ====
tasklet is a softirq, for time critical operations
⚲ API is deprecated in favor of threaded IRQs: {{The Linux Kernel/id|devm_request_threaded_irq}}
: {{The Linux Kernel/id|tasklet_struct}}, {{The Linux Kernel/id|tasklet_init}}, {{The Linux Kernel/id|tasklet_schedule}}
⚙️ Internals: {{The Linux Kernel/id|tasklet_action_common}} HI_SOFTIRQ, TASKLET_SOFTIRQ
==== Softirq ====
softirq is internal system facility and should not be used directly.
Use tasklet or threaded IRQs
⚲ API
: {{The Linux Kernel/include|linux/interrupt.h}}
: cat /proc/softirqs
: {{The Linux Kernel/id|open_softirq}} registers {{The Linux Kernel/id|softirq_action}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/softirq.c}} – software interrupt handling
📖 References
: [https://0xax.gitbooks.io/linux-insides/content/Interrupts/linux-interrupts-9.html Introduction to deferred interrupts (Softirq, Tasklets and Workqueues)]
: [https://0xax.gitbooks.io/linux-insides/content/Timers/ Timers and time management]
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/deferred_work.html Deferred work, linux-kernel-labs]
: [https://www.oreilly.com/library/view/linux-device-drivers/0596005903/ch07.html Chapter 7. Time, Delays, and Deferred Work]
==CPU specific==
🖱️ GUI
: [https://manpages.ubuntu.com/manpages/kinetic/en/man8/tuna.8.html tuna] – program for tuning running processes
⚲ API
: cat /proc/cpuinfo
: /sys/devices/system/cpu/
: /sys/devices/system/node/
: /sys/cpu/
: /sys/fs/cgroup/cpu/
: grep -i cpu /proc/self/status
: [https://manpages.ubuntu.com/manpages/jammy/man1/rdmsr.1.html rdmsr] – tool for reading CPU machine specific registers (MSR)
: {{The Linux Kernel/man|1|lscpu}} – display information about the CPU architecture
: {{The Linux Kernel/include|linux/arch_topology.h}} – arch specific cpu topology information
: {{The Linux Kernel/include|linux/cpu.h}} – generic cpu definition
: {{The Linux Kernel/include|linux/cpu_cooling.h}}
: {{The Linux Kernel/include|linux/cpu_pm.h}}
: {{The Linux Kernel/include|linux/cpufeature.h}}
: {{The Linux Kernel/source|arch/x86/include/asm/cpufeature.h}} – x86 CPU feature detection
: {{The Linux Kernel/include|linux/peci-cpu.h}}
: {{The Linux Kernel/include|linux/sched/cputime.h}} – cputime accounting APIs
: {{The Linux Kernel/include|linux/clk.h}} – interfaces for managing hardware clocks in device drivers
⚙️ Internals
: {{The Linux Kernel/source|drivers/base/cpu.c}} – CPU driver model subsystem
:: {{The Linux Kernel/id|cpu_dev_init}}
=== Cache ===
: {{The Linux Kernel/include|linux/cacheflush.h}}
:: {{The Linux Kernel/source|arch/x86/include/asm/cacheflush.h}}: {{The Linux Kernel/id|clflush_cache_range}}
: {{The Linux Kernel/include|linux/cache.h}} – cache line alignment macros
:: {{The Linux Kernel/id|____cacheline_aligned}} – align to cache line boundary to avoid false sharing
:: {{The Linux Kernel/id|__cacheline_aligned}} – same, plus place in .data..cacheline_aligned section
:: {{The Linux Kernel/id|____cacheline_aligned_in_smp}} – same, but no-op on uniprocessor builds
:: {{The Linux Kernel/id|__read_mostly}} – place in a cache-friendly section for rarely written data
:: {{The Linux Kernel/id|__ro_after_init}} – writable during init, read-only after boot (security hardening)
:: {{The Linux Kernel/id|DEFINE_PER_CPU_CACHE_HOT}} – per-CPU variable in .data..hot section, used for {{The Linux Kernel/id|current_task}}, {{The Linux Kernel/id|__preempt_count}}
:: {{The Linux Kernel/id|L1_CACHE_BYTES}}, {{The Linux Kernel/id|SMP_CACHE_BYTES}} – 64 bytes typically
:: {{The Linux Kernel/source|arch/x86/include/asm/cache.h}} – x86 cache line size definitions
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/pat/set_memory.c}} – page attribute table memory type control
: {{The Linux Kernel/source|arch/x86/kernel/cpu/mtrr/}} – memory type range register driver
📚 Further reading
: MTRR – {{w|Memory type range register}}
: {{w|CPU cache}}
=== {{w|Symmetric_multiprocessing|SMP}} ===
This chapter is about multiprocessing and {{w|Multi-core processor|multi-core}} aspects of Linux kernel.
Key concepts and features of Linux SMP include:
* Symmetry: In an SMP system, all processors are considered the same without hardware hierarchy in contradiction to use of {{w|coprocessor}}s.
* Load balancing: The Linux kernel employs load balancing mechanisms to distribute tasks evenly among available CPU cores. This prevents any one core from becoming overwhelmed while others remain underutilized.
* Parallelism: SMP enables parallel processing, where multiple threads or processes can execute simultaneously on different CPU cores. This can significantly improve the execution speed of applications that are designed to take advantage of multiple threads.
* Thread scheduling: The Linux kernel scheduler is responsible for determining which threads or processes run on which CPU cores and for how long. It aims to optimize performance by minimizing contention and maximizing CPU utilization.
* Shared memory: In an SMP system, all CPU cores typically share the same physical memory space. This allows processes and threads running on different cores to communicate and share data more efficiently.
* NUMA – {{w|Non-Uniform Memory Access}}: In larger SMP systems, memory access times might not be uniform due to the physical arrangement of memory banks and processors. Linux has mechanisms to handle NUMA architectures efficiently, allowing processes to be scheduled on CPUs closer to their associated memory.
* Cache coherency: SMP systems require mechanisms to ensure that all CPU cores have consistent views of memory. Cache coherency protocols ensure that changes made to shared memory locations are correctly propagated to all cores.
* Scalability: SMP systems can be scaled up to include more CPU cores, enhancing the overall computing power of the system. However, as the number of cores increases, challenges related to memory access, contention, and communication between cores may arise.
* Kernel and user space: Linux applications running in user space can take advantage of SMP without needing to be aware of the underlying hardware details. The kernel handles the management of CPU cores and resource allocation.
⚲ API
: <code>ps -PLe</code> – lists threads with processor that the thread last executed on (the third column PSR).
: {{The Linux Kernel/man|2|getcpu}} – determine CPU and NUMA node on which the calling thread is running
: {{The Linux Kernel/man|8|chcpu}} – configure CPUs
: {{The Linux Kernel/man|3|CPU_SET}} – macros for manipulating CPU sets
: {{The Linux Kernel/include|linux/smp.h}}
:: The most commonly used functions:
:: {{The Linux Kernel/id|crash_smp_send_stop}} – halts all CPUs except the calling one in a crash context
:: {{The Linux Kernel/id|get_cpu}} – disables preemption and returns the current processor ID
:: {{The Linux Kernel/id|on_each_cpu}} – runs a given function on all CPUs, possibly with synchronization
:: {{The Linux Kernel/id|on_each_cpu_cond_mask}} – conditionally runs a function on selected CPUs
:: {{The Linux Kernel/id|on_each_cpu_mask}} – executes a function on a specified set of CPUs
:: {{The Linux Kernel/id|panic_smp_self_stop}} – stops the local CPU during a panic while ensuring others halt
:: {{The Linux Kernel/id|put_cpu}} – re-enables preemption after a previous get_cpu call
:: {{The Linux Kernel/id|raw_smp_processor_id}} – returns the current CPU ID without preemption safety
:: {{The Linux Kernel/id|setup_max_cpus}} – sets up the maximum number of CPUs to be brought online
:: {{The Linux Kernel/id|smp_call_func_t}} – typedef for the function signature used in SMP function calls
:: {{The Linux Kernel/id|smp_call_function}} – invokes a function on all other CPUs via IPI
::: {{The Linux Kernel/id|smp_call_function_many}} – sends a function call to a specified set of CPUs via IPI
:: {{The Linux Kernel/id|smp_call_function_any}} – runs a function on any available CPU in a given mask
:: {{The Linux Kernel/id|smp_call_function_single}} – sends a function to execute on a single target CPU via IPI
:: {{The Linux Kernel/id|smp_call_function_single_async}} – queues a function to run asynchronously on one CPU
:: {{The Linux Kernel/id|smp_call_on_cpu}} – executes a function on a specific CPU and waits for the result
:: {{The Linux Kernel/id|smp_init}} – initializes core SMP structures and state during boot
:: {{The Linux Kernel/id|smp_prepare_boot_cpu}} – prepares the boot CPU during early SMP initialization
:: {{The Linux Kernel/id|smp_prepare_cpus}} – prepares all CPUs for booting before secondary CPUs are started
:: {{The Linux Kernel/id|smp_processor_id}} – returns the ID of the current CPU with preemption checks
:: {{The Linux Kernel/id|smp_send_reschedule}} – sends a reschedule IPI to a target CPU
:: {{The Linux Kernel/id|smp_send_stop}} – stops all other CPUs in response to critical events
:: {{The Linux Kernel/id|wake_up_all_idle_cpus}} – wakes all idle CPUs to ensure prompt task execution
: {{The Linux Kernel/include|linux/cpu.h}}
: {{The Linux Kernel/include|linux/group_cpus.h}}: {{The Linux Kernel/id|group_cpus_evenly}} – groups all CPUs evenly per NUMA/CPU locality
: {{The Linux Kernel/include|asm-generic/percpu.h}}
: {{The Linux Kernel/include|linux/percpu-defs.h}} – basic definitions for percpu areas
:: {{The Linux Kernel/id|this_cpu_ptr}}
: {{The Linux Kernel/include|linux/percpu.h}}
: {{The Linux Kernel/include|linux/percpu-refcount.h}}
: {{The Linux Kernel/include|linux/percpu-rwsem.h}}
: {{The Linux Kernel/include|linux/preempt.h}}
:: {{The Linux Kernel/id|migrate_disable}}, {{The Linux Kernel/id|migrate_enable}}
: /sys/bus/cpu
: [[#per_CPU_local_lock|per CPU local_lock]]
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/source|arch/x86/include/asm/topology.h}} – x86 NUMA and CPU topology
: See also [[../../Memory#NUMA|NUMA memory section]]
⚙️ Internals
: {{The Linux Kernel/id|boot_cpu_init}} activates the first CPU
: {{The Linux Kernel/id|smp_prepare_cpus}} initializes rest CPUs during boot
: {{The Linux Kernel/id|cpu_number}}
: {{The Linux Kernel/id|CONFIG_SMP}}
:: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/include|trace/events/percpu.h}}
: IPI – {{w|Inter-processor interrupt}}
:: {{The Linux Kernel/include|trace/events/ipi.h}}
:: {{The Linux Kernel/file|kernel/irq/ipi.c}} – inter-processor interrupt helpers
:: {{The Linux Kernel/id|ipi_send_single}}, {{The Linux Kernel/id|ipi_send_mask}} ...
:: {{The Linux Kernel/file|drivers/base/cpu.c}} – CPU driver model subsystem support
:: {{The Linux Kernel/file|kernel/cpu.c}} – CPU hotplug state machine
: smpboot
:: {{The Linux Kernel/include|linux/smpboot.h}}
:: {{The Linux Kernel/source|kernel/smpboot.c}} – common SMP CPU bringup/teardown
:: {{The Linux Kernel/source|arch/x86/kernel/smpboot.c}} – x86 SMP booting
: {{The Linux Kernel/source|lib/group_cpus.c}} – distribute CPUs evenly across groups
🛠️ Utilities
: [https://man.archlinux.org/man/extra/irqbalance/irqbalance.1.en irqbalance] – distributes hardware interrupts across CPUs
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
📖 References
: {{The Linux Kernel/doc|Per-CPU Data|kernel-hacking/locking.html#per-cpu-data}}
: {{The Linux Kernel/doc|How CPU topology info is exported via sysfs|admin-guide/cputopology.html}}
📚 Further reading
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/customizing-tuned-profiles_monitoring-and-managing-system-status-and-performance#functionalities-of-the-scheduler-tuned-plug-in_customizing-tuned-profiles Functionalities of the scheduler TuneD plugin]
: [https://man.archlinux.org/man/tuned-adm.8 tuned-adm] – command line tool for switching between different tuning profiles
==== CPU affinity ====
Affinity refers to assigning a process or thread to specific CPU cores.
This helps control which CPUs execute tasks, potentially improving performance by reducing data movement between cores.
It can be managed using system calls or commands.
Affinity can be represented as CPU bitmask: {{The Linux Kernel/id|cpumask_t}} or CPU affinity list: {{The Linux Kernel/id|cpulist_parse}}.
⚲ API
: {{The Linux Kernel/man|1|taskset}} – set or retrieve a process's CPU affinity
: grep Cpus_allowed /proc/self/status
: {{The Linux Kernel/man|2|sched_setaffinity}} {{The Linux Kernel/man|2|sched_getaffinity}} – set and get a thread's CPU affinity mask
:: ↪ {{The Linux Kernel/id|sched_setaffinity}}
: {{The Linux Kernel/id|set_cpus_allowed_ptr}} – common kernel function to change a task's affinity mask
: {{The Linux Kernel/include|linux/cpu_rmap.h}} – CPU affinity reverse-map support
: {{The Linux Kernel/include|linux/cpumask_types.h}}
:: struct cpumask, {{The Linux Kernel/id|cpumask_t}} – CPUs bitmap, can be very big
:: {{The Linux Kernel/id|cpumask_var_t}} – type for local cpumask variable, see {{The Linux Kernel/id|alloc_cpumask_var}}, {{The Linux Kernel/id|free_cpumask_var}}.
: {{The Linux Kernel/include|linux/cpumask.h}} – Cpumasks provide a bitmap suitable for representing the set of CPU's in a system, one bit position per CPU number
:: {{The Linux Kernel/id|for_each_possible_cpu}}
:: {{The Linux Kernel/id|num_online_cpus}}
:: {{The Linux Kernel/id|cpumask_set_cpu}}
:: {{The Linux Kernel/id|cpumask_test_cpu}}
:: {{The Linux Kernel/id|for_each_cpu}}
⚙️ Internals
: {{The Linux Kernel/id|cpus_mask}} – affinity of {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/id|cpus_allowed}} – affinity of {{The Linux Kernel/id|cpuset}}
📚 Further reading
: {{w|Processor affinity}}
: {{w|Affinity mask}}
==== CPU hotplug ====
CPU hotplugging in Linux refers to the ability to dynamically add or remove CPUs from the system without needing a reboot.
This feature is crucial in environments requiring high availability and resource flexibility, such as data centers, virtualized systems, and systems that use power management aggressively.
🗝️ Acronyms
: BP – Bootstrap Processor
: AP – Application Processor
⚲ API
: /sys/devices/system/cpu/cpu*/online
: /sys/devices/system/cpu/cpu*/hotplug/
: {{The Linux Kernel/include|linux/cpu.h}}
:: {{The Linux Kernel/id|add_cpu}} ...
: {{The Linux Kernel/include|linux/cpuhotplug.h}}
:: {{The Linux Kernel/id|cpuhp_state}} – CPU hotplug states
:: {{The Linux Kernel/id|cpuhp_setup_state}} ... – setups hotplug state callbacks
::: {{The Linux Kernel/id|cpuhp_setup_state_multi}}
::: {{The Linux Kernel/id|cpuhp_setup_state_nocalls}}
: {{The Linux Kernel/include|linux/cpuhplock.h}} – CPU hotplug locking
:: {{The Linux Kernel/id|cpus_read_lock}} ...
:: {{The Linux Kernel/id|remove_cpu}} ...
⚙️ Internals
: {{The Linux Kernel/source|kernel/cpu.c}} – CPU hotplug state machine
:: {{The Linux Kernel/id|cpuhp_state}} – from CPUHP_OFFLINE to CPUHP_AP_ACTIVE and CPUHP_ONLINE.
:: {{The Linux Kernel/id|cpuhp_hp_states}}
:: {{The Linux Kernel/id|boot_cpu_hotplug_init}}
:: {{The Linux Kernel/id|cpuhp_threads_init}}
:: ... {{The Linux Kernel/id|cpuhp_invoke_callback_range}} ...
: {{The Linux Kernel/source|kernel/irq/cpuhotplug.c}} – IRQ migration on CPU hotunplug
: {{The Linux Kernel/source|drivers/base/cpu.c}} – CPU subsystem support
:: {{The Linux Kernel/id|cpu_dev_init}}
::: ... {{The Linux Kernel/id|cpu_subsys_online}}
: {{The Linux Kernel/include|trace/events/cpuhp.h}}
: {{The Linux Kernel/include|linux/cpuhplock.h}}
👁️ Examples
: {{The Linux Kernel/id|torture_onoff}}
: {{The Linux Kernel/source|tools/testing/selftests/sched_ext/hotplug.c}} – sched_ext CPU hotplug test
📖 References
: {{The Linux Kernel/doc|CPU hotplug in the Kernel|core-api/cpu_hotplug.html}}
:: {{The Linux Kernel/doc|Introduction|core-api/cpu_hotplug.html#introduction}}
:: {{The Linux Kernel/doc|Command Line Switches|core-api/cpu_hotplug.html#command-line-switches}}
:: {{The Linux Kernel/doc|CPU maps|core-api/cpu_hotplug.html#cpu-maps}}
:: {{The Linux Kernel/doc|Using CPU hotplug|core-api/cpu_hotplug.html#using-cpu-hotplug}}
:: {{The Linux Kernel/doc|The CPU hotplug coordination|core-api/cpu_hotplug.html#the-cpu-hotplug-coordination}}
:: {{The Linux Kernel/doc|The CPU hotplug API|core-api/cpu_hotplug.html#the-cpu-hotplug-api}}
::: {{The Linux Kernel/doc|CPU hotplug state machine|core-api/cpu_hotplug.html#cpu-hotplug-state-machine}}
::: {{The Linux Kernel/doc|CPU online/offline operations|core-api/cpu_hotplug.html#cpu-online-offline-operations}}
::: {{The Linux Kernel/doc|Allocating a state|core-api/cpu_hotplug.html#allocating-a-state}}
::: {{The Linux Kernel/doc|Setup of a CPU hotplug state|core-api/cpu_hotplug.html#setup-of-a-cpu-hotplug-state}}
::: {{The Linux Kernel/doc|Removal of a CPU hotplug state|core-api/cpu_hotplug.html#removal-of-a-cpu-hotplug-state}}
::: {{The Linux Kernel/doc|Multi-Instance state instance management|core-api/cpu_hotplug.html#multi-instance-state-instance-management}}
::: {{The Linux Kernel/doc|Examples|core-api/cpu_hotplug.html#examples}}
:: {{The Linux Kernel/doc|Testing of hotplug states|core-api/cpu_hotplug.html#testing-of-hotplug-states}}
:: {{The Linux Kernel/doc|Architecture’s requirements|core-api/cpu_hotplug.html#architecture-s-requirements}}
:: {{The Linux Kernel/doc|User Space Notification|core-api/cpu_hotplug.html#user-space-notification}}
:: {{The Linux Kernel/doc|Kernel Inline Documentations Reference|core-api/cpu_hotplug.html#kernel-inline-documentations-reference}}
📚 Further reading
: [https://manpages.ubuntu.com/manpages/focal/man1/stress-ng.1.html#:~:text=cpu%2Donline stress-ng --cpu-online]
: {{The Linux Kernel/id|CONFIG_CPU_HOTPLUG_STATE_CONTROL}} – enables the ability to write incremental steps between "offline" and "online" states to the CPU's sysfs target file, allowing for more granular control of state transitions.
:: {{The Linux Kernel/id|target_store}}: {{The Linux Kernel/id|cpu_up}}/{{The Linux Kernel/id|cpu_down}}
: [https://lore.kernel.org/lkml/?q=cpuhotplug+OR+cpuhp cpuhotplug, cpuhp @LKML]
==== CPU isolation ====
CPU isolation ensures that specific tasks run on dedicated CPUs, reducing contention and latency.
'''Housekeeping''' CPUs refer to the CPUs that are reserved for various '''system''' tasks. See {{The Linux Kernel/id|hk_type}}.
'''Isolated''' CPUs are dedicated to '''real-time''' applications, such as DPDK.
⚲ API
: /sys/devices/system/cpu/isolated
: /sys/devices/system/cpu/nohz_full
: [https://docs.kernel.org/admin-guide/cgroup-v2.html#:~:text=cpuset.cpus.isolated /sys/fs/cgroup/cpuset.cpus.isolated]
: [https://docs.kernel.org/admin-guide/cgroup-v2.html#:~:text=Partition%20root%20without%20load%20balancing /sys/fs/cgroup/.../cpuset.cpus.partition]
: {{The Linux Kernel/include|linux/sched/isolation.h}}
:: {{The Linux Kernel/id|hk_type}} – housekeeping type
:: {{The Linux Kernel/id|housekeeping_cpumask}} – returns CPUs available for housekeeping of a given type
:: {{The Linux Kernel/id|cpu_is_isolated}}
: {{The Linux Kernel/include|linux/cpuset.h}} – cpuset interface
: {{The Linux Kernel/man|7|cpuset}} – confine processes to processor and memory node subsets
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_CPU_ISOLATION}}
:: {{The Linux Kernel/source|kernel/sched/isolation.c}} – housekeeping CPU management
::: {{The Linux Kernel/id|housekeeping_init}}, {{The Linux Kernel/id|housekeeping_update}}
: {{The Linux Kernel/id|CONFIG_CPUSETS}}
:: {{The Linux Kernel/source|kernel/cgroup/cpuset.c}} – cpuset cgroup controller
::: {{The Linux Kernel/id|cpuset_init}}
::: {{The Linux Kernel/id|cpuset_init_smp}}
::: {{The Linux Kernel/id|isolated_cpus}}
::: {{The Linux Kernel/id|partition_xcpus_add}}, {{The Linux Kernel/id|partition_xcpus_del}}
📖 References
: {{The Linux Kernel/doc|CPU lists in command-line parameters|admin-guide/kernel-parameters.html#cpu-lists}}
:: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=nohz_full= '''nohz_full'''] clears housekeeping.{{The Linux Kernel/id|cpumasks}} for tick, wq, timer, rcu, misc, and kthread in {{The Linux Kernel/id|housekeeping_nohz_full_setup}}
:: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=isolcpus '''isolcpus'''] clears housekeeping.{{The Linux Kernel/id|cpumasks}} for [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=domain%20isolation domain] (by default), [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=nohz nohz], and [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=managed_irq managed_irq] in {{The Linux Kernel/id|housekeeping_isolcpus_setup}}
: {{The Linux Kernel/doc|Housekeeping|core-api/housekeeping.html}}
: {{The Linux Kernel/doc|NO_HZ: Reducing Scheduling-Clock Ticks|timers/no_hz.html}}
: {{The Linux Kernel/doc|CPUSETS of cgroup v2|admin-guide/cgroup-v2.html#cpuset}}
: {{The Linux Kernel/doc|CPUSETS of cgroup v1|admin-guide/cgroup-v1/cpusets.html}}
📚 Further reading
: [https://www.youtube.com/watch?v=1lomUhSS82s CPU Isolation state of the art, LPC'23]
: [https://lpc.events/event/19/contributions/2219/ CPU Isolation and IPI interference, LPC'25]
: [https://www.suse.com/c/cpu-isolation-introduction-part-1/ CPU Isolation]
: [https://lore.kernel.org/lkml/?q=isolcpus isolcpus @LKML]
: [https://lore.kernel.org/lkml/?q=housekeeping housekeeping @LKML]
: [https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#explicitly-reserved-cpu-list Explicitly Reserved CPU List, Kubernetes Documentation]
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cpu-partitioning/start CPU Partitioning]
: {{The Linux Kernel/doc|Scheduler Domains|scheduler/sched-domains.html}} – the Scheduler balances CPUs (scheduling groups) within a sched domain
: [https://lore.kernel.org/lkml/?q=nohz_full nohz_full @LKML]
💾 Historical since v7.0
: {{The Linux Kernel/id|cpuset_cpu_is_isolated}} – removed, use {{The Linux Kernel/id|cpu_is_isolated}} instead
=== Runtime code patching ===
The kernel patches its own machine code at boot or runtime to optimize hot paths.
Static keys patch a {{w|NOP_(code)|NOP}} to a jump (or vice versa); static calls patch indirect calls to direct calls; alternatives replace instructions based on CPU features.
⚲ API
: {{The Linux Kernel/include|linux/jump_label.h}} – static keys
:: {{The Linux Kernel/id|DEFINE_STATIC_KEY_FALSE}} – define a key, initially false
:: {{The Linux Kernel/id|static_branch_unlikely}} – zero-cost branch check (NOP when key is false)
:: {{The Linux Kernel/id|static_branch_enable}} – patch all sites to take the branch (expensive, rare use)
: {{The Linux Kernel/include|linux/static_call.h}} – static calls
:: {{The Linux Kernel/id|DEFINE_STATIC_CALL}} – define a call site with initial target function
:: {{The Linux Kernel/id|static_call}} – invoke the patched direct call
:: {{The Linux Kernel/id|static_call_update}} – change target function, patch all sites
: {{The Linux Kernel/source|arch/x86/include/asm/alternative.h}} – alternatives
:: {{The Linux Kernel/id|ALTERNATIVE}} – replace instructions at boot based on CPU features
:: {{The Linux Kernel/source|arch/x86/include/asm/cpufeatures.h}} – X86_FEATURE_* flags
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_JUMP_LABEL}}
:: {{The Linux Kernel/source|kernel/jump_label.c}} – static key patching core
:: {{The Linux Kernel/source|arch/x86/kernel/jump_label.c}} – x86 static key patching
: {{The Linux Kernel/id|CONFIG_HAVE_STATIC_CALL}}
:: {{The Linux Kernel/source|kernel/static_call_inline.c}} – static call core
:: {{The Linux Kernel/source|arch/x86/kernel/static_call.c}} – x86 static call patching
: {{The Linux Kernel/source|arch/x86/include/asm/alternative.h}} – runtime instruction patching
:: {{The Linux Kernel/source|arch/x86/kernel/alternative.c}} – x86 alternatives engine
👁 Examples
: {{The Linux Kernel/id|housekeeping_overridden}}
: {{The Linux Kernel/id|preempt_schedule}}
: tracepoints
📖 References
: {{The Linux Kernel/doc|Static Keys|staging/static-keys.html}}
: {{The Linux Kernel/doc|x86 CPU feature flags|arch/x86/cpuinfo.html}}
=== {{w|Memory barrier}}s ===
Memory barriers (MB) are synchronization mechanisms used to ensure proper ordering of memory operations in a SMP environment.
They play a crucial role in maintaining the consistency and correctness of data shared among different CPU cores or processors.
MBs prevent unexpected and potentially harmful reordering of memory access instructions by the compiler or CPU, which can lead to data corruption and race conditions in a concurrent software system.
⚲ API
: {{The Linux Kernel/man|2|membarrier}}
: {{The Linux Kernel/include|asm-generic/barrier.h}}
:: {{The Linux Kernel/id|mb}}, {{The Linux Kernel/id|rmb}}, {{The Linux Kernel/id|wmb}}
:: {{The Linux Kernel/id|smp_mb}}, {{The Linux Kernel/id|smp_rmb}}, {{The Linux Kernel/id|smp_wmb}}
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/include/asm/barrier.h}} – x86 memory barrier instructions
: {{The Linux Kernel/source|kernel/sched/membarrier.c}} – membarrier system call
📖 References
: {{The Linux Kernel/doc|Memory barriers|core-api/wrappers/memory-barriers.html}}
=== States ===
C-states and P-states are features in modern CPUs designed to improve energy efficiency.
🗝️ Acronyms
: [https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/08_Processor_Configuration_and_Control/processor-power-states.html C-states] – CPU(?) states, aka idle states
: EPP – {{The Linux Kernel/doc|Energy Performance Preference|admin-guide/pm/amd-pstate.html#energy-performance-preference-epp-rw}}
: HWP – hardware-managed P-states, see [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=hwp_only hwp_only]
: [https://www.intel.com/content/www/us/en/docs/socwatch/user-guide/2020/p-state.html P-states] – Performance states, see CPU Power and frequency scaling
⚲ API
: [https://linux.die.net/man/1/cpupower cpupower]
📖 References
: {{The Linux Kernel/doc|Working-State Power Management|admin-guide/pm/working-state.html}}
: https://lwn.net/Kernel/Index/#Power_management
==== Idle ====
C-states, {{w|ACPI#Processor_states|power states}}:
: C0 – the operating state.
: C1 (aka Halt) – the processor is not executing instructions, but can return to an executing state instantaneously.
: C2 (aka Stop-Clock) – the processor maintains all software-visible state, but may take longer to wake up.
: C3 (aka Sleep) – takes longer to wake up.
: ...
⚲ API
: turbostat --show CPU --quiet -n 1 --interval 0.1 --show sysfs
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=idle= idle=]
: /dev/cpu_dma_latency – see {{The Linux Kernel/id|set_cpu_dma_latency}}
: C-states interfaces:
:: /sys/devices/system/cpu/cpuidle/
:: /sys/devices/system/cpu/cpu*/cpuidle/
:: {{The Linux Kernel/include|linux/cpuidle.h}} – a generic framework for CPU idle power management
:: {{The Linux Kernel/doc|intel_idle CPU Idle Time Management Driver|admin-guide/pm/intel_idle.html}}
: {{The Linux Kernel/include|linux/pm_qos.h}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/cpuidle}} – CPU idle governors and drivers
: {{The Linux Kernel/source|kernel/power/qos.c}} – PM quality of service
:: {{The Linux Kernel/id|cpu_latency_qos_miscdev}} – implementation of /dev/cpu_dma_latency
📖 References
:: {{The Linux Kernel/doc|CPU Idle Time Management|admin-guide/pm/cpuidle.html}}
📚 Further reading
:: https://lwn.net/Kernel/Index/#Power_management-cpuidle
: {{The Linux Kernel/doc|PM Quality Of Service Interface|power/pm_qos_interface.html}}
==== Power and frequency ====
P-states, {{w|ACPI#Performance_state|performance states}}:
: P0 – maximum power and frequency
: Pn – less power and frequency
: ...
⚲ API
: Reliable measurement of actual CPU frequency
:: [https://manpages.debian.org/testing/linux-cpupower/turbostat.8.en.html turbostat] --quiet --show CPU,Bzy_MHz -n 1 --interval 0.1
::: Bzy_MHz – average clock rate while the CPU was not idle (ie. in "c0" state).
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=intel_pstate intel_pstate=]
:: {{The Linux Kernel/doc|Kernel Command Line Options for intel_pstate|admin-guide/pm/intel_pstate.html#kernel-command-line-options-for-intel-pstate}}
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=cpufreq.default_governor cpufreq.default_governor=]
: P-states interfaces:
:: /sys/devices/system/cpu/cpufreq/
:: /sys/devices/system/cpu/cpu*/cpufreq/
::: scaling_cur_freq – unreliable assumption on CPU frequency
:: /sys/devices/system/cpu/intel_pstate/
:: {{The Linux Kernel/include|linux/cpufreq.h}}
:: {{The Linux Kernel/include|linux/sched/cpufreq.h}} – interface between cpufreq drivers and the scheduler
⚙️ Internals
: {{The Linux Kernel/source|drivers/cpufreq}} – CPU frequency scaling drivers
:: {{The Linux Kernel/id|intel_pstate}}
:: {{The Linux Kernel/id|acpi_cpufreq_driver}}
: {{The Linux Kernel/source|kernel/sched/cpufreq_schedutil.c}} – implementation of cpufreq.default_governor=schedutil
: {{The Linux Kernel/source|arch/x86/kernel/cpu/intel_epb.c}} – Intel Performance and Energy Bias Hint support
📖 References
: {{The Linux Kernel/doc|CPU Performance Scaling|admin-guide/pm/cpufreq.html}}
: {{The Linux Kernel/doc|Device Frequency Scaling|driver-api/devfreq.html}}
: [https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt CPUFreq Governor]
: {{The Linux Kernel/doc|CPUFreq - CPU frequency and voltage scaling|cpu-freq}}
: {{The Linux Kernel/doc|Intel Performance and Energy Bias Hint|admin-guide/pm/intel_epb.html}}
: {{The Linux Kernel/doc|intel_pstate CPU Performance Scaling Driver|admin-guide/pm/intel_pstate.html}}
:: {{The Linux Kernel/doc|General Information|admin-guide/pm/intel_pstate.html#general-information}}
:: {{The Linux Kernel/doc|Operation Modes|admin-guide/pm/intel_pstate.html#operation-modes}}
::: {{The Linux Kernel/doc|Active Mode|admin-guide/pm/intel_pstate.html#active-mode}}
<!--
:::: {{The Linux Kernel/doc|Active Mode With HWP|admin-guide/pm/intel_pstate.html#active-mode-with-hwp}}
::::: {{The Linux Kernel/doc|HWP + performance|admin-guide/pm/intel_pstate.html#hwp-performance}}
::::: {{The Linux Kernel/doc|HWP + powersave|admin-guide/pm/intel_pstate.html#hwp-powersave}}
:::: {{The Linux Kernel/doc|Active Mode Without HWP|admin-guide/pm/intel_pstate.html#active-mode-without-hwp}}
::::: {{The Linux Kernel/doc|performance|admin-guide/pm/intel_pstate.html#performance}}
::::: {{The Linux Kernel/doc|powersave|admin-guide/pm/intel_pstate.html#powersave}}
-->
::: {{The Linux Kernel/doc|Passive Mode|admin-guide/pm/intel_pstate.html#passive-mode}}
:: {{The Linux Kernel/doc|Turbo P-states Support|admin-guide/pm/intel_pstate.html#turbo-p-states-support}}
:: {{The Linux Kernel/doc|Processor Support|admin-guide/pm/intel_pstate.html#processor-support}}
:: {{The Linux Kernel/doc|Support for Hybrid Processors|admin-guide/pm/intel_pstate.html#support-for-hybrid-processors}}
::: {{The Linux Kernel/doc|Hybrid Processors with SMT|admin-guide/pm/intel_pstate.html#hybrid-processors-with-smt}}
::: {{The Linux Kernel/doc|Capacity-Aware Scheduling Support|admin-guide/pm/intel_pstate.html#capacity-aware-scheduling-support}}
::: {{The Linux Kernel/doc|Energy-Aware Scheduling Support|admin-guide/pm/intel_pstate.html#energy-aware-scheduling-support}}
:: {{The Linux Kernel/doc|User Space Interface in sysfs|admin-guide/pm/intel_pstate.html#user-space-interface-in-sysfs}}
::: {{The Linux Kernel/doc|Global Attributes|admin-guide/pm/intel_pstate.html#global-attributes}}
::: {{The Linux Kernel/doc|Interpretation of Policy Attributes|admin-guide/pm/intel_pstate.html#interpretation-of-policy-attributes}}
::: {{The Linux Kernel/doc|Coordination of P-State Limits|admin-guide/pm/intel_pstate.html#coordination-of-p-state-limits}}
::: {{The Linux Kernel/doc|Energy vs Performance Hints|admin-guide/pm/intel_pstate.html#energy-vs-performance-hints}}
:: {{The Linux Kernel/doc|intel_pstate vs acpi-cpufreq|admin-guide/pm/intel_pstate.html#intel-pstate-vs-acpi-cpufreq}}
:: {{The Linux Kernel/doc|Kernel Command Line Options for intel_pstate|admin-guide/pm/intel_pstate.html#kernel-command-line-options-for-intel-pstate}}
:: {{The Linux Kernel/doc|Diagnostics and Tuning|admin-guide/pm/intel_pstate.html#diagnostics-and-tuning}}
::: {{The Linux Kernel/doc|Trace Events|admin-guide/pm/intel_pstate.html#trace-events}}
::: {{The Linux Kernel/doc|ftrace|admin-guide/pm/intel_pstate.html#ftrace}}
<!-- end of intel_pstate.html -->
📚 Further reading
: https://lwn.net/Kernel/Index/#Power_management-Frequency_scaling
: [https://wiki.archlinux.org/title/CPU_frequency_scaling CPU frequency scaling]
: {{The Linux Kernel/ltp|kernel/device-drivers|cpufreq}}
: [https://www.thinkwiki.org/wiki/How_to_use_cpufrequtils How to use cpufrequtils]
:: [https://linux.die.net/man/1/cpufreq-info cpufreq-info]
:: [https://linux.die.net/man/1/cpufreq-set cpufreq-set]
: https://github.com/intel/power-optimization-library
: https://github.com/intel/kubernetes-power-manager
=== Architectures ===
Linux CPU architectures refer to the different types of central processing units (CPUs) that are compatible with the Linux operating system.
Linux is designed to run on a wide range of CPU architectures, which allows it to be utilized on various devices, from smartphones to servers and supercomputers.
Each architecture has its own unique features, advantages, and design considerations.
Architectures are classified by family (e.g. x86, ARM), {{w|Word (computer architecture)|word}} or {{w|Integer_(computer_science)#Long_integer|long int}} size (e.g. {{The Linux Kernel/id|CONFIG_32BIT}}, {{The Linux Kernel/id|CONFIG_64BIT}}).
Some functions with different implementations for different CPU architectures:
: {{The Linux Kernel/id|do_boot_cpu}} > {{The Linux Kernel/id|start_secondary}} > {{The Linux Kernel/id|cpu_init}}
: {{The Linux Kernel/id|setup_arch}}, {{The Linux Kernel/id|start_thread}}, {{The Linux Kernel/id|get_current}}, {{Linux ident|current}}
⚲ API
: {{The Linux Kernel/id|BITS_PER_LONG}}, {{The Linux Kernel/id|__BITS_PER_LONG}},
⚙️ Arch internals
: {{The Linux Kernel/source|arch}} – architecture-specific code
:: '''x86'''
::: {{The Linux Kernel/id|CONFIG_X86}}
::: {{The Linux Kernel/source|arch/x86}} – x86 architecture support
::: {{The Linux Kernel/source|drivers/platform/x86}} – x86 platform drivers
::: https://lwn.net/Kernel/Index/#Architectures-x86
::: {{The Linux Kernel/man|1|perf-intel-pt}} – support for Intel Processor Trace within perf
:: '''ARM'''
::: {{The Linux Kernel/id|CONFIG_ARM}}
::: {{The Linux Kernel/source|arch/arm}}, {{The Linux Kernel/doc|ARM Architecture|arch/arm}}
::: https://lwn.net/Kernel/Index/#Architectures-ARM
::: {{The Linux Kernel/source|arch/arm64}}, {{The Linux Kernel/doc|ARM64 Architecture|arm64}}
: [https://0xax.gitbooks.io/linux-insides/content/Initialization/linux-initialization-5.html architecture-specific initialization]
📖 References
: {{The Linux Kernel/doc|CPU Architectures|arch}}
:: {{The Linux Kernel/doc|x86-specific|arch/x86}}
::: {{The Linux Kernel/doc|x86_64 Support|arch/x86/x86_64}}
{{BookCat}}
sg4bjpit743zhhafrxapu8jupbff2l5
4641643
4641560
2026-06-29T08:25:25Z
Conan
3188
stress-ng
4641643
wikitext
text/x-wiki
<noinclude>{{DISPLAYTITLE:Interrupts and CPU}}</noinclude>
== Interrupts ==
An {{w|interrupt}} is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention.
An interrupt alerts the processor to a high-priority condition requiring the interruption of the current code the processor is executing.
The processor responds by suspending its current activities, saving its state, and executing a function called an ''interrupt handler'' (or an interrupt service routine, ISR) to deal with the event.
This interruption is temporary, and, after the interrupt handler finishes, the processor resumes normal activities.
There are two types of interrupts: hardware interrupts and software interrupts.
Hardware interrupts are used by devices to communicate that they require attention from the operating system.
For example, pressing a key on the keyboard or moving the mouse triggers hardware interrupts that cause the processor to read the keystroke or mouse position.
Unlike the software type, hardware interrupts are asynchronous and can occur in the middle of instruction execution, requiring additional care in programming.
The act of initiating a hardware interrupt is referred to as an ''interrupt request'' - IRQ ↪ {{w|Interrupt descriptor table|IDT}} ↪ {{The Linux Kernel/id|common_interrupt}} on x86.
A software interrupt is caused either by an exceptional condition in the processor itself, or a special instruction in the instruction set which causes an interrupt when it is executed.
The former is often called a ''{{w|Trap (computing)|trap}}'' (⚙️ {{The Linux Kernel/id|do_trap}}) or ''exception'' and is used for errors or events occurring during program execution that are exceptional enough that they cannot be handled within the program itself.
For example, if the processor's arithmetic logic unit is commanded to divide a number by zero, this impossible demand will cause a ''divide-by-zero exception'' (⚙️ {{The Linux Kernel/id|X86_TRAP_DE}}), perhaps causing the computer to abandon the calculation or display an error message.
Software interrupt instructions function similarly to subroutine calls and are used for a variety of purposes, such as to request services from low-level system software such as device drivers.
For example, computers often use software interrupt instructions to communicate with the disk controller to request data be read or written to the disk.
Each interrupt has its own interrupt handler. The number of hardware interrupts is limited by the number of interrupt request (IRQ) lines to the processor, but there may be hundreds of different software interrupts.
⚲ API
: /proc/interrupts
: {{The Linux Kernel/man|1|irqtop}} – utility to display kernel interrupt information
: [https://github.com/Irqbalance/irqbalance irqbalance] – distribute hardware interrupts across processors on a multiprocessor system
: There are many ways to request ISR, two of them
: {{The Linux Kernel/id|devm_request_threaded_irq}} – preferable function to allocate an interrupt line for a managed device with a threaded ISR
: {{The Linux Kernel/id|request_irq}}, {{The Linux Kernel/id|free_irq}} – old and common functions to add and remove a handler for an interrupt line
: {{The Linux Kernel/include|linux/interrupt.h}} – main interrupt support header
:: {{The Linux Kernel/id|irqaction}} – contains handler functions
: {{The Linux Kernel/include|linux/irq.h}}
:: {{The Linux Kernel/id|irq_data}}
: {{The Linux Kernel/include|linux/irqflags.h}}
:: {{The Linux Kernel/id|irqs_disabled}}
:: {{The Linux Kernel/id|local_irq_save}} ...
:: {{The Linux Kernel/id|local_irq_disable}} ...
: {{The Linux Kernel/include|linux/irqdesc.h}}
:: {{The Linux Kernel/id|irq_desc}}
: {{The Linux Kernel/include|linux/irqdomain.h}}
:: {{The Linux Kernel/id|irq_domain}} – hardware interrupt number translation object
:: {{The Linux Kernel/id|irq_domain_get_irq_data}}
: {{The Linux Kernel/include|linux/msi.h}} – {{w|Message Signaled Interrupts}}
:: {{The Linux Kernel/id|msi_desc}}
: Structure of structures:
:: {{The Linux Kernel/id|irq_desc}} is container of
::: {{The Linux Kernel/id|irq_data}}
:::: irq – interrupt number
::: {{The Linux Kernel/id|irq_common_data}}
::: list of {{The Linux Kernel/id|irqaction}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/irq/settings.h}} – IRQ descriptor status flags
: {{The Linux Kernel/source|kernel/irq}} – generic IRQ handling
:: {{The Linux Kernel/source|kernel/irq/internals.h}} – IRQ subsystem internal functions
: ls /sys/kernel/debug/irq/domains/
:: {{The Linux Kernel/id|x86_vector_domain}}, {{The Linux Kernel/id|x86_vector_domain_ops}}
: {{The Linux Kernel/id|irq_chip}}
: {{The Linux Kernel/id|load_idt}} – load Interrupt Descriptor Table
: {{The Linux Kernel/source|arch/x86/include/asm/idtentry.h}} – interrupt entry/exit definitions
: {{The Linux Kernel/source|arch/x86/include/asm/hw_irq.h}} – x86 hardware IRQ definitions
:: {{The Linux Kernel/id|irq_entries_start}} – hardware IRQ entry stubs
: {{The Linux Kernel/source|arch/x86/kernel/irq.c}} – x86 interrupt handling
:: {{The Linux Kernel/id|common_interrupt}} – handles all normal device IRQs on x86
📖 References
: {{The Linux Kernel/doc|IRQs|core-api/irq}}
:: {{The Linux Kernel/doc|The irq_domain interrupt number mapping library|core-api/irq/irq-domain.html}}
: {{The Linux Kernel/doc|Linux generic IRQ handling|core-api/genericirq.html}}
: {{The Linux Kernel/doc|Message Signaled Interrupts: The MSI Driver Guide|PCI/msi-howto.html}}
: {{The Linux Kernel/doc|Lock types and their rules|locking/locktypes.html}}
: {{The Linux Kernel/doc|Hard IRQ Context|kernel-hacking/locking.html#hard-irq-context}}
: [https://0xax.gitbooks.io/linux-insides/content/Interrupts/ Interrupts]
👁 Examples
: {{The Linux Kernel/id|dummy_irq_chip}} – dummy interrupt chip implementation
: {{The Linux Kernel/source|lib/locking-selftest.c}} – locking correctness self-tests
=== IRQ affinity ===
⚲ API
: /proc/irq/default_smp_affinity
: /proc/irq/*/smp_affinity and /proc/irq/*/smp_affinity_list
Common types and functions:
: struct {{The Linux Kernel/id|irq_affinity}} – description for automatic irq affinity assignments, see {{The Linux Kernel/id|devm_platform_get_irqs_affinity}}
: struct {{The Linux Kernel/id|irq_affinity_desc}} – interrupt affinity descriptor, see {{The Linux Kernel/id|irq_update_affinity_desc}}, {{The Linux Kernel/id|irq_create_affinity_masks}}
: {{The Linux Kernel/id|irq_set_affinity}}
: {{The Linux Kernel/id|irq_get_affinity_mask}}
: {{The Linux Kernel/id|irq_can_set_affinity}}
: {{The Linux Kernel/id|irq_set_affinity_hint}}
: {{The Linux Kernel/id|irqd_affinity_is_managed}}
: {{The Linux Kernel/id|irq_data_get_affinity_mask}}
: {{The Linux Kernel/id|irq_data_get_effective_affinity_mask}}
: {{The Linux Kernel/id|irq_data_update_effective_affinity}}
: {{The Linux Kernel/id|irq_set_affinity_notifier}}
: {{The Linux Kernel/id|irq_affinity_notify}}
: {{The Linux Kernel/id|irq_chip_set_affinity_parent}}
: {{The Linux Kernel/id|irq_set_vcpu_affinity}}
🛠️ Utilities
: [https://man.archlinux.org/man/extra/irqbalance/irqbalance.1.en irqbalance] – distributes hardware interrupts across CPUs
📖 References
: {{The Linux Kernel/doc|SMP IRQ affinity|core-api/irq/irq-affinity.html}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cpu-partitioning/start#irq_affinity IRQ affinity, LF]
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=managed_irq managed_irq kernel parameter], [https://lore.kernel.org/lkml/?q=managed_irq @LKML]
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=irqaffinity= irqaffinity kernel parameter], [https://lore.kernel.org/lkml/?q=irqaffinity @LKML]
=== Non-maskable interrupts ===
⚲ API
: {{The Linux Kernel/include|linux/nmi.h}}
:: {{The Linux Kernel/id|in_nmi}}
:: {{The Linux Kernel/id|touch_nmi_watchdog}}
:: ...
: {{The Linux Kernel/include|trace/events/nmi.h}}
: {{The Linux Kernel/source|arch/x86/include/asm/nmi.h}} – x86 NMI handler registration
:: {{The Linux Kernel/id|register_nmi_handler}}
:: {{The Linux Kernel/id|unregister_nmi_handler}}
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/kernel/nmi.c}} – x86 NMI handler
: {{The Linux Kernel/source|arch/x86/kernel/nmi_selftest.c}} – NMI IPI self-tests
📖 References
: {{The Linux Kernel/doc|NMI Trace Events|trace/events-nmi.html}}
📚 Further reading
: [https://0xax.gitbooks.io/linux-insides/content/Interrupts/linux-interrupts-6.html Non-maskable interrupt handler] (NMI)
=== ... ===
📚 Further reading about interrupts
: IDT – {{w|Interrupt descriptor table}}
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/ticklesskernel Tickless (Full dynticks)] reduces timer interrupts overhead, {{The Linux Kernel/id|CONFIG_NO_HZ_FULL}}
: [https://www.felixcloutier.com/x86/lgdt:lidt LGDT/LIDT – Load Global/Interrupt Descriptor Table Register] asm instruction
== Deferred works ==
=== Scheduler context ===
==== kthread work ====
This framework simplifies the use of kernel kthreads.
A {{The Linux Kernel/id|kthread_work}} item can be queued with {{The Linux Kernel/id|kthread_queue_work}} and flushed using {{The Linux Kernel/id|kthread_flush_work}}.
All queued kthread_work items are processed by a dedicated kernel thread executing the {{The Linux Kernel/id|kthread_worker_fn}} function.
⚲ API
: {{The Linux Kernel/id|kthread_work}} – contains {{The Linux Kernel/id|kthread_work_func_t}} to execute
:: {{The Linux Kernel/id|kthread_init_work}}
:: {{The Linux Kernel/id|kthread_flush_work}}
: {{The Linux Kernel/id|kthread_worker}} – links a kthread_work and a task
:: {{The Linux Kernel/id|kthread_run_worker}} – creates and wakes a kthread worker
::: {{The Linux Kernel/id|kthread_create_worker}}
::: {{The Linux Kernel/id|kthread_flush_worker}}
:: {{The Linux Kernel/id|kthread_destroy_worker}}
: {{The Linux Kernel/id|kthread_queue_work}} – queues a kthread_work on a kthread_worker
⚙️ Internals
: {{The Linux Kernel/id|__kthread_create_worker_on_node}}
: {{The Linux Kernel/id|kthread_worker_fn}} – executes work's function
👁 Example usages
: {{The Linux Kernel/id|watchdog_kworker}}, {{The Linux Kernel/id|pwq_release_worker}}, {{The Linux Kernel/id|pump_messages}}
==== Threaded IRQ ====
⚲ API
{{The Linux Kernel/id|devm_request_threaded_irq}}, {{The Linux Kernel/id|request_threaded_irq}}
ISR should return IRQ_WAKE_THREAD to run thread function
⚙️ Internals
: {{The Linux Kernel/id|setup_irq_thread}}, {{The Linux Kernel/id|irq_thread}}
: {{The Linux Kernel/source|kernel/irq/manage.c}} – IRQ request, free and affinity management
📖 References
: {{The Linux Kernel/doc|request_threaded_irq|core-api/genericirq.html#c.request_threaded_irq}}
==== Work and workqueue ====
Generic async execution with shared worker pool.
⚲ API
: {{The Linux Kernel/id|PF_WQ_WORKER}} – workqueue worker process flag
: {{The Linux Kernel/include|linux/workqueue.h}}, {{The Linux Kernel/include|linux/workqueue_types.h}}
: {{The Linux Kernel/id|work_struct}}, {{The Linux Kernel/id|INIT_WORK}}, {{The Linux Kernel/id|schedule_work}},
: {{The Linux Kernel/id|delayed_work}}, {{The Linux Kernel/id|INIT_DELAYED_WORK}}, {{The Linux_Kernel/id|schedule_delayed_work}}, {{The Linux Kernel/id|cancel_delayed_work_sync}}
: {{The Linux Kernel/id|workqueue_struct}}
:: {{The Linux Kernel/id|alloc_workqueue}}
:: {{The Linux Kernel/id|destroy_workqueue}}
: {{The Linux Kernel/id|queue_work}} – queues work on a workqueue
: {{The Linux Kernel/id|show_all_workqueues}}
:: {{The Linux Kernel/id|show_one_workqueue}}
: {{The Linux Kernel/id|system_power_efficient_wq}} ...
👁 Example usage {{The Linux Kernel/source|samples/ftrace/sample-trace-array.c}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/workqueue.c}} – generic async execution with shared worker pool
:: {{The Linux Kernel/id|workqueue_init}}
::: {{The Linux Kernel/id|create_worker}}
:::: {{The Linux Kernel/id|worker_thread}}
::::: {{The Linux Kernel/id|process_one_work}}
:: {{The Linux Kernel/id|format_worker_id}} – names kworker kthreads
:: {{The Linux Kernel/id|pool_workqueue}}
::: {{The Linux Kernel/id|worker_pool}}
📖 References
: {{The Linux Kernel/doc|Concurrency Managed Workqueue|core-api/workqueue.html}}
=== Interrupt context ===
: {{The Linux Kernel/include|linux/irq_work.h}} – framework for enqueueing and running callbacks from hardirq context
:: {{The Linux Kernel/source|samples/trace_printk/trace-printk.c}}
==== Timers ====
===== softirq timer =====
This timer is a softirq for periodical tasks with jiffies resolution
⚲ API
: {{The Linux Kernel/include|linux/timer.h}}
: {{The Linux Kernel/id|timer_list}}, {{The Linux Kernel/id|DEFINE_TIMER}}, {{The Linux Kernel/id|timer_setup}}
: {{The Linux Kernel/id|mod_timer}} — sets expiration time in jiffies.
: {{The Linux Kernel/id|del_timer}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/time/timer.c}} – kernel internal timers
:: {{The Linux Kernel/id|timer_bases}}
👁 Examples
: {{The Linux Kernel/id|input_enable_softrepeat}} and {{The Linux Kernel/id|input_start_autorepeat}}
📚 References
: {{The Linux Kernel/doc|Time and timer routines|driver-api/basics.html#time-and-timer-routines}}
:: {{The Linux Kernel/doc|mod_timer_pending ... |driver-api/basics.html#c.mod_timer_pending}}
===== High-resolution timer =====
⚲ API
: /proc/timer_list
: /proc/sys/kernel/timer_migration
: {{The Linux Kernel/include|linux/hrtimer_defs.h}}
: {{The Linux Kernel/include|linux/hrtimer.h}}
: {{The Linux Kernel/id|hrtimer}}, hrtimer.function — callback
: {{The Linux Kernel/id|hrtimer_init}}
: {{The Linux Kernel/id|hrtimer_setup}}
: {{The Linux Kernel/id|hrtimer_start}} — starts a timer with nanosecond resolution
: {{The Linux Kernel/id|hrtimer_cancel}}
👁 Examples {{The Linux Kernel/id|alarm_init}}, {{The Linux Kernel/id|watchdog_enable}}
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_HIGH_RES_TIMERS}}
: {{The Linux Kernel/source|kernel/time/tick-internal.h}} – tick and timer internal definitions
:: {{The Linux Kernel/id|hrtimer_bases}}
: {{The Linux Kernel/source|kernel/time/hrtimer.c}} – high-resolution timer implementation
: {{The Linux Kernel/source|kernel/time/itimer.c}} – interval timers
: {{The Linux Kernel/source|kernel/time/timer_list.c}} – /proc/timer_list debugfs
📚 HR timers references
: {{The Linux Kernel/doc|High-resolution timers|driver-api/basics.html#high-resolution-timers}}
: {{The Linux Kernel/doc|hrtimers - subsystem for high-resolution kernel timers|timers/hrtimers.html}}
: {{The Linux Kernel/doc|high resolution timers and dynamic ticks design notes|timers/highres.html}}
===== ... =====
📚 Timers references
: {{The Linux Kernel/doc|Timers|timers}}
: [https://lwn.net/Articles/913568/ Better CPU selection for timer expiration]
==== Tasklet ====
tasklet is a softirq, for time critical operations
⚲ API is deprecated in favor of threaded IRQs: {{The Linux Kernel/id|devm_request_threaded_irq}}
: {{The Linux Kernel/id|tasklet_struct}}, {{The Linux Kernel/id|tasklet_init}}, {{The Linux Kernel/id|tasklet_schedule}}
⚙️ Internals: {{The Linux Kernel/id|tasklet_action_common}} HI_SOFTIRQ, TASKLET_SOFTIRQ
==== Softirq ====
softirq is internal system facility and should not be used directly.
Use tasklet or threaded IRQs
⚲ API
: {{The Linux Kernel/include|linux/interrupt.h}}
: cat /proc/softirqs
: {{The Linux Kernel/id|open_softirq}} registers {{The Linux Kernel/id|softirq_action}}
⚙️ Internals
: {{The Linux Kernel/source|kernel/softirq.c}} – software interrupt handling
📖 References
: [https://0xax.gitbooks.io/linux-insides/content/Interrupts/linux-interrupts-9.html Introduction to deferred interrupts (Softirq, Tasklets and Workqueues)]
: [https://0xax.gitbooks.io/linux-insides/content/Timers/ Timers and time management]
: [https://linux-kernel-labs.github.io/refs/heads/master/labs/deferred_work.html Deferred work, linux-kernel-labs]
: [https://www.oreilly.com/library/view/linux-device-drivers/0596005903/ch07.html Chapter 7. Time, Delays, and Deferred Work]
==CPU specific==
🖱️ GUI
: [https://manpages.ubuntu.com/manpages/kinetic/en/man8/tuna.8.html tuna] – program for tuning running processes
⚲ API
: cat /proc/cpuinfo
: /sys/devices/system/cpu/
: /sys/devices/system/node/
: /sys/cpu/
: /sys/fs/cgroup/cpu/
: grep -i cpu /proc/self/status
: [https://manpages.ubuntu.com/manpages/jammy/man1/rdmsr.1.html rdmsr] – tool for reading CPU machine specific registers (MSR)
: {{The Linux Kernel/man|1|lscpu}} – display information about the CPU architecture
: {{The Linux Kernel/include|linux/arch_topology.h}} – arch specific cpu topology information
: {{The Linux Kernel/include|linux/cpu.h}} – generic cpu definition
: {{The Linux Kernel/include|linux/cpu_cooling.h}}
: {{The Linux Kernel/include|linux/cpu_pm.h}}
: {{The Linux Kernel/include|linux/cpufeature.h}}
: {{The Linux Kernel/source|arch/x86/include/asm/cpufeature.h}} – x86 CPU feature detection
: {{The Linux Kernel/include|linux/peci-cpu.h}}
: {{The Linux Kernel/include|linux/sched/cputime.h}} – cputime accounting APIs
: {{The Linux Kernel/include|linux/clk.h}} – interfaces for managing hardware clocks in device drivers
⚙️ Internals
: {{The Linux Kernel/source|drivers/base/cpu.c}} – CPU driver model subsystem
:: {{The Linux Kernel/id|cpu_dev_init}}
=== Cache ===
: {{The Linux Kernel/include|linux/cacheflush.h}}
:: {{The Linux Kernel/source|arch/x86/include/asm/cacheflush.h}}: {{The Linux Kernel/id|clflush_cache_range}}
: {{The Linux Kernel/include|linux/cache.h}} – cache line alignment macros
:: {{The Linux Kernel/id|____cacheline_aligned}} – align to cache line boundary to avoid false sharing
:: {{The Linux Kernel/id|__cacheline_aligned}} – same, plus place in .data..cacheline_aligned section
:: {{The Linux Kernel/id|____cacheline_aligned_in_smp}} – same, but no-op on uniprocessor builds
:: {{The Linux Kernel/id|__read_mostly}} – place in a cache-friendly section for rarely written data
:: {{The Linux Kernel/id|__ro_after_init}} – writable during init, read-only after boot (security hardening)
:: {{The Linux Kernel/id|DEFINE_PER_CPU_CACHE_HOT}} – per-CPU variable in .data..hot section, used for {{The Linux Kernel/id|current_task}}, {{The Linux Kernel/id|__preempt_count}}
:: {{The Linux Kernel/id|L1_CACHE_BYTES}}, {{The Linux Kernel/id|SMP_CACHE_BYTES}} – 64 bytes typically
:: {{The Linux Kernel/source|arch/x86/include/asm/cache.h}} – x86 cache line size definitions
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dcache stress-ng --cache]
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/mm/pat/set_memory.c}} – page attribute table memory type control
: {{The Linux Kernel/source|arch/x86/kernel/cpu/mtrr/}} – memory type range register driver
📚 Further reading
: MTRR – {{w|Memory type range register}}
: {{w|CPU cache}}
=== {{w|Symmetric_multiprocessing|SMP}} ===
This chapter is about multiprocessing and {{w|Multi-core processor|multi-core}} aspects of Linux kernel.
Key concepts and features of Linux SMP include:
* Symmetry: In an SMP system, all processors are considered the same without hardware hierarchy in contradiction to use of {{w|coprocessor}}s.
* Load balancing: The Linux kernel employs load balancing mechanisms to distribute tasks evenly among available CPU cores. This prevents any one core from becoming overwhelmed while others remain underutilized.
* Parallelism: SMP enables parallel processing, where multiple threads or processes can execute simultaneously on different CPU cores. This can significantly improve the execution speed of applications that are designed to take advantage of multiple threads.
* Thread scheduling: The Linux kernel scheduler is responsible for determining which threads or processes run on which CPU cores and for how long. It aims to optimize performance by minimizing contention and maximizing CPU utilization.
* Shared memory: In an SMP system, all CPU cores typically share the same physical memory space. This allows processes and threads running on different cores to communicate and share data more efficiently.
* NUMA – {{w|Non-Uniform Memory Access}}: In larger SMP systems, memory access times might not be uniform due to the physical arrangement of memory banks and processors. Linux has mechanisms to handle NUMA architectures efficiently, allowing processes to be scheduled on CPUs closer to their associated memory.
* Cache coherency: SMP systems require mechanisms to ensure that all CPU cores have consistent views of memory. Cache coherency protocols ensure that changes made to shared memory locations are correctly propagated to all cores.
* Scalability: SMP systems can be scaled up to include more CPU cores, enhancing the overall computing power of the system. However, as the number of cores increases, challenges related to memory access, contention, and communication between cores may arise.
* Kernel and user space: Linux applications running in user space can take advantage of SMP without needing to be aware of the underlying hardware details. The kernel handles the management of CPU cores and resource allocation.
⚲ API
: <code>ps -PLe</code> – lists threads with processor that the thread last executed on (the third column PSR).
: {{The Linux Kernel/man|2|getcpu}} – determine CPU and NUMA node on which the calling thread is running
: {{The Linux Kernel/man|8|chcpu}} – configure CPUs
: {{The Linux Kernel/man|3|CPU_SET}} – macros for manipulating CPU sets
: {{The Linux Kernel/include|linux/smp.h}}
:: The most commonly used functions:
:: {{The Linux Kernel/id|crash_smp_send_stop}} – halts all CPUs except the calling one in a crash context
:: {{The Linux Kernel/id|get_cpu}} – disables preemption and returns the current processor ID
:: {{The Linux Kernel/id|on_each_cpu}} – runs a given function on all CPUs, possibly with synchronization
:: {{The Linux Kernel/id|on_each_cpu_cond_mask}} – conditionally runs a function on selected CPUs
:: {{The Linux Kernel/id|on_each_cpu_mask}} – executes a function on a specified set of CPUs
:: {{The Linux Kernel/id|panic_smp_self_stop}} – stops the local CPU during a panic while ensuring others halt
:: {{The Linux Kernel/id|put_cpu}} – re-enables preemption after a previous get_cpu call
:: {{The Linux Kernel/id|raw_smp_processor_id}} – returns the current CPU ID without preemption safety
:: {{The Linux Kernel/id|setup_max_cpus}} – sets up the maximum number of CPUs to be brought online
:: {{The Linux Kernel/id|smp_call_func_t}} – typedef for the function signature used in SMP function calls
:: {{The Linux Kernel/id|smp_call_function}} – invokes a function on all other CPUs via IPI
::: {{The Linux Kernel/id|smp_call_function_many}} – sends a function call to a specified set of CPUs via IPI
:: {{The Linux Kernel/id|smp_call_function_any}} – runs a function on any available CPU in a given mask
:: {{The Linux Kernel/id|smp_call_function_single}} – sends a function to execute on a single target CPU via IPI
:: {{The Linux Kernel/id|smp_call_function_single_async}} – queues a function to run asynchronously on one CPU
:: {{The Linux Kernel/id|smp_call_on_cpu}} – executes a function on a specific CPU and waits for the result
:: {{The Linux Kernel/id|smp_init}} – initializes core SMP structures and state during boot
:: {{The Linux Kernel/id|smp_prepare_boot_cpu}} – prepares the boot CPU during early SMP initialization
:: {{The Linux Kernel/id|smp_prepare_cpus}} – prepares all CPUs for booting before secondary CPUs are started
:: {{The Linux Kernel/id|smp_processor_id}} – returns the ID of the current CPU with preemption checks
:: {{The Linux Kernel/id|smp_send_reschedule}} – sends a reschedule IPI to a target CPU
:: {{The Linux Kernel/id|smp_send_stop}} – stops all other CPUs in response to critical events
:: {{The Linux Kernel/id|wake_up_all_idle_cpus}} – wakes all idle CPUs to ensure prompt task execution
: {{The Linux Kernel/include|linux/cpu.h}}
: {{The Linux Kernel/include|linux/group_cpus.h}}: {{The Linux Kernel/id|group_cpus_evenly}} – groups all CPUs evenly per NUMA/CPU locality
: {{The Linux Kernel/include|asm-generic/percpu.h}}
: {{The Linux Kernel/include|linux/percpu-defs.h}} – basic definitions for percpu areas
:: {{The Linux Kernel/id|this_cpu_ptr}}
: {{The Linux Kernel/include|linux/percpu.h}}
: {{The Linux Kernel/include|linux/percpu-refcount.h}}
: {{The Linux Kernel/include|linux/percpu-rwsem.h}}
: {{The Linux Kernel/include|linux/preempt.h}}
:: {{The Linux Kernel/id|migrate_disable}}, {{The Linux Kernel/id|migrate_enable}}
: /sys/bus/cpu
: [[#per_CPU_local_lock|per CPU local_lock]]
: {{The Linux Kernel/include|linux/topology.h}} – {{The Linux Kernel/id|cpu_to_node}}, {{The Linux Kernel/id|numa_node_id}}
: {{The Linux Kernel/source|arch/x86/include/asm/topology.h}} – x86 NUMA and CPU topology
: See also [[../../Memory#NUMA|NUMA memory section]]
⚙️ Internals
: {{The Linux Kernel/id|boot_cpu_init}} activates the first CPU
: {{The Linux Kernel/id|smp_prepare_cpus}} initializes rest CPUs during boot
: {{The Linux Kernel/id|cpu_number}}
: {{The Linux Kernel/id|CONFIG_SMP}}
:: {{The Linux Kernel/id|CONFIG_NUMA}}
: {{The Linux Kernel/include|trace/events/percpu.h}}
: IPI – {{w|Inter-processor interrupt}}
:: {{The Linux Kernel/include|trace/events/ipi.h}}
:: {{The Linux Kernel/file|kernel/irq/ipi.c}} – inter-processor interrupt helpers
:: {{The Linux Kernel/id|ipi_send_single}}, {{The Linux Kernel/id|ipi_send_mask}} ...
:: {{The Linux Kernel/file|drivers/base/cpu.c}} – CPU driver model subsystem support
:: {{The Linux Kernel/file|kernel/cpu.c}} – CPU hotplug state machine
: smpboot
:: {{The Linux Kernel/include|linux/smpboot.h}}
:: {{The Linux Kernel/source|kernel/smpboot.c}} – common SMP CPU bringup/teardown
:: {{The Linux Kernel/source|arch/x86/kernel/smpboot.c}} – x86 SMP booting
: {{The Linux Kernel/source|lib/group_cpus.c}} – distribute CPUs evenly across groups
🛠️ Utilities
: [https://man.archlinux.org/man/extra/irqbalance/irqbalance.1.en irqbalance] – distributes hardware interrupts across CPUs
: {{The Linux Kernel/man|8|numactl}} – controls NUMA policy for processes or shared memory
📖 References
: {{The Linux Kernel/doc|Per-CPU Data|kernel-hacking/locking.html#per-cpu-data}}
: {{The Linux Kernel/doc|How CPU topology info is exported via sysfs|admin-guide/cputopology.html}}
📚 Further reading
: [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/customizing-tuned-profiles_monitoring-and-managing-system-status-and-performance#functionalities-of-the-scheduler-tuned-plug-in_customizing-tuned-profiles Functionalities of the scheduler TuneD plugin]
: [https://man.archlinux.org/man/tuned-adm.8 tuned-adm] – command line tool for switching between different tuning profiles
==== CPU affinity ====
Affinity refers to assigning a process or thread to specific CPU cores.
This helps control which CPUs execute tasks, potentially improving performance by reducing data movement between cores.
It can be managed using system calls or commands.
Affinity can be represented as CPU bitmask: {{The Linux Kernel/id|cpumask_t}} or CPU affinity list: {{The Linux Kernel/id|cpulist_parse}}.
⚲ API
: {{The Linux Kernel/man|1|taskset}} – set or retrieve a process's CPU affinity
: grep Cpus_allowed /proc/self/status
: {{The Linux Kernel/man|2|sched_setaffinity}} {{The Linux Kernel/man|2|sched_getaffinity}} – set and get a thread's CPU affinity mask
:: ↪ {{The Linux Kernel/id|sched_setaffinity}}
: {{The Linux Kernel/id|set_cpus_allowed_ptr}} – common kernel function to change a task's affinity mask
: {{The Linux Kernel/include|linux/cpu_rmap.h}} – CPU affinity reverse-map support
: {{The Linux Kernel/include|linux/cpumask_types.h}}
:: struct cpumask, {{The Linux Kernel/id|cpumask_t}} – CPUs bitmap, can be very big
:: {{The Linux Kernel/id|cpumask_var_t}} – type for local cpumask variable, see {{The Linux Kernel/id|alloc_cpumask_var}}, {{The Linux Kernel/id|free_cpumask_var}}.
: {{The Linux Kernel/include|linux/cpumask.h}} – Cpumasks provide a bitmap suitable for representing the set of CPU's in a system, one bit position per CPU number
:: {{The Linux Kernel/id|for_each_possible_cpu}}
:: {{The Linux Kernel/id|num_online_cpus}}
:: {{The Linux Kernel/id|cpumask_set_cpu}}
:: {{The Linux Kernel/id|cpumask_test_cpu}}
:: {{The Linux Kernel/id|for_each_cpu}}
⚙️ Internals
: {{The Linux Kernel/id|cpus_mask}} – affinity of {{The Linux Kernel/id|task_struct}}
: {{The Linux Kernel/id|cpus_allowed}} – affinity of {{The Linux Kernel/id|cpuset}}
📚 Further reading
: {{w|Processor affinity}}
: {{w|Affinity mask}}
==== CPU hotplug ====
CPU hotplugging in Linux refers to the ability to dynamically add or remove CPUs from the system without needing a reboot.
This feature is crucial in environments requiring high availability and resource flexibility, such as data centers, virtualized systems, and systems that use power management aggressively.
🗝️ Acronyms
: BP – Bootstrap Processor
: AP – Application Processor
⚲ API
: /sys/devices/system/cpu/cpu*/online
: /sys/devices/system/cpu/cpu*/hotplug/
: {{The Linux Kernel/include|linux/cpu.h}}
:: {{The Linux Kernel/id|add_cpu}} ...
: {{The Linux Kernel/include|linux/cpuhotplug.h}}
:: {{The Linux Kernel/id|cpuhp_state}} – CPU hotplug states
:: {{The Linux Kernel/id|cpuhp_setup_state}} ... – setups hotplug state callbacks
::: {{The Linux Kernel/id|cpuhp_setup_state_multi}}
::: {{The Linux Kernel/id|cpuhp_setup_state_nocalls}}
: {{The Linux Kernel/include|linux/cpuhplock.h}} – CPU hotplug locking
:: {{The Linux Kernel/id|cpus_read_lock}} ...
:: {{The Linux Kernel/id|remove_cpu}} ...
⚙️ Internals
: {{The Linux Kernel/source|kernel/cpu.c}} – CPU hotplug state machine
:: {{The Linux Kernel/id|cpuhp_state}} – from CPUHP_OFFLINE to CPUHP_AP_ACTIVE and CPUHP_ONLINE.
:: {{The Linux Kernel/id|cpuhp_hp_states}}
:: {{The Linux Kernel/id|boot_cpu_hotplug_init}}
:: {{The Linux Kernel/id|cpuhp_threads_init}}
:: ... {{The Linux Kernel/id|cpuhp_invoke_callback_range}} ...
: {{The Linux Kernel/source|kernel/irq/cpuhotplug.c}} – IRQ migration on CPU hotunplug
: {{The Linux Kernel/source|drivers/base/cpu.c}} – CPU subsystem support
:: {{The Linux Kernel/id|cpu_dev_init}}
::: ... {{The Linux Kernel/id|cpu_subsys_online}}
: {{The Linux Kernel/include|trace/events/cpuhp.h}}
: {{The Linux Kernel/include|linux/cpuhplock.h}}
👁️ Examples
: {{The Linux Kernel/id|torture_onoff}}
: {{The Linux Kernel/source|tools/testing/selftests/sched_ext/hotplug.c}} – sched_ext CPU hotplug test
📖 References
: {{The Linux Kernel/doc|CPU hotplug in the Kernel|core-api/cpu_hotplug.html}}
:: {{The Linux Kernel/doc|Introduction|core-api/cpu_hotplug.html#introduction}}
:: {{The Linux Kernel/doc|Command Line Switches|core-api/cpu_hotplug.html#command-line-switches}}
:: {{The Linux Kernel/doc|CPU maps|core-api/cpu_hotplug.html#cpu-maps}}
:: {{The Linux Kernel/doc|Using CPU hotplug|core-api/cpu_hotplug.html#using-cpu-hotplug}}
:: {{The Linux Kernel/doc|The CPU hotplug coordination|core-api/cpu_hotplug.html#the-cpu-hotplug-coordination}}
:: {{The Linux Kernel/doc|The CPU hotplug API|core-api/cpu_hotplug.html#the-cpu-hotplug-api}}
::: {{The Linux Kernel/doc|CPU hotplug state machine|core-api/cpu_hotplug.html#cpu-hotplug-state-machine}}
::: {{The Linux Kernel/doc|CPU online/offline operations|core-api/cpu_hotplug.html#cpu-online-offline-operations}}
::: {{The Linux Kernel/doc|Allocating a state|core-api/cpu_hotplug.html#allocating-a-state}}
::: {{The Linux Kernel/doc|Setup of a CPU hotplug state|core-api/cpu_hotplug.html#setup-of-a-cpu-hotplug-state}}
::: {{The Linux Kernel/doc|Removal of a CPU hotplug state|core-api/cpu_hotplug.html#removal-of-a-cpu-hotplug-state}}
::: {{The Linux Kernel/doc|Multi-Instance state instance management|core-api/cpu_hotplug.html#multi-instance-state-instance-management}}
::: {{The Linux Kernel/doc|Examples|core-api/cpu_hotplug.html#examples}}
:: {{The Linux Kernel/doc|Testing of hotplug states|core-api/cpu_hotplug.html#testing-of-hotplug-states}}
:: {{The Linux Kernel/doc|Architecture’s requirements|core-api/cpu_hotplug.html#architecture-s-requirements}}
:: {{The Linux Kernel/doc|User Space Notification|core-api/cpu_hotplug.html#user-space-notification}}
:: {{The Linux Kernel/doc|Kernel Inline Documentations Reference|core-api/cpu_hotplug.html#kernel-inline-documentations-reference}}
🔨 [https://manpages.ubuntu.com/manpages/resolute/man1/stress-ng.1.html#:~:text=%2D%2Dcpu%2Donline stress-ng --cpu-online]
📚 Further reading
: {{The Linux Kernel/id|CONFIG_CPU_HOTPLUG_STATE_CONTROL}} – enables the ability to write incremental steps between "offline" and "online" states to the CPU's sysfs target file, allowing for more granular control of state transitions.
:: {{The Linux Kernel/id|target_store}}: {{The Linux Kernel/id|cpu_up}}/{{The Linux Kernel/id|cpu_down}}
: [https://lore.kernel.org/lkml/?q=cpuhotplug+OR+cpuhp cpuhotplug, cpuhp @LKML]
==== CPU isolation ====
CPU isolation ensures that specific tasks run on dedicated CPUs, reducing contention and latency.
'''Housekeeping''' CPUs refer to the CPUs that are reserved for various '''system''' tasks. See {{The Linux Kernel/id|hk_type}}.
'''Isolated''' CPUs are dedicated to '''real-time''' applications, such as DPDK.
⚲ API
: /sys/devices/system/cpu/isolated
: /sys/devices/system/cpu/nohz_full
: [https://docs.kernel.org/admin-guide/cgroup-v2.html#:~:text=cpuset.cpus.isolated /sys/fs/cgroup/cpuset.cpus.isolated]
: [https://docs.kernel.org/admin-guide/cgroup-v2.html#:~:text=Partition%20root%20without%20load%20balancing /sys/fs/cgroup/.../cpuset.cpus.partition]
: {{The Linux Kernel/include|linux/sched/isolation.h}}
:: {{The Linux Kernel/id|hk_type}} – housekeeping type
:: {{The Linux Kernel/id|housekeeping_cpumask}} – returns CPUs available for housekeeping of a given type
:: {{The Linux Kernel/id|cpu_is_isolated}}
: {{The Linux Kernel/include|linux/cpuset.h}} – cpuset interface
: {{The Linux Kernel/man|7|cpuset}} – confine processes to processor and memory node subsets
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_CPU_ISOLATION}}
:: {{The Linux Kernel/source|kernel/sched/isolation.c}} – housekeeping CPU management
::: {{The Linux Kernel/id|housekeeping_init}}, {{The Linux Kernel/id|housekeeping_update}}
: {{The Linux Kernel/id|CONFIG_CPUSETS}}
:: {{The Linux Kernel/source|kernel/cgroup/cpuset.c}} – cpuset cgroup controller
::: {{The Linux Kernel/id|cpuset_init}}
::: {{The Linux Kernel/id|cpuset_init_smp}}
::: {{The Linux Kernel/id|isolated_cpus}}
::: {{The Linux Kernel/id|partition_xcpus_add}}, {{The Linux Kernel/id|partition_xcpus_del}}
📖 References
: {{The Linux Kernel/doc|CPU lists in command-line parameters|admin-guide/kernel-parameters.html#cpu-lists}}
:: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=nohz_full= '''nohz_full'''] clears housekeeping.{{The Linux Kernel/id|cpumasks}} for tick, wq, timer, rcu, misc, and kthread in {{The Linux Kernel/id|housekeeping_nohz_full_setup}}
:: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=isolcpus '''isolcpus'''] clears housekeeping.{{The Linux Kernel/id|cpumasks}} for [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=domain%20isolation domain] (by default), [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=nohz nohz], and [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=managed_irq managed_irq] in {{The Linux Kernel/id|housekeeping_isolcpus_setup}}
: {{The Linux Kernel/doc|Housekeeping|core-api/housekeeping.html}}
: {{The Linux Kernel/doc|NO_HZ: Reducing Scheduling-Clock Ticks|timers/no_hz.html}}
: {{The Linux Kernel/doc|CPUSETS of cgroup v2|admin-guide/cgroup-v2.html#cpuset}}
: {{The Linux Kernel/doc|CPUSETS of cgroup v1|admin-guide/cgroup-v1/cpusets.html}}
📚 Further reading
: [https://www.youtube.com/watch?v=1lomUhSS82s CPU Isolation state of the art, LPC'23]
: [https://lpc.events/event/19/contributions/2219/ CPU Isolation and IPI interference, LPC'25]
: [https://www.suse.com/c/cpu-isolation-introduction-part-1/ CPU Isolation]
: [https://lore.kernel.org/lkml/?q=isolcpus isolcpus @LKML]
: [https://lore.kernel.org/lkml/?q=housekeeping housekeeping @LKML]
: [https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#explicitly-reserved-cpu-list Explicitly Reserved CPU List, Kubernetes Documentation]
: [https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cpu-partitioning/start CPU Partitioning]
: {{The Linux Kernel/doc|Scheduler Domains|scheduler/sched-domains.html}} – the Scheduler balances CPUs (scheduling groups) within a sched domain
: [https://lore.kernel.org/lkml/?q=nohz_full nohz_full @LKML]
💾 Historical since v7.0
: {{The Linux Kernel/id|cpuset_cpu_is_isolated}} – removed, use {{The Linux Kernel/id|cpu_is_isolated}} instead
=== Runtime code patching ===
The kernel patches its own machine code at boot or runtime to optimize hot paths.
Static keys patch a {{w|NOP_(code)|NOP}} to a jump (or vice versa); static calls patch indirect calls to direct calls; alternatives replace instructions based on CPU features.
⚲ API
: {{The Linux Kernel/include|linux/jump_label.h}} – static keys
:: {{The Linux Kernel/id|DEFINE_STATIC_KEY_FALSE}} – define a key, initially false
:: {{The Linux Kernel/id|static_branch_unlikely}} – zero-cost branch check (NOP when key is false)
:: {{The Linux Kernel/id|static_branch_enable}} – patch all sites to take the branch (expensive, rare use)
: {{The Linux Kernel/include|linux/static_call.h}} – static calls
:: {{The Linux Kernel/id|DEFINE_STATIC_CALL}} – define a call site with initial target function
:: {{The Linux Kernel/id|static_call}} – invoke the patched direct call
:: {{The Linux Kernel/id|static_call_update}} – change target function, patch all sites
: {{The Linux Kernel/source|arch/x86/include/asm/alternative.h}} – alternatives
:: {{The Linux Kernel/id|ALTERNATIVE}} – replace instructions at boot based on CPU features
:: {{The Linux Kernel/source|arch/x86/include/asm/cpufeatures.h}} – X86_FEATURE_* flags
⚙️ Internals
: {{The Linux Kernel/id|CONFIG_JUMP_LABEL}}
:: {{The Linux Kernel/source|kernel/jump_label.c}} – static key patching core
:: {{The Linux Kernel/source|arch/x86/kernel/jump_label.c}} – x86 static key patching
: {{The Linux Kernel/id|CONFIG_HAVE_STATIC_CALL}}
:: {{The Linux Kernel/source|kernel/static_call_inline.c}} – static call core
:: {{The Linux Kernel/source|arch/x86/kernel/static_call.c}} – x86 static call patching
: {{The Linux Kernel/source|arch/x86/include/asm/alternative.h}} – runtime instruction patching
:: {{The Linux Kernel/source|arch/x86/kernel/alternative.c}} – x86 alternatives engine
👁 Examples
: {{The Linux Kernel/id|housekeeping_overridden}}
: {{The Linux Kernel/id|preempt_schedule}}
: tracepoints
📖 References
: {{The Linux Kernel/doc|Static Keys|staging/static-keys.html}}
: {{The Linux Kernel/doc|x86 CPU feature flags|arch/x86/cpuinfo.html}}
=== {{w|Memory barrier}}s ===
Memory barriers (MB) are synchronization mechanisms used to ensure proper ordering of memory operations in a SMP environment.
They play a crucial role in maintaining the consistency and correctness of data shared among different CPU cores or processors.
MBs prevent unexpected and potentially harmful reordering of memory access instructions by the compiler or CPU, which can lead to data corruption and race conditions in a concurrent software system.
⚲ API
: {{The Linux Kernel/man|2|membarrier}}
: {{The Linux Kernel/include|asm-generic/barrier.h}}
:: {{The Linux Kernel/id|mb}}, {{The Linux Kernel/id|rmb}}, {{The Linux Kernel/id|wmb}}
:: {{The Linux Kernel/id|smp_mb}}, {{The Linux Kernel/id|smp_rmb}}, {{The Linux Kernel/id|smp_wmb}}
⚙️ Internals
: {{The Linux Kernel/source|arch/x86/include/asm/barrier.h}} – x86 memory barrier instructions
: {{The Linux Kernel/source|kernel/sched/membarrier.c}} – membarrier system call
📖 References
: {{The Linux Kernel/doc|Memory barriers|core-api/wrappers/memory-barriers.html}}
=== States ===
C-states and P-states are features in modern CPUs designed to improve energy efficiency.
🗝️ Acronyms
: [https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/08_Processor_Configuration_and_Control/processor-power-states.html C-states] – CPU(?) states, aka idle states
: EPP – {{The Linux Kernel/doc|Energy Performance Preference|admin-guide/pm/amd-pstate.html#energy-performance-preference-epp-rw}}
: HWP – hardware-managed P-states, see [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=hwp_only hwp_only]
: [https://www.intel.com/content/www/us/en/docs/socwatch/user-guide/2020/p-state.html P-states] – Performance states, see CPU Power and frequency scaling
⚲ API
: [https://linux.die.net/man/1/cpupower cpupower]
📖 References
: {{The Linux Kernel/doc|Working-State Power Management|admin-guide/pm/working-state.html}}
: https://lwn.net/Kernel/Index/#Power_management
==== Idle ====
C-states, {{w|ACPI#Processor_states|power states}}:
: C0 – the operating state.
: C1 (aka Halt) – the processor is not executing instructions, but can return to an executing state instantaneously.
: C2 (aka Stop-Clock) – the processor maintains all software-visible state, but may take longer to wake up.
: C3 (aka Sleep) – takes longer to wake up.
: ...
⚲ API
: turbostat --show CPU --quiet -n 1 --interval 0.1 --show sysfs
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=idle= idle=]
: /dev/cpu_dma_latency – see {{The Linux Kernel/id|set_cpu_dma_latency}}
: C-states interfaces:
:: /sys/devices/system/cpu/cpuidle/
:: /sys/devices/system/cpu/cpu*/cpuidle/
:: {{The Linux Kernel/include|linux/cpuidle.h}} – a generic framework for CPU idle power management
:: {{The Linux Kernel/doc|intel_idle CPU Idle Time Management Driver|admin-guide/pm/intel_idle.html}}
: {{The Linux Kernel/include|linux/pm_qos.h}}
⚙️ Internals
: {{The Linux Kernel/source|drivers/cpuidle}} – CPU idle governors and drivers
: {{The Linux Kernel/source|kernel/power/qos.c}} – PM quality of service
:: {{The Linux Kernel/id|cpu_latency_qos_miscdev}} – implementation of /dev/cpu_dma_latency
📖 References
:: {{The Linux Kernel/doc|CPU Idle Time Management|admin-guide/pm/cpuidle.html}}
📚 Further reading
:: https://lwn.net/Kernel/Index/#Power_management-cpuidle
: {{The Linux Kernel/doc|PM Quality Of Service Interface|power/pm_qos_interface.html}}
==== Power and frequency ====
P-states, {{w|ACPI#Performance_state|performance states}}:
: P0 – maximum power and frequency
: Pn – less power and frequency
: ...
⚲ API
: Reliable measurement of actual CPU frequency
:: [https://manpages.debian.org/testing/linux-cpupower/turbostat.8.en.html turbostat] --quiet --show CPU,Bzy_MHz -n 1 --interval 0.1
::: Bzy_MHz – average clock rate while the CPU was not idle (ie. in "c0" state).
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=intel_pstate intel_pstate=]
:: {{The Linux Kernel/doc|Kernel Command Line Options for intel_pstate|admin-guide/pm/intel_pstate.html#kernel-command-line-options-for-intel-pstate}}
: [https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt#:~:text=cpufreq.default_governor cpufreq.default_governor=]
: P-states interfaces:
:: /sys/devices/system/cpu/cpufreq/
:: /sys/devices/system/cpu/cpu*/cpufreq/
::: scaling_cur_freq – unreliable assumption on CPU frequency
:: /sys/devices/system/cpu/intel_pstate/
:: {{The Linux Kernel/include|linux/cpufreq.h}}
:: {{The Linux Kernel/include|linux/sched/cpufreq.h}} – interface between cpufreq drivers and the scheduler
⚙️ Internals
: {{The Linux Kernel/source|drivers/cpufreq}} – CPU frequency scaling drivers
:: {{The Linux Kernel/id|intel_pstate}}
:: {{The Linux Kernel/id|acpi_cpufreq_driver}}
: {{The Linux Kernel/source|kernel/sched/cpufreq_schedutil.c}} – implementation of cpufreq.default_governor=schedutil
: {{The Linux Kernel/source|arch/x86/kernel/cpu/intel_epb.c}} – Intel Performance and Energy Bias Hint support
📖 References
: {{The Linux Kernel/doc|CPU Performance Scaling|admin-guide/pm/cpufreq.html}}
: {{The Linux Kernel/doc|Device Frequency Scaling|driver-api/devfreq.html}}
: [https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt CPUFreq Governor]
: {{The Linux Kernel/doc|CPUFreq - CPU frequency and voltage scaling|cpu-freq}}
: {{The Linux Kernel/doc|Intel Performance and Energy Bias Hint|admin-guide/pm/intel_epb.html}}
: {{The Linux Kernel/doc|intel_pstate CPU Performance Scaling Driver|admin-guide/pm/intel_pstate.html}}
:: {{The Linux Kernel/doc|General Information|admin-guide/pm/intel_pstate.html#general-information}}
:: {{The Linux Kernel/doc|Operation Modes|admin-guide/pm/intel_pstate.html#operation-modes}}
::: {{The Linux Kernel/doc|Active Mode|admin-guide/pm/intel_pstate.html#active-mode}}
<!--
:::: {{The Linux Kernel/doc|Active Mode With HWP|admin-guide/pm/intel_pstate.html#active-mode-with-hwp}}
::::: {{The Linux Kernel/doc|HWP + performance|admin-guide/pm/intel_pstate.html#hwp-performance}}
::::: {{The Linux Kernel/doc|HWP + powersave|admin-guide/pm/intel_pstate.html#hwp-powersave}}
:::: {{The Linux Kernel/doc|Active Mode Without HWP|admin-guide/pm/intel_pstate.html#active-mode-without-hwp}}
::::: {{The Linux Kernel/doc|performance|admin-guide/pm/intel_pstate.html#performance}}
::::: {{The Linux Kernel/doc|powersave|admin-guide/pm/intel_pstate.html#powersave}}
-->
::: {{The Linux Kernel/doc|Passive Mode|admin-guide/pm/intel_pstate.html#passive-mode}}
:: {{The Linux Kernel/doc|Turbo P-states Support|admin-guide/pm/intel_pstate.html#turbo-p-states-support}}
:: {{The Linux Kernel/doc|Processor Support|admin-guide/pm/intel_pstate.html#processor-support}}
:: {{The Linux Kernel/doc|Support for Hybrid Processors|admin-guide/pm/intel_pstate.html#support-for-hybrid-processors}}
::: {{The Linux Kernel/doc|Hybrid Processors with SMT|admin-guide/pm/intel_pstate.html#hybrid-processors-with-smt}}
::: {{The Linux Kernel/doc|Capacity-Aware Scheduling Support|admin-guide/pm/intel_pstate.html#capacity-aware-scheduling-support}}
::: {{The Linux Kernel/doc|Energy-Aware Scheduling Support|admin-guide/pm/intel_pstate.html#energy-aware-scheduling-support}}
:: {{The Linux Kernel/doc|User Space Interface in sysfs|admin-guide/pm/intel_pstate.html#user-space-interface-in-sysfs}}
::: {{The Linux Kernel/doc|Global Attributes|admin-guide/pm/intel_pstate.html#global-attributes}}
::: {{The Linux Kernel/doc|Interpretation of Policy Attributes|admin-guide/pm/intel_pstate.html#interpretation-of-policy-attributes}}
::: {{The Linux Kernel/doc|Coordination of P-State Limits|admin-guide/pm/intel_pstate.html#coordination-of-p-state-limits}}
::: {{The Linux Kernel/doc|Energy vs Performance Hints|admin-guide/pm/intel_pstate.html#energy-vs-performance-hints}}
:: {{The Linux Kernel/doc|intel_pstate vs acpi-cpufreq|admin-guide/pm/intel_pstate.html#intel-pstate-vs-acpi-cpufreq}}
:: {{The Linux Kernel/doc|Kernel Command Line Options for intel_pstate|admin-guide/pm/intel_pstate.html#kernel-command-line-options-for-intel-pstate}}
:: {{The Linux Kernel/doc|Diagnostics and Tuning|admin-guide/pm/intel_pstate.html#diagnostics-and-tuning}}
::: {{The Linux Kernel/doc|Trace Events|admin-guide/pm/intel_pstate.html#trace-events}}
::: {{The Linux Kernel/doc|ftrace|admin-guide/pm/intel_pstate.html#ftrace}}
<!-- end of intel_pstate.html -->
📚 Further reading
: https://lwn.net/Kernel/Index/#Power_management-Frequency_scaling
: [https://wiki.archlinux.org/title/CPU_frequency_scaling CPU frequency scaling]
: {{The Linux Kernel/ltp|kernel/device-drivers|cpufreq}}
: [https://www.thinkwiki.org/wiki/How_to_use_cpufrequtils How to use cpufrequtils]
:: [https://linux.die.net/man/1/cpufreq-info cpufreq-info]
:: [https://linux.die.net/man/1/cpufreq-set cpufreq-set]
: https://github.com/intel/power-optimization-library
: https://github.com/intel/kubernetes-power-manager
=== Architectures ===
Linux CPU architectures refer to the different types of central processing units (CPUs) that are compatible with the Linux operating system.
Linux is designed to run on a wide range of CPU architectures, which allows it to be utilized on various devices, from smartphones to servers and supercomputers.
Each architecture has its own unique features, advantages, and design considerations.
Architectures are classified by family (e.g. x86, ARM), {{w|Word (computer architecture)|word}} or {{w|Integer_(computer_science)#Long_integer|long int}} size (e.g. {{The Linux Kernel/id|CONFIG_32BIT}}, {{The Linux Kernel/id|CONFIG_64BIT}}).
Some functions with different implementations for different CPU architectures:
: {{The Linux Kernel/id|do_boot_cpu}} > {{The Linux Kernel/id|start_secondary}} > {{The Linux Kernel/id|cpu_init}}
: {{The Linux Kernel/id|setup_arch}}, {{The Linux Kernel/id|start_thread}}, {{The Linux Kernel/id|get_current}}, {{Linux ident|current}}
⚲ API
: {{The Linux Kernel/id|BITS_PER_LONG}}, {{The Linux Kernel/id|__BITS_PER_LONG}},
⚙️ Arch internals
: {{The Linux Kernel/source|arch}} – architecture-specific code
:: '''x86'''
::: {{The Linux Kernel/id|CONFIG_X86}}
::: {{The Linux Kernel/source|arch/x86}} – x86 architecture support
::: {{The Linux Kernel/source|drivers/platform/x86}} – x86 platform drivers
::: https://lwn.net/Kernel/Index/#Architectures-x86
::: {{The Linux Kernel/man|1|perf-intel-pt}} – support for Intel Processor Trace within perf
:: '''ARM'''
::: {{The Linux Kernel/id|CONFIG_ARM}}
::: {{The Linux Kernel/source|arch/arm}}, {{The Linux Kernel/doc|ARM Architecture|arch/arm}}
::: https://lwn.net/Kernel/Index/#Architectures-ARM
::: {{The Linux Kernel/source|arch/arm64}}, {{The Linux Kernel/doc|ARM64 Architecture|arm64}}
: [https://0xax.gitbooks.io/linux-insides/content/Initialization/linux-initialization-5.html architecture-specific initialization]
📖 References
: {{The Linux Kernel/doc|CPU Architectures|arch}}
:: {{The Linux Kernel/doc|x86-specific|arch/x86}}
::: {{The Linux Kernel/doc|x86_64 Support|arch/x86/x86_64}}
{{BookCat}}
99tj5r92kn4ehggu9iag6c6vhyrvqwh
Analytic Combinatorics/Cauchy's coefficient formula and Cauchy's inequality
0
479093
4641496
4626713
2026-06-28T13:38:25Z
Dom walden
3209423
/* Contour integration */
4641496
wikitext
text/x-wiki
== Introduction ==
Two important techniques we use in analytic combinatorics are Cauchy's coefficient formula and Cauchy's inequality.
== Cauchy's coefficient formula ==
=== Contour integration ===
Because a complex number has two components, real and imaginary, complex integration involves integrating around a curve in the two-dimensional plane. This is called '''contour integration'''.
We denote this:
:<math>\int_C f(z) dz</math>
where <math>C</math> denotes the contour.
It is not necessary to know how to compute contour integrals in order to understand the later material in this book, but it is useful to know a few properties of contour integration.
One property of an analytic function is that when performing contour integration on a ''closed'' contour <math>C</math> we can continuously deform the contour <math>C</math> into another ''closed'' contour <math>C^'</math> without changing the value of the integral (as long as in deforming the contour we do not pass through any singularities).<ref>Lang 1999, pp. 116-117.</ref>
Another property, called '''Cauchy's theorem''', states that if <math>f</math> is [[Analytic_Combinatorics/Cauchy-Hadamard_theorem#Convergence|analytic]] (i.e. has no singularities) inside and on the closed contour <math>C</math> then
:<math>\int_C f(z) dz = 0</math>.<ref> Titchmarsh 1939, pp. 75.</ref>
A final property states that, if <math>C</math> is any contour and <math>C'</math> is the same contour but going in the opposite direction,
:<math>\int_{C'} f(z) dz = - \int_C f(z) dz</math>.<ref> Titchmarsh 1939, pp. 73.</ref>
=== Cauchy's integral formula ===
Cauchy's integral formula states:<ref>Titchmarsh 1939, pp. 80-81.</ref>
:<math>f(z_0) = \frac{1}{2 \pi i} \int_C f(z) \frac{dz}{z - z_0}</math>
where <math>C</math> is a contour, <math>z_0</math> is a point inside <math>C</math> and <math>f(z)</math> is [[Analytic_Combinatorics/Cauchy-Hadamard_theorem_and_Cauchy's_inequality#Analytic_functions|analytic]] on and inside the contour.
'''Proof:''' Because <math>f(z)</math> is analytic, we can replace the integral around <math>C</math> with a contour <math>\gamma</math> with centre <math>z_0</math> and radius <math>\rho</math>
:<math>\frac{1}{2 \pi i} \int_C f(z) \frac{dz}{z - z_0} = \frac{1}{2 \pi i} \int_\gamma f(z) \frac{dz}{z - z_0}</math>
As <math>f(z)</math> is analytic it is also continuous. This means for any <math>\epsilon > 0</math> there exists a <math>\delta > 0</math> such that <math>|z - z_0| < \delta \implies |f(z) - f(z_0)| < \epsilon</math>. We can do this by setting <math>\rho \leq \delta</math>.
:<math>\int_\gamma f(z) \frac{dz}{z - z_0} = f(z_0) \int_\gamma \frac{dz}{z - z_0} + \int_\gamma \frac{f(z) - f(z_0)}{z - z_0} dz</math>
:<math>f(z_0) \int_\gamma \frac{dz}{z - z_0} = 2 \pi i f(z_0)</math>
:<math>\int_\gamma \frac{f(z) - f(z_0)}{z - z_0} dz \leq \frac{\epsilon}{\rho} 2 \pi \rho = 2 \pi \epsilon</math>
Finally,
:<math>\frac{1}{2 \pi i} \int_C f(z) \frac{dz}{z - z_0} = \frac{1}{2 \pi i} \int_\gamma f(z) \frac{dz}{z - z_0} = \frac{1}{2 \pi i} (2 \pi i f(z_0) + 2 \pi \epsilon) = f(z_0)</math> as <math>\epsilon \to 0</math>.
=== Taylor series ===
If <math>f(z)</math> is analytic inside and on a contour <math>C</math>, the Taylor series expansion of <math>f(z)</math> around the point <math>z_0</math> inside <math>C</math>:
:<math>f(z) = f(z_0) + f'(z_0) (z - z_0) + \frac{f''(z_0) (z - z_0)^2}{2!} + \cdots</math>
=== Cauchy's coefficient formula ===
Cauchy's coefficient formula states that:
:<math>a_n = \frac{1}{2 \pi i} \int_C f(z) \frac{dz}{z^{n+1}}</math>
'''Proof:''' Cauchy's integral formula states:
:<math>f(z_0) = \frac{1}{2 \pi i} \int_C f(z) \frac{dz}{z - z_0}</math>
If you differentiate both sides with respect to <math>z_0</math> <math>n</math> times, you get:
:<math>\frac{f^{(n)}(z_0)}{n!} = \frac{1}{2 \pi i} \int_C f(z) \frac{dz}{(z - z_0)^{n+1}}</math>
The Taylor series expansion of <math>f(z)</math> around <math>0</math>:
:<math>f(z) = f(0) + f'(0)z + \frac{f''(0)z^2}{2!} + \cdots</math>
Therefore:
:<math>a_n = \frac{f^{(n)}(0)}{n!} = \frac{1}{2 \pi i} \int_C f(z) \frac{dz}{z^{n+1}}</math>
== Cauchy's inequality ==
=== Theorem ===
Theorem due to Titchmarsh<ref>Titchmarsh 1939, pp. 84.</ref>.
If <math>R</math> is the radius of convergence of <math>f(z)</math>, for all <math>n \geq 0</math> and <math>0 < r < R</math>
:<math>|a_n| \leq \frac{\max_{|z| = r} |f(z)|}{r^n}</math>
=== Proof ===
Proof due to Titchmarsh<ref>Titchmarsh 1939, pp. 84.</ref>.
By Cauchy's coefficient formula:
:<math>a_n = \frac{1}{2 \pi i} \int_{|z| = r} f(z) \frac{dz}{z^{n+1}}</math>
We have<ref>Titchmarsh 1939, pp. 74.</ref>:
:<math>|a_n| = \left|\frac{1}{2 \pi i} \int_{|z| = r} f(z) \frac{dz}{z^{n+1}}\right| = \frac{1}{2 \pi i} \int_{|z| = r} |f(z)| \frac{dz}{z^{n+1}}</math>
and
:<math>\int_{|z| = r} |f(z)| dz \leq \max_{|z| = r} |f(z)| 2 \pi r</math>
Therefore:
:<math>|a_n| = \frac{1}{2 \pi i} \int_{|z| = r} |f(z)| \frac{dz}{z^{n+1}} \leq \frac{1}{2 \pi} \max_{|z| = r} |f(z)| \frac{2 \pi r}{r^{n+1}} = \frac{\max_{|z| = r} |f(z)|}{r^n}</math>
Pictorially, we are estimating the contour integral by taking <math>|f(z)|</math> always at its maximum around the entire contour, shown by the green ring below.
[[File:Pictorial_representation_of_the_Cauchy_inequality.png|400px]]
== Notes ==
{{Reflist}}
== References ==
* {{cite book | last=Lang | first=Serge | title=Complex Analysis | edition=4th | publisher=Springer Science+Business Media, LLC | year=1999 }}
* {{cite book | last=Titchmarsh | first=E. C. | title=The Theory of Functions | edition=2nd | publisher=Oxford University Press | year=1939 }}
{{Bookcat}}
pfb0smy29gz1k2iy6qj8rqa7lwsq4yl
User:Dom walden/Multivariate Analytic Combinatorics/Introduction
2
480524
4641512
4641430
2026-06-28T14:37:05Z
Dom walden
3209423
/* In one variable */
4641512
wikitext
text/x-wiki
== In one variable ==
We give yet another proof of a result from our first part, very similar to [[Analytic_Combinatorics/Meromorphic_Functions_Residue_Method]] but using more complicated, but more generalisable, methods.
We have a domain, a complex plane with singularities at <math display="inline">z_0, z_1, \cdots, z_d</math>. Each of these singularities form part of our stratified singular variety <math display="inline">\mathcal{V} = \{ z_0, z_1, \cdots, z_d \}</math>.
We have a height function <math display="inline">h</math>, which we define arbitrarily as the distance from the origin. When we restrict <math display="inline">h</math> to one of the strata <math display="inline">z_i</math>, its derivative is zero. Where this happens is called a critical point.
We have an integral around a contour which we want to estimate, the Cauchy coefficient formula.
== Outline of the multivariate method ==
The technique in the case of generating functions of several variables is much like the case in the [[Analytic_Combinatorics/Meromorphic_Functions_Residue_Method|residue method]], where the asymptotics of coefficients is determined by its singular points.
In chapter 1, we give some background knowledge of complex analysis and generating functions in several variables. We present the several variable version of Cauchy's coefficient formula, where the contour of integration is a small torus around the origin (see below). We describe the domain of convergence and why it is more complicated in the several variable case.
[picture of T?]
In chapter 2, we describe the complement of our domain of integration, called the singular variety of the generating function. We describe different types of singular variety, how to decompose them using Whitney stratification and how to work out their critical points.
[picture of variety?]
In chapter 3, we use Morse theory to show it is possible to replace our domain of convergence with an equivalent domain which will be more convenient, using the concept of homotopy. This more convenient domain is made of cells around critical points.
[picture of CW-complex?]
We show that our torus of integration, as a sub-domain of the domain of convergence, is equivalent to a linear combination of these cells around critical points.
[picture of linear combination?]
Each cell around a critical point is one of four types, each of
which has its own asymptotic estimate:
# A smooth point, explained in chapter 4
# A multiple or arrangement point, which can be transverse or not, both explained in chapter 5
# A cone point, explained in chapter 6
Finally, we work out exactly which linear combination of these critical points to use in our final estimate...
my19xdc9uratzej01urwlhg2n3geifa
Analytic Combinatorics/Meromorphic Functions Residue Method
0
480968
4641493
4636004
2026-06-28T13:28:31Z
Dom walden
3209423
/* Proof */
4641493
wikitext
text/x-wiki
== Introduction ==
Armed with our new understanding of how we might use contour integration to find the estimates we want, we can give a new proof of our results for [[Analytic_Combinatorics/Meromorphic_Functions|meromorphic functions]].
== Theorem ==
We restate the theorem from [[Analytic_Combinatorics/Meromorphic_Functions#Theorem|that chapter]]. If <math>h(z) = \frac{f(z)}{g(z)}</math> is a meromorphic function with pole singularities <math>z_0, z_1, \cdots, z_d</math> of orders <math>m_0, m_1, \cdots, m_d</math> respectively where <math>z_0</math> has a modulus strictly smaller than all the others, then
:<math>[z^n]h(z) \sim \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} a^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} a^{-n-m_d}</math>.
== Proof ==
By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_coefficient_formula_2|Cauchy's coefficient formula]], if <math>\gamma_0</math> is a small circle around the origin that does not contain a singularity of <math>h(z)</math>, then
:<math>[z^n]h(z) = \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz</math>.
[[File:Demonstrating univariate residues with contour around origin.png|400px]]
This is what we want to estimate.
Draw another circle <math>\gamma_R</math> centered at the origin but of a larger radius <math>R</math>, big enough to encompass all singularities in its interior. By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_inequality|Cauchy's inequality]],
:<math>\int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz = \frac{\max_{|z| = R} |h(z)|}{R^n} = O(R^{-n})</math>
which can be made arbitrarily small by making <math>R</math> arbitrarily big.
[[File:Demonstrating univariate residues with contour around origin and contour of larger radius.png|400px]]
For each singularity, draw small circles <math>\gamma_{z_k}</math> centered at each <math>z_k</math>.
[[File:Demonstrating_univariate_residues_with_contour_around_origin,_contour_of_larger_radius_and_contours_around_each_singularity.png|400px]]
We construct a single contour of integration <math>\gamma</math> out of our circles as such:
* starting from some point on <math>\gamma_R</math> and travelling anti-clockwise
* for each <math>\gamma_{z_k}</math> and <math>\gamma_0</math>
** travelling along a straight-line <math>\lambda_{z_k}, \lambda_0</math> which joins <math>\gamma_R</math> to our small circle
** travelling clockwise all the way around our small circle until we get back to where we first reached it
** travelling in the opposite direction along the same straight-line we got here
We do this until we ending up back where we started at the very beginning.
[[File:Demonstrating univariate residues with contour around origin, contour of larger radius, contours around each singularity and lines joining them all.png|400px]]
This is a closed contour whose interior contains no singularities. Therefore, [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|Cauchy's theorem]] tells us that
:<math>\begin{align}\frac{1}{2 \pi i} \int_\gamma \frac{h(z)}{z^{n+1}} dz &= \frac{1}{2 \pi i} \int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz + \cdots \\ &= 0.\end{align}</math>
Travelling in one direction along the lines <math>\lambda_{z_k}, \lambda_0</math> and back again cancels out (see the final property of [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|contour integration]]). So, removing them from the above equation and rearranging gives
:<math>\frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz = - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz + \cdots + O(R^{-n})</math>.
We can calculate <math>\frac{1}{2 \pi i} \int_{\gamma_s} \frac{h(z)}{z^{n+1}} dz</math> using the technique of residues. Using the [[Analytic_Combinatorics/Meromorphic_Functions#Laurent_series|Laurent expansion]] of <math>f</math>, we can write the integral around any of our circles
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz</math>.
For any <math>n \geq 0</math>, <math>(z - z_i)^n</math> does not have a singularity and, by Cauchy's theorem again,
:<math>\int_{\gamma_{z_i}} \sum_{n=0}^\infty a_n (z - z_i)^n dz = 0</math>.
For negative values of <math>n</math>, set <math>z - z_i = w</math> and switch to [[Analytic_Combinatorics/Cauchy-Hadamard_theorem#Complex_numbers|polar coordinates]], <math>w = re^{i\theta}</math>, <math>dw = ire^{i\theta} d\theta</math> and <math>w^n = r^n e^{in\theta}</math>. For any contour <math>C</math> enclosing <math>w = 0</math>, for <math>n = 1</math>
:<math>\int_C \frac{1}{w} dw = \int_0^{2\pi} \frac{1}{re^{i\theta}} ire^{i\theta} d\theta = \int_0^{2\pi} id\theta = 2\pi i</math>.<ref>Stroud 2003, pp. 883.</ref>
For <math>n > 1</math>
:<math>\begin{align}\int_C \frac{1}{w^n} dw &= \int_0^{2\pi} \frac{1}{r^n e^{in\theta}} ire^{i\theta} d\theta \\
&= \frac{i}{r^{n-1}} \int_0^{2\pi} e^{-i(n-1)\theta} d\theta \\
&= \frac{-1}{(n-1)r^{n-1}} \left[ e^{-i(n-1)\theta} \right]_0^{2\pi} \\
&= \frac{-1}{(n-1)r^{n-1}} (e^{-i(n-1)2\pi} - 1) \\
&= \frac{-1}{(n-1)r^{n-1}} (\cos(n-1)2\pi - i\sin(n-1)2\pi - 1) \\
&= 0 \end{align}</math>
because <math>\cos m 2\pi = 1</math> and <math>\sin m 2\pi = 0</math> for all integers <math>m > 0</math>.<ref>Stroud 2003, pp. 884.</ref>
Therefore, because all the terms in the above sum are zero except when <math>n = 1</math>,
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz = \frac{1}{2\pi i} \int_{\gamma_{z_i}} \frac{a_{-1}}{z - z_i} dz = a_{-1}</math>.<ref>Stroud 2003, pp. 923.</ref>
<math>a_{-1}</math> is called the '''residue''' of our function at <math>z_i</math>, which we denote
:<math>Res(h(z) z^{-n-1}; z_i)</math>
We can calculate the residue
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m-1)!} \frac{d^{m-1}}{dz^{m-1}} ((z - z_i)^m h(z)) \right)</math>.<ref>Stroud 2003, pp. 925.</ref>
Because <math>z_i</math> is a pole of order <math>m_i</math> then <math>g(z_i) = g^{(1)}(z_i) = \cdots = g^{(m_i-1)}(z_i) = 0</math> and so the Taylor expansion of <math>g</math> at <math>z_i</math> can be written
:<math>g(z_i) = \frac{g^{(m_i)}(z_i)}{m_i!} (z - z_i)^{m_i} + p(z) (z - z_i)^{m_i+1}</math>.
Therefore,
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m_i-1)!} \frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) \right)</math>.
To differentiate, we apply the product rule
:<math>\frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) = \sum_{k=0}^{m_i-1} \binom{m_i-1}{k} d^{(m_i-k-1)} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \right) d^{(k)} (z^{-n-1})</math>
The largest term in the sum on the right-hand side is
:<math>\frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \frac{d^{m_i-1}}{dz^{m_i-1}} z^{-n-1} = \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} (-n)^{m_i-1} z^{-n-m_i}</math>
Taking <math>z \to z_i</math> gives us
:<math>a_{-1} \sim \frac{m_i f(z_i)}{g^{(m_i)}(z_i)} (-n)^{m_i-1} {z_i}^{-n-m_i}</math>.
We calculate the residue of every pole to finally get our stated result<ref>Mishna 2020, pp. 96-97.</ref><ref>Pemantle, Wilson and Melczer 2024, pp. 81-82.</ref><ref>Flajolet and Sedgewick 2009, pp. 259.</ref>
:<math>\begin{align} h_n &= \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz \\
&= - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz - \cdots - \frac{1}{2 \pi i} \int_{\gamma_{z_d}} \frac{h(z)}{z^{n+1}} dz + O(R^{-n}) \\
&= - Res(h(z) z^{-n-1}; z_0) - Res(h(z) z^{-n-1}; z_1) - \cdots - Res(h(z) z^{-n-1}; z_d) + O(R^{-n}) \\
&= \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} z_1^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} z_d^{-n-m_d} + O(R^{-n}).\end{align}</math>
== Notes ==
{{Reflist}}
== References ==
* {{cite book | last1=Flajolet | first1=Philippe | last2=Sedgewick | first2=Robert | title=Analytic Combinatorics | publisher=Cambridge University Press | year=2009 | url=https://ac.cs.princeton.edu/home/AC.pdf }}
* {{cite book | last=Mishna | first=Marni | title=Analytic Combinatorics: A Multidimensional Approach | publisher=Taylor & Francis Group, LLC | year=2020 }}
* {{cite book | last1=Pemantle | first1=Robin | last2=Wilson | first2=Mark C. | last3=Melczer | first3=Stephen | title=Analytic Combinatorics in Several Variables | publisher=Cambridge University Press | year=2024 | edition=2nd | url=https://acsvproject.com/PemantleWilsonMelczer23.pdf }}
* {{cite book | last=Stroud | first=K. A. | title=Advanced Engineering Mathematics | edition=4th | publisher=Palgrave Macmillan | year=2003 }}
{{BookCat}}
b2tyui0ibr2msxa6vsff2983yib0mat
4641494
4641493
2026-06-28T13:29:16Z
Dom walden
3209423
/* Proof */
4641494
wikitext
text/x-wiki
== Introduction ==
Armed with our new understanding of how we might use contour integration to find the estimates we want, we can give a new proof of our results for [[Analytic_Combinatorics/Meromorphic_Functions|meromorphic functions]].
== Theorem ==
We restate the theorem from [[Analytic_Combinatorics/Meromorphic_Functions#Theorem|that chapter]]. If <math>h(z) = \frac{f(z)}{g(z)}</math> is a meromorphic function with pole singularities <math>z_0, z_1, \cdots, z_d</math> of orders <math>m_0, m_1, \cdots, m_d</math> respectively where <math>z_0</math> has a modulus strictly smaller than all the others, then
:<math>[z^n]h(z) \sim \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} a^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} a^{-n-m_d}</math>.
== Proof ==
By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_coefficient_formula_2|Cauchy's coefficient formula]], if <math>\gamma_0</math> is a small circle around the origin that does not contain a singularity of <math>h(z)</math>, then
:<math>[z^n]h(z) = \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz</math>.
[[File:Demonstrating univariate residues with contour around origin.png|400px]]
This is what we want to estimate.
Draw another circle <math>\gamma_R</math> centered at the origin but of a larger radius <math>R</math>, big enough to encompass all singularities in its interior. By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_inequality|Cauchy's inequality]],
:<math>\int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz = \frac{\max_{|z| = R} |h(z)|}{R^n} = O(R^{-n})</math>
which can be made arbitrarily small by making <math>R</math> arbitrarily big.
[[File:Demonstrating univariate residues with contour around origin and contour of larger radius.png|400px]]
For each singularity, draw small circles <math>\gamma_{z_k}</math> centered at each <math>z_k</math>.
[[File:Demonstrating_univariate_residues_with_contour_around_origin,_contour_of_larger_radius_and_contours_around_each_singularity.png|400px]]
We construct a single contour of integration <math>\gamma</math> out of our circles as such:
* starting from some point on <math>\gamma_R</math> and travelling anti-clockwise
* for each <math>\gamma_{z_k}</math> and <math>\gamma_0</math>
** travelling along a straight-line <math>\lambda_{z_k}, \lambda_0</math> which joins <math>\gamma_R</math> to our small circle
** travelling clockwise all the way around our small circle until we get back to where we first reached it
** travelling in the opposite direction along the same straight-line we got here
We do this until we ending up back where we started at the very beginning.
[[File:Demonstrating univariate residues with contour around origin, contour of larger radius, contours around each singularity and lines joining them all.png|400px]]
This is a closed contour whose interior contains no singularities. Therefore, [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|Cauchy's theorem]] tells us that
:<math>\begin{align}\frac{1}{2 \pi i} \int_\gamma \frac{h(z)}{z^{n+1}} dz &= \frac{1}{2 \pi i} \int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz + \cdots \\ &= 0.\end{align}</math>
Travelling in one direction along the lines <math>\lambda_{z_k}, \lambda_0</math> and back again cancels out (see the final property of [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|contour integration]]). So, removing them from the above equation and rearranging gives
:<math>\frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz = - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz + \cdots + O(R^{-n})</math>.
We can calculate <math>\frac{1}{2 \pi i} \int_{\gamma_s} \frac{h(z)}{z^{n+1}} dz</math> using the technique of residues. Using the [[Analytic_Combinatorics/Meromorphic_Functions#Laurent_series|Laurent expansion]] of <math>h</math>, we can write the integral around any of our circles
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz</math>.
For any <math>n \geq 0</math>, <math>(z - z_i)^n</math> does not have a singularity and, by Cauchy's theorem again,
:<math>\int_{\gamma_{z_i}} \sum_{n=0}^\infty a_n (z - z_i)^n dz = 0</math>.
For negative values of <math>n</math>, set <math>z - z_i = w</math> and switch to [[Analytic_Combinatorics/Cauchy-Hadamard_theorem#Complex_numbers|polar coordinates]], <math>w = re^{i\theta}</math>, <math>dw = ire^{i\theta} d\theta</math> and <math>w^n = r^n e^{in\theta}</math>. For any contour <math>C</math> enclosing <math>w = 0</math>, for <math>n = 1</math>
:<math>\int_C \frac{1}{w} dw = \int_0^{2\pi} \frac{1}{re^{i\theta}} ire^{i\theta} d\theta = \int_0^{2\pi} id\theta = 2\pi i</math>.<ref>Stroud 2003, pp. 883.</ref>
For <math>n > 1</math>
:<math>\begin{align}\int_C \frac{1}{w^n} dw &= \int_0^{2\pi} \frac{1}{r^n e^{in\theta}} ire^{i\theta} d\theta \\
&= \frac{i}{r^{n-1}} \int_0^{2\pi} e^{-i(n-1)\theta} d\theta \\
&= \frac{-1}{(n-1)r^{n-1}} \left[ e^{-i(n-1)\theta} \right]_0^{2\pi} \\
&= \frac{-1}{(n-1)r^{n-1}} (e^{-i(n-1)2\pi} - 1) \\
&= \frac{-1}{(n-1)r^{n-1}} (\cos(n-1)2\pi - i\sin(n-1)2\pi - 1) \\
&= 0 \end{align}</math>
because <math>\cos m 2\pi = 1</math> and <math>\sin m 2\pi = 0</math> for all integers <math>m > 0</math>.<ref>Stroud 2003, pp. 884.</ref>
Therefore, because all the terms in the above sum are zero except when <math>n = 1</math>,
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz = \frac{1}{2\pi i} \int_{\gamma_{z_i}} \frac{a_{-1}}{z - z_i} dz = a_{-1}</math>.<ref>Stroud 2003, pp. 923.</ref>
<math>a_{-1}</math> is called the '''residue''' of our function at <math>z_i</math>, which we denote
:<math>Res(h(z) z^{-n-1}; z_i)</math>
We can calculate the residue
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m-1)!} \frac{d^{m-1}}{dz^{m-1}} ((z - z_i)^m h(z)) \right)</math>.<ref>Stroud 2003, pp. 925.</ref>
Because <math>z_i</math> is a pole of order <math>m_i</math> then <math>g(z_i) = g^{(1)}(z_i) = \cdots = g^{(m_i-1)}(z_i) = 0</math> and so the Taylor expansion of <math>g</math> at <math>z_i</math> can be written
:<math>g(z_i) = \frac{g^{(m_i)}(z_i)}{m_i!} (z - z_i)^{m_i} + p(z) (z - z_i)^{m_i+1}</math>.
Therefore,
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m_i-1)!} \frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) \right)</math>.
To differentiate, we apply the product rule
:<math>\frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) = \sum_{k=0}^{m_i-1} \binom{m_i-1}{k} d^{(m_i-k-1)} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \right) d^{(k)} (z^{-n-1})</math>
The largest term in the sum on the right-hand side is
:<math>\frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \frac{d^{m_i-1}}{dz^{m_i-1}} z^{-n-1} = \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} (-n)^{m_i-1} z^{-n-m_i}</math>
Taking <math>z \to z_i</math> gives us
:<math>a_{-1} \sim \frac{m_i f(z_i)}{g^{(m_i)}(z_i)} (-n)^{m_i-1} {z_i}^{-n-m_i}</math>.
We calculate the residue of every pole to finally get our stated result<ref>Mishna 2020, pp. 96-97.</ref><ref>Pemantle, Wilson and Melczer 2024, pp. 81-82.</ref><ref>Flajolet and Sedgewick 2009, pp. 259.</ref>
:<math>\begin{align} h_n &= \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz \\
&= - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz - \cdots - \frac{1}{2 \pi i} \int_{\gamma_{z_d}} \frac{h(z)}{z^{n+1}} dz + O(R^{-n}) \\
&= - Res(h(z) z^{-n-1}; z_0) - Res(h(z) z^{-n-1}; z_1) - \cdots - Res(h(z) z^{-n-1}; z_d) + O(R^{-n}) \\
&= \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} z_1^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} z_d^{-n-m_d} + O(R^{-n}).\end{align}</math>
== Notes ==
{{Reflist}}
== References ==
* {{cite book | last1=Flajolet | first1=Philippe | last2=Sedgewick | first2=Robert | title=Analytic Combinatorics | publisher=Cambridge University Press | year=2009 | url=https://ac.cs.princeton.edu/home/AC.pdf }}
* {{cite book | last=Mishna | first=Marni | title=Analytic Combinatorics: A Multidimensional Approach | publisher=Taylor & Francis Group, LLC | year=2020 }}
* {{cite book | last1=Pemantle | first1=Robin | last2=Wilson | first2=Mark C. | last3=Melczer | first3=Stephen | title=Analytic Combinatorics in Several Variables | publisher=Cambridge University Press | year=2024 | edition=2nd | url=https://acsvproject.com/PemantleWilsonMelczer23.pdf }}
* {{cite book | last=Stroud | first=K. A. | title=Advanced Engineering Mathematics | edition=4th | publisher=Palgrave Macmillan | year=2003 }}
{{BookCat}}
fegnnm7qdbal3kr95ed5e9el1k3aqg2
4641495
4641494
2026-06-28T13:32:40Z
Dom walden
3209423
/* Theorem */
4641495
wikitext
text/x-wiki
== Introduction ==
Armed with our new understanding of how we might use contour integration to find the estimates we want, we can give a new proof of our results for [[Analytic_Combinatorics/Meromorphic_Functions|meromorphic functions]].
== Theorem ==
We restate the theorem from [[Analytic_Combinatorics/Meromorphic_Functions#Theorem|that chapter]]. If <math>h(z) = \frac{f(z)}{g(z)}</math> is a meromorphic function with pole singularities <math>z_0, z_1, \cdots, z_d</math> of orders <math>m_0, m_1, \cdots, m_d</math> respectively where <math>z_0</math> has a modulus strictly smaller than all the others, then
<math display="block">[z^n]h(z) \sim \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} z_1^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} z_d^{-n-m_d}.</math>
== Proof ==
By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_coefficient_formula_2|Cauchy's coefficient formula]], if <math>\gamma_0</math> is a small circle around the origin that does not contain a singularity of <math>h(z)</math>, then
:<math>[z^n]h(z) = \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz</math>.
[[File:Demonstrating univariate residues with contour around origin.png|400px]]
This is what we want to estimate.
Draw another circle <math>\gamma_R</math> centered at the origin but of a larger radius <math>R</math>, big enough to encompass all singularities in its interior. By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_inequality|Cauchy's inequality]],
:<math>\int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz = \frac{\max_{|z| = R} |h(z)|}{R^n} = O(R^{-n})</math>
which can be made arbitrarily small by making <math>R</math> arbitrarily big.
[[File:Demonstrating univariate residues with contour around origin and contour of larger radius.png|400px]]
For each singularity, draw small circles <math>\gamma_{z_k}</math> centered at each <math>z_k</math>.
[[File:Demonstrating_univariate_residues_with_contour_around_origin,_contour_of_larger_radius_and_contours_around_each_singularity.png|400px]]
We construct a single contour of integration <math>\gamma</math> out of our circles as such:
* starting from some point on <math>\gamma_R</math> and travelling anti-clockwise
* for each <math>\gamma_{z_k}</math> and <math>\gamma_0</math>
** travelling along a straight-line <math>\lambda_{z_k}, \lambda_0</math> which joins <math>\gamma_R</math> to our small circle
** travelling clockwise all the way around our small circle until we get back to where we first reached it
** travelling in the opposite direction along the same straight-line we got here
We do this until we ending up back where we started at the very beginning.
[[File:Demonstrating univariate residues with contour around origin, contour of larger radius, contours around each singularity and lines joining them all.png|400px]]
This is a closed contour whose interior contains no singularities. Therefore, [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|Cauchy's theorem]] tells us that
:<math>\begin{align}\frac{1}{2 \pi i} \int_\gamma \frac{h(z)}{z^{n+1}} dz &= \frac{1}{2 \pi i} \int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz + \cdots \\ &= 0.\end{align}</math>
Travelling in one direction along the lines <math>\lambda_{z_k}, \lambda_0</math> and back again cancels out (see the final property of [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|contour integration]]). So, removing them from the above equation and rearranging gives
:<math>\frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz = - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz + \cdots + O(R^{-n})</math>.
We can calculate <math>\frac{1}{2 \pi i} \int_{\gamma_s} \frac{h(z)}{z^{n+1}} dz</math> using the technique of residues. Using the [[Analytic_Combinatorics/Meromorphic_Functions#Laurent_series|Laurent expansion]] of <math>h</math>, we can write the integral around any of our circles
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz</math>.
For any <math>n \geq 0</math>, <math>(z - z_i)^n</math> does not have a singularity and, by Cauchy's theorem again,
:<math>\int_{\gamma_{z_i}} \sum_{n=0}^\infty a_n (z - z_i)^n dz = 0</math>.
For negative values of <math>n</math>, set <math>z - z_i = w</math> and switch to [[Analytic_Combinatorics/Cauchy-Hadamard_theorem#Complex_numbers|polar coordinates]], <math>w = re^{i\theta}</math>, <math>dw = ire^{i\theta} d\theta</math> and <math>w^n = r^n e^{in\theta}</math>. For any contour <math>C</math> enclosing <math>w = 0</math>, for <math>n = 1</math>
:<math>\int_C \frac{1}{w} dw = \int_0^{2\pi} \frac{1}{re^{i\theta}} ire^{i\theta} d\theta = \int_0^{2\pi} id\theta = 2\pi i</math>.<ref>Stroud 2003, pp. 883.</ref>
For <math>n > 1</math>
:<math>\begin{align}\int_C \frac{1}{w^n} dw &= \int_0^{2\pi} \frac{1}{r^n e^{in\theta}} ire^{i\theta} d\theta \\
&= \frac{i}{r^{n-1}} \int_0^{2\pi} e^{-i(n-1)\theta} d\theta \\
&= \frac{-1}{(n-1)r^{n-1}} \left[ e^{-i(n-1)\theta} \right]_0^{2\pi} \\
&= \frac{-1}{(n-1)r^{n-1}} (e^{-i(n-1)2\pi} - 1) \\
&= \frac{-1}{(n-1)r^{n-1}} (\cos(n-1)2\pi - i\sin(n-1)2\pi - 1) \\
&= 0 \end{align}</math>
because <math>\cos m 2\pi = 1</math> and <math>\sin m 2\pi = 0</math> for all integers <math>m > 0</math>.<ref>Stroud 2003, pp. 884.</ref>
Therefore, because all the terms in the above sum are zero except when <math>n = 1</math>,
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz = \frac{1}{2\pi i} \int_{\gamma_{z_i}} \frac{a_{-1}}{z - z_i} dz = a_{-1}</math>.<ref>Stroud 2003, pp. 923.</ref>
<math>a_{-1}</math> is called the '''residue''' of our function at <math>z_i</math>, which we denote
:<math>Res(h(z) z^{-n-1}; z_i)</math>
We can calculate the residue
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m-1)!} \frac{d^{m-1}}{dz^{m-1}} ((z - z_i)^m h(z)) \right)</math>.<ref>Stroud 2003, pp. 925.</ref>
Because <math>z_i</math> is a pole of order <math>m_i</math> then <math>g(z_i) = g^{(1)}(z_i) = \cdots = g^{(m_i-1)}(z_i) = 0</math> and so the Taylor expansion of <math>g</math> at <math>z_i</math> can be written
:<math>g(z_i) = \frac{g^{(m_i)}(z_i)}{m_i!} (z - z_i)^{m_i} + p(z) (z - z_i)^{m_i+1}</math>.
Therefore,
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m_i-1)!} \frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) \right)</math>.
To differentiate, we apply the product rule
:<math>\frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) = \sum_{k=0}^{m_i-1} \binom{m_i-1}{k} d^{(m_i-k-1)} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \right) d^{(k)} (z^{-n-1})</math>
The largest term in the sum on the right-hand side is
:<math>\frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \frac{d^{m_i-1}}{dz^{m_i-1}} z^{-n-1} = \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} (-n)^{m_i-1} z^{-n-m_i}</math>
Taking <math>z \to z_i</math> gives us
:<math>a_{-1} \sim \frac{m_i f(z_i)}{g^{(m_i)}(z_i)} (-n)^{m_i-1} {z_i}^{-n-m_i}</math>.
We calculate the residue of every pole to finally get our stated result<ref>Mishna 2020, pp. 96-97.</ref><ref>Pemantle, Wilson and Melczer 2024, pp. 81-82.</ref><ref>Flajolet and Sedgewick 2009, pp. 259.</ref>
:<math>\begin{align} h_n &= \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz \\
&= - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz - \cdots - \frac{1}{2 \pi i} \int_{\gamma_{z_d}} \frac{h(z)}{z^{n+1}} dz + O(R^{-n}) \\
&= - Res(h(z) z^{-n-1}; z_0) - Res(h(z) z^{-n-1}; z_1) - \cdots - Res(h(z) z^{-n-1}; z_d) + O(R^{-n}) \\
&= \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} z_1^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} z_d^{-n-m_d} + O(R^{-n}).\end{align}</math>
== Notes ==
{{Reflist}}
== References ==
* {{cite book | last1=Flajolet | first1=Philippe | last2=Sedgewick | first2=Robert | title=Analytic Combinatorics | publisher=Cambridge University Press | year=2009 | url=https://ac.cs.princeton.edu/home/AC.pdf }}
* {{cite book | last=Mishna | first=Marni | title=Analytic Combinatorics: A Multidimensional Approach | publisher=Taylor & Francis Group, LLC | year=2020 }}
* {{cite book | last1=Pemantle | first1=Robin | last2=Wilson | first2=Mark C. | last3=Melczer | first3=Stephen | title=Analytic Combinatorics in Several Variables | publisher=Cambridge University Press | year=2024 | edition=2nd | url=https://acsvproject.com/PemantleWilsonMelczer23.pdf }}
* {{cite book | last=Stroud | first=K. A. | title=Advanced Engineering Mathematics | edition=4th | publisher=Palgrave Macmillan | year=2003 }}
{{BookCat}}
l95n8k79m6da8xoxi34s28s3yi3vcms
4641497
4641495
2026-06-28T13:43:50Z
Dom walden
3209423
/* Proof */
4641497
wikitext
text/x-wiki
== Introduction ==
Armed with our new understanding of how we might use contour integration to find the estimates we want, we can give a new proof of our results for [[Analytic_Combinatorics/Meromorphic_Functions|meromorphic functions]].
== Theorem ==
We restate the theorem from [[Analytic_Combinatorics/Meromorphic_Functions#Theorem|that chapter]]. If <math>h(z) = \frac{f(z)}{g(z)}</math> is a meromorphic function with pole singularities <math>z_0, z_1, \cdots, z_d</math> of orders <math>m_0, m_1, \cdots, m_d</math> respectively where <math>z_0</math> has a modulus strictly smaller than all the others, then
<math display="block">[z^n]h(z) \sim \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} z_1^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} z_d^{-n-m_d}.</math>
== Proof ==
By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_coefficient_formula_2|Cauchy's coefficient formula]], if <math>\gamma_0</math> is a small circle around the origin that does not contain a singularity of <math>h(z)</math>, then
:<math>[z^n]h(z) = \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz</math>.
[[File:Demonstrating univariate residues with contour around origin.png|400px]]
This is what we want to estimate.
Draw another circle <math>\gamma_R</math> centered at the origin but of a larger radius <math>R</math>, big enough to encompass all singularities in its interior. By [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Cauchy's_inequality|Cauchy's inequality]],
:<math>\int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz = \frac{\max_{|z| = R} |h(z)|}{R^n} = O(R^{-n})</math>
which can be made arbitrarily small by making <math>R</math> arbitrarily big.
[[File:Demonstrating univariate residues with contour around origin and contour of larger radius.png|400px]]
For each singularity, draw small circles <math>\gamma_{z_k}</math> centered at each <math>z_k</math>.
[[File:Demonstrating_univariate_residues_with_contour_around_origin,_contour_of_larger_radius_and_contours_around_each_singularity.png|400px]]
We construct a single contour of integration <math>\gamma</math> out of our circles as such:
* starting from some point on <math>\gamma_R</math> and travelling anti-clockwise
* for each <math>\gamma_{z_k}</math> and <math>\gamma_0</math>
** travelling along a straight-line <math>\lambda_{z_k}, \lambda_0</math> which joins <math>\gamma_R</math> to our small circle
** travelling clockwise all the way around our small circle until we get back to where we first reached it
** travelling in the opposite direction along the same straight-line we got here
We do this until we ending up back where we started at the very beginning.
[[File:Demonstrating univariate residues with contour around origin, contour of larger radius, contours around each singularity and lines joining them all.png|400px]]
This is a closed contour whose interior contains no singularities. Therefore, [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|Cauchy's theorem]] tells us that
:<math>\begin{align}\frac{1}{2 \pi i} \int_\gamma \frac{h(z)}{z^{n+1}} dz &= \frac{1}{2 \pi i} \int_{\gamma_R} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_0} \frac{h(z)}{z^{n+1}} dz + \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\lambda_{z_0}} \frac{h(z)}{z^{n+1}} dz + \cdots \\ &= 0.\end{align}</math>
Travelling in one direction along the lines <math>\lambda_{z_k}, \lambda_0</math> and back again cancels out (see the final property of [[Analytic_Combinatorics/Cauchy's_coefficient_formula_and_Cauchy's_inequality#Contour_integration|contour integration]]). So, removing them from the above equation and rearranging gives
:<math>\frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz = - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz + \cdots + O(R^{-n})</math>.
We can calculate <math>\frac{1}{2 \pi i} \int_{\gamma_s} \frac{h(z)}{z^{n+1}} dz</math> using the technique of residues. Using the [[Analytic_Combinatorics/Meromorphic_Functions#Laurent_series|Laurent expansion]] of <math>h</math>, we can write the integral around any of our circles
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz</math>.
For any <math>n \geq 0</math>, <math>(z - z_i)^n</math> does not have a singularity and, by Cauchy's theorem again,
:<math>\int_{\gamma_{z_i}} \sum_{n=0}^\infty a_n (z - z_i)^n dz = 0</math>.
For negative values of <math>n</math>, set <math>z - z_i = w</math> and switch to [[Analytic_Combinatorics/Cauchy-Hadamard_theorem#Complex_numbers|polar coordinates]], <math>w = re^{i\theta}</math>, <math>dw = ire^{i\theta} d\theta</math> and <math>w^n = r^n e^{in\theta}</math>. For any contour <math>C</math> enclosing <math>w = 0</math>, for <math>n = 1</math>
:<math>\int_C \frac{1}{w} dw = \int_0^{2\pi} \frac{1}{re^{i\theta}} ire^{i\theta} d\theta = \int_0^{2\pi} id\theta = 2\pi i</math>.<ref>Stroud 2003, pp. 883.</ref>
For <math>n > 1</math>
:<math>\begin{align}\int_C \frac{1}{w^n} dw &= \int_0^{2\pi} \frac{1}{r^n e^{in\theta}} ire^{i\theta} d\theta \\
&= \frac{i}{r^{n-1}} \int_0^{2\pi} e^{-i(n-1)\theta} d\theta \\
&= \frac{-1}{(n-1)r^{n-1}} \left[ e^{-i(n-1)\theta} \right]_0^{2\pi} \\
&= \frac{-1}{(n-1)r^{n-1}} (e^{-i(n-1)2\pi} - 1) \\
&= \frac{-1}{(n-1)r^{n-1}} (\cos(n-1)2\pi - i\sin(n-1)2\pi - 1) \\
&= 0 \end{align}</math>
because <math>\cos m 2\pi = 1</math> and <math>\sin m 2\pi = 0</math> for all integers <math>m > 0</math>.<ref>Stroud 2003, pp. 884.</ref>
Therefore, because all the terms in the above sum are zero except when <math>n = 1</math>,
:<math>\frac{1}{2\pi i} \int_{\gamma_{z_i}} \sum_{-\infty}^\infty a_n (z - z_i)^n dz = \frac{1}{2\pi i} \int_{\gamma_{z_i}} \frac{a_{-1}}{z - z_i} dz = a_{-1}</math>.<ref>Stroud 2003, pp. 923.</ref>
<math>a_{-1}</math> is called the '''residue''' of our function at <math>z_i</math>, which we denote
:<math>Res(h(z) z^{-n-1}; z_i)</math>
We can calculate the residue
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m-1)!} \frac{d^{m-1}}{dz^{m-1}} ((z - z_i)^m h(z)) \right)</math>.<ref>Stroud 2003, pp. 925.</ref>
Because <math>z_i</math> is a pole of order <math>m_i</math> then <math>g(z_i) = g^{(1)}(z_i) = \cdots = g^{(m_i-1)}(z_i) = 0</math> and so the Taylor expansion of <math>g</math> at <math>z_i</math> can be written
:<math>g(z_i) = \frac{g^{(m_i)}(z_i)}{m_i!} (z - z_i)^{m_i} + p(z) (z - z_i)^{m_i+1}</math>.
Therefore,
:<math>a_{-1} = \lim_{z \to z_i} \left( \frac{1}{(m_i-1)!} \frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) \right)</math>.
To differentiate, we apply the product rule
:<math>\frac{d^{m_i-1}}{dz^{m_i-1}} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} z^{-n-1} \right) = \sum_{k=0}^{m_i-1} \binom{m_i-1}{k} d^{(m_i-k-1)} \left( \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \right) d^{(k)} (z^{-n-1})</math>
The largest term in the sum on the right-hand side is
:<math>\frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} \frac{d^{m_i-1}}{dz^{m_i-1}} z^{-n-1} = \frac{f(z)}{\frac{g^{(m_i)}(z_i)}{m_i!} + p(z) (z - z_i)} (-n)^{m_i-1} z^{-n-m_i}</math>
Taking <math>z \to z_i</math> gives us
:<math>a_{-1} \sim \frac{m_i f(z_i)}{g^{(m_i)}(z_i)} (-n)^{m_i-1} {z_i}^{-n-m_i}</math>.
We calculate the residue of every pole to finally get our stated result<ref>Mishna 2020, pp. 96-97.</ref><ref>Pemantle, Wilson and Melczer 2024, pp. 81-82.</ref><ref>Flajolet and Sedgewick 2009, pp. 259.</ref>
:<math>\begin{align} h_n &= \frac{1}{2 \pi i} \int_{\gamma_0} \frac{h(z)}{z^{n+1}} dz \\
&= - \frac{1}{2 \pi i} \int_{\gamma_{z_0}} \frac{h(z)}{z^{n+1}} dz - \frac{1}{2 \pi i} \int_{\gamma_{z_1}} \frac{h(z)}{z^{n+1}} dz - \cdots - \frac{1}{2 \pi i} \int_{\gamma_{z_d}} \frac{h(z)}{z^{n+1}} dz + O(R^{-n}) \\
&= - Res(h(z) z^{-n-1}; z_0) - Res(h(z) z^{-n-1}; z_1) - \cdots - Res(h(z) z^{-n-1}; z_d) + O(R^{-n}) \\
&= \frac{m_0 f(z_0)}{g^{(m_0)}(z_0)} (-n)^{m_0} z_0^{-n-m_0} + \frac{m_1 f(z_1)}{g^{(m_1)}(z_1)} (-n)^{m_1} z_1^{-n-m_1} + \cdots + \frac{m_d f(z_d)}{g^{(m_d)}(z_d)} (-n)^{m_d} z_d^{-n-m_d} + O(R^{-n}).\end{align}</math>
== Notes ==
{{Reflist}}
== References ==
* {{cite book | last1=Flajolet | first1=Philippe | last2=Sedgewick | first2=Robert | title=Analytic Combinatorics | publisher=Cambridge University Press | year=2009 | url=https://ac.cs.princeton.edu/home/AC.pdf }}
* {{cite book | last=Mishna | first=Marni | title=Analytic Combinatorics: A Multidimensional Approach | publisher=Taylor & Francis Group, LLC | year=2020 }}
* {{cite book | last1=Pemantle | first1=Robin | last2=Wilson | first2=Mark C. | last3=Melczer | first3=Stephen | title=Analytic Combinatorics in Several Variables | publisher=Cambridge University Press | year=2024 | edition=2nd | url=https://acsvproject.com/PemantleWilsonMelczer23.pdf }}
* {{cite book | last=Stroud | first=K. A. | title=Advanced Engineering Mathematics | edition=4th | publisher=Palgrave Macmillan | year=2003 }}
{{BookCat}}
r90rvmwzv9zx6yrvgtawbxw5xbyvri7
Vehicle Identification Numbers (VIN codes)/Volkswagen/VIN Codes
0
483652
4641566
4641422
2026-06-28T18:17:32Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641566
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89), Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'10)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
2uie9qms1mmros7fyzhb9jcxkj85pal
4641567
4641566
2026-06-28T18:26:06Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641567
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89), Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'11)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'11), Jetta sedan Mk6 ('11)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
1lhu57y323w8lxwt61ln91u8viwz0k8
4641568
4641567
2026-06-28T18:26:57Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641568
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89), Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'11)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'11), Jetta sedan Mk6 ('11)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
i8jcxkdxqmufozfqvdjywo7bk3m3req
4641569
4641568
2026-06-28T18:28:50Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641569
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89),<br> Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'11)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'11), Jetta sedan Mk6 ('11)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
7eiwyxbo9z5hf71vxer83aqs3m4fx5f
4641572
4641569
2026-06-28T19:51:13Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641572
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'12 & '13 in Canada)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89),<br> Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'14)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'14), Jetta sedan Mk6 ('11-'13), Beetle ('12-'14)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
ri0ej239758fz9n2xwj2kqdky0qsb5e
4641588
4641572
2026-06-28T23:33:11Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641588
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 170 hp.<br> VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'12 & '13 in Canada)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89),<br> Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'14)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| H || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Passat ('12-'14)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk6 ('12-'13), Jetta Sportwagen ('12-'14), Passat ('12-'14), Beetle ('12-'14)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'14), Jetta sedan Mk6 ('11-'13), Beetle ('12-'14)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
6rzgs49ec5anfpd0gnu232f6xmu4f2g
4641589
4641588
2026-06-28T23:59:52Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641589
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 170 hp.<br> VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'12 & '13 in Canada)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89),<br> Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'14)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| H || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Passat ('12-'14)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk6 ('12-'13), Jetta Sportwagen ('12-'14), Passat ('12-'14), Beetle ('12-'14)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| S || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Passat 1.8T ('14)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| T || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Passat 1.8T ('14)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'14), Jetta sedan Mk6 ('11-'13), Beetle ('12-'14)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 0 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14), Beetle (Mid '14)
|-
| 1 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14), Beetle (Mid '14)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
hmoktpzfuqc7w0wgfswia7lbd4rwf63
4641591
4641589
2026-06-29T00:23:29Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641591
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 170 hp.<br> VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'12 & '13 in Canada)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89),<br> Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'14)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| H || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Passat ('12-'14)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk6 ('12-'13), Jetta Sportwagen ('12-'14), Passat ('12-'14), Beetle ('12-'14)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| S || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Passat 1.8T ('14-'16)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| T || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Passat 1.8T ('14-'16)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'14), Jetta sedan Mk6 ('11-'13), Beetle ('12-'14)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 0 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14), Beetle (Mid '14)
|-
| 1 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14), Beetle (Mid '14)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
giklrne48j2faur4pgg1ayt0pr1xzim
4641592
4641591
2026-06-29T00:41:56Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641592
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 170 hp.<br> VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'12 & '13 in Canada)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89),<br> Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'14)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| H || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Passat ('12-'14)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk6 ('12-'13), Jetta Sportwagen ('12-'14), Passat ('12-'14), Beetle ('12-'14)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| S || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Passat 1.8T ('14-'16)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| T || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Passat 1.8T ('14-'16)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'14), Jetta sedan Mk6 ('11-'13), Beetle ('12-'14)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 0 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14-'15), Beetle (Mid '14-'15)
|-
| 1 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14-'15), Beetle (Mid '14-'15), Golf Mk7 ('15), Golf Sportwagen ('15)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
ocaikr7rzjq4d1ys0bp17ijqxxtu4yj
4641599
4641592
2026-06-29T01:42:50Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641599
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WVW - VW passenger car
* WVG - VW SUV & ID Buzz
* WV1 - VW Comm. Vehicles - cargo van, pickup truck (truck) (Canadian mkt. '92 Transporter Double-Cab Pickup)
* WV2 - VW Comm. Vehicles - passenger van, camper van, or minibus (M.P.V.) (Canadian mkt. '92 Transporter Window Van, '95 Transporter)
* WV3 - VW Comm. Vehicles - chassis cab or cutaway (incomplete vehicle) [Winnebago Rialta ('97-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)]
* WV4 - VW Comm. Vehicles made by Ford (T7 Transporter, 2nd gen. Amarok) - cargo van, pickup truck (truck)
* WV5 - VW Comm. Vehicles made by Ford (T7 Caravelle) - passenger van, camper van, or minibus (M.P.V.)
* 1VW - VW passenger car made in USA
* 1V1 - VW truck made in USA
* 1V2 - VW SUV made in USA
* 1WV - Winnebago M.P.V. - Class C Motorhome built on VW chassis & front cab [Winnebago Rialta ('95-'96)]
* 2V8 - VW M.P.V. (Routan) 2009 with side airbags made by Chrysler Canada
* 2V4 - VW M.P.V. (Routan) 2010-2011 made by Chrysler Canada
* 2C4 - Chrysler Group Canada (all brands produced) M.P.V. - used for 2012-2014 Routan
* 3VW - VW passenger car made in Mexico
* 3VV - VW SUV made in Mexico
* 8AW - VW passenger car made in Argentina
* 9BW - VW passenger car made in Brazil
M.P.V.=Multipurpose Passenger Vehicle
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || 1-bbl. carburetor. VW EA827 engine. Transversely mounted.<br> VW Rabbit hatchback L Special Value [49-state] (Mid-'82),<br> Rabbit hatchback L [49-state] ('83-'84), Rabbit hatchback GL [49-state] ('84)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code EN.<br> VW Rabbit Convertible ('81-'83), Jetta ('81-'84), Scirocco ('81-'82, Early '83)
|-
| A || 2.0L || Flat-4 || Gas || OHV || Air-cooled. Bosch L-Jetronic MPI. VW Type 4 air-cooled flat-4 engine. VW Vanagon ('81-Mid '83)
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum ('82-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 90 hp. Engine Code JH.<br> VW Scirocco Wolfsburg Edition, California Edition ('83), Scirocco 8V ('84-'88), Rabbit Convertible ('84), Cabriolet ('85-'89)
|-
| A || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. Engine Code PL. VW Scirocco 16V ('86)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Quantum wagon ('85), Fox ('87-'93)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('85-'88), Golf w/Fed. emissions ('89),<br> Golf ('90-'92), Jetta ('85-'88), Jetta base model w/Fed. emissions ('89), Jetta ('90-'92)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('99-'00),<br> GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'99), Jetta Mk4 [9M] ('99-'00), Cabrio ('96-'98),<br> New Beetle ('99-'00)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine - SULEV.<br> VW Jetta Mk4 [9M] ('03-'05)
|-
| A || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW Passat ('98-'00)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Eos ('07-'08)
|-
| A || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 170 hp.<br> VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'12 & '13 in Canada)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Eos ('09-'10)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos (Early '11)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Golf TDI ('15), Golf SportWagen TDI ('15), Jetta sedan Mk6 TDI ('15), Beetle TDI ('15)
|-
| B || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Rabbit hatchback ('81-'84), Rabbit Pickup ('81-'83)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Jetta GLI ('84)
|-
| B || 1.9L || Flat-4 || Gas || OHV || Water-cooled. Digijet (Digital-Jetronic) MPI. VW Wasserboxer engine. VW Vanagon (Mid '83-'85)
|-
| B || 2.1L || Flat-4 || Gas || OHV || Water-cooled. VW-Bosch Digifant-controlled MPI. VW Wasserboxer engine. VW Vanagon ('86-'91)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 ('83-'84)
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> VW Quantum GL5 sedan ('85-'88), Quantum GL5 wagon ('86-'88)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. Higher Output.<br> VW Golf GTI ('85-'86), Golf GT ('87-'88), GTI 8V ('87, '90-'92), Golf w/CA emissions ('89),<br> Jetta GLI ('85-'86), Jetta GLI 8V ('87), Jetta ('88),<br> Jetta base model w/CA emissions ('89), Jetta GL ('89), Jetta Carat ('89-'90, Early '91)
|-
| B || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. Transversely mounted. VW Scirocco 16V ('87-'88 & '89 in Canada)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. 94 hp. VW Cabriolet ('90-'93)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Longitudinally mounted. VW Fox ('90-'93)
|-
| B || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| B || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('90-'93)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf Mk3 [1H] ('94-'99), GTI [base model] Mk3 [1H] ('96-'98), Golf Mk4 [1J] ('02),<br> Jetta Mk3 [1H] ('94-'99), Jetta sedan Mk4 [9M] ('01-'02), Jetta wagon ('01-'02), Cabrio ('95-'96, '98-'99), New Beetle ('98, '01-'02)
|-
| B || 2.8L || 15° VR6 || Gas || SOHC,<br /> 24 valve || MPI. VW VR6 engine. VW Eurovan ('01-'03),<br> Winnebago Rialta ('01-'04), Winnebago Vista ('02-'04), Itasca Sunstar ('02-'04)
|-
| B || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. <br> VW Eos ('07-'08)
|-
| B || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('07-'08)
|-
| B || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp. VW Rabbit Mk5 [1K] ('08-'09), Golf Mk6 ('10-'14)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Rabbit GTI ('83-'84)
|-
| C || 1.8L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('87-'89), Jetta GLI 16V ('87-'89)
|-
| C || 1.8L || I4 supercharged [[w:Intercooler|IC]] || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Corrado G60 ('90-'92)
|-
| C || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. 94hp. VW Cabriolet ('91-'93)
|-
| C || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Passat ('91-'93)
|-
| C || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '92-'93), Transporter (Canada: '92)
|-
| C || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf Mk3 [1H] ('94-'95), Golf Mk4 [1J] ('99-'00), GTI GLS Mk4 [1J] ('99-'00), Jetta Mk3 [1H] ('94-'95), Jetta Mk4 [9M] ('99-'00), Cabrio ('95, '00-'02), Passat ('95-'96),<br> New Beetle ('99-'00)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. VW GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('01),<br> New Beetle 1.8T ('01), Passat (B5) ('01 - 1st 1/2)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 220hp.<br> VW Touareg V6 ('04) (when C follows B or Z in the 4th pos. of VIN)
|-
| C || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 (Early prod. '04) (when C follows C in the 4th pos. of VIN)
|-
| C || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 250 hp.<br> VW R32 ('08)
|-
| D || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '93, Canada: '93-'94)
|-
| D || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93),<br> GTI VR6 (Gen 3) [1H] ('95-'99), Jetta GLX VR6 (Gen 3) [1H] ('95-'99)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('98-'00)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp. Transversely mounted.<br> VW New Beetle 1.8T ('99-'05), GTI GLS 1.8T (Mk4) [1J] ('01), Jetta sedan 1.8T ('00-'01)
|-
| D || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 170 hp. Longitudinally mounted. VW Passat (B5.5) (Mid '01-'05)
|-
| D || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. VW Eos ('11-'15)
|-
| E || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('90-'92), Jetta GLI 16V ('90-'92)
|-
| E || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW Corrado SLC ('92-'93), Passat GLX VR6 ('93, '95-'97), GTI VR6 (Gen 3) [1H] ('95),<br> Jetta GLX VR6 (Gen 3) [1H] ('95), GTI GLX VR6 (Gen 4) [1J] ('99-'00), Jetta VR6 (Gen 4) [9M] ('99-'00)
|-
| E || 2.5L || I5 || Gas || SOHC,<br /> 10 valve || MPI. VW Eurovan (US: '95, Canada: '94-'96), Winnebago Rialta ('95-'96)
|-
| E || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp.<br> VW New Beetle Turbo S ('02-'04), GTI 1.8T (Mk4) [1J] ('02-Mid '06), Jetta sedan 1.8T ('02-'04),<br> Jetta sedan GLI 1.8T (Mk4) [9M] (Mid '04-Mid '05), Jetta wagon 1.8T (Mk4) [1J] ('02-'05)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA188 engine. VW Passat TDI ('04-'05)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('07-'09)
|-
| E || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas Cross Sport ('20-'23)
|-
| F || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. VW Jetta EcoDiesel ('91-'92)
|-
| F || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Passat GLX VR6 ('93-'94), Corrado SLC ('93-'94 & '95 in Canada)
|-
| F || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine.<br> VW Golf TDI ('99-'00), Jetta TDI ('97-'00), New Beetle TDI ('98-'00)
|-
| F || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt. VW Phaeton ('04-'06)
|-
| F || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle convertible [1Y] ('06-'09)
|-
| F || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Touareg ('10-'17)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted. VW Rabbit ('81-'84), Rabbit Pickup ('81-'83), Golf ('85-'87), Jetta ('81-'82, '84-'86, '89-'91)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted. VW Dasher ('81)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Water-cooled. Indirect injection. VW EA827 engine. VW Vanagon ('82-'83)
|-
| G || 2.4L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. VW Eurovan (Canada only: '93-'97), Transporter (Canada only: '95)
|-
| G || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Passat TDI ('96-'97)
|-
| G || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine.<br> VW GTI VR6 ('01-Mid '02), Jetta sedan VR6 ('01-Mid '02), Jetta wagon VR6 ('01-'02)
|-
| G || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine. 240 hp.<br> VW R32 ('04), Touareg ('05-'06)
|-
| G || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp.<br> VW Jetta Mk5 [1K] (Mid '05-'07), New Beetle coupe/convertible ('06-'10)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine + electric motor. Nickel-metal hydride Battery Pack.<br> VW Touareg Hybrid ('11-'15)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Longitudinally mounted.<br> VW Quantum Turbodiesel ('82-'85)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Transversely mounted.<br> VW Rabbit Turbodiesel ('83), Jetta Turbodiesel ('83-'86)
|-
| H || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Eurovan ('97, '99-'00), Winnebago Rialta ('97-'00)
|-
| H || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 150 hp.<br> VW GTI GLS 1.8T (Mk4) [1J] ('00)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('00-'04, '05: Early prod.)
|-
| H || 2.8L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW VR6 engine.<br> VW GTI VR6 (Mid '02-'05), Jetta sedan GLX VR6 (Mid '02-'03), Jetta sedan GLI VR6 (Mid '02-'04)
|-
| H || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 414 hp. VW Phaeton ('04-'05)
|-
| H || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when H follows G or H in the 4th pos. of VIN)
|-
| H || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Passat ('12-'14)
|-
| J || 2.0L || I4 || Gas || DOHC,<br /> 16 valve || MPI. VW EA827 engine. VW Golf GTI 16V ('91-'92), Jetta GLI 16V ('90-'92)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat (Mid '08)
|-
| K || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. Transversely mounted. VW Golf ('90-'92), GTI 8V ('90-'92), Jetta ('90-'92)
|-
| K || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('02-'03), Jetta sedan Mk4 [9M] ('01-'05), Jetta wagon ('01-'03), New Beetle ('01-'05),<br> Jetta City (Canada only: '07-'09), Jetta sedan Mk6 ('11-'15)
|-
| K || 4.0L || 72° W8 || Gas || DOHC,<br /> 32 valve || MPI. VW W8 engine. VW Passat W8 ('02-'04)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. VW Passat ('06-Mid '08)
|-
| K || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Passat ('09-'10)
|-
| K || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. 444 hp. VW Phaeton ('06)
|-
| K || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg TDI ('10-'12)
|-
| L || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW Golf ('93, '96-'97, '04-'06), GTI [base model] Mk3 [1H] ('96-'97), Jetta ('93, '96-'97),<br> Jetta wagon ('04-'05), Golf City (Canada only: '07-'10)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Jetta sedan Mk5 [1K] TDI ('09-'10), Jetta sedan TDI Cup Edition ('10), Jetta Sportwagen ('09-'14), Jetta sedan Mk6 TDI ('11-'14), Beetle TDI ('13-'14)
|-
| L || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW CC ('09-'10)
|-
| M || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> VW New Beetle ('04-'05)
|-
| M || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4172cc. Timing belt.<br> VW Touareg V8 ('04-'06)
|-
| M || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 170 hp. VW Jetta sedan Mk5 [1K] ('08-'09), Jetta Sportwagen ('09)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 225 hp. VW Touareg ('09)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> VW Golf TDI ('10-'14)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA189 engine.<br> VW Passat TDI ('12-'14)
|-
| P || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. 90 hp.<br> VW Golf TDI ('01-'03), Jetta sedan TDI ('01-'03), Jetta wagon TDI ('02-'03),<br> New Beetle TDI ('01-'03)
|-
| P || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk6 ('12-'13), Jetta Sportwagen ('12-'14), Passat ('12-'14), Beetle ('12-'14)
|-
| P || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. 240 hp. VW Touareg TDI ('13-'16)
|-
| R || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('93), Jetta ('93)
|-
| R || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. Pumpe Düse (Pump Injection). VW EA827 engine. 100 hp.<br> VW Golf Mk4 [1J] TDI ('04-'06), Jetta sedan Mk4 [9M] TDI ('04-'05),<br> Jetta wagon Mk4 [1J] TDI ('04-'05 & '06 in Canada), New Beetle TDI ('04-'06)
|-
| R || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| R || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> VW Touareg V8 ('09)
|-
| R || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Atlas ('18-'23)
|-
| S || 2.8L || 15° VR6 || Gas || SOHC,<br /> 12 valve || MPI. VW VR6 engine. VW Jetta GLX VR6 ('94)
|-
| S || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| S || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 150 hp. VW Rabbit Mk5 [1K] (Mid '06-'07)
|-
| S || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Passat 1.8T ('14-'16)
|-
| T || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine. VW Golf ('01), Jetta sedan Mk4 [9M] ('01), New Beetle ('01)
|-
| T || 1.9L || I4 Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 8 valve || Direct injection. VW EA827 engine. VW Jetta Mk5 [1K] TDI (Mid '05-'06)
|-
| T || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('06-'08)
|-
| T || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Passat 1.8T ('14-'17)
|-
| U || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> VW Passat ('05)
|-
| U || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> VW Passat ('06-'08), VW CC ('09-'16)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine. TSI. Timing chain. VW Tiguan ('09-'17), Tiguan Limited ('17-'18)
|-
| V || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> VW Passat TDI ('15)
|-
| W || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - ULEV/Federal emissions. 150 hp.<br> VW New Beetle coupe [1C/AG] ('06-'10), New Beetle convertible [1Y/AL] ('10)
|-
| W || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain. VW Eos ('11-'16)
|-
| X || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - Federal emissions. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('10), Jetta Sportwagen ('10-'14), Jetta sedan Mk6 ('11-'13), Beetle ('12-'14)
|-
| Z || 4.9L || 90° V10 Twin Turbo [[w:Intercooler|IC]] || Diesel || SOHC,<br /> 20 valve || Direct injection. Pumpe Düse (Pump Injection). VW V10 TDI engine. <br> VW Touareg V10 TDI ('04) (when Z follows P in the 4th pos. of VIN)
|-
| Z || 2.5L || I5 || Gas || DOHC,<br /> 20 valve || MPI. VW I5 engine - PZEV. 170 hp.<br> VW Jetta sedan Mk5 [1K] ('08-'10), Jetta Sportwagen ('09-'11), Jetta sedan Mk6 ('11)
|-
| 0 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - Federal emissions. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14-'16), Beetle (Mid '14-'16)
|-
| 1 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> VW Jetta sedan Mk6 1.8T ('14-'17), Beetle (Mid '14-'17), Golf Mk7 ('15-'17), Golf Sportwagen ('15-'17), Golf Alltrack ('17)
|-
| 3 || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> VW Jetta Hybrid ('13-'16)
|}
SCR=Selective Catalytic Reduction
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| P ||EEM 85|| Electricity || Front ||24.2 Kwh || VW e-Golf ('15-'16).
|-
| R ||EEM 100|| Electricity || Front ||35.8 Kwh || VW e-Golf ('17-'19 & '20 in Canada).
|}
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*1 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts and front knee bolsters
*2 = VW-RA (VW Restraint Automatic): Door-mounted front shoulder belts, Manual front lap belts, and front knee bolsters
*4 = VW-ELRA (VW Electromechanical Restraint Automatic): Motorized front shoulder belts, Manual front lap belts
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*6 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags & Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Dual-stage Airbags & Front Side Airbags & Side Curtain Airbags
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags
*0 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Phaeton)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Side Curtain Airbags (Touareg)
*8 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Jetta)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Side Curtain Airbags (Except Jetta)
===Position 7-8, Model Line:===
1981-2009:
*30 = Fox ('87-'93)
*15 = Rabbit Convertible ('81-'84), Cabriolet ('85-'93)
*16 = Jetta ('81-'88)
*17 = Rabbit ('81-'84), Rabbit Truck ('81-'83), Golf (US built: '85-'89)
*1G = Golf (Mexican built: '89-'92), Jetta ('89-'92)
*1H = Golf/GTI ('93-'99 - Mark III), Jetta ('93-'99 - Mark III)
*1E = Cabrio ('95-'99)
*1V = Cabrio ('00-'02)
*1J = Golf/GTI ('99-'06 - Mark IV), R32 ('04), City Golf (Canada only: '07-'09), Jetta wagon ('01-'05 & '06 in Canada - Mark IV)
*9M = Jetta sedan ('99-'05 - Mark IV), City Jetta (Canada only: '07-'09)
*1K = Rabbit/GTI ('06-'09 - Mark V), R32 ('08), Jetta sedan ('05-'09 - Mark V), Jetta Sportwagen ('09 - Mark V)
*32 = Dasher hatchback ('81), Quantum hatchback ('82-'83)/sedan ('82-'88)
*33 = Dasher wagon ('81), Quantum wagon ('82-'88)
*31 = Passat ('90-'94)
*3A = Passat ('95-'97)
*3B = Passat ('98-'05)
*3C = Passat ('06-'09), CC ('09)
*3D = Phaeton ('04-'06)
*53 = Scirocco ('81-'88 & '89 in Canada)
*50 = Corrado ('90-'94 & '95 in Canada)
*1C = New Beetle coupe ('98-'09)
*1Y = New Beetle convertible ('03-'09)
*1F = Eos ('07-'09)
*25 - Vanagon ('81-'91)
*70 = Eurovan ('93-'03 & '92 in Canada), Eurovan-based Winnebago Rialta, Winnebago Vista, Itasca Sunstar Class C motorhomes
*5N = Tiguan ('09)
*7L = Touareg ('04-'09)
2010-:
*BE (Type 1J) = City Golf (Canada only: '10)
*AJ (Type 5K) = Golf/GTI ('10-'14 - Mark 6), Golf R ('12-'13)
*AU (Type AU) = Golf/GTI ('15-'21 - Mark 7), Golf R ('15-'19), Golf Sportwagen ('15-'19 - Mark 7), Golf Alltrack ('17-'19), e-Golf ('15-'19 & '20 in Canada)
*CD (Type CD) = Golf GTI/Golf R ('22-24 - Mark 8)
*CD (Type DA) = Golf GTI/Golf R ('25-present - Mark 8.5)
*AJ (Type 1K) = Jetta sedan ('10 - Mark V), Jetta Sportwagen ('10-'14 - Mark V)
*AJ (Type 16) = Jetta sedan ('11-'18 - Mark VI)
*BU = Jetta sedan ('19-present - Mark VII)
*AN (Type 3C) = Passat ('10)
*A3 (NMS) = Passat ('12-'22)
*AN (Type 3C) = CC ('10-'17)
*AN (Type 3H) = Arteon ('19-'23)
*AG (Type 1C) = New Beetle coupe ('10)
*AL (Type 1Y) = New Beetle convertible ('10)
*AT (Type 5C) = Beetle ('12-'19)
*AH (Type 1F) = Eos ('10-'16)
*EB = ID Buzz ('25)
*B2 (Type CL) = Taos ('22-)
*AX (Type 5N) = Tiguan ('10-'17), Tiguan Limited ('17-'18)
*AX (Type BW) = Tiguan ('18-'24)
*RM = Tiguan ('25-)
*A9 (Type 7L) = Touareg ('10)
*BP (Type 7P) = Touareg ('11-'17)
*CA = Atlas ('18-'26), Atlas Cross Sport ('20-'26)
*E2 = ID.4 (German built: '21-'22)
*E8 = ID.4 (US built: '23-'26)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* B: Brussels, Belgium
* C: Chattanooga, TN, USA
* D: Bratislava, Slovakia
* E: Emden, Germany
* G: Graz, Austria (Steyr-Daimler-Puch plant: Vanagon Syncro 4wd [US: '86-'87, '89-'91, Canada: '86-'91])
* H: Hanover, Germany
* K: Osnabrueck, Germany (Karmann plant: Scirocco ['81-'88 & '89 in Canada], Corrado ['90-'94 & '95 in Canada], Rabbit Convertible ['81-'84], Cabriolet ['85-'93], Cabrio ['95-'96])
* K: Osnabrueck, Germany (ex-Karmann VW Osnabrueck GmbH plant: Tiguan ['17], Tiguan Limited ['17-'18])
* M: Puebla, Mexico
* P: Zwickau, Germany [For WMI: WVW or WVG]
* P: Sao Bernardo do Campo, Sao Paulo state, Brazil (Anchieta plant) [For WMI: 9BW]
* R: Windsor Assembly - Windsor, ON, Canada (Chrysler plant)
* V: Westmoreland Assembly - East Huntingdon, Westmoreland County, PA, USA [For WMI: 1VW or 1V1]
* V: Portugal [For WMI: WVW]
* W: Wolfsburg, Germany
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 8: Dresden, Germany
'''Positions 12–17, Serial Number'''
'''Select VW equipment codes:'''
*X9A - Equipment Options for USA market
*X9B - Equipment Options for Canadian market
{{BookCat}}
oy2gm3451daklviwtdcioyn362qrhzu
Vehicle Identification Numbers (VIN codes)/Audi/VIN Codes
0
483747
4641521
4641402
2026-06-28T15:24:39Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641521
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WAU - Audi (Audi AG) passenger car
* WA1 - Audi (Audi AG) SUV
* WUA - Audi passenger car - quattro GmbH/Audi Sport GmbH (RS3, RS4, RS5, RS6, RS7, TT RS ['18-'22], R8,<br> S4 Cabriolet ['04-'09], S4 25quattro Special Edition sedan ['06], S8 plus ['16-'18], Non-North American Mkt. RS Q3, Q7 V12 TDI)
* WU1 - Audi SUV - Audi Sport GmbH (RS Q8)
* TRU - Audi Hungary (Audi Hungaria Motor Kft.) passenger car (only used for TT/TTS & '12-'13 TT RS)
* 3U5 - Audi Mexico SUV
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 4000 4E/4000S 4E ('81-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 4000S ('84)
|-
| A || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT ('84)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 80 ('90)
|-
| A || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi S6 ('95 & '96-'97 in Canada)
|-
| A || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. Federal emissions. <br> Audi 90 ('95), Cabriolet ('95-'98), A4 2.8 ('96-'97), A6 sedan ('95-'97), A6 wagon ('95-'98)
|-
| A || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi A6 sedan 2.8 ('98-'99), A6 Avant 2.8 ('99)
|-
| A || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 560 hp.<br> Audi RS7 ('17-'18)
|-
| A || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine. 532 hp.<br> Audi R8 V10 Quattro ('17-'18), R8 V10 RWS ('18), R8 Rwd ('21)
|-
| A || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi Q7 3.0T ('17-'19)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. 261 hp. <br> Audi A4 45 TFSI ('21-'25), A4 Allroad 45 TFSI ('21-'25),<br> A5 Coupe/Cabriolet 45 TFSI ('21-'24), A5 Sportback 45 TFSI ('21-'25),<br> Q5 45 TFSI [FY] ('21-'25), Q5 Sportback 45 TFSI [FY] ('21-'25)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain. 268 hp. <br> Audi Q5 [GU] (Mid '25-'26), Q5 Sportback [GU] (Mid '25-'26), A5 [B10] ('26)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 4000 ('81), Coupe ('81-'83), 5000/5000S ('81-'84)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 4000S ('85-'87) [Pos. 7-8 of VIN is 81]
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 4000S Quattro ('84-'85), 4000CS Quattro ('86-'87) [Pos. 7-8 of VIN is 85],<br> 5000S ('85-'86)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 80 ('88-'89), 90 ('88)
|-
| B || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 100 ('89), 100 Quattro ('89)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 80 ('90)
|-
| B || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. <br> Audi A4 1.8T ('97-'99)
|-
| B || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine. 602 hp.<br> Audi R8 V10 Plus Quattro ('17-'18), R8 V10 Performance Quattro ('20-'23), R8 GT Rwd ('23)
|-
| B || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - ULEV. TSI. Timing chain. Detuned version: 201 hp.<br> Audi A4 40 TFSI ('21-'25), A5 Sportback 40 TFSI ('21-'25), Q5 40 TFSI [FY] ('22-'25)
|-
| B || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. 268 hp. <br> Audi A5 [B10] (Mid '25)
|-
| B || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain. 255 hp. <br> Audi Q3 ('26)
|-
| C || 2.1L || I5 Turbo || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 5000 Turbo ('81-'83)
|-
| C || 2.1L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Quattro Coupe ('82‡ & '83-'85), 5000S Turbo ('84-'85)
|-
| C || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 80 ('91-'92), 80 Quattro ('88-'92), 90 ('88-'91), 90 Quattro ('88-'89),<br> 5000S ('87-'88), 5000S Quattro ('88), 100 ('90-'91), 100 Quattro ('90-'91)
|-
| C || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 200 Turbo ('89), 200 Turbo Quattro ('89)
|-
| C || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. CA-type emissions. <br> Audi A6 sedan ('95-'97), A6 wagon ('96-'98)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. <br> Audi A4 sedan/Avant 1.8T ('00-Mid '05), A4 Cabriolet 1.8T ('03-'06), TT [180 hp] ('00-'06)
|-
| C || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack.<br> Audi Q5 Hybrid (Early '14)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 1.8T ('15)
|-
| C || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi SQ5 ('16-'17)
|-
| C || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. <br> Audi Q3 ('17-'18)
|-
| C || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 591 hp.<br> Audi RS6 Avant ('21-'23), RS7 ('21-'23)
|-
| C || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. 261 hp. <br> Audi Q7 45 TFSI ('23-'26)
|-
| D || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT ('84)
|-
| D || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT ('85-'87)
|-
| D || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 80 ('91), 80 Quattro ('90-'91), 90 ('90)
|-
| D || 2.3L || I5 || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe Quattro 20V ('90)
|-
| D || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 5000CS Turbo ('86-'88), 200 Turbo ('90-'91), 200 Turbo Quattro ('90)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi A4 2.8 ('98-'99)
|-
| D || 2.7L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi S4 ('00-'02), A6 2.7T ('00-'04), Allroad Quattro 2.7T ('02-'05)
|-
| D || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine.<br> Audi A3 3.2 ('06-'09), TT 3.2 ('05-'06, '08-'09)
|-
| D || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi A8 3.0T/55 TFSI ('19-'26)
|-
| D || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 621 hp.<br> Audi RS6 Avant performance ('24-'26), RS7 performance ('24-'26)
|-
| E || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT 2.3 "Special Build" (Late '87)
|-
| E || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 5000CS Turbo Quattro ('86-'88)
|-
| E || 2.3L || I5 || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi 90 Quattro 20V ('90-'91), Coupe Quattro 20V ('90-'91)
|-
| E || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi 200 Turbo Quattro 20V ('91)
|-
| E || 3.6L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. Timing belt. Audi V8 Quattro ('90-'91)
|-
| E || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi 90 ('95)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 2.0T ('08-'13)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('18-'20), TT ('19-'23), Q3 2.0T/45 TFSI ('19-'20), Q3 S Line 45 TFSI ('21-'25)
|-
| E || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 453 hp.<br> Audi A8 4.0T ('19-'21)
|-
| E || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine. 562 hp.<br> Audi R8 V10 Quattro ('20), R8 V10 Performance Rwd ('22-'23)
|-
| F || 2.3L || I5 || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi 90 Quattro 20V ('90-'91), Coupe Quattro 20V ('91)
|-
| F || 3.7L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. Timing belt. Audi A8 3.7 ('97-'99)
|-
| F || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine.<br> Audi TT 3.2 ('04-'05)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. <br> Audi A3 2.0T ('06-'08), A4 sedan 2.0T (Mid '05-'08), A4 Avant 2.0T (Mid '05-'08),<br> A4 Cabriolet 2.0T ('07-'09), TT ('08-'09), TTS ('09)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A3 2.0T ('08-'11), A3 2.0T Quattro ('12-'13), A4 sedan 2.0T ('09-'12), A4 sedan 2.0T Fwd ('13-'16), A4 sedan 2.0T Quattro w/man. trans. ('13-'16), A4 sedan 2.0T Quattro w/auto. trans. (Early '13),<br> A4 Avant 2.0T ('09-'12), Allroad 2.0T (Early '13), A5 2.0T ('10-'12),<br> A5 Coupe 2.0T Quattro w/man. trans. ('13-'15), A5 Cabriolet 2.0T Fwd ('13-'14),<br> A5 2.0T Quattro w/auto. trans. (Early '13), A6 2.0T ('12-'16), TT ('09-'15), Q3 ('15-'16),<br> Q5 2.0T ('11-Early '13)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 2.0T (Early prod. '12)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas/E85 || DOHC,<br /> 16 valve || Flex Fuel. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A4 sedan 2.0T Quattro w/auto. trans. ('13-'16), Allroad 2.0T ('13-'16),<br> A5 2.0T Quattro w/auto. trans. ('13-'15), Q5 2.0T ('13-'15)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('15)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 288 hp.<br> Audi S3 Quattro ('15)
|-
| F || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 450 hp.<br> Audi S6 ('17-'18), S7 ('17-'18)
|-
| F || 2.9L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi S6 ('20-'25), S7 ('20-'25)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Audi 4000 Diesel ('82)
|-
| G || 2.0L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. Audi 5000 Diesel ('81)
|-
| G || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi A8 4.2 ('97-'99)
|-
| G || "3.2L" || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3.1L=3123cc.<br> Audi A4 sedan/Avant 3.2 (Mid '05-'06), A6 3.2 ('05-'06)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi S4 ('10-'16), S5 Cabriolet ('10-'15, Early '16), S5 coupe ('13-'15), A6 3.0T ('09-'16),<br> A7 3.0T ('12-'16), A8 3.0T ('13-'15), Q5 3.0T ('13-'15), SQ5 ('14-'15), Q7 3.0T ('11-'15)
|-
| G || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A5 2.0T w/man. trans. ('16-'17)
|-
| G || 6.3L || 72° W12 || Gas || DOHC,<br /> 48 valve || Direct injection. VW W12 engine. Audi A8 W12 ('16)
|-
| G || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack.<br> Audi Q5 Hybrid ('16)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Audi 4000 Turbo Diesel ('83)
|-
| H || 2.0L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. Audi 5000 Diesel ('82)
|-
| H || 2.0L || I5 Turbo || Diesel || SOHC,<br /> 10 valve || Indirect injection. Audi 5000 Turbo Diesel ('83)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi A4 2.8 ('00-'01), A6 2.8 ('00-'01)
|-
| H || "3.2L" || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3.1L=3123cc.<br> Audi A4 sedan/Avant 3.2 ('06-'08), A4 Cabriolet 3.2 ('07-'09), A6 3.2 ('06-'09)
|-
| H || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. <br> Audi Q7 2.0T ('17-'19)
|-
| H || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine + electric motor. Lithium-ion Battery Pack.<br> Audi A8 60 TFSI e ('20-'21)
|-
| J || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi 90 ('93-'94), 100 ('92-'94)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> Audi A3 TDI ('10-'13)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> Audi A3 TDI ('15)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. 248 hp. <br> Audi Q7 45 TFSI ('20-'22)
|-
| K || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi 90 ('93-'95), 100 ('92-'94)
|-
| K || 3.2L || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3197cc. <br> Audi A4 sedan 3.2 ('09), A5 3.2 ('08-'10), A6 3.2 ('10-'11), Q5 3.2 ('09-'12)
|-
| L || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi Cabriolet ('94-'95)
|-
| L || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi A6 4.2 ('00-'04), A8 4.2 ('00-'06)
|-
| L || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4163cc. Timing chain.<br> Audi S4 sedan/Avant ('04-'08), S4 Cabriolet ('04-'09),<br> A6 4.2 ('05-'06), Allroad Quattro 4.2 ('04-'05)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine.<br> Audi A6 TDI ('14-'16), A7 TDI ('14-'16), A8 TDI ('14-'15), Q5 TDI ('14-'15), Q7 TDI ('09-'15)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - ULEV. TSI. Timing chain. Detuned version: 188 hp.<br> Audi A4 Ultra 2.0T Fwd ('17-'18), A4 2.0T Fwd ('19-'20)
|-
| N || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Audi EA824 V10 engine.<br> Audi S6 ('07-'11), S8 ('07-'09)
|-
| N || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine.<br> Audi R8 ('10-'12, '14-'15)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. <br> Audi A4 2.0T Fwd/Quattro ('17-'18), A4 2.0T Quattro ('19-'20), A4 Allroad Quattro ('17-'20),<br> A5 Coupe/Cabriolet 2.0T Quattro ('18-'20), A5 Sportback 2.0T Quattro ('18-'20),<br> Q5 2.0T Quattro ('18-'20)
|-
| P || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi S4 [C4 (4A)] ('92-'93)
|-
| P || 2.7L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi Allroad Quattro 2.7T ('01)
|-
| P || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> Audi A3 Sportback e-tron ('16-'18)
|-
| P || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack. TSI. Timing chain.<br> SULEV.<br> Audi A7 55 TFSI e ('21-'22)
|-
| R || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi S4 [C4 (4A)] ('93-'94)
|-
| R || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. Audi A8 W12 ('05-'09)
|-
| R || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 605 hp.<br> Audi RS7 performance ('16-'18)
|-
| R || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. Audi A8 TDI ('16)
|-
| R || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 591 hp.<br> Audi RS Q8 ('20-'24)
|-
| R || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 631 hp.<br> Audi RS Q8 performance ('25-'26)
|-
| S || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp. <br> Audi TT (Early '00)
|-
| S || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc.<br> Audi S8 ('16)
|-
| S || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine.<br> Audi TT RS ('18-'22)
|-
| S || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 563 hp.<br> Audi S8 ('20-'26)
|-
| T || 1.8L || I4 Turbo Twin [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. High Output - 225 hp. Single Turbo, Twin Intercoolers. <br> Audi TT ('01-'06)
|-
| T || 3.0L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 3. Aluminum block.<br> Audi A4 sedan/Avant 3.0 ('02-Mid '05), A4 Cabriolet 3.0 ('03-'06), A6 3.0 ('02-'04)
|-
| T || "3.2L" || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3.1L=3123cc.<br> Audi A6 3.2 ('05)
|-
| U || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi S6 Avant ('02-'03), S8 ('01-'03)
|-
| U || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> Audi RS4 sedan ('07-'08), RS4 Cabriolet ('08)
|-
| U || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Dry sump lubrication. Audi EA824 engine. 4163cc. Timing chain.<br> Audi R8 ('08-'12, '14-'15)
|-
| U || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine.<br> Audi R8 V10 coupe w/man. trans. (Early '14) [when U in 5th pos. of VIN follows G in 4th pos. of VIN]
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - PZEV. TSI. Timing chain. Detuned version: 184 hp.<br> Audi A3 2.0T Fwd ('17)
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - SULEV. TSI. Timing chain. Detuned version: 184 hp.<br> Audi A3 2.0T Fwd ('18-'20), Q3 40 TFSI ('21-'22)
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - ULEV. TSI. Timing chain. Detuned version: 184 hp.<br> Audi Q3 40 TFSI ('23-'24 & '25 in Canada)
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 48v Mild Hybrid. Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - SULEV.<br> TSI. Timing chain. 201 hp.<br> Audi A3 40 TFSI ('22-'26)
|-
| V || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. 4172cc. Timing belt. Audi V8 Quattro ('92-'93)
|-
| V || 4.2L || 90° V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 40 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi RS6 (US: '03, Canada: '04)
|-
| V || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> Audi S5 coupe ('08-'12), A6 4.2 ('07-'11), A8 4.2 ('07-'12), Q7 4.2 ('07-'10)
|-
| V || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. Audi Q5 TDI ('16)
|-
| V || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi Q8 3.0T/55 TFSI ('19-'26), Q7 55 TFSI ('25-'26)
|-
| W || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. 4172cc. Timing belt. Audi V8 Quattro ('92-'94)
|-
| W || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine.<br> Audi RS3 ('17-'20)
|-
| W || 2.9L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine.<br> Audi RS5 coupe ('18-'19, '21-'24), RS5 Sportback ('19, '21-'25)
|-
| W || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 500 hp.<br> Audi SQ7 ('20-'26), SQ8 ('20-'26)
|-
| W || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine. 394 hp.<br> Audi RS3 ('25-'26)
|-
| X || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp. <br> Audi TT ('01-'02)
|-
| X || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi Q7 55 TFSI ('20-'24)
|-
| Y || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> Audi Q7 3.6 ('07-'10)
|-
| 1 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine - ULEV. FSI. Timing belt.<br> Audi TTS ('10-'15)
|-
| 1 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 288 hp.<br> Audi S3 Quattro ('16-'20), TTS ('16-'23)
|-
| 2 || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc.<br> Audi S6 ('13-'16), S7 ('13-'16), RS7 ('14-'16), A8 4.0T ('13-'15), S8 ('13-'15)
|-
| 2 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas/E85 || DOHC,<br /> 16 valve || Flex Fuel. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A5 2.0T w/auto. trans. ('16-'17), Q5 2.0T ('16-'17)
|-
| 2 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi A6 3.0T ('17), A7 3.0T ('17)
|-
| 2 || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi A6 3.0T/55 TFSI ('19-'25), A6 Allroad ('20-'26), A7 3.0T/55 TFSI ('19-'25)
|-
| 2 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack. TSI. Timing chain.<br> Audi Q5 55 TFSI e [FY] ('20-'25)
|-
| 3 || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct injection. Audi EA855 engine.<br> Audi TT RS ('12-'13)
|-
| 3 || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc.<br> Audi A8 4.0T ('16-'18)
|-
| 3 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. Higher Output: 340 hp.<br> Audi A6 3.0T Competition ('17), A6 3.0T ('18), A7 3.0T Competition ('17), A7 3.0T ('18)
|-
| 3 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. 261 hp.<br> Audi A6 Sport 45 TFSI ('21), A6 45 TFSI ('22-'25)
|-
| 3 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 306 hp.<br> Audi S3 Quattro ('22-'24)
|-
| 4 || 6.3L || 72° W12 || Gas || DOHC,<br /> 48 valve || Direct injection. VW W12 engine. Audi A8 W12 ('12-'15)
|-
| 4 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi S5 coupe ('16-'17), S5 Cabriolet ('16-'17), A8 3.0T ('16-'18)
|-
| 4 || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine.<br> Audi S4 ('18-'25), S5 coupe/cabriolet ('18-'24), S5 Sportback ('18-'25), SQ5 [FY] ('18-'25),<br> SQ5 Sportback [FY] ('21-'25)
|-
| 4 || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine. 401 hp.<br> Audi RS3 ('22-'24)
|-
| 5 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi TT ('16-'17)
|-
| 5 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain.<br> Audi TT ('18)
|-
| 5 || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 605 hp.<br> Audi S8 plus ('16-'18)
|-
| 5 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 328 hp.<br> Audi S3 Quattro ('25-'26)
|-
| 5 || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine.<br> Audi S5 [B10] (Mid '25-'26), SQ5 [GU] (Mid '25-'26), SQ5 Sportback [GU] (Mid '25-'26), A6 [C9] ('26)
|-
| 6 || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> Audi RS5 ('13-'15)
|-
| 7 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 1.8T ('16)
|-
| 7 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi Q5 3.0T ('16-'17)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack.<br> Audi Q5 Hybrid ('13-'15)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('16-'17)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('18)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A6 2.0T ('17-'18)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. 248 hp.<br> Audi A6 2.0T/45 TFSI ('19-'21)
|}
‡1982 Audi Quattro: 3-4 cars were imported to the US for marketing purposes and as press cars. They remained in the US after those uses ended and transitioned into private ownership. These cars carry US-style VINs rather than European-style VINs. 3 VINs have been found. Their serial numbers (last 6 digits of VIN) are 900565, 900586, and 900648. The Audi Quattro was officially sold in the US for the 1983-1985 model years.
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| A ||APA250 (Front) / AKA320 (Rear)|| Electricity || All ||95 Kwh (gross) / 83.6 Kwh (net) || Audi e-tron quattro ('19), e-tron Sportback quattro ('20)
|-
| A ||APA250 (Front) / AKA320 (Rear)|| Electricity || All ||95 Kwh (gross) / 86.5 Kwh (net) || Audi e-tron quattro ('21-'23), e-tron Sportback quattro ('21-'23)
|-
| A ||APA250 (Front) / AKA320 (Rear)|| Electricity || All ||114 Kwh (gross) / 106 Kwh (net) || Audi Q8 e-tron quattro ('24), Q8 e-tron Sportback quattro ('24)
|-
| C ||APA320 (1 Front) / ATA250 (2 Rear)|| Electricity || All ||95 Kwh (gross) / 86.5 Kwh (net) || Audi e-tron S quattro ('22-'23), e-tron S Sportback quattro ('22-'23)
|-
| C ||APA320 (1 Front) / ATA250 (2 Rear)|| Electricity || All ||114 Kwh (gross) / 106 Kwh (net) || Audi SQ8 e-tron quattro ('24), SQ8 e-tron Sportback quattro ('24)
|-
| C ||APP310 (Rear) || Electricity || Rear ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 40 ('23-Mid '24)
|-
| C ||APP580 (Rear)|| Electricity || Rear ||100 Kwh (gross) / 94.4 Kwh (net) || Audi A6 e-tron Sportback ('25)
|-
| D ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi A6 e-tron Sportback quattro ('25)
|-
| E ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi S6 e-tron Sportback quattro ('25)
|-
| H ||V662 (Front) Code EBGA / V663 (Rear) (Higher output-Code EBEA)|| Electricity || All ||93.4 Kwh (gross) / 83.7 Kwh (net) || Audi RS e-tron GT quattro ('22-'24)
|-
| J ||V662 (Front) Code EBGA / V663 (Rear) Code EBFA|| Electricity || All ||93.4 Kwh (gross) / 83.7 Kwh (net) || Audi e-tron GT quattro ('22-'24)
|-
| U ||HASCO Magna asynchronous motor (Front) / APP550 (Rear) || Electricity || All ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 55 quattro (Mid '24-'26), Q4 e-tron Sportback 55 quattro (Mid '24-'26)
|-
| 2 ||HASCO Magna asynchronous motor (Front) / APP310 (Rear) || Electricity || All ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 50 quattro ('22-Mid '24), Q4 e-tron Sportback 50 quattro ('22-Mid '24)
|-
| 2 ||APP580 (Rear)|| Electricity || Rear ||100 Kwh (gross) / 94.4 Kwh (net) || Audi Q6 e-tron ('25)
|-
| 4 ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi Q6 e-tron quattro ('25), Q6 e-tron Sportback quattro ('25)
|-
| 5 ||APP550 (Rear) || Electricity || Rear ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 45 ('25-'26)
|-
| 5 ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi SQ6 e-tron quattro ('25), SQ6 e-tron Sportback quattro ('25)
|-
| 8 || (Front) / (Rear) || Electricity || All ||105 Kwh (gross) / 97 Kwh (net) || Audi RS e-tron GT performance quattro ('25-'26)
|-
| 9 || (Front) / (Rear) || Electricity || All ||105 Kwh (gross) / 97 Kwh (net) || Audi S e-tron GT quattro ('25-'26)
|}
HASCO Magna=HASCO Magna Electric Drive Systems Co., Ltd.
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*2 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags ('00-'06 TT)
*4 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags ('04-'07 A8)
*5 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags (A3, A4, A6, Allroad)
*6 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags ('06-'09 A3, A4, A6, Allroad)
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Front Knee Airbags ('08-'09 TT, R8, '09 TTS)
*4 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags ('03-'09 A4 Cabriolet, '04-'09 S4 Cabriolet, '08 RS4 Cabriolet)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags (Except '08-'09 A8/S8)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags & Front Knee Airbags ('08-'09 A8/S8)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Front Knee Airbags ('10- A5/S5 Cabriolet, '10- TT/TTS, '12-'13 TT RS, '10- R8)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags ('10- A3, '10- A4/S4, '10-'11 A5/S5 Coupe, '10- A6/S6, '12- A7, '10- Q5, '10- Q7)
*B = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags ('10- A3, '10- A4/S4, '10- A6/S6, '12- A7, '10- Q5, '10- Q7)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags & Front Knee Airbags ('12- A5/S5 Coupe)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags & Front Knee Airbags ('10-' A8)
===Position 7-8, Model Line:===
1981-2009:
*8P = A3 ('06-'09)
*81 = 4000 Fwd ('81-'87)
*85 = 4000 Quattro ('84-'87), Coupe ('81-'83), Coupe GT ('84-'87), Quattro ('82‡ & '83-'85)
*89 = 80/90 ('88-'89)
*8A = 80 ('90-'92), 90 ('90-'91)
*8C = 90 ('93-'95)
*8B = Coupe Quattro ('90-'91)
*8G = Cabriolet ('94-'98)
*8D = A4 ('96-'01), S4 ('00-'02)
*8E = A4 ('02-'08), S4 ('04-'08), RS4 ('07-'08)
*8H = A4 Cabriolet ('03-'09), S4 Cabriolet ('04-'09), RS4 Cabriolet ('08)
*8K = A4 ('09)
*8T = A5 coupe ('08-'09), S5 coupe ('08-'09)
*43 = 5000 ('81-'83)
*44 = 5000 ('84-'88), 100/200 ('89-'91)
*4A = 100/S4 ('92-'94), A6 sedan ('95-'97), A6 wagon ('95-'98), S6 ('95 & '96-'97 in Canada)
*4B = A6 sedan ('98-'04), A6 Avant wagon ('99-'04), Allroad ('01-'05), S6 ('02-'03), RS6 (US: '03, Canada: '04)
*4F = A6 ('05-'09), S6 ('07-'09)
*44 = V8 Quattro ('90)
*4A = V8 Quattro ('91-'94)
*4D = A8 ('97-'03), S8 ('01-'03)
*4E = A8 ('04-'09), S8 ('07-'09)
*8N = TT ('00-'06)
*8J = TT ('08-'09), TTS ('09)
*42 = R8 ('08-'09)
*8R = Q5 ('09)
*4L = Q7 ('07-'09)
2010-:
*FM (Type 8P) = A3 ('10-'13)
*FF (Type 8V) = A3 ('15-'20), S3 ('15-'20), RS3 ('17-'20), A3 Sportback e-tron [PHEV] '16-'18
*GY (Type 8Y) = A3/S3/RS3 ('22-)
*FL (Type 8K) = A4 ('10-'16), Allroad ('13-'16), S4 ('10-'16)
*F4 (Type 8W) = A4 ('17-'25), A4 Allroad ('17-'25), S4 ('18-'25)
*FR (Type 8T) = A5 Coupe ('10-'17), S5 Coupe ('10-'17), RS5 Coupe ('13-'15)
*FH (Type 8F) = A5 Cabriolet ('10-'17), S5 Cabriolet ('10-'17), RS5 Cabriolet ('13-'15)
*F5 = A5 ('18-'25), S5 ('18-'25), RS5 ('18-'19, '21-'25) [Coupe/Cabriolet: '18-'24, Sportback: '18-'25]
*FU = A5/S5 ('25-)
*FB (Type 4F) = A6 ('10-'11), S6 ('10-'11)
*FC (Type 4G) = A6 ('12-'18), S6 ('13-'18)
*FC (Type 4G) = A7 ('12-'18), S7 ('13-'18), RS7 ('14-'18)
*F2 (Type 4A) = A6 ('19-'25), S6 ('20-'25), RS6 Avant ('21-'26), A6 Allroad ('20-'26)
*F2 (Type 4K) = A7 ('19-'25), S7 ('20-'25), RS7 ('21-'26)
*FN = A6 ('26-)
*GH = A6 e-tron, S6 e-tron ('25, '27)
*FA (Type 4E) = A8 ('10)
*FD (Type 4H) = A8 ('11-'18), S8 ('13-'16), S8 plus ('16-'18)
*F8 (Type 4N) = A8 ('19-'26), S8 ('20-'26)
*FW (Type F8) = e-tron GT ('22-'24), RS e-tron GT ('22-'24), S e-tron GT ('25-), RS e-tron GT performance ('25-)
*FK (Type 8J) = TT ('10-'15), TTS ('10-'15), TT RS ('12-'13)
*FV (Type FV or 8S) = TT ('16-'23), TTS ('16-'23), TT RS ('18-'22)
*FG (Type 42) = R8 ('10-'12, '14-'15)
*FX (Type 4S) = R8 ('17-'18, '20-'23)
*FS (Type 8U) = Q3 ('15-'18)
*F3 = Q3 ('19-'25)
*FJ = Q3 ('26-)
*FZ (Type F4) = Q4 e-tron, Q4 e-tron Sportback ('22-)
*FP (Type 8R) = Q5 ('10-'17), SQ5 ('14-'17)
*FY = Q5 ('18-'25), SQ5 ('18-'25), Q5 Sportback ('21-'25), SQ5 Sportback ('21-'25)
*GU = Q5 ('25-'26), SQ5 ('25-'26), Q5 Sportback ('25-'26), SQ5 Sportback ('25-'26)
*GF = Q6 e-tron, SQ6 e-tron, Q6 e-tron Sportback, SQ6 e-tron Sportback ('25, '27)
*FE (Type 4L) = Q7 ('10-'15)
*F7 (Type 4M) = Q7 ('17-), SQ7 ('20-)
*F1 (Type 4M) = Q8 ('19-), SQ8 ('20-), RS Q8 ('20-)
*GE = e-tron ('19, '21-'23), e-tron S ('22-'23), e-tron Sportback ('20-'23), e-tron S Sportback ('22-'23),<br> Q8 e-tron ('24), SQ8 e-tron ('24), Q8 e-tron Sportback ('24), SQ8 e-tron Sportback ('24)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
Check Digit in 9th position of VIN was always used in US & Canada. In Europe, Check Digit in 9th position of VIN was adopted for 2002 model year. Prior to the 2002 model year, a letter Z was used in the 9th position of the VIN in Europe.
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* A: Ingolstadt, Germany
* B: Brussels, Belgium
* D: Bratislava, Slovakia
* E: Emden, Germany
* K: Rheine, Germany (Karmann plant: Cabriolet ['98], A4 Cabriolet ['03-'09], S4 Cabriolet ['04-'09], RS4 Cabriolet ['08]
* N: Neckarsulm, Germany
* P: Zwickau, Germany
* R: Martorell, Spain
* 1: Gyor, Hungary
* 2: San Jose Chiapa, Puebla state, Mexico
* 7: Heilbronn, Germany
Other plant codes for non-North American models:
* G: Graz, Austria (Steyr-Daimler-Puch plant: V8L)
* U: Uitenhage, South Africa
* X: Poznan, Poland
* Z: Zuffenhausen, Germany (Porsche plant: RS2 Avant)
* 3: Changchun, China (FAW-VW plant)
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 9: Sarajevo, Bosnia and Herzegovina (Volkswagen Sarajevo d.o.o. plant)
'''Positions 12–17, Serial Number'''
{{BookCat}}
37b6vfg44qju0u0ax1gwh5p8aedgua4
4641536
4641521
2026-06-28T16:06:43Z
JustTheFacts33
3434282
/* Position 5, Engine Type: */
4641536
wikitext
text/x-wiki
{{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}}
===Positions 1–3, World Manufacturer Identifier:===
* WAU - Audi (Audi AG) passenger car
* WA1 - Audi (Audi AG) SUV
* WUA - Audi passenger car - quattro GmbH/Audi Sport GmbH (RS3, RS4, RS5, RS6, RS7, TT RS ['18-'22], R8,<br> S4 Cabriolet ['04-'09], S4 25quattro Special Edition sedan ['06], S8 plus ['16-'18], Non-North American Mkt. RS Q3, Q7 V12 TDI)
* WU1 - Audi SUV - Audi Sport GmbH (RS Q8)
* TRU - Audi Hungary (Audi Hungaria Motor Kft.) passenger car (only used for TT/TTS & '12-'13 TT RS)
* 3U5 - Audi Mexico SUV
===Position 5, Engine Type: ===
{| class="wikitable"
|+Position 5
|-
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 1.7L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 4000 4E/4000S 4E ('81-'83)
|-
| A || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 4000S ('84)
|-
| A || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT ('84)
|-
| A || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 80 ('90)
|-
| A || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi S6 ('95 & '96-'97 in Canada)
|-
| A || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi 90 ('95), Cabriolet ('95-'98), A4 2.8 ('96-'97), A6 sedan ('95-'97), A6 wagon ('95-'98)
|-
| A || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi A6 sedan 2.8 ('98-'99), A6 Avant 2.8 ('99)
|-
| A || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 560 hp.<br> Audi RS7 ('17-'18)
|-
| A || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine. 532 hp.<br> Audi R8 V10 Quattro ('17-'18), R8 V10 RWS ('18), R8 Rwd ('21)
|-
| A || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi Q7 3.0T ('17-'19)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. 261 hp. <br> Audi A4 45 TFSI ('21-'25), A4 Allroad 45 TFSI ('21-'25),<br> A5 Coupe/Cabriolet 45 TFSI ('21-'24), A5 Sportback 45 TFSI ('21-'25),<br> Q5 45 TFSI [FY] ('21-'25), Q5 Sportback 45 TFSI [FY] ('21-'25)
|-
| A || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain. 268 hp. <br> Audi Q5 [GU] (Mid '25-'26), Q5 Sportback [GU] (Mid '25-'26), A5 [B10] ('26)
|-
| B || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 4000 ('81), Coupe ('81-'83), 5000/5000S ('81-'84)
|-
| B || 1.8L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 4000S ('85-'87) [Pos. 7-8 of VIN is 81]
|-
| B || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 4000S Quattro ('84-'85), 4000CS Quattro ('86-'87) [Pos. 7-8 of VIN is 85],<br> 5000S ('85-'86)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 80 ('88-'89), 90 ('88)
|-
| B || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 100 ('89), 100 Quattro ('89)
|-
| B || 2.0L || I4 || Gas || SOHC,<br /> 8 valve || MPI. VW EA827 engine.<br> Audi 80 ('90)
|-
| B || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. <br> Audi A4 1.8T ('97-'99)
|-
| B || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine. 602 hp.<br> Audi R8 V10 Plus Quattro ('17-'18), R8 V10 Performance Quattro ('20-'23), R8 GT Rwd ('23)
|-
| B || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - ULEV. TSI. Timing chain. Detuned version: 201 hp.<br> Audi A4 40 TFSI ('21-'25), A5 Sportback 40 TFSI ('21-'25), Q5 40 TFSI [FY] ('22-'25)
|-
| B || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. 268 hp. <br> Audi A5 [B10] (Mid '25)
|-
| B || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain. 255 hp. <br> Audi Q3 ('26)
|-
| C || 2.1L || I5 Turbo || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 5000 Turbo ('81-'83)
|-
| C || 2.1L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Quattro Coupe ('82‡ & '83-'85), 5000S Turbo ('84-'85)
|-
| C || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 80 ('91-'92), 80 Quattro ('88-'92), 90 ('88-'91), 90 Quattro ('88-'89),<br> 5000S ('87-'88), 5000S Quattro ('88), 100 ('90-'91), 100 Quattro ('90-'91)
|-
| C || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 200 Turbo ('89), 200 Turbo Quattro ('89)
|-
| C || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. CA-type emissions. <br> Audi A6 sedan ('95-'97), A6 wagon ('96-'98)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. <br> Audi A4 sedan/Avant 1.8T ('00-Mid '05), A4 Cabriolet 1.8T ('03-'06), TT [180 hp] ('00-'06)
|-
| C || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack.<br> Audi Q5 Hybrid (Early '14)
|-
| C || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 1.8T ('15)
|-
| C || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi SQ5 ('16-'17)
|-
| C || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. <br> Audi Q3 ('17-'18)
|-
| C || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 591 hp.<br> Audi RS6 Avant ('21-'23), RS7 ('21-'23)
|-
| C || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. 261 hp. <br> Audi Q7 45 TFSI ('23-'26)
|-
| D || 2.1L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT ('84)
|-
| D || 2.2L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT ('85-'87)
|-
| D || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 80 ('91), 80 Quattro ('90-'91), 90 ('90)
|-
| D || 2.3L || I5 || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe Quattro 20V ('90)
|-
| D || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 5000CS Turbo ('86-'88), 200 Turbo ('90-'91), 200 Turbo Quattro ('90)
|-
| D || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi A4 2.8 ('98-'99)
|-
| D || 2.7L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi S4 ('00-'02), A6 2.7T ('00-'04), Allroad Quattro 2.7T ('02-'05)
|-
| D || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine.<br> Audi A3 3.2 ('06-'09), TT 3.2 ('05-'06, '08-'09)
|-
| D || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi A8 3.0T/55 TFSI ('19-'26)
|-
| D || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 621 hp.<br> Audi RS6 Avant performance ('24-'26), RS7 performance ('24-'26)
|-
| E || 2.3L || I5 || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi Coupe GT 2.3 "Special Build" (Late '87)
|-
| E || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || SOHC,<br /> 10 valve || MPI. Audi EA828 I5 engine. <br> Audi 5000CS Turbo Quattro ('86-'88)
|-
| E || 2.3L || I5 || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi 90 Quattro 20V ('90-'91), Coupe Quattro 20V ('90-'91)
|-
| E || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi 200 Turbo Quattro 20V ('91)
|-
| E || 3.6L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. Timing belt. Audi V8 Quattro ('90-'91)
|-
| E || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi 90 ('95)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 2.0T ('08-'13)
|-
| E || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('18-'20), TT ('19-'23), Q3 2.0T/45 TFSI ('19-'20), Q3 S Line 45 TFSI ('21-'25)
|-
| E || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 453 hp.<br> Audi A8 4.0T ('19-'21)
|-
| E || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine. 562 hp.<br> Audi R8 V10 Quattro ('20), R8 V10 Performance Rwd ('22-'23)
|-
| F || 2.3L || I5 || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi 90 Quattro 20V ('90-'91), Coupe Quattro 20V ('91)
|-
| F || 3.7L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. Timing belt. Audi A8 3.7 ('97-'99)
|-
| F || 3.2L || 15° VR6 || Gas || DOHC,<br /> 24 valve || MPI. VW EA390 engine.<br> Audi TT 3.2 ('04-'05)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine. FSI. Timing belt. <br> Audi A3 2.0T ('06-'08), A4 sedan 2.0T (Mid '05-'08), A4 Avant 2.0T (Mid '05-'08),<br> A4 Cabriolet 2.0T ('07-'09), TT ('08-'09), TTS ('09)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A3 2.0T ('08-'11), A3 2.0T Quattro ('12-'13), A4 sedan 2.0T ('09-'12), A4 sedan 2.0T Fwd ('13-'16), A4 sedan 2.0T Quattro w/man. trans. ('13-'16), A4 sedan 2.0T Quattro w/auto. trans. (Early '13),<br> A4 Avant 2.0T ('09-'12), Allroad 2.0T (Early '13), A5 2.0T ('10-'12),<br> A5 Coupe 2.0T Quattro w/man. trans. ('13-'15), A5 Cabriolet 2.0T Fwd ('13-'14),<br> A5 2.0T Quattro w/auto. trans. (Early '13), A6 2.0T ('12-'16), TT ('09-'15), Q3 ('15-'16),<br> Q5 2.0T ('11-Early '13)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 2.0T (Early prod. '12)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas/E85 || DOHC,<br /> 16 valve || Flex Fuel. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A4 sedan 2.0T Quattro w/auto. trans. ('13-'16), Allroad 2.0T ('13-'16),<br> A5 2.0T Quattro w/auto. trans. ('13-'15), Q5 2.0T ('13-'15)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('15)
|-
| F || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 288 hp.<br> Audi S3 Quattro ('15)
|-
| F || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 450 hp.<br> Audi S6 ('17-'18), S7 ('17-'18)
|-
| F || 2.9L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi S6 ('20-'25), S7 ('20-'25)
|-
| G || 1.6L || I4 || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Audi 4000 Diesel ('82)
|-
| G || 2.0L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. Audi 5000 Diesel ('81)
|-
| G || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi A8 4.2 ('97-'99)
|-
| G || "3.2L" || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3.1L=3123cc.<br> Audi A4 sedan/Avant 3.2 (Mid '05-'06), A6 3.2 ('05-'06)
|-
| G || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi S4 ('10-'16), S5 Cabriolet ('10-'15, Early '16), S5 coupe ('13-'15), A6 3.0T ('09-'16),<br> A7 3.0T ('12-'16), A8 3.0T ('13-'15), Q5 3.0T ('13-'15), SQ5 ('14-'15), Q7 3.0T ('11-'15)
|-
| G || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A5 2.0T w/man. trans. ('16-'17)
|-
| G || 6.3L || 72° W12 || Gas || DOHC,<br /> 48 valve || Direct injection. VW W12 engine. Audi A8 W12 ('16)
|-
| G || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack.<br> Audi Q5 Hybrid ('16)
|-
| H || 1.6L || I4 Turbo || Diesel || SOHC,<br /> 8 valve || Indirect injection. VW EA827 engine. Audi 4000 Turbo Diesel ('83)
|-
| H || 2.0L || I5 || Diesel || SOHC,<br /> 10 valve || Indirect injection. Audi 5000 Diesel ('82)
|-
| H || 2.0L || I5 Turbo || Diesel || SOHC,<br /> 10 valve || Indirect injection. Audi 5000 Turbo Diesel ('83)
|-
| H || 2.8L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi A4 2.8 ('00-'01), A6 2.8 ('00-'01)
|-
| H || "3.2L" || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3.1L=3123cc.<br> Audi A4 sedan/Avant 3.2 ('06-'08), A4 Cabriolet 3.2 ('07-'09), A6 3.2 ('06-'09)
|-
| H || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. <br> Audi Q7 2.0T ('17-'19)
|-
| H || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine + electric motor. Lithium-ion Battery Pack.<br> Audi A8 60 TFSI e ('20-'21)
|-
| J || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi 90 ('93-'94), 100 ('92-'94)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. VW EA189 engine.<br> Audi A3 TDI ('10-'13)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve || Common-Rail Direct injection. SCR. VW EA288 engine.<br> Audi A3 TDI ('15)
|-
| J || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. 248 hp. <br> Audi Q7 45 TFSI ('20-'22)
|-
| K || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi 90 ('93-'95), 100 ('92-'94)
|-
| K || 3.2L || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3197cc. <br> Audi A4 sedan 3.2 ('09), A5 3.2 ('08-'10), A6 3.2 ('10-'11), Q5 3.2 ('09-'12)
|-
| L || 2.8L || 90° V6 || Gas || SOHC,<br /> 12 valve || MPI. Audi EA835 engine - Gen 1. Iron Block. <br> Audi Cabriolet ('94-'95)
|-
| L || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi A6 4.2 ('00-'04), A8 4.2 ('00-'06)
|-
| L || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi EA824 engine. 4163cc. Timing chain.<br> Audi S4 sedan/Avant ('04-'08), S4 Cabriolet ('04-'09),<br> A6 4.2 ('05-'06), Allroad Quattro 4.2 ('04-'05)
|-
| M || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine.<br> Audi A6 TDI ('14-'16), A7 TDI ('14-'16), A8 TDI ('14-'15), Q5 TDI ('14-'15), Q7 TDI ('09-'15)
|-
| M || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - ULEV. TSI. Timing chain. Detuned version: 188 hp.<br> Audi A4 Ultra 2.0T Fwd ('17-'18), A4 2.0T Fwd ('19-'20)
|-
| N || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Audi EA824 V10 engine.<br> Audi S6 ('07-'11), S8 ('07-'09)
|-
| N || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine.<br> Audi R8 ('10-'12, '14-'15)
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - ULEV. TSI. Timing chain. <br> Audi A4 2.0T Fwd/Quattro ('17-'18), A4 2.0T Quattro ('19-'20), A4 Allroad Quattro ('17-'20),<br> A5 Coupe/Cabriolet 2.0T Quattro ('18-'20), A5 Sportback 2.0T Quattro ('18-'20),<br> Q5 2.0T Quattro ('18-'20)
|-
| P || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi S4 [C4 (4A)] ('92-'93)
|-
| P || 2.7L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 2. Iron Block.<br> Audi Allroad Quattro 2.7T ('01)
|-
| P || 1.4L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 16 valve || Direct injection. VW EA211 engine + electric motor. Lithium-ion Battery Pack.<br> Audi A3 Sportback e-tron ('16-'18)
|-
| P || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack. TSI. Timing chain.<br> SULEV.<br> Audi A7 55 TFSI e ('21-'22)
|-
| R || 2.2L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA828 I5 engine. <br> Audi S4 [C4 (4A)] ('93-'94)
|-
| R || 6.0L || 72° W12 || Gas || DOHC,<br /> 48 valve || MPI. VW W12 engine. Audi A8 W12 ('05-'09)
|-
| R || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 605 hp.<br> Audi RS7 performance ('16-'18)
|-
| R || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. Audi A8 TDI ('16)
|-
| R || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 591 hp.<br> Audi RS Q8 ('20-'24)
|-
| R || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 631 hp.<br> Audi RS Q8 performance ('25-'26)
|-
| S || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp. <br> Audi TT (Early '00)
|-
| S || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc.<br> Audi S8 ('16)
|-
| S || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine.<br> Audi TT RS ('18-'22)
|-
| S || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 563 hp.<br> Audi S8 ('20-'26)
|-
| T || 1.8L || I4 Turbo Twin [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. High Output - 225 hp. Single Turbo, Twin Intercoolers. <br> Audi TT ('01-'06)
|-
| T || 3.0L || 90° V6 || Gas || DOHC,<br /> 30 valve || MPI. Audi EA835 engine - Gen 3. Aluminum block.<br> Audi A4 sedan/Avant 3.0 ('02-Mid '05), A4 Cabriolet 3.0 ('03-'06), A6 3.0 ('02-'04)
|-
| T || "3.2L" || 90° V6 || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. 3.1L=3123cc.<br> Audi A6 3.2 ('05)
|-
| U || 4.2L || 90° V8 || Gas || DOHC,<br /> 40 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi S6 Avant ('02-'03), S8 ('01-'03)
|-
| U || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> Audi RS4 sedan ('07-'08), RS4 Cabriolet ('08)
|-
| U || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Dry sump lubrication. Audi EA824 engine. 4163cc. Timing chain.<br> Audi R8 ('08-'12, '14-'15)
|-
| U || 5.2L || 90° V10 || Gas || DOHC,<br /> 40 valve || Direct injection. Dry sump lubrication. Audi EA824 V10 engine.<br> Audi R8 V10 coupe w/man. trans. (Early '14) [when U in 5th pos. of VIN follows G in 4th pos. of VIN]
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - PZEV. TSI. Timing chain. Detuned version: 184 hp.<br> Audi A3 2.0T Fwd ('17)
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - SULEV. TSI. Timing chain. Detuned version: 184 hp.<br> Audi A3 2.0T Fwd ('18-'20), Q3 40 TFSI ('21-'22)
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - ULEV. TSI. Timing chain. Detuned version: 184 hp.<br> Audi Q3 40 TFSI ('23-'24 & '25 in Canada)
|-
| U || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 48v Mild Hybrid. Direct injection. Miller Cycle (B-Cycle). Intake AVS. Audi EA888 engine - SULEV.<br> TSI. Timing chain. 201 hp.<br> Audi A3 40 TFSI ('22-'26)
|-
| V || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. 4172cc. Timing belt. Audi V8 Quattro ('92-'93)
|-
| V || 4.2L || 90° V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 40 valve || MPI. Audi V8 engine. 4172cc. Timing belt.<br> Audi RS6 (US: '03, Canada: '04)
|-
| V || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> Audi S5 coupe ('08-'12), A6 4.2 ('07-'11), A8 4.2 ('07-'12), Q7 4.2 ('07-'10)
|-
| V || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 24 valve || Direct injection. Audi EA897 engine. Audi Q5 TDI ('16)
|-
| V || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi Q8 3.0T/55 TFSI ('19-'26), Q7 55 TFSI ('25-'26)
|-
| W || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || MPI. Audi V8 engine. 4172cc. Timing belt. Audi V8 Quattro ('92-'94)
|-
| W || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine.<br> Audi RS3 ('17-'20)
|-
| W || 2.9L || 90° V6 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine.<br> Audi RS5 coupe ('18-'19, '21-'24), RS5 Sportback ('19, '21-'25)
|-
| W || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || 48v Mild Hybrid. Direct injection. Porsche-Audi EA825 engine. 3996cc. 500 hp.<br> Audi SQ7 ('20-'26), SQ8 ('20-'26)
|-
| W || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine. 394 hp.<br> Audi RS3 ('25-'26)
|-
| X || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || MPI. Audi EA827/EA113 engine. 180 hp. <br> Audi TT ('01-'02)
|-
| X || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi Q7 55 TFSI ('20-'24)
|-
| Y || 3.6L || 10.6° VR6 || Gas || DOHC,<br /> 24 valve || Direct injection. VW EA390 engine.<br> Audi Q7 3.6 ('07-'10)
|-
| 1 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA113 engine - ULEV. FSI. Timing belt.<br> Audi TTS ('10-'15)
|-
| 1 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 288 hp.<br> Audi S3 Quattro ('16-'20), TTS ('16-'23)
|-
| 2 || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc.<br> Audi S6 ('13-'16), S7 ('13-'16), RS7 ('14-'16), A8 4.0T ('13-'15), S8 ('13-'15)
|-
| 2 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas/E85 || DOHC,<br /> 16 valve || Flex Fuel. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A5 2.0T w/auto. trans. ('16-'17), Q5 2.0T ('16-'17)
|-
| 2 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi A6 3.0T ('17), A7 3.0T ('17)
|-
| 2 || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || 48v Mild Hybrid. Direct injection. Audi-Porsche EA839 engine.<br> Audi A6 3.0T/55 TFSI ('19-'25), A6 Allroad ('20-'26), A7 3.0T/55 TFSI ('19-'25)
|-
| 2 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric [[w:Plug-in hybrid|PHEV]] || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack. TSI. Timing chain.<br> Audi Q5 55 TFSI e [FY] ('20-'25)
|-
| 3 || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct injection. Audi EA855 engine.<br> Audi TT RS ('12-'13)
|-
| 3 || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc.<br> Audi A8 4.0T ('16-'18)
|-
| 3 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine. Higher Output: 340 hp.<br> Audi A6 3.0T Competition ('17), A6 3.0T ('18), A7 3.0T Competition ('17), A7 3.0T ('18)
|-
| 3 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. 261 hp.<br> Audi A6 Sport 45 TFSI ('21), A6 45 TFSI ('22-'25)
|-
| 3 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 306 hp.<br> Audi S3 Quattro ('22-'24)
|-
| 4 || 6.3L || 72° W12 || Gas || DOHC,<br /> 48 valve || Direct injection. VW W12 engine. Audi A8 W12 ('12-'15)
|-
| 4 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi S5 coupe ('16-'17), S5 Cabriolet ('16-'17), A8 3.0T ('16-'18)
|-
| 4 || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine.<br> Audi S4 ('18-'25), S5 coupe/cabriolet ('18-'24), S5 Sportback ('18-'25), SQ5 [FY] ('18-'25),<br> SQ5 Sportback [FY] ('21-'25)
|-
| 4 || 2.5L || I5 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 20 valve || Direct/Port injection. Audi EA855 Evo engine. 401 hp.<br> Audi RS3 ('22-'24)
|-
| 5 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi TT ('16-'17)
|-
| 5 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Exhaust AVS. Audi EA888 engine - SULEV. TSI. Timing chain.<br> Audi TT ('18)
|-
| 5 || 4.0L || V8 Twin Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 32 valve || Direct injection. Audi-Bentley EA824 engine. 3993cc. 605 hp.<br> Audi S8 plus ('16-'18)
|-
| 5 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. High Output: 328 hp.<br> Audi S3 Quattro ('25-'26)
|-
| 5 || 3.0L || 90° V6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi-Porsche EA839 engine.<br> Audi S5 [B10] (Mid '25-'26), SQ5 [GU] (Mid '25-'26), SQ5 Sportback [GU] (Mid '25-'26), A6 [C9] ('26)
|-
| 6 || 4.2L || 90° V8 || Gas || DOHC,<br /> 32 valve || Direct injection. Audi EA824 engine. 4163cc. Timing chain.<br> Audi RS5 ('13-'15)
|-
| 7 || 1.8L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 Fwd 1.8T ('16)
|-
| 7 || 3.0L || 90° V6 supercharged [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve || Direct injection. Audi EA837 engine.<br> Audi Q5 3.0T ('16-'17)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas-Electric Hybrid || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine + electric motor. Lithium-ion Battery Pack.<br> Audi Q5 Hybrid ('13-'15)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - PZEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('16-'17)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - SULEV. TSI. Timing chain.<br> Audi A3 2.0T Quattro ('18)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain.<br> Audi A6 2.0T ('17-'18)
|-
| 8 || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve || 12v Mild Hybrid. Direct injection. Audi EA888 engine - ULEV. TSI. Timing chain. 248 hp.<br> Audi A6 2.0T/45 TFSI ('19-'21)
|}
‡1982 Audi Quattro: 3-4 cars were imported to the US for marketing purposes and as press cars. They remained in the US after those uses ended and transitioned into private ownership. These cars carry US-style VINs rather than European-style VINs. 3 VINs have been found. Their serial numbers (last 6 digits of VIN) are 900565, 900586, and 900648. The Audi Quattro was officially sold in the US for the 1983-1985 model years.
====Motor codes for Electric Vehicles====
{| class="wikitable"
|+Position 5
|-
! VIN !! Motor Designation !! Fuel !! Drive Wheels !! Battery Size !! Application/Notes
|-
| A ||APA250 (Front) / AKA320 (Rear)|| Electricity || All ||95 Kwh (gross) / 83.6 Kwh (net) || Audi e-tron quattro ('19), e-tron Sportback quattro ('20)
|-
| A ||APA250 (Front) / AKA320 (Rear)|| Electricity || All ||95 Kwh (gross) / 86.5 Kwh (net) || Audi e-tron quattro ('21-'23), e-tron Sportback quattro ('21-'23)
|-
| A ||APA250 (Front) / AKA320 (Rear)|| Electricity || All ||114 Kwh (gross) / 106 Kwh (net) || Audi Q8 e-tron quattro ('24), Q8 e-tron Sportback quattro ('24)
|-
| C ||APA320 (1 Front) / ATA250 (2 Rear)|| Electricity || All ||95 Kwh (gross) / 86.5 Kwh (net) || Audi e-tron S quattro ('22-'23), e-tron S Sportback quattro ('22-'23)
|-
| C ||APA320 (1 Front) / ATA250 (2 Rear)|| Electricity || All ||114 Kwh (gross) / 106 Kwh (net) || Audi SQ8 e-tron quattro ('24), SQ8 e-tron Sportback quattro ('24)
|-
| C ||APP310 (Rear) || Electricity || Rear ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 40 ('23-Mid '24)
|-
| C ||APP580 (Rear)|| Electricity || Rear ||100 Kwh (gross) / 94.4 Kwh (net) || Audi A6 e-tron Sportback ('25)
|-
| D ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi A6 e-tron Sportback quattro ('25)
|-
| E ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi S6 e-tron Sportback quattro ('25)
|-
| H ||V662 (Front) Code EBGA / V663 (Rear) (Higher output-Code EBEA)|| Electricity || All ||93.4 Kwh (gross) / 83.7 Kwh (net) || Audi RS e-tron GT quattro ('22-'24)
|-
| J ||V662 (Front) Code EBGA / V663 (Rear) Code EBFA|| Electricity || All ||93.4 Kwh (gross) / 83.7 Kwh (net) || Audi e-tron GT quattro ('22-'24)
|-
| U ||HASCO Magna asynchronous motor (Front) / APP550 (Rear) || Electricity || All ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 55 quattro (Mid '24-'26), Q4 e-tron Sportback 55 quattro (Mid '24-'26)
|-
| 2 ||HASCO Magna asynchronous motor (Front) / APP310 (Rear) || Electricity || All ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 50 quattro ('22-Mid '24), Q4 e-tron Sportback 50 quattro ('22-Mid '24)
|-
| 2 ||APP580 (Rear)|| Electricity || Rear ||100 Kwh (gross) / 94.4 Kwh (net) || Audi Q6 e-tron ('25)
|-
| 4 ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi Q6 e-tron quattro ('25), Q6 e-tron Sportback quattro ('25)
|-
| 5 ||APP550 (Rear) || Electricity || Rear ||82 Kwh (gross) / 77 Kwh (net) || Audi Q4 e-tron 45 ('25-'26)
|-
| 5 ||APA275 (Front) / APP580 (Rear)|| Electricity || All ||100 Kwh (gross) / 94.4 Kwh (net) || Audi SQ6 e-tron quattro ('25), SQ6 e-tron Sportback quattro ('25)
|-
| 8 || (Front) / (Rear) || Electricity || All ||105 Kwh (gross) / 97 Kwh (net) || Audi RS e-tron GT performance quattro ('25-'26)
|-
| 9 || (Front) / (Rear) || Electricity || All ||105 Kwh (gross) / 97 Kwh (net) || Audi S e-tron GT quattro ('25-'26)
|}
HASCO Magna=HASCO Magna Electric Drive Systems Co., Ltd.
===Position 6, Restraint Systems:===
*0 = Active (Manual) 3-point Seat Belts only
*5 = Driver-side Airbag, Driver and Passenger Active (Manual) 3-point Seat Belts
*8 = Driver and Passenger Front Airbags
*2 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front Side Airbags ('00-'06 TT)
*4 = Active (Manual) belts plus Driver and Passenger Front Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags ('04-'07 A8)
*5 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags (A3, A4, A6, Allroad)
*6 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags ('06-'09 A3, A4, A6, Allroad)
*3 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Front Knee Airbags ('08-'09 TT, R8, '09 TTS)
*4 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags ('03-'09 A4 Cabriolet, '04-'09 S4 Cabriolet, '08 RS4 Cabriolet)
*7 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags (Except '08-'09 A8/S8)
*9 = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags & Front Knee Airbags ('08-'09 A8/S8)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Front Knee Airbags ('10- A5/S5 Cabriolet, '10- TT/TTS, '12-'13 TT RS, '10- R8)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags ('10- A3, '10- A4/S4, '10-'11 A5/S5 Coupe, '10- A6/S6, '12- A7, '10- Q5, '10- Q7)
*B = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags ('10- A3, '10- A4/S4, '10- A6/S6, '12- A7, '10- Q5, '10- Q7)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front Side Airbags & Sideguard Side Curtain Airbags & Front Knee Airbags ('12- A5/S5 Coupe)
*A = Active (Manual) belts plus Driver and Passenger Front Advanced Airbags & Front and Rear Side Airbags & Sideguard Side Curtain Airbags & Front Knee Airbags ('10-' A8)
===Position 7-8, Model Line:===
1981-2009:
*8P = A3 ('06-'09)
*81 = 4000 Fwd ('81-'87)
*85 = 4000 Quattro ('84-'87), Coupe ('81-'83), Coupe GT ('84-'87), Quattro ('82‡ & '83-'85)
*89 = 80/90 ('88-'89)
*8A = 80 ('90-'92), 90 ('90-'91)
*8C = 90 ('93-'95)
*8B = Coupe Quattro ('90-'91)
*8G = Cabriolet ('94-'98)
*8D = A4 ('96-'01), S4 ('00-'02)
*8E = A4 ('02-'08), S4 ('04-'08), RS4 ('07-'08)
*8H = A4 Cabriolet ('03-'09), S4 Cabriolet ('04-'09), RS4 Cabriolet ('08)
*8K = A4 ('09)
*8T = A5 coupe ('08-'09), S5 coupe ('08-'09)
*43 = 5000 ('81-'83)
*44 = 5000 ('84-'88), 100/200 ('89-'91)
*4A = 100/S4 ('92-'94), A6 sedan ('95-'97), A6 wagon ('95-'98), S6 ('95 & '96-'97 in Canada)
*4B = A6 sedan ('98-'04), A6 Avant wagon ('99-'04), Allroad ('01-'05), S6 ('02-'03), RS6 (US: '03, Canada: '04)
*4F = A6 ('05-'09), S6 ('07-'09)
*44 = V8 Quattro ('90)
*4A = V8 Quattro ('91-'94)
*4D = A8 ('97-'03), S8 ('01-'03)
*4E = A8 ('04-'09), S8 ('07-'09)
*8N = TT ('00-'06)
*8J = TT ('08-'09), TTS ('09)
*42 = R8 ('08-'09)
*8R = Q5 ('09)
*4L = Q7 ('07-'09)
2010-:
*FM (Type 8P) = A3 ('10-'13)
*FF (Type 8V) = A3 ('15-'20), S3 ('15-'20), RS3 ('17-'20), A3 Sportback e-tron [PHEV] '16-'18
*GY (Type 8Y) = A3/S3/RS3 ('22-)
*FL (Type 8K) = A4 ('10-'16), Allroad ('13-'16), S4 ('10-'16)
*F4 (Type 8W) = A4 ('17-'25), A4 Allroad ('17-'25), S4 ('18-'25)
*FR (Type 8T) = A5 Coupe ('10-'17), S5 Coupe ('10-'17), RS5 Coupe ('13-'15)
*FH (Type 8F) = A5 Cabriolet ('10-'17), S5 Cabriolet ('10-'17), RS5 Cabriolet ('13-'15)
*F5 = A5 ('18-'25), S5 ('18-'25), RS5 ('18-'19, '21-'25) [Coupe/Cabriolet: '18-'24, Sportback: '18-'25]
*FU = A5/S5 ('25-)
*FB (Type 4F) = A6 ('10-'11), S6 ('10-'11)
*FC (Type 4G) = A6 ('12-'18), S6 ('13-'18)
*FC (Type 4G) = A7 ('12-'18), S7 ('13-'18), RS7 ('14-'18)
*F2 (Type 4A) = A6 ('19-'25), S6 ('20-'25), RS6 Avant ('21-'26), A6 Allroad ('20-'26)
*F2 (Type 4K) = A7 ('19-'25), S7 ('20-'25), RS7 ('21-'26)
*FN = A6 ('26-)
*GH = A6 e-tron, S6 e-tron ('25, '27)
*FA (Type 4E) = A8 ('10)
*FD (Type 4H) = A8 ('11-'18), S8 ('13-'16), S8 plus ('16-'18)
*F8 (Type 4N) = A8 ('19-'26), S8 ('20-'26)
*FW (Type F8) = e-tron GT ('22-'24), RS e-tron GT ('22-'24), S e-tron GT ('25-), RS e-tron GT performance ('25-)
*FK (Type 8J) = TT ('10-'15), TTS ('10-'15), TT RS ('12-'13)
*FV (Type FV or 8S) = TT ('16-'23), TTS ('16-'23), TT RS ('18-'22)
*FG (Type 42) = R8 ('10-'12, '14-'15)
*FX (Type 4S) = R8 ('17-'18, '20-'23)
*FS (Type 8U) = Q3 ('15-'18)
*F3 = Q3 ('19-'25)
*FJ = Q3 ('26-)
*FZ (Type F4) = Q4 e-tron, Q4 e-tron Sportback ('22-)
*FP (Type 8R) = Q5 ('10-'17), SQ5 ('14-'17)
*FY = Q5 ('18-'25), SQ5 ('18-'25), Q5 Sportback ('21-'25), SQ5 Sportback ('21-'25)
*GU = Q5 ('25-'26), SQ5 ('25-'26), Q5 Sportback ('25-'26), SQ5 Sportback ('25-'26)
*GF = Q6 e-tron, SQ6 e-tron, Q6 e-tron Sportback, SQ6 e-tron Sportback ('25, '27)
*FE (Type 4L) = Q7 ('10-'15)
*F7 (Type 4M) = Q7 ('17-), SQ7 ('20-)
*F1 (Type 4M) = Q8 ('19-), SQ8 ('20-), RS Q8 ('20-)
*GE = e-tron ('19, '21-'23), e-tron S ('22-'23), e-tron Sportback ('20-'23), e-tron S Sportback ('22-'23),<br> Q8 e-tron ('24), SQ8 e-tron ('24), Q8 e-tron Sportback ('24), SQ8 e-tron Sportback ('24)
===Position 9, Check Digit===
[[Vehicle Identification Numbers (VIN codes)/Check digit |Check digit]]
Check Digit in 9th position of VIN was always used in US & Canada. In Europe, Check Digit in 9th position of VIN was adopted for 2002 model year. Prior to the 2002 model year, a letter Z was used in the 9th position of the VIN in Europe.
===Position 10, Model Year: ===
[[Vehicle Identification Numbers (VIN codes)/Model year|Model year]]
===Position 11, Production Plant:===
* A: Ingolstadt, Germany
* B: Brussels, Belgium
* D: Bratislava, Slovakia
* E: Emden, Germany
* K: Rheine, Germany (Karmann plant: Cabriolet ['98], A4 Cabriolet ['03-'09], S4 Cabriolet ['04-'09], RS4 Cabriolet ['08]
* N: Neckarsulm, Germany
* P: Zwickau, Germany
* R: Martorell, Spain
* 1: Gyor, Hungary
* 2: San Jose Chiapa, Puebla state, Mexico
* 7: Heilbronn, Germany
Other plant codes for non-North American models:
* G: Graz, Austria (Steyr-Daimler-Puch plant: V8L)
* U: Uitenhage, South Africa
* X: Poznan, Poland
* Z: Zuffenhausen, Germany (Porsche plant: RS2 Avant)
* 3: Changchun, China (FAW-VW plant)
* 4: Sao Jose dos Pinhais, Parana state, Brazil (Curitiba plant)
* 9: Sarajevo, Bosnia and Herzegovina (Volkswagen Sarajevo d.o.o. plant)
'''Positions 12–17, Serial Number'''
{{BookCat}}
7mgqykrldiog0pw1b3ksgb9q57ewvxp
Atomic Chess Opening Theory
0
484028
4641644
4641426
2026-06-29T08:26:14Z
AtomicChess
3609849
4641644
wikitext
text/x-wiki
{{Chess diagram
| tright
| Initial position in Atomic Chess
|=
|rd|nd|bd|qd|kd|bd|nd|rd
|pd|pd|pd|pd|pd|pd|pd|pd
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
|pl|pl|pl|pl|pl|pl|pl|pl
|rl|nl|bl|ql|kl|bl|nl|rl
| Atomic Chess starts with the standard chess setup.
}}
== Starting position ==
This is the starting position, the way the pieces are laid out when you first set them up at the start of a game of chess. White moves first, so they have the first choice of how to proceed.
== Tree for this book ==
* [[Atomic_Chess_Opening_Theory/1._Nf3|1. Nf3]]
** [[Atomic Chess Opening Theory/1._Nf3/1...f6|1...f6]]
*** [[Atomic_Chess_Opening_Theory/1._Nf3/1...f6/2._Nc3|2. Nc3]]
**** [[Atomic_Chess_Opening_Theory/1._Nf3/1...f6/2._Nc3/2...Nh6|2...Nh6]]
***** [[Atomic_Chess_Opening_Theory/1._Nf3/1...f6/2._Nc3/2...Nh6/3._g4|3. g4]]
****** [[Atomic_Chess_Opening_Theory/1._Nf3/1...f6/2._Nc3/2...Nh6/3._g4/3...c6|3...c6]]
*** [[Atomic_Chess_Opening_Theory/1._Nf3/1...f6/2._Nd4|2. Nd4]]
**** [[Atomic_Chess_Opening_Theory/1._Nf3/1...f6/2._Nd4/2...Nh6|2...Nh6]]
{{BookCat}}
c8rww640bmrfln0jm2bhvcl3y8ss7v4
Typewriting
0
484043
4641590
4641345
2026-06-29T00:00:09Z
Kai Burghardt
153973
add more images, replace # with hash because there should be no more of one occurrence of any <dt> in a <dl>, add missing mandatory alt texts to images, add some more character descriptions
4641590
wikitext
text/x-wiki
{{new book}}<!-- delete {{new book}} on ≥ 2026‑07‑11 -->
{{displaytitle|title=𝚃𝚢𝚙𝚎𝚠𝚛𝚒𝚝𝚒𝚗𝚐}}
Typewriters are machines that can be used to print texts on paper.
Today, typewriters are obsolete technology;
they are uneconomic and have been superseded by electronic devices.
== about ==
{{IPA notice}}<!-- transcription of word platen -->
{{reading level|intermediate}}
In the heyday of typewriters hundreds of books were written on typewriting.
Unfortunately, when typewriters fell out of favor many people simply threw them away.
It may be difficult to find and get a copy.
This collaboratively edited Wikibook attempts to address the demand.
Typewriter enthusiasts around the world have created and shared thousands upon thousands of instructional videos.
We are glad you are considering reading an easily searchable textbook instead or to supplement video instructions.
; learning objective
: skillful use of non‐specialized typewriters <!-- stenographic typewriters used by court reporters, Braille typewriters used by blind people --> designed to type up general documents in English
; target audience
: seeing and hearing adults
; not covered in this Wikibook
: This book is {{em|not}} <!-- the {{em}} template is used so a text search for a straight/typewriter apostrophe yields more relevant results --> about touchtyping, the skill of typing without looking at the keys (sometimes by layman also called {{em|typewriting}}), because it is a largely transferable skill (cmp. [[#legacy|§ legacy]]). This book does not provide product guidance, choosing the right typewriter that suits your needs. Only very mundane “artistic” use is described, not like “ASCII art” or similar.
; structure
: top‐down: general instructions, then delve into details; <!-- in the spirit of Wikibooks ain’t paper --> a lot of information is repeated multiple times so you may refer to sections in a handbook manner; {{em|strictly}} continuous reading from stem to stern should not be necessary
; guidelines for co‐authors
: there are hundreds upon hundreds of (printed) books on typewriting, what makes this book different is extensive hyperlinking; note that Wikibooks holds back on interwiki (and interbook) linking, this book has to be self‐contained; write one sentence per physical line to facilitate readable diffs
<!-- limit = 3 corresponds to <h3> [h3 being inclusive] -->{{TOC|limit=3}}{{clear}}
== typewriting ==
This section provides some background information.
Feel free to [[#supplies|skip it entirely]].
Note, similar to {{em|computer}}, a {{em|typewriter}} can refer to a person {{em|using}} a machine called {{em|typewriter}};
however, {{em|this}} use is – just like the word {{em|computer}} referring to a person – deemed archaic.
[[Image: Schreibmaschinen-Typen.jpg|thumb|alt=An array of levers featuring mirrored outlines of characters.|Terminoloy: In the (type) basket one (type) bar with a (type) slug at its top end is raised.]]
=== legacy ===
<!-- This section is about the legacy left {{em|by the machine}}. The habits people adopted and still show – such as writing abbreviations without intervening spaces {{mono|e.g.}} are not considered legacy for the purposes of this section. -->
* To this day ({{as of|2026|alt=2026 {{abbr|CE|common era}}}}) {{em|almost all computer keyboards}} use a {{em|staggered}} keyboard layout{{noprint|1={{hover info|the specific physical arrangement of keys}}}}, even though
** there is no mechanical need for that (there are no levers),
** there is not any consumer demand (anymore) to ease the transition {{em|from a typewriter}} to a computer keyboard,
** nor is it natural for humans’ fingers to move laterally.
* Although there is no chance that levers collide and and get jammed, the predominant key mappings{{noprint|1={{hover info|the assignment of keys to characters or functions}}}} are based on the typewriter keyboard mapping. {{em|One}} of the considerations for the predominant typewriter “QWERTY” key mapping is that when typing fast {{em|physically}} near type bars may get [[#jam|jammed]], hence pulling apart common character combinations reduced the chance of jams.
* On computer keyboards the {{key press|shift}} key is still called {{key press|shift}} even though it does not shift anything. On actual typewriters the {{key press|shift}} key {{em|actually moves}} the basket – the entirety of the assembly holding the type bars together – or carriage – the unit that holds the paper.
* Key tops are labeled as if there was only one key mapping. In fact the keyboard mapping can be changed electronically, the key labeled {{key press|D}} producing an {{code|A}} is no problem. There is no {{em|mechanical}} connection between the key {{key press|D}} producing a {{code|D}}.
=== preference ===
Few authors of novels – and not necessarily just those who grew up in the prime days of typewriters – claim they used typewriters because it facilitated and matched their authoring workflow.
A {{em|typescript}} (typewritten manuscript) has the benefit that a publisher can perform {{abbr|OCR|optical character recognition}}, the computerized extraction of text from scanned images.
== supplies ==
Typewriters need paper and ink, and not just any paper and ink.
(Preparing masters for hectography – a small batch replication method – is also possible, but <!-- currently --> not explained in this book.)
[[Image: Hermes Rocket 1959 type specimen.png|thumb|alt=All letters a typewriter can produce next to a ruler marked in centimeters and inch.|Upon closer inspection the blot of white ink can be identified.]]
=== paper ===
==== color ====
Should you want to be able to correct typing mistakes with correction fluids or tapes, use {{em|white}} paper because the correction fluid or tape is {{em|primarily}} available in white.
Thus correcting typing mistakes on 100% recycling paper results in unsightly bright white spots, unnecessarily {{em|drawing}} the attention to the fact that you typed something wrong and had to correct it.
Other methods to correct typing mistakes are not as sensitive to the paper’s color;
still you get the best photocopies with white paper.
==== grammage ====
Typewriters can print on paper that has a certain range of grammage.
{{em|Grammage}} refers to the mass per area.
* If the paper is too thin, glyphs with eyes such as {{code|D}} or {{code|o}} may punch holes into the sheet. Less than about 75 {{abbr|gsm|grams per square meter}} is too thin. It is possible to “just” type lightly, but this tends to produce quite faint lettering, too.
* If the paper is too thick, the paper might not {{em|reliably}} advance. Consider anything in the neighborhood of 300 {{abbr|gsm|grams per square meter}} too much. You {{em|can}} still help push and hold your paper with a hand, e. g. for one‐time prints like business or place cards, however, the typewriter’s platen‐roller also {{em|curls}} the paper.
The most abundant retail paper has a grammage of 80 {{abbr|gsm|grams per square meter}} or 90 {{abbr|gsm|grams per square meter}}, so it is easy to obtain.
If you intend to produce carbon copies, choose the thinner paper of the two.
==== dimensions ====
{{anchor|maximum length}}
There is no actual {{em|maximum length}} – length referring to the secondary writing direction (for Latin‐based scripts like English usually downward).
Otherwise, there are maximum and minimum dimensions for sheets.
{{anchor|maximum width}}
The {{em|maximum width}} is dictated by the paper feed slot.
Keep in mind that the typewriter may not be able to type all the way to the (physically imposed) margins, neither is there usually any need.
{{anchor|minimum size}}
The {{em|minimum size}} needs to be tested.
If the paper is too small, it does not advance reliably, maybe even gets skewed because there is no sufficient grip.
It is recommended to simply write on a large sheet and {{em|cut it down}} to the desired size when finished.
Another method is to use a backing sheet, a larger paper, and secure the smaller one with paperclips.
=== ink ===
{{noprint|1={{wikipedia|ink ribbon}}}}
The necessary ink is stored on ribbons.
There are two types, the typewriter accepting only one of them:
* plastic film on one side coated with carbon (at least {{em|originally}}; different mixtures were {{em|in use since}}, yet it is {{em|still}} referred to as “carbon”)
* textile ribbons tinctured with ink
Both are available with either correctable or indelible ink{{noprint|1={{hover info|indelible ink is typically employed if documents need to be tamper‐evident and remain easily legible in several decades}}}}.
And to add insult to injury, there are various ribbon widths.
{{helpful hint
| title = privacy
| hint = Because of the gaps left on (correctable) carbon tapes, typed texts can usually be reconstructed, albeit without spaces and formatting.<!-- Textile ribbons {{em|may}} suffer from the same problem only upon first use. -->
}}
The plastic film comes in easy to install cartridges.
Since the carbon is transferred from the film to the paper, there are gaps:
this means the film is single use only.
Have replacement ready.
{{helpful hint
| title = re‐inking
| hint = Ensure the ink dries before winding it up. Moisture and poor ventilation, i. e. when wound up, facilitate grow of {{em|mold}}, another disadvantage.
}}
Textile ribbons deplete gradually.
They can be re‐inked (either automatically via a “sponge” or manually, although {{abbr|DIY|do it yourself}} can get pretty messy).
Unfortunately, textile ribbons also wear out.
=== accessories ===
Unavailable [[#characters|characters]] are augmented by hand.
Have a pen that matches the ink color and character line thickness.
To plan ahead [[#tabulation|tables]] or similar you may find graph paper – paper with a 5 mm grid printed on it – useful;
today, of course, you can use a computer and a text editor.
{{noprint|1={{wikipedia|correction fluid|correction tape|typewriter eraser}}}}<!-- omitted from print because URLs get printed in full, too, wasting a lot of space -->
Nobody is perfect.
Have correction fluid, correction tape, or razor/scalpel to [[#mistakes|delete typing mistakes]].
You can also use a special eraser, yet this produces detritus to be kept out of the machine.
Choose according to your requirements and preferences.
Alternatively, many electric typewriters can be equipped with a far more convenient correction tape.
There are two types:
* If a carbon‑C tape – {{em|C}} stands for {{em|correctable}} – is used, the ink can be removed with a lift‐off tape. This tape is comparable to adhesive tape.
* If {{em|indelible}} ink is used, there are whiteout tapes. They simply cover up the incorrect character; it is still there.
== operation ==
Typewriters are {{em|mechanical}} machines.
Some things may not work as smoothly as it used when the original manufacturer delivered them.
You may need to start with {{delink|[[#maintenance|maintenance]]}}.
=== environment ===
* A typewriter takes up space. Ensure the carriage can move all the way from left to right and you can still comfortably access the controls.
* The inertia of the carriage as it advances to the next character position may rock “light”‐weight portable typewriters enough to make them move on a smooth surface. Ensure you cannot easily push your typewriter sideways with your hand. Possibly place the typewriter on rubber like a place mat. Some rubber mat may be recommended anyway to decouple mechanical vibrations to some degree
* There are exceptionally {{em|quiet}} typewriters (“noiseless”), but in general typewriters are annoyingly '''loud'''. For prolonged work consider wearing ear protection. This may also aid your ability to concentrate. The sound is nonetheless valuable feedback that you have [[#strokes|{{em|properly}} struck a key]].
=== preparation ===
Some models feature a carriage lock.
The carriage lock ensures the carriage does not move back and forth during transport.
The carriage invariably locks {{em|at the center}} position.
The carriage lock lever is at a hard to reach location to prevent accidental locking, e. g. near the feet.
It may take a while to find it.
=== loading the ribbon ===
For stencils loading a ribbon is not necessary, maybe you even need to remove the ribbon if the typewriter does not allow to select a stencil mode.
# Remove the cover. In some models you shift the frame toward you. In others you have to lift the cover. In some sophisticated models the cover is hinged and you need to push a latch pin.
# Load the ribbon as explained below.
# Install the cover.
[[Image: Silver-Reed SR 200 in red-9542.jpg|thumb|alt=A ribbon spool visible when the typewriter’s cover is removed.|The spools sits entirely on the pin.]]
[[Image: Farbbandführung Schreibmaschine Wanderer 35.jpg|thumb|alt=A ribbon only partially held in the ribbon carrier.|Another method: use only one tooth on each side.]]
==== spools ====
The ink ribbon’s ends are attached to two spools.
# To facilitate even wear, you may want to label the spool: place a sticker on what shall be designated the top, indicate the winding/unwinding direction and maybe write the loading date. If you are a power user – someone who writes a lot with his typewriter on a regular basis – and do not intend to unload the ink ribbon, you can skip this step.
# There are two reel tables with pins the size of the spools’ central hole. Unwind the ribbon a bit and place both spools on the pin so that the ribbon wind/unwind {{em|on the far side}}, the side that is closer to the roller‐platen. Do not twist the ribbon. If the correct spools are used, the pins should stick out at the top. If not, rotate the spools a bit and {{em|lightly}} push them down. You may feel that the spools snap.
# Except in {{em|very}} old typewriters, there are two arms extending from the reel table with vertical slits. They can be moved laterally. These are part of the reverser mechanism. Place the ribbon in the slits. When reaching either end of the ribbon, the typewriter keeps pulling the ribbon: in consequence the tension exerted by the ribbon on the arm triggers a ribbon feed reversal.
# Thread the ribbon into the ribbon carrier ({{abbr|a. k. a.|also known as}} shaker or vibrator), the window that raises and falls down as you type characters. Using both hands, grab a short segment of the ribbon in the middle. Like flossing your teeth, use your thumbs to stretch this segment. Move it between the ribbon carrier and typing mask. In models that swivel the carriage (instead of shifting the basket, the assembly unit that holds all the type bars), you may have better access by [[#caps lock|using the {{key press|caps lock}}]].
# When descending the ribbon, switch from pushing to pulling: pull the lower edge of the ribbon and guide the ribbon downward so the lower teeth of the ribbon carrier become covered.
# Finally push down the upper edge past the gap and gently pull it toward you. Now straighten the ribbon so the upper teeth are covered, too.
# Turn either spool to remove {{em|excess}} slack. A {{em|little}} bit of slack is harmless. Note that {{em|one}} of the spools can only be rotated in one direction. This is correct.
==== cartridges ====
{{empty section}}
=== margins ===
Typewriters almost always have at least one margin delimiter.
The margin controls the area in the primary writing direction – the line length – you can write on.
The right‐hand margin is the imaginary vertical line on the paper not to be crossed when typing a line.
The left‐hand margin is the imaginary vertical line on the paper at which you start typing, more specifically on the right‐hand side of the line.
{{helpful hint
| title = standardization
| hint = {{abbr|ISO|International Organization for Standardization}} standard 838 expects that the margin to be punched with holes has a width of {{nowrap|20 mm – 25 mm}} {{nowrap|(ca. ¾ in – 1 in)}}.
}}
==== pitch ====
Today, margin requirements are usually expressed as a length.
However, you will not find a ruler on your typewriter marked in, say, millimeters.
{{noprint|1={{wikipedia|pitch (typewriter)}}}}
There {{em|are}} few typewriters that advance horizontally only so much as the character really needs, e. g. an I (eye) and l (ell) is narrow, whereas M advances a lot more.
By far most typewriters have a fixed {{em|pitch}}:
each character occupies exactly the same width as the other (“monospace”).
Horizontal pitch is expressed in {{em|character per inch}} (cpi), vertical pitch in {{em|lines per inch}} (lpi).
One inch is 25.4 {{abbr|mm|millimeters}}.
Take a ruler and align the zero mark with the zero mark on (any) ruler on the typewriter.
If the ruler marks inches, you can read the {{abbr|cpi|character per inch}} value directly at the 1" mark.
For rulers with a millimeter scale, read the character count at 127 {{abbr|mm|millimeters}} and divide it by 5.
The most common pitches are 10 or 12 {{abbr|cpi|characters per inch}}.
Some typewriters allow switching between the two, especially if the typeface is exchangeable.
{{editor note|§ Calculating the margins: needs more details, is not easy to understand. Refactor this.}}
Knowing your machine’s pitch allows you to {{em|calculate}}
# the sheet’s width expressed in character positions,
# the margin widths expressed in character positions, and thus
# how many character positions you need to subtract.
{{example
| 1 = DIN 5008
| 2 = For example,
* an {{abbr|ISO|International Organization for Standardization}} standard 216 size A4 sheet (210 {{abbr|mm|millimeters}} × 297 {{abbr|mm|millimeters}})
* is to be printed with a 10 {{abbr|cpi|character per inch}} (“pica”) machine
* leaving 25 {{abbr|mm|millimeters}} of margin on the left‐hand side and
* 20 {{abbr|mm|millimeters}} of margin on the right‐hand side.
# 210 {{abbr|mm|millimeters}} × 10 {{abbr|cpi|character per inch}} = 210 {{abbr|mm|millimeters}} × 10 {{abbr|ch|characters}} ÷ 25.4 {{abbr|mm|millimeters}} ≈ 82.68 {{abbr|ch|characters}}
#  25 {{abbr|mm|millimeters}} × 10 {{abbr|cpi|character per inch}} =  25 {{abbr|mm|millimeters}} × 10 {{abbr|ch|characters}} ÷ 25.4 {{abbr|mm|millimeters}} ≈  9.84 {{abbr|ch|characters}}
#  20 {{abbr|mm|millimeters}} × 10 {{abbr|cpi|character per inch}} =  20 {{abbr|mm|millimeters}} × 10 {{abbr|ch|characters}} ÷ 25.4 {{abbr|mm|millimeters}} ≈  7.87 {{abbr|ch|characters}}
# 82.68 {{abbr|ch|characters}} − 10 {{abbr|ch|characters}} − 8 {{abbr|ch|characters}} ≈  64.68 {{abbr|ch|characters}}
Some models feature an adjustable paper guide:
This is an edge in the paper feed slot you can move laterally.
It has a pointy mark indicating the position on the ruler.
Using the calculated information you set the paper guide preferably at −10 {{abbr|ch|characters}}.
If not available, shift all values by a constant, preferably a multiple of 10.
}}
==== adjustment ====
Knowing the required margins expressed as a character count you can adjust them.
Some typewriters have an “automatic” margin function.
You press some magic button and simultaneously move the carriage to the first or last position a character should appear.
{{anchor|margin tabs}}
More often than not you need to set the margins yourself.
For that – depending on the model – depress or lift the margin tabs.
The margin tabs are located close to the margin ruler, a numbered scale, in non‐electric typewriters at the far end of the carriage or anywhere close to the platen‐roller.
You may see an arrow, triangular arrow heading pointing toward the numbered ruler, or just a vertical line.
In some models it is not necessary to actually push the tab down,
* if you are adjusting the left‐hand margin in the leftward direction, and
* if you are adjusting the right‐hand margin in the rightward direction.
You can simply push them laterally.
# Move the carriage to a central position. The margins cannot be adjusted past the current position lest unless [[#margin release|released]]. To move the carriage rightward you can just push it. For leftward movement you can – beside repeatedly hitting {{key press|space}} – find a carriage release lever.
# Move the margin tabs.
==== margin release ====
In normal operations the carriage cannot be moved beyond the currently set margins.
However, there is a {{em|margin release}}:
The {{key press|margin release}} may be labeled {{key press|⇼}}, {{key press|∷}} or just {{key press|MR}}.
Press the margin release key to move past either margin.
When you {{em|were}} stopped by the right‐hand margin, you may {{em|hear}} that the carriage {{em|advanced}} upon pressing the margin release key.
Once you have passed either margin, let go of the margin release.
You only need to press the margin release key
* to move {{em|rightward}} across the {{em|right‐hand}} margin, or
* to move {{em|leftward}} across the {{em|left‐hand}} margin.
The opposite direction,
* moving {{em|rightward}} across the {{em|left‐hand}} margin, and
* moving {{em|leftward}} across the {{em|right‐hand}} margin
is always “allowed”.
Essentially, the margin release is “reset” whenever you enter the designated text area.
=== loading paper ===
You need to feed your typewriter with paper.
Typewriters take sheets.
There are
* no sprockets to advance continuous paper with perforated borders that can be teared away, so
* continuous paper may slowly veer to either side because it is not perfectly aligned.
To some degree you can label envelopes for letters, too.
# Possibly wash your hands if you just loaded the ribbon. You do not want to get ink blots on the paper before you even started.
# Move the carriage to a center position. Usually this {{em|should not matter}}, but in some machines the paper may get stuck. To move the carriage rightward you can just push it. For leftward movement you can – beside repeatedly hitting {{key press|space}} – find a release lever.
# Usually you type on one sheet at a time. However, if applicable, prepare the stack of paper. For carbon copies place one carbon sheet {{em|between}} each paper. The black side faces the sheet to print on. The characters on the top sheet get their ink from the ribbon. Ensure all sheets have the same orientation in case you are using papers with a letterhead already printed on it. Align the borders by tapping the stack edge first on the tabletop. Be careful as to not to crinkle the carbon sheets.
# Insert the paper(s). There is a slot on the far side of the platen{{noprint|1={{hover info|{{word|en|platen}} is pronounced {{IPA|/ˈplætən/}}, like “platten”}}}}. If you are using paper that has a letterhead already printed on it, the front page should face away from you and the top is fed first. For plain blank paper the direction does not matter. If there are any carbon sheets, their black sides have to face the platen.
# Disengage the line spacer. The line spacer defines how much you advance in the secondary writing direction. It is either a lever on the carriage next to some single‐digit marks, or you can pull out the platen‐roller knob (usually the left one).
# Turn the knob of the platen‐roller. There are usually two knobs, one on each side. The right‐hand platen knob is turned clockwise, the left‐hand platen knob counter‐clockwise. As you twist either knob, the paper should be drawn into the machine now. If not, you may be using too thick paper, or you need to ensure the paper release is disengaged. As the paper emerges on the other side, you may need to guide it below the paper bail. Return the bail bar back to its normal position.
# Turn either knob so that roughly 50% of the paper is not in yet, 50% of the paper already sticks out front. In some models you have to {{em|lift the paper bail}}, that is the bar sometimes with numbered marks and possibly rollers sitting on top of the already written on paper. In some models the paper slips right under it {{em|without further ado}}, in others you have to push it there.
# Ideally you notice that the edges of the paper, the one in the back and the one in front of it, {{em|align}} perfectly. Should the paper not be aligned perfectly, pinch the papers (both back and front) at the top edge. Engage the paper release. You can now move the paper freely. Shift them individually so the corners align. If your typewriter does not have a paper guide at its feed slot, pay also attention the paper bail: you probably want the paper’s edge to appear at a certain mark. Now pinch the the papers together again and gently pull up (against the roller‐platen). Cautiously disengage the paper release. When disengaged, let go of the paper. One last visual check: while the line snap is disengaged twist the platen knob back and forth, so at the top the front and rear end alternate. If you notice any raggedness, repeat this step.
# Turn the roller‐platen back to the first line you want to write in. Note, while it is possible to write at the very top of the sheet, writing all the way to the bottom of the page is not possible: some paper has to remain in the machine for sufficient grip, otherwise it gets out of place and your text lines become bent. If you need text to appear all the way to the bottom, use larger paper and cut it down when finished.
# Engage the line spacer, and optionally erect the paper stand. The paper stand is one or two bars you can lift behind the paper feed.
{{choice
| 1 = {{anchor|side}} Single‐sided vs. double‐sided
| 2 =
Because of the {{em|embossing}} it creates on the other side, typewritten documents are usually {{em|single‐sided}} for {{em|purely esthetic<!-- alt. US spelling, see [[wikt:esthetic]] --> reasons}}. In some instances the front {{em|and back}} are always printed on, e. g. a post card or a last will and testament (not exceeding two pages) so as to not raise any doubt that it was {{em|one}} document. (As a side bar, in some jurisdictions a will has to {{em|be handwritten}} or else certified by a notary public.) It is apparent that the thicker the paper, the less pronounced the imprint and thus more acceptable to write on both sides.
}}
=== typing ===
{{helpful hint
| title = hyphenation rules
| hint = It is a sin to hyphenate across pages. In justified composition, at most two or three subsequent lines may be hyphenated.
}}
[[Image: Typewriter.JPG|thumb|alt=The left aspect of a typewriter.|Use the lever to advance the sheet and return the carriage to the left‐hand margin.]]
==== line ====
In most models, as you approach the right‐hand margin you will hear a bell ring.
Latin script typewriters are usually adjusted to ring the bell when you can still type at most 6 – 8 {{abbr|ch|characters}}.
This is a good point in time to consider wrapping the line.
If the margin is not too thin, it is generally acceptable to print {{em|punctuation}} like hyphens and periods past it;
use the [[#margin release|margin release]].
{{XWarning|With {{em|some}} models the carriage simply stops advancing once you reach the right‐hand margin. Before you know it you are typing multiple characters on top of each other. More sophisticated models arrest the type bars.}}
The carriage return lever performs two actions at once, return the carriage and advance to the next line.
It is the biggest lever you can find, attached at the left‐hand end of the carriage.
Push the lever rightward till the carriage is stopped by the left‐hand margin.
{{anchor|enter}}
Electric typewriters do not have a carriage return lever, but a new line {{key press|enter}} key.
Unlike the non‐electric counterparts, electric typewriters block typing any new letters while the carriage or type head returns to the starting position.
You should feel increased resistance if you try pressing any printing keys.
{{anchor|line spacer}}
The {{em|line spacer}} defines by how much you want to advance the paper when starting a new line.
It usually has at least three settings: 1, 1½ and 2.
These are {{em|factors}} to a reasonable line height, e. g. ⅙ {{abbr|in|inch}}.
This line height includes a little bit of leading – that is {{em|lead}} as in the chemical element.
To select the line height factor you may find a wheel or lever.
{{choice
| 1 = {{anchor|lh}} What line spacer setting should I use (for the main text body)?
| 2 =
If you intend to [[#superscript|superscript]] or [[#subscript|subscript]] text inside a paragraph, it may be wise to use the 150% setting. By using double spacing, you can insert words you forgot typing using the space between lines. Alternatively, if sufficiently wide, the margin can be utilized to supply missing words (in combination with some insertion mark).
Because of the uniform width of characters, typewritten texts are said to be more difficult to read in comparison to texts set with a proportional font. Consider adding vertical space just to aid legibility. On the other hand, it is a matter of practice; for instance hanzi (“Chinese characters”) are placed in uniform square boxes and nobody is complaining about that.
}}
The line spacer can be disengaged.
Some typewriters integrate disengaging the line spacer as a setting 0 (zero).
[[Image: Typewriter, portrait, office, workplace, interior, desk, lady Fortepan 5050.jpg|thumb|alt=A lady sits in front of a typewriter.|a reasonable typing position]]
==== strokes ====
Users of electric typewriters simply touch the keys.
Just ensure it is switched on.
With mechanical typewriters the user has to muster the necessary force all on his own.
A proper stroke is resolute – quick attack and quick release.
Try a faint touch, try slow motion, it will not print.
The keys travel quite far in comparison to electric typewriters.
You want to apply all force in the {{em|downward}} direction.
Therefore sit upright and have the typewriter just a bit above lap height.
Moreover, should your finger slip they may get entangled between the keys.
For small face characters like the period ({{code|.}}), comma ({{code|,}}), colon ({{code|:}}) and semicolon ({{code|;}}) a {{em|light}} tap is sufficient;
especially if the period or comma are hit with full force you may inadvertently print the top area, too, creating bit of an angry vibe, period!
Furthermore, it {{em|may}} punch a [[#side|hole in the paper]] or even damage the ribbon.
If you are producing carbon copies, it is of import to strike keys with more force than usual.
An electric typewriter is therefore ideal for such a job.
Typing [[#mistakes|mistakes]] need to be corrected separately, in the original and each and every copy.
{{helpful hint
| title = performance
| hint = Typing speed is measured in {{em|strokes per minute}}, pressing {{key press|shift}} being counted, too, {{em|in addition}} to the actual letter key.
}}
{{anchor|jam}}
If you are typing {{em|fast}} on a typewriter using type bars – the levers that strike the paper – as opposed to type heads, you may be {{em|stopped}} by one bar holding up another one thus blocking the typing window.
This {{em|jam}} requires manual intervention.
Ensure you pull down the type bar {{em|closest}} to you first so as to not accidentally bend the levers.
If one letter, one type bar persistently does not seem to return, you may have the idea that you needed to lubricate the machine.
However, oiling the segment – the solid arced block with slits holding the type bars – may be {{em|inadvisable}} because it is {{em|hard to clean}};
over time accumulating dust in combination with oil produces icky goo making the type bars {{em|even harder}} to fall back.
{{clear}}
==== capital letters ====
There are {{em|very few}} typewriters that have {{em|two}} sets of keys:
one for majuscules{{noprint|1={{hover info|the typographic term for upper‐case letters}}}} and one for minuscules{{noprint|1={{hover info|the typographic term for lower‐case letters}}}}.
The predominant pattern, however, has only one set of keys.
By default the letter keys produce minuscules.
You need to press either {{key press|shift}} key.
They may be unlabeled.
One is left of the {{key press|Z}}, the other one at the far right in the same row.
Unlike keyboards for electronic devices – including electric typewriters – you do not need to ensure the {{key press|shift}} key is pressed {{em|before}} hitting the letter key.
You can press {{key press|shift}} and the desired letter in sync, {{em|simultaneously}}.
In mechanical typewriters both mechanisms are independent from each other.
{{anchor|caps lock}}
{{noprint|1=[[File: Wagenheber einer Schreibmaschine.webm|thumb|{{key press|caps lock}} in action]]}}<!-- omitted from print because it is a video -->
In modern typography, headings are set with a {{em|larger}} font{{noprint|1={{hover info|set of glyphs following a common design}}}} size and possibly {{em|heavier}} weight{{noprint|1={{hover info|thin and thick lines}}}}.
Some premium typewriters have exchangeable type heads, but more often than not you are “stuck” with a {{em|single}} font size and weight.
If [[#underlining|underlining]] or similar is insufficient, you may want to type a title in all‐caps.
# To facilitate this, typewriters frequently feature a {{key press|caps lock}} key. It is the key immediately above {{em|the left}} {{key press|shift}} key and may also be unlabeled or called {{key press|shift lock}}. If you press {{key press|caps lock}} you will feel a snap. It often moves in unison with all {{key press|shift}} keys.
# Now you can type upper‐case letters {{em|without}} pressing {{key press|shift}}. However, note that digit and punctuation keys also produce {{em|their shifted}} meaning. All‐caps titles may benefit from added horizontal spacing, but only a little bit; one whole space character is already too much, so you need to [[#space out|use the semi‐step mechanism]].
# {{key press|Caps lock}} is a “one‐way” key: To unlock the {{key press|caps lock}} you press either {{key press|shift}} key. Unlike computer keyboards, pressing {{key press|caps lock}} when it is already “activated” will {{em|not reverse}} its effects.
Historically, telegrams were often written in all‐caps, some typewriters even had {{em|only}} upper‐case letters.
An orator may appreciate if his speech is written all‐caps, as he may find it easier to read.
=== mistakes ===
# {{em|Assess}} the situation. A number of mistakes can be corrected by clever use of the typewriter. Let’s say you meant to type capital {{code|E}} but – just for purpose of giving an example – typed a capital {{code|F}}. To remedy the situation, simply go back and type the {{code|E}}. It may not look perfect – in particular if the {{code|F}} dons a serif at its foot – but it works.
# Either flag the mistake – put a small adhesive slip on the original – to postpone it, or {{em|apply}} the correction immediately as described in the subsections.
# If there are too many mistakes on a page, consider taking a break and {{em|starting over}}. There is no satisfaction in a poorly typed page.
[[Image: CarbonFarbband mit Lift-off-Korrektur.jpg|thumb|alt=The digit one in black on white paper. Next to it grooves of the digit two.|You cannot undo the impression: You can discern the <code>2</code>.]]
==== errors ====
There are correction fluids and tapes available.
# For convenient access of the mistyped part, advance the paper by a couple lines first.
# Now simply cover the incorrectly typed characters.
# If applicable, ensure the paint is dried. Make it a habit and {{em|always}} give it a gentle blow, regardless whether it is really necessary.
# Return to the first elided position and – hopefully – type the {{em|correct}} character(s).
For {{em|bulk corrections}} or if the paper is not in the correction fluid’s or tape’s color (i. e. not white), type the correction on a separate piece of paper, cut it out and glue it in the proper place.
Evidently, this correction needs to be postponed till the page is finished.
If your typewriter is equipped with a lift‐off tape, press the {{key press|⌫}} key and now type {{em|the incorrect}} character as printed.
While the erase function is enabled, the lift‐off tape is raised, not the carbon film.
After having typed one printing character, the erase function is disabled.
The type head stays at its current position so you can immediately type {{em|the correct}} character.
{{helpful hint
| title = {{abbr|CC|carbon copy}} perfection
| hint = The thickness of the copy papers and carbon sheets add up to the roller‐platen diameter. Expect more slippage than usual. Avoid unnecessary scrolling.
}}
If you are making {{abbr|CCs|carbon copies}} and want to correct a mistake with the typewriter, consider advancing the stack by a couple lines and temporarily inserting scrap sheets between every copy and its corresponding carbon paper.
Return to the correct line and the correcting character gets printed on the scrap sheets.
Before continuing writing, remove the scrap sheets.
This ordeal ensures the newly printed characters are perfectly aligned with the line and everything, something hard to achieve if you {{em|reloaded}} the paper.
{{anchor|x-ing}}
A {{em|fast}} method to rectify mistakes is {{em|overprinting}} incorrect parts:
Return the carriage or type head to the position of the first incorrect character.
Repeatedly strike {{key press|x}} or {{key press|/}} while the cursor is above incorrectly typed characters.
As convenient this method is, it is particularly ugly.
However, it is generally an acceptable compromise {{em|for carbon‐copied}} documents, amending each copy individually being awfully time‐consuming and risking damage.
Of course, ugliness is of no concern for {{em|drafts}} or other one‐time use documents.
==== omissions ====
If you {{em|forgot typing {{em|one}} character}}, you can use the semi‐step mechanics.
Many typewriters actually advance by one character cell in two steps.
Return to the character position preceding the insertion position.
Press {{em|and hold}} the space bar.
Now type the character to be inserted.
You may furthermore want to consider to [[#superscript|superscript]] the character.
Temporarily scroll back by one half line.
{{helpful hint
| title = paragraphs
| hint = Paragraph breaks are either indicated by vertical blank space, or by indenting the first line but without vertical space. Do not indent the first line {{em|and}} add vertical blank space at the same time. Outdenting (“negative” indentation) is rarely done with typewriters.
}}
=== tabulation ===
To facilitate the creation of lists and tables or just to quickly indent the first line of a paragraph, some typewriters are equipped with a fast‐forward key.
There are two mechanisms:
* The user can define {{em|tabulator stops}} and pressing <!-- {{key press|TAB}} not listed because it features arrows in both directions --> {{key press|⇥}} jumps to the next tab stop. This gives the users maximum flexibility, yet the mechanics are also pretty heavy. This kind is usually only found in desk typewriters.
* Pressing <!-- {{key press|TAB}} not listed because it dons arrows in both directions --> {{key press|⇥}} advances to the next character position divisible by 10 ± some offset. 10 is the most common value and cannot be changed. This mechanism is sometimes present in “light‐weight” portable typewriters.
Either mechanism is suitable to create {{em|left‐aligned}} itemizations.
Aligning the radix mark (i. e. in English the decimal point) of numbers of varying length still requires manual alignment.
To set and reset tabulator stops, there are either {{em|two}} keys – {{key press|CL}} to clear, {{key press|SET}} to set a tabulator stop – or there is a tabulator control lever or swivel key.
It is labeled with a plus and minus sign, or unlabeled but plus and minus signs are found next to it on the typewriter frame.
* By pushing the control in the direction of the plus sign, you {{em|set}} a tabulator stop {{em|at}} the current position.
* By pushing the control in the direction of the minus sign, you {{em|cancel}} the tabulator stop {{em|at}} the current position (if any is set).
To type an itemization using the tabulation mechanics, proceed as follows:
# Clear all tabulator stops. Some typewriters have a small lever on the carriage to clear all tabulator stops at once. Others require you to return the carriage, press {{em|and hold}} the {{key press|CL}} key or the tabulator control lever in the direction of the minus sign, and press <!-- {{key press|TAB}} not listed because shows arrows in both directions --> {{key press|⇥}}. The carriage scoots to the right‐hand margin canceling all tabulator stops. To verify your success, if you return the carriage and press {{key press|⇥}}, the carriage should glide all the way to the right‐hand [[#margins|margin]] now.
# Advance to the position where the carriage should stop. Push the tabulator control in the direction of the plus sign and release. Repeat this step as required. Because tabulation stops are “stored” as {{em|little}} pins, it may be recommended to keep stops {{em|at most}} 5 to 15 character positions apart. The heavy carriage {{em|smashing}} with all its mass into a tabulation stop pin is quite some stress. Of course you can always simply use one hand and slow down the carriage as you tab.
# Type the itemization and use the {{key press|⇥}} key to advance to the beginning of the next cell. You {{em|can amend}} tabulator stops as you go, e. g. because table cells are merged or split up.
Even without a neat tabulation mechanism, some typewriters feature a “slow” forward {{key press|↠}} key (sounding like “automatic (gun‑)fire”).
With some practice you get used to its pace and can jump forward quickly.
=== unloading paper ===
When you have finished typing up the current page:
# Optionally proofread the page and fix any mistakes while you can. {{em|Reloading}} the page following {{em|exactly}} the same line rhythm is difficult, so this is the last chance to fix any mistakes.
# Engage the paper release. It is usually a lever found on the carriage. This removes pressure from the rollers beneath the roller‐platen. The paper can move freely now.
# Pull the stack of sheets out of the machine and lay them in the working area of your desk.
# Disengage the paper release for subsequent operation.
# If applicable, separate any carbon sheets. Be careful as to not to crinkle them.
# If applicable, make amendments you postponed, e. g. filling in missing [[#characters|characters]].
# If you are super‐organized, you place the finished pages in a tray collecting all pages of one document.
=== end of work ===
# {{anchor|flat spot prevention}} Engage the paper release. Prolonged pressure to the rollers at one point may make them flat. Flat spots convey the paper poorly. On the other hand, this puts stress on the paper release spring so it may wear out and actually decrease the pressure the rollers exercise. Rest assured, springs as well as rollers can be replaced; replacement rollers are now marketed as parts for electronic printers.
# Select the easiest setting for everything else, for instance disengage {{key press|caps lock}}.
# The ink in the ink ribbon is adjusted to not dry out for several months. It is not necessary to remove the ribbon after each use. Moreover, unloading exposes the ribbon to the risk of damage. Unloading the ribbon is essentially [[#loading the ribbon|loading the ribbon]] in reverse. Carbon films and correction tapes can stay indefinitely.
# Dust accumulation is bad. Return the carriage to a center position and cover the typewriter e. g. with a nonfuzzy towel. Portable typewriters intended for travel come with a lid turning the typewriter–lid unit into a suitcase.
== glossary ==
=== procedures ===
; {{anchor|form}} forms
: To fill out forms you need to disable the line advance snap. This allows to freely align the form vertically. Depending on the model you just pull the paper drum knob, turn a wheel or lever. It may be integrated in the line advance length selector and labeled 0 (zero). For form fields of limited length, be sure to consult the ruler to count the characters you can type, maybe necessitating condensing the intended entry.
; {{anchor|hanging punctuation}} hanging punctuation
: Justified composition may produce an unsteady right‐hand margin: commas, hyphens and periods are predominantly white characters. Despite the justified composition the right‐hand margin optically appears to be ragged. The solution is to insert a half‐space within the line.
; {{anchor|hectography}} hectography
: Typewriters that accommodate for dual‐[[#colors|colored]] ribbons usually also have a blank setting. If not remove the ribbon.
; {{anchor|letterspacing}} letterspacing
: Type one space character between every character. That also means to type an intervening space you hit {{key press|space}} {{em|three}} times in a row. See [[#space out|§ space out]] for the favored more sophisticated method.
; {{anchor|dashed lines}} lines, dashed, horizontal, vertical or diagonal
: A vertical dashed line can be achieved by putting straight apostrophes ({{code|'}}) beneath each other. A horizontal dashed line is achieved by repeatedly typing dashes ({{code|-}}). {{em|If}} their angle/orientation is right, diagonal dashed lines can be achieved with the accents {{code|´}} and {{code|`}}. Because of the varying line lengths of these characters and not worth mentioning the spacing between them, diagrams employing dashed lines in multiple directions may look inconsistent.
; {{anchor|dotted lines}} lines, dotted, horizontal, vertical, or diagonal
: For horizontal dotted lines, repeatedly type the period ({{code|.}}). For vertical dotted lines, type period, use the {{key press|backspace}}, advance the line feed by half a line and type a period again. Alternatively hold the spacer and type periods as you advance the roller‐platen. Repeat as appropriate. For a denser vertical line you can also employ the colon ({{code|:}}).
; {{anchor|solid lines}} lines, solid, horizontal or vertical
: Some typewriters have a groove in the typing mask. Place a pen here and move the carriage for horizontal lines (hold the carriage release for that), or {{em|retreat}} the paper for vertical lines ({{em|advancing}} the paper can make it difficult to see where to stop).
; {{anchor|perforation}} perforation
: To perforate thin enough paper – e. g. a reply form beneath a letter body or phone number strips to tear from a bulletin board posting – use [[#dotted lines|dotted lines]] with {{em|even less}} spacing. Due to their small face area it is usually not necessary to apply extra force when typing. Consider selecting the non‐printing stencil mode or removing the ribbon since the ink is usually not necessary.
; {{anchor|space out}} space out
: Many typewriters actually advance in {{em|two}} steps. Upon pressing any printing key (including {{key press|space}}, excluding “dead” keys) the carriage (or type head) advances by one half character width, and once {{em|all}} keys are released the carriage advances {{em|another}} half character width. This semi‐step mechanics can be utilized to add horizontal space, esp. desirable in [[#caps lock|all‐caps titles]]. First, type a character as usual. Next hit {{em|and hold}} the {{key press|spacer}}. This “adds” just {{em|one half}} of space. Now type the next character. Release the {{key press|spacer}} and strike it as usual. Repeat these steps as appropriate. Should this mechanism not supported by your typewriter, resort to [[#letterspacing|letterspacing]]. Letterspacing, however, adds {{em|too much}} horizontal space.
[[Image: Olympia typewriter - German keyboard layout-9609.jpg|thumb|alt=A lever next to black, white and red-colored spots.|Example color selector. If loaded correctly, in this setting the black part of the ribbon prints.]]
=== markup ===
Markup options are severely limited, yet they are {{em|not}} none.
; {{anchor|bold}} bold
: To some degree bold text can be produced by typing the same letters again. Use the {{key press|backspace}} to return to the starting position. On the other hand this may increase the likelihood of punching through the paper (e. g. creating holes). You can always simply manually retrace the character with a pen after you have finished typing the page.
; {{anchor|colors}} colors
: There are dual‐colored ribbons and typewriters that allow selecting between the top and bottom portion of the ribbon. Note that carbon copies remain monochrome regardless.
; {{anchor|double underlining}} double underlining
: Advance either one whole or just one half line. Use the equal <!-- no link to [[#equal sign]] because it would be awfully inconvenient --> sign {{code|1==}} to produce double underlines. Hit and hold {{code|1==}}, depress the space bar and hit {{code|1==}} again, release both keys and repeat as appropriate. If you have advanced {{em|just one half line}}, you may want to skip underlining for descenders ({{code|g}}, {{code|j}}, {{code|p}}, {{code|q}}, {{code|y}}, and possibly parentheses, {{code|f}} and the capital {{code|Q}}, too).
: Alternatively, use the same method as [[#underlining|underlining]] twice, with vertical displacement applied to the second time. The vertical distance between the underlines may be considered too wide, though.
; {{anchor|overlining}} overlining
: See [[#underlining|underlining]] except that the underline is produced for the preceding line and you may want to skip any inch signs ({{code|"}}). Keep in mind that overlining may be confused for underlining.
; {{anchor|strike|strikethrough}} strikethrough
: The underscore used for [[#underlining|underlining]] cannot necessarily be aligned properly. Instead use the hyphen‐dash. However, the dash is too short, you need to hit and hold the dash, then hold the space bar and hit the dash {{em|again}}. Now release both keys and repeat as appropriate.
; {{anchor|subscript}} subscript
: Advance the paper by half a line. This requires turning the roller‐drum manually; the lever advances the paper by at least one whole line and you may accidentally move the carriage, too. When you are done, turn the roller‐platen back by half a line. In {{em|proper}} typesetting the [[#typeface|font]] size has to be reduced, too, but this cannot be achieved with a typewriter.
; {{anchor|superscript}} superscript
: See [[#subscript|§ subscript]], taking into consideration that you roll back the paper by half a line {{em|upward}}.
; {{anchor|typeface}} typefaces
: There are typewriters that have replaceable type heads; spheres or discs are common forms. In other typewriters the typeface is an integral part. If the typeface conveys meaning – such as variable names in mathematics and sciences – consider writing them with a pen by hand.
; {{anchor|underlining}} underlining
: Many typewriters feature an underscore character ({{code|_}}). This character is wide enough so repeatedly striking it creates one {{em|continuous}} underline. You may want to consider skipping descenders ({{code|g}}, {{code|j}}, {{code|p}}, {{code|q}}, {{code|y}}, and possibly parentheses, {{code|f}} and the capital {{code|Q}}, too). See also [[#double underlining|double underlining]] and [[#solid lines|solid lines]].
; {{anchor|zig‐zag underlining}} underlining, zig‐zag
: A zig‐zag underline may be achieved by stringing [[#caret|carets ({{code|^}})]] together in the next line at a semi‐step.
{{helpful hint
| title = symbol curiosity
| hint = [[Image: German typewriter 'Torpedo' from WWII with double Siegrune symbol of the SS (Schutzstaffel) instead of number "zero".jpg|frameless|alt=A key of a typewriter labeled with a rune double S symbol instead of a zero.]]
In {{abbr|Nazi|National Socialist}} Germany typewriters with dedicated “lightning‐bolt” {{abbr|SS|Schutzstaffel}} types were in use. Few even featured a {{key press|࿕}} key (rotated by π∕4).
}}
=== characters ===
Through clever combination and positioning, you can type more characters than 40‐something keys/types provide, sort of.
These are all {{em|workarounds}} and do {{em|not}} meet the quality standards in {{em|professional}} typography.
{{CompactTOC8
| name = character name
| center = yes
| a = [[#CHARACTER-A|A]]
| b = [[#CHARACTER-B|B]]
| c = [[#CHARACTER-C|C]]
| d = [[#CHARACTER-D|D]]
| e = [[#CHARACTER-E|E]]
| f = [[#CHARACTER-F|F]]
| g = G
| h = [[#CHARACTER-H|H]]
| i = [[#CHARACTER-I|I]]
| j = J
| k = K
| l = [[#CHARACTER-L|L]]
| m = [[#CHARACTER-M|M]]
| n = N
| o = [[#CHARACTER-O|O]]
| p = [[#CHARACTER-P|P]]
| q = [[#CHARACTER-Q|Q]]
| r = [[#CHARACTER-R|R]]
| s = [[#CHARACTER-S|S]]
| t = [[#CHARACTER-T|T]]
| u = [[#CHARACTER-U|U]]
| v = V
| w = W
| x = X
| y = Y
| z = [[#CHARACTER-Z|Z]]
}}
; {{anchor|CHARACTER-A}} {{anchor|á}} á
: Hit {{code|´}}. This is usually a “dead key”, that means it does not advance the carriage. Now type {{code|a}}. Evidently, this opposite the customary writing order: using a pen the base letter is written first and accents are added second.
; {{anchor|â}} â
: Hit {{code|´}} and {{code|`}}; this is usually one “dead key”, that means it does not advance the carriage or type head. Now type {{code|a}}.
; {{anchor|æ}} æ
: Hit and hold {{code|a}}, press the space bar and release {{code|a}} and type an {{code|e}}. Note that the majuscule Æ cannot be produced in this fashion.
; {{anchor|ampersand}} ampresand
: See [[#et ligature|&]].
; {{anchor|eight-spoked asterisk|✳}} ✳
: With a sans‐serif{{noprint|1={{hover info|without serifs (serifs are additional lines, e. g. horizontal lines added to a capital eye {{code|I}})}}}} typeface you can superimpose a {{code|+}} and {{code|x}}. It looks more {{em|rectangular}} than round though.
; {{anchor|at|@}} @
: {{em|At}} is conventionally substituted by an {{code|a}} overlaid with a slash {{code|/}}. Obviously without the arc it does not look anything like the {{code|@}} sign. You can type an {{code|a}}, {{key press|backspace}} and type a capital {{code|O}} if you insist on a round shape. However, you probably want to consider spelling out the word {{em|at}} instead.
; {{anchor|CHARACTER-B}} {{anchor|equal sign}} =
: Some models lack a proper equal sign. Type a dash {{code|-}}, use the {{key press|backspace}}, now firmly hold the roller‐platen knob and advance the paper {{em|just}} a {{em|tiny}} bit ({{em|before}} it snaps to the next position), and type a dash again.
; {{anchor|bullet|◦}} ◦
: Just type an {{mono|o}}.
; {{anchor|CHARACTER-C}} {{anchor|ç}} ç
: It may not produce a satisfactory result but you can try combining {{code|c}} with a comma ({{code|,}}).
; {{anchor|©}} ©
: The copyright sign is conventionally approximated as [[wikt:(c)|{{code|(c)}}]].
; {{anchor|care of|℅}} ℅
: Reverse the paper by one half line, hit and hold {{code|c}}, press the space bar, advance the paper by one half line, type a {{code|/}}, release all keys and type one {{code|o}}.
; {{anchor|caret}} ‸
: Advance to the next line, hit {{code|´}} and {{code|`}}; this is usually one “dead key”, that means it does not advance the carriage.
: Alternatively, finish writing the page, load the paper again upside‐down, disable line snap, and after careful adjustment type a {{code|v}}.
; {{anchor|cent}} ¢
: The cent sign is substituted by overlaying the minuscule {{code|c}} with a forward slash {{code|/}}. The {{em|proper}} glyph has a {{em|vertical}} line sticking out by the same amount at the top and bottom. Considering spelling out the word {{em|cent}} if the reader may not recognize the substitution as {{code|¢}}.
; {{anchor|commercial minus sign|٪|⁒}} ⁒, ٪
: Roll back by one half line, hit and hold period {{code|.}}, depress the space bar and release the period, advance the paper by one half line, type a slash {{code|/}}, release all keys and type one final period {{code|.}}.
; {{anchor|CHARACTER-D}} {{anchor|đ}} đ
: The version with a stroke through the (upper) stem can be achieved this way: Hit and hold {{code|d}}, press the space bar, release {{code|d}}, and type a {{code|t}}.
; {{anchor|Đ}} Đ
: Hit and hold dash ({{code|-}}), press and hold the spacer, release the dash key, and type a capital {{code|D}}.
; {{anchor|degree|°}} °
: The degree sign is approximated by a [[#superscript|superscript]] {{code|o}} (minuscule oh). A {{em|perfectionist}} may hold and turn the roller‐platen knob {{em|slightly}} backward.
; {{anchor|division sign|÷}} ÷
: It may not produce satisfactory results, but try to overlay a colon ({{code|:}}) with any of the horizontal lines.
; {{anchor|dollar sign|$}} $
: A single stroke dollar character can be substituted by overlaying the {{code|S}} with a slash ({{code|/}}).
; {{anchor|double dagger|‡}} ‡
: Type a plus {{code|+}}, hit {{key press|backspace}}, roll back the paper by half a line and type {{code|+}} again. There may be a small gap between the plus signs. Advance the paper by half a line to return to the baseline.
; {{anchor|CHARACTER-E}} {{anchor|emdash}} em dash
: An em dash ({{code|—}}) can be approximated by hitting and holding the hyphen‐dash key, pressing the space bar and then hitting the dash key again. Release both keys and hit the dash key one more time. If efficiency is more important, simply striking {{code|-}} three times will do.
; {{anchor|endash}} en dash
: An en dash ({{code|–}}) can be approximated by hitting and holding the hyphen‐dash key, pressing the space bar and then hitting the dash key again. Note that a parenthetical en dash usually needs to be surrounded by space.
: Alternatively, if available and wide enough, consider the [[#superscript|raised]] underscore ({{code|_}}) the en dash character.
: If efficiency matters, simply type {{code|-}} twice {{em|without}} going great lengths at making the dashes overlap.
; {{anchor|et|et ligature}} &
: This character is conventionally expanded to {{mono|et}}, the Latin word for {{em|and}}.
; {{anchor|exclamation point}} !
: If the straight apostrophe {{em|is long enough}}, you can overlay {{code|'}} with a period ({{code|.}}).
; {{anchor|CHARACTER-F}} {{anchor|ff|ff}} ff
: Hit and hold {{code|f}}, press space, and type {{code|f}} again.
; {{anchor|ffi|ffi}} ffi
: Hit and hold {{code|f}}, press space, type {{code|f}} again, release both keys and type an {{code|i}}.
; {{anchor|ffl|ffl}} ffl
: Hit and hold {{code|f}}, press space, type {{code|f}} again, release both keys and type an {{code|l}}.
; {{anchor|fi|fi}} fi
: Hit and hold {{code|f}}, press space, release {{code|f}} and type an {{code|i}}.
; {{anchor|fl|fl}} fl
: Hit and hold {{code|f}}, press space, release {{code|f}} and type an {{code|l}}.
; {{anchor|CHARACTER-H}} {{anchor|hash}} hash
: See [[#octothorp|octothorp]].
; {{anchor|CHARACTER-I}} {{anchor|infinity|∞}} ∞
: With a sans‐serif typeface you may get an acceptable result by combining {{code|o}}, {{code|x}}, {{code|o}} at a semi step width.
; {{anchor|interrobang|‽}} ‽
: By overlaying {{code|!}} and {{code|?}} you get {{code|‽}}.
; {{anchor|CHARACTER-L}} {{anchor|ł|barred l}} ł
: It does not look like the proper character, but overlay {{code|l}} with a slash.
; {{anchor|Ł|barred L}} Ł
: It does not look like the proper character, but overlay {{code|L}} with a slash.
; {{anchor|CHARACTER-M}} {{anchor|minus|−}} minus
: A minus sign ({{code|−}}) is rendered using a hyphen‐dash ({{code|-}}) or an [[#endash|en dash]]. The important thing is that the line is at the same height as the horizontal in {{code|+}}. See also [[#commercial minus sign|⁒]].
; {{anchor|multiplication|times|×}} multiplication
: The multiplication cross ({{code|×}}) is rendered using the regular character {{code|x}}. This works best with typefaces without serifs. Of course an {{code|x}} may be confused for {{em|the variable}} {{code|x}}. Alternatively use a multiplication dot by typing a period ({{code|.}}); a [[#superscript|superscript]] period does not work, though, hence the period stays at the baseline.
; {{anchor|CHARACTER-O}} {{anchor|Ø|∅︀}} Ø, ∅︀
: Type capital {{code|O}}, use the {{key press|backspace}} to return to the previous position and type the forward slash {{code|/}}. The corresponding minuscule ø, however, cannot be produced this way, at least not in a satisfactory manner.
; {{anchor|octothorp}} #
: Press and hold {{code|1==}}, press the space bar and type {{code|1==}} again. {{key press|Backspace}} and hit and hold {{code|/}}, press the space bar and type {{code|/}} again.
; {{anchor|œ}} œ
: Hit and hold {{code|o}}, press the space bar and release {{code|o}} and type an {{code|e}}.
; {{anchor|Œ}} Œ
: Same procedure as [[#œ|œ]] just with capital letters.
; {{anchor|one}} one
: The digit {{code|1}} may be missing. Type a minuscule ell ({{code|l}}) instead. In Roman numerals a {{em|one}} is still typed as a capital eye ({{code|I}}).
; {{anchor|CHARACTER-P}} {{anchor|℗}} ℗
: The sound recording copyright sign is conventionally approximated as {{mono|(P)}}.
; {{anchor|per cent}} %
: The per cent sign is conventionally substituted with {{mono|o/o}}.
; {{anchor|percent}} ‰
: The per mille sign is conventionally substituted with {{mono|o/oo}}.
; {{anchor|plus}} +
: If the straight apostrophe ({{code|'}}) is long enough, place two of them above each other combined with a dash ({{code|-}}).
: A makeshift plus is achieved by overlaying the dash ({{code|-}}) with a slash ({{code|/}}). This is more acceptable in combination with italic type faces.
; {{anchor|pound sign|pound sterling|£}} £
: The pound sign is substituted by an {{code|L}} overlaid with a dash ({{code|-}}). In some typefaces it may look like an {{code|E}} with its top bar missing, though. In some typefaces {{code|L}} overlaid by an {{code|f}} may be more appealing.
; {{anchor|CHARACTER-Q}} {{anchor|quotation marks}} quotation marks
: Virtually all typewriters lack proper quotation marks ({{abbr|AE|American English}}: “…”; {{abbr|BE|British English}}: ‘…’). The inch sign ({{code|"}}) or straight apostrophe ({{code|'}}) are used instead. Some languages use lowered quotation marks ({{lang|de|„Abc ‚def‘ ghi“|italic=unset}}): advancing by one half line works, but – beside being inconvenient – it may look just ugly, so the English quotations are used nonetheless.
; {{anchor|CHARACTER-R}} {{anchor|ℝ}} ℝ
: Hit and hold capital {{code|I}}, depress the space bar and release the {{code|I}} key, now type a capital {{code|R}}. However, on some typewriters the stems of {{code|I}} and {{code|R}} may be exactly on top of each other, so you type {{mono|IR}} with regular spacing instead. Note, for {{em|consistent}} style – if other similar characters such as ℚ are used in a document – consider writing this character manually.
; {{anchor|response}} ℟
: Hit and hold capital {{code|R}}, depress the space bar and release the {{code|R}} key, and now type a slash ({{code|/}}).
; {{anchor|CHARACTER-S}} {{anchor|semicolon|;}} ;
: A semicolon can be produced by overlaying the comma {{code|,}} and colon {{code|:}}. Type a comma, use the {{key press|backspace}}, and type the colon.
; {{anchor|st}} st
: Combine {{code|s}} and {{code|t}} a half step apart.
; {{anchor|star}} ✶
: Something {{em|resembling}} a six‐pointed star is achieved by overprinting capital {{code|A}} with a {{code|v}}. See also [[#eight-spoked asterisk|eight‐spoked asterisk]].
; {{anchor|CHARACTER-T}} {{anchor|thorn|þ}} þ
: The stems may not align perfectly, but try overlaying {{code|b}} and {{code|p}}.
; {{anchor|CHARACTER-U}} {{anchor|unequal}} ≠
: Overlay [[#equal sign|{{code|1==}}]] with {{code|/}}.
; {{anchor|upward arrow from bar|↥}} ↥
: This is not necessarily suitable for all typefaces: Hit {{code|´}} and {{code|`}}; this is usually one “dead key”, that means it does not advance the carriage. Now type an ell ({{code|l}}).
; {{anchor|CHARACTER-Z}} {{anchor|ℤ}} ℤ
: Type overlapping {{code|Z}}’s.
; {{anchor|zero}} zero
: Many typewriters do not have a dedicated digit zero key. The zero is produced by typing a capital Oh instead. This allows the manufacturer to provide another character. For a slashed zero, see [[#∅︀|∅︀]].
If a character cannot be printed, you need to do it by hand.
In order to not accidentally miss any unprinted characters, there are small adhesive flags you can stick on the paper.
== standards ==
{{wikipedia|list of style guides}}
This section showcases standard‐compliant writing emphasizing the proper use of the typewriter.
{{editor note|This section can be extended: indictment, screenplay, academic essays, as long as it is (or was) formally standardized it fits.}}
{{wikibook|Professional and Technical Writing/Business Communications/Letters}}
=== DIN‐Norm 5008 business letter ===
Among writing instructions, the {{lang|de|{{abbr|DIN|Deutsches Institut für Normung}}‐Norm 5008|italic=unset}} (German Institute for Standardization Standard 5008) defines the page layout.
The page layout is tailored to a {{lang|de|{{abbr|DIN|Deutsches Institut für Normung}} A4|italic=unset}} sheet;
this is 210 {{abbr|mm|millimeters}} × 297 {{abbr|mm|millimeters}}.
There is one line reserved for a return address.
Because the line length is 75 {{abbr|mm|millimeters}}, printing a return address in practice necessitates a smaller [[#typeface|font]], hence it is {{em|not}} written {{em|with}} a typewriter.
At 6 {{abbr|lpi|lines per inch}} there are exactly two blank lines befween the information and text frame.
Paragraphs are separated by one blank line.
The text width is 165 {{abbr|mm|millimeters}}
At 10 {{abbr|cpi|characters per inch}} you can fit 64.96 characters.
If you want to fold the letter, you have a {{em|purely esthetic<!-- alt. US spelling, see [[wikt:esthetic]] -->}} problem:
a fold across the text (and {{abbr|btw|by the way}} the signature) is ugly.
Folds are supposed to run {{em|between}} any two lines.
However, the middle segment of a folded {{lang|de|{{abbr|DIN|Deutsches Institut für Normung}}‐Norm 5008|italic=unset}} business letter page has a height of 105 mm.
At 6 {{abbr|lpi|lines per inch}} it is not possible to find a configuration ensuring the folds are {{em|between}} the lines.
Therefore, {{em|esthetically tolerable}} business letters conforming to {{lang|de|{{abbr|DIN|Deutsches Institut für Normung}}‐Norm 5008|italic=unset}} are {{em|only one page}} long.
To economize on space, only form A is presented.
; {{anchor|5008 Cella}} Robotron S 1001 Cella
:# [[Image: 20260128loremIpsumBusinessLetterFollowingDeutschesInstitutFuerNormungStandard5008typeAtypewrittenWithRobotronCella.png|thumb|alt=A sample text letter obeying to certain rules.|{{abbr|POC|proof of concept}}: A typewritten business letter.]] Set the [[#margins|margins]]. The left‐hand margin is set at 11, the right‐hand margin at 74. There is space for 64 characters.
:# Load the paper. The left‐hand edge should be at 0.5 characters on the paper bail. For that use the (white on black) margin ruler. The left‐hand edge should be at the 1 tick. Prefer to slightly cover the mark. Before disengaging the paper release, flip down the paper support and pull the paper to the back, away from you. Both ends of the paper should lay on top of each other.
:# Now scroll back the paper so its top edge {{em|is}} barely visible through the ridge in the typing mask. Possibly you need to repeat the previous step.
:# Advance so you have 7 blank lines. The cursor is now in the return address line. You have 29 character positions at your disposal. The next 9 lines are for the actual inside address.
:# Advance by one line. This line and the next two lines are meant for postal instructions. It is also the first line of the data frame. To get to the data frame, press {{key press|⇥}} four times and depress and hold the spacer. The cursor is at 49. Start typing from here up to 29 characters. The data frame consists of exactly 12 lines.
:# After the data frame leave (exactly) two blank lines. For the letter body you have 48 lines of vertical space left, the descenders{{noprint|1={{hover info|lines that extend below the baseline (the line characters “sit” on)}}}} of the 48{{sup|th}} line already being clipped if you can even manage to keep the paper in place. Avoid using the final 6 lines (1 ") just in general.
:# For the signature reserve (at least) three blank lines.
:# For right‐aligned double‐digit page numbering of the form {{mono|Page 12 of 34}}, press {{key press|⇥}} five times and {{key press|space}} three times. Press {{key press|space}} another two times for single‐digit page numbering.
== references ==
{{to do|{{em|Possibly}} generic references, data lookup tables.}}
== further reading ==
{{wikibook|Adventist Youth Honors Answer Book/Vocational/Typewriting}}
* {{PDFlink|[[:File: Practical typewriting - by the all-finger method, which leads to operation by touch (IA practicaltypewri00torr).pdf|Practical typewriting]]|12.26 {{abbr|MiB|mebibyte}}}}
* {{PDFlink|[[:File: New practical typewriting. (IA newpracticaltype00unse).pdf|New practical typewriting]]|16.38 {{abbr|MiB|mebibyte}}}}
* {{PDFlink|[[:File: A scientific course in typewriting (IA scientificcourse00depe).pdf|A scientific course in typewriting]]|5.1 {{abbr|MiB|mebibyte}}}}
<!--
== sources ==
<ref>
</ref>
-->
{{alphabetical}}
{{one-page book}}
{{shelves|trades}}<!-- “typist” as (virtually extinct) profession; irrelevant to secretaries nowadays -->
{{status|0%}}
{{subjects|communication|written communication}}
<!-- vim: set filetype=mediawiki: -->
9zrt23jub37h2d3lr6tmuiuxt4lh8qx
User:一隻北極熊
2
484045
4641483
4641222
2026-06-28T12:28:10Z
一隻北極熊
3609960
4641483
wikitext
text/x-wiki
Hi, I am a student from Taiwan.
[[file:mandarin-joke|thumb]]
==My Works==
*[[Bopomofo]]
*I also like to edit the [[Chinese (Mandarin)]] textbook.
jqdxx6hb2oj91qr6bti9j2iypcwjndm
4641484
4641483
2026-06-28T12:44:37Z
一隻北極熊
3609960
4641484
wikitext
text/x-wiki
Hi, I am a student from Taiwan.
[[File:Mandarin-fruit-mandarin- language-joke.png|thumb]]
==My Works==
*[[Bopomofo]]
*I also like to edit the [[Chinese (Mandarin)]] textbook.
qu03kvbhq66fg90opbkziaq9f2fg0cf
4641509
4641484
2026-06-28T14:16:48Z
一隻北極熊
3609960
4641509
wikitext
text/x-wiki
Hi, I am a student from Taiwan.
[[File:Mandarin-fruit-mandarin- language-joke.png|thumb]]
==My Works==
*[[Bopomofo]](near finished!)
*[[Taiwan History]](freshly started)
*I also like to edit the [[Chinese (Mandarin)]] textbook.
2it8vuqtbtac3vs2cwpttrgm9iuazq5
Bopomofo
0
484055
4641491
4641415
2026-06-28T13:24:11Z
一隻北極熊
3609960
4641491
wikitext
text/x-wiki
__NOTOC__ __NOEDITSECTION__
{| width="100%" style=" box-shadow:gray 1px 1px 5px; padding:1em; "
|+
|-
| width="100%" |
<div id="mf-head">
<div align="center" style="font-size:2.8em; color:; margin:0.4em">'''Bopomofo Textbook'''</div>
<div align="center" style="font-size:1.2em; color:gray; margin:0.2em;">'''ㄓㄨˋㄧㄣ ㄈㄨˊ ㄏㄠˋ ㄐㄧㄠˋ ㄎㄜ ㄕㄨ'''
</div>
<span style="color:#cc0000;">'''''Note:'''''</span> To use this book, your web browser must first be configured to display Bopomofo characters and Chinese characters. Check the three boxes below:
{| border="1" cellspacing="0" cellpadding="6" align="center"
| style="background-color:#eeeeee;" | ㄅㄆㄇㄈㄉㄊㄋㄌ
| style="background-color:#eeeeee;" | 注音符號教科書
| style="background-color:#eeeeee;" | 注音符号教科书
|}
==Contents==
*[[/Introduction-What is Bopomofo?/]]
*1.[[/Initials/]]
*2.[[/Medials/]]
*3.[[/Finals/]]
*4.[[/Tones/]]
*5.[[/Practice & Application/]]
*[[/Appendix/]]
{{Shelves|Chinese language}}
{{Status|0%}}
{{bookcat}}
j7tgv4uvobu5legg9ffhi6x1ks8gybx
4641501
4641491
2026-06-28T13:45:39Z
一隻北極熊
3609960
4641501
wikitext
text/x-wiki
__NOTOC__ __NOEDITSECTION__
{| width="100%" style=" box-shadow:gray 1px 1px 5px; padding:1em; "
|+
|-
| width="100%" |
<div id="mf-head">
<div align="center" style="font-size:2.8em; color:; margin:0.4em">'''Bopomofo Textbook'''</div>
<div align="center" style="font-size:1.2em; color:gray; margin:0.2em;">'''ㄓㄨˋㄧㄣ ㄈㄨˊ ㄏㄠˋ ㄐㄧㄠˋ ㄎㄜ ㄕㄨ'''
</div>
<span style="color:#cc0000;">'''''Note:'''''</span> To use this book, your web browser must first be configured to display Bopomofo characters and Chinese characters. Check the three boxes below:
{| border="1" cellspacing="0" cellpadding="6" align="center"
| style="background-color:#eeeeee;" | ㄅㄆㄇㄈㄉㄊㄋㄌ
| style="background-color:#eeeeee;" | 注音符號教科書
| style="background-color:#eeeeee;" | 注音符号教科书
|}
==Contents==
*[[/Introduction-What is Bopomofo?/]]
*1.[[/Initials/]]
*2.[[/Medials/]]
*3.[[/Finals/]]
*4.[[/Tones/]]
*5.[[/Practice & Application/]]
*[[/Appendix/]]
==Related books==
*[[Pinyin]]
*[[Chinese (Mandarin)]]
{{Shelves|Chinese language}}
{{Status|0%}}
{{bookcat}}
g2ldqtl9plnprp5c07mtdhla0mlu2lk
4641502
4641501
2026-06-28T13:46:48Z
一隻北極熊
3609960
4641502
wikitext
text/x-wiki
__NOTOC__ __NOEDITSECTION__
{| width="100%" style=" box-shadow:gray 1px 1px 5px; padding:1em; "
|+
|-
| width="100%" |
<div id="mf-head">
<div align="center" style="font-size:2.8em; color:; margin:0.4em">'''Bopomofo Textbook'''</div>
<div align="center" style="font-size:1.2em; color:gray; margin:0.2em;">'''ㄓㄨˋㄧㄣ ㄈㄨˊ ㄏㄠˋ ㄐㄧㄠˋ ㄎㄜ ㄕㄨ'''
</div>
<span style="color:#cc0000;">'''''Note:'''''</span> To use this book, your web browser must first be configured to display Bopomofo characters and Chinese characters. Check the three boxes below:
{| border="1" cellspacing="0" cellpadding="6" align="center"
| style="background-color:#eeeeee;" | ㄅㄆㄇㄈㄉㄊㄋㄌ
| style="background-color:#eeeeee;" | 注音符號教科書
| style="background-color:#eeeeee;" | 注音符号教科书
|}
==Contents==
*[[/Introduction-What is Bopomofo?/]]
*1.[[/Initials/]]
*2.[[/Medials/]]
*3.[[/Finals/]]
*4.[[/Tones/]]
*5.[[/Practice & Application/]]
*[[/Appendix/]]
==Related books==
*[[Pinyin]]
*[[Chinese (Mandarin)]]
{{Shelves|Chinese language}}
{{Status|75%}}
{{bookcat}}
l6mmy0zuxagn4oi253akse0vvkxhxbe
Bopomofo/Appendix
0
484076
4641492
4641421
2026-06-28T13:28:20Z
一隻北極熊
3609960
4641492
wikitext
text/x-wiki
==Related books==
*[[Pinyin]]
*[[Chinese (Mandarin)]]
*[[Bopomofo/List of Bopomofo]]
{{BookCat}}
1g3vjj8ajxmtvttcqk64wht3yfg4ni8
4641500
4641492
2026-06-28T13:45:18Z
一隻北極熊
3609960
4641500
wikitext
text/x-wiki
*[[Bopomofo/List of Bopomofo]]
{{BookCat}}
8csctm0sq2ds24551zv3qfbqbpry7n5
Atomic Chess Opening Theory/1. Nf3/1...f6/2. Nc3/2...Nh6/3. g4
0
484077
4641632
4641428
2026-06-29T08:07:54Z
AtomicChess
3609849
/* Black responses */
4641632
wikitext
text/x-wiki
{{Chess diagram
| tright
| 1. Nf3 f6 2. Nc3 Nh6 3. g4
|=
|rd|nd|bd|qd|kd|bd| |rd
|pd|pd|pd|pd|pd| |pd|pd
| | | | | |pd| |nd
| | | | | | | |
| | | | | | |pl|
| | |nl| | |nl| |
|pl|pl|pl|pl|pl|pl| |pl
|rl| |bl|ql|kl|bl| |rl
| Main move, preventing Ng4
}}
== 3. g4 ==
This is main move, preventing Ng4.
=== Black responses ===
* '''3...c6!''' - defend b5 and d5 square
* '''3...d5''' - keep b5 square unprotected, tricky move, but if white know how to avoid traps, white will easily win
* '''3...e6''' - open bishop, but keep b5 square defenseless
* '''3...Na6??'''
* '''3...Nxg4??''' - lose immediately after '''4. Nd5!'''
{{BookCat}}
lkf1bcqz40du08lcnistui2irp6z1gg
Chinese (Mandarin)/Lesson 6/Stroke Order
0
484079
4641478
4641458
2026-06-28T12:27:51Z
MathXplore
3097823
Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]
4641478
wikitext
text/x-wiki
Note: ''Italic'' for Traditional Characters
==嗨==
[[File:嗨-bw.png]]
==去==
[[File:去-bw.png]]
==哪==
[[File:哪-bw.png]]
==''兒''==
[[File:兒-bw.png]]
==儿==
[[File:儿-bw.png]]
==图==
[[File:图-bw.png]]
==''圖''==
[[File:圖-bw.png]]
==书==
[[File:书-bw.png]]
==''書''==
[[File:書-bw.png]]
==馆==
[[File:馆-bw.png]]
==''館''==
[[File:館-bw.png]]
==再==
[[File:再-bw.png]]
==''見''==
[[File:見-bw.png]]
==见==
[[File:见-bw.png]]
{{BookCat}}
fd79zdquyif2b6ky2rd3yspfd7e6wx5
Chinese (Mandarin)/Lesson 6/Examples
0
484080
4641479
4641463
2026-06-28T12:27:55Z
MathXplore
3097823
Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]
4641479
wikitext
text/x-wiki
==Chinese Interrogative words==
*吗 (mā): Use in "Yes" or "No" questions, usually request a "yes" or "no" answer. For example: 你吃过饭了吗? (Have you eaten yet?)
*呢 (ne): Used in specific questions or rhetorical questions, or to follow up on a situation previously mentioned. For example: 我的钥匙去哪儿了呢?(Where did my keys go?) or 你呢?(And you?)
{{BookCat}}
je92bo7vq970mpjclduve0kfghz4ex8
Chinese (Mandarin)/Lesson 6/Exercises
0
484081
4641480
4641465
2026-06-28T12:27:59Z
MathXplore
3097823
Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]
4641480
wikitext
text/x-wiki
==Formal and Informal Greetings==
Instructions: If the greeting is formal, choose '''formal''', if it isn't, choose '''informal'''.
*您好!有什么我可以帮您的吗?(formal/informal)
*哎!需要帮忙吗?(formal/informal)
{{BookCat}}
ime4v05fg8y8s9v7uwgjsnwpzx86cmp
Bopomofo/Practice & Application
0
484082
4641481
4641471
2026-06-28T12:28:03Z
MathXplore
3097823
Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]
4641481
wikitext
text/x-wiki
==Combination==
==Writing==
==Typing==
{{BookCat}}
0e1g1usyx9lapudt1y5e5e8rdiq7s4f
4641627
4641481
2026-06-29T07:43:51Z
一隻北極熊
3609960
4641627
wikitext
text/x-wiki
==Combination==
Try combine some of the Initials, Medials, and Finals. For example, ㄅㄧㄥˇ (Pinyin:bǐng).
==Writing==
Bopomofo is usually written up to down, and the tone mark on the right (right next to the medials or finals).See the picture for more information.
[[File:Hanzi_zhongwen_with_bopomofo.png]]
[[File:Hanzi_zhongwen_with_bopomofo_breakdown.png]]
==Typing==
Most phones and computer operating system support Bopomofo typing.(Chinese:注音輸入法)
{{BookCat}}
2byzgofpxtw17t4dmttjo4rtnmxzh6n
4641628
4641627
2026-06-29T07:44:16Z
一隻北極熊
3609960
4641628
wikitext
text/x-wiki
==Combination==
Try combine some of the Initials, Medials, and Finals. For example, ㄅㄧㄥˇ (Pinyin:bǐng).
==Writing==
Bopomofo is usually written up to down, and the tone mark on the right (right next to the medials or finals).See the picture for more information.
[[File:Hanzi_zhongwen_with_bopomofo.png|thumb]]
[[File:Hanzi_zhongwen_with_bopomofo_breakdown.png|thumb]]
==Typing==
Most phones and computer operating system support Bopomofo typing.(Chinese:注音輸入法)
{{BookCat}}
mo49dmzm109lodbe5k5s73b93uuh17a
4641629
4641628
2026-06-29T07:46:44Z
一隻北極熊
3609960
4641629
wikitext
text/x-wiki
==Combination==
Try combine some of the Initials, Medials, and Finals. For example, ㄅㄧㄥˇ (Pinyin:bǐng).
==Writing==
Bopomofo is usually written up to down, and the tone mark on the right (right next to the medials or finals).See the picture for more information.
[[File:Hanzi_zhongwen_with_bopomofo.png|thumb|written Bopomofo]]
==Typing==
Most phones and computer operating system support Bopomofo typing.(Chinese:注音輸入法)
{{BookCat}}
t2cs3aw0z6pzb3js3lcecorrxd3pyvt
Bopomofo/Tones
0
484083
4641475
2026-06-28T12:17:43Z
一隻北極熊
3609960
Created page with "==First Tone== Like a robot speaking in traditional movies. For example:啊(ā ㄚ) [[File:Pinyin Tone Chart.svg|thumb|Pitch changes of the four tones]] ==Second Tone== Like English question sentence. For example:无(wú ㄨˊ) ==Third Tone== Start at a low pitch, make your voice slightly creaky, and stop there. For example:女(nǚ ㄋㄩˇ) ==Fourth Tone== Sounding much like a firm command or an angry "No!" For example:辣(là ㄌㄚˋ) ==Neutral Tone== Pronounced ver..."
4641475
wikitext
text/x-wiki
==First Tone==
Like a robot speaking in traditional movies. For example:啊(ā ㄚ)
[[File:Pinyin Tone Chart.svg|thumb|Pitch changes of the four tones]]
==Second Tone==
Like English question sentence. For example:无(wú ㄨˊ)
==Third Tone==
Start at a low pitch, make your voice slightly creaky, and stop there. For example:女(nǚ ㄋㄩˇ)
==Fourth Tone==
Sounding much like a firm command or an angry "No!" For example:辣(là ㄌㄚˋ)
==Neutral Tone==
Pronounced very quickly, softly, and without emphasis. For example:麼(me ㄇㄜ)
==Writing the Tone ==
Different from [[Pinyin]], if the tone is not written, it is usually the first tone. To mark the other tone we use these symbols: ˊ(second tone), ˇ (third tone), ˋ (fourth tone), ˙(neutral tone).
1df8eczn1pysbqr9hg4v8daln2ru2na
4641476
4641475
2026-06-28T12:18:20Z
一隻北極熊
3609960
4641476
wikitext
text/x-wiki
==First Tone==
Like a robot speaking in traditional movies. For example:啊(ā ㄚ)
[[File:Pinyin Tone Chart.svg|thumb|Pitch changes of the four tones]]
==Second Tone==
Like English question sentence. For example:无(wú ㄨˊ)
==Third Tone==
Start at a low pitch, make your voice slightly creaky, and stop there. For example:女(nǚ ㄋㄩˇ)
==Fourth Tone==
Sounding much like a firm command or an angry "No!" For example:辣(là ㄌㄚˋ)
==Neutral Tone==
Pronounced very quickly, softly, and without emphasis. For example:麼(me ㄇㄜ)
==Writing the Tone ==
Different from [[Pinyin]], if the tone is not written, it is usually the first tone. To mark the other tone we use these symbols: ˊ(second tone), ˇ (third tone), ˋ (fourth tone), ˙(neutral tone).
==Learn more==
*[[Chinese (Mandarin)/Using Tones]]
63at3xvibjwwy21832tunzrklh8e4nc
4641477
4641476
2026-06-28T12:18:53Z
一隻北極熊
3609960
4641477
wikitext
text/x-wiki
==First Tone==
Like a robot speaking in traditional movies. For example:啊(ā ㄚ)
[[File:Pinyin Tone Chart.svg|thumb|Pitch changes of the four tones]]
==Second Tone==
Like English question sentence. For example:无(wú ㄨˊ)
==Third Tone==
Start at a low pitch, make your voice slightly creaky, and stop there. For example:女(nǚ ㄋㄩˇ)
==Fourth Tone==
Sounding much like a firm command or an angry "No!" For example:辣(là ㄌㄚˋ)
==Neutral Tone==
Pronounced very quickly, softly, and without emphasis. For example:麼(me ㄇㄜ˙)
==Writing the Tone ==
Different from [[Pinyin]], if the tone is not written, it is usually the first tone. To mark the other tone we use these symbols: ˊ(second tone), ˇ (third tone), ˋ (fourth tone), ˙(neutral tone).
==Learn more==
*[[Chinese (Mandarin)/Using Tones]]
gp7ji5g3w2y3vqa5jsk7wp8tr5wsr8e
4641482
4641477
2026-06-28T12:28:07Z
MathXplore
3097823
Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]
4641482
wikitext
text/x-wiki
==First Tone==
Like a robot speaking in traditional movies. For example:啊(ā ㄚ)
[[File:Pinyin Tone Chart.svg|thumb|Pitch changes of the four tones]]
==Second Tone==
Like English question sentence. For example:无(wú ㄨˊ)
==Third Tone==
Start at a low pitch, make your voice slightly creaky, and stop there. For example:女(nǚ ㄋㄩˇ)
==Fourth Tone==
Sounding much like a firm command or an angry "No!" For example:辣(là ㄌㄚˋ)
==Neutral Tone==
Pronounced very quickly, softly, and without emphasis. For example:麼(me ㄇㄜ˙)
==Writing the Tone ==
Different from [[Pinyin]], if the tone is not written, it is usually the first tone. To mark the other tone we use these symbols: ˊ(second tone), ˇ (third tone), ˋ (fourth tone), ˙(neutral tone).
==Learn more==
*[[Chinese (Mandarin)/Using Tones]]
{{BookCat}}
47phtnh88rgtf8vat8t57wu67wpo8dj
History of China/Introduction
0
484084
4641487
2026-06-28T12:54:08Z
一隻北極熊
3609960
Created page with "'''China''' ,is a country with a long history. Learning the Chinese history can help you more understand the Chinese culture, and also the Chinese language. This book will introduce all of the Chinese history, from Pre-Imperial China to the Modern day China. Have fun learning! {{stub}}"
4641487
wikitext
text/x-wiki
'''China''' ,is a country with a long history. Learning the Chinese history can help you more understand the Chinese culture, and also the Chinese language. This book will introduce all of the Chinese history, from Pre-Imperial China to the Modern day China.
Have fun learning!
{{stub}}
a8ffn4vz7u4ogsdm22fy7buc4wclyjp
User talk:TenshiBot
3
484085
4641488
2026-06-28T12:58:46Z
Tenshi Hinanawi
3513579
Redirect to my talk page
4641488
wikitext
text/x-wiki
#REDIRECT [[User talk:Tenshi Hinanawi]]
sbqct68q0flmqy1cm87trpwbqq33otm
Bopomofo/List of Bopomofo
0
484086
4641498
2026-06-28T13:44:04Z
一隻北極熊
3609960
Created page with "{| class=wikitable style="text-align:center;" width=900 |- !colspan=4 style="background: #F0FFD9"|Finals!!style="background: #FFFAD9"|Medials!!colspan=6 style="background: #FFE8D9"|Initials|| rowspan="6" | Bopomofo 注音符號 注音符号 |- style="font-size:150%;" |ㄦ||ㄢ||ㄞ||ㄚ||ㄧ||ㄗ||ㄓ||ㄐ||ㄍ||ㄉ||ㄅ |- style="font-size:150%;" |||ㄣ||ㄟ||ㄛ||ㄨ||ㄘ||ㄔ||ㄑ||ㄎ||ㄊ||ㄆ |- style="font-size:150%;" |||ㄤ||ㄠ||ㄜ||ㄩ||ㄙ||ㄕ||ㄒ||ㄏ||ㄋ..."
4641498
wikitext
text/x-wiki
{| class=wikitable style="text-align:center;" width=900
|-
!colspan=4 style="background: #F0FFD9"|Finals!!style="background: #FFFAD9"|Medials!!colspan=6 style="background: #FFE8D9"|Initials|| rowspan="6" | Bopomofo
注音符號
注音符号
|- style="font-size:150%;"
|ㄦ||ㄢ||ㄞ||ㄚ||ㄧ||ㄗ||ㄓ||ㄐ||ㄍ||ㄉ||ㄅ
|- style="font-size:150%;"
|||ㄣ||ㄟ||ㄛ||ㄨ||ㄘ||ㄔ||ㄑ||ㄎ||ㄊ||ㄆ
|- style="font-size:150%;"
|||ㄤ||ㄠ||ㄜ||ㄩ||ㄙ||ㄕ||ㄒ||ㄏ||ㄋ||ㄇ
|- style="font-size:150%;"
|||ㄥ||ㄡ||ㄝ||||||ㄖ||||||ㄌ||ㄈ
|}
{| class="wikitable"
|+ Tones
|-
| First tone || ''No marking''
|-
| Second tone || ˊ
|-
| Third tone || ˇ
|-
| Fourth tone || ˋ
|-
| Neutral Tone || ˙
|}
1yl7955xijmt5iji7cb5krm9c0po1mv
4641499
4641498
2026-06-28T13:44:19Z
一隻北極熊
3609960
4641499
wikitext
text/x-wiki
{| class=wikitable style="text-align:center;" width=900
|-
!colspan=4 style="background: #F0FFD9"|Finals!!style="background: #FFFAD9"|Medials!!colspan=6 style="background: #FFE8D9"|Initials|| rowspan="6" | Bopomofo
注音符號
|- style="font-size:150%;"
|ㄦ||ㄢ||ㄞ||ㄚ||ㄧ||ㄗ||ㄓ||ㄐ||ㄍ||ㄉ||ㄅ
|- style="font-size:150%;"
|||ㄣ||ㄟ||ㄛ||ㄨ||ㄘ||ㄔ||ㄑ||ㄎ||ㄊ||ㄆ
|- style="font-size:150%;"
|||ㄤ||ㄠ||ㄜ||ㄩ||ㄙ||ㄕ||ㄒ||ㄏ||ㄋ||ㄇ
|- style="font-size:150%;"
|||ㄥ||ㄡ||ㄝ||||||ㄖ||||||ㄌ||ㄈ
|}
{| class="wikitable"
|+ Tones
|-
| First tone || ''No marking''
|-
| Second tone || ˊ
|-
| Third tone || ˇ
|-
| Fourth tone || ˋ
|-
| Neutral Tone || ˙
|}
s1geuwtxzkxcp0w716p4ylr6ctfvv3b
Bopomofo/Finals
0
484087
4641504
2026-06-28T14:05:37Z
一隻北極熊
3609960
Created page with "{{stub}} == Practice Exercise == Read these minimal pairs aloud to practice changing your mouth shape accurately between lookalike finals: #. ㄅㄞ (bai) vs. ㄅㄟ (bei) #. ㄇㄠ (mao) vs. ㄇㄡ (mou) #. ㄅㄢ (ban) vs. ㄅㄤ (bang) #. ㄅㄣ (ben) vs. ㄅㄥ (beng)"
4641504
wikitext
text/x-wiki
{{stub}}
== Practice Exercise ==
Read these minimal pairs aloud to practice changing your mouth shape accurately between lookalike finals:
#. ㄅㄞ (bai) vs. ㄅㄟ (bei)
#. ㄇㄠ (mao) vs. ㄇㄡ (mou)
#. ㄅㄢ (ban) vs. ㄅㄤ (bang)
#. ㄅㄣ (ben) vs. ㄅㄥ (beng)
flgg00xywozxk1rgh90evmz3w70tl62
4641621
4641504
2026-06-29T07:25:44Z
一隻北極熊
3609960
4641621
wikitext
text/x-wiki
{|border="0" cellspacing="3" cellpadding="2" style="text-align: center"
|-
|'''Bopomofo'''
|'''Pronunciation'''
|'''[[Pinyin]]'''
|-
|ㄚ
|'''a''' as in "sp'''a'''"
|a
|-
|ㄛ
|'''o''' as in "'''o'''h"
|o
|-
|ㄜ
|'''uh''' as in "d'''uh'''"
|e
|-
|ㄝ
|'''e''' as in "b'''e'''d"
|ê
|-
|ㄞ
|'''ie''' as in "l'''ie'''"
|ai
|-
|ㄟ
|'''ay''' as in "s'''ay'''"
|ei
|-
|ㄠ
|'''ow''' as in "h'''ow'''"
|ao
|-
|ㄡ
|'''ow''' as in "l'''ow'''"
|ou
|-
|ㄢ
|'''an''' as in "D'''an'''"
|aŋ
|-
|ㄣ
|'''un''' as in "s'''un'''"
|en
|-
|ㄤ
|as in "y'''oung'''", like "s'''ong'''" in American English
|ang
|-
|ㄥ
|replace the [n] in ㄣ with [ŋ]
|eng
|-
| ㄦ
|'''ir''' as in "s'''ir'''"
|er
|}
== Practice Exercise ==
Read these minimal pairs aloud to practice changing your mouth shape accurately between lookalike finals:
#. ㄅㄞ (bai) vs. ㄅㄟ (bei)
#. ㄇㄠ (mao) vs. ㄇㄡ (mou)
#. ㄅㄢ (ban) vs. ㄅㄤ (bang)
#. ㄅㄣ (ben) vs. ㄅㄥ (beng)
==Learn more==
*[[Chinese (Mandarin)/Pronunciation of Finals]]
pwbl5vnrvayao393mw2be7qdf19040y
4641622
4641621
2026-06-29T07:28:57Z
一隻北極熊
3609960
4641622
wikitext
text/x-wiki
{|border="0" cellspacing="3" cellpadding="2" style="text-align: center"
|-
|'''Bopomofo'''
|'''Pronunciation'''
|'''[[Pinyin]]'''
|-
|ㄚ
|'''a''' as in "sp'''a'''"
|a
|-
|ㄛ
|'''o''' as in "'''o'''h"
|o
|-
|ㄜ
|'''uh''' as in "d'''uh'''"
|e
|-
|ㄝ
|'''e''' as in "b'''e'''d"
|ê
|-
|ㄞ
|'''ie''' as in "l'''ie'''"
|ai
|-
|ㄟ
|'''ay''' as in "s'''ay'''"
|ei
|-
|ㄠ
|'''ow''' as in "h'''ow'''"
|ao
|-
|ㄡ
|'''ow''' as in "l'''ow'''"
|ou
|-
|ㄢ
|'''an''' as in "D'''an'''"
|aŋ
|-
|ㄣ
|'''un''' as in "s'''un'''"
|en
|-
|ㄤ
|as in "y'''oung'''", like "s'''ong'''" in American English
|ang
|-
|ㄥ
|replace the [n] in ㄣ with [ŋ]
|eng
|-
| ㄦ
|'''ir''' as in "s'''ir'''"
|er
|}
== Practice Exercise ==
Read these minimal pairs aloud to practice changing your mouth shape accurately between lookalike finals:
#. ㄅㄞ (bai) vs. ㄅㄟ (bei)
#. ㄇㄠ (mao) vs. ㄇㄡ (mou)
#. ㄅㄢ (ban) vs. ㄅㄤ (bang)
#. ㄅㄣ (ben) vs. ㄅㄥ (beng)
==Stroke order==
===ㄚ===
[[File:ㄚ-bw.png|200px]]
===ㄛ===
[[File:ㄛ-bw.png|200px]]
===ㄜ===
[[File:ㄜ-bw.png|200px]]
===ㄝ===
[[File:ㄝ-bw.png|200px]]
===ㄞ===
[[File:ㄞ-bw.png|200px]]
===ㄟ===
[[File:ㄟ-bw.png|200px]]
===ㄠ===
[[File:ㄠ-bw.png|200px]]
===ㄡ===
[[File:ㄡ-bw.png|200px]]
===ㄢ===
[[File:ㄢ-bw.png|200px]]
===ㄣ===
[[File:ㄣ-bw.png|200px]]
===ㄤ===
[[File:ㄤ-bw.png|200px]]
===ㄥ===
[[File:ㄥ-bw.png|200px]]
===ㄦ===
[[File:ㄦ-bw.png|200px]]
==Learn more==
*[[Chinese (Mandarin)/Pronunciation of Finals]]
nawe5gxbcr05tf0uc8dxl80tz44dn1i
Taiwan history
0
484088
4641506
2026-06-28T14:13:33Z
一隻北極熊
3609960
Created page with "[[File:世界最美總統府.jpg|center|400px]] Welcome to the '''Taiwan History Textbook!'''. This is a free and open textbook about Taiwanese history. Our goal is to write a high quality textbook about Taiwanese history. This book is originally Chinese and now is translated in to English. <div style="text-align:center; font-size:24px;">'''[[/內容|進入內容 >>]]'''</div> ''' *[[/Contributor/]] ''' {{Shelves|History}} {{Status|0%}} {{bookCat}}"
4641506
wikitext
text/x-wiki
[[File:世界最美總統府.jpg|center|400px]]
Welcome to the '''Taiwan History Textbook!'''. This is a free and open textbook about Taiwanese history. Our goal is to write a high quality textbook about Taiwanese history. This book is originally Chinese and now is translated in to English.
<div style="text-align:center; font-size:24px;">'''[[/內容|進入內容 >>]]'''</div>
'''
*[[/Contributor/]]
'''
{{Shelves|History}}
{{Status|0%}}
{{bookCat}}
sek35vp1ginhd8s7uzct0fiabqvd3os
4641507
4641506
2026-06-28T14:14:10Z
一隻北極熊
3609960
4641507
wikitext
text/x-wiki
[[File:世界最美總統府.jpg|center|400px]]
Welcome to the '''Taiwan History Textbook!'''. This is a free and open textbook about Taiwanese history. Our goal is to write a high quality textbook about Taiwanese history. This book is originally Chinese and now is translated in to English.
<div style="text-align:center; font-size:24px;">'''[[/Contents|Contents >>]]'''</div>
'''
*[[/Contributor/]]
'''
{{Shelves|History}}
{{Status|0%}}
{{bookCat}}
nlt0q3ko1ndsjtny9hhd2uy7zd7xmay
4641508
4641507
2026-06-28T14:14:59Z
一隻北極熊
3609960
4641508
wikitext
text/x-wiki
[[File:世界最美總統府.jpg|center|400px]]
<div align="center" style="font-size:2.8em; color:; margin:0.4em">'''Taiwan History'''</div>
Welcome to the '''Taiwan History Textbook!'''. This is a free and open textbook about Taiwanese history. Our goal is to write a high quality textbook about Taiwanese history. This book is originally Chinese and now is translated in to English.
<div style="text-align:center; font-size:24px;">'''[[/Contents|Contents >>]]'''</div>
'''
*[[/Contributor/]]
'''
{{Shelves|History}}
{{Status|0%}}
{{bookCat}}
n4itnmusz0w9yakb8bcd7gd6x48gutg
4641598
4641508
2026-06-29T01:33:26Z
一隻北極熊
3609960
4641598
wikitext
text/x-wiki
[[File:世界最美總統府.jpg|center|400px]]
<div align="center" style="font-size:2.8em; color:; margin:0.4em">'''Taiwan History'''</div>
Welcome to the '''Taiwan History Textbook!'''. This is a free and open textbook about Taiwanese history. Our goal is to write a high quality textbook about Taiwanese history. Feel free to edit this book if you have knowledge on Taiwan history and are fluent in English! This book is originally Chinese and now is translated in to English.
<div style="text-align:center; font-size:24px;">'''[[/Contents|Contents >>]]'''</div>
'''
*[[/Contributors/]]
'''
{{Shelves|History}}
{{Status|0%}}
{{bookCat}}
gywtn4nhved2fzqclqhmtzxwbxobpb1
4641664
4641598
2026-06-29T11:18:13Z
一隻北極熊
3609960
4641664
wikitext
text/x-wiki
[[File:世界最美總統府.jpg|center|400px]]
<div align="center" style="font-size:2.8em; color:; margin:0.4em">'''History of Taiwan'''</div>
Welcome to the '''Taiwan History Textbook!'''. This is a free and open textbook about Taiwanese history. Our goal is to write a high quality textbook about Taiwanese history. Feel free to edit this book if you have knowledge on Taiwan history and are fluent in English! This book is originally Chinese and now is translated in to English.
<div style="text-align:center; font-size:24px;">'''[[/Contents|Contents >>]]'''</div>
'''
*[[/Contributors/]]
'''
{{Shelves|History}}
{{Status|0%}}
{{bookCat}}
dmjferjnfze1k5rnni8qek7tgarlyxq
4641665
4641664
2026-06-29T11:18:37Z
一隻北極熊
3609960
4641665
wikitext
text/x-wiki
[[File:世界最美總統府.jpg|center|400px]]
<div align="center" style="font-size:2.8em; color:; margin:0.4em">'''History of Taiwan'''</div>
Welcome to the '''Taiwan History Textbook!''' This is a free and open textbook about Taiwanese history. Our goal is to write a high quality textbook about Taiwanese history. Feel free to edit this book if you have knowledge on Taiwan history and are fluent in English! This book is originally Chinese and now is translated in to English.
<div style="text-align:center; font-size:24px;">'''[[/Contents|Contents >>]]'''</div>
'''
*[[/Contributors/]]
'''
{{Shelves|History}}
{{Status|0%}}
{{bookCat}}
mzeujz6yvn42l54gi8w60jss4vf85tv
Oberon/A2/MyA2
0
484089
4641535
2026-06-28T15:57:29Z
PeterEasthope
660399
Initiailized
4641535
wikitext
text/x-wiki
<span style="font-family: Oberon, sans-serif;
font-size: 0.90rem;
font-weight: normal;
font-style: normal;
color: #000000;
position: relative;
top: 0%;
-moz-tab-size: 2;
tab-size: 2">MyA2 () { \
#!/usr/bin/ash
# A function or script to start UnixAos or repository based A2 with
# a working directory which can be in a removable flash store.
# A flash store is accommodated in multiple machines by copying
# machine specific configurations into Configuration.XML and
# Oberon.Text.
#
# Conditions for this to work.
# * The volume containing the working files has a reliable identity.
# All Unix-like systems recognize a UUID. Refer to lsblk and blkid.
# * If /etc/fstab has a specification for the working volume it
# should be consistent with the names and mount command below. Eg.
# UUID=40d81923-8f9d-4964-b724-87bcf2731432a /home/me/A ext2 defaults,user,users,exec,noauto 0 0
# * The user can fsck the working filesystem.
# A line such as the following may be required in /etc/sudoers.d/sudoers.
# me mycomputer = NOPASSWD: /sbin/fsck
# Test fsck interactively.
# * If the working volume is removeable, the user can mount it.
# Note the user option in /etc/fstab.
# * Prior to revision 10272, UnixAos attempts to create the link
# <workingDirectory>/.aoshome to /usr/aos but the FAT file system
# doesn't provide links. Resolved by reformatting to ext2.
# Ext2 in Wikipedia.
#
# UUID of a stainless steel Kingston USB store.
workingVolume=40d81969-8f9d-4964-b214-87bcf273192a
printf "The UUID assigned to 'workingVolume' is %s.\n" "$workingVolume"
#
easyosWorkingDirectory=/mnt/A
printf "easyosWorkingDirectory=%s\n" "$easyosWorkingDirectory"
devuanWorkingDirectory=/mnt/A
printf "devuanWorkingDirectory=%s\n" "$devuanWorkingDirectory"
#
# For UnixAOS preceding revision.10272.
oldAosStartScript=/usr/bin/aos
printf "oldAosStartScript=%s\n" "$oldAosStartScript"
# For UnixAOS revision.10272.
newAosStartScript=/usr/local/bin/a2
printf "newAosStartScript=%s\n" "$newAosStartScript"
# For repository based A2.
# repositoryStartScript=<somewhere>/<repository>/<platform>/<script>
repositoryStartScript=/mnt/A/A2/Linux64/a2.sh
printf "repositoryStartScript=%s\n" "$repositoryStartScript"
#
# For any hostname violating Oberon file name syntax, make a conformant name.
# https://tldp.org/LDP/abs/html/testconstructs.html
if [[ $(hostname) = xo-53-1d-bb* ]]; then
h="xo"
elif [[ $(hostname) = joule* ]]; then
h="joule"
# Add more cases here.
else
h=$(hostname --short)
fi
printf "Shortened hostname, h = $h\n"
A2 () {
contextDir=$PWD
cd $workingDirectory
printf "Switched to working directory.\n"
if ! test -f Configuration.$h.XML ; then
printf "Configuration.$h.XML not present in %s. Aborting.\n" "$workingDirectory"
else
printf "Copying Configuration.$h.XML to Configuration.XML.\n"
/bin/cp Configuration.$h.XML Configuration.XML
if ! test -f Oberon.$h.Text ; then
printf "Oberon.$h.Text not present in $workingDirectory. Aborting.\n"
else
printf "Copying Oberon.$h.Text to Oberon.Text.\n"
/bin/cp Oberon.$h.Text Oberon.Text
/bin/rm --force --verbose AOS*.Log
/bin/rm --force --verbose Trap*.txt
/bin/rm --force --verbose .tmp.*
printf "Starting A2 system.\n"
$startScript
fi
fi
cd $contextDir
printf "MyA2 exited normally.\n"
}
EvaluateWorkingVolume () {
printf "startScript=%s\n" "$startScript"
printf "Search for working volume can take a few seconds.\n"
if ! lsblk -alno UUID | grep -q $workingVolume ; then
printf "The UUID assigned to the workingVolume variable is not available. Aborting.\n"
printf "\n"
printf "Check that the intended working volume is connected.\n"
printf "Execute a command such as 'blkid /dev/sdXn' to obtain the UUID.\n"
printf "To correct the UUID assigned to 'workingVolume', edit the declaration of \n"
printf "this MyA2 function, declare with a shell command such as '. ShellFunctions' \n"
printf "and try MyA2 again.\n"
else
printf "$workingVolume containing working files is connected.\n"
if test -n "$(findmnt -nrS UUID=$workingVolume)" ; then
printf "Working volume is mounted. Ideally, consistent with the subsequent mount command.\n"
A2
else
printf "Working volume is not mounted.\n"
if fsck -p UUID=$workingVolume ; then
printf "Filesystem in $workingVolume passed fsck.\n"
# busybox mount lacks the -U option. Therefore mount /dev/*.
mount -v "$(blkid --uuid $workingVolume)" $workingDirectory
A2
else
printf "fsck attempted repair of $workingVolume. Try again.\n"
fi
fi
fi
}
if test -f /etc/DISTRO_SPECS > /dev/null ; then
if ( grep -- EasyOS /etc/DISTRO_SPECS > /dev/null ) ; then
printf "This is an EasyOS system. Therefore,\n"
workingDirectory="$easyosWorkingDirectory"
startScript=$repositoryStartScript
EvaluateWorkingVolume
fi
elif [ -f "/etc/devuan_version" ] ; then
printf "Probably a Devuan system. Therefore,\n"
workingDirectory="$devuanWorkingDirectory"
startScript=$repositoryStartScript
EvaluateWorkingVolume
elif [ -f "/etc/debian_version" ] ; then
printf "Probably a Debian 32 bit system. Therefore,\n"
workingDirectory="$devuanWorkingDirectory"
startScript=$oldAosStartScript
EvaluateWorkingVolume
else
printf "Operating system not recognized. A2 not started.\n"
fi
} # End MyA2.
</span>
{{BookCat}}
tn36o7ylb2l27j3t00r4qbdnr4mhjj6
4641557
4641535
2026-06-28T16:55:08Z
PeterEasthope
660399
Added adaptation for bittness.
4641557
wikitext
text/x-wiki
<span style="font-family: Oberon, sans-serif;
font-size: 0.90rem;
font-weight: normal;
font-style: normal;
color: #000000;
position: relative;
top: 0%;
-moz-tab-size: 2;
tab-size: 2">MyA2 () { \
#!/usr/bin/ash
# A function or script to start UnixAos or repository based A2 with
# a working directory which can be in a removable flash store.
# A flash store is accommodated in multiple machines by copying
# machine specific configurations into Configuration.XML and
# Oberon.Text.
#
# Conditions for this to work.
# * The volume containing the working files has a reliable identity.
# All Unix-like systems recognize a UUID. Refer to lsblk and blkid.
# * If /etc/fstab has a specification for the working volume it
# should be consistent with the names and mount command below. Eg.
# UUID=40d81923-8f9d-4964-b724-87bcf2731432a /home/me/A ext2 defaults,user,users,exec,noauto 0 0
# * The user can fsck the working filesystem.
# A line such as the following may be required in /etc/sudoers.d/sudoers.
# me mycomputer = NOPASSWD: /sbin/fsck
# Test fsck interactively.
# * If the working volume is removeable, the user can mount it.
# Note the user option in /etc/fstab.
# * Prior to revision 10272, UnixAos attempts to create the link
# <workingDirectory>/.aoshome to /usr/aos but the FAT file system
# doesn't provide links. Resolved by reformatting to ext2.
# Ext2 in Wikipedia.
#
# UUID of a stainless steel Kingston USB store.
workingVolume=40d81969-8f9d-4964-b214-87bcf273192a
printf "The UUID assigned to 'workingVolume' is %s.\n" "$workingVolume"
#
easyosWorkingDirectory=/mnt/A
printf "easyosWorkingDirectory=%s\n" "$easyosWorkingDirectory"
devuanWorkingDirectory=/mnt/A
printf "devuanWorkingDirectory=%s\n" "$devuanWorkingDirectory"
#
# For UnixAOS preceding revision.10272.
oldAosStartScript=/usr/bin/aos
printf "oldAosStartScript=%s\n" "$oldAosStartScript"
# For UnixAOS revision.10272.
newAosStartScript=/usr/local/bin/a2
printf "newAosStartScript=%s\n" "$newAosStartScript"
# For repository based A2.
# repositoryStartScript=<somewhere>/<repository>/<platform>/<script>
if [ "$(getconf LONG_BIT)" = "32" ]; then
repositoryStartScript=/mnt/A/A2/Linux32/a2.sh
elif [ "$(getconf LONG_BIT)" = "64" ]; then
repositoryStartScript=/mnt/A/A2/Linux64/a2.sh
else
printf "Neither a Linux 32 bit nor Linux 64 bit system.\n"
fi
printf "repositoryStartScript=%s\n" "$repositoryStartScript"
#
# For any hostname violating Oberon file name syntax, make a conformant name.
# https://tldp.org/LDP/abs/html/testconstructs.html
if [[ $(hostname) = xo-53-1d-bb* ]]; then
h="xo"
elif [[ $(hostname) = joule* ]]; then
h="joule"
# Add more cases here.
else
h=$(hostname --short)
fi
printf "Shortened hostname, h = $h\n"
A2 () {
contextDir=$PWD
cd $workingDirectory
printf "Switched to working directory.\n"
if ! test -f Configuration.$h.XML ; then
printf "Configuration.$h.XML not present in %s. Aborting.\n" "$workingDirectory"
else
printf "Copying Configuration.$h.XML to Configuration.XML.\n"
/bin/cp Configuration.$h.XML Configuration.XML
if ! test -f Oberon.$h.Text ; then
printf "Oberon.$h.Text not present in $workingDirectory. Aborting.\n"
else
printf "Copying Oberon.$h.Text to Oberon.Text.\n"
/bin/cp Oberon.$h.Text Oberon.Text
/bin/rm --force --verbose AOS*.Log
/bin/rm --force --verbose Trap*.txt
/bin/rm --force --verbose .tmp.*
printf "Starting A2 system.\n"
$startScript
fi
fi
cd $contextDir
printf "MyA2 exited normally.\n"
}
EvaluateWorkingVolume () {
printf "startScript=%s\n" "$startScript"
printf "Search for working volume can take a few seconds.\n"
if ! lsblk -alno UUID | grep -q $workingVolume ; then
printf "The UUID assigned to the workingVolume variable is not available. Aborting.\n"
printf "\n"
printf "Check that the intended working volume is connected.\n"
printf "Execute a command such as 'blkid /dev/sdXn' to obtain the UUID.\n"
printf "To correct the UUID assigned to 'workingVolume', edit the declaration of \n"
printf "this MyA2 function, declare with a shell command such as '. ShellFunctions' \n"
printf "and try MyA2 again.\n"
else
printf "$workingVolume containing working files is connected.\n"
if test -n "$(findmnt -nrS UUID=$workingVolume)" ; then
printf "Working volume is mounted. Ideally, consistent with the subsequent mount command.\n"
A2
else
printf "Working volume is not mounted.\n"
if fsck -p UUID=$workingVolume ; then
printf "Filesystem in $workingVolume passed fsck.\n"
# busybox mount lacks the -U option. Therefore mount /dev/*.
mount -v "$(blkid --uuid $workingVolume)" $workingDirectory
A2
else
printf "fsck attempted repair of $workingVolume. Try again.\n"
fi
fi
fi
}
if test -f /etc/DISTRO_SPECS > /dev/null ; then
if ( grep -- EasyOS /etc/DISTRO_SPECS > /dev/null ) ; then
printf "This is an EasyOS system. Therefore,\n"
workingDirectory="$easyosWorkingDirectory"
startScript=$repositoryStartScript
EvaluateWorkingVolume
fi
elif [ -f "/etc/devuan_version" ] ; then
printf "Probably a Devuan system. Therefore,\n"
workingDirectory="$devuanWorkingDirectory"
startScript=$repositoryStartScript
EvaluateWorkingVolume
elif [ -f "/etc/debian_version" ] ; then
printf "Probably a Debian 32 bit system. Therefore,\n"
workingDirectory="$devuanWorkingDirectory"
startScript=$oldAosStartScript
EvaluateWorkingVolume
else
printf "Operating system not recognized. A2 not started.\n"
fi
} # End MyA2.
</span>
{{BookCat}}
a7ydkvn3cv2hiuzb99wmjyl53zl3aow
Chess Opening Theory/1. e4/1...c6/2. d4/2...d5/3. Nc3/3...dxe4/4. Nxe4/4...Bf5/5. Ng3/5...Bg6/6. h4/6...h6/7. Nf3/7...Nd7/8. h5/8...Bh7/9. Bd3/9...Bxd3/10. Qxd3/10...e6/11. Bf4/11...Qa5/12. Bd2
0
484091
4641553
2026-06-28T16:38:41Z
Greenman
7490
start
4641553
wikitext
text/x-wiki
{{Chess Opening Theory/Position|=
|Caro-Kann Defence:Classical Variation|
|rd| | ||kd|bd|nd|rd|=
|pd|pd| |nd| |pd|pd| |=
| | |pd| |pd| | |pd|=
| qd | | | | | | |pl|=
| | | |pl| || | |=
| | | |ql| |nl|nl| |=
|pl|pl|pl|bl| |pl|pl| |=
|rl| | | |kl| | |rl|=
||
}}
= Caro-Kann Defence:Classical Variation =
==Theory table==
{{Chess Opening Theory/Table}}.
1.e4 c6 2.d4 d5 3.Nc3 dxe4 4. Nxe4 Bf5 5. Ng3 Bg6 6. h4 h6 7. Nf3 Nd7 8. h5 Bh7 9. Bd3 Bxd3 10. Qxd3 e6 11. Bf4 Qa5+ 12. Bd2
<table border="0" cellspacing="0" cellpadding="4">
<tr>
<th></th>
<th align="left">12</th>
</tr>
<tr>
<th align="right"></th>
<td>...<br>[[/12...Bb4|Bb4]] </td>
</tr>
</table>
==References==
{{reflist}}
{{Chess Opening Theory/Footer}}
{{ChessStub}}
1dv1onoybpfuh17jmisvw2td4qch7bf
Chess Opening Theory/1. e4/1...c6/2. d4/2...d5/3. Nc3/3...dxe4/4. Nxe4/4...Bf5/5. Ng3/5...Bg6/6. h4/6...h6/7. Nf3/7...Nd7/8. h5/8...Bh7/9. Bd3/9...Bxd3/10. Qxd3/10...e6/11. Bf4/11...Qa5/12. Bd2/12...Bb4
0
484092
4641555
2026-06-28T16:47:08Z
Greenman
7490
start
4641555
wikitext
text/x-wiki
{{Chess Opening Theory/Position|=
|Caro-Kann Defence:Classical Variation|
|rd| | | |kd||nd|rd|=
|pd|pd| |nd| |pd|pd| |=
| | |pd| |pd| | |pd|=
|qd| | | | | | |pl|=
| |bd | |pl| || | |=
| | | |ql| |nl|nl| |=
|pl|pl|pl|bl | |pl|pl| |=
|rl| | | |kl| | |rl|=
||
}}
== 12...Bb4 ==
White wants to avoid simplifying into equality, so can either play c3 or Ne4
<table border="0" cellspacing="0" cellpadding="4">
<tr>
<th></th>
<th align="left">13.</th>
</tr>
<tr>
<th align="right"></th>
<td>[[/12. c3|c3]] </td>
</tr>
<tr>
<th align="right"></th>
<td>[[/12. Ne4|Ne4]] </td>
</tr>
</table>
{{ChessMid}}
{{BookCat}}
2uun7gvpbaq2csjlwgmd1hffg0h8vcu
User:All About World History
2
484094
4641583
2026-06-28T21:23:14Z
All About World History
3610638
Created page with "Hello! Welcome to World History!"
4641583
wikitext
text/x-wiki
Hello! Welcome to World History!
pf1r2hfqahk80bhwrwwuhrao5956dzg
Taiwan History
0
484095
4641596
2026-06-29T01:29:11Z
一隻北極熊
3609960
Redirected page to [[Taiwan history]]
4641596
wikitext
text/x-wiki
#REDIRECT [[Taiwan history]]
jl4lm40kockctprqcto5jokhmexspe3
Taiwan history/Contents
0
484096
4641600
2026-06-29T03:00:51Z
一隻北極熊
3609960
Created page with "{| border="0" width="75%" |- | valign="top" width="48%" | '''Introduction''' * [[/About Taiwan History|About Taiwan History]] {{stage short|100%|Jan 24, 2005}} * [[/How To Use This Textbook|How to use this textbook]] {{stage short|100%|Jan 24, 2005}} '''Early Taiwan (-1683)'''<br> 1. [[/Prehistorical and the indigenous culture|Prehistorical and the indigenous culture<br>-1624]] {{stage short|0%|Jun 29, 2005}}<br> 2. /The Dutch and Spanish rule|The Dutch and Spanish ru..."
4641600
wikitext
text/x-wiki
{| border="0" width="75%"
|-
| valign="top" width="48%" |
'''Introduction'''
* [[/About Taiwan History|About Taiwan History]] {{stage short|100%|Jan 24, 2005}}
* [[/How To Use This Textbook|How to use this textbook]] {{stage short|100%|Jan 24, 2005}}
'''Early Taiwan (-1683)'''<br>
1. [[/Prehistorical and the indigenous culture|Prehistorical and the indigenous culture<br>-1624]] {{stage short|0%|Jun 29, 2005}}<br>
2. [[/The Dutch and Spanish rule|The Dutch and Spanish rule<br>1624-1662]] {{stage short|0%|Jun 29, 2026}}<br>
3. [[/Kingdom of Tungning|Kingdom of Tungning<br>1662-1683]] {{stage short|75%|Oct 2, 2014}}<br>
4. [[/Han Chinese migration to Taiwan|Han Chinese migration to Taiwan]] {{stage short|100%|Apr 26, 2012}}<br>
'''Qing Rule (1683–1895)'''<br>
5. [[/Period of Passive Rule over Taiwan|Period of Passive Rule over Taiwan<br>(1683–mid-19th century)]]<br>
6. [[/The Period of Transformation and the Opening of the Port|The Period of Transformation and the Opening of the Port<br>(1858-1874)]]<br>
7. [[/The period of active province-building in Taiwan|The period of active province-building in Taiwan<br>(1885-1895)]]<br>
'''Japanese Rule (1895-1945)'''<br>
8. [[/Republic of Formosa|Republic of Formosa<br>(1895)]] {{stage short|0%|Jun 29, 2026}}<br>
9. [[/Japanese colonial rule in Taiwan|Japanese colonial rule in Taiwan<br>(1895-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
10. [[Modernized infrastructure in Taiwan|Modernized infrastructure in Taiwan]] {{stage short|0%|Jun 29, 2026}}<br>
11. [[/The Political Movements of Chiang Wei-shui and Lin Hsien-tang|The Political Movements of Chiang Wei-shui and Lin Hsien-tang<br>(1921-1927)]] {{stage short|0%|Jun 29, 2026}}<br>
12. [[/Taiwan in World War II|Taiwan in World War II<br>(1937-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
''' ROC Rule (1945-)'''<br>
13. [[/Post-war takeover|Post-war takeover<br>(1945-1949)]] {{stage short|0%|Jun 29, 2026}}<br>
14. [[/February 28 incident|February 28 incident<br>(1947)]] {{stage short|0%|Jun 29, 2026}}<br>
15. [[/ROC retreats to Taiwan|ROC retreats to Taiwan<br>(1949)]] {{stage short|0%|Jun 28, 2026}}<br>
16. [[/The land reform|The land reform<br>(1950s)]] {{stage short|0%|Jun 29, 2026}}<br>
17. [[/Taiwan Strait Crisis|Taiwan Strait Crisis<br>(1954-)]] {{stage short|0%|Jun 29,2026}}<br>
18. [[/White Terror|White Terror<br>(1947-1987)]] {{stage short|0%|Jun 29,2026}}<br>
19. [[/Diplomatic challenges |Diplomatic challenges<br>(1970s)]] {{stage short|50%|Jun 29,2026}}<br>
20. [[/Economic Miracle|Economic Miracle<br>(1960s-1980s)]] {{stage short|75%|Jun 29,2026}}<br>
21. [[/Taiwan's democratization|Taiwan's democratization<br>(1987-2000)]] {{stage short|00%|Jun 29,2026}}<br>
22. [[/Modern Taiwan|Modern Taiwan<br>(2000-)]] {{stage short|50%|Jun 29,2026}}<br>
|}
== Appendices / 附录 ==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
* [[/Historical Maps of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
* [[/List of Rulers of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
|}
baz1ll29740fu3e8koif35iir8grjk8
4641616
4641600
2026-06-29T06:57:14Z
一隻北極熊
3609960
4641616
wikitext
text/x-wiki
==Contents==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
'''Introduction'''
* [[/About Taiwan History|About Taiwan History]] {{stage short|0%|Jun 28, 2026}}
* [[/How To Use This Textbook|How to use this textbook]] {{stage short|0%|Jun 28, 2026}}
'''Early Taiwan (-1683)'''<br>
1. [[/Prehistorical and the indigenous culture|Prehistorical and the indigenous culture<br>-1624]]{{stage short|0%|Jun 28, 2026}}<br>
2. [[/The Dutch and Spanish rule|The Dutch and Spanish rule<br>1624-1662]] {{stage short|0%|Jun 29, 2026}}<br>
3. [[/Kingdom of Tungning|Kingdom of Tungning<br>1662-1683]] {{stage short|0%|Jun 28, 2026}}<br>
4. [[/Han Chinese migration to Taiwan|Han Chinese migration to Taiwan]] {{stage short|100%|Apr 26, 2012}}<br>
'''Qing Rule (1683–1895)'''<br>
5. [[/Period of Passive Rule over Taiwan|Period of Passive Rule over Taiwan<br>(1683–mid-19th century)]]<br>
6. [[/The Period of Transformation and the Opening of the Port|The Period of Transformation and the Opening of the Port<br>(1858-1874)]]<br>
7. [[/The period of active province-building in Taiwan|The period of active province-building in Taiwan<br>(1885-1895)]]<br>
'''Japanese Rule (1895-1945)'''<br>
8. [[/Republic of Formosa|Republic of Formosa<br>(1895)]] {{stage short|0%|Jun 29, 2026}}<br>
9. [[/Japanese colonial rule in Taiwan|Japanese colonial rule in Taiwan<br>(1895-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
10. [[Modernized infrastructure in Taiwan|Modernized infrastructure in Taiwan]] {{stage short|0%|Jun 29, 2026}}<br>
11. [[/The Political Movements of Chiang Wei-shui and Lin Hsien-tang|The Political Movements of Chiang Wei-shui and Lin Hsien-tang<br>(1921-1927)]] {{stage short|0%|Jun 29, 2026}}<br>
12. [[/Taiwan in World War II|Taiwan in World War II<br>(1937-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
''' ROC Rule (1945-)'''<br>
13. [[/Post-war takeover|Post-war takeover<br>(1945-1949)]] {{stage short|0%|Jun 29, 2026}}<br>
14. [[/February 28 incident|February 28 incident<br>(1947)]] {{stage short|0%|Jun 29, 2026}}<br>
15. [[/ROC retreats to Taiwan|ROC retreats to Taiwan<br>(1949)]] {{stage short|0%|Jun 28, 2026}}<br>
16. [[/The land reform|The land reform<br>(1950s)]] {{stage short|0%|Jun 29, 2026}}<br>
17. [[/Taiwan Strait Crisis|Taiwan Strait Crisis<br>(1954-)]] {{stage short|0%|Jun 29,2026}}<br>
18. [[/White Terror|White Terror<br>(1947-1987)]] {{stage short|0%|Jun 29,2026}}<br>
19. [[/Diplomatic challenges |Diplomatic challenges<br>(1970s)]] {{stage short|50%|Jun 29,2026}}<br>
20. [[/Economic Miracle|Economic Miracle<br>(1960s-1980s)]] {{stage short|75%|Jun 29,2026}}<br>
21. [[/Taiwan's democratization|Taiwan's democratization<br>(1987-2000)]] {{stage short|00%|Jun 29,2026}}<br>
22. [[/Modern Taiwan|Modern Taiwan<br>(2000-)]] {{stage short|50%|Jun 29,2026}}<br>
|}
== Appendices==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
* [[/Historical Maps of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
* [[/List of Rulers of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
|}
==Related Books==
*[[History of China]]
*[[Chinese History]]
*[[Chinese (Mandarin)]]
*[[Hokkien]]
*[[Hakka]]
m0bey679oqspnimqn8weartegccxwwm
4641617
4641616
2026-06-29T06:58:06Z
一隻北極熊
3609960
4641617
wikitext
text/x-wiki
==Contents==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
'''Introduction'''
* [[/About Taiwan History|About Taiwan History]] {{stage short|0%|Jun 28, 2026}}
* [[/How To Use This Textbook|How to use this textbook]] {{stage short|0%|Jun 28, 2026}}
'''Early Taiwan (-1683)'''<br>
1. [[/Prehistorical and the indigenous culture|Prehistorical and the indigenous culture<br>-1624]]{{stage short|0%|Jun 28, 2026}}<br>
2. [[/The Dutch and Spanish rule|The Dutch and Spanish rule<br>1624-1662]] {{stage short|0%|Jun 29, 2026}}<br>
3. [[/Kingdom of Tungning|Kingdom of Tungning<br>1662-1683]] {{stage short|0%|Jun 28, 2026}}<br>
4. [[/Han Chinese migration to Taiwan|Han Chinese migration to Taiwan]] {{stage short|0%|Jun 28, 2026}}<br>
'''Qing Rule (1683–1895)'''<br>
5. [[/Period of Passive Rule over Taiwan|Period of Passive Rule over Taiwan<br>(1683–mid-19th century)]]{{stage short|0%|Jun 28, 2026}}<br>
6. [[/The Period of Transformation and the Opening of the Port|The Period of Transformation and the Opening of the Port<br>(1858-1874)]]{{stage short|0%|Jun 28, 2026}}<br>
7. [[/The period of active province-building in Taiwan|The period of active province-building in Taiwan<br>(1885-1895)]]{{stage short|0%|Jun 28, 2026}}<br>
'''Japanese Rule (1895-1945)'''<br>
8. [[/Republic of Formosa|Republic of Formosa<br>(1895)]] {{stage short|0%|Jun 29, 2026}}<br>
9. [[/Japanese colonial rule in Taiwan|Japanese colonial rule in Taiwan<br>(1895-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
10. [[Modernized infrastructure in Taiwan|Modernized infrastructure in Taiwan]] {{stage short|0%|Jun 29, 2026}}<br>
11. [[/The Political Movements of Chiang Wei-shui and Lin Hsien-tang|The Political Movements of Chiang Wei-shui and Lin Hsien-tang<br>(1921-1927)]] {{stage short|0%|Jun 29, 2026}}<br>
12. [[/Taiwan in World War II|Taiwan in World War II<br>(1937-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
''' ROC Rule (1945-)'''<br>
13. [[/Post-war takeover|Post-war takeover<br>(1945-1949)]] {{stage short|0%|Jun 29, 2026}}<br>
14. [[/February 28 incident|February 28 incident<br>(1947)]] {{stage short|0%|Jun 29, 2026}}<br>
15. [[/ROC retreats to Taiwan|ROC retreats to Taiwan<br>(1949)]] {{stage short|0%|Jun 28, 2026}}<br>
16. [[/The land reform|The land reform<br>(1950s)]] {{stage short|0%|Jun 29, 2026}}<br>
17. [[/Taiwan Strait Crisis|Taiwan Strait Crisis<br>(1954-)]] {{stage short|0%|Jun 29,2026}}<br>
18. [[/White Terror|White Terror<br>(1947-1987)]] {{stage short|0%|Jun 29,2026}}<br>
19. [[/Diplomatic challenges |Diplomatic challenges<br>(1970s)]] {{stage short|50%|Jun 29,2026}}<br>
20. [[/Economic Miracle|Economic Miracle<br>(1960s-1980s)]] {{stage short|75%|Jun 29,2026}}<br>
21. [[/Taiwan's democratization|Taiwan's democratization<br>(1987-2000)]] {{stage short|00%|Jun 29,2026}}<br>
22. [[/Modern Taiwan|Modern Taiwan<br>(2000-)]] {{stage short|50%|Jun 29,2026}}<br>
|}
== Appendices==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
* [[/Historical Maps of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
* [[/List of Rulers of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
|}
==Related Books==
*[[History of China]]
*[[Chinese History]]
*[[Chinese (Mandarin)]]
*[[Hokkien]]
*[[Hakka]]
r4p58h2b04np5982onn7zb0lgads3jt
4641618
4641617
2026-06-29T06:58:37Z
一隻北極熊
3609960
/* Contents */
4641618
wikitext
text/x-wiki
==Contents==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
'''Introduction'''
* [[/About Taiwan History|About Taiwan History]] {{stage short|0%|Jun 28, 2026}}
* [[/How To Use This Textbook|How to use this textbook]] {{stage short|0%|Jun 28, 2026}}
'''Early Taiwan (-1683)'''<br>
1. [[/Prehistorical and the indigenous culture|Prehistorical and the indigenous culture<br>-1624]]{{stage short|0%|Jun 28, 2026}}<br>
2. [[/The Dutch and Spanish rule|The Dutch and Spanish rule<br>1624-1662]] {{stage short|0%|Jun 29, 2026}}<br>
3. [[/Kingdom of Tungning|Kingdom of Tungning<br>1662-1683]] {{stage short|0%|Jun 28, 2026}}<br>
4. [[/Han Chinese migration to Taiwan|Han Chinese migration to Taiwan]] {{stage short|0%|Jun 28, 2026}}<br>
'''Qing Rule (1683–1895)'''<br>
5. [[/Period of Passive Rule over Taiwan|Period of Passive Rule over Taiwan<br>(1683–mid-19th century)]]{{stage short|0%|Jun 28, 2026}}<br>
6. [[/The Period of Transformation and the Opening of the Port|The Period of Transformation and the Opening of the Port<br>(1858-1874)]]{{stage short|0%|Jun 28, 2026}}<br>
7. [[/The period of active province-building in Taiwan|The period of active province-building in Taiwan<br>(1885-1895)]]{{stage short|0%|Jun 28, 2026}}<br>
'''Japanese Rule (1895-1945)'''<br>
8. [[/Republic of Formosa|Republic of Formosa<br>(1895)]] {{stage short|0%|Jun 29, 2026}}<br>
9. [[/Japanese colonial rule in Taiwan|Japanese colonial rule in Taiwan<br>(1895-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
10. [[Modernized infrastructure in Taiwan|Modernized infrastructure in Taiwan]] {{stage short|0%|Jun 29, 2026}}<br>
11. [[/The Political Movements of Chiang Wei-shui and Lin Hsien-tang|The Political Movements of Chiang Wei-shui and Lin Hsien-tang<br>(1921-1927)]] {{stage short|0%|Jun 29, 2026}}<br>
12. [[/Taiwan in World War II|Taiwan in World War II<br>(1937-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
''' ROC Rule (1945-)'''<br>
13. [[/Post-war takeover|Post-war takeover<br>(1945-1949)]] {{stage short|0%|Jun 29, 2026}}<br>
14. [[/February 28 incident|February 28 incident<br>(1947)]] {{stage short|0%|Jun 29, 2026}}<br>
15. [[/ROC retreats to Taiwan|ROC retreats to Taiwan<br>(1949)]] {{stage short|0%|Jun 28, 2026}}<br>
16. [[/The land reform|The land reform<br>(1950s)]] {{stage short|0%|Jun 29, 2026}}<br>
17. [[/Taiwan Strait Crisis|Taiwan Strait Crisis<br>(1954-)]] {{stage short|0%|Jun 29,2026}}<br>
18. [[/White Terror|White Terror<br>(1947-1987)]] {{stage short|0%|Jun 29,2026}}<br>
19. [[/Diplomatic challenges |Diplomatic challenges<br>(1970s)]] {{stage short|0%|Jun 29,2026}}<br>
20. [[/Economic Miracle|Economic Miracle<br>(1960s-1980s)]] {{stage short|0%|Jun 29,2026}}<br>
21. [[/Taiwan's democratization|Taiwan's democratization<br>(1987-2000)]] {{stage short|0%|Jun 29,2026}}<br>
22. [[/Modern Taiwan|Modern Taiwan<br>(2000-)]] {{stage short|0%|Jun 29,2026}}<br>
|}
== Appendices==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
* [[/Historical Maps of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
* [[/List of Rulers of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
|}
==Related Books==
*[[History of China]]
*[[Chinese History]]
*[[Chinese (Mandarin)]]
*[[Hokkien]]
*[[Hakka]]
d7f2n3uta1d69razxs9fdpabsxc6qzh
4641619
4641618
2026-06-29T07:00:00Z
一隻北極熊
3609960
/* Related Books */
4641619
wikitext
text/x-wiki
==Contents==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
'''Introduction'''
* [[/About Taiwan History|About Taiwan History]] {{stage short|0%|Jun 28, 2026}}
* [[/How To Use This Textbook|How to use this textbook]] {{stage short|0%|Jun 28, 2026}}
'''Early Taiwan (-1683)'''<br>
1. [[/Prehistorical and the indigenous culture|Prehistorical and the indigenous culture<br>-1624]]{{stage short|0%|Jun 28, 2026}}<br>
2. [[/The Dutch and Spanish rule|The Dutch and Spanish rule<br>1624-1662]] {{stage short|0%|Jun 29, 2026}}<br>
3. [[/Kingdom of Tungning|Kingdom of Tungning<br>1662-1683]] {{stage short|0%|Jun 28, 2026}}<br>
4. [[/Han Chinese migration to Taiwan|Han Chinese migration to Taiwan]] {{stage short|0%|Jun 28, 2026}}<br>
'''Qing Rule (1683–1895)'''<br>
5. [[/Period of Passive Rule over Taiwan|Period of Passive Rule over Taiwan<br>(1683–mid-19th century)]]{{stage short|0%|Jun 28, 2026}}<br>
6. [[/The Period of Transformation and the Opening of the Port|The Period of Transformation and the Opening of the Port<br>(1858-1874)]]{{stage short|0%|Jun 28, 2026}}<br>
7. [[/The period of active province-building in Taiwan|The period of active province-building in Taiwan<br>(1885-1895)]]{{stage short|0%|Jun 28, 2026}}<br>
'''Japanese Rule (1895-1945)'''<br>
8. [[/Republic of Formosa|Republic of Formosa<br>(1895)]] {{stage short|0%|Jun 29, 2026}}<br>
9. [[/Japanese colonial rule in Taiwan|Japanese colonial rule in Taiwan<br>(1895-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
10. [[Modernized infrastructure in Taiwan|Modernized infrastructure in Taiwan]] {{stage short|0%|Jun 29, 2026}}<br>
11. [[/The Political Movements of Chiang Wei-shui and Lin Hsien-tang|The Political Movements of Chiang Wei-shui and Lin Hsien-tang<br>(1921-1927)]] {{stage short|0%|Jun 29, 2026}}<br>
12. [[/Taiwan in World War II|Taiwan in World War II<br>(1937-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
''' ROC Rule (1945-)'''<br>
13. [[/Post-war takeover|Post-war takeover<br>(1945-1949)]] {{stage short|0%|Jun 29, 2026}}<br>
14. [[/February 28 incident|February 28 incident<br>(1947)]] {{stage short|0%|Jun 29, 2026}}<br>
15. [[/ROC retreats to Taiwan|ROC retreats to Taiwan<br>(1949)]] {{stage short|0%|Jun 28, 2026}}<br>
16. [[/The land reform|The land reform<br>(1950s)]] {{stage short|0%|Jun 29, 2026}}<br>
17. [[/Taiwan Strait Crisis|Taiwan Strait Crisis<br>(1954-)]] {{stage short|0%|Jun 29,2026}}<br>
18. [[/White Terror|White Terror<br>(1947-1987)]] {{stage short|0%|Jun 29,2026}}<br>
19. [[/Diplomatic challenges |Diplomatic challenges<br>(1970s)]] {{stage short|0%|Jun 29,2026}}<br>
20. [[/Economic Miracle|Economic Miracle<br>(1960s-1980s)]] {{stage short|0%|Jun 29,2026}}<br>
21. [[/Taiwan's democratization|Taiwan's democratization<br>(1987-2000)]] {{stage short|0%|Jun 29,2026}}<br>
22. [[/Modern Taiwan|Modern Taiwan<br>(2000-)]] {{stage short|0%|Jun 29,2026}}<br>
|}
== Appendices==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
* [[/Historical Maps of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
* [[/List of Rulers of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
|}
==Related Books==
*[[History of China]]
*[[Chinese History]]
*[[Chinese (Mandarin)]]
*[[Hokkien]]
8mkkhgisfxxnrajyenilj93bsuklcfd
4641668
4641619
2026-06-29T11:29:50Z
一隻北極熊
3609960
4641668
wikitext
text/x-wiki
==Contents==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
'''Introduction'''
* [[/About Taiwan History|About Taiwan History]] {{stage short|50%|Jun 29, 2026}}
* [[/How To Use This Textbook|How to use this textbook]] {{stage short|0%|Jun 28, 2026}}
'''Early Taiwan (-1683)'''<br>
1. [[/Prehistorical and the indigenous culture|Prehistorical and the indigenous culture<br>-1624]]{{stage short|0%|Jun 28, 2026}}<br>
2. [[/The Dutch and Spanish rule|The Dutch and Spanish rule<br>1624-1662]] {{stage short|0%|Jun 29, 2026}}<br>
3. [[/Kingdom of Tungning|Kingdom of Tungning<br>1662-1683]] {{stage short|0%|Jun 28, 2026}}<br>
4. [[/Han Chinese migration to Taiwan|Han Chinese migration to Taiwan]] {{stage short|0%|Jun 28, 2026}}<br>
'''Qing Rule (1683–1895)'''<br>
5. [[/Period of Passive Rule over Taiwan|Period of Passive Rule over Taiwan<br>(1683–mid-19th century)]]{{stage short|0%|Jun 28, 2026}}<br>
6. [[/The Period of Transformation and the Opening of the Port|The Period of Transformation and the Opening of the Port<br>(1858-1874)]]{{stage short|0%|Jun 28, 2026}}<br>
7. [[/The period of active province-building in Taiwan|The period of active province-building in Taiwan<br>(1885-1895)]]{{stage short|0%|Jun 28, 2026}}<br>
'''Japanese Rule (1895-1945)'''<br>
8. [[/Republic of Formosa|Republic of Formosa<br>(1895)]] {{stage short|0%|Jun 29, 2026}}<br>
9. [[/Japanese colonial rule in Taiwan|Japanese colonial rule in Taiwan<br>(1895-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
10. [[Modernized infrastructure in Taiwan|Modernized infrastructure in Taiwan]] {{stage short|0%|Jun 29, 2026}}<br>
11. [[/The Political Movements of Chiang Wei-shui and Lin Hsien-tang|The Political Movements of Chiang Wei-shui and Lin Hsien-tang<br>(1921-1927)]] {{stage short|0%|Jun 29, 2026}}<br>
12. [[/Taiwan in World War II|Taiwan in World War II<br>(1937-1945)]] {{stage short|0%|Jun 29, 2026}}<br>
''' ROC Rule (1945-)'''<br>
13. [[/Post-war takeover|Post-war takeover<br>(1945-1949)]] {{stage short|0%|Jun 29, 2026}}<br>
14. [[/February 28 incident|February 28 incident<br>(1947)]] {{stage short|0%|Jun 29, 2026}}<br>
15. [[/ROC retreats to Taiwan|ROC retreats to Taiwan<br>(1949)]] {{stage short|0%|Jun 28, 2026}}<br>
16. [[/The land reform|The land reform<br>(1950s)]] {{stage short|0%|Jun 29, 2026}}<br>
17. [[/Taiwan Strait Crisis|Taiwan Strait Crisis<br>(1954-)]] {{stage short|0%|Jun 29,2026}}<br>
18. [[/White Terror|White Terror<br>(1947-1987)]] {{stage short|0%|Jun 29,2026}}<br>
19. [[/Diplomatic challenges |Diplomatic challenges<br>(1970s)]] {{stage short|0%|Jun 29,2026}}<br>
20. [[/Economic Miracle|Economic Miracle<br>(1960s-1980s)]] {{stage short|0%|Jun 29,2026}}<br>
21. [[/Taiwan's democratization|Taiwan's democratization<br>(1987-2000)]] {{stage short|0%|Jun 29,2026}}<br>
22. [[/Modern Taiwan|Modern Taiwan<br>(2000-)]] {{stage short|0%|Jun 29,2026}}<br>
|}
== Appendices==
{| border="0" width="75%"
|-
| valign="top" width="48%" |
* [[/Historical Maps of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
* [[/List of Rulers of Taiwan/]] {{stage short|0%|Jun 29, 2026}}
|}
==Related Books==
*[[History of China]]
*[[Chinese History]]
*[[Chinese (Mandarin)]]
*[[Hokkien]]
enn75mlgnmso2v1kvt4nzndltp5hjqk
Greek Mythology/Titans/Helios
0
484097
4641604
2026-06-29T06:15:40Z
All About World History
3610638
Created page with "[[File:Hans Rathausky - Helios et Selene.jpg|thumb|right|Statue of Helios and Selene]] '''Helios''' (Greek: '''Ἠέλιος''') was the god that personified the Sun. His name derives from ἥλιος, the Greek word for "sun," and he is often depicted with a {{w|radiate crown}} and piloting a horse-drawn chariot in the sky. He is the son of titans [[Greek Mythology/Titans/Hyperion|Hyperion]] and [[Greek Mythology/Titans/Theia|Theia]], and he is the brother of Greek M..."
4641604
wikitext
text/x-wiki
[[File:Hans Rathausky - Helios et Selene.jpg|thumb|right|Statue of Helios and Selene]]
'''Helios''' (Greek: '''Ἠέλιος''') was the god that personified the Sun. His name derives from ἥλιος, the Greek word for "sun," and he is often depicted with a {{w|radiate crown}} and piloting a horse-drawn chariot in the sky. He is the son of titans [[Greek Mythology/Titans/Hyperion|Hyperion]] and [[Greek Mythology/Titans/Theia|Theia]], and he is the brother of [[Greek Mythology/Titans/Selene|Selene]], the goddess of the moon and Eos, the goddess of the dawn.
In Greek cosmology, Helios was not merely the god of the sun, but a direct personification of the sun, and his movements followed a daily cycle. At dawn, he was awakened by a rooster and began his journey from an eastern palace in the Oceanus River (the world-encircling ocean). While high in the sky, this altitude allowed him to see everything that occurred on Earth. Over the course of the day, he traveled all the way to the western edges of the world before returning to his palace for the night.
99nu72c2kk96lwzo8dlodvrb64rfsoe
4641605
4641604
2026-06-29T06:16:08Z
All About World History
3610638
4641605
wikitext
text/x-wiki
[[File:Hans Rathausky - Helios et Selene.jpg|thumb|right|Statue of Helios and Selene]]
'''Helios''' (Greek: '''Ἠέλιος''') was the god that personified the Sun. His name derives from ἥλιος, the Greek word for "sun," and he is often depicted with a {{w|radiate crown}} and piloting a horse-drawn chariot in the sky. He is the son of titans [[Greek Mythology/Titans/Hyperion|Hyperion]] and [[Greek Mythology/Titans/Theia|Theia]], and he is the brother of [[Greek Mythology/Titans/Selene|Selene]], the goddess of the moon and Eos, the goddess of the dawn.
In Greek cosmology, Helios was not merely the god of the sun, but a direct personification of the sun, and his movements followed a daily cycle. At dawn, he was awakened by a rooster and began his journey from an eastern palace in the Oceanus River (the world-encircling ocean). While high in the sky, this altitude allowed him to see everything that occurred on Earth. Over the course of the day, he traveled all the way to the western edges of the world before returning to his palace for the night.
{{BookCat}}
5fyhuup2naqz9psdcxrcxiy67s2wm7u
Greek Mythology/Titans/Epimetheus
0
484098
4641608
2026-06-29T06:26:05Z
All About World History
3610638
Created page with "'''Epimetheus,''' whose name means "afterthought," was the brother of Prometheus. During the war of the Titans, Epimetheus, looking to the past, continued his battle with the Titans, while his brother, Prometheus, foreseeing the victory of Zeus, fought on the Olympians side. His name is the inverse of that of Prometheus, sharing the element "metheus" (Greek: μανθάνω [mănthắnō]) which means "to think," but with opposite prefixes: the "pro" in "Prometheus" mean..."
4641608
wikitext
text/x-wiki
'''Epimetheus,''' whose name means "afterthought," was the brother of Prometheus. During the war of the Titans, Epimetheus, looking to the past, continued his battle with the Titans, while his brother, Prometheus, foreseeing the victory of Zeus, fought on the Olympians side.
His name is the inverse of that of Prometheus, sharing the element "metheus" (Greek: μανθάνω [mănthắnō]) which means "to think," but with opposite prefixes: the "pro" in "Prometheus" means "before," while "epi" means "after."
{{BookCat}}
eel2mol6smwd5jj2hxd4q18uk628nfs
Hokkien/About Hokkien
0
484100
4641615
2026-06-29T06:54:55Z
一隻北極熊
3609960
Created page with "==About Hokkien== '''Hokkien''', is one of a dialect in Chinese, mainly used in parts of China, Taiwan, and also parts of Southeast Asia. ==Why learn Hokkien?== Learning Hokkien connects you deeply with local communities, culture, and history across Taiwan, Southeast Asia, and Southern China. [[File:Hokkien Speakers in Asia.png|thumb|Hokkien Speakers in Asia]]"
4641615
wikitext
text/x-wiki
==About Hokkien==
'''Hokkien''', is one of a dialect in Chinese, mainly used in parts of China, Taiwan, and also parts of Southeast Asia.
==Why learn Hokkien?==
Learning Hokkien connects you deeply with local communities, culture, and history across Taiwan, Southeast Asia, and Southern China.
[[File:Hokkien Speakers in Asia.png|thumb|Hokkien Speakers in Asia]]
fz9wp0bphqpubfgh5ytu1khni8fw4bz
Chinese (Mandarin)/Lesson 5/Stroke Order
0
484101
4641634
2026-06-29T08:13:23Z
一隻北極熊
3609960
Created page with "Note: ''Italic'' for Traditional Characters ==一== [[File:一-bw.png]] ==二== [[File:二-bw.png]] ==三== [[File:三-bw.png]] ==四== [[File:四-bw.png]] ==五== [[File:五-bw.png]] ==六== [[File:六-bw.png]] ==七== [[File:七-bw.png]] ==八== [[File:八-bw.png]] ==九== [[File:九-bw.png]] ==十== [[File:十-bw.png]] ==山== [[File:館-bw.png]] ==村== [[File:再-bw.png]] ==去== [[File:見-bw.png]] ==烟== [[File:烟-bw.png]] ==''煙''== [[File:煙-bw.png]] ==家..."
4641634
wikitext
text/x-wiki
Note: ''Italic'' for Traditional Characters
==一==
[[File:一-bw.png]]
==二==
[[File:二-bw.png]]
==三==
[[File:三-bw.png]]
==四==
[[File:四-bw.png]]
==五==
[[File:五-bw.png]]
==六==
[[File:六-bw.png]]
==七==
[[File:七-bw.png]]
==八==
[[File:八-bw.png]]
==九==
[[File:九-bw.png]]
==十==
[[File:十-bw.png]]
==山==
[[File:館-bw.png]]
==村==
[[File:再-bw.png]]
==去==
[[File:見-bw.png]]
==烟==
[[File:烟-bw.png]]
==''煙''==
[[File:煙-bw.png]]
==家==
[[File:家-bw.png]]
==亭==
[[File:亭-bw.png]]
==台==
[[File:台-bw.png]]
==臺==
[[File:臺-bw.png]]
==座==
[[File:座-bw.png]]
==枝==
[[File:枝-bw.png]]
==花==
[[File:花-bw.png]]
{{BookCat}}
39qvapu3ghzoz823jfmzh6fkncpovlz
4641635
4641634
2026-06-29T08:13:41Z
一隻北極熊
3609960
/* 臺 */
4641635
wikitext
text/x-wiki
Note: ''Italic'' for Traditional Characters
==一==
[[File:一-bw.png]]
==二==
[[File:二-bw.png]]
==三==
[[File:三-bw.png]]
==四==
[[File:四-bw.png]]
==五==
[[File:五-bw.png]]
==六==
[[File:六-bw.png]]
==七==
[[File:七-bw.png]]
==八==
[[File:八-bw.png]]
==九==
[[File:九-bw.png]]
==十==
[[File:十-bw.png]]
==山==
[[File:館-bw.png]]
==村==
[[File:再-bw.png]]
==去==
[[File:見-bw.png]]
==烟==
[[File:烟-bw.png]]
==''煙''==
[[File:煙-bw.png]]
==家==
[[File:家-bw.png]]
==亭==
[[File:亭-bw.png]]
==台==
[[File:台-bw.png]]
==''臺''==
[[File:臺-bw.png]]
==座==
[[File:座-bw.png]]
==枝==
[[File:枝-bw.png]]
==花==
[[File:花-bw.png]]
{{BookCat}}
f0he81x7ezfbm7evkzuhnm1009ww3iv
4641636
4641635
2026-06-29T08:14:19Z
一隻北極熊
3609960
/* 去 */
4641636
wikitext
text/x-wiki
Note: ''Italic'' for Traditional Characters
==一==
[[File:一-bw.png]]
==二==
[[File:二-bw.png]]
==三==
[[File:三-bw.png]]
==四==
[[File:四-bw.png]]
==五==
[[File:五-bw.png]]
==六==
[[File:六-bw.png]]
==七==
[[File:七-bw.png]]
==八==
[[File:八-bw.png]]
==九==
[[File:九-bw.png]]
==十==
[[File:十-bw.png]]
==山==
[[File:館-bw.png]]
==村==
[[File:再-bw.png]]
==去==
[[File:去-bw.png]]
==烟==
[[File:烟-bw.png]]
==''煙''==
[[File:煙-bw.png]]
==家==
[[File:家-bw.png]]
==亭==
[[File:亭-bw.png]]
==台==
[[File:台-bw.png]]
==''臺''==
[[File:臺-bw.png]]
==座==
[[File:座-bw.png]]
==枝==
[[File:枝-bw.png]]
==花==
[[File:花-bw.png]]
{{BookCat}}
tv8gqr5krlqh25in3vl28fig4333bon
4641637
4641636
2026-06-29T08:14:34Z
一隻北極熊
3609960
/* 村 */
4641637
wikitext
text/x-wiki
Note: ''Italic'' for Traditional Characters
==一==
[[File:一-bw.png]]
==二==
[[File:二-bw.png]]
==三==
[[File:三-bw.png]]
==四==
[[File:四-bw.png]]
==五==
[[File:五-bw.png]]
==六==
[[File:六-bw.png]]
==七==
[[File:七-bw.png]]
==八==
[[File:八-bw.png]]
==九==
[[File:九-bw.png]]
==十==
[[File:十-bw.png]]
==山==
[[File:館-bw.png]]
==村==
[[File:村-bw.png]]
==去==
[[File:去-bw.png]]
==烟==
[[File:烟-bw.png]]
==''煙''==
[[File:煙-bw.png]]
==家==
[[File:家-bw.png]]
==亭==
[[File:亭-bw.png]]
==台==
[[File:台-bw.png]]
==''臺''==
[[File:臺-bw.png]]
==座==
[[File:座-bw.png]]
==枝==
[[File:枝-bw.png]]
==花==
[[File:花-bw.png]]
{{BookCat}}
24mwubgbde7ah08utm95l51mpvf70f7
4641638
4641637
2026-06-29T08:17:30Z
一隻北極熊
3609960
the numbers are already introduce in lesson 2
4641638
wikitext
text/x-wiki
Note: ''Italic'' for Traditional Characters
==山==
[[File:館-bw.png]]
==村==
[[File:村-bw.png]]
==去==
[[File:去-bw.png]]
==烟==
[[File:烟-bw.png]]
==''煙''==
[[File:煙-bw.png]]
==家==
[[File:家-bw.png]]
==亭==
[[File:亭-bw.png]]
==台==
[[File:台-bw.png]]
==''臺''==
[[File:臺-bw.png]]
==座==
[[File:座-bw.png]]
==枝==
[[File:枝-bw.png]]
==花==
[[File:花-bw.png]]
{{BookCat}}
gpa4uoi1qpvny56wgwog8tnq7cu9w0l
4641639
4641638
2026-06-29T08:17:56Z
一隻北極熊
3609960
4641639
wikitext
text/x-wiki
Note: ''Italic'' for Traditional Characters
==山==
[[File:山-bw.png]]
==村==
[[File:村-bw.png]]
==去==
[[File:去-bw.png]]
==烟==
[[File:烟-bw.png]]
==''煙''==
[[File:煙-bw.png]]
==家==
[[File:家-bw.png]]
==亭==
[[File:亭-bw.png]]
==台==
[[File:台-bw.png]]
==''臺''==
[[File:臺-bw.png]]
==座==
[[File:座-bw.png]]
==枝==
[[File:枝-bw.png]]
==花==
[[File:花-bw.png]]
{{BookCat}}
ddlttvmfnih2gi6pjxq9az3o5gwkv9r
Atomic Chess Opening Theory/1. Nf3/1...f6/2. Nc3/2...Nh6/3. g4/3...c6
0
484102
4641641
2026-06-29T08:24:25Z
AtomicChess
3609849
Created page with "{{Chess diagram | tright | 1. Nf3 f6 2. Nc3 Nh6 3. g4 c6 |= |rd|nd|bd|qd|kd|bd| |rd |pd|pd| |pd|pd| |pd|pd | | |pd| | |pd| |nd | | | | | | | | | | | | | | |pl| | | |nl| | |nl| | |pl|pl|pl|pl|pl|pl| |pl |rl| |bl|ql|kl|bl| |rl | defend b5 and d5 squares }} == 3...c6! == this move defend b5 and d5 squares. === White responses === * '''4. d4''' - main move * '''4. Nd4''' * '''4. e3''' * '''4. e4''' * '''4. d3''' * '''4. h4''' * '''4. Ng5''..."
4641641
wikitext
text/x-wiki
{{Chess diagram
| tright
| 1. Nf3 f6 2. Nc3 Nh6 3. g4 c6
|=
|rd|nd|bd|qd|kd|bd| |rd
|pd|pd| |pd|pd| |pd|pd
| | |pd| | |pd| |nd
| | | | | | | |
| | | | | | |pl|
| | |nl| | |nl| |
|pl|pl|pl|pl|pl|pl| |pl
|rl| |bl|ql|kl|bl| |rl
| defend b5 and d5 squares
}}
== 3...c6! ==
this move defend b5 and d5 squares.
=== White responses ===
* '''4. d4''' - main move
* '''4. Nd4'''
* '''4. e3'''
* '''4. e4'''
* '''4. d3'''
* '''4. h4'''
* '''4. Ng5'''
* '''4. Nd5'''
* '''4. Nb5'''
* '''4. Ne4'''
* '''4. Ne5'''
* '''4. Na4'''
* '''4. Nh4'''
* '''4. Rg1'''
k121iebjwkenaismq2g2g0qunwdw9ao
User:Waliyullah Tunde
2
484103
4641649
2026-06-29T09:07:36Z
J ansari
3036709
J ansari moved page [[User:Waliyullah Tunde]] to [[User:Akásọrọ̀bíàgbà]]: Automatically moved page while renaming the user "[[Special:CentralAuth/Waliyullah Tunde|Waliyullah Tunde]]" to "[[Special:CentralAuth/Akásọrọ̀bíàgbà|Akásọrọ̀bíàgbà]]"
4641649
wikitext
text/x-wiki
#REDIRECT [[User:Akásọrọ̀bíàgbà]]
j07bql0ybrvxndw8ljjb2i3l2wpd7ut
Chess Opening Theory/1. e4/1...e5/2. Nf3/2...Nc6/3. Nc3/3...Nf6/4. Nxe5/4...Nxe4
0
484104
4641650
2026-06-29T09:18:25Z
~2026-37277-04
3610762
asz
4641650
wikitext
text/x-wiki
aaa
eqg45fq5o9nog6ol7esvq9ffcw69o2d
4641651
4641650
2026-06-29T09:18:46Z
Saroj
3098642
Requesting deletion
4641651
wikitext
text/x-wiki
{{delete|No useful content}}aaa
8356fabkn6hxqntv1y673hsqydcplde
Fractals/Mandelbrot CLI: Renderer with Perturbation Theory
0
484105
4641658
2026-06-29T10:05:19Z
Aokoroko
3059689
Created page with "< [[Fractals|Back to Fractals book]] == Introduction == This page contains the original C++ source code used to render high-precision fragments of the Mandelbrot set using perturbation theory and 8x8 Super-Sampling Anti-Aliasing (SSAA). Created by [[User:Aokoroko]]. == Key Features == * '''High-Precision Reference:''' The 5000-bit reference trajectory is computed exactly once per zoom layer. * '''Hardware-Native Performance:''' Blazing-fast math for billions of pixels..."
4641658
wikitext
text/x-wiki
< [[Fractals|Back to Fractals book]]
== Introduction ==
This page contains the original C++ source code used to render high-precision fragments of the Mandelbrot set using perturbation theory and 8x8 Super-Sampling Anti-Aliasing (SSAA). Created by [[User:Aokoroko]].
== Key Features ==
* '''High-Precision Reference:''' The 5000-bit reference trajectory is computed exactly once per zoom layer.
* '''Hardware-Native Performance:''' Blazing-fast math for billions of pixels utilizing hardware-native double registers.
* When using double-precision floating-point numbers (on the order of 10⁻¹⁵), perturbation theory only allows you to zoom down to the '''10⁻³⁰⁸ level—no further.'''
* '''Innovative Algorithm:''' Revolutionary *Reference Reset to Zero* implementation.
* '''True 8x8 SSAA:''' Pristine, anti-aliased image quality with 64 independent samples per pixel.
* '''OpenMP Multi-threading:''' High-speed parallel computing to maximize CPU utilization.
== C++ Source Code ==
<syntaxhighlight lang="cpp">
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <cstdint>
#include <string>
#include <atomic>
#include <omp.h>
#include <cstdio>
#include <iomanip>
#include <gmp.h>
#include <mpfr.h>
using namespace std;
const double PI = 3.14159265358979323846;
const mpfr_prec_t MPFR_BITS = 5000;
#pragma pack(push, 1)
struct BMPHeader {
uint16_t type{0x4D42};
uint32_t size{0};
uint16_t reserved1{0};
uint16_t reserved2{0};
uint32_t offBits{54};
uint32_t structSize{40};
int32_t width{0};
int32_t height{0};
uint16_t planes{1};
uint16_t bitCount{24};
uint32_t compression{0};
uint32_t sizeImage{0};
int32_t xpelsPerMeter{2834};
int32_t ypelsPerMeter{2834};
uint32_t clrUsed{0};
uint32_t clrImportant{0};
};
#pragma pack(pop)
struct ComplexDouble {
double re;
double im;
};
void save_bmp(const string& filename, const vector<uint8_t>& data, int w, int h) {
int rowSize = (w * 3 + 3) & ~3;
BMPHeader header;
header.width = w;
header.height = h;
header.sizeImage = rowSize * h;
header.size = header.sizeImage + 54;
ofstream f(filename, ios::binary);
f.write(reinterpret_cast<char*>(&header), 54);
f.write(reinterpret_cast<const char*>(data.data()), data.size());
f.close();
}
int main() {
string absc_str, ordi_str, size_str;
absc_str = "-1.74907816150520173167912454515663360420734509948112463480292338384";
ordi_str = "-0.00000550991906629096602513098567268615714673236269915508056068145";
size_str = "0.0000000000000000000000000000000000000000000000000000000000000153";
const int targetW = 10000;
const int targetH = 10000;
const int scale = 8;
const int rawW = targetW * scale;
const int rawH = targetH * scale;
cout << "Step 1: Calculating Raw Map (" << rawW << "x" << rawH << ") using Perturbation..." << endl;
vector<uint8_t> iterMap((size_t)rawW * rawH);
mpfr_t rx, ry, zr, zi, zr2, zi2, tmp, sz, st;
mpfr_inits2(MPFR_BITS, rx, ry, zr, zi, zr2, zi2, tmp, sz, st, NULL);
mpfr_set_str(rx, absc_str.c_str(), 10, MPFR_RNDN);
mpfr_set_str(ry, ordi_str.c_str(), 10, MPFR_RNDN);
mpfr_set_str(sz, size_str.c_str(), 10, MPFR_RNDN);
mpfr_div_ui(st, sz, rawW, MPFR_RNDN);
double step_d = mpfr_get_d(st, MPFR_RNDN);
double ref_rec_d = mpfr_get_d(rx, MPFR_RNDN);
double ref_imc_d = mpfr_get_d(ry, MPFR_RNDN);
vector<ComplexDouble> ref_orbit_double(50005);
mpfr_set_ui(zr, 0, MPFR_RNDN);
mpfr_set_ui(zi, 0, MPFR_RNDN);
mpfr_set_ui(zr2, 0, MPFR_RNDN);
mpfr_set_ui(zi2, 0, MPFR_RNDN);
uint32_t ref_i = 0;
bool escaped = false;
while (ref_i < 50000) {
ref_orbit_double[ref_i].re = mpfr_get_d(zr, MPFR_RNDN);
ref_orbit_double[ref_i].im = mpfr_get_d(zi, MPFR_RNDN);
mpfr_mul(tmp, zr, zi, MPFR_RNDN);
mpfr_mul_ui(zi, tmp, 2, MPFR_RNDN);
mpfr_add(zi, zi, ry, MPFR_RNDN);
mpfr_sub(zr, zr2, zi2, MPFR_RNDN);
mpfr_add(zr, zr, rx, MPFR_RNDN);
mpfr_mul(zr2, zr, zr, MPFR_RNDN);
mpfr_mul(zi2, zi, zi, MPFR_RNDN);
if (escaped) {
ref_i++;
break;
}
mpfr_add(tmp, zr2, zi2, MPFR_RNDN);
if (mpfr_cmp_d(tmp, 4.0) >= 0) {
escaped = true;
}
ref_i++;
}
ref_orbit_double[ref_i].re = mpfr_get_d(zr, MPFR_RNDN);
ref_orbit_double[ref_i].im = mpfr_get_d(zi, MPFR_RNDN);
uint32_t max_valid_ref_iter = ref_i;
mpfr_clears(rx, ry, zr, zi, zr2, zi2, tmp, sz, st, NULL);
atomic<int> linesDone{0};
#pragma omp parallel for schedule(dynamic)
for (size_t b = 0; b < (size_t)rawH; ++b) {
for (size_t a = 0; a < (size_t)rawW; ++a) {
double delta_rec = (double)((long long)a - (rawW / 2)) * step_d;
double delta_imc = (double)((long long)b - (rawH / 2)) * step_d;
uint32_t index = 0;
double delta_re = 0.0;
double delta_im = 0.0;
double z_re = 0.0;
double z_im = 0.0;
uint32_t i = 0;
const ComplexDouble* ref_ptr = ref_orbit_double.data();
while (i < max_valid_ref_iter) {
if ((z_re * z_re + z_im * z_im) >= 40000.0) {
break;
}
if ((z_re * z_re + z_im * z_im) < (delta_re * delta_re + delta_im * delta_im)) {
index = 0;
delta_re = z_re;
delta_im = z_im;
}
for (int step = 0; step < 2; ++step) {
double Ur = ref_ptr[index].re;
double Ui = ref_ptr[index].im;
double next_delta_im = 2.0 * Ur * delta_im + 2.0 * Ui * delta_re + 2.0 * delta_re * delta_im + delta_imc;
delta_re = 2.0 * Ur * delta_re - 2.0 * Ui * delta_im + delta_re * delta_re - delta_im * delta_im + delta_rec;
delta_im = next_delta_im;
index++;
}
z_re = ref_ptr[index].re + delta_re;
z_im = ref_ptr[index].im + delta_im;
i += 2;
}
int final_t = 50000 - i;
if (final_t == 0) {
iterMap[b * (size_t)rawW + a] = 255;
} else {
iterMap[b * (size_t)rawW + a] = (uint8_t)(final_t % 254);
}
}
if (++linesDone % 100 == 0) cout << "Progress: " << linesDone << "/" << rawH << "\r" << flush;
}
uint8_t pal[256][3];
for (int a = 0; a < 255; ++a) {
pal[a][0] = (uint8_t)round(127.0 + 127.0 * cos(2.0 * PI * a / 255.0)); // Blue
pal[a][1] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Green
pal[a][2] = (uint8_t)round(127.0 + 127.0 * sin(2.0 * PI * a / 255.0)); // Red
}
pal[255][0] = 255; pal[255][1] = 255; pal[255][2] = 255;
cout << "\nStep 2: Rendering frames..." << endl;
int rowSize = (targetW * 3 + 3) & ~3;
for (int frame = 0; frame < 255; ++frame) {
vector<uint8_t> frameData(rowSize * targetH);
#pragma omp parallel for schedule(static)
for (int y = 0; y < targetH; ++y) {
for (int x = 0; x < targetW; ++x) {
uint32_t rSum = 0, gSum = 0, bSum = 0;
for (int j = 0; j < scale; ++j) {
size_t mapRowIdx = (size_t)(y * scale + j) * rawW;
for (int i = 0; i < scale; ++i) {
uint8_t t = iterMap[mapRowIdx + (x * scale + i)];
int colorIdx;
if (t == 255) {
colorIdx = 255;
} else {
colorIdx = (t - frame + 255) % 255;
}
bSum += pal[colorIdx][0];
gSum += pal[colorIdx][1];
rSum += pal[colorIdx][2];
}
}
int outIdx = y * rowSize + x * 3;
frameData[outIdx + 0] = (uint8_t)(bSum >> 6);
frameData[outIdx + 1] = (uint8_t)(gSum >> 6);
frameData[outIdx + 2] = (uint8_t)(rSum >> 6);
}
}
string filename = "Mandelbrot" + to_string(1000 + frame).substr(1) + ".bmp";
save_bmp(filename, frameData, targetW, targetH);
cout << "Frame " << frame << "/254 saved. \r" << flush;
}
return 0;
}
</syntaxhighlight>
== Rendered Examples ==
<gallery mode="packed" heights="200">
File:Mandelbrot Set Image 107.png|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.
File:Mandelbrot Set Image 108.png|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.
File:Mandelbrot Set Image 109.png|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.
File:Mandelbrot Set Image 110.png|Mandelbrot set fragment using perturbation theory. Final resolution 10,000 x 10,000 pixels.
</gallery>
== External Links ==
* [https://github.com/Divetoxx/Mandelbrot Official Mandelbrot CLI Repository on GitHub] — source code, documentation, and pre-compiled releases.
[[Category:Book:Fractals]]
ilkbzx00y9ziah0b4i5kvm5qy8vnzys
Taiwan history/Contents/About Taiwan History
0
484106
4641661
2026-06-29T11:16:47Z
一隻北極熊
3609960
Created page with "Taiwan(Traditional Chinese:台灣),is a country with a complex history. It is a rich mosaic shaped by its Indigenous roots, successive waves of colonization, and a modern transformation into a thriving democracy and global technological powerhouse. Learning the Taiwan history can help you understand more about the Taiwanese culture. This book will introduce all of the Taiwanese history, from Prehistorical Era to the Modern day Taiwan. Have fun! '''Note:''' Not to be conf..."
4641661
wikitext
text/x-wiki
Taiwan(Traditional Chinese:台灣),is a country with a complex history. It is a rich mosaic shaped by its Indigenous roots, successive waves of colonization, and a modern transformation into a thriving democracy and global technological powerhouse. Learning the Taiwan history can help you understand more about the Taiwanese culture. This book will introduce all of the Taiwanese history, from Prehistorical Era to the Modern day Taiwan. Have fun!
'''Note:''' Not to be confused with ''History of Republic of China'', which is the government in Taiwan, started in 1912 in mainland China, and retreated to Taiwan in 1949.
aprkuimq498m9skld8lwa929eso3u62
4641663
4641661
2026-06-29T11:17:03Z
一隻北極熊
3609960
4641663
wikitext
text/x-wiki
Taiwan(Traditional Chinese:台灣),is a country with a complex history. It is a rich mosaic shaped by its Indigenous roots, successive waves of colonization, and a modern transformation into a thriving democracy and global technological powerhouse. Learning the Taiwan history can help you understand more about the Taiwanese culture. This book will introduce all of the Taiwanese history, from Prehistorical Era to the Modern day Taiwan. Have fun!
'''Note:''' Not to be confused with ''History of Republic of China'', which is the government in Taiwan, started in 1912 in mainland China, and retreated to Taiwan in 1949.
s1qmnu1o6rq0q6zodbqwgdqximec701
4641667
4641663
2026-06-29T11:19:52Z
一隻北極熊
3609960
4641667
wikitext
text/x-wiki
'''Taiwan'''(Traditional Chinese:台灣),is a country with a complex history. It is a rich mosaic shaped by its Indigenous roots, successive waves of colonization, and a modern transformation into a thriving democracy and global technological powerhouse. Learning the Taiwan history can help you understand more about the Taiwanese culture. This book will introduce all of the Taiwanese history, from Prehistorical Era to the Modern day Taiwan. Have fun!
'''Note:''' Not to be confused with ''History of Republic of China'', which is the government in Taiwan, started in 1912 in mainland China, and retreated to Taiwan in 1949.
63ej1s1a0ekcxo3dopmj9fxi46ns3vh
Chinese (Mandarin)/Lesson 13/Exercises
0
484107
4641669
2026-06-29T11:46:12Z
一隻北極熊
3609960
Created page with "==要……,……才会…… (Need to..., then... will...)== ===Try to finish the sentence=== *身体要多运动,...才会...? *跟朋友相处要互相体谅,...才会...? *平时养成存钱的习惯,...才会...? ===Traditional Character=== *身體要多運動,...才會...? *跟朋友相處要互相體諒,...才會...? *平常養成存錢的習慣,...才會...?"
4641669
wikitext
text/x-wiki
==要……,……才会…… (Need to..., then... will...)==
===Try to finish the sentence===
*身体要多运动,...才会...?
*跟朋友相处要互相体谅,...才会...?
*平时养成存钱的习惯,...才会...?
===Traditional Character===
*身體要多運動,...才會...?
*跟朋友相處要互相體諒,...才會...?
*平常養成存錢的習慣,...才會...?
abzmlgonp7t1d5x5etlar8re4y8m0lh