https://en.wikipedia.org/w/api.php?action=feedcontributions&feedformat=atom&user=CodingKoopaWikipedia - User contributions [en]2025-06-29T02:02:43ZUser contributionsMediaWiki 1.45.0-wmf.7https://en.wikipedia.org/w/index.php?title=Octree&diff=1282954444Octree2025-03-29T16:04:58Z<p>CodingKoopa: /* For spatial representation */ add a couple of exact analogues to quadtree</p>
<hr />
<div>{{Short description|Tree data structure in which each internal node has exactly eight children, to partition a 3D space}}<br />
{{Infobox data structure<br />
| name = Octree<br />
| image = <br />
| alt = <br />
| caption = <br />
| type = Tree<br />
| invented_by = Donald Meagher<br />
| invented_year = 1980<br />
| space_avg = O(N)<br />
| space_worst = O(N)<br />
| search_avg = O(logN+K)<br />
| search_worst = O(logN+K)<br />
| insert_avg = O(logN)<br />
| insert_worst = O(logN)<br />
| delete_avg = O(logN)<br />
| delete_worst = O(logN)<br />
| peek_avg = O(logN)<br />
| peek_worst = O(logN)<br />
| find_min_avg = <br />
| find_min_worst = <br />
| delete_min_avg = <br />
| delete_min_worst = <br />
| decrease_key_avg = <br />
| decrease_key_worst = <br />
| merge_avg = <br />
| merge_worst = <br />
}}<br />
[[File:Octree2.svg|thumb|Left: Recursive subdivision of a cube into [[octant (solid geometry)|octant]]s. Right: The corresponding octree.]]<br />
<br />
An '''octree''' is a [[tree data structure]] in which each [[internal node]] has exactly eight [[child node|children]]. Octrees are most often used to partition a [[three-dimensional space]] by [[recursive subdivision|recursively subdividing]] it into eight [[Octant (geometry)|octants]]. Octrees are the three-dimensional analog of [[quadtree]]s. The word is derived from ''oct'' (Greek root meaning "eight") + ''tree''. Octrees are often used in [[3D graphics]] and 3D [[game engine]]s.<br />
<br />
==For spatial representation==<br />
Each node in an octree subdivides the space it represents into eight [[octant (solid geometry)|octant]]s. In a point region (PR) octree (analogous to a point quadtree), the node stores an explicit [[Point (geometry)|three-dimensional point]], which is the "center" of the subdivision for that node; the point defines one of the corners for each of the eight children. In a matrix-based (MX) octree (analogous to a region quadtree), the subdivision point is implicitly the center of the space the node represents. The root node of a PR octree can represent infinite space; the root node of an MX octree must represent a finite bounded space so that the implicit centers are well-defined. Note that octrees are not the same as [[k-d tree|''k''-d trees]]: ''k''-d trees split along a dimension and octrees split around a point. Also ''k''-d trees are always binary, which is not the case for octrees.<br />
By using a [[depth-first search]] the nodes are to be traversed and only required surfaces are to be viewed.<br />
<br />
==History==<br />
The use of octrees for [[3D computer graphics]] was pioneered by Donald Meagher at [[Rensselaer Polytechnic Institute]], described in a 1980 report "Octree Encoding: A New Technique for the Representation, Manipulation and Display of Arbitrary 3-D Objects by Computer",<ref>{{cite journal|last=Meagher|first=Donald|title=Octree Encoding: A New Technique for the Representation, Manipulation and Display of Arbitrary 3-D Objects by Computer|journal=Rensselaer Polytechnic Institute|date=October 1980|issue=Technical Report IPL-TR-80-111}}</ref> for which he holds a 1995 patent (with a 1984 [[priority right|priority date]]) "High-speed image generation of complex solid objects using octree encoding" <ref>{{cite web|last=Meagher|first=Donald|title=High-speed image generation of complex solid objects using octree encoding|url=https://patents.google.com/patent/EP0152741B1/en|publisher=USPO|access-date=20 September 2012}}</ref><br />
<br />
==Common uses==<br />
* [[Level of detail (computer graphics)|Level of detail]] rendering in [[3D computer graphics]]<ref name="Luebke2003">{{cite book|author=David P. Luebke|title=Level of Detail for 3D Graphics|url=https://books.google.com/books?id=M-gl4aoxQfIC|year=2003|publisher=Morgan Kaufmann|isbn=978-1-55860-838-2}}</ref><br />
* [[Spatial index]]ing<br />
* [[Nearest neighbor search]]<ref>Elseberg, Jan, et al. "[https://www.researchgate.net/profile/Andreas_Nuchter/publication/233792571_Comparison_on_nearest-neigbour-search_strategies_and_implementations_for_efficient_shape_registration/links/0912f50b8bb8590953000000/Comparison-on-nearest-neigbour-search-strategies-and-implementations-for-efficient-shape-registration.pdf Comparison of nearest-neighbor-search strategies and implementations for efficient shape registration]." Journal of Software Engineering for Robotics 3.1 (2012): 2-12.</ref><br />
* Efficient [[collision detection]] in three dimensions<br />
* [[View frustum culling]]<br />
* [[Fast multipole method]]<br />
* [[Unstructured grid]]<br />
* [[Finite element analysis]]<br />
* [[Sparse voxel octree]]<ref>{{Cite book|last1=Akenine-Mo ̈ller|first1=Tomas|url=https://books.google.com/books?id=0g1mDwAAQBAJ&dq=%22sparse+voxel+octree%22&pg=PA579|title=Real-Time Rendering, Fourth Edition|last2=Haines|first2=Eric|last3=Hoffman|first3=Naty|date=2018-08-06|publisher=CRC Press|isbn=978-1-351-81615-1|language=en}}</ref><br />
* [[State estimation]]<ref>[http://isas.uka.de/Publikationen/Fusion10_EberhardtKlumpp.pdf Henning Eberhardt, Vesa Klumpp, Uwe D. Hanebeck, ''Density Trees for Efficient Nonlinear State Estimation'', Proceedings of the 13th International Conference on Information Fusion, Edinburgh, United Kingdom, July, 2010.]</ref><br />
* [[Set estimation]]<ref><br />
[http://www.ensta-bretagne.fr/jaulin/paper_drevelle_nolcos_2013.pdf V. Drevelle, L. Jaulin and B. Zerr, ''Guaranteed Characterization of the Explored Space of a Mobile Robot by using Subpavings'', NOLCOS 2013.]</ref><br />
<br />
==Application to color quantization==<br />
<br />
The octree [[color quantization]] algorithm, invented by Gervautz and Purgathofer in 1988, encodes image color data as an octree up to nine levels deep. Octrees are used because <math>2^3 = 8</math> and there are three color components in the [[RGB]] system. The node index to branch out from at the top level is determined by a formula that uses the most significant bits of the red, green, and blue color components, e.g. 4r + 2g + b. The next lower level uses the next bit significance, and so on. Less significant bits are sometimes ignored to reduce the tree size.<br />
<br />
The algorithm is highly memory efficient because the tree's size can be limited. The bottom level of the octree consists of leaf nodes that accrue color data not represented in the tree; these nodes initially contain single bits. If much more than the desired number of palette colors are entered into the octree, its size can be continually reduced by seeking out a bottom-level node and averaging its bit data up into a leaf node, pruning part of the tree. Once sampling is complete, exploring all routes in the tree down to the leaf nodes, taking note of the bits along the way, will yield approximately the required number of colors.<br />
<br />
==Implementation for point decomposition==<br />
The example recursive algorithm outline below ([[MATLAB]] syntax) decomposes an array of 3-dimensional points into octree style bins. The implementation begins with a single bin surrounding all given points, which then recursively subdivides into its 8 octree regions. Recursion is stopped when a given exit condition is met. Examples of such exit conditions (shown in code below) are:<br />
* When a bin contains fewer than a given number of points<br />
* When a bin reaches a minimum size or volume based on the length of its edges<br />
* When recursion has reached a maximum number of subdivisions<br />
<syntaxhighlight lang="matlab"><br />
function [binDepths, binParents, binCorners, pointBins] = OcTree(points)<br />
<br />
binDepths = [0] % Initialize an array of bin depths with this single base-level bin<br />
binParents = [0] % This base level bin is not a child of other bins<br />
binCorners = [min(points) max(points)] % It surrounds all points in XYZ space<br />
pointBins(:) = 1 % Initially, all points are assigned to this first bin<br />
divide(1) % Begin dividing this first bin<br />
<br />
function divide(binNo)<br />
<br />
% If this bin meets any exit conditions, do not divide it any further.<br />
binPointCount = nnz(pointBins == binNo)<br />
binEdgeLengths = binCorners(binNo, 1:3) - binCorners(binNo, 4:6)<br />
binDepth = binDepths(binNo)<br />
exitConditionsMet = binPointCount<value || min(binEdgeLengths) < value || binDepth > value<br />
if exitConditionsMet<br />
return; % Exit recursive function<br />
end<br />
<br />
% Otherwise, split this bin into 8 new sub-bins with a new division point<br />
newDiv = (binCorners(binNo, 1:3) + binCorners(binNo, 4:6)) / 2<br />
for i = 1:8<br />
newBinNo = length(binDepths) + 1<br />
binDepths(newBinNo) = binDepths(binNo) + 1<br />
binParents(newBinNo) = binNo<br />
binCorners(newBinNo) = [one of the 8 pairs of the newDiv with minCorner or maxCorner]<br />
oldBinMask = pointBins == binNo<br />
% Calculate which points in pointBins == binNo now belong in newBinNo<br />
pointBins(newBinMask) = newBinNo<br />
% Recursively divide this newly created bin<br />
divide(newBinNo)<br />
end<br />
</syntaxhighlight><br />
<br />
==Example color quantization==<br />
Taking the full list of colors of a 24-bit RGB image as point input to the Octree point decomposition implementation outlined above, the following example show the results of octree color quantization. The first image is the original (532818 distinct colors), while the second is the quantized image (184 distinct colors) using octree decomposition, with each pixel assigned the color at the center of the octree bin in which it falls. Alternatively, final colors could be chosen at the centroid of all colors in each octree bin, however this added computation has very little effect on the visual result.<ref>Bloomberg, Dan S. [http://leptonica.org/papers/colorquant.pdf "Color quantization using octrees."], 4 September 2008. Retrieved on 12 December 2014.</ref><br />
<syntaxhighlight lang="matlab"><br />
% Read the original RGB image<br />
Img = imread('IMG_9980.CR2');<br />
% Extract pixels as RGB point triplets<br />
pts = reshape(Img, [], 3);<br />
% Create OcTree decomposition object using a target bin capacity<br />
OT = OcTree(pts, 'BinCapacity', ceil((size(pts, 1) / 256) * 7));<br />
% Find which bins are "leaf nodes" on the octree object<br />
leafs = find(~ismember(1:OT.BinCount, OT.BinParents) & ...<br />
ismember(1:OT.BinCount, OT.PointBins));<br />
% Find the central RGB location of each leaf bin<br />
binCents = mean(reshape(OT.BinBoundaries(leafs,:), [], 3, 2), 3);<br />
<br />
% Make a new "indexed" image with a color map<br />
ImgIdx = zeros(size(Img, 1), size(Img, 2));<br />
for i = 1:length(leafs)<br />
pxNos = find(OT.PointBins==leafs(i));<br />
ImgIdx(pxNos) = i;<br />
end<br />
ImgMap = binCents / 255; % Convert 8-bit color to MATLAB rgb values<br />
<br />
% Display the original 532818-color image and resulting 184-color image <br />
figure<br />
subplot(1, 2, 1), imshow(Img)<br />
title(sprintf('Original %d color image', size(unique(pts,'rows'), 1)))<br />
subplot(1, 2, 2), imshow(ImgIdx, ImgMap)<br />
title(sprintf('Octree-quantized %d color image', size(ImgMap, 1)))<br />
</syntaxhighlight><br />
<br />
==See also==<br />
* [[Binary space partitioning]]<br />
* [[Bounding interval hierarchy]]<br />
* ''[[Cube 2: Sauerbraten]]'', a 3D game engine in which geometry is almost entirely based on octrees<br />
* [[id Tech 6]] is a 3D game engine that utilizes voxels stored in octrees<br />
* [[Irrlicht Engine]], supports octree scene nodes<br />
* [[Klee's measure problem]]<br />
* [[Linear octree]]<br />
* [[OGRE]], has an octree scene manager implementation<br />
* [[Subpaving]]<br />
* [[Voxel]]<br />
* [[Quadtree]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
{{commons category|Octrees}}<br />
*[https://web.archive.org/web/20140605161956/http://www.microsoft.com/msj/archive/S3F1.aspx Octree Quantization in Microsoft Systems Journal]<br />
*[http://www.ddj.com/184409805 Color Quantization using Octrees in Dr. Dobb's]<br />
*[http://web.cs.wpi.edu/~matt/courses/cs563/talks/color_quant/CQoctree.html Octree Color Quantization Overview]<br />
*{{cite book|chapter-url=https://ieeexplore.ieee.org/document/727419 | doi=10.1109/ICIP.1998.727419 | chapter=Parallel implementation of octtree generation algorithm | title=Proceedings 1998 International Conference on Image Processing. ICIP98 (Cat. No.98CB36269) | year=1998 | last1=Sojan Lal | first1=P. | last2=Unnikrishnan | first2=A. | last3=Poulose Jacob | first3=K. | volume=3 | pages=1005–1009 | isbn=0-8186-8821-1 | s2cid=195863788 }}<br />
*[http://dblp.uni-trier.de/db/conf/viip/viip2001.html#LalUJ01 Generation of Octrees from Raster Scan with Reduced Information Loss, P. Sojan Lal, A Unnikrishnan, K Poulose Jacob, IASTED International conference VIIP 2001] [http://www.actapress.com/catalogue2009/proc_series13.html#viip2001]{{dead link|date=February 2018 |bot=InternetArchiveBot |fix-attempted=yes }}<br />
*[http://sc07.supercomputing.org/schedule/pdf/pap117.pdf Parallel Octrees for Finite Element Applications]<br />
*[https://www.youtube.com/watch?v=Jw4VAgcWruY Video: Use of an octree in state estimation]<br />
{{CS-Trees}}<br />
<br />
[[Category:Trees (data structures)]]<br />
[[Category:Computer graphics data structures]]<br />
[[Category:Database index techniques]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=COMMAND.COM&diff=1279993483COMMAND.COM2025-03-11T20:22:06Z<p>CodingKoopa: Undid revision 1279556552 by 152.59.36.157 (talk): Vandalism</p>
<hr />
<div>{{short description|Default command line for MS-DOS and Windows 9x}}<br />
{{Redirect|COMMAND|other uses|Command (disambiguation){{!}}Command}}<br />
{{distinguish|cmd.exe}}<br />
{{Use dmy dates|date=April 2019|cs1-dates=y}}<br />
{{Use list-defined references|date=December 2021}}<br />
{{Infobox software<br />
| name = COMMAND.COM<br />
| screenshot = Command.com Win10.png<br />
| caption = COMMAND.COM in [[Windows 10]]<br />
| other_names = MS-DOS Prompt,<br />Windows Command Interpreter<br />
| developer = [[Seattle Computer Products]], [[IBM]], [[Microsoft]], [[The Software Link]], [[Datalight]], [[Novell]], [[Caldera UK|Caldera]]<br />
| released = {{Start date and age|1980}}<br />
| replaced_by = [[cmd.exe]]<br />
| programming language = [[x86]] [[assembly language]]<ref name="Microsoft_COMMAND"/><br />
| operating_system = {{ubl|[[86-DOS]]|[[MS-DOS]]|[[PC&nbsp;DOS]]|[[DR-DOS]]|[[SISNE plus]]|[[PTS-DOS]]|[[ROM-DOS]]|[[OS/2]]|[[Windows 9x]]|[[Windows NT]] ([[NTVDM]])|[[FreeDOS]]|[[MSX-DOS]]}}<br />
| platform = 16-bit [[x86]]<br />
| genre = [[Command-line interpreter]]<br />
}}<br />
[[File:Microsoft Windows 95 Version 4.00.1111 command.com MS-DOS Prompt 492x259.png|thumb|250px|command.com running in a [[Windows console]] on [[Windows 95]] (MS-DOS Prompt)]]<br />
<code>'''COMMAND.COM'''</code> is the default [[command-line interpreter]] for [[MS-DOS]], [[Windows 95]], [[Windows 98]] and [[Windows Me]]. In the case of DOS, it is the default user interface as well. It has an additional role as the usual first program run after [[Booting|boot]] ([[init process]]). As a shell, COMMAND.COM has two distinct modes of operation: [[Read-eval-print loop|interactive mode]] and [[Batch processing|batch mode]]. Internal commands are commands stored directly inside the COMMAND.COM [[Binary file|binary]]; thus, they are always available, but can only be executed directly from the command interpreter.{{Citation needed|date=March 2024}}<br />
<br />
== Description ==<br />
COMMAND.COM's successor on [[OS/2]] and [[Windows NT]] systems is [[cmd.exe]], although COMMAND.COM is available in [[virtual DOS machine]]s on [[IA-32]] versions of those operating systems as well. The {{Mono|COMMAND.COM}} filename was also used by {{ill|Disk Control Program|de|vertical-align=sup}} (DCP), an MS-DOS derivative by the former East German [[VEB Robotron]].<ref name="DCP_2016" /><br />
<br />
COMMAND.COM is a DOS program. Programs launched from COMMAND.COM are DOS programs that use the [[DOS API]] to communicate with the disk operating system. The compatible command processor under [[FreeDOS]] is sometimes also called [[FreeCom]].<br />
<br />
==Operating modes==<br />
As a shell, COMMAND.COM has two distinct modes of operation. The first is [[Read-eval-print loop|interactive mode]], in which the user types commands which are then executed immediately. The second is [[Batch processing|batch mode]], which executes a predefined sequence of commands stored as a text file with the [[Batch file|.BAT]] extension.<br />
<br />
=={{anchor|Prompt}}Internal commands==<br />
Internal commands are commands stored directly inside the COMMAND.COM binary. Thus, they are always available but can only be executed directly from the command interpreter.<br />
<br />
All commands are executed after the {{keypress|Enter}} key is pressed at the end of the line. COMMAND.COM is not case-sensitive, meaning commands can be typed in any mixture of upper and lower case.<br />
<br />
; [[BREAK (DOS command)|BREAK]]: Controls the handling of program interruption with {{keypress|Ctrl|C}} or {{keypress|Ctrl|Break}}.<br />
; [[CHCP (command)|CHCP]]: Displays or changes the current system [[code page]].<br />
; [[CHDIR|CHDIR, CD]]: Changes the current [[working directory]] or displays the current directory.<br />
; [[CLS (DOS command)|CLS]]: Clears the screen.<br />
; [[COPY (DOS command)|COPY]]: Copies one file to another (if the destination file already exists, MS-DOS asks whether to replace it). (See also [[XCOPY]], an external command that could also copy directory trees).<br />
; [[CTTY (DOS command)|CTTY]]: Defines the device to use for input and output.<br />
; [[DATE (command)|DATE]]: Display and set the date of the system.<br />
; [[DEL (command)|DEL, ERASE]]: Deletes a file. When used on a directory, deletes all files inside the directory only. In comparison, the external command [[DELTREE]] deletes all subdirectories and files inside a directory as well as the directory itself.<br />
; [[DIR (command)|DIR]]: Lists the files in the specified directory.<br />
; [[ECHO (command)|ECHO]]: Toggles whether text is displayed ({{codett|ECHO ON}}) or not ({{codett|ECHO OFF}}). Also displays text on the screen ({{codett|ECHO text}}).<br />
; [[EXIT (command)|EXIT]]: Exits from COMMAND.COM and returns to the program which launched it.<br />
; [[LFNFOR]]: Enables or disables the return of [[long filename]]s by the FOR command. ([[Windows 9x]]).{{Citation needed|date=March 2024}}<br />
; [[LOADHIGH|LOADHIGH, LH]]: Loads a program into [[Upper Memory Area|upper memory]] ({{codett|HILOAD}} in [[DR DOS]]).<br />
; [[LOCK (DOS command)|LOCK]]: Enables external programs to perform low-level disk access to a volume. ([[MS-DOS 7.1]] and [[Windows 9x]] only){{Citation needed|date=March 2024}}<br />
; [[MKDIR|MKDIR, MD]]: Creates a new directory.<br />
; [[PATH (DOS command)|PATH]]: Displays or changes the value of the PATH [[environment variable]] which controls the places where COMMAND.COM will search for executable files.<br />
; [[PROMPT (DOS command)|PROMPT]]: Displays or change the value of the PROMPT environment variable which controls the appearance of the prompt.<br />
; [[REN (command)|RENAME, REN]]: Renames a file or directory.<br />
; [[RMDIR|RMDIR, RD]]: Removes an empty directory.<br />
; [[SET (DOS command)|SET]]: Sets the value of an [[environment variable]]; without arguments, shows all defined environment variables.<br />
; [[TIME (command)|TIME]]: Display and set the time of the system.<br />
; [[TRUENAME]]: Display the fully expanded physical name of a file, resolving [[ASSIGN (DOS command)|ASSIGN]], [[JOIN (DOS command)|JOIN]] and [[SUBST]] logical filesystem mappings.<ref name="Paul_1997_NWDOSTIP"/><br />
; [[TYPE (DOS command)|TYPE]]: Display the content of a file on the console.<br />
; [[UNLOCK (DOS command)|UNLOCK]]: Disables low-level disk access. (MS-DOS 7.1 and [[Windows 9x]] only){{Citation needed|date=March 2024}}<br />
; [[VER (command)|VER]]: Displays the version of the [[operating system]].<br />
; [[VERIFY (DOS command)|VERIFY]]: Enable or disable verification of writing for files.<br />
; [[VOL (command)|VOL]]:Shows information about a volume.<br />
<br />
=== Batch file commands ===<br />
[[Control structure|Control structures]] are mostly used inside batch files, although they can also be used interactively.<ref name="Caldera_1998_USER_CH7" /><ref name="Paul_1997_NWDOSTIP" /><br />
<br />
; <nowiki>:</nowiki>''label'': Defines a target for GOTO.<br />
; [[CALL (DOS command)|CALL]]: Executes another batch file and returns to the old one and continues.<br />
; [[FOR (DOS command)|FOR]]: Iteration: repeats a command for each out of a specified set of files.<br />
; [[GOTO]]: Moves execution to a specified label. Labels are specified at the beginning of a line, with a colon ({{codett|:likethis}}).<br />
; [[IF (DOS command)|IF]]: Conditional statement, allows branching of the program execution.<br />
; [[PAUSE (DOS command)|PAUSE]]: Halts execution of the program and displays a message asking the user to press [[any key]] to continue.<br />
; [[REM (DOS command)|REM]]: [[comment (computer programming)|comment]]: any text following this command is ignored.<br />
; [[SHIFT (DOS command)|SHIFT]]: Replaces each of the [[replacement parameter]]s with the subsequent one (e.g. {{codett|%0}} with {{codett|%1}}, {{codett|%1}} with {{codett|%2}}, etc.).<br />
<br />
==== IF command ====<br />
On exit, all external commands submit a [[return code]] (a value between 0 and 255) to the calling program. Most programs have a certain convention for their return codes (for instance, 0 for a successful execution).<ref name="Paul_1997_BATTIPS"/><ref name="FD_2003_Errorlevel"/><ref name="Paul_2003_Exitcodes"/><ref name="Allen_2005"/><br />
<br />
If a program was invoked by COMMAND.COM, the internal IF command with its ERRORLEVEL conditional can be used to test on error conditions of the last invoked external program.{{Citation needed|date=March 2024}}<br />
<br />
Under COMMAND.COM, internal commands do not establish a new value.{{Citation needed|date=March 2024}}<br />
<br />
==Variables==<br />
Batch files for COMMAND.COM can have four kinds of variables:<br />
* [[Environment variable]]s: These have the {{mono|%VARIABLE%}} form and are associated with values with the SET statement. Before DOS 3 COMMAND.COM will only expand environment variables in batch mode; that is, not interactively at the command prompt.{{citation needed|date=August 2017}}<br />
* [[Replacement parameter]]s: These have the form {{mono|%0}}, {{mono|%1}}...{{mono|%9}}, and initially contain the command name and the first nine [[command-line parameter]]s passed to the script (e.g., if the invoking command was {{kbd|myscript.bat John Doe}}, then {{mono|%0}} is "myscript.bat", {{mono|%1}} is "John" and {{mono|%2}} is "Doe"). The parameters to the right of the ninth can be mapped into range by using the SHIFT statement.{{Citation needed|date=March 2024}}<br />
* Loop variables: Used in loops, they have the {{mono|%%a}} format when run in batch files. These variables are defined solely within a specific FOR statement, and iterate over a certain set of values defined in that FOR statement.{{Citation needed|date=March 2024}}<br />
* Under [[Novell DOS 7]]<!-- 1993 -->, [[OpenDOS 7.01]], [[DR-DOS 7.02]] and higher, COMMAND.COM also supports a number of [[system information variable]]s,<ref name="Caldera_1998_USER_CH7"/><ref name="Caldera_1998_USER"/><ref name="Paul_1997_NWDOSTIP"/> a feature earlier found in [[4DOS 3.00]]<!-- 1990 --> and higher<ref name="4DOS_8.00_HELP"/> as well as in [[Multiuser DOS]],<!-- 1991 --><ref name="Paul_1997_NWDOSTIP"/><!-- not in CDOS 386 1.0 (1987), not sure about CDOS 386 3.0 (1989) --> although most of the supported variable names differ.<br />
<br />
==Redirection, piping, and chaining==<br />
Because DOS is a single-tasking operating system, [[Pipeline (software)|piping]] is achieved by running commands sequentially, redirecting to and from a [[temporary file]].{{Citation needed|date=March 2024}} COMMAND.COM makes no provision for redirecting the [[Standard streams#Standard error (stderr)|standard error]] channel.{{Citation needed|date=March 2024}}<br />
<br />
; <code>''command'' < ''filename''</code> : Redirect [[Standard streams#Standard input (stdin)|standard input]] from a file or device<br />
; <code>''command'' > ''filename''</code> : Redirect [[Standard streams#Standard output (stdout)|standard output]], overwriting target file if it exists.<br />
; <code>''command'' >> ''filename''</code> : Redirect [[Standard streams#Standard output (stdout)|standard output]], appending to target file if it exists.<br />
; <code>''command1'' | ''command2''</code> : Pipe [[Standard streams#Standard output (stdout)|standard output]] from ''command1'' to [[Standard streams#Standard input (stdin)|standard input]] of ''command2''<br />
; <code>''command1'' ¶ ''command2''</code> :<br />
: Commands separated by ASCII-20 (¶, invoked by {{keypress|Ctrl|T}}) are executed in sequence (chaining of commands).<ref name="Paul_1997_NWDOSTIP"/> In other words, first ''command1'' is executed until termination, then ''command2''.<ref name="Paul_1997_NWDOSTIP"/> This is an undocumented feature in COMMAND.COM of [[MS-DOS 5.0|MS-DOS]]/[[PC DOS 5.0]]<!-- tested MS-DOS 6.2 and PC DOS 7 --> and higher.<ref name="Paul_1997_NWDOSTIP"/> It is also supported by COMMAND.COM<!-- but not by CMD --> of the Windows NT family<!-- tested Windows XP --> as well as by DR-DOS 7.07. All versions of DR-DOS COMMAND.COM<!-- since 3.xx --> already supported a similar internal function utilizing an exclamation mark (!) instead (a feature originally derived from [[Concurrent DOS]] and [[Multiuser DOS]]) - in the single-user line this feature was only available internally (in built-in startup scripts like "!DATE!TIME") and indirectly through [[DOSKEY]]'s $T parameter to avoid problems with ! as a valid filename character.<ref name="Paul_1997_NWDOSTIP"/> [[4DOS]] supports a configurable command line separator ([[4DOS.INI]] CommandSep= or SETDOS /C), which defaults to ^.<ref name="4DOS_8.00_HELP"/> COMMAND.COM in newer versions of Windows NT<!-- works for example in XP, but not in MS-DOS/PC DOS COMMAND.COM --> also supports an {{code|&}} separator for compatibility with the cmd syntax in OS/2 and the Windows NT family.<ref name="4DOS_8.00_HELP"/> (cmd does not support the ¶ separator.)<br />
<br />
==Limitations==<br />
Generally, the command line length in interactive mode is limited to 126 characters.<ref name="Paul_1997_MSDOS"/><ref name="Paul_1997_4DOSTIP"/><ref name="Schulman_1994_Undocumented-DOS"/> In [[MS-DOS 6.22]], the command line length in interactive mode is limited to 127 characters.{{Citation needed|date=March 2024}}<br />
<br />
==In popular culture==<br />
<br />
* The message "Loading COMMAND.COM" can be seen on a [[Head-Up Display|HUD]] view of the [[T-800|Terminator]] and the internal viewport of [[RoboCop]] when he reboots.{{Citation needed|date=March 2024}}<br />
* In the animated children's TV series ''[[ReBoot]]'', which takes place inside computers, the leader of a system (the equivalent of a city) is called the COMMAND.COM.{{Citation needed|date=March 2024}}<br />
<br />
==See also==<br />
<br />
* [[List of DOS commands]]<br />
* [[Comparison of command shells]]<br />
* [[cmd.exe]] — command-line interpreter in various Windows and OS/2 systems<br />
* {{hlist|class=inline|[[IBMBIO.COM]] | [[IO.SYS]]}} — starts the command processor as the first process<br />
* [[SHELL (CONFIG.SYS directive)]] — to override default command processor<br />
* [[COMSPEC (environment variable)]] — set by COMMAND.COM to reload transient portion of itself<br />
* [[CMDLINE (environment variable)]] — set by COMMAND.COM to pass long command lines to external programs<br />
* {{hlist|class=inline|[[4DOS]] | [[NDOS]]}} — third-party replacement command processors<br />
* [[DOSSHELL]] / [[ViewMAX]] — alternative DOS shells<br />
<!-- * [[TASKMAX]] / [[TASKMGR]] — instances daughter processes --><br />
* {{hlist|class=inline|[[Concurrent DOS]] | [[Multiuser DOS]] | [[REAL/32]]}} — have similar command processors not named COMMAND.COM<br />
* [[PC-MOS/386]] — has a similar command processor also named COMMAND.COM<br />
* [[Transient Program Area]] — memory available for use either by the running application or the transient portion of COMMAND.COM<br />
* [[SpartaDOS X]] — a similar implementation for Atari computers<br />
<br />
==References==<br />
{{Reflist|1|refs=<br />
<ref name="Microsoft_COMMAND">{{Cite web|url=https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/COMMAND.ASM|title=MS-DOS/COMMAND.ASM at master · microsoft/MS-DOS|website=GitHub}}</ref><br />
<ref name="Paul_1997_BATTIPS">{{cite book |title=BATTIPs — Tips & Tricks zur Programmierung von Batchjobs |at=Kapitel 7: ERRORLEVEL abfragen |publisher=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-05-01 |orig-year=1993-10-01 |language=de |url=http://www.antonis.de/dos/batchtut/battips/index.htm#7 |access-date=2017-08-23 |url-status=live |archive-url=https://web.archive.org/web/20170823191411/http://www.antonis.de/dos/batchtut/battips/index.htm |archive-date=2017-08-23}} (NB. BATTIPS.TXT is part of MPDOSTIP.ZIP. The provided link points to an HTML-converted older version of the BATTIPS.TXT file.) [https://web.archive.org/web/20190601152204/https://www.sac.sk/download/text/mpdostip.zip<!-- A yet older version 155 from 1997-05-13 of the 1997-07-15 distribution archive. -->]</ref><br />
<ref name="Paul_2003_Exitcodes">{{cite web |title=Exitcodes (errorlevels) of DOS utilities |author-first=Matthias R. |author-last=Paul |editor-first=Eric |editor-last=Auer |date=2003 |orig-year=1997 |url=https://www.auersoft.eu/soft/by-others/dos-exitcodes-en.html |access-date=2017-09-11 |url-status=dead |archive-url=https://archive.today/20170911103337/https://www.auersoft.eu/soft/by-others/dos-exitcodes-en.html |archive-date=11 September 2017 }} [https://www.auersoft.eu/soft/by-others/dos-exitcodes-de.html<!-- https://archive.today/20170911103522/https://www.auersoft.eu/soft/by-others/dos-exitcodes-de.html -->]</ref><br />
<ref name="Allen_2005">{{cite web |author-first1=William |author-last1=Allen |author-first2=Linda |author-last2=Allen |title=Windows 95/98/ME ERRORLEVELs |url=http://www.allenware.com/mcsw/errorlevels.zip |url-status=dead |archive-url=https://web.archive.org/web/20051029140802/http://www.allenware.com/mcsw/errorlevels.zip |archive-date=2005-10-29}}</ref><br />
<ref name="FD_2003_Errorlevel">{{cite web |title=MS-DOS errorlevels |author-first1=Eric |author-last1=Auer |author-first2=Matthias R. |author-last2=Paul |author-first3=Jim |author-last3=Hall |author-link3=Jim Hall (computer programmer) |date=2015-12-24 |orig-year=2003-12-31 |url=http://www.freedos.org/technotes/technote/207.html |url-status=dead |archive-url=https://web.archive.org/web/20151224202118/http://www.freedos.org/technotes/technote/207.html |archive-date=2015-12-24}}</ref><br />
<ref name="Caldera_1998_USER">{{cite book |title=Caldera DR-DOS 7.02 User Guide |publisher=[[Caldera, Inc.]] |date=1998 |orig-year=1993, 1997 |url=http://www.drdos.net/documentation/usergeng/uglontoc.htm |access-date=2013-08-10 |url-status=dead |archive-url=https://web.archive.org/web/20161104235434/http://www.drdos.net/documentation/usergeng/uglontoc.htm |archive-date=2016-11-04}}</ref><br />
<ref name="Caldera_1998_USER_CH7">{{cite book |title=Caldera DR-DOS 7.02 User Guide |publisher=[[Caldera, Inc.]] |date=1998 |orig-year=1993, 1997 |chapter=Chapter 7: Batch Processing |chapter-url=http://www.drdos.net/documentation/usergeng/07ugch7.htm |access-date=2017-09-11 |url-status=dead |archive-url=https://web.archive.org/web/20170911163945/http://www.drdos.net/documentation/usergeng/07ugch7.htm |archive-date=2017-09-11}}</ref><br />
<ref name="Paul_1997_MSDOS">{{cite book |title=MSDOSTIPs — Tips für den Umgang mit MS-DOS 5.0-7 |publisher=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-07-01 |orig-year=1994-01-01 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/msdostip.htm |access-date=2013-10-25 |url-status=live |archive-url=https://web.archive.org/web/20170822214030/http://www.antonis.de/dos/dos-tuts/mpdostip/html/msdostip.htm |archive-date=2017-08-22}} (NB. MSDOSTIP.TXT is part of MPDOSTIP.ZIP, maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the MSDOSTIP.TXT file.) [https://web.archive.org/web/20190601152204/https://www.sac.sk/download/text/mpdostip.zip<!-- A yet older version 155 from 1997-05-13 of the 1997-07-15 distribution archive. -->]</ref><br />
<ref name="4DOS_8.00_HELP">{{quote|source={{cite book |title=4DOS 8.00 online help |title-link=4DOS 8.00 |author-first1=Hardin |author-last1=Brothers |author-first2=Tom |author-last2=Rawson |author-link2=Tom Rawson |author-first3=Rex C. |author-last3=Conn |author-link3=Rex C. Conn |author-first4=Matthias R. |author-last4=Paul |author-first5=Charles E. |author-last5=Dye |author-first6=Luchezar I. |author-last6=Georgiev |date=2002-02-27}} |text=[...] Multiple Commands: You can type several commands on the same command line, separated by a caret [^]. For example, if you know you want to copy all of your .TXT files to drive A: and then run CHKDSK to be sure that drive A's file structure is in good shape, you could enter the following command: {{code|C:\>COPY *.TXT A: ^ CHKDSK A:|doscon}} You may put as many commands on the command line as you wish, as long as the total length of the command line does not exceed 511 characters. You can use multiple commands in aliases and batch files as well as at the command line. If you don't like using the default command separator, you can pick another character using the {{code|SETDOS /C}} command or the CommandSep directive in [[4DOS.INI]]. [...] {{code|SETDOS /C:}} (Compound character) This option sets the character used for separating multiple commands on the same line. The default is the caret [^]. You cannot use any of the redirection characters [<>{{!}}], or the blank, tab, comma, or equal sign as the command separator. The command separator is saved by SETLOCAL and restored by ENDLOCAL. This example changes the separator to a tilde [~]: {{code|C:\>SETDOS /C~|doscon}} (You can specify either the character itself, or its ASCII code as a decimal number, or a hexadecimal number preceded by 0x.) [...] CommandSep = c (^): This is the character used to separate multiple commands on the same line. [...] Special Character Compatibility: If you use two or more of our products, or if you want to share aliases and batch files with users of different products, you need to be aware of the differences in three important characters: the Command Separator [...], the Escape Character [...], and the Parameter Character [...]. The default values of each of these characters in each product is shown in the following chart: [...] Product, Separator, Escape Parameter [...] 4DOS: ^, ↑, & [...] 4OS2, 4NT, Take Command: &, ^, $ [...] (The up-arrow [↑] represents the ASCII Ctrl-X character, numeric value 24.) [...]}}</ref><br />
<ref name="Paul_1997_NWDOSTIP">{{cite book |title=NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds |publisher=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-07-30 |orig-year=1994-05-01 |edition=3 |version=Release 157 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |access-date=2014-08-06 |url-status=dead |archive-url=https://web.archive.org/web/20161104235829/http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |archive-date=4 November 2016 }} (NB. The provided link points to a HTML-converted version of the {{code|NWDOSTIP.TXT}}, which is part of the {{code|MPDOSTIP.ZIP}}<!-- still named TIPS_MP.ZIP between 1991 and 1996-11 --> collection.) [https://web.archive.org/web/20190601152204/https://www.sac.sk/download/text/mpdostip.zip<!-- A yet older version 155 from 1997-05-13 of the 1997-07-15 distribution archive. -->]</ref><br />
<ref name="DCP_2016">{{cite web |title=Betriebssystem DCP |author-first1=Rüdiger |author-last1=Kurth |author-first2=Martin |author-last2=Groß |author-first3=Henry |author-last3=Hunger |date=2016-11-29 |orig-year=2007 |language=de |website=www.robotrontechnik.de |url=http://www.robotrontechnik.de/html/software/dcp.htm |access-date=2019-04-28 |url-status=live |archive-url=https://web.archive.org/web/20190403061152/http://www.robotrontechnik.de/html/software/dcp.htm |archive-date=2019-04-03}}</ref><br />
<ref name="Paul_1997_4DOSTIP">{{cite web |title=Hinweise zu JPSofts 4DOS 5.5b/c, 5.51, 5.52a und NDOS |work=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-05-01 |orig-year=1995-03-01 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/4dostip.htm |access-date=2015-05-08 |url-status=live |archive-url=https://web.archive.org/web/20161104211143/http://www.antonis.de/dos/dos-tuts/mpdostip/html/4dostip.htm |archive-date=2016-11-04}} (NB. The provided link points to a HTML-converted version of the {{code|4DOS5TIP.TXT}} file, which is part of the {{code|MPDOSTIP.ZIP}}<!-- still named TIPS_MP.ZIP between 1991 and 1996-11 --> collection.) [https://web.archive.org/web/20190601152204/https://www.sac.sk/download/text/mpdostip.zip<!-- A yet older version 155 from 1997-05-13 of the 1997-07-15 distribution archive. -->]</ref><br />
<ref name="Schulman_1994_Undocumented-DOS">{{cite book |author-first1=Andrew |author-last1=Schulman |author-first2=Ralf D. |author-last2=Brown |author-link2=Ralf D. Brown |author-first3=David |author-last3=Maxey |author-first4=Raymond J. |author-last4=Michels |author-first5=Jim |author-last5=Kyle |title=Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures - expanded to include MS-DOS 6, Novell DOS and Windows 3.1 |publisher=[[Addison Wesley]] |edition=2 |date=1994 |orig-year=November 1993<!-- first printing --> |isbn=0-201-63287-X |location=Reading, Massachusetts, US |pages=623, 626 |url-access=registration |url=https://archive.org/details/undocumenteddosp00andr_0}} (xviii+856+vi pages, 3.5"-floppy) Errata: [https://web.archive.org/web/20190417215556/http://www.cs.cmu.edu/afs/cs/user/ralf/pub/books/UndocumentedDOS/errata.ud2] [https://web.archive.org/web/20190417212906/https://www.pcjs.org/pubs/pc/programming/Undocumented_DOS/#errata-2nd-edition]</ref><br />
}}<br />
<br />
==Further reading==<br />
{{quote box|width=60%|source={{cite web |title=Re: Random Lockups with DR-DOS 7.03 |date=2004-06-17 |number=3 |author-first=Matthias R. |author-last=Paul |work=[[FidoNet]] conference: ALT_DOS |url=https://fidonet.ozzmosis.com/echomail.php/alt_dos/e812a919c10339d0.html |access-date=2019-04-28 |url-status=dead |archive-url=https://archive.today/20190428181749/https://fidonet.ozzmosis.com/echomail.php/alt_dos/e812a919c10339d0.html |archive-date=2019-04-28}} |quote=[...] all MS-DOS versions prior to Windows 95 [...] used a COM style COMMAND.COM file which has a special signature at the start of the file [...] queried by the MS-DOS BIOS before it loads the shell, but not by the DR-DOS BIOS [...] COMMAND.COM would [...] check that it is running on the "correct" DOS version, so if you would load their COMMAND.COM under DR-DOS, you would receive a "Bad version" error message and their COMMAND.COM would exit, so DR-DOS would [...] display an error message "Bad or missing command interpreter" (if DR-DOS was trying to load the SHELL= command processor after having finished CONFIG.SYS processing). In this case, you could enter the path to a valid DR-DOS COMMAND.COM (C:\DRDOS\COMMAND.COM) and everything was fine. Now, things have changed since MS-DOS 7.0 [...] COMMAND.COM has internally become an EXE style file, so there is no magic [...] signature [...] to check [...] thus no way for DR-DOS to rule out an incompatible COMMAND.COM. Further, their COMMAND.COM no longer does any version checks, but [...] does not work under DR-DOS [...] just crashes [...] the PC DOS COMMAND.COM works fine under DR-DOS [...] }}<br />
* {{Cite book |author-last=Cooper |author-first=Jim |title=Special Edition Using MS-DOS 6.22 |edition=3 |date=2001 |publisher=[[Que Publishing]] |isbn=978-0-78972573-8}}<br />
* {{Cite book |author-last=Wolverton |author-first=Van |title=MS-DOS Commands: Microsoft Quick Reference |edition=4th revised |date=1990 |publisher=[[Microsoft Press]] |isbn=978-1-55615289-4}}<br />
* {{webarchive |url=https://archive.today/20190501023329/http://www.delorie.com/opendos/archives/browse.cgi?p=opendos/2004/06/17/06:23:16}}<br />
* {{webarchive |url=https://archive.today/20190428182007/http://www.fybertech.com/misc/qwkview/qwkview.pl?conf=3010}}<br />
<br />
==External links==<br />
* {{Github|https://github.com/microsoft/MS-DOS/blob/main/v4.0/src/CMD/COMMAND/COMMAND1.ASM}} - Source code to COMMAND.COM version A067 released by Microsoft as part of MS-DOS 4.0<br />
* {{GitHub|https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/COMMAND.ASM}} – Source code to COMMAND.COM version 2.11 released by Microsoft as part of MS-DOS 2.0<br />
* {{GitHub|https://github.com/microsoft/MS-DOS/blob/master/v1.25/source/COMMAND.ASM}} – Source code to COMMAND.COM version 1.17 released by Microsoft as part of MS-DOS 1.25<br />
* [http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/command.html FreeCom] – COMMAND.COM implementation of FreeDOS<br />
<br />
{{Microsoft Windows components}}<br />
{{Windows commands}}<br />
{{DOS system files}}<br />
<br />
[[Category:Command shells]]<br />
[[Category:DOS command shells]]<br />
[[Category:Windows command shells]]<br />
[[Category:Scripting languages]]<br />
[[Category:DOS files]]<br />
[[Category:Windows files]]<br />
[[Category:External DOS commands]]<!-- COMMAND.COM is external, COMMAND is internal --><br />
[[Category:MSX-DOS]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Journey_planner&diff=1244873084Journey planner2024-09-09T18:11:51Z<p>CodingKoopa: /* Stop data */fix capitalization</p>
<hr />
<div>{{Short description|Specialized search engine for travelling}}<br />
{{More citations needed<br />
| date = May 2017<br />
}}<br />
<br />
[[File:OpenTripPlanner screenshot.png|thumb|upright=1.4|Screenshot of [[Southwest Ohio Regional Transit Authority|SORTA]]'s OpenTripPlanner journey planning application with highlighted route by transit]]<br />
A '''journey planner''', '''trip planner''', or '''route planner''' is a specialized [[search engine]] used to find an optimal means of travelling between two or more given locations, sometimes using more than one [[Mode of transport|transport mode]].<ref name=":1" /><ref name=":2">{{Cite journal|last1=Zografos|first1=Konstantinos|last2=Spitadakis|first2=Vassilis|last3=Androutsopoulos|first3=Konstantinos|date=2008-12-01|title=Integrated Passenger Information System for Multimodal Trip Planning|journal=Transportation Research Record: Journal of the Transportation Research Board|volume=2072|pages=20–29|doi=10.3141/2072-03|s2cid=109396014|issn=0361-1981}}</ref> Searches may be optimized on different criteria, for example ''fastest'', ''shortest'', ''fewest changes'', ''cheapest''.<ref>{{cite web|url=https://github.com/opentripplanner/OpenTripPlanner/wiki/Bike-Triangle|title=Bike Triangle {{!}} OpenTripPlanner|website=GitHub|language=en|access-date=2017-05-11}}</ref> They may be constrained, for example, to leave or arrive at a certain time, to avoid certain waypoints, etc. A single journey may use a sequence of several [[modes of transport]], meaning the system may know about [[public transport]] services as well as [[transport network]]s for private transportation. Trip planning or journey planning is sometimes distinguished from ''route planning'',<ref name=":0">{{Cite book|title=Algorithm Engineering|last1=Bast|first1=Hannah|author1-link=Hannah Bast|last2=Delling|first2=Daniel|last3=Goldberg|first3=Andrew|last4=Müller-Hannemann|first4=Matthias|last5=Pajor|first5=Thomas|last6=Sanders|first6=Peter|last7=Wagner|first7=Dorothea|last8=Werneck|first8=Renato F.|date=2016-01-01|publisher=Springer International Publishing|isbn=9783319494869|editor-last=Kliemann|editor-first=Lasse|series=Lecture Notes in Computer Science|pages=19–80|language=en|doi=10.1007/978-3-319-49487-6_2|editor-last2=Sanders|editor-first2=Peter|arxiv = 1504.05140|s2cid=14384915}}</ref> which is typically thought of as using private modes of transportation such as [[bicycle|cycling]], [[Car|driving]], or [[walking]], normally using a single mode at a time. Trip or journey planning, in contrast, would make use of at least one [[public transport]] mode which operates according to [[Public transport timetable|published schedules]]; given that public transport services only depart at specific times (unlike private transport which may leave at any time), an algorithm must therefore not only find a path to a destination, but seek to optimize it so as to minimize the waiting time incurred for each leg. In European Standards such as [[Transmodel]], trip planning is used specifically to describe the planning of a route for a passenger, to avoid confusion with the completely separate process of planning the operational journeys to be made by public transport vehicles on which such trips are made.<br />
<br />
Trip planners have been widely used in the [[travel industry]] since the 1970s, by booking agents.<ref>{{cite web|url=http://www.traveltecnik.com/2007/12/history-of-global-distribution-systems.html |title=TravelTecnik Consultants - Travel & Hospitality Technology: History of Global Distribution Systems (GDS) |website=Traveltecnik.com |access-date=2018-09-25}}</ref> The growth of the [[internet]], the proliferation of [[Geographic data and information|geospatial data]], and the development of [[Information technology|information technologies]] generally has led to the rapid development of many self-service app or [[Web browser|browser-based]], on-line [[Intermodal journey planner|intermodal]] trip planners.<br />
<br />
A trip planner may be used in conjunction with ticketing and reservation systems.<br />
<br />
== History ==<br />
<br />
=== First-generation systems ===<br />
In the late 1980s and early 1990s, some national railway operators and major metropolitan transit authorities developed their own specialized trip planners to support their customer enquiry services. These typically ran on [[mainframes]] and were accessed internally with terminals by their own staff in customer information centers, call centers, and at ticket counters in order to answer customer queries. The data came from the timetable databases used to publish printed timetables and to manage operations and some included simple route planning capabilities. The HAFAs timetable information system developed in 1989 by the German company<ref name="hacon.de">{{cite web |url=http://www.hacon.de/company/geschichte |title=History — HaCon, Fahrplanauskunft HAFAS, Fahrplankonstruktion TPS |publisher=Hacon.de |access-date=2018-09-25 |archive-date=2018-09-25 |archive-url=https://web.archive.org/web/20180925220125/http://www.hacon.de/company/geschichte |url-status=dead }}</ref> Hacon, (now part of Siemens AG) is an example of such a system and was adopted by [[Swiss Federal Railways]] (SBB) and [[Deutsche Bahn]] in 1989. The ""Routes"" system of [[London Regional Transport|London Transport, now TfL]], in use before the development of the on-line planner and covering all public transport services in London, was another example of a mainframe OLTP journey planner and included a large database of tourist attractions and popular destinations in London.<br />
<br />
=== Second-generation systems ===<br />
In the 1990s with the advent of personal computers with sufficient memory and processor power to undertake trip planning (which is relatively expensive computationally in terms of memory and processor requirements), systems were developed that could be installed and run on minicomputers and personal computers. The first digital public transport trip planner systems for a microcomputer was developed by Eduard Tulp, an informatica student at the Amsterdam University on an [[Atari]] PC.<ref>[http://www.trouw.nl/tr/nl/5009/Archief/article/detail/2645851/1998/06/05/Succes-voor-het-eerste-06-nummer-zonder-hijgende-dames.dhtml Trouw, 05/06/1998]</ref> He was hired by the [[Nederlandse Spoorwegen|Dutch Railways]] to built a digital trip planner for the train services. In 1990 the first digital trip planner for the Dutch Railways (on diskette) was sold to be installed on PC's and computers for off-line consultation.<ref>{{cite web|url=http://9292.nl/extra/175-jaar-reisinformatie# |title=175 years of travel information, chapter:Wel of geen vervoer? |language=nl |publisher=9292.nl |date=1992-09-02 |access-date=2018-09-25}}</ref> The principles of his software program was published in a Dutch university paper in 1991<ref>http://kinkrsoftware.nl/contrib/Artikel16b.2a/tulp.pdf, Tulp, Eduard, ''Searching time-table networks'', proefschrift [[Vrije Universiteit Amsterdam]], 1991</ref> This was soon expanded to include all public transport in the Netherlands.<br />
<br />
Another pioneer was Hans-Jakob Tobler in Switzerland. His product ''Finajour'', which ran for [[PC DOS]] and [[MS-DOS]] was the first electronic timetable for Switzerland. The first published version was sold for the timetable period 1989/1990.<ref name="TA">Tages-Anzeiger, 14 February 2009, p. 14, ''Hans-Jakob Tobler gestorben''. Source: [https://web.archive.org/web/20141231071856/http://www.impulsmittelschule.ch/deu/pressearchiv/37387068.pdf Argus Medienbeobachtung (through archive.org)] (PDF file; 70&nbsp;kB).</ref><ref name="Alexandria">Alexandria. [http://ead.nb.admin.ch/swissbase/f030/n150000/vbs141003.html Entry ''Finajour 1.02'' Sommer 1989] {{Webarchive|url=https://web.archive.org/web/20141231070401/http://ead.nb.admin.ch/swissbase/f030/n150000/vbs141003.html |date=2014-12-31 }}.</ref><ref>Computerwoche: [https://www.computerwoche.de/a/geschaeft-mit-fahrplandaten,1152144 Schweiz: Fahrpläne im Videotex], 22 September 1989 («''Schon auf den Fahrplanwechsel in diesem Frühjahr war die PC-Version des schweizerischen Zugfahrplans von der Firma Finajour veröffentlicht worden. Inzwischen wurden gut tausend Exemplare zu einem Stückpreis von hundert Franken verkauft.''»)</ref> Other European countries soon followed with their own journey planners.<br />
<br />
A further development of this trend was to deploy trip planners onto even smaller platforms such as mobile devices, a [[Windows CE]] version of Hafas was launched in 1998 compressing the application and the entire railway timetable of Deutsche Bahn into six megabytes and running as a stand-alone application.<br />
<br />
=== Early internet-based systems ===<br />
The development of the internet allowed HTML based user interfaces to be added to allow direct querying of trip planning systems by the general public. A test web interface for HaFAs, was launched as [[Deutsche Bahn]]'s official rail trip planner in 1995 and evolved over time into the main Deutsche Bahn website. In 2001 [[Transport for London]] launched the world's first large-scale multimodal trip planner for a world city covering all of London's transport modes as well as rail routes to London; this used a trip planning engine supplied by [https://www.mentz.net] Mentz Gmbh] of Munich after earlier attempts in the late 1990s to add a web interface to TfL's own mainframe internal trip planner failed to scale. Internet trip planners for major transport networks such as national railways and major cities must sustain very high query rates and so require software architectures optimized to sustain such traffic. The world's first mobile trip planner for a large metropolitan area, a WAP based interface to the London using the Mentz engine, was launched in 2001 by London startup company [[Kizoom Ltd]], who also launched the UK's first rail trip planner for the mobile internet in 2000, also as a WAP service, followed by an SMS service. Starting in 2000 the Traveline<ref>{{cite web|url=http://www.traveline.info |title=Traveline |publisher=Traveline.info |access-date=2018-09-25}}</ref> service provided all parts of the UK with regional multi-modal trip planning on bus, coach, and rail. A web-based trip planner for UK rail was launched by UK [[National Rail Enquiries]] in 2003.<br />
<br />
Early public transport trip planners typically required a stop or station to be specified for the endpoints. Some also supported inputting the name of a tourist attraction or other popular destination places by keeping a table of the nearest stop to the destination. This was later extended with ability to add addresses or coordinates to offer true point to point planning.<br />
<br />
Critical to the development of large-scale multi-modal trip planning in the late 1990s and early 2000s was the development in parallel of standards for encoding stop and schedule data from many different operators and the setting up of workflows to aggregate and distribute data on a regular basis. This is more challenging for modes such as bus and coach, where there tend to a large number of small operators, than for rail, which typically involves only a few large operators who have exchange formats and processes already in place in order to operate their networks. In Europe, which has a dense and sophisticated public transport network, the CEN [[Transmodel]] Reference Model for Public Transport was developed to support the process of creating and harmonizing standard formats both nationally and internationally.<br />
<br />
=== Distributed journey planners ===<br />
In the 2000s, Several major projects developed distributed trip planning architectures to allow the federation of separate trip planners each covering a specific area to create a composite engine covering a very large area.<br />
* The UK [[Transport Direct Portal]] launched in 2004 by the UK Department of Transport, used the [[JourneyWeb]] protocol to link eight separate regional engines covering data from 140 local transport authorities in England, Scotland and Wales as a unified engine. The portal integrated both road and public transport planners allowing a comparison between modes of travel times, {{CO2}} footprint etc..<br />
* The German Delfi<ref>{{cite web|url=http://www.delfi.de/ |title=Was ist DELFI? &#124; DELFI |language=de |publisher=Delfi.de |access-date=2018-09-25}}</ref> project developed a distributed trip planning architecture used to federate the German regional planners, launched as a prototype in 2004. The Interface was further developed by the German TRIAS project and led to the development of a CEN Standard [[<ref>[http://www.normes-donnees-tc.org/wp-content/uploads/2017/01/TC 278 WI 00278420 E-RS-170118-final3.pdf]{{dead link|date=September 2018}}</ref>|Open API for distributed journey planning']] (CEN/TS 17118:2017) published in 2017 to provide a standard interface to trip planners, incorporating features from JourneyWeb and EU-Spirit and making use of the [[Service Interface for Real Time Information|SIRI Protocol Framework]] and the [[Transmodel|Transmodel reference model]].<br />
* The European<ref>{{cite web|url=https://eu-spirit.eu/ |title=EU-Spirit &#124; European travel information network |publisher=Eu-spirit.eu |access-date=2018-09-25}}</ref> EU Spirit project developed a long-distance trip planner between a number of different European regions<br />
<br />
=== Second-generation internet systems ===<br />
Public transport trip planners proved to be immensely popular (for example by 2005 [[Deutsche Bahn]] was already sustaining<ref name="hacon.de"/> 2.8 million requests per day and journey planning sites constitute some of the highest trafficked information sites in every country that has them. The ability to purchase tickets for travel for the journeys found has further increased the utility and popularity of the sites; early implementations such as the UK's Trainline offered delivery of tickets by mail; this has been complemented in most European countries by self-service print and mobile fulfillment methods. Internet trip planners now constitute a primary sales channel for most rail and air transport operators.<br />
<br />
[[Google]] started to add trip planning capabilities to its product set with a version of Google Transit in 2005, covering trips in the [[Portland, Oregon|Portland]] region, as described by the [[TriMet]] agency manager<ref>{{cite web|author=Bibiana McHugh |url=http://beyondtransparency.org/chapters/part-2/pioneering-open-data-standards-the-gtfs-story/ |title=Pioneering Open Data Standards: The GTFS Story |publisher=Beyondtransparency.org |date=2005-12-07 |access-date=2018-09-25}}</ref> Bibiana McHugh. This led to the development of the [[General Transit Feed Specification]] (GTFS), a format for collecting transit data for use in trip planners that has been highly influential in developing an ecosystem of PT data feeds covering many different countries. The successful uptake of GTFS as an available output format by large operators in many countries has allowed Google to extend its trip planner coverage to many more regions around the world. The Google Transit trip planning capabilities were integrated into the Google Map product in 2012.<br />
<br />
Further evolution of trip planning engines has seen the integration of real time data so that trip plans for the immediate future take into account real time delays and disruptions. The UK [[National Rail|National Rail Enquiries]] added real time to its rail trip planner in 2007. Also significant has been the integration of other types of data into the trip planning results such as disruption notices, crowding levels, CO<sub>2</sub> costs, etc. The trip planners of some major metropolitan cities such as the [[Transport for London]] trip planner have the ability to dynamically suspend individual stations and whole lines so that modified trip plans are produced during major disruptions that omit the unavailable parts of the network. Another development has been the addition of accessibility data and the ability for algorithms to optimize plans to take into account the requirements of specific disabilities such as wheelchair access.<br />
<br />
For the London 2012 Olympics, an enhanced London trip planner was created that allowed the proposed trip results to be biased to manage available capacity across different routes, spreading traffic to less congested routes. Another innovation was the detailed modelling of all the access paths into and out of every Olympic venue, (from PT stop to individual arena entrance) with predicted and actual queueing times to allow for security checks and other delays being factored into the recommended travel times.<br />
<br />
An initiative to develop an open source trip planner, the<ref>{{cite web|url=http://docs.opentripplanner.org/en/latest/History/ |title=OpenTripPlanner |publisher=Docs.opentripplanner.org |date=2016-09-09 |access-date=2018-09-25}}</ref> [[OpenTripPlanner]] was seeded by Portland, Oregon's transit agency [[TriMet]] in 2009 and developed with the participation of agencies and operators in the US and Europe; a full version 1.0 released in September 2016, is making it possible for smaller transit agencies and operators to provide trip planning without paying proprietary license fees.<br />
<br />
==Mode-specific considerations==<br />
=== Public transport routing ===<br />
A public transport route planner is an [[intermodal journey planner|intermodal]] journey planner, typically accessed via the [[web application|web]] that provides information about available [[public transport]] services. The application prompts a user to input an origin and a destination, and then uses algorithms to find a good route between the two on public transit services. Time of travel may be constrained to either time of departure or arrival and other routing preferences may be specified as well.<br />
<br />
An intermodal journey planner supports [[Intermodal passenger transport|intermodal journeys]] i.e. using more than one [[modes of transport]], such as cycling, [[rapid transit]], [[bus]], [[ferry]], etc. Many route planners support door-to-door planning while others only work between stops on the [[transport network]], such as stations, [[airport]]s or [[bus stop]]s.<br />
<br />
For public transport routing the trip planner is constrained by times of arrival or departure. It may also support different optimization criteria – for example, ''fastest route, fewest changes, most accessible''. Optimization by price (''cheapest, most flexible fare'', etc.) is usually done by a separate algorithm or engine, though trip planners that can return fare prices for the trips they find may also offer sorting or filtering of results by price and product type. For long-distance rail and air trip planning, where price is a significant consideration in price optimizing trip planners may suggest the cheapest dates to travel for customers are flexible as to travel time.<br />
<br />
=== Car routing ===<br />
The planning of road legs is sometimes done by a separate subsystem within a journey planner, but may consider both single mode trip calculations as well as intermodal scenarios (e.g. [[Park and Ride]], [[kiss and ride]], etc.). Typical optimizations for [[car routing]] are ''shortest route'', ''fastest route'', ''cheapest route'' and with constraints for specific ''waypoints.'' The rise of e-mobility poses new challenges to route planning, e.g. sparse charging infrastructure, limited range, and long charging have to be taken into account and offer room for optimization.<ref>{{cite web|url=https://www.researchgate.net/publication/362609011|title=eDijkstra - Time-Optimal Route Planning for Electric Vehicles|website=ResearchGate|language=en|access-date=2022-10-10}}</ref> Some advanced journey planners can take into account average journey times on road sections, or even real-time predicted average journey times on road sections.<br />
<br />
=== Pedestrian routing ===<br />
A journey planner will ideally provide detailed routing for pedestrian access to stops, stations, points of interest etc. This will include options to take into account accessibility requirements for different types of users, for example; 'no steps', 'wheelchair access', 'no lifts', etc.<br />
<br />
=== Bicycle routing ===<br />
Some journey planning systems can calculate bicycle routes,<ref>{{Cite book|last1=Yoon|first1=Ji Won|last2=Pinelli|first2=Fabio|last3=Calabrese|first3=Francesco|title=2012 IEEE 13th International Conference on Mobile Data Management |chapter=Cityride: A Predictive Bike Sharing Journey Advisor |date=2012|pages=306–311|doi=10.1109/MDM.2012.16|isbn=978-1-4673-1796-2|s2cid=16827996}}</ref> integrating all paths accessible by bicycle and often including additional information like topography, traffic, on-street cycling infrastructure, etc. These systems assume, or allow the user to specify, preferences for quiet or safe roads, minimal elevation change, [[Cycling infrastructure|bicycle lanes]], etc.<br />
<br />
== Data requirements ==<br />
Trip planners depend on a number of different types of data and the quality and extent of this data limits their capability. Some trip planners integrate many different kinds of data from numerous sources. Others may work with one mode only, such as flight itineraries between airports, or using only addresses and the street network for driving directions.<br />
<br />
=== Contextual data ===<br />
==== Point of interest data ====<br />
Passengers don't travel because they want to go to a particular station or stop, but because they want to go some destination of interest, such as a sports arena, tourist attraction, shopping center, park, law court, etc., etc. Many trip planners allow users to look for such "Points of interest", either by name or by category (''museum, stadium, prison,'' etc.). Data sets of systematically named, geocoded and categorized popular destinations can be obtained commercially, for example, The UK PointX<ref>{{cite web|author=Martin Webb |url=http://www.pointx.co.uk/ |title=Welcome |publisher=PointX |access-date=2018-09-25}}</ref> data set, or derived from opensource data sets such as [[OpenStreetMap]]. Major operators such as [[Transport for London]] or [[National Rail]] have historically had well developed sets of such data for use in their Customer Call centers, along with information on the links to the nearest stops. For points of interest that cover a large area, such as parks, country houses or stadia, a precise geocoding of the entrances is important.<br />
<br />
==== Gazetteer data ====<br />
Trip planning user interfaces can be made more usable by integration of [[Gazetteer]] data. This can be associated with stops to assist with stop finding in particular, for example for disambiguation; there are 33 places named Newport in the US and 14 in the UK - a Gazetteer can be used to distinguish which is which and also in some cases to indicate the relationship of transport interchanges with towns and urban centers that passengers are trying to reach - for example only one of London's five or so Airports is actually in London. Data for this purpose typically comes from additional layers in a map data set such as that provided by [[Esri]], [[Ordnance Survey]], [[Navtech]], or specific data sets such as the UK [[National Public Transport Gazetteer]].<br />
<br />
=== Road data ===<br />
==== Road network data ====<br />
Road trip planners, sometimes referred to as route planners, use street and footpath network data to compute a route using simply the network connectivity (i.e. trips may run at any time and not constrained by a timetable). Such data can come from one or more public, commercial or crowdsourced datasets such as [[Topologically Integrated Geographic Encoding and Referencing|TIGER]], [[Esri]] or [[OpenStreetMap]]. The data is fundamental both for computing access legs to reach public transport stops, and to compute road trips in their own right. The fundamental representation is a graph of nodes and edges (i.e. points and links). The data may be further annotated to assist trip planning for different modes;<br />
* Road data may be characterized by road type (highway, major road, minor road, track, etc.), turn restrictions, speed restrictions etc., as well as average travel times at different times of day on different day types (''Weekday, Weekend, Public Holiday,'' etc.), so that accurate travel time predictions can be offered<br />
* Cycle road and path data may be annotated with characteristics such as cycle route number, traffic levels, surface, lighting, etc. that affect its usability by cyclists.<br />
* Footpath data may be annotated with accessibility characteristics such as steps, lifts, wheelchair access, ramps, etc., etc., and also safety indicators (e.g., lighting, [[CCTV]], help points, ) so that accessibility constrained trip plans can be computed.<br />
<br />
==== Real-time data for roads ====<br />
Advanced road trip planners take into account the real-time state of the network. They use two main types of feed to do this, obtained from road data services using interfaces such as [[Datex II]] or [[Urban Traffic Management and Control|UTMC]].<br />
* Situation data, which described the incidents, events and planned roadworks in a structured form that can be related to the network; this is used to decorate trip plans and road maps to show current bottlenecks and incident locations.<br />
*Link traffic flow data, which gives a quantitative measurement of the current flow on each link of the network that is monitored; this can be used to take actual current conditions into account when computing predicted journey times.<br />
<br />
=== Public transport data ===<br />
For transit route planners to work, transit schedule data must always be kept up to date. To facilitate data exchange and interoperability between different trip planners, several standard data formats have emerged.<br />
<br />
The [[General Transit Feed Specification]], developed in 2006,<ref>{{cite web|url=http://beyondtransparency.org/chapters/part-2/pioneering-open-data-standards-the-gtfs-story/|title=Pioneering Open Data Standards: The GTFS Story|website=beyondtransparency.org|access-date=2017-05-10}}</ref> is now used by hundreds of transit agencies around the world.<br />
<br />
In the European Union all public passenger travel operators have the obligation to provide the information under the EU railway timetable data exchange format.<ref>{{cite web|url=http://netex-cen.eu/ |title=NeTEx |publisher=Netex-cen.eu |date=2014-03-18 |access-date=2018-10-03}}</ref><ref>{{cite book|volume=2 |pages=630–631 |publisher=[[IEEE]] |date= October 2011|doi=10.1109/TELSKS.2011.6143191 |chapter=SOA architecture for complying with EU railway timetable data exchange format |last1=Branovic |first1=Irina |last2=Veskovic |first2=Slavko |last3=Mladenovic |first3=Snezana |last4=Milinkovic |first4=Sanjin |last5=Jankovic |first5=Sladjana |title=2011 10th International Conference on Telecommunication in Modern Satellite Cable and Broadcasting Services (TELSIKS) |isbn=978-1-4577-2019-2 |s2cid=32189828 }}</ref><ref>{{cite web |url=http://www.gip.gv.at/downloads-219.html?...Transnational%20exchang |title=Transnational exchange of timetable and GIS data as a basis for cross-border ITS services |publisher=Gip.gv.at |access-date=2018-10-03 |archive-date=2018-10-03 |archive-url=https://web.archive.org/web/20181003221047/http://www.gip.gv.at/downloads-219.html?...Transnational%20exchang |url-status=dead }}</ref> In other parts of the world there similar exchange standards.<ref>{{cite web|url=https://www.google.nl/search?q=timetable+data+exchange&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=6FRpWN3BIeiD3gPJpZJQ |title=Transit Schedule Data Exchange Architecture |publisher=Google.nl |access-date=2018-10-03}}</ref><br />
<br />
==== Stop data ====<br />
The location and identity of public transport access points such as bus, tram and coach stops, stations, airports, ferry landing and ports are fundamental to trip planning and a stop data set is an essential layer of the transport data infrastructure. In order to integrate stops with spatial searches and road routing engines they are [[Geocoding|geocoded]]. In order to integrate them with the timetables and routes they are given a unique identifier within the transport network. In order to be recognizable to passengers they are given official names and may also have a public short code (for example the three letter [[IATA]] codes for airports) to use in interfaces. Historically, different operators quite often used a different identifier for the same stop and stop numbers were not unique within a country or even a region. Systems for managing stop data, such as the [[International Union of Railways|International Union of Railways (UIC)]] station location code set or the UK's [[NaPTAN|NaPTAN (National Public Transport Access Point)]] system for stop numbers provide a means of ensuring numbers are unique and the stops are fully described, greatly facilitate the integration of data. Timetable exchange formats, such as [[GTFS]], [[TransXChange]] or [[NeTEx]] include stop data in their formats and spatial data sets such as [[OpenStreetMap]] allow stop identifiers to be geocoded.<br />
<br />
==== Public transport network topology data ====<br />
For public transport networks with a very high frequency of service, such as urban metro cities and inner city bus services, the topology of the network can also be used for route planning, with an average interval being assumed rather than specific departure times. Data on the routes of trains and buses is also useful for providing visualization of results, for example, to plot the route of a train on a map. National mapping bodies, such as the UK's [[Ordnance Survey]] typically include a transport layer in their data sets and the European INSPIRE framework includes public transport infrastructure links in its set of strategic digital data. The CEN [[NeTEx]] format allows both the physical layer (e.g. road and railway track infrastructure links) and the logical layer (e.g. links between scheduled stopping points on a given line) of the transport infrastructure to be exchanged<br />
<br />
In the UK the Online Journey Planner (OJP) is the engine used by [[National Rail]] to plan routes, calculate fares and establish ticket availability. OJP obtains its route information from SilverRail’s planning engine known as IPTIS (Integrated Passenger Transport Information System). The National Rail website provides information on how businesses can access this data directly via online data feed xml files.<ref>{{cite web|url=https://www.nationalrail.co.uk/developers/online-journey-planner-data-feeds/ |title=National Rail Online Journey Planner |publisher=nationalrail.co.uk |date=2024-07-05 |access-date=2024-07-05}}</ref> However, OJP was switched off in 2023 in favour of a new journey planner which is currently integrated into nationalrail.co.uk.<br />
<br />
=== Public transport timetables ===<br />
Data on public transport schedules is used by trip planners to determine the available journeys at specific times. Historically rail data has been widely available in national formats, and many countries also have bus and other mode data in national formats such as [[Association of German Transport Companies|VDV 452]] (Germany), [[TransXChange]] (UK) and Neptune (France). Schedule data is also increasingly becoming available in international formats such as [[General Transit Feed Specification|GTFS]] and [[NeTEx]]. To allow a route to be projected onto a map, GTFS allows the specification of a simple shape plot; whilst [[Transmodel]] based standards such as CEN [[NeTEx]], [[TransXChange]] additionally allow a more detailed representation which can recognize the constituent links and distinguish several different semantic layers.<ref name=":1" /><br />
<br />
=== Real-time prediction information for public transport ===<br />
Trip planners may be able to incorporate real-time information into their database and consider them in the selection of optimal routes for travel in the immediate future. [[Automatic Vehicle Location|Automatic vehicle location]] (AVL) systems<ref name=":2" /> monitor the position of vehicles using [[Global Positioning System|GPS systems]] and can pass on real-time and forecast information to the journey planning system.<ref name=":1">{{Cite journal|last1=Li|first1=Jing-Quan|last2=Zhou|first2=Kun|last3=Zhang|first3=Liping|last4=Zhang|first4=Wei-Bin|date=2012-04-01|title=A Multimodal Trip Planning System With Real-Time Traffic and Transit Information|journal=Journal of Intelligent Transportation Systems|volume=16|issue=2|pages=60–69|doi=10.1080/15472450.2012.671708|s2cid=33373852|issn=1547-2450}}</ref> A trip planner may use a real time interface such as the CEN [[Service Interface for Real Time Information]] to obtain this data.<br />
<br />
=== Situation information ===<br />
A situation is a software representation of an incident{{Citation needed|date=May 2017}} or event that is affecting or is likely to affect the transport network. A trip planner can integrate situation information and use it both to revise its trip planning computations and to annotate its responses so as to inform users through both text and map representations. A trip planner will typically use a standard interface such as [[Service Interface for Real Time Information|SIRI]], [[TPEG]] or [[Datex II]] to obtain situation information.<br />
<br />
Incidents are captured through an [[Incident Capturing System|incident capturing system]] (ICS) by different operators and stakeholders, for example in transport operator control rooms, by broadcasters or by the emergency services. Text and image information can be combined with the trip result. Recent incidents can be considered within the routing as well as visualized in an interactive map.<br />
<br />
== Technology ==<br />
<br />
Typically journey planners use an efficient in-memory representation of the network and timetable to allow the rapid searching of a large number of paths. Database queries may also be used where the number of nodes needed to compute a journey is small, and to access ancillary information relating to the journey. A single engine may contain the entire transport network, and its schedules, or may allow the [[Distributed computing|distributed computation]] of journeys using a distributed journey planning protocol such as [[JourneyWeb]] or [[Delfi Protocol]]. A journey planning engine may be accessed by different front ends, using a software protocol or [[Application Program Interface|application program interface]] specialized for journey queries, to provide a [[User Interface|user interface]] on different types of device.<br />
<br />
The development of journey planning engines has gone hand in hand with the development of data standards for representing the stops, routes and timetables of the network, such as [[TransXChange]], [[NaPTAN]], [[Transmodel]] or [[General Transit Feed Specification|GTFS]] that ensure that these fit together. Journey planning algorithms are a classic example of problems in the field of [[Computational complexity theory]]. Real-world implementations involve a tradeoff of computational resources between accuracy, completeness of the answer, and the time required for calculation.<ref name=":0" /><br />
<br />
The sub-problem of route planning is an easier problem to solve<ref>{{Cite book|title=Algorithmics of Large and Complex Networks|last1=Delling|first1=Daniel|last2=Sanders|first2=Peter|last3=Schultes|first3=Dominik|last4=Wagner|first4=Dorothea|date=2009-01-01|publisher=Springer Berlin Heidelberg|isbn=9783642020933|editor-last=Lerner|editor-first=Jürgen|series=Lecture Notes in Computer Science|pages=117–139|language=en|chapter=Engineering Route Planning Algorithms|doi=10.1007/978-3-642-02094-0_7|editor-last2=Wagner|editor-first2=Dorothea|editor-last3=Zweig|editor-first3=Katharina A.|citeseerx = 10.1.1.164.8916}}</ref> as it generally involves less data and fewer constraints. However, with the development of "road timetables", associating different journey times for road links at different times of day, time of travel is increasingly relevant for route planners as well.<br />
<br />
=== Algorithms ===<br />
Journey planners use a [[Routing|routing algorithm]] to search a [[Graph (data structure)|graph]] representing the transport network. In the simplest case where routing is independent of time, the graph uses (directed) [[Edge (graph theory)|edges]] to represent street/path segments and [[Vertex (graph theory)|nodes]] to represent [[Intersection (road)|intersections]]. Routing on such a graph can be accomplished effectively using any of a number of routing algorithms such as [[Dijkstra's algorithm|Dijkstra's]], [[A* search algorithm|A*]], [[Floyd–Warshall algorithm|Floyd–Warshall]], or [[Johnson's algorithm]].<ref>{{cite web|url=http://docs.pgrouting.org/2.0/en/src/index.html#routing-functions|title=Routing Functions — pgRouting Manual (2.0.0)|website=docs.pgrouting.org|access-date=2017-05-13}}</ref> Different weightings such as distance, cost or accessibility may be associated with each edge, and sometimes with nodes.<br />
<br />
When time-dependent features such as public transit are included, there are several proposed ways of representing the transport network as a graph and different algorithms may be used such as RAPTOR<ref>{{Cite journal|last1=Delling|first1=Daniel|last2=Pajor|first2=Thomas|last3=Werneck|first3=Renato F.|date=2014-10-30|title=Round-Based Public Transit Routing|journal=Transportation Science|volume=49|issue=3|pages=591–604|doi=10.1287/trsc.2014.0534|issn=0041-1655|citeseerx=10.1.1.652.775}}</ref><br />
<br />
=== Automated trip planner ===<br />
Automated trip planners generate your [[Travel itinerary|itinerary]] automatically, based on the information you provide. One way is to submit the desired destination, dates of your trip and interests and the plan will be created in a while. Another way is to provide the necessary information by forwarding confirmation [[e-mails]] from [[airlines]], hotels and car rental companies.<ref>{{cite web|url=https://www.nbcnews.com/id/wbna22129624 |title=New generation of Web sites for travel planning |publisher=[[NBC News]] |date=2007-12-06 |access-date=2019-03-10}}</ref><br />
<br />
===Custom trip planner===<br />
<br />
With a custom trip planner the user creates one's own travel itinerary individually by picking the appropriate activities from a database. Some of these websites like Triphobo.com offer pre-built databases of points of interest, while others rely on [[user generated content]].<br />
<br />
In 2017, Google released a mobile app called Google Trips.<ref>{{cite web |title=Google launches a personalized travel planner, Google Trips |date=19 September 2016 |url=https://techcrunch.com/2016/09/19/google-launches-a-personalized-travel-planner-google-trips/}}</ref> Custom trip planning startups are seeing renewed interest from investors with the advent of data science, AI and voice technologies in 2018. [[Lola.com]], an AI based travel planning startup and [[Hopper.com]] have managed to raise significant funding for developing trip planning apps.<ref>{{cite web |title=Lola Gets $15 Million to Fund App Update |url=https://skift.com/2017/01/12/lola-gets-15-million-to-fund-app-update-travel-startup-funding-this-week/|date=2017-01-12}}</ref><ref>{{cite news |title=Hopper raises $100M more for its AI-based travel app, now valued at $780M |url=https://techcrunch.com/2018/10/03/hopper-raises-100m-more-for-its-ai-based-travel-app-now-valued-at-780m/}}</ref><br />
<br />
When bookings and payments are added to a mobile trip planner app, then the result is considered [[mobility as a service]].<br />
<br />
===Commercial software===<br />
Distribution companies may incorporate route planning software into their [[fleet management]] systems to optimize route efficiency. A route planning setup for distribution companies will often include GPS tracking capability and advanced reporting features which enable dispatchers to prevent unplanned stops, reduce mileage, and plan more fuel-efficient routes.<br />
<br />
== See also ==<br />
* [[Automotive navigation system]]<br />
* [[Intelligent transportation system]]<br />
* [[Multimodal transport]]<br />
* [[Online diary planner#Online diary planners for trips and holidays|Online diary planners for trips and holidays]]<br />
* [[Pathfinding]]<br />
* [[Public transport route planner]]<br />
* [[Service Interface for Real Time Information]]<br />
* [[TPEG]]<br />
* [[Transmodel]]<br />
* [[Travel technology]]<br />
* [[Travel website]]<br />
*[[Public transport timetable]]<br />
*[[Sustainable transport]]<br />
*[[Transit district]]<br />
<br />
== References ==<br />
{{reflist}}<br />
<br />
{{tourism}}<br />
{{authority control}}<br />
<br />
[[Category:Public transport information systems]]<br />
[[Category:Sustainable transport]]<br />
[[Category:Route planning software]]<br />
[[Category:Cartography]]<br />
[[Category:Intermodal passenger transport]]<br />
[[Category:Scheduling (transportation)]]<br />
[[Category:Travel websites]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Journey_planner&diff=1244872402Journey planner2024-09-09T18:06:40Z<p>CodingKoopa: /* Public transport routing */remove stray quote</p>
<hr />
<div>{{Short description|Specialized search engine for travelling}}<br />
{{More citations needed<br />
| date = May 2017<br />
}}<br />
<br />
[[File:OpenTripPlanner screenshot.png|thumb|upright=1.4|Screenshot of [[Southwest Ohio Regional Transit Authority|SORTA]]'s OpenTripPlanner journey planning application with highlighted route by transit]]<br />
A '''journey planner''', '''trip planner''', or '''route planner''' is a specialized [[search engine]] used to find an optimal means of travelling between two or more given locations, sometimes using more than one [[Mode of transport|transport mode]].<ref name=":1" /><ref name=":2">{{Cite journal|last1=Zografos|first1=Konstantinos|last2=Spitadakis|first2=Vassilis|last3=Androutsopoulos|first3=Konstantinos|date=2008-12-01|title=Integrated Passenger Information System for Multimodal Trip Planning|journal=Transportation Research Record: Journal of the Transportation Research Board|volume=2072|pages=20–29|doi=10.3141/2072-03|s2cid=109396014|issn=0361-1981}}</ref> Searches may be optimized on different criteria, for example ''fastest'', ''shortest'', ''fewest changes'', ''cheapest''.<ref>{{cite web|url=https://github.com/opentripplanner/OpenTripPlanner/wiki/Bike-Triangle|title=Bike Triangle {{!}} OpenTripPlanner|website=GitHub|language=en|access-date=2017-05-11}}</ref> They may be constrained, for example, to leave or arrive at a certain time, to avoid certain waypoints, etc. A single journey may use a sequence of several [[modes of transport]], meaning the system may know about [[public transport]] services as well as [[transport network]]s for private transportation. Trip planning or journey planning is sometimes distinguished from ''route planning'',<ref name=":0">{{Cite book|title=Algorithm Engineering|last1=Bast|first1=Hannah|author1-link=Hannah Bast|last2=Delling|first2=Daniel|last3=Goldberg|first3=Andrew|last4=Müller-Hannemann|first4=Matthias|last5=Pajor|first5=Thomas|last6=Sanders|first6=Peter|last7=Wagner|first7=Dorothea|last8=Werneck|first8=Renato F.|date=2016-01-01|publisher=Springer International Publishing|isbn=9783319494869|editor-last=Kliemann|editor-first=Lasse|series=Lecture Notes in Computer Science|pages=19–80|language=en|doi=10.1007/978-3-319-49487-6_2|editor-last2=Sanders|editor-first2=Peter|arxiv = 1504.05140|s2cid=14384915}}</ref> which is typically thought of as using private modes of transportation such as [[bicycle|cycling]], [[Car|driving]], or [[walking]], normally using a single mode at a time. Trip or journey planning, in contrast, would make use of at least one [[public transport]] mode which operates according to [[Public transport timetable|published schedules]]; given that public transport services only depart at specific times (unlike private transport which may leave at any time), an algorithm must therefore not only find a path to a destination, but seek to optimize it so as to minimize the waiting time incurred for each leg. In European Standards such as [[Transmodel]], trip planning is used specifically to describe the planning of a route for a passenger, to avoid confusion with the completely separate process of planning the operational journeys to be made by public transport vehicles on which such trips are made.<br />
<br />
Trip planners have been widely used in the [[travel industry]] since the 1970s, by booking agents.<ref>{{cite web|url=http://www.traveltecnik.com/2007/12/history-of-global-distribution-systems.html |title=TravelTecnik Consultants - Travel & Hospitality Technology: History of Global Distribution Systems (GDS) |website=Traveltecnik.com |access-date=2018-09-25}}</ref> The growth of the [[internet]], the proliferation of [[Geographic data and information|geospatial data]], and the development of [[Information technology|information technologies]] generally has led to the rapid development of many self-service app or [[Web browser|browser-based]], on-line [[Intermodal journey planner|intermodal]] trip planners.<br />
<br />
A trip planner may be used in conjunction with ticketing and reservation systems.<br />
<br />
== History ==<br />
<br />
=== First-generation systems ===<br />
In the late 1980s and early 1990s, some national railway operators and major metropolitan transit authorities developed their own specialized trip planners to support their customer enquiry services. These typically ran on [[mainframes]] and were accessed internally with terminals by their own staff in customer information centers, call centers, and at ticket counters in order to answer customer queries. The data came from the timetable databases used to publish printed timetables and to manage operations and some included simple route planning capabilities. The HAFAs timetable information system developed in 1989 by the German company<ref name="hacon.de">{{cite web |url=http://www.hacon.de/company/geschichte |title=History — HaCon, Fahrplanauskunft HAFAS, Fahrplankonstruktion TPS |publisher=Hacon.de |access-date=2018-09-25 |archive-date=2018-09-25 |archive-url=https://web.archive.org/web/20180925220125/http://www.hacon.de/company/geschichte |url-status=dead }}</ref> Hacon, (now part of Siemens AG) is an example of such a system and was adopted by [[Swiss Federal Railways]] (SBB) and [[Deutsche Bahn]] in 1989. The ""Routes"" system of [[London Regional Transport|London Transport, now TfL]], in use before the development of the on-line planner and covering all public transport services in London, was another example of a mainframe OLTP journey planner and included a large database of tourist attractions and popular destinations in London.<br />
<br />
=== Second-generation systems ===<br />
In the 1990s with the advent of personal computers with sufficient memory and processor power to undertake trip planning (which is relatively expensive computationally in terms of memory and processor requirements), systems were developed that could be installed and run on minicomputers and personal computers. The first digital public transport trip planner systems for a microcomputer was developed by Eduard Tulp, an informatica student at the Amsterdam University on an [[Atari]] PC.<ref>[http://www.trouw.nl/tr/nl/5009/Archief/article/detail/2645851/1998/06/05/Succes-voor-het-eerste-06-nummer-zonder-hijgende-dames.dhtml Trouw, 05/06/1998]</ref> He was hired by the [[Nederlandse Spoorwegen|Dutch Railways]] to built a digital trip planner for the train services. In 1990 the first digital trip planner for the Dutch Railways (on diskette) was sold to be installed on PC's and computers for off-line consultation.<ref>{{cite web|url=http://9292.nl/extra/175-jaar-reisinformatie# |title=175 years of travel information, chapter:Wel of geen vervoer? |language=nl |publisher=9292.nl |date=1992-09-02 |access-date=2018-09-25}}</ref> The principles of his software program was published in a Dutch university paper in 1991<ref>http://kinkrsoftware.nl/contrib/Artikel16b.2a/tulp.pdf, Tulp, Eduard, ''Searching time-table networks'', proefschrift [[Vrije Universiteit Amsterdam]], 1991</ref> This was soon expanded to include all public transport in the Netherlands.<br />
<br />
Another pioneer was Hans-Jakob Tobler in Switzerland. His product ''Finajour'', which ran for [[PC DOS]] and [[MS-DOS]] was the first electronic timetable for Switzerland. The first published version was sold for the timetable period 1989/1990.<ref name="TA">Tages-Anzeiger, 14 February 2009, p. 14, ''Hans-Jakob Tobler gestorben''. Source: [https://web.archive.org/web/20141231071856/http://www.impulsmittelschule.ch/deu/pressearchiv/37387068.pdf Argus Medienbeobachtung (through archive.org)] (PDF file; 70&nbsp;kB).</ref><ref name="Alexandria">Alexandria. [http://ead.nb.admin.ch/swissbase/f030/n150000/vbs141003.html Entry ''Finajour 1.02'' Sommer 1989] {{Webarchive|url=https://web.archive.org/web/20141231070401/http://ead.nb.admin.ch/swissbase/f030/n150000/vbs141003.html |date=2014-12-31 }}.</ref><ref>Computerwoche: [https://www.computerwoche.de/a/geschaeft-mit-fahrplandaten,1152144 Schweiz: Fahrpläne im Videotex], 22 September 1989 («''Schon auf den Fahrplanwechsel in diesem Frühjahr war die PC-Version des schweizerischen Zugfahrplans von der Firma Finajour veröffentlicht worden. Inzwischen wurden gut tausend Exemplare zu einem Stückpreis von hundert Franken verkauft.''»)</ref> Other European countries soon followed with their own journey planners.<br />
<br />
A further development of this trend was to deploy trip planners onto even smaller platforms such as mobile devices, a [[Windows CE]] version of Hafas was launched in 1998 compressing the application and the entire railway timetable of Deutsche Bahn into six megabytes and running as a stand-alone application.<br />
<br />
=== Early internet-based systems ===<br />
The development of the internet allowed HTML based user interfaces to be added to allow direct querying of trip planning systems by the general public. A test web interface for HaFAs, was launched as [[Deutsche Bahn]]'s official rail trip planner in 1995 and evolved over time into the main Deutsche Bahn website. In 2001 [[Transport for London]] launched the world's first large-scale multimodal trip planner for a world city covering all of London's transport modes as well as rail routes to London; this used a trip planning engine supplied by [https://www.mentz.net] Mentz Gmbh] of Munich after earlier attempts in the late 1990s to add a web interface to TfL's own mainframe internal trip planner failed to scale. Internet trip planners for major transport networks such as national railways and major cities must sustain very high query rates and so require software architectures optimized to sustain such traffic. The world's first mobile trip planner for a large metropolitan area, a WAP based interface to the London using the Mentz engine, was launched in 2001 by London startup company [[Kizoom Ltd]], who also launched the UK's first rail trip planner for the mobile internet in 2000, also as a WAP service, followed by an SMS service. Starting in 2000 the Traveline<ref>{{cite web|url=http://www.traveline.info |title=Traveline |publisher=Traveline.info |access-date=2018-09-25}}</ref> service provided all parts of the UK with regional multi-modal trip planning on bus, coach, and rail. A web-based trip planner for UK rail was launched by UK [[National Rail Enquiries]] in 2003.<br />
<br />
Early public transport trip planners typically required a stop or station to be specified for the endpoints. Some also supported inputting the name of a tourist attraction or other popular destination places by keeping a table of the nearest stop to the destination. This was later extended with ability to add addresses or coordinates to offer true point to point planning.<br />
<br />
Critical to the development of large-scale multi-modal trip planning in the late 1990s and early 2000s was the development in parallel of standards for encoding stop and schedule data from many different operators and the setting up of workflows to aggregate and distribute data on a regular basis. This is more challenging for modes such as bus and coach, where there tend to a large number of small operators, than for rail, which typically involves only a few large operators who have exchange formats and processes already in place in order to operate their networks. In Europe, which has a dense and sophisticated public transport network, the CEN [[Transmodel]] Reference Model for Public Transport was developed to support the process of creating and harmonizing standard formats both nationally and internationally.<br />
<br />
=== Distributed journey planners ===<br />
In the 2000s, Several major projects developed distributed trip planning architectures to allow the federation of separate trip planners each covering a specific area to create a composite engine covering a very large area.<br />
* The UK [[Transport Direct Portal]] launched in 2004 by the UK Department of Transport, used the [[JourneyWeb]] protocol to link eight separate regional engines covering data from 140 local transport authorities in England, Scotland and Wales as a unified engine. The portal integrated both road and public transport planners allowing a comparison between modes of travel times, {{CO2}} footprint etc..<br />
* The German Delfi<ref>{{cite web|url=http://www.delfi.de/ |title=Was ist DELFI? &#124; DELFI |language=de |publisher=Delfi.de |access-date=2018-09-25}}</ref> project developed a distributed trip planning architecture used to federate the German regional planners, launched as a prototype in 2004. The Interface was further developed by the German TRIAS project and led to the development of a CEN Standard [[<ref>[http://www.normes-donnees-tc.org/wp-content/uploads/2017/01/TC 278 WI 00278420 E-RS-170118-final3.pdf]{{dead link|date=September 2018}}</ref>|Open API for distributed journey planning']] (CEN/TS 17118:2017) published in 2017 to provide a standard interface to trip planners, incorporating features from JourneyWeb and EU-Spirit and making use of the [[Service Interface for Real Time Information|SIRI Protocol Framework]] and the [[Transmodel|Transmodel reference model]].<br />
* The European<ref>{{cite web|url=https://eu-spirit.eu/ |title=EU-Spirit &#124; European travel information network |publisher=Eu-spirit.eu |access-date=2018-09-25}}</ref> EU Spirit project developed a long-distance trip planner between a number of different European regions<br />
<br />
=== Second-generation internet systems ===<br />
Public transport trip planners proved to be immensely popular (for example by 2005 [[Deutsche Bahn]] was already sustaining<ref name="hacon.de"/> 2.8 million requests per day and journey planning sites constitute some of the highest trafficked information sites in every country that has them. The ability to purchase tickets for travel for the journeys found has further increased the utility and popularity of the sites; early implementations such as the UK's Trainline offered delivery of tickets by mail; this has been complemented in most European countries by self-service print and mobile fulfillment methods. Internet trip planners now constitute a primary sales channel for most rail and air transport operators.<br />
<br />
[[Google]] started to add trip planning capabilities to its product set with a version of Google Transit in 2005, covering trips in the [[Portland, Oregon|Portland]] region, as described by the [[TriMet]] agency manager<ref>{{cite web|author=Bibiana McHugh |url=http://beyondtransparency.org/chapters/part-2/pioneering-open-data-standards-the-gtfs-story/ |title=Pioneering Open Data Standards: The GTFS Story |publisher=Beyondtransparency.org |date=2005-12-07 |access-date=2018-09-25}}</ref> Bibiana McHugh. This led to the development of the [[General Transit Feed Specification]] (GTFS), a format for collecting transit data for use in trip planners that has been highly influential in developing an ecosystem of PT data feeds covering many different countries. The successful uptake of GTFS as an available output format by large operators in many countries has allowed Google to extend its trip planner coverage to many more regions around the world. The Google Transit trip planning capabilities were integrated into the Google Map product in 2012.<br />
<br />
Further evolution of trip planning engines has seen the integration of real time data so that trip plans for the immediate future take into account real time delays and disruptions. The UK [[National Rail|National Rail Enquiries]] added real time to its rail trip planner in 2007. Also significant has been the integration of other types of data into the trip planning results such as disruption notices, crowding levels, CO<sub>2</sub> costs, etc. The trip planners of some major metropolitan cities such as the [[Transport for London]] trip planner have the ability to dynamically suspend individual stations and whole lines so that modified trip plans are produced during major disruptions that omit the unavailable parts of the network. Another development has been the addition of accessibility data and the ability for algorithms to optimize plans to take into account the requirements of specific disabilities such as wheelchair access.<br />
<br />
For the London 2012 Olympics, an enhanced London trip planner was created that allowed the proposed trip results to be biased to manage available capacity across different routes, spreading traffic to less congested routes. Another innovation was the detailed modelling of all the access paths into and out of every Olympic venue, (from PT stop to individual arena entrance) with predicted and actual queueing times to allow for security checks and other delays being factored into the recommended travel times.<br />
<br />
An initiative to develop an open source trip planner, the<ref>{{cite web|url=http://docs.opentripplanner.org/en/latest/History/ |title=OpenTripPlanner |publisher=Docs.opentripplanner.org |date=2016-09-09 |access-date=2018-09-25}}</ref> [[OpenTripPlanner]] was seeded by Portland, Oregon's transit agency [[TriMet]] in 2009 and developed with the participation of agencies and operators in the US and Europe; a full version 1.0 released in September 2016, is making it possible for smaller transit agencies and operators to provide trip planning without paying proprietary license fees.<br />
<br />
==Mode-specific considerations==<br />
=== Public transport routing ===<br />
A public transport route planner is an [[intermodal journey planner|intermodal]] journey planner, typically accessed via the [[web application|web]] that provides information about available [[public transport]] services. The application prompts a user to input an origin and a destination, and then uses algorithms to find a good route between the two on public transit services. Time of travel may be constrained to either time of departure or arrival and other routing preferences may be specified as well.<br />
<br />
An intermodal journey planner supports [[Intermodal passenger transport|intermodal journeys]] i.e. using more than one [[modes of transport]], such as cycling, [[rapid transit]], [[bus]], [[ferry]], etc. Many route planners support door-to-door planning while others only work between stops on the [[transport network]], such as stations, [[airport]]s or [[bus stop]]s.<br />
<br />
For public transport routing the trip planner is constrained by times of arrival or departure. It may also support different optimization criteria – for example, ''fastest route, fewest changes, most accessible''. Optimization by price (''cheapest, most flexible fare'', etc.) is usually done by a separate algorithm or engine, though trip planners that can return fare prices for the trips they find may also offer sorting or filtering of results by price and product type. For long-distance rail and air trip planning, where price is a significant consideration in price optimizing trip planners may suggest the cheapest dates to travel for customers are flexible as to travel time.<br />
<br />
=== Car routing ===<br />
The planning of road legs is sometimes done by a separate subsystem within a journey planner, but may consider both single mode trip calculations as well as intermodal scenarios (e.g. [[Park and Ride]], [[kiss and ride]], etc.). Typical optimizations for [[car routing]] are ''shortest route'', ''fastest route'', ''cheapest route'' and with constraints for specific ''waypoints.'' The rise of e-mobility poses new challenges to route planning, e.g. sparse charging infrastructure, limited range, and long charging have to be taken into account and offer room for optimization.<ref>{{cite web|url=https://www.researchgate.net/publication/362609011|title=eDijkstra - Time-Optimal Route Planning for Electric Vehicles|website=ResearchGate|language=en|access-date=2022-10-10}}</ref> Some advanced journey planners can take into account average journey times on road sections, or even real-time predicted average journey times on road sections.<br />
<br />
=== Pedestrian routing ===<br />
A journey planner will ideally provide detailed routing for pedestrian access to stops, stations, points of interest etc. This will include options to take into account accessibility requirements for different types of users, for example; 'no steps', 'wheelchair access', 'no lifts', etc.<br />
<br />
=== Bicycle routing ===<br />
Some journey planning systems can calculate bicycle routes,<ref>{{Cite book|last1=Yoon|first1=Ji Won|last2=Pinelli|first2=Fabio|last3=Calabrese|first3=Francesco|title=2012 IEEE 13th International Conference on Mobile Data Management |chapter=Cityride: A Predictive Bike Sharing Journey Advisor |date=2012|pages=306–311|doi=10.1109/MDM.2012.16|isbn=978-1-4673-1796-2|s2cid=16827996}}</ref> integrating all paths accessible by bicycle and often including additional information like topography, traffic, on-street cycling infrastructure, etc. These systems assume, or allow the user to specify, preferences for quiet or safe roads, minimal elevation change, [[Cycling infrastructure|bicycle lanes]], etc.<br />
<br />
== Data requirements ==<br />
Trip planners depend on a number of different types of data and the quality and extent of this data limits their capability. Some trip planners integrate many different kinds of data from numerous sources. Others may work with one mode only, such as flight itineraries between airports, or using only addresses and the street network for driving directions.<br />
<br />
=== Contextual data ===<br />
==== Point of interest data ====<br />
Passengers don't travel because they want to go to a particular station or stop, but because they want to go some destination of interest, such as a sports arena, tourist attraction, shopping center, park, law court, etc., etc. Many trip planners allow users to look for such "Points of interest", either by name or by category (''museum, stadium, prison,'' etc.). Data sets of systematically named, geocoded and categorized popular destinations can be obtained commercially, for example, The UK PointX<ref>{{cite web|author=Martin Webb |url=http://www.pointx.co.uk/ |title=Welcome |publisher=PointX |access-date=2018-09-25}}</ref> data set, or derived from opensource data sets such as [[OpenStreetMap]]. Major operators such as [[Transport for London]] or [[National Rail]] have historically had well developed sets of such data for use in their Customer Call centers, along with information on the links to the nearest stops. For points of interest that cover a large area, such as parks, country houses or stadia, a precise geocoding of the entrances is important.<br />
<br />
==== Gazetteer data ====<br />
Trip planning user interfaces can be made more usable by integration of [[Gazetteer]] data. This can be associated with stops to assist with stop finding in particular, for example for disambiguation; there are 33 places named Newport in the US and 14 in the UK - a Gazetteer can be used to distinguish which is which and also in some cases to indicate the relationship of transport interchanges with towns and urban centers that passengers are trying to reach - for example only one of London's five or so Airports is actually in London. Data for this purpose typically comes from additional layers in a map data set such as that provided by [[Esri]], [[Ordnance Survey]], [[Navtech]], or specific data sets such as the UK [[National Public Transport Gazetteer]].<br />
<br />
=== Road data ===<br />
==== Road network data ====<br />
Road trip planners, sometimes referred to as route planners, use street and footpath network data to compute a route using simply the network connectivity (i.e. trips may run at any time and not constrained by a timetable). Such data can come from one or more public, commercial or crowdsourced datasets such as [[Topologically Integrated Geographic Encoding and Referencing|TIGER]], [[Esri]] or [[OpenStreetMap]]. The data is fundamental both for computing access legs to reach public transport stops, and to compute road trips in their own right. The fundamental representation is a graph of nodes and edges (i.e. points and links). The data may be further annotated to assist trip planning for different modes;<br />
* Road data may be characterized by road type (highway, major road, minor road, track, etc.), turn restrictions, speed restrictions etc., as well as average travel times at different times of day on different day types (''Weekday, Weekend, Public Holiday,'' etc.), so that accurate travel time predictions can be offered<br />
* Cycle road and path data may be annotated with characteristics such as cycle route number, traffic levels, surface, lighting, etc. that affect its usability by cyclists.<br />
* Footpath data may be annotated with accessibility characteristics such as steps, lifts, wheelchair access, ramps, etc., etc., and also safety indicators (e.g., lighting, [[CCTV]], help points, ) so that accessibility constrained trip plans can be computed.<br />
<br />
==== Real-time data for roads ====<br />
Advanced road trip planners take into account the real-time state of the network. They use two main types of feed to do this, obtained from road data services using interfaces such as [[Datex II]] or [[Urban Traffic Management and Control|UTMC]].<br />
* Situation data, which described the incidents, events and planned roadworks in a structured form that can be related to the network; this is used to decorate trip plans and road maps to show current bottlenecks and incident locations.<br />
*Link traffic flow data, which gives a quantitative measurement of the current flow on each link of the network that is monitored; this can be used to take actual current conditions into account when computing predicted journey times.<br />
<br />
=== Public transport data ===<br />
For transit route planners to work, transit schedule data must always be kept up to date. To facilitate data exchange and interoperability between different trip planners, several standard data formats have emerged.<br />
<br />
The [[General Transit Feed Specification]], developed in 2006,<ref>{{cite web|url=http://beyondtransparency.org/chapters/part-2/pioneering-open-data-standards-the-gtfs-story/|title=Pioneering Open Data Standards: The GTFS Story|website=beyondtransparency.org|access-date=2017-05-10}}</ref> is now used by hundreds of transit agencies around the world.<br />
<br />
In the European Union all public passenger travel operators have the obligation to provide the information under the EU railway timetable data exchange format.<ref>{{cite web|url=http://netex-cen.eu/ |title=NeTEx |publisher=Netex-cen.eu |date=2014-03-18 |access-date=2018-10-03}}</ref><ref>{{cite book|volume=2 |pages=630–631 |publisher=[[IEEE]] |date= October 2011|doi=10.1109/TELSKS.2011.6143191 |chapter=SOA architecture for complying with EU railway timetable data exchange format |last1=Branovic |first1=Irina |last2=Veskovic |first2=Slavko |last3=Mladenovic |first3=Snezana |last4=Milinkovic |first4=Sanjin |last5=Jankovic |first5=Sladjana |title=2011 10th International Conference on Telecommunication in Modern Satellite Cable and Broadcasting Services (TELSIKS) |isbn=978-1-4577-2019-2 |s2cid=32189828 }}</ref><ref>{{cite web |url=http://www.gip.gv.at/downloads-219.html?...Transnational%20exchang |title=Transnational exchange of timetable and GIS data as a basis for cross-border ITS services |publisher=Gip.gv.at |access-date=2018-10-03 |archive-date=2018-10-03 |archive-url=https://web.archive.org/web/20181003221047/http://www.gip.gv.at/downloads-219.html?...Transnational%20exchang |url-status=dead }}</ref> In other parts of the world there similar exchange standards.<ref>{{cite web|url=https://www.google.nl/search?q=timetable+data+exchange&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=6FRpWN3BIeiD3gPJpZJQ |title=Transit Schedule Data Exchange Architecture |publisher=Google.nl |access-date=2018-10-03}}</ref><br />
<br />
==== Stop data ====<br />
The location and identity of Public transport access points such as bus, tram and coach stops, stations, airports, ferry landing and ports are fundamental to trip planning and a stop data set is an essential layer of the transport data infrastructure. In order to integrate stops with spatial searches and road routing engines they are [[Geocoding|geocoded]]. In order to integrate them with the timetables and routes they are given a unique identifier within the transport network. In order to be recognizable to passengers they are given official names and may also have a public short code (for example the three letter [[IATA]] codes for airports) to use in interfaces. Historically, different operators quite often used a different identifier for the same stop and stop numbers were not unique within a country or even a region. Systems for managing stop data, such as the [[International Union of Railways|International Union of Railways (UIC)]] station location code set or the UK's [[NaPTAN|NaPTAN (National Public Transport Access Point)]] system for stop numbers provide a means of ensuring numbers are unique and the stops are fully described, greatly facilitate the integration of data. Timetable exchange formats, such as [[GTFS]], [[TransXChange]] or [[NeTEx]] include stop data in their formats and spatial data sets such as [[OpenStreetMap]] allow stop identifiers to be geocoded.<br />
<br />
==== Public transport network topology data ====<br />
For public transport networks with a very high frequency of service, such as urban metro cities and inner city bus services, the topology of the network can also be used for route planning, with an average interval being assumed rather than specific departure times. Data on the routes of trains and buses is also useful for providing visualization of results, for example, to plot the route of a train on a map. National mapping bodies, such as the UK's [[Ordnance Survey]] typically include a transport layer in their data sets and the European INSPIRE framework includes public transport infrastructure links in its set of strategic digital data. The CEN [[NeTEx]] format allows both the physical layer (e.g. road and railway track infrastructure links) and the logical layer (e.g. links between scheduled stopping points on a given line) of the transport infrastructure to be exchanged<br />
<br />
In the UK the Online Journey Planner (OJP) is the engine used by [[National Rail]] to plan routes, calculate fares and establish ticket availability. OJP obtains its route information from SilverRail’s planning engine known as IPTIS (Integrated Passenger Transport Information System). The National Rail website provides information on how businesses can access this data directly via online data feed xml files.<ref>{{cite web|url=https://www.nationalrail.co.uk/developers/online-journey-planner-data-feeds/ |title=National Rail Online Journey Planner |publisher=nationalrail.co.uk |date=2024-07-05 |access-date=2024-07-05}}</ref> However, OJP was switched off in 2023 in favour of a new journey planner which is currently integrated into nationalrail.co.uk.<br />
<br />
=== Public transport timetables ===<br />
Data on public transport schedules is used by trip planners to determine the available journeys at specific times. Historically rail data has been widely available in national formats, and many countries also have bus and other mode data in national formats such as [[Association of German Transport Companies|VDV 452]] (Germany), [[TransXChange]] (UK) and Neptune (France). Schedule data is also increasingly becoming available in international formats such as [[General Transit Feed Specification|GTFS]] and [[NeTEx]]. To allow a route to be projected onto a map, GTFS allows the specification of a simple shape plot; whilst [[Transmodel]] based standards such as CEN [[NeTEx]], [[TransXChange]] additionally allow a more detailed representation which can recognize the constituent links and distinguish several different semantic layers.<ref name=":1" /><br />
<br />
=== Real-time prediction information for public transport ===<br />
Trip planners may be able to incorporate real-time information into their database and consider them in the selection of optimal routes for travel in the immediate future. [[Automatic Vehicle Location|Automatic vehicle location]] (AVL) systems<ref name=":2" /> monitor the position of vehicles using [[Global Positioning System|GPS systems]] and can pass on real-time and forecast information to the journey planning system.<ref name=":1">{{Cite journal|last1=Li|first1=Jing-Quan|last2=Zhou|first2=Kun|last3=Zhang|first3=Liping|last4=Zhang|first4=Wei-Bin|date=2012-04-01|title=A Multimodal Trip Planning System With Real-Time Traffic and Transit Information|journal=Journal of Intelligent Transportation Systems|volume=16|issue=2|pages=60–69|doi=10.1080/15472450.2012.671708|s2cid=33373852|issn=1547-2450}}</ref> A trip planner may use a real time interface such as the CEN [[Service Interface for Real Time Information]] to obtain this data.<br />
<br />
=== Situation information ===<br />
A situation is a software representation of an incident{{Citation needed|date=May 2017}} or event that is affecting or is likely to affect the transport network. A trip planner can integrate situation information and use it both to revise its trip planning computations and to annotate its responses so as to inform users through both text and map representations. A trip planner will typically use a standard interface such as [[Service Interface for Real Time Information|SIRI]], [[TPEG]] or [[Datex II]] to obtain situation information.<br />
<br />
Incidents are captured through an [[Incident Capturing System|incident capturing system]] (ICS) by different operators and stakeholders, for example in transport operator control rooms, by broadcasters or by the emergency services. Text and image information can be combined with the trip result. Recent incidents can be considered within the routing as well as visualized in an interactive map.<br />
<br />
== Technology ==<br />
<br />
Typically journey planners use an efficient in-memory representation of the network and timetable to allow the rapid searching of a large number of paths. Database queries may also be used where the number of nodes needed to compute a journey is small, and to access ancillary information relating to the journey. A single engine may contain the entire transport network, and its schedules, or may allow the [[Distributed computing|distributed computation]] of journeys using a distributed journey planning protocol such as [[JourneyWeb]] or [[Delfi Protocol]]. A journey planning engine may be accessed by different front ends, using a software protocol or [[Application Program Interface|application program interface]] specialized for journey queries, to provide a [[User Interface|user interface]] on different types of device.<br />
<br />
The development of journey planning engines has gone hand in hand with the development of data standards for representing the stops, routes and timetables of the network, such as [[TransXChange]], [[NaPTAN]], [[Transmodel]] or [[General Transit Feed Specification|GTFS]] that ensure that these fit together. Journey planning algorithms are a classic example of problems in the field of [[Computational complexity theory]]. Real-world implementations involve a tradeoff of computational resources between accuracy, completeness of the answer, and the time required for calculation.<ref name=":0" /><br />
<br />
The sub-problem of route planning is an easier problem to solve<ref>{{Cite book|title=Algorithmics of Large and Complex Networks|last1=Delling|first1=Daniel|last2=Sanders|first2=Peter|last3=Schultes|first3=Dominik|last4=Wagner|first4=Dorothea|date=2009-01-01|publisher=Springer Berlin Heidelberg|isbn=9783642020933|editor-last=Lerner|editor-first=Jürgen|series=Lecture Notes in Computer Science|pages=117–139|language=en|chapter=Engineering Route Planning Algorithms|doi=10.1007/978-3-642-02094-0_7|editor-last2=Wagner|editor-first2=Dorothea|editor-last3=Zweig|editor-first3=Katharina A.|citeseerx = 10.1.1.164.8916}}</ref> as it generally involves less data and fewer constraints. However, with the development of "road timetables", associating different journey times for road links at different times of day, time of travel is increasingly relevant for route planners as well.<br />
<br />
=== Algorithms ===<br />
Journey planners use a [[Routing|routing algorithm]] to search a [[Graph (data structure)|graph]] representing the transport network. In the simplest case where routing is independent of time, the graph uses (directed) [[Edge (graph theory)|edges]] to represent street/path segments and [[Vertex (graph theory)|nodes]] to represent [[Intersection (road)|intersections]]. Routing on such a graph can be accomplished effectively using any of a number of routing algorithms such as [[Dijkstra's algorithm|Dijkstra's]], [[A* search algorithm|A*]], [[Floyd–Warshall algorithm|Floyd–Warshall]], or [[Johnson's algorithm]].<ref>{{cite web|url=http://docs.pgrouting.org/2.0/en/src/index.html#routing-functions|title=Routing Functions — pgRouting Manual (2.0.0)|website=docs.pgrouting.org|access-date=2017-05-13}}</ref> Different weightings such as distance, cost or accessibility may be associated with each edge, and sometimes with nodes.<br />
<br />
When time-dependent features such as public transit are included, there are several proposed ways of representing the transport network as a graph and different algorithms may be used such as RAPTOR<ref>{{Cite journal|last1=Delling|first1=Daniel|last2=Pajor|first2=Thomas|last3=Werneck|first3=Renato F.|date=2014-10-30|title=Round-Based Public Transit Routing|journal=Transportation Science|volume=49|issue=3|pages=591–604|doi=10.1287/trsc.2014.0534|issn=0041-1655|citeseerx=10.1.1.652.775}}</ref><br />
<br />
=== Automated trip planner ===<br />
Automated trip planners generate your [[Travel itinerary|itinerary]] automatically, based on the information you provide. One way is to submit the desired destination, dates of your trip and interests and the plan will be created in a while. Another way is to provide the necessary information by forwarding confirmation [[e-mails]] from [[airlines]], hotels and car rental companies.<ref>{{cite web|url=https://www.nbcnews.com/id/wbna22129624 |title=New generation of Web sites for travel planning |publisher=[[NBC News]] |date=2007-12-06 |access-date=2019-03-10}}</ref><br />
<br />
===Custom trip planner===<br />
<br />
With a custom trip planner the user creates one's own travel itinerary individually by picking the appropriate activities from a database. Some of these websites like Triphobo.com offer pre-built databases of points of interest, while others rely on [[user generated content]].<br />
<br />
In 2017, Google released a mobile app called Google Trips.<ref>{{cite web |title=Google launches a personalized travel planner, Google Trips |date=19 September 2016 |url=https://techcrunch.com/2016/09/19/google-launches-a-personalized-travel-planner-google-trips/}}</ref> Custom trip planning startups are seeing renewed interest from investors with the advent of data science, AI and voice technologies in 2018. [[Lola.com]], an AI based travel planning startup and [[Hopper.com]] have managed to raise significant funding for developing trip planning apps.<ref>{{cite web |title=Lola Gets $15 Million to Fund App Update |url=https://skift.com/2017/01/12/lola-gets-15-million-to-fund-app-update-travel-startup-funding-this-week/|date=2017-01-12}}</ref><ref>{{cite news |title=Hopper raises $100M more for its AI-based travel app, now valued at $780M |url=https://techcrunch.com/2018/10/03/hopper-raises-100m-more-for-its-ai-based-travel-app-now-valued-at-780m/}}</ref><br />
<br />
When bookings and payments are added to a mobile trip planner app, then the result is considered [[mobility as a service]].<br />
<br />
===Commercial software===<br />
Distribution companies may incorporate route planning software into their [[fleet management]] systems to optimize route efficiency. A route planning setup for distribution companies will often include GPS tracking capability and advanced reporting features which enable dispatchers to prevent unplanned stops, reduce mileage, and plan more fuel-efficient routes.<br />
<br />
== See also ==<br />
* [[Automotive navigation system]]<br />
* [[Intelligent transportation system]]<br />
* [[Multimodal transport]]<br />
* [[Online diary planner#Online diary planners for trips and holidays|Online diary planners for trips and holidays]]<br />
* [[Pathfinding]]<br />
* [[Public transport route planner]]<br />
* [[Service Interface for Real Time Information]]<br />
* [[TPEG]]<br />
* [[Transmodel]]<br />
* [[Travel technology]]<br />
* [[Travel website]]<br />
*[[Public transport timetable]]<br />
*[[Sustainable transport]]<br />
*[[Transit district]]<br />
<br />
== References ==<br />
{{reflist}}<br />
<br />
{{tourism}}<br />
{{authority control}}<br />
<br />
[[Category:Public transport information systems]]<br />
[[Category:Sustainable transport]]<br />
[[Category:Route planning software]]<br />
[[Category:Cartography]]<br />
[[Category:Intermodal passenger transport]]<br />
[[Category:Scheduling (transportation)]]<br />
[[Category:Travel websites]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=XAI_(company)&diff=1166794563XAI (company)2023-07-23T20:09:18Z<p>CodingKoopa: /* Background */ rm tracking from URLs</p>
<hr />
<div>{{Short description|Artificial Intelligence focused startup}}<br />
{{Lowercase title}}<br />
{{Infobox company<br />
| logo = xAI Logo.svg<br />
| name = xAI Corp<br />
| traded_as =<br />
| trade_name = xAI<br />
| type = [[Privately held company|Private]]<br />
| industry = [[Artificial intelligence]]<br />
| founded = {{Start date and age|2023|07|12|df=yes}}<br />
| founder = [[Elon Musk]]<br />
| hq_location_city = [[San Francisco Bay Area]],<ref>{{cite web|url=https://www.computerworld.com/article/3702708/elon-musk-launches-xai-to-take-on-chatgpt-maker-openai.html|title=Elon Musk launches xAI to take on ChatGPT-maker OpenAI|website=Computer World|date=July 13, 2023|author=Anirban Ghoshal|access-date=July 14, 2023}}</ref> California, U.S.<br />
| website = {{URL|x.ai}}<br />
}}<br />
{{Elon Musk series}}<br />
'''xAI Corp''' is an [[artificial intelligence]] [[startup]] founded on July 12, 2023 by [[Elon Musk]]. The company is composed of former employees from [[OpenAI]], [[Google DeepMind]], [[Google|Google Research]], [[Microsoft Research]], [[Tesla, Inc.|Tesla]], [[Twitter]] and the [[University of Toronto]]. [[Dan Hendrycks]], the executive director of the [[Center for AI Safety]], is also one of the advisors.<ref> {{Cite web |date=2023-07-12 |title=Elon Musk’s new AI company is staffed entirely by men |url=https://qz.com/elon-musk-s-new-ai-company-is-staffed-entirely-by-men-1850633240 |access-date=2023-07-17 |website=Quartz |language=en}} </ref><ref>{{cite web |url=https://www.bloomberg.com/news/articles/2023-07-12/musk-unveils-xai-as-way-to-understand-true-nature-of-universe#xj4y7vzkg |first=Rachel |last=Metz |newspaper=[[Bloomberg News|Bloomberg]] |title=Elon Musk Announces New Company xAI as He Seeks to Build ChatGPT Alternative |date=July 12, 2023 |access-date=July 12, 2023 |archive-date=July 12, 2023 |archive-url=https://web.archive.org/web/20230712173207/https://www.bloomberg.com/news/articles/2023-07-12/musk-unveils-xai-as-way-to-understand-true-nature-of-universe#xj4y7vzkg |url-status=live }}</ref><ref>{{cite web |url=https://www.washingtonpost.com/technology/2023/07/12/elon-musk-xai-google-openai/ |newspaper=[[The Washington Post]] |date=July 12, 2023 |author=Gerrit de Vynck |title=Elon Musk forms new AI company, with researchers from Google, OpenAI |access-date=July 12, 2023 |archive-date=July 12, 2023 |archive-url=https://web.archive.org/web/20230712223627/https://www.washingtonpost.com/technology/2023/07/12/elon-musk-xai-google-openai/ |url-status=live }}</ref><ref>{{cite web |url=https://www.cnbc.com/2023/07/12/elon-musk-launches-his-new-company-xai.html |title=Elon Musk launches his new company, xAI |first=Hayden |last=Field |date=July 12, 2023 |website=[[CNBC]] |access-date=July 12, 2023 |archive-date=July 12, 2023 |archive-url=https://web.archive.org/web/20230712163812/https://www.cnbc.com/2023/07/12/elon-musk-launches-his-new-company-xai.html |url-status=live }}</ref><ref>{{cite web |url=https://www.ft.com/content/19cce4b5-b2dd-4c1e-a109-b500e504dbb6 |newspaper=[[The Financial Times]] |date=July 12, 2023 |title=Elon Musk launches xAI in challenge to dominance of ChatGPT owner |access-date=July 12, 2023 |archive-date=July 12, 2023 |archive-url=https://web.archive.org/web/20230712183908/https://www.ft.com/content/19cce4b5-b2dd-4c1e-a109-b500e504dbb6 |url-status=live }}</ref><ref>{{cite journal |url=https://www.wsj.com/articles/elon-musk-xai-artificial-intelligence-company-openai-chatgpt-4a6f178a |first=Suryathapa |last=Bhattacharya |date=July 12, 2023 |journal=[[The Wall Street Journal]] |title=Elon Musk Launches xAI, His New Artificial-Intelligence Company |access-date=July 12, 2023 |archive-date=July 12, 2023 |archive-url=https://web.archive.org/web/20230712195955/https://www.wsj.com/articles/elon-musk-xai-artificial-intelligence-company-openai-chatgpt-4a6f178a |url-status=live }}</ref><br />
<br />
== Background ==<br />
In 2015, Musk cofounded [[OpenAI]], an AI research company which was a non-profit at the time.<ref>{{cite web |last=Stokel-Walker |first=Chris |date=July 13, 2023 |title=What is xAI, Elon Musk's new AI company, and will it succeed? |url=https://www.newscientist.com/article/2382426-what-is-xai-elon-musks-new-ai-company-and-will-it-succeed/ |work=[[New Scientist]]}}</ref> He stepped down from its board in 2018 to avoid possible future [[conflict of interest|conflicts]] with his role as CEO of Tesla as the latter company increasingly became involved in AI, besides disagreement with the company's management and its attitude towards AI safety.<ref>{{cite news |last=Novet|first=Jordan|date=February 2, 2018|title=Elon Musk, who has sounded the alarm on AI, leaves the organization he co-founded to make it safer|url=https://www.cnbc.com/2018/02/21/elon-musk-is-leaving-the-board-of-openai.html|publisher=CNBC| access-date=September 3, 2020|archive-url=https://web.archive.org/web/20200830162809/https://www.cnbc.com/2018/02/21/elon-musk-is-leaving-the-board-of-openai.html|archive-date=August 30, 2020}}</ref><ref name=ft /><br />
<br />
In April 2023, the ''[[Financial Times]]'' reported that Musk was planning to launch an AI startup. He had secured thousands of [[Nvidia A100|Nvidia GPU processors]] for a potential [[large language model]].<ref name=ft>{{Cite news|url=https://www.ft.com/content/2a96995b-c799-4281-8b60-b235e84aefe4|title=Elon Musk plans artificial intelligence start-up to rival OpenAI|first1=Richard|last1=Waters|first2=Tim|last2=Bradshaw|first3=Madhumita|last3=Murgia|first4=Tabby|last4=Kinder|newspaper=Financial Times|date=April 14, 2023|access-date=July 12, 2023|archive-date=April 16, 2023|archive-url=https://web.archive.org/web/20230416102237/https://www.ft.com/content/2a96995b-c799-4281-8b60-b235e84aefe4|url-status=live}}{{Subscription required|date=July 2023}}</ref><br />
<br />
In addition, Musk stated in an interview with [[Tucker Carlson]] that he wanted to found something he dubbed "TruthGPT," due to his fears that current AI companies were training systems to be "politically correct."<ref>{{Cite web|url=https://www.cnbc.com/2023/04/18/musk-calls-plans-truthgpt-ai-to-rival-openai-deepmind.html|title=Elon Musk plans 'TruthGPT' A.I. to rival OpenAI, DeepMind|first=Lora|last=Kolodny|date=April 18, 2023|website=CNBC|access-date=July 12, 2023|archive-date=June 18, 2023|archive-url=https://web.archive.org/web/20230618031735/https://www.cnbc.com/2023/04/18/musk-calls-plans-truthgpt-ai-to-rival-openai-deepmind.html|url-status=live}}</ref><br />
<br />
Musk officially announced xAI on his Twitter account,<ref>{{Cite web |url=https://twitter.com/elonmusk/status/1679164661869182976|title=Announcing formation of @xAI to understand reality |access-date=2023-07-13 |website=Twitter |language=en}}</ref> and a [[Twitter Spaces]] took place on July 14, 2023.<ref>{{Cite web |url=https://twitter.com/xai/status/1679527914394763264 |title=Join our Twitter space tomorrow to learn more|access-date=2023-07-13 |website=Twitter |language=en}}</ref><ref> {{Cite news |last=Vynck |first=Gerrit De |date=2023-07-15 |title=Musk’s new AI company, xAI, will aim to solve scientific mysteries |language=en-US |work=Washington Post |url=https://www.washingtonpost.com/technology/2023/07/14/xai-elon-musk-ai-company/ |access-date=2023-07-17 |issn=0190-8286}}</ref><br />
<br />
The company will work closely with [[Twitter]] and [[Tesla, Inc.|Tesla]]—companies which Musk either owns or leads.<ref>{{cite web |last=Knight |first=Will |date=July 12, 2023 |title=Elon Musk's xAI Might Be Hallucinating Its Chances Against ChatGPT |url=https://www.wired.com/story/fast-forward-elon-musks-xai-chatgpt-hallucinating/ |work=[[Wired (magazine)|Wired]]}}</ref> <br />
<br />
One of the goals is to create an AI that is capable of advanced mathematical reasoning, something not found in current models.<ref>{{cite news |last=Schreckinger |first=Ben |date=July 17, 2023 |title=Elon Musk's liberal-trolling AI plan has a core audience |url=https://www.politico.com/news/2023/07/17/ai-musk-chatgpt-xai-00106672 |work=[[Politico]]}}</ref><br />
<br />
== References ==<br />
{{reflist}}<br />
<br />
==External links==<br />
* {{Official website|https://x.ai/}}<br />
{{Elon Musk}}<br />
<br />
[[Category:Elon Musk]]<br />
[[Category:AI companies]]<br />
[[Category:2023 establishments in the United States]]<br />
[[Category:Companies based in the San Francisco Bay Area]]<br />
{{Company-stub}}</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Talk:ISO_7001&diff=1136792371Talk:ISO 70012023-02-01T04:38:03Z<p>CodingKoopa: /* Image licensing */ new section</p>
<hr />
<div>{{WikiProject International relations | class=Stub | importance=Mid| un=yes}}<br />
<br />
== Why is there no images? ==<br />
<br />
Can you put images? [[Special:Contributions/180.191.169.84|180.191.169.84]] ([[User talk:180.191.169.84|talk]]) 05:25, 15 August 2022 (UTC)<br />
<br />
== Image licensing ==<br />
<br />
While I appreciate the utility of the images of the icons provided, I am confused as to how they are licensed as CC0. Have these actually been designated as such by ISO? -- [[User:CodingKoopa|CodingKoopa]] ([[User talk:CodingKoopa|talk]]) 04:38, 1 February 2023 (UTC)</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Censorship_of_GitHub&diff=1118793709Censorship of GitHub2022-10-28T23:06:06Z<p>CodingKoopa: /* DDoS attack */ fix grammar</p>
<hr />
<div>{{short description|Restriction of access to GitHub by governments and organizations}}<br />
[[GitHub]] has been the target of censorship from governments using methods ranging from local [[Internet service provider]] blocks, intermediary blocking using methods such as [[DNS hijacking]] and [[man-in-the-middle attack]]s, and [[Denial-of-service attack|denial-of-service]] attacks on GitHub's servers from countries including China, India, and Russia. In all of these cases, GitHub has been eventually unblocked after backlash from users and technology businesses or compliance from GitHub.<br />
<br />
== Background ==<br />
GitHub is a web-based [[Git (software)|Git repository]] hosting service and is primarily used to host the [[source code]] of software, facilitate project management, and provide distributed revision control functionality of Git, access control, wikis, and bug tracking.<ref>{{Cite book|last=Stephanidis|first=Constantine|title=HCI International 2020 - Late Breaking Papers: Cognition, Learning and Games: 22nd HCI International Conference, HCII 2020, Copenhagen, Denmark, July 19-24, 2020, Proceedings|publisher=Springer Nature|year=2020|isbn=978-3-030-60127-0|location=Cham, Switzerland|pages=355}}</ref> As of November 2015, GitHub reports having over 11.5&nbsp;million users and over 28.9&nbsp;million repositories.<ref>{{cite web|url=https://github.com/about/press |title=GitHub Press Info |website=github.com |publisher=Github|access-date=1 January 2019|archive-url=https://web.archive.org/web/20151103000444/https://github.com/about/press|archive-date=3 November 2015|url-status=dead}}</ref> It offers free accounts, a [[pastebin]] service called [[Gist (GitHub)|Gist]], and free [[Web hosting service|website hosting]] under its github.io [[Domain name|domain]]. The GitHub [[terms of service]] prohibits illegal use and it reserves the right to remove content at its discretion.<ref>{{cite web|title=GitHub Terms of Service|url=https://help.github.com/articles/github-terms-of-service/|website=GitHub|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150624142711/https://help.github.com/articles/github-terms-of-service/|archive-date=24 June 2015|url-status=live}} (Specifically terms A8 and G7)</ref> Users can [[Fork (software development)|fork]] (copy and individually develop) other projects, which GitHub does not automatically take down when served [[DMCA takedown]] notices.<ref>{{cite web|title=DMCA Takedown Policy|url=https://help.github.com/articles/dmca-takedown-policy/#b-what-about-forks-or-whats-a-fork|website=GitHub|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150701020203/https://help.github.com/articles/dmca-takedown-policy/#b-what-about-forks-or-whats-a-fork|archive-date=1 July 2015|url-status=live}}</ref> GitHub uses [[HTTPS]] for its connections, making data more secure against interception from third parties.<br />
<br />
== China ==<br />
{{main|Internet censorship in China}}<br />
China heavily regulates Internet traffic and has blocked many international Internet companies including [[Facebook]] and [[Twitter]].<ref>{{cite web|last1=Wei|first1=Sisi|title=Inside the Firewall: Tracking the News That China Blocks|url=https://projects.propublica.org/firewall/|website=ProPublica|date=December 17, 2014|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150605095642/https://projects.propublica.org/firewall/|archive-date=5 June 2015|url-status=live}}</ref> In addition, Western businesses have said that these restrictions hurt their business by reducing access to information, such as from search engines and those using [[Virtual private network|VPN]]s.<ref>{{cite web|last1=Chin|first1=Josh|title=China Internet Restrictions Hurting Business, Western Companies Say|url=https://blogs.wsj.com/chinarealtime/2015/02/12/china-internet-restrictions-hurting-business-western-companies-say/|website=Wall Street Journal Blogs|date=February 12, 2015|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150704020127/http://blogs.wsj.com/chinarealtime/2015/02/12/china-internet-restrictions-hurting-business-western-companies-say/|archive-date=4 July 2015|url-status=live}}</ref> In 2013, the country started blocking GitHub and it was met by protests among Chinese programmers.<ref>{{Cite book|last=Roberts|first=Margaret E.|title=Censored: Distraction and Diversion Inside China's Great Firewall|publisher=Princeton University Press|year=2018|isbn=978-0-691-17886-8|location=Princeton, NJ|pages=114}}</ref> <br />
<br />
[[GreatFire]], a Chinese anti-censorship organization, has attempted to circumvent the [[Great Firewall of China]] using [[mirror website]]s. However, the links to these pages were posted using GitHub which brings the risk of the site being blocked along with the mirrors. In a previous incident, [[HSBC]] bank's Chinese operation was taken offline when the [[Akamai]] network was targeted for hosting GreatFire.org websites.<ref>{{cite news|last1=Silbert|first1=Sean|title=Routing around the Great Firewall of China|url=https://www.latimes.com/business/technology/la-fi-tn-great-firewall-china-censorship-20141126-story.html|newspaper=LA Times|date=November 26, 2014|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150630064455/http://www.latimes.com/business/technology/la-fi-tn-great-firewall-china-censorship-20141126-story.html|archive-date=30 June 2015|url-status=live}}</ref><br />
<br />
=== DNS hijacking ===<br />
<br />
==== Blockage ====<br />
[[File:Jan 21 GitHub DNS China block.png|thumb|right|alt="No servers were able to reach your site."|Test results from viewDNS.info showing that GitHub was blocked from within China]]<br />
On January 21, 2013, GitHub was blocked in China using [[DNS hijacking]]. It was reported that the attack was carried out in response to political information posted on the platform.<ref>{{Cite book|last1=Fingar|first1=Thomas|title=Fateful Decisions: Choices That Will Shape China's Future|last2=Oi|first2=Jean C.|publisher=Stanford University Press|year=2020|isbn=978-1-5036-1223-5|language=en}}</ref> Confirming the block, a spokesperson for GitHub said: "It does appear that we're at least being partly blocked by the Great Firewall of China".{{efn|''The Next Web'' and ''GreatFire'' both claim that it was fully blocked however.<ref name="Protalinski-TC"/>}}<ref name="Protalinski-TC">{{cite web|last1=Protalinski|first1=Emil|title=The Chinese government appears to be blocking GitHub via DNS (Update: Investigation underway)|url=https://thenextweb.com/asia/2013/01/21/the-chinese-government-appears-to-have-completely-blocked-github-via-dns|website=The Next Web|date=January 21, 2013|access-date=9 April 2015|archive-url=https://web.archive.org/web/20150414025518/http://thenextweb.com/asia/2013/01/21/the-chinese-government-appears-to-have-completely-blocked-github-via-dns/|archive-date=14 April 2015|url-status=live}}</ref> The block was lifted on January 23, 2013 after an online protest on [[Sina Weibo]].<ref name="Kan-CW">{{cite web|last1=Kan|first1=Michael|title=GitHub unblocked in China after former Google head slams its censorship|url=https://www.computerworld.com/article/2493478/internet/github-unblocked-in-china-after-former-google-head-slams-its-censorship.html|website=Computer World|date=January 23, 2013|access-date=9 April 2015|archive-url=https://web.archive.org/web/20150330034358/http://www.computerworld.com/article/2493478/internet/github-unblocked-in-china-after-former-google-head-slams-its-censorship.html|archive-date=30 March 2015|url-status=live}}</ref><br />
<br />
==== Criticism ====<br />
[[Kai-Fu Lee]] brought attention to the block after posting about it on Sina Weibo. He derided the block, saying: "Blocking GitHub is unjustifiable, and will only derail the nation's programmers from the world, while bringing about a loss in competitiveness and insight." Lee's post was shared over 80,000 times.<ref name="Kan-CW"/> However, this website is still blocked in [[Tibet Autonomous Region|Tibet]] and [[Xinjiang]] Autonomous Regions.<br />
<br />
''The Next Web'' called the block unfortunate, saying that "Chinese developers will have to play around with workarounds or find an alternative service when they want to work with their peers around the world."<ref name="Protalinski-TC"/><br />
<br />
=== MITM attack ===<br />
<br />
==== Attack ====<br />
[[File:Jan 26 Safari GitHub China MITM.jpg|thumb|left|alt="Safari can't verify the identity of the website github.com."|An example of the warning users in China received from browsers when trying to access GitHub with the self-signed certificate]]<br />
On January 26, 2013, GitHub users in China experienced a [[man-in-the-middle attack]] in which attackers could have intercepted traffic between the site and its users in China. The mechanism of the attack was through a fake [[SSL certificate]].<ref name="claburn-IW">{{cite web|last1=Claburn|first1=Thomas|title=China's GitHub Censorship Dilemma|url=https://www.informationweek.com/software/social/chinas-github-censorship-dilemma/d/d-id/1108436|website=InformationWeek|date=January 30, 2013|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150703100130/http://www.informationweek.com/software/social/chinas-github-censorship-dilemma/d/d-id/1108436|archive-date=3 July 2015|url-status=live}}</ref> Users attempting to access GitHub received a warning of an invalid SSL certificate, which, due to being signed by an [[Self-signed certificate|unknown authority]], was quickly detected.<ref name="martin-GF">{{cite web|author=martin|title=China, GitHub and the man-in-the-middle|url=https://en.greatfire.org/blog/2013/jan/china-github-and-man-middle|website=GreatFire|date=January 30, 2013|access-date=27 June 2015|archive-url=https://web.archive.org/web/20160819165216/https://en.greatfire.org/blog/2013/jan/china-github-and-man-middle|archive-date=19 August 2016|url-status=live}}</ref> A spokesperson for GitHub said: "Early last week, it appeared that GitHub was being at least partially blocked by the Great Firewall of China... After a couple days, it appeared that GitHub was no longer being blocked."<ref name="claburn-IW"/> NETRESEC performed forensics of the attack and determined that it was indeed an attack, due to the large number of [[Hop (networking)|router hops]] involved (6) and because the user submitting the [[pcap|packet capture]] was from China.<ref>{{cite web|last1=Hjelmvik|first1=Erik|title=Forensics of Chinese MITM on GitHub|url=https://www.netresec.com/?page=Blog&month=2013-02&post=Forensics-of-Chinese-MITM-on-GitHub|website=NETRESEC Blog|date=February 2, 2013|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150630120918/http://www.netresec.com/?page=Blog&month=2013-02&post=Forensics-of-Chinese-MITM-on-GitHub|archive-date=30 June 2015|url-status=live}}</ref> <br />
<br />
This attack was performed again on March 26, 2020 on GitHub Pages and March 27, 2020 on GitHub.com.<ref>{{cite web|title=Hacker is deploying large-scale MITM attack via domestic backbone|url=https://www.landiannews.com/archives/71707.html|date=27 March 2020|access-date=27 March 2020|archive-url=https://web.archive.org/web/20200326164214/https://www.landiannews.com/archives/71707.html|archive-date=26 March 2020|url-status=live}}</ref><ref>{{Cite web|url=https://www.oschina.net/news/114402/git-mitm|title=GitHub 遭遇中间人攻击,访问报证书错误 - OSCHINA|website=www.oschina.net|access-date=2020-03-27}}</ref><br />
<br />
==== Rationale ====<br />
[[GreatFire]] speculated that the attack was related to a popular [[White House petition]] calling for the denial of entry to the United States of the architects of the [[Great Firewall of China]].<ref name="martin-GF"/> The petition linked to a [[Gist (GitHub)|Gist]] containing names of 3 of the architects and their contact information.<ref name="muncaster-TR">{{cite web|last1=Muncaster|first1=Phil|title=Great Firewall architects fingered for GitHub attack|url=https://www.theregister.co.uk/2013/01/31/github_ssl_man_in_the_middle_attack|website=The Register|date=January 31, 2013|access-date=27 June 2015|archive-url=https://web.archive.org/web/20150630072146/http://www.theregister.co.uk/2013/01/31/github_ssl_man_in_the_middle_attack|archive-date=30 June 2015|url-status=live}}</ref> GreatFire also said that since GitHub is [[HTTPS]] only, Chinese authorities can't block individual pages and have to completely block the website, which helps explain why they would have to resort to the attack.<ref name="martin-GF"/> ''[[InformationWeek]]'' noted the economic difficulty related to blocking GitHub: "What makes GitHub interesting from a censorship point of view is that it combines a critical business service—collaborative coding—with social interaction."<ref name="claburn-IW"/><!--Another source: https://en.greatfire.org/blog/2013/jan/github-blocked-china-how-it-happened-how-get-around-it-and-where-it-will-take-us--><br />
<br />
=== DDoS attack ===<br />
{{Expand section|1=[[{{TALKPAGENAME}}#Sources for DDOS attack|See talk page]]|date=June 2015}}<br />
On March 26, 2015, GitHub was the target of a [[distributed denial-of-service]] (DDoS) attack originating from China. It targeted two anti-censorship projects: GreatFire and cn-nytimes, the latter including instructions on how to access the Chinese version of ''[[The New York Times]]''.<ref>{{cite web|last1=Anthony|first1=Sebastian|title=GitHub battles "largest DDoS" in site's history, targeted at anti-censorship tools|url=https://arstechnica.com/information-technology/2015/03/github-battles-largest-ddos-in-sites-history-targeted-at-anti-censorship-tools/|website=ars technica|date=March 30, 2015|access-date=1 January 2019|archive-url=https://web.archive.org/web/20190102052158/https://arstechnica.com/information-technology/2015/03/github-battles-largest-ddos-in-sites-history-targeted-at-anti-censorship-tools/|archive-date=2 January 2019|url-status=live}}</ref> GitHub blocked China-based IP addresses from visiting these repositories. If a visitor comes from China, the page would show "Repository unavailable because of the Chinese Internet Blacklist". Based on GitHub, they are doing this so "that our users in that jurisdiction may continue to have access to GitHub to collaborate and build software." <ref>{{cite web |url= https://qz.com/718465/chinas-fierce-censors-try-a-new-tactic-with-github-asking-nicely/ |title= China's fierce censors try a new tactic with GitHub—asking nicely |last= Horwitz |first= Josh |date= June 28, 2016 |website= Quartz |access-date= 25 December 2020 }}</ref> They are now having a gov-takedowns repository to record all the government requirements they could show. <ref>{{cite web |url= https://github.com/github/gov-takedowns |title= gov-takedowns |last= hubot |publisher= GitHub |access-date= 25 December 2020 }}</ref><br />
<br />
== India ==<br />
{{main|Internet censorship in India}}<br />
<br />
India selectively censors websites at the federal and state levels. This is enforced by the [[Information Technology Act, 2000]], as well as licensing requirements for [[Internet service provider]]s (ISPs). Critics such as [[Rajeev Chandrasekhar]] have noted the vagueness of these regulations and the [[Centre for Internet and Society (India)|Centre for Internet and Society]] found that ISPs tended to over-comply with takedown requests.<ref>{{cite web|last1=Patry|first1=Melody|title=India: Digital freedom under threat? Online censorship|url=http://www.indexoncensorship.org/2013/11/india-online-report-freedom-expression-digital-freedom-1|website=index|date=November 21, 2013|access-date=2 April 2015|archive-url=https://web.archive.org/web/20161104152902/https://www.indexoncensorship.org/2013/11/india-online-report-freedom-expression-digital-freedom-1/|archive-date=4 November 2016|url-status=live}}</ref><br />
<br />
=== ISP blockage ===<br />
On December 17, 2014, the [[Department of Telecommunications|Indian Department of Telecom]] issued an order to ISPs to block 32 websites.<ref name=Saxena-TOI>{{cite web|last1=Saxena|first1=Anupam|title=Pastebin, Dailymotion, Github blocked after DoT order: Report|url=http://timesofindia.indiatimes.com/tech/tech-news/Pastebin-Dailymotion-Github-blocked-after-DoT-order-Report/articleshow/45701713.cms|website=The Times of India|date=December 31, 2014|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150302071856/http://timesofindia.indiatimes.com/tech/tech-news/Pastebin-Dailymotion-Github-blocked-after-DoT-order-Report/articleshow/45701713.cms|archive-date=2 March 2015|url-status=live}}</ref> The notice was made public on December 31, 2014 and it included GitHub, GitHub's [[Gist (GitHub)|Gist]], [[Vimeo]], the [[Internet Archive]], and various [[pastebin]] services.<ref name="blue-ZDN">{{cite web|last1=Blue|first1=Violet|title=India blocks 32 websites, including GitHub, Internet Archive, Pastebin, Vimeo|url=https://www.zdnet.com/article/india-blocks-32-websites-including-github-internet-archive-pastebin-vimeo/|website=ZDNet|date=December 31, 2014|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150402065723/http://www.zdnet.com/article/india-blocks-32-websites-including-github-internet-archive-pastebin-vimeo/|archive-date=2 April 2015|url-status=live}}</ref><br />
<br />
{{Quote box<br />
| title = Direction to block Internet Website<br />
| quote = To: All Internet Service Licensees<br />
<br/>Under the powers conferred by Section 69A of the Information Technology Act, 2000 and under the Information Technology (Procedures and Safeguards for Blocking of Access of Information by Public) Rules, 2009, it has been decided to immediately block the access to the following 32 URLs:...<br />
| source = [[Department of Telecommunications]]<ref name="blue-ZDN"/><br />
| width = 30%<br />
| align = left<br />
| salign = right<br />
}}<br />
<br />
The block order was confirmed on [[Twitter]] by Arvind Gupta, the national head of the ruling party [[BJP]], and was attributed to a suggestion by India's [[Anti Terrorist Squad (India)|Anti Terrorism Squad]] in response to content by the [[Islamic extremist]] group [[ISIS]]. Gupta also stated that websites that cooperated with the investigation were being unblocked.<ref>{{cite web|last1=Ghoshal|first1=Abhimanyu|title=GitHub, Vimeo and 30 more sites blocked in India over content from ISIS|url=https://thenextweb.com/in/2014/12/31/vimeo-github-30-sites-blocked-india-content-isis|website=The Next Web|date=December 31, 2014|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150404055942/http://thenextweb.com/in/2014/12/31/vimeo-github-30-sites-blocked-india-content-isis/|archive-date=4 April 2015|url-status=live}}</ref><br />
<br />
On January 2, 2015, the [[Ministry of Communications and Information Technology (India)|Ministry of Communications]] issued a statement that it will be unblocking 4 of the websites, including GitHub's Gist, and said that it will consider unblocking the remaining websites once they complied. Explaining its rationale, the ministry stated: "Many of these websites do not require any authentication for pasting any material on them... These websites were being used frequently for pasting, communicating [jihadi] content..."<ref name=Sharma-TOI>{{cite web|last1=Sharma|first1=Ravi|title=Indian government unblocks Vimeo, Dailymotion, 2 other websites|url=http://timesofindia.indiatimes.com/tech/tech-news/Indian-government-unblocks-Vimeo-Dailymotion-2-other-websites/articleshow/45731251.cms|website=The Times of India|date=January 2, 2015|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150208102100/http://timesofindia.indiatimes.com/tech/tech-news/Indian-government-unblocks-Vimeo-Dailymotion-2-other-websites/articleshow/45731251.cms|archive-date=8 February 2015|url-status=live}}</ref> Gulshan Rai of the [[CERT-In]] agency of the ministry said that the order came from the Mumbai Additional Chief Metropolitan Magistrate following an interrogation of Arif Majeed, an ISIS recruit.<ref name=Arora-TOI>{{cite web|last1=Arora|first1=Kim|title=Government blocks 32 websites to check ISIS propaganda|url=http://timesofindia.indiatimes.com/tech/tech-news/Government-blocks-32-websites-to-check-ISIS-propaganda/articleshow/45712815.cms?|website=The Times of India - Tech|date=January 1, 2015|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150104134659/http://timesofindia.indiatimes.com/tech/tech-news/Government-blocks-32-websites-to-check-ISIS-propaganda/articleshow/45712815.cms|archive-date=4 January 2015|url-status=live}}</ref><br />
<br />
On January 4, 2015, a GitHub spokesperson said that some users were still having trouble accessing the site and that GitHub has attempted to reach out to the Indian government, but is still unclear about the cause of the block. They said that restoring access to the developer community in India was their top priority and that they "would like to work with the Indian government to establish a transparent process for identifying unlawful content, restore access, and ensure that GitHub continues to remain available in the future without interruption."<ref>{{cite web|last1=Orsini|first1=Lauren|title=India Unblocks GitHub, Three Other Websites|url=https://readwrite.com/2015/01/02/india-lifts-internet-block-github/|website=readwrite|date=January 2, 2015|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150320205330/http://readwrite.com/2015/01/02/india-lifts-internet-block-github|archive-date=20 March 2015|url-status=live}}</ref><br />
<br />
=== Impact ===<br />
''[[The Times of India]]'' reported blockage for Indian users by the ISPs [[Vodafone]], [[BSNL]] and [[Hathway]], but it still had access using [[Airtel]].<ref name=Saxena-TOI/> Because the order only told ISPs what to block and not how, the effectiveness of blocking access varied. The blocking was unreliable and seemed to be occurring at multiple layers, even within the same ISP. Blocking methods included [[IP blocking]], the use of a [[proxy server]], and [[DNS blocking]]. Methods for gaining access ranged from using an [[Internet censorship circumvention#Alternative DNS Servers|alternate DNS server]] to installing [[Internet censorship circumvention#Software|circumvention software]].<ref>{{cite web|last1=Srikanth|first1=Kaustubh|title=Technical Observations About Recent Internet Censorship In India|url=https://www.huffingtonpost.in/kaustubh-srikanth/technical-observations-ab_b_6421306.html|website=The Huffington Post|date=June 1, 2015|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150521194154/http://www.huffingtonpost.in/kaustubh-srikanth/technical-observations-ab_b_6421306.html|archive-date=21 May 2015|url-status=live}}</ref><br />
<br />
=== Criticism ===<br />
[[File:GOIBlocks protest poster fsftn.png|thumb|right|alt=Silhouettes of GitHub's Octocat and the Vimeo logo with the word "blocked" inside them, along with a description of the block|A poster by the [[Free Software Foundation Tamil Nadu]] protesting the blocks using the [[hashtag]] #GOIBlocks]]<br />
<br />
Regarding the blocks, [[TechCrunch]] remarked that "[the] addition of GitHub... is one of the more head-scratching decisions" and anticipated an uproar considering its importance in the tech industry. They also called it embarrassing in the context of Prime Minister [[Narendra Modi]]'s [[Make in India]] campaign to promote India as a destination for [[information technology]].<ref>{{cite web|last1=Russell|first1=Jon|title=India's Government Asks ISPs To Block GitHub, Vimeo And 30 Other Websites (Updated)|url=https://techcrunch.com/2014/12/31/indian-government-censorsht/|website=TechCrunch|date=December 31, 2014|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150326020030/http://techcrunch.com/2014/12/31/indian-government-censorsht/|archive-date=26 March 2015|url-status=live}}</ref> Prasanth Sugathan of the Software Freedom and Law Center called the blocks short-sighted, saying that "If you block one website, terrorists can always use another one... Such a move only inconveniences the daily users..." Twitter users protested using the [[hashtag]] #GOIblocks and recirculated a hypocritical message by Modi from 2012 condemning blanket blocking of websites.<ref name=Arora-TOI/> [[anonymous (group)|Anonymous]] of India also posted several threats against the government, but did not take any action.<ref name=Sharma-TOI/><br />
<br />
{{Clear}}<br />
<br />
== Russia ==<br />
{{main|Internet censorship in Russia}}<br />
<br />
The Russian government [[blacklist]]s websites that include child pornography, drug-related material, advocacy of suicide, extremist material, and other illegal content under the [[Russian Internet Restriction Bill]] to protect children. This list is maintained by [[Roscomnadzor]], Russia's [[regulatory agency]].<ref>{{cite news|last1=Khazan|first1=Olga|title=Russia's secret new Internet blacklist|url=https://www.washingtonpost.com/blogs/worldviews/wp/2012/11/09/russias-secret-new-internet-blacklist|newspaper=The Washington Post|date=November 9, 2012|access-date=2 April 2015|archive-url=https://web.archive.org/web/20150511081411/http://www.washingtonpost.com/blogs/worldviews/wp/2012/11/09/russias-secret-new-internet-blacklist/|archive-date=11 May 2015|url-status=live}}</ref><br />
<br />
=== ISP blockage ===<br />
[[File:Github russia block.png|thumb|right|alt=A screenshot of the Firefox browser and an error message in Russian|The block message Russian GitHub users saw when trying to access the website on December 2, 2014{{efn| The text of the page consists of 4 reasons why the website breaks laws under the Russian Federation, and why therefore, the contents of the website are blocked.}}]]<br />
<br />
On December 2, 2014, Roscomnadzor blocked GitHub due to it hosting various copies of a suicide manual. Because GitHub uses [[HTTPS]], which encrypts data between a user's computer and GitHub's servers, [[Internet service providers]] (ISPs) were forced to block the whole website instead of the pages involved. Complying ISPs included: [[Beeline (brand)|Beeline]], [[MTS (network provider)|MTS]], [[MGTS]] and [[Megafon]]. Maxim Ksenzov, the Deputy Head of Roscomnadzor, said in a statement that the block was due to GitHub not complying with earlier [[Notice and take down|takedown requests]] for the manual on October 10, 2014.<ref>{{cite web|last1=Lunden|first1=Ingrid|title=Russia Blacklists, Blocks GitHub Over Pages That Refer To Suicide|url=https://techcrunch.com/2014/12/03/github-russia|website=TechCrunch|date=December 3, 2014|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150327101211/http://techcrunch.com/2014/12/03/github-russia/|archive-date=27 March 2015|url-status=live}}</ref> GitHub was also momentarily blocked on October 2, 2014 until the original copy of the manual was deleted by its uploader.<ref>{{cite web|last1=Лихачёв|first1=Никита|script-title=ru:AliExpress, 2ch и GitHub попали в реестр запрещённых сайтов|url=http://tjournal.ru/paper/rkn-github-2ch|website=TJournal|date=October 2, 2014|access-date=9 April 2015|language=ru|trans-title=AliExpress, 2ch and GitHub put on the register of banned sites|archive-url=https://web.archive.org/web/20150425013521/http://tjournal.ru/paper/rkn-github-2ch|archive-date=25 April 2015|url-status=live}}</ref><br />
<br />
=== Banned content ===<br />
The manual in question was posted on March 23, 2014, and details 31 methods of suicide in Russian.{{efn|The manual itself seems to be a translation of [http://www.depressed.net/suicide/suicidefaq/other.html a text] originating on [[Usenet]].}} It was added to a [[Repository (version control)|repository]] for a [[Library (computing)|software library]] used for working with [[NTFS|Windows filesystems]] and was [[Fork (software development)|forked]] by several users.<ref name="amdf-create">{{cite web|title=Create suicide.txt|url=https://github.com/amdf/objidlib/commit/e9c31e97c0ca7863516fa6e21c9f6441453d9149|website=GitHub - amdf/objidlib|date=March 23, 2014|access-date=8 April 2015|archive-url=https://web.archive.org/web/20150627095452/https://github.com/amdf/objidlib/commit/e9c31e97c0ca7863516fa6e21c9f6441453d9149|archive-date=27 June 2015|url-status=live}}</ref> The original copy was deleted by the owner on October 2, 2014 after numerous GitHub users complained because of a block by Roscomnadzor.{{efn|However, because the original was forked, and [[Git (software)|Git]] keeps a [[diff|history]] of changes, the file was still accessible on GitHub.}}<ref name="amdf-create"/><ref>{{cite web|title=Delete suicide.txt|url=https://github.com/amdf/objidlib/commit/643077865e390f1eccacf9620199772e1e468a4a|website=GitHub - amdf/objidlib|access-date=9 April 2015|archive-url=https://web.archive.org/web/20150627095712/https://github.com/amdf/objidlib/commit/643077865e390f1eccacf9620199772e1e468a4a|date=October 2, 2014|archive-date=27 June 2015|url-status=live}}</ref><br />
<br />
[[TechCrunch]] remarked that the manual seemed to be written as satire and includes methods such as "biting your tongue", "joining the military" or "getting a good gun" from a policeman.<ref name=Lunden-TC>{{cite web|last1=Lunden|first1=Ingrid|title=To Get Off Russia's Blacklist, GitHub Has Blocked Access To Pages That Highlight Suicide|url=https://techcrunch.com/2014/12/05/to-get-off-russias-blacklist-github-has-blocked-access-to-pages-that-highlight-suicide|website=TechCrunch|date=December 5, 2014|access-date=1 April 2015|archive-url=https://web.archive.org/web/20150321081034/http://techcrunch.com/2014/12/05/to-get-off-russias-blacklist-github-has-blocked-access-to-pages-that-highlight-suicide/|archive-date=21 March 2015|url-status=live}}</ref> The takedown targeted the manual and its copies, as well as a reposted blog entry about suicide.<ref>{{cite web|title=roskomnadzor/2014-10-21-roskomnadzor.md|url=https://github.com/github/roskomnadzor/blob/master/2014-10-21-roskomnadzor.md|website=GitHub|date=October 21, 2014|access-date=1 April 2015|archive-url=https://web.archive.org/web/20141205133607/https://github.com/github/roskomnadzor/blob/master/2014-10-21-roskomnadzor.md|archive-date=5 December 2014|url-status=live}}</ref><br />
<br />
=== Response ===<br />
GitHub complied and blocked access to the content within Russia saying that they were working to get reinstated. Citing its [[terms of service]], GitHub elaborated that "you must not, in the use of the Service, violate any laws in your jurisdiction (including but not limited to copyright or trademark laws)."<ref name=Lunden-TC/> GitHub also created an official repository titled "roskomnadzor" for the purpose of posting takedown notices from the regulator. (It was later moved to "gov-takedowns" after a request from China on June 9, 2016<ref>{{cite web|last1=Geraci|first1=Jesse|title=github/roskomnadzor - README.md|url=https://github.com/github/roskomnadzor/blob/master/README.md|website=GitHub|date=June 9, 2016|access-date=9 October 2016|archive-url=https://web.archive.org/web/20170615120448/https://github.com/github/roskomnadzor/blob/master/README.md|archive-date=15 June 2017|url-status=live}}</ref>) In the [[readme]] of the repository, GitHub states that they are concerned about Internet censorship and believe in transparency to document the potential for [[chilling effect]]s. They also warn that the presence of a notice is only for documentation and that GitHub does not pass any judgement on their validity.<ref>{{cite web|last1=Geraci|first1=Jesse|title=github/roskomnadzor - README.md|url=https://github.com/github/roskomnadzor/blob/8ae3b09df27f5f6984c57d84b1aa2f28ac6ad897/README.md#what-is-this|website=GitHub|date=February 20, 2015|access-date=9 October 2016|archive-url=https://web.archive.org/web/20170104165443/https://github.com/github/roskomnadzor/blob/8ae3b09df27f5f6984c57d84b1aa2f28ac6ad897/README.md#what-is-this|archive-date=4 January 2017|url-status=live}}</ref><br />
<br />
== Turkey ==<br />
{{see also|Internet censorship in Turkey}}<br />
[[File:October 9, 2016 GitHub Turkey block.jpg|thumb|Network measurements by Turkey Blocks confirming the time at which GitHub was blocked]]<br />
On October 8, 2016, following the leak of emails of Turkish Minister [[Berat Albayrak]] by [[RedHack]], the [[Information and Communication Technologies Authority]] (BTK) ordered ISPs to block several [[file sharing]] websites, including [[Dropbox (service)|Dropbox]], [[Microsoft OneDrive]], and [[Google Drive]].<ref>{{cite news|last1=Murdock|first1=Jason|title=Turkey blocks Google, Microsoft and Dropbox services to 'suppress' mass email leaks|url=https://www.ibtimes.co.uk/turkey-blocks-google-microsoft-dropbox-services-suppress-mass-email-leaks-1585655|date=October 10, 2016|access-date=10 October 2016|work=International Business Times|archive-url=https://web.archive.org/web/20161011055229/http://www.ibtimes.co.uk/turkey-blocks-google-microsoft-dropbox-services-suppress-mass-email-leaks-1585655|archive-date=11 October 2016|url-status=live}}</ref> The censorship monitoring watchdog [[Turkey Blocks]] observed that GitHub was blocked the following morning, and associated administrative orders were subsequently posted by the BTK stating that access had been officially restricted.<ref>{{cite web|title=Dropbox, Google Drive and Microsoft OneDrive cloud services blocked in Turkey following leaks|url=https://turkeyblocks.org/2016/10/08/google-drive-dropbox-blocked-in-turkey/|website=Turkey Blocks|date=October 8, 2016|access-date=9 October 2016|archive-url=https://web.archive.org/web/20161209235232/https://turkeyblocks.org/2016/10/08/google-drive-dropbox-blocked-in-turkey/|archive-date=9 December 2016|url-status=live}}</ref> Software that depended on GitHub reported errors, such as [[Font Awesome]] and [[Homebrew (package management software)|Homebrew]]. Participants in Startup Istanbul week also complained about the unavailability of infrastructure. The #GitHub [[hashtag]] became one of Twitter's top trends in Turkey. According to ''[[The Daily Dot]]'', RedHack purposefully spread the emails using multiple services, expecting Turkey to block them so that the [[Streisand effect]] could be utilized. GitHub was unblocked 18&nbsp;hours later.<ref>{{cite web|last1=Sozeri|first1=Efe Kerem|title=How hacktivist group RedHack gamed Turkey's censorship regime|url=https://www.dailydot.com/layer8/redhack-gamed-turkey-censorship/|website=Daily Dot|date=October 12, 2016|access-date=12 October 2016|archive-url=https://web.archive.org/web/20161013074044/http://www.dailydot.com/layer8/redhack-gamed-turkey-censorship/|archive-date=13 October 2016|url-status=live}}</ref><br />
<br />
== Notes ==<br />
{{notelist}}<br />
<br />
== References ==<br />
{{Reflist}}<br />
<br />
== External links ==<br />
* [https://blog.github.com/ GitHub blog]<br />
* [https://status.github.com/messages GitHub status messages] {{Webarchive|url=https://web.archive.org/web/20160702045342/https://status.github.com/messages |date=2016-07-02 }}<br />
* {{GitHub|github/gov-takedowns}}<br />
<br />
{{Censorship and websites}}<br />
<br />
[[Category:Internet censorship by organization|GitHub]]<br />
[[Category:GitHub]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Talk:Direct_Rendering_Infrastructure&diff=1107755277Talk:Direct Rendering Infrastructure2022-08-31T18:20:11Z<p>CodingKoopa: /* Modesetting DIX Display Driver */</p>
<hr />
<div>{{Talk header}}<br />
{{WikiProjectBannerShell|collapsed=yes|1=<br />
{{WikiProject Computing |class=Stub |importance= |free-software=yes |free-software-importance=Low |software=yes }}<br />
{{WikiProject Technology}}<br />
{{WikiProject Computer graphics}}<br />
{{WikiProject Computer science}}<br />
{{WikiProject Linux}}<br />
}}<br />
<br />
== Not always kernel modules for DRM ==<br />
For example on OpenBSD, there are no kernel modules, but there is DRI via some DRM compiled into the kernel: http://undeadly.org/cgi?action=article&sid=20081029164221 [[Special:Contributions/85.177.255.57|85.177.255.57]] ([[User talk:85.177.255.57|talk]]) 14:35, 1 January 2009 (UTC)<br />
<br />
== How widely supported? ==<br />
<br />
Are there video cards made at this point which are not supported by DRI under Linux? —[[User:Darxus|Darxus]] ([[User talk:Darxus|talk]]) 17:52, 14 November 2010 (UTC)<br />
<br />
== DRI is not a linux kernel feature ==<br />
<br />
Recently the article was added to the "Linux kernel features" category. Well, that is wrong. DRI is not in kernel space, [[Direct Rendering Manager]] is. DRI is the infrastructure --the glue-- between X Window, Mesa, and the 3D drivers, and lives in user space. DRM refers to the part of the drivers that lives in kernel space. --[[User:JavierCantero|JavierCantero]] ([[User talk:JavierCantero|talk]]) 15:04, 24 March 2014 (UTC)<br />
<br />
DRI is a interface of the X Server, not a "Interface of the Linux kernel". The DRI code lives in user space, in the internals of X Server (see http://cgit.freedesktop.org/xorg/xserver/tree/hw/xfree86/dri http://cgit.freedesktop.org/xorg/xserver/tree/hw/xfree86/dri2 and http://cgit.freedesktop.org/xorg/xserver/tree/dri3) and in Mesa, and is written by Keith Packard and other X devs, not by kernel developers. So please, stop associating it with the kernel. --[[User:JavierCantero|JavierCantero]] ([[User talk:JavierCantero|talk]]) 09:51, 16 April 2014 (UTC)<br />
<br />
== DRI verses Gallium3D ==<br />
<br />
This page and the [[Gallium3D]] page and the [[Mesa (computer graphics)|Mesa]] page all fail to say what the story is between these two driver api models. Questions I cannot answer from reading the text:<br />
<br />
Which one is newer? There are not enough dates on DRI article to figure this out.<br />
<br />
Which one is better? (Or a list of trade-offs)<br />
<br />
If Mesa was rewritten from scratch and only one of them could be used, and only present-day hardware was to be supported, which api would be used?<br />
<br />
The Mesa software renderer in in effect one of these, right? Is it DRI or Gallium3D?<br />
<br />
My guess is that Gallium3D is the newer one, but clarifying this would help a lot.<br />
[[User:Spitzak|Spitzak]] ([[User talk:Spitzak|talk]]) 17:06, 13 May 2016 (UTC)<br />
:That's mainly a fault of the Gallium3D page. Gallium3D is a new architecture for writing Mesa drivers, so it's a internal matter of Mesa not directly related to the DRI architecture (which works the same way with an old Mesa "native" driver or with a new Gallium3D one). That should be clear after reading the Mesa and Gallium3D pages (which by the way should be merged into one page) --[[User:JavierCantero|JavierCantero]] ([[User talk:JavierCantero|talk]]) 15:12, 18 May 2016 (UTC)<br />
<br />
::The Mesa page still talks about "DRI" and "Gallium3D" as alternative driver models. You seem to be saying that "DRI" is the OpenGL api. Are there perhaps 2 things called "DRI"?[[User:Spitzak|Spitzak]] ([[User talk:Spitzak|talk]]) 01:05, 19 May 2016 (UTC)<br />
<br />
:::The Mesa page is wrong, it's mixing concepts. See for example [https://blogs.igalia.com/itoral/2014/08/08/diving-into-mesa/ this] for a better explanation. About DRI: it's the technology that binds the direct rendering application and the X Server. DRI is sort of a "glue", distributed in several places including the client application, the X Server and even the kernel. DRI is not "the OpenGL API" but one of those pieces that form DRI is a driver (called the "DRI driver") that is wrapped to look like an OpenGL library to the client application using it (see what I've added to this article for a more detailed explanation). Mesa is where those "DRI drivers" live, but Mesa also implements OpenGL using other methods (like software rendering) that don't access to the hardware of a video card and therefore they are not DRI drivers. There are DRI drivers that are implemented using the Gallium3D architecture (such as nouveau and radeonSI) but there are also Gallium3D software rendered drivers such as swrast and llvmpipe. On the other hand there is the "classic" (not Gallium3D) intel DRI driver and the classic software rendering (non-DRI) implementation &mdash;the original one that Brian Paul wrote. In short, the concepts DRI/non-DRI and classic/Gallium3D are orthogonal. --[[User:JavierCantero|JavierCantero]] ([[User talk:JavierCantero|talk]]) 09:22, 19 May 2016 (UTC)<br />
:::I've modified the [[Mesa (computer graphics)]] page, but maybe we should copy this conversation into [[Talk:Mesa (computer graphics)]] to show the reason for the change --[[User:JavierCantero|JavierCantero]] ([[User talk:JavierCantero|talk]]) 09:44, 19 May 2016 (UTC)<br />
<br />
== Modesetting DIX Display Driver ==<br />
The current page incarnation ignores existence of the modesetting DIX display driver. The DIX is hardware independent, and has been around something like 8 or more years, initially available in xf86-video-modesetting package, which was later merged into xorg-x11-server to serve as the default display driver. It can be used in place of any supported DDX that has KMS support, which includes most non-ancient devices from AMD, Intel and NVidia, among others. [[User:Mrmazda|Mrmazda]] ([[User talk:Mrmazda|talk]]) 05:16, 31 August 2022 (UTC)<br />
<br />
:For inspiration: [[X.Org Server#Glamor]] describes Glamor, the backend for modesetting's hardware independent DDX for translating Xorg render calls to OpenGL commands. -- [[User:CodingKoopa|CodingKoopa]] ([[User talk:CodingKoopa|talk]]) 18:19, 31 August 2022 (UTC)</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Program_database&diff=1083128701Program database2022-04-17T06:07:42Z<p>CodingKoopa: PDB should no longer be deemed proprietary, now that Microsoft has released most of their PDB code, and is blessing Clang's implementation.</p>
<hr />
<div>{{no footnotes|date=June 2013}}<br />
{{Infobox file format<br />
| name = Program database<br />
| icon = <br />
| logo = <br />
| screenshot = <br />
| caption = <br />
| extension = .pdb<br />
| mime = <br />
| type code = <br />
| uniform type = <br />
| magic = <br />
| owner = [[Microsoft]]<br />
| released = <br />
| latest release version = <br />
| latest release date = <br />
| genre = [[Debug]]<br />
| container for = <br />
| contained by = <br />
| extended from = <br />
| extended to = <br />
| standard = <br />
| url = <br />
}}<br />
{{hatnote|Not to be confused with [[Protein database (disambiguation)|Protein database]] (also abbreviated as PDB)}}<br />
'''Program database''' ('''PDB''') is a file format (developed by [[Microsoft]]) for storing debugging information about a program (or, commonly, program modules such as a [[Dynamic-link library|DLL]] or [[EXE]]). PDB files commonly have a .pdb [[filename extension|extension]]. A PDB file is typically created from source files during compilation. It stores a list of all [[Symbol (computing)|symbols]] in a module with their addresses and possibly the name of the file and the line on which the symbol was declared. This symbol information is not stored in the module itself, because it takes up a lot of space. <br />
<br />
== Applications ==<br />
When a program is debugged, the debugger loads debugging information from the PDB file and uses it to locate symbols or relate current execution state of a program source code. [[Microsoft Visual Studio]] uses PDB files as its primary file format for debugging information. <br />
<br />
Another use of PDB files is in services that collect crash data from users and relate it to the specific parts of the source code that cause (or are involved in) the crash.<br />
<br />
Microsoft compilers will, under appropriate options, store information in a single PDB about types found in the compiled sources. Debug information specific to each source is stored in the compiled object file, and contains references to types in the PDB. Each compilation will add to the PDB any types that are not already found there, so that references in already compiled object files remain valid.<br />
<br />
The Microsoft linker, under appropriate options, builds a complete new PDB which combines the debug information found in its input modules, the types referenced by those modules, and other information generated by the linker. If the link is performed incrementally, an existing PDB is modified by adding replacing only the information pertaining to added or replaced modules, and adding any new types not already in the PDB. <br />
<br />
PDB files are usually removed from the programs' distribution package. They are used by developers during debugging to save time and gain insight.<br />
<br />
== Extracting information ==<br />
The PDB format is documented [https://github.com/Microsoft/microsoft-pdb here], information can be extracted from a PDB file using the DIA (Debug Interface Access) interfaces, available on [[Microsoft Windows]]. There are also third-party tools that can also extract information from PDB such as [[radare2]] and [https://github.com/moyix/pdbparse pdbparse]<br />
<br />
== Multiple stream format ==<br />
The PDB is a single file which is logically composed of several sub-files, called '''streams'''. It is designed to optimize the process of making changes to the PDB, as performed by compiles and incremental links. Streams can be removed, added, or replaced without rewriting any other streams, and the changes to the metadata which describes the streams is minimized as well.<br />
<br />
The PDB is organized in fixed-size '''pages''', typically 1K, 2K, or 4K, numbered consecutively starting at 0.<br />
<br />
<small>''Note'': It is presumed that all numeric information (''e.g.,'' stream and page numbers) is stored in little-endian form, the native form for Intel x86 based processors. The pdbparse Python code makes this assumption.</small><br />
<br />
=== Stream ===<br />
Each stream in the PDB occupies several pages, which aren't necessarily consecutively numbered. The stream has a number and a length. The stream content is the concatenation of its pages, truncated to the stream's length.<br />
<br />
=== Metadata format ===<br />
The function of the PDB metadata is to identify all of the component streams, giving the length, and sequence of pages for each stream. Streams are numbered consecutively starting with 0. There is also a root stream, unnumbered, which contains some of the metadata.<br />
<br />
==== Header ====<br />
The PDB begins with a header, consisting of:<br />
* Signature, used to identify and validate the specific format. The length of the signature varies with the specific format.<br />
* The remainder of the header varies with the format identified by the signature.<br />
The header may be longer than a single page.<br />
<br />
Microsoft tools use two PDB formats:<br />
<br />
<br />
* <br />
* <br />
* <br />
* <br />
* <br />
<br />
==== Version 7 ====<br />
Signature is <code>"Microsoft C/C++ MSF 7.00\r\n\x1ADS\0\0\0"</code>(32 bytes).<br />
<br />
Remainder of the header consists of:<br />
* Page size, 4 bytes.<br />
* Allocation table pointer, 4 bytes. The meaning of this is unknown. There appears to be an allocation table, an array of 65,536 bits (8,192 bytes), located at the end of the PDB, and a 1-bit means a page that is not being used.<br />
* Number of file pages, 4 bytes.<br />
* Root stream size, 4 bytes.<br />
* reserved, 4 bytes.<br />
* Page number of the Root stream page number list. It does not indicate the location of the Root stream itself, only of the page containing the structure which points to its pages. At that page, the Root stream page number list indicates the pages where the Root stream is stored. It contains 4 bytes per page, enough to cover the above Root stream size.<br />
<br />
==== Root stream ====<br />
The root stream describes all of the PDB streams starting with stream 0. Its contents vary with the PDB format version.<br />
<br />
===== Version 2 =====<br />
<br />
The root stream consists of:<br />
* Number of streams, 2 bytes.<br />
* Reserved, 2 bytes.<br />
* For each stream:<br />
** Stream size, 4 bytes.<br />
** Reserved, 4 bytes.<br />
* For each stream:<br />
** Stream page number list, 2 bytes per page, enough to cover above stream size.<br />
<br />
===== Version 7 =====<br />
The root stream consists of:<br />
* Number of streams, 4 bytes.<br />
* For each stream:<br />
** Stream size, 4 bytes.<br />
* For each stream:<br />
** Stream page number list, 4 bytes per page, enough to cover above stream size.<br />
<br />
==== Stream contents ====<br />
Microsoft tools store different sorts of information in different numbered streams. Some stream numbers have a fixed information type associated with them, and other streams are identified in the aforementioned fixed type streams.<br />
<br />
'''Stream 1''' is used to verify that the PDB is the same file referred to in an executable or object file stream.<br />
* Version, 4 bytes.<br />
* Time date stamp, 4 bytes.<br />
* Age, 4 bytes. This is the number of times this PDB has been modified since its creation.<br />
* GUID, 16 bytes.<br />
* Total length of following names, 4 bytes. Followed by null-terminated character strings.<br />
'''Stream 2''' and '''stream 4''' hold types information. Actual type records define types used in the program. The structure of these records can be found in the file cvinfo.h provided by Microsoft. There are two flavors of records, each with its own set of index numbers: type IDs and types; only types are stored in stream 2 and only type IDs are stored in stream 4. The indices are used to refer to these records from within symbol records and other type records.<br />
* A header:<br />
** Version, 4 bytes.<br />
** Header size, 4 bytes.<br />
** Minimum and maximum (last + 1) index for type records (4 bytes each).<br />
** Size of following data, 4 bytes, to the end of the stream.<br />
* Hash information:<br />
** Stream number, 2 bytes with 2 bytes padding.<br />
** Hash key, 4 bytes.<br />
** Buckets, 4 bytes.<br />
** HashVals, TiOff, and HashAdj, each composed of an offset and length, each 4 bytes.<br />
* Type records, variable length, count = (maximum - minimum) from above header.<br />
'''Stream 3''' is a directory for other streams. Note, it is not present in Version 2, nor in a PDB produced by a compiler. The stream starts with a header which is padded to be 64 bytes in total<br />
{| class="wikitable"<br />
|+PDB Stream 3 Header (struct NewDBIHdr)[https://github.com/Microsoft/microsoft-pdb/blob/master/PDB/dbi/dbi.h]<br />
!Offset<br />
!Size<br />
!Name<br />
!Description<br />
|-<br />
|0<br />
|4<br />
|Signature<br />
|Header identifier, == 0xFFFFFFFF<br />
|-<br />
|4<br />
|4<br />
|HeaderVersion<br />
|Version of the Header<br />
|-<br />
|8<br />
|4<br />
|Age<br />
|<br />
|-<br />
|12<br />
|2<br />
|snGSSyms<br />
|<br />
|-<br />
|14<br />
|2<br />
|usVerAll<br />
| <syntaxhighlight lang="c" line><br />
union {<br />
struct {<br />
USHORT usVerPdbDllMin : 8; // minor version and<br />
USHORT usVerPdbDllMaj : 7; // major version and<br />
USHORT fNewVerFmt : 1; // flag telling us we have rbld stored elsewhere (high bit of original major version)<br />
} vernew; // that built this pdb last.<br />
struct {<br />
USHORT usVerPdbDllRbld: 4;<br />
USHORT usVerPdbDllMin : 7;<br />
USHORT usVerPdbDllMaj : 5;<br />
} verold;<br />
USHORT usVerAll;<br />
};</syntaxhighlight><br />
|-<br />
|16<br />
|2<br />
|snPSSyms<br />
|<br />
|-<br />
|18<br />
|2<br />
|usVerPdbDllBuild<br />
|build version of the pdb dll that built this pdb last<br />
|-<br />
|20<br />
|2<br />
|snSymRecs<br />
|<br />
|-<br />
|22<br />
|2<br />
|VerPdbDllRBld<br />
|rbld version of the pdb dll that built this pdb last<br />
|-<br />
|24<br />
|4<br />
|cbGpModi<br />
|size of rgmodi substream<br />
|-<br />
|28<br />
|4<br />
|cbSC<br />
|size of Section Contribution substream<br />
|-<br />
|32<br />
|4<br />
|cbSecMap<br />
|size of section map<br />
|-<br />
|36<br />
|4<br />
|cbFileInfo<br />
|size of file info stream<br />
|-<br />
|40<br />
|4<br />
|cbTSMap<br />
|size of the Type Server Map substream<br />
|-<br />
|44<br />
|4<br />
|iMFC<br />
|MFC Index<br />
|-<br />
|48<br />
|4<br />
|cbDbgHdr<br />
|size of optional DbgHdr info appended to the end of the stream<br />
|-<br />
|52<br />
|4<br />
|cbECInfo<br />
|number of bytes in EC substream, or 0 if no EC enabled Mods<br />
|-<br />
|56<br />
|2<br />
|flags<br />
| <syntaxhighlight lang="c" line><br />
struct _flags {<br />
USHORT fIncLink:1; // true if linked incrmentally (really just if ilink thunks are present)<br />
USHORT fStripped:1; // true if PDB::CopyTo stripped the private data out<br />
USHORT fCTypes:1; // true if this PDB is using CTypes.<br />
USHORT unused:13; // reserved, must be 0.<br />
} flags;</syntaxhighlight><br />
|-<br />
|58<br />
|2<br />
|wMachine<br />
|Machine identifier, same as used in COFF object format, ''e.g.,'' hex 8664 for Intel x86 64-bit<br />
|-<br />
|60<br />
|4<br />
|RESERVED<br />
|future expansion, pad to 64 bytes<br />
|}<br />
<br />
* Module information, variable length. Total size in above header. There is one of these for each object module used by the linker<br />
** Opened, 4 bytes.<br />
** Symbol info.<br />
*** Section number, 2 bytes + 2 bytes padding.<br />
*** Offset and size, 4 bytes each.<br />
*** Flags, 4 bytes.<br />
*** Module number, 2 bytes + 2 bytes padding.<br />
*** CRCs for section data and relocations data, 4 bytes each.<br />
** Flags, 2 bytes.<br />
** Stream number, 2 bytes.<br />
** Symbols size, 4 bytes.<br />
** Old and new line number info sizes, 4 bytes each.<br />
** Number of source files, 2 bytes + 2 bytes padding.<br />
** Offsets, 4 bytes.<br />
** niSource and niCompiler, 4 bytes each.<br />
** Module name, null terminated byte string.<br />
** Object name, null terminated byte string.<br />
** Padding to multiple of 4 bytes.<br />
* Section contributions, section headers, file info, ts map, and EC info. Their sizes are found in the above header.<br />
* Debug header,<br />
** Stream numbers for Old Frame Pointer Omission, Exceptions, Fixups, Object Maps to and from Source, Section Headers, Token Ring IDs, Xdata, Pdata, New Frame Pointer Omission, and Section Header Origin. 2 bytes each.<br />
<br />
== See also ==<br />
*[[Debug symbol]]<br />
<br />
== External links ==<br />
* The PDB format is documented here [https://github.com/Microsoft/microsoft-pdb Information from Microsoft about the PDB format.]<br />
* [http://msdn.microsoft.com/en-us/library/t6tay6cz.aspx Microsoft MSDN documentation on DIA]<br />
* [http://www.codeproject.com/KB/bugs/PdbParser.aspx How To Inspect the Content of a Program Database (PDB) File]<br />
* [http://msdn.microsoft.com/en-us/library/ff558825(v=vs.85).aspx Symbols and Symbol Files, MSDN]<br />
* [https://blogs.msdn.microsoft.com/vcblog/2016/02/08/whats-inside-a-pdb-file/ What’s inside a PDB File? / Visual C++ Team Blog]<br />
* [https://llvm.org/docs/PDB/index.html PDB structure according to LLVM]<br />
[[Category:Debugging data formats]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Direct_Rendering_Infrastructure&diff=1081684261Direct Rendering Infrastructure2022-04-09T00:16:33Z<p>CodingKoopa: Rewrite intro sentence. Despite what the homepage says, the DRI is not exclusive to the X Windows System. Though X is pertinent to the history of DRI, DRI now does serve both X and Wayland.</p>
<hr />
<div>{{short description|Framework}}<br />
{{Infobox Software<br />
| name = DRI<br />
| title = DRI-1.0<br />
| logo = <br />
| screenshot = <br />
| caption = <br />
| author = Precision Insight, Tungsten Graphics<br />
| developer = [[freedesktop.org]]<br />
| released = {{start date and age|1998|08}}<ref name="DRI history">{{cite web|last1=Owen|first1=Jens|title=The DRI project history|url=https://dri.freedesktop.org/wiki/DriHistory/|website=DRI project wiki|access-date=16 April 2016}}</ref><br />
| latest release version = 2.4.x<br />
| latest release date = February 2009<br />
| programming language = [[C (programming language)|C]]<br />
| operating system =<br />
| platform = [[POSIX]]<br />
| size =<br />
| genre = [[Software framework|Framework]] / [[Application programming interface|API]]<br />
| license = [[MIT license|MIT]] and other licenses<ref name="Mesa DRI License">[http://www.mesa3d.org/license.html Mesa DRI License] / Copyright Information - The Mesa 3D Graphics Library</ref><br />
| website = {{URL|https://dri.freedesktop.org}}<br />
}}<br />
{{Infobox Software<br />
| name = DRI<br />
| title = DRI-2.0<br />
| logo =<br />
| screenshot =<br />
| caption =<br />
| author = [[Kristian Høgsberg]] et al.<br />
| developer = [[freedesktop.org]]<br />
| released = {{start date and age|2008|09|04}}<ref name="dri2proto spec 2.0" /><br />
| latest release version = 2.8<br />
| latest release date = {{start date and age|2012|07|11}}<ref name="dri2proto 2.8" /><br />
| latest preview version =<br />
| latest preview date =<br />
| programming language = [[C (programming language)|C]]<br />
| operating system = <br />
| platform = [[POSIX]]<br />
| size = <br />
| genre = [[Software framework|Framework]] / [[Application programming interface|API]]<br />
| license = [[MIT license|MIT]] and other licenses<ref name="Mesa DRI License"/><br />
| website = {{URL|https://dri.freedesktop.org}}<br />
}}<br />
{{Infobox Software<br />
| name = DRI<br />
| title = DRI-3.0<br />
| logo =<br />
| screenshot =<br />
| caption = <br />
| author = [[Keith Packard]] et al.<br />
| developer = [[freedesktop.org]]<br />
| released = {{start date and age|2013|11|01}}<ref name="dri3proto 1.0" /><br />
| latest release version = 1.0<br />
| latest release date = {{start date and age|2013|11|01}}<ref name="dri3proto 1.0" /><br />
| latest preview version =<br />
| latest preview date =<br />
| programming language = [[C (programming language)|C]]<br />
| operating system = <br />
| platform = [[POSIX]]<br />
| size = <br />
| genre = [[Software framework|Framework]] / [[Application programming interface|API]]<br />
| license = [[MIT license|MIT]] and other licenses<ref name="Mesa DRI License"/><br />
| website = {{URL|https://dri.freedesktop.org}}<br />
}}<br />
[[File:Linux Graphics Stack 2013.svg|thumb|300px|There are two graphics hardware drivers: one resides inside of the X [[display server]]. There have been several designs of this driver. The current one splits it in two portions: DIX (Device-Independent X) and DDX (Device-Dependent X)]]<br />
[[File:The Linux Graphics Stack and glamor.svg|thumb|300px|[[Glamor (software)|Glamor]] will simplify the [[X.Org Server|X server]], and {{mono|[[AMD Catalyst|libGL-fglrx-glx]]}} could use the libDRM of the radeon open-source driver instead of the proprietary [[binary blob]].]]<br />
[[File:Linux kernel and OpenGL video games.svg|thumb|300px|[[Rendering (computer graphics)|Rendering]] calculations are outsourced over [[OpenGL]] to the [[Graphics processing unit|GPU]] to be done in real-time. The '''DRI''' regulates access and book-keeping.]]<br />
<br />
The '''Direct Rendering Infrastructure''' ('''DRI''') is the framework comprising the modern [[Linux]] graphics stack which allows unprivileged user-space programs to issue commands to [[graphics hardware]] without conflicting with other programs.<ref name="DRI wiki">{{cite web|title=Mesa 3D and Direct Rendering Infrastructure wiki|url=http://dri.freedesktop.org/wiki/|access-date=15 July 2014}}</ref> The main use of DRI is to provide hardware acceleration for the [[Mesa (computer graphics)|Mesa]] implementation of [[OpenGL]]. DRI has also been adapted to provide OpenGL acceleration on a [[Linux framebuffer|framebuffer console]] without a [[display server]] running.<ref>{{cite web|url=http://fbdri.sourceforge.net/|title=DRI for Framebuffer Consoles|access-date=January 4, 2019}}</ref><br />
<br />
DRI implementation is scattered through the [[X.Org Server|X Server]] and its associated client libraries, [[Mesa 3D]] and the [[Direct Rendering Manager]] kernel subsystem.<ref name="DRI wiki" /> All of its [[source code]] is [[free software]].<br />
<br />
== Overview ==<br />
In the classic [[X Window System]] architecture the X Server is the only process with exclusive access to the [[video card|graphics hardware]], and therefore the one which does the actual [[Rendering (computer graphics)|rendering]] on the [[framebuffer]]. All that X clients do is communicate with the X Server to dispatch rendering commands. Those commands are hardware independent, meaning that the [[X Window System core protocol|X11 protocol]] provides an [[Application programming interface|API]] that abstracts the graphics device so the X clients don't need to know or worry about the specifics of the underlying hardware. Any hardware specific code lives inside the [[Device Dependent X]], the part of the X Server that manages each type of video card or graphics adapter and which is also often called the ''video'' or ''graphics driver''.<br />
<br />
The rise of [[3D rendering]] has shown the limits of this architecture. [[3D computer graphics software|3D graphics applications]] tend to produce large amounts of commands and data, all of which must be dispatched to the X Server for rendering. As the amount of [[inter-process communication]] (IPC) between the X client and X Server increased, the 3D rendering performance suffered to the point that X driver developers concluded that in order to take advantage of 3D hardware capabilities of the latest graphics cards a new IPC-less architecture was required. X clients should have direct access to graphics hardware rather than relying on a third party process to do so, saving all the IPC overhead. This approach is called "direct rendering" as opposed to the "indirect rendering" provided by the classical X architecture. The ''Direct Rendering Infrastructure'' was initially developed to allow any X client to perform 3D rendering using this "direct rendering" approach.<br />
<br />
Nothing prevents DRI from being used to implement accelerated 2D direct rendering within an X client.<ref name="dri2proto spec 2.0" /> Simply no one has had the need to do so because the 2D indirect rendering performance was good enough.<br />
<br />
== Software architecture ==<br />
The basic architecture of the Direct Rendering Infrastructure involves three main components:<ref name="Martin et all 1999 DRI low level">{{cite web|last1=Martin|first1=Kevin E.|last2=Faith|first2=Rickard E.|last3=Owen|first3=Jens|last4=Akin|first4=Allen|title=Direct Rendering Infrastructure, Low-Level Design Document|url=http://dri.sourceforge.net/doc/design_low_level.html|access-date=18 May 2016|date=11 May 1999}}</ref><br />
* the DRI client &mdash;an X client performing "direct rendering"&mdash; needs a hardware specific "driver" able to manage the current video card or graphics adapter in order to render on it. These ''DRI drivers'' are typically provided as [[shared libraries]] to which the client is [[Dynamic linker|dynamically linked]]. Since DRI was conceived to take advantage of 3D graphics hardware, the libraries are normally presented to clients as hardware accelerated implementations of a 3D API such as [[OpenGL]], provided by either the 3D hardware vendor itself or a third party such as the [[Mesa 3D]] [[free software]] project.<br />
* the X Server provides an [[X Window System core protocol|X11 protocol extension]] &mdash;the DRI extension&mdash; that the DRI clients use to coordinate with both the [[windowing system]] and the DDX driver.<ref name="DRI extension">{{cite web|last1=Owen|first1=Jens|last2=Martin|first2=Kevin|title=DRI Extension for supporting Direct Rendering - Protocol Specification|url=http://dri.sourceforge.net/doc/dri_extensions_low_level.txt|access-date=18 May 2016|date=11 May 1999}}</ref> As part of the DDX driver, it's quite common that the X Server process also dynamically links to the same DRI driver that the DRI clients, but to provide hardware accelerated 3D rendering to the X clients using the [[GLX]] extension for indirect rendering (for example remote X clients that can't use direct rendering). For 2D rendering, the DDX driver must also take into account the DRI clients using the same graphics device.<br />
* the access to the video card or graphics adapter is regulated by a kernel component called the [[Direct Rendering Manager]] (DRM).<ref name="Faith 1999">{{cite web|last1=Faith|first1=Rickard E.|title=The Direct Rendering Manager: Kernel Support for the Direct Rendering Infrastructure|url=http://dri.sourceforge.net/doc/drm_low_level.html|date=11 May 1999|access-date=18 May 2016}}</ref> Both the X Server's DDX driver and each X client's DRI driver must use DRM to access to the graphics hardware. DRM provides [[Synchronization (computer science)|synchronization]] to the shared resources of the graphics hardware &mdash;resources such as the command queue, the card registers, the video memory, the DMA engines, ...&mdash; ensuring that the concurrent access of all those multiple competing user space processes don't interfere with each other. DRM also serves as a basic security enforcer that doesn't allow any X client to access the hardware beyond what it needs to perform the 3D rendering.<br />
<br />
== DRI1 ==<br />
In the original DRI architecture, due to the memory size of [[video card]]s at that time, there was a single instance of the screen [[front buffer]] and [[back buffer]] (also of the ancillary [[depth buffer]] and [[stencil buffer]]), shared by all the DRI clients and the X Server.<ref name="Packard 2008" /><ref name="Packard 2009" /> All of them rendered directly onto the back buffer, that was [[Page flipping|swapped]] with the front buffer at [[vertical blanking interval]] time.<ref name="Packard 2008" /> In order to render to the back buffer, a DRI process should ensure that the rendering was [[Clipping (computer graphics)|clipped]] to the area reserved for its [[Window (computing)|window]].<ref name="Packard 2008" /><ref name="Packard 2009" /><br />
<br />
The [[Synchronization (computer science)|synchronization]] with the X Server was done through [[Unix signal|signals]] and a [[shared memory]] buffer called the SAREA.<ref name="Packard 2009" /> The access to the DRM device was exclusive, so any DRI client had to [[Lock (computer science)|lock]] it at the beginning of a [[Rendering (computer graphics)|rendering]] operation. Other users of the device &mdash;including the X Server&mdash; were blocked in the meantime, and they had to wait until the lock was released at the end of the current rendering operation, even if it wouldn't be any conflict between both operations.<ref name="Packard 2009" /> Another drawback was that operations didn't retain memory allocations after the current DRI process released its lock on the device, so any data uploaded to the graphics memory such as [[Texture mapping|textures]] were lost for upcoming operations, causing a significant impact on graphics performance.<br />
<br />
Nowadays DRI1 is considered completely obsolete and must not be used.<br />
<br />
== DRI2 ==<br />
Due to the increasing popularity of [[compositing window manager]]s like [[Compiz]], the Direct Rendering Infrastructure had to be redesigned so that X clients could also support redirection to "offscreen pixmaps" while doing direct rendering. Regular X clients already respected the redirection to a separate pixmap provided by the X Server as a render target &mdash;the so-called offscreen pixmap&mdash;, but DRI clients continued to do the rendering directly into the shared backbuffer, effectively bypassing the compositing window manager.<ref name="Packard 2008" /><ref name="Høgsberg 2007">{{cite web|last1=Høgsberg|first1=Kristian|title=Redirected direct rendering|url=http://hoegsberg.blogspot.com/2007/08/redirected-direct-rendering.html|date=8 August 2007|access-date=25 May 2016}}</ref> The ultimate solution was to change the way DRI handled the render buffers, which led to a completely different DRI extension with a new set of operations, and also major changes in the [[Direct Rendering Manager]].<ref name="dri2proto spec 2.0" /> The new extension was named "DRI2", although it's not a later version but a different extension not even compatible with the original DRI &mdash;in fact both have coexisted within the X Server for a long time.<br />
<br />
In DRI2, instead of a single shared (back) buffer, every DRI client gets its own private [[back buffer]]<ref name="Packard 2008" /><ref name="Packard 2009" /> &mdash;along with their associated [[depth buffer|depth]] and [[stencil buffer|stencil]] buffers&mdash; to render its [[Window (computing)|window]] content using the [[hardware acceleration]]. The DRI client then [[Page flipping|swaps]] it with a false "[[front buffer]]",<ref name="Packard 2009" /> which is used by the compositing window manager as one of the sources to compose (build) the final screen back buffer to be swapped at the [[Vertical blanking interval|VBLANK interval]] with the real front buffer.<br />
<br />
To handle all these new buffers, the Direct Rendering Manager had to incorporate new functionality, specifically a graphics [[Memory management|memory manager]]. DRI2 was initially developed using the experimental [[Direct Rendering Manager#Translation Table Maps|TTM]] memory manager,<ref name="Packard 2008" /><ref name="Høgsberg 2007" /> but it was later rewritten to use [[Graphics Execution Manager|GEM]] after it was chosen as the definitive DRM memory manager.<ref name="Høgsberg DRI2 GEM" /> The new DRI2 internal buffer management model also solved two major performance bottlenecks present in the original DRI implementation:<br />
<br />
* DRI2 clients no longer lock the entire DRM device while using it for rendering, since now each client gets a separate render buffer independent from the other processes.<ref name="Packard 2009" /><br />
* DRI2 clients can allocate their own buffers (with textures, vertex lists, ...) in the video memory and keep them as long as they want, which significantly reduces video [[memory bandwidth]] consumption.<br />
<br />
In DRI2, the allocation of the private offscreen buffers (back buffer, fake front buffer, depth buffer, stencil buffer, ...) for a window is done by the X Server itself.<ref name="Packard 2012 DRI-Next" /><ref name="Willis 2013" /> DRI clients retrieve those buffers to do the rendering into the window by calling operations such as {{mono|DRI2GetBuffers}} and {{mono|DRI2GetBuffersWithFormat}} available in the DRI2 extension.<ref name="dri2proto spec 2.0" /> Internally, DRI2 uses ''GEM names'' &mdash;a type of global handle provided by the [[Graphics Execution Manager|GEM API]] that allows two processes accessing a DRM device to refer to the same buffer&mdash; for passing around "references" to those buffers through the [[X Window System core protocol|X11 protocol]].<ref name="Willis 2013" /> The reason why the X Server is in charge of the buffer allocation of the render buffers of a window is that the [[GLX|GLX extension]] allows for multiple X clients to do [[OpenGL]] rendering cooperatively in the same window.<ref name="Packard 2012 DRI-Next" /> This way, the X Server manages the whole lifecycle of the render buffers along the entire rendering process and knows when it can safely recycle or discard them. When a window resize is performed, the X Server is also responsible for allocating new render buffers matching the new window size, and notifying the change to the DRI client(s) rendering into the window using an InvalidateBuffers event, so they would retrieve the GEM names of the new buffers.<ref name="Packard 2012 DRI-Next" /><br />
<br />
The DRI2 extension provides other core operations for the DRI clients, such as finding out which DRM device and driver should they use ({{mono|DRI2Connect}}) or getting authenticated by the X Server in order to be able to use the rendering and buffer facilities of the DRM device ({{mono|DRI2Authenticate}}).<ref name="dri2proto spec 2.0" /> The presentation of the rendered buffers in the screen is performed using the {{mono|DRI2CopyRegion}} and {{mono|DRI2SwapBuffers}} requests. {{mono|DRI2CopyRegion}} can be used to do a copy between the fake front buffer and the real front buffer, but it doesn't provide any synchronization with the vertical blanking interval, so it can cause ''tearing''. {{mono|DRI2SwapBuffers}}, on the other hand, performs a VBLANK-synchronized swap between back and front buffer, if it's supported and both buffers have the same size, or a copy ([[Bit blit|blit]]) otherwise.<ref name="dri2proto spec 2.0" /><ref name="Packard 2012 DRI-Next" /><br />
<br />
== DRI3 ==<br />
Although DRI2 was a significant improvement over the original DRI, the new extension also introduced some new issues.<ref name="Packard 2012 DRI-Next" /><ref name="Willis 2013" /> In 2013, a third iteration of the Direct Rendering Infrastructure known as DRI3 was developed in order to fix those issues.<ref name="Packard 2013 DRI3000" /><br />
<br />
The main differences of DRI3 compared to DRI2 are:<br />
<br />
* DRI3 clients allocate themselves their render buffers instead of relying on the X Server for doing the allocation &mdash;that was the method supported by DRI2.<ref name="Packard 2012 DRI-Next" /><ref name="Willis 2013" /><br />
* DRI3 gets rid of the old insecure [[Graphics Execution Manager|GEM]] buffer sharing mechanism based on ''GEM names'' (global GEM handles) for passing buffer objects between a DRI client and the X Server in favor of the one more secure and versatile based on [[Direct Rendering Manager#PRIME|PRIME DMA-BUFs]], which uses [[file descriptor]]s instead.<ref name="Packard 2012 DRI-Next" /><ref name="Willis 2013" /><br />
<br />
Buffer allocation on the client side breaks [[GLX]] assumptions in the sense that it's no longer possible for multiple GLX applications to render cooperatively in the same window. On the plus side, the fact that the DRI client is in charge of its own buffers throughout their lifetime brings many advantages. For example, it is easy for the DRI3 client to ensure that the size of the render buffers always match the current size of the window, and thereby eliminate the artifacts due to the lack of synchronization of buffer sizes between client and server that plagued window resizing in DRI2.<ref name="Packard 2012 DRI-Next" /><ref name="Willis 2013" /><ref name="Packard 2013 DRI3" /> A better performance is also achieved because now DRI3 clients save the extra round trip waiting for the X Server to send the render buffers.<ref name="Willis 2013" /> DRI3 clients, and especially compositor window managers, can take advantage of keeping older buffers of previous frames and reusing them as the basis on which to render only the damaged parts of a window as another performance optimization.<ref name="Packard 2012 DRI-Next" /><ref name="Willis 2013" /> The DRI3 extension no longer needs to be modified to support new particular buffer formats, since they are now handled directly between the DRI client driver and the DRM kernel driver.<ref name="Packard 2012 DRI-Next" /> The use of file descriptors, on the other hand, allows the kernel to perform a safe cleanup of any unused GEM buffer object &mdash;one with no reference to it.<ref name="Packard 2012 DRI-Next" /><ref name="Willis 2013" /><br />
<br />
Technically, DRI3 consists of two different extensions, the "DRI3" extension and the "Present" extension.<ref name="Packard 2013 DRI3000" /><ref name="Edge 2013" /> The main purpose of the DRI3 extension is to implement the mechanism to share direct rendered buffers between DRI clients and the X Server.<ref name="Packard 2013 DRI3" /><ref name="Edge 2013" /><ref name="dri3proto spec" /> DRI clients allocate and use GEM buffers objects as rendering targets, while the X Server represents these render buffers using a type of X11 object called "pixmap". DRI3 provides two operations, {{mono|DRI3PixmapFromBuffer}} and {{mono|DRI3BufferFromPixmap}}, one to create a pixmap (in "X Server space") from a GEM buffer object (in "DRI client space"), and the other to do the reverse and get a GEM buffer object from an X pixmap.<ref name="Packard 2013 DRI3" /><ref name="Edge 2013" /><ref name="dri3proto spec" /> In these DRI3 operations GEM buffer objects are passed as [[DMA-BUF]] file descriptors instead of GEM names. DRI3 also provides a way to share synchronization objects between the DRI client and the X Server, allowing both a serialized access to the shared buffer.<ref name="Edge 2013" /> Unlike DRI2, the initial {{mono|DRI3Open}} operation &mdash;the first every DRI client must request to know which DRM device to use&mdash; returns an already open file descriptor to the device node instead of the device node filename, with any required authentication procedure already performed in advance by the X Server.<ref name="Packard 2013 DRI3" /><ref name="Edge 2013" /><br />
<br />
DRI3 provides no mechanism to show the rendered buffers on the screen, but relies on another extension, the ''Present'' extension, to do so.<ref name="dri3proto spec" /> ''Present'' is so named because its main task is to "present" buffers on the screen, meaning that it handles the update of the framebuffer using the contents of the rendered buffers delivered by client applications.<ref name="Edge 2013" /> Screen updates have to be done at the proper time, normally during the [[vertical blanking interval|VBLANK interval]] in order to avoid display artifacts such as ''[[Screen tearing|tearing]]''. Present also handles the synchronization of screen updates to the VBLANK interval.<ref name="presentproto spec" /> It also keeps the X client informed about the instant each buffer is really shown on the screen using events, so the client can synchronize its rendering process with the current screen refresh rate.<br />
<br />
Present accepts any X pixmap as the source for a screen update.<ref name="presentproto spec" /> Since pixmaps are standard X objects, Present can be used not only by DRI3 clients performing direct rendering, but also by any X client rendering on a pixmap by any means.<ref name="Packard 2013 DRI3" /> For example, most existing non-[[OpenGL|GL]] based [[GTK+]] and [[Qt (software)|Qt]] applications used to do [[double buffer]]ed pixmap rendering using [[XRender]]. The Present extension can also be used by these applications to achieve efficient and non-tearing screen updates. This is the reason why Present was developed as a separate standalone extension instead of being part of DRI3.<ref name="Packard 2013 DRI3" /><br />
<br />
Apart from allowing non-GL X clients to synchronize with VBLANK, Present brings other advantages. DRI3 graphics performance is better because Present is more efficient than DRI2 in swapping buffers.<ref name="Edge 2013" /> A number of OpenGL extensions that weren't available with DRI2 are now supported based on new features provided by Present.<ref name="Edge 2013" /><br />
<br />
Present provides two main operations to X clients: update a region of a window using part of or all the contents of a pixmap ({{mono|PresentPixmap}}) and set the type of presentation events related to a certain window that the client wants to be notified about ({{mono|PresentSelectInput}}).<ref name="Edge 2013" /><ref name="presentproto spec" /> There are three presentation events about which a window can notify an X client: when an ongoing presentation operation &mdash;normally from a call to {{mono|PresentPixmap}}&mdash; has been completed ({{mono|PresentCompleteNotify}}), when a pixmap used by a {{mono|PresentPixmap}} operation is ready to be reused ({{mono|PresentIdleNotify}}) and when the window configuration &mdash;mostly window size&mdash; changes ({{mono|PresentConfigureNotify}}).<ref name="Edge 2013" /><ref name="presentproto spec" /> Whether a {{mono|PresentPixmap}} operation performs a direct copy ([[Bit blit|blit]]) onto the front buffer or a [[Page flipping|swap]] of the entire back buffer with the front buffer is an internal detail of the Present extension implementation, instead of an explicit choice of the X client as it was in DRI2.<br />
<br />
== Adoption ==<br />
{{Update-section|date=June 2020}}<br />
Several open source DRI drivers have been written, including ones for [[ATI Technologies|ATI]] Mach64, ATI Rage128, ATI Radeon, 3dfx Voodoo3 through Voodoo5, [[Matrox]] G200 through G400, SiS 300-series, [[Intel]] i810 through i965, [[S3 Graphics|S3]] Savage, [[VIA Technologies|VIA]] UniChrome graphics chipsets, and [[nouveau (graphics)|nouveau]] for [[Nvidia]]. Some graphics vendors have written closed-source DRI drivers, including [[ATI Technologies|ATI]] and [[PowerVR]] Kyro.<br />
<br />
The various versions of DRI have been implemented by various operating systems, amongst others by the [[Linux kernel]], [[FreeBSD]], [[NetBSD]], [[OpenBSD]], and [[OpenSolaris]].<br />
<br />
== History ==<br />
The project was started by Jens Owen and Kevin E. Martin from Precision Insight (funded by [[Silicon Graphics]] and [[Red Hat]]).<ref name="DRI history"/><ref name="DRI design document">{{cite web|last1=Owen|first1=Jens|last2=Martin|first2=Kevin E.|title=A Multipipe Direct Rendering Architecture for 3D|url=http://dri.sourceforge.net/doc/design_high_level.html|date=15 September 1998|access-date=16 April 2016}}</ref> It was first made widely available as part of [[XFree86]] 4.0<ref name="DRI history"/><ref>{{cite web|title=Release Notes for XFree86 4.0|url=http://www.xfree86.org/4.0/RELNOTES2.html#12|website=XFree86 Project|date=7 March 2000|access-date=16 April 2016}}</ref> and is now part of the [[X.Org Server]]. It is currently maintained by the [[free software community]].<br />
<br />
Work on DRI2 started at the 2007 X Developers' Summit from a [[Kristian Høgsberg]]'s proposal.<ref>{{cite web|title=X Developers' Summit 2007 - Notes|url=http://www.x.org/wiki/Events/XDS2007/Notes/|website=X.Org|access-date=7 March 2016}}</ref><ref>{{cite mailing list|mailing-list=xorg|last=Høgsberg|first=Kristian|title=DRI2 Design Wiki Page|date=3 October 2007|url=https://lists.x.org/archives/xorg/2007-October/028746.html}}</ref> Høgsberg himself wrote the new DRI2 extension and the modifications to [[Mesa (computer graphics)|Mesa]] and [[GLX]].<ref>{{cite mailing list|mailing-list=xorg|last=Høgsberg|first=Kristian|title=Plans for merging DRI2 work|date=4 February 2008|url=https://lists.x.org/archives/xorg/2008-February/032412.html}}</ref> In March 2008 DRI2 was mostly done,<ref>{{cite mailing list|mailing-list=xorg|last=Høgsberg|first=Kristian|title=DRI2 committed|date=15 February 2008|url=https://lists.x.org/archives/xorg/2008-February/032693.html}}</ref><ref>{{cite mailing list|mailing-list=xorg|last=Høgsberg|first=Kristian|title=DRI2 direct rendering|date=31 March 2008|url=https://lists.x.org/archives/xorg/2008-March/034048.html}}</ref><ref name="Høgsberg 2008 DRI2">{{cite web|last1=Høgsberg|first1=Kristian|title=DRI2 Direct Rendering|url=http://hoegsberg.blogspot.com/2008/03/i-just-committed-last-bit-of-dri2-work.html|date=31 March 2008|access-date=20 April 2016}}</ref> but it couldn't make into [[X.Org Server]] version 1.5<ref name="Høgsberg DRI2 GEM">{{cite mailing list|mailing-list=xorg|last=Høgsberg|first=Kristian|title=Backing out DRI2 from server 1.5|date=4 August 2008|url=https://lists.x.org/archives/xorg/2008-August/037512.html}}</ref> and had to wait until version 1.6 from February 2009.<ref>{{cite web|title=Server 1.6 branch|url=http://www.x.org/wiki/Server16Branch/|website=X.org|access-date=7 February 2015}}</ref> The DRI2 extension was officially included in the X11R7.5 release of October 2009.<ref>{{cite web|title=Release Notes for X11R7.5|url=http://www.x.org/releases/X11R7.5/doc/RELNOTES.html|website=X.Org|access-date=20 April 2016}}</ref> The first public version of the DRI2 protocol (2.0) was announced in April 2009.<ref name="dri2proto 2.0">{{cite mailing list|mailing-list=xorg-announce|last=Høgsberg|first=Kristian|title=[ANNOUNCE] dri2proto 2.0|date=20 April 2009|url=https://lists.x.org/archives/xorg-announce/2009-April/000827.html}}</ref> Since then there has been several revisions, being the most recent the version 2.8 from July 2012.<ref name="dri2proto 2.8">{{cite mailing list|mailing-list=xorg-announce|last=Airlie|first=Dave|title=[ANNOUNCE] dri2proto 2.8|date=11 July 2012|url=https://lists.freedesktop.org/archives/xorg-announce/2012-July/002001.html}}</ref><br />
<br />
Due to several limitations of DRI2, a new extension called DRI-Next was proposed by Keith Packard and Emma Anholt at the X.Org Developer's Conference 2012.<ref name="Packard 2012 DRI-Next" /> The extension was proposed again as DRI3000 at [[Linux.conf.au]] 2013.<ref name="Willis 2013" /><ref name="Packard 2013 DRI3000" /> DRI3 and Present extensions were developed during 2013 and merged into the X.Org Server 1.15 release from December 2013.<ref>{{cite web|last1=Packard|first1=Keith|title=[ANNOUNCE] xorg-server 1.14.99.901|url=http://lists.freedesktop.org/archives/xorg/2013-November/056148.html|website=X.org|access-date=9 February 2015}}</ref><ref>{{cite web|last1=Larabel|first1=Michael|title=X.Org Server 1.15 Release Has Several New Features|url=https://www.phoronix.com/scan.php?page=news_item&px=MTU1NDQ|website=Phoronix|access-date=9 February 2015}}</ref> The first and only version of the DRI3 protocol (1.0) was released in November 2013.<ref name="dri3proto 1.0">{{cite mailing list|mailing-list=xorg-announce|last=Packard|first=Keith|title=[ANNOUNCE] dri3proto 1.0|date=1 November 2013|url=https://lists.x.org/archives/xorg-announce/2013-November/002349.html}}</ref><br />
<br />
<gallery><br />
Linux graphics drivers 2D.svg|2D drivers inside of the [[display server|X server]]<br />
Linux graphics drivers Utah GLX.svg|Indirect rendering over [[GLX]], using [[Utah GLX]]; separate: [[fbdev]]<br />
Linux graphics drivers DRI early.svg|Early DRI: [[Mode setting]] is still being performed by the [[X display server]], which forces it to be run as [[superuser|root]]<br />
Linux graphics drivers DRI current.svg|Finally all access goes through the [[Direct Rendering Manager]]<br />
Linux graphics drivers DRI Wayland.svg|In Linux kernel 3.12 ''render nodes'' were introduced; [[Direct Rendering Manager|DRM]] and the [[KMS driver]] were split. [[Wayland (display server protocol)|Wayland]] implements direct rendering over [[EGL (API)|EGL]]<br />
</gallery><br />
<br />
== See also ==<br />
{{Portal|Free Software}}<br />
* [[Direct Rendering Manager]]<br />
* [[Mesa (computer graphics)|Mesa 3D]]<br />
* [[X Window System]]<br />
<br />
== References ==<br />
{{reflist|30em|refs=<br />
<ref name="dri2proto spec 2.0">{{cite web|last1=Høgsberg|first1=Kristian|title=The DRI2 Extension - Version 2.0|url=https://www.x.org/releases/X11R7.7/doc/dri2proto/dri2proto.txt|website=X.Org|date=4 September 2008|access-date=29 May 2016}}</ref><br />
<ref name="dri3proto spec">{{cite web|last1=Packard|first1=Keith|title=The DRI3 Extension - Version 1.0|url=https://cgit.freedesktop.org/xorg/proto/dri3proto/tree/dri3proto.txt|date=4 June 2013|access-date=30 May 2016}}</ref><br />
<ref name="presentproto spec">{{cite web|last1=Packard|first1=Keith|title=The Present Extension - Version 1.0|url=https://cgit.freedesktop.org/xorg/proto/presentproto/tree/presentproto.txt|date=6 June 2013|access-date=1 June 2016}}</ref><br />
<ref name="Edge 2013">{{cite web|last1=Edge|first1=Jake|title=DRI3 and Present|url=https://lwn.net/Articles/569701/|website=LWN.net|date=9 October 2013|access-date=26 May 2016}}</ref><br />
<ref name="Packard 2008">{{cite web|last1=Packard|first1=Keith|title=X output status july 2008|url=http://keithp.com/blogs/X_output_status_july_2008/|date=21 July 2008|access-date=26 May 2016}}</ref><br />
<ref name="Packard 2009">{{cite web|last1=Packard|first1=Keith|title=Sharpening the Intel Driver Focus|url=http://keithp.com/blogs/Sharpening_the_Intel_Driver_Focus/|date=24 April 2009|access-date=26 May 2016}}</ref><br />
<ref name="Packard 2012 DRI-Next">{{cite web|last1=Packard|first1=Keith|title=Thoughts about DRI.Next|url=http://keithp.com/blogs/DRI-Next/|date=28 September 2012|access-date=26 May 2016}}</ref><br />
<ref name="Packard 2013 DRI3000">{{cite web|last1=Packard|first1=Keith|title=DRI3000 — Even Better Direct Rendering|url=http://keithp.com/blogs/DRI3000/|date=19 February 2013|access-date=26 May 2016}}</ref><br />
<ref name="Packard 2013 DRI3">{{cite web|last1=Packard|first1=Keith|title=Completing the DRI3 Extension|url=http://keithp.com/blogs/dri3_extension/|date=4 June 2013|access-date=31 May 2016}}</ref><br />
<ref name="Willis 2013">{{cite web|last1=Willis|first1=Nathan|title=LCA: The X-men speak|url=https://lwn.net/Articles/536484/|website=LWN.net|date=11 February 2013|access-date=26 May 2016}}</ref><br />
}}<br />
<br />
== External links ==<br />
{{Commons category}}<br />
* [http://dri.freedesktop.org/wiki/ Direct Rendering Infrastructure project home page]<br />
* Current specification documents (always updated to the most recent version):<br />
** [https://cgit.freedesktop.org/xorg/proto/dri2proto/tree/dri2proto.txt The DRI2 Extension] (Kristian Høgsberg, 2008)<br />
** [http://cgit.freedesktop.org/xorg/proto/dri3proto/tree/dri3proto.txt The DRI3 Extension] (Keith Packard, 2013)<br />
** [https://cgit.freedesktop.org/xorg/proto/presentproto/tree/presentproto.txt The Present Extension] (Keith Packard, 2013)<br />
<br />
{{Freedesktop.org}}<br />
<br />
[[Category:Direct Rendering Infrastructure| ]]<br />
[[Category:Freedesktop.org]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=VESA_Display_Power_Management_Signaling&diff=1076818130VESA Display Power Management Signaling2022-03-13T03:37:16Z<p>CodingKoopa: remove unneeded newline</p>
<hr />
<div>'''VESA Display Power Management Signaling''' (or '''DPMS''') is a [[standardization|standard]] from the [[VESA]] consortium for power management of video [[Computer display|monitors]]. Example usage includes turning off, or putting the monitor into standby after a period of idle time to save power. Some commercial displays also incorporate this technology.<br />
<br />
== History ==<br />
<br />
VESA issued DPMS 1.0 in 1993,<ref>{{Cite web |url=http://eetd.lbl.gov/EA/Reports/39466/39466-8 |title=PC User Guide: Chapter 8<!-- Bot generated title --> |access-date=2007-04-16 |archive-url=https://web.archive.org/web/20111122155220/http://eetd.lbl.gov/EA/Reports/39466/39466-8 |archive-date=2011-11-22 |url-status=dead |df= }}</ref> basing their work on the [[United States Environmental Protection Agency]]'s (EPA) earlier [[Energy Star]] [[power management]] specifications. Subsequent revisions were included in future [[VESA BIOS Extension]]s.<br />
<br />
== Design ==<br />
<br />
The standard defines how to signal the [[Analog television#Horizontal synchronization|H-sync]] and [[Vertical synchronization|V-sync]] pins in a standard [[Super Video Graphics Array|SVGA]] monitor to trigger the monitor's power saving capabilities. <br />
<br />
DPMS defines four modes: normal, standby, suspended and off. When in the "off" state, some power may still be drawn in order to power indicator lights.<br />
<br />
The standard is:<br />
{| class="wikitable"<br />
! State !! H-sync !! V-sync !! Power !! Recovery time<ref>On a Targa TM 3820 PNLD monitor.</ref><br />
|- align="center"<br />
! On<br />
| {{yes|On}} || {{yes|On}} || 100% || n/a<br />
|- align="center"<br />
! Stand-by<br />
| {{no|Off}} || {{yes|On}} || < 80% || ~1 [[second|s]]<br />
|- align="center"<br />
! Suspend<br />
| {{yes|On}} || {{no|Off}} || < 30&nbsp;W || ~5 s<br />
|- align="center"<br />
! Off<br />
| {{no|Off}} || {{no|Off}} || < 8&nbsp;W || ~20 s<br />
|}<br />
<br />
== Reception ==<br />
<br />
By the late 1990s{{Citation needed|date=January 2022}}, most new monitors implemented at least one DPMS level.<br />
<br />
DPMS does not define implementation details of its various power levels;<ref>{{cite web |last1=Myers |first1=Bob |title=Implications of power saving modes |url=http://repairfaq.org/sam/monfaq.htm#monimppsm |website=repairfaq.org |publisher=Samuel M. Goldwasser |access-date=9 January 2022 |language=en |quote=Energy Star and similar power-saving certifications generally don't specify what is done inside the monitor to achieve the power reduction, just the maximum power dissipation in the "reduced power" state(s).}}</ref><br />
while in a CRT-based display the three steps could logically be mapped to three blocks to be shut down in order of increasing savings, thermal stress, and warm-up time (video amplifier, deflection, filaments) not all designs would be trivially adaptable to this model, and neither would the technologies that commercially succeeded CRT monitors.<br />
<br />
Partially due to this reason, most major operating environments (such as Microsoft Windows and the MacOS family) do not implement the 3-level DPMS specification either, offering only a single timer. Notable exceptions include X11<ref>{{cite web |title=DPMSSetTimeouts(3) |url=https://man.archlinux.org/man/DPMSSetTimeouts.3 |access-date=9 January 2022 |language=en}}</ref> and the XFCE Power Manager.<ref>{{cite web |title=XFCE Power Manager - Preferences |url=https://docs.xfce.org/xfce/xfce4-power-manager/preferences#display |access-date=9 January 2022 |language=en}}</ref><br />
<br />
DPMS competed with the alternative [[Swedish Agency for Economic and Regional Growth|Nutek]] power saving system, in which the monitor recognizes a black picture produced by a [[screensaver]] and enters a power saving mode after an appropriate delay.<ref>{{cite web |title=Eizo FX D7, T68, TX D7, F67 User Manual |url=https://manualsdump.com/en/manuals/eizo-f67-tx_d7-fx_d7-t68/140547/31 |website=manualsdump.com |access-date=9 January 2022 |page=31 |language=en}} - implementation example.</ref><br />
<br />
== References ==<br />
<br />
{{reflist}}<br />
<br />
== External links ==<br />
* [http://www.vesa.org/Standards/summary/2003_3b.htm VESA Display Power Management Signaling (DPMS) Standard] (requires purchase of the specification)<br />
* [https://web.archive.org/web/20120627050710/http://www.vesa.org/vesa-standards/standards-summaries/ VESA Standards Listing]<br />
<br />
{{DEFAULTSORT:Vesa Display Power Management Signaling}}<br />
[[Category:VESA|Display Power Management Signaling]]<br />
<br />
{{software-eng-stub}}</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Word_(computer_architecture)&diff=1073829512Word (computer architecture)2022-02-24T21:49:41Z<p>CodingKoopa: link to MIPS I subheading</p>
<hr />
<div>{{Short description|Base memory unit handled by a computer}}<br />
{{Use dmy dates|date=August 2019|cs1-dates=y}}<br />
{{Computer architecture bit widths}}<br />
In [[computing]], a '''word''' is the natural unit of data used by a particular [[Central processing unit|processor]] design. A word is a fixed-sized [[Data (computing)|piece of data]] handled as a unit by the [[instruction set]] or the hardware of the processor. The number of [[bit]]s in a word (the ''word size'', ''word width'', or ''word length'') is an important characteristic of any specific processor design or [[computer architecture]]. <br />
<br />
The size of a word is reflected in many aspects of a computer's structure and operation; the majority of the [[processor register|registers]] in a processor are usually word sized and the largest piece of data that can be transferred to and from the [[computer memory|working memory]] in a single operation is a word in many (not all) architectures. The largest possible [[Memory address|address]] size, used to designate a location in memory, is typically a hardware word (here, "hardware word" means the full-sized natural word of the processor, as opposed to any other definition used).<br />
<br />
Documentation for computers with fixed word size commonly stated memory sizes in words rather than bytes or characters. Terms such as ''kilowords'' (KW) meaning 1024 words (2<sup>10</sup>) and ''megawords'' (MW) meaning 1,048,576 words (2<sup>20</sup>) were normally used. With standardization on 8-bit bytes and byte addressability, stating memory sizes in bytes, kilobytes, and megabytes has become the norm.<br />
<br />
Several of the earliest computers (and a few modern as well) used [[binary-coded decimal]] rather than plain [[Binary numeral system|binary]], typically having a word size of 10 or 12 [[decimal]] digits, and some early [[decimal computer]]s had no fixed word length at all. Early binary systems tended to use word lengths that were some multiple of 6-bits, with the 36-bit word being especially common on [[mainframe]] computers. The introduction of [[ASCII]] led to the move to systems with word lengths that were a multiple of 8-bits, with 16-bit machines being popular in the 1970s before the move to modern processors with 32 or 64 bits.<ref name="Beebe_2017"/> Special-purpose designs like [[digital signal processor]]s, may have any word length from 4 to 80 bits.<ref name="Beebe_2017"/><br />
<br />
The size of a word can sometimes differ from the expected due to [[backward compatibility]] with earlier computers. If multiple compatible variations or a family of processors share a common architecture and instruction set but differ in their word sizes, their documentation and software may become notationally complex to accommodate the difference (see [[#Size families|Size families]] below).<br />
<br />
== Uses of words ==<br />
Depending on how a computer is organized, word-size units may be used for:<br />
;Fixed-point numbers: Holders for [[fixed-point arithmetic|fixed point]], usually [[integer (computer science)|integer]], numerical values may be available in one or in several different sizes, but one of the sizes available will almost always be the word. The other sizes, if any, are likely to be multiples or fractions of the word size. The smaller sizes are normally used only for efficient use of memory; when loaded into the processor, their values usually go into a larger, word sized holder.<br />
;Floating-point numbers: Holders for [[floating-point arithmetic|floating-point]] numerical values are typically either a word or a multiple of a word.<br />
;Addresses: Holders for memory addresses must be of a size capable of expressing the needed range of values but not be excessively large, so often the size used is the word though it can also be a multiple or fraction of the word size.<br />
;Registers: [[Processor register]]s are designed with a size appropriate for the type of data they hold, e.g. integers, floating-point numbers, or addresses. Many computer architectures use [[general-purpose register]]s that are capable of storing data in multiple representations.<br />
;{{anchor|Catena}}Memory–processor transfer: When the processor reads from the memory subsystem into a register or writes a register's value to memory, the amount of data transferred is often a word. Historically, this amount of bits which could be transferred in one cycle was also called a ''catena'' in some environments (such as the [[Groupe Bull|Bull]] {{ill|Bull Gamma 60{{!}}GAMMA 60|fr|Gamma 60}}).<ref name="Dreyfus_1958_Gamma60"/><ref name="Buchholz_1962"/> In simple memory subsystems, the word is transferred over the memory [[Bus (computing)|data bus]], which typically has a width of a word or half-word. In memory subsystems that use [[CPU cache|caches]], the word-sized transfer is the one between the processor and the first level of cache; at lower levels of the [[memory hierarchy]] larger transfers (which are a multiple of the word size) are normally used.<br />
;Unit of address resolution: In a given architecture, successive address values designate successive units of memory; this unit is the unit of address resolution. In most computers, the unit is either a character (e.g. a byte) or a word. (A few computers have used bit resolution.) If the unit is a word, then a larger amount of memory can be accessed using an address of a given size at the cost of added complexity to access individual characters. On the other hand, if the unit is a byte, then individual characters can be addressed (i.e. selected during the memory operation).<br />
;Instructions: [[Machine instruction]]s are normally the size of the architecture's word, such as in [[RISC architectures]], or a multiple of the "char" size that is a fraction of it. This is a natural choice since instructions and data usually share the same memory subsystem. In [[Harvard architecture]]s the word sizes of instructions and data need not be related, as instructions and data are stored in different memories; for example, [[1ESS switch#1ESS computer|the processor in the 1ESS electronic telephone switch]] had 37-bit instructions and 23-bit data words.<br />
<br />
== Word size choice ==<br />
When a computer architecture is designed, the choice of a word size is of substantial importance. There are design considerations which encourage particular bit-group sizes for particular uses (e.g. for addresses), and these considerations point to different sizes for different uses. However, considerations of economy in design strongly push for one size, or a very few sizes related by multiples or fractions (submultiples) to a primary size. That preferred size becomes the word size of the architecture.<br />
<br />
[[Character (computing)|Character]] size was in the past (pre-variable-sized [[character encoding]]) one of the influences on unit of address resolution and the choice of word size. Before the mid-1960s, characters were most often stored in six bits; this allowed no more than 64 characters, so the alphabet was limited to upper case. Since it is efficient in time and space to have the word size be a multiple of the character size, word sizes in this period were usually multiples of 6 bits (in binary machines). A common choice then was the [[36-bit word length|36-bit word]], which is also a good size for the numeric properties of a floating point format.<br />
<br />
After the introduction of the [[IBM]] [[System/360]] design, which used eight-bit characters and supported lower-case letters, the standard size of a character (or more accurately, a [[byte]]) became eight bits. Word sizes thereafter were naturally multiples of eight bits, with 16, 32, and 64 bits being commonly used.<br />
<!-- Maybe this is too much detail as not about word size:<br />
[[Character encoding]]s that handle multiple alphabetic [[writing system]]s, and non-alphabetic writing systems, such as [[Shift JIS]], the [[Extended Unix Code]] (EUC) encodings, [[UTF-8]], and [[UTF-16]], use multiple bytes for some or all characters, decoupling the size of a character from the byte size or word size. --><br />
<br />
=== {{anchor|Variable word length}}Variable-word architectures ===<br />
Early machine designs included some that used what is often termed a ''variable word length''. In this type of organization, a numeric operand had no fixed length but rather its end was detected when a character with a special marking, often called [[word mark (computer hardware)|word mark]], was encountered. Such machines often used [[binary-coded decimal]] for numbers. This class of machines included the [[IBM 702]], [[IBM 705]], [[IBM 7080]], [[IBM 7010]], [[UNIVAC 1050]], [[IBM 1401]], and [[IBM 1620]].<br />
<br />
Most of these machines work on one unit of memory at a time and since each instruction or datum is several units long, each instruction takes several cycles just to access memory. These machines are often quite slow because of this. For example, instruction fetches on an [[IBM 1620 Model I]] take 8 cycles just to read the 12 digits of the instruction (the [[IBM 1620 Model II|Model II]] reduced this to 6 cycles, or 4 cycles if the instruction did not need both address fields). Instruction execution took a completely variable number of cycles, depending on the size of the operands.<br />
<br />
=== Word, bit and byte addressing ===<br />
{{Main | word addressing | byte addressing }}<br />
The memory model of an architecture is strongly influenced by the word size. In particular, the resolution of a memory address, that is, the smallest unit that can be designated by an address, has often been chosen to be the word. In this approach, the [[word-addressable]] machine approach, address values which differ by one designate adjacent memory words. This is natural in machines which deal almost always in word (or multiple-word) units, and has the advantage of allowing instructions to use minimally sized fields to contain addresses, which can permit a smaller instruction size or a larger variety of instructions.<br />
<br />
When byte processing is to be a significant part of the workload, it is usually more advantageous to use the [[byte]], rather than the word, as the unit of address resolution. Address values which differ by one designate adjacent bytes in memory. This allows an arbitrary character within a character string to be addressed straightforwardly. A word can still be addressed, but the address to be used requires a few more bits than the word-resolution alternative. The word size needs to be an integer multiple of the character size in this organization. This addressing approach was used in the IBM 360, and has been the most common approach in machines designed since then.<br />
<br />
When the workload involves processing fields of different sizes, it can be advantageous to address to the bit. Machines with bit addressing may have some instructions that use a programmer-defined byte size and other instructions that operate on fixed data sizes. As an example, on the [[IBM 7030]]<ref>{{Cite manual<br />
| title = Reference Manual 7030 Data Processing System<br />
| date = August 1961<br />
| section = Format<br />
| section-url = http://bitsavers.org/pdf/ibm/7030/22-6530-2_7030RefMan.pdf#page=59<br />
| pages = 50-57<br />
| url = http://bitsavers.org/pdf/ibm/7030/22-6530-2_7030RefMan.pdf<br />
| access-date = December 15, 2021<br />
| publisher = IBM<br />
}}<br />
</ref> ("Stretch"), a floating point instruction can only address words while an integer arithmetic instruction can specify a field length of 1-64 bits, a byte size of 1-8 bits and an accumulator offset of 0-127 bits. <br />
<br />
In at [[byte-addressable]] machine with storage-to-storage (SS) instructions, there are typically move instructions to copy one or multiple bytes from one arbitrary location to another. In a byte-oriented ([[byte-addressable]]) machine without SS instructions, moving a single byte from one arbitrary location to another is typically:<br />
# LOAD the source byte<br />
# STORE the result back in the target byte<br />
<br />
Individual bytes can be accessed on a word-oriented machine in one of two ways. Bytes can be manipulated by a combination of shift and mask operations in registers. Moving a single byte from one arbitrary location to another may require the equivalent of the following:<br />
# LOAD the word containing the source byte<br />
# [[Bitwise operation#Bit_shifts|SHIFT]] the source word to align the desired byte to the correct position in the target word<br />
# [[Bitwise operation#AND|AND]] the source word with a mask to zero out all but the desired bits<br />
# LOAD the word containing the target byte<br />
# AND the target word with a mask to zero out the target byte<br />
# [[Bitwise operation#OR|OR]] the registers containing the source and target words to insert the source byte<br />
# STORE the result back in the target location<br />
<br />
Alternatively many word-oriented machines implement byte operations with instructions using special ''byte pointers'' in registers or memory. For example, the [[PDP-10]] byte pointer contained the size of the byte in bits (allowing different-sized bytes to be accessed), the bit position of the byte within the word, and the word address of the data. Instructions could automatically adjust the pointer to the next byte on, for example, load and deposit (store) operations.<br />
<br />
=== Powers of two ===<br />
Different amounts of memory are used to store data values with different degrees of precision. The commonly used sizes are usually a [[power of two]] multiple of the unit of address resolution (byte or word). Converting the index of an item in an array into the memory address offset of the item then requires only a [[Arithmetic shift|shift]] operation rather than a multiplication. In some cases this relationship can also avoid the use of division operations. As a result, most modern computer designs have word sizes (and other operand sizes) that are a power of two times the size of a byte.<br />
<br />
== Size families ==<br />
As computer designs have grown more complex, the central importance of a single word size to an architecture has decreased. Although more capable hardware can use a wider variety of sizes of data, market forces exert pressure to maintain [[backward compatibility]] while extending processor capability. As a result, what might have been the central word size in a fresh design has to coexist as an alternative size to the original word size in a backward compatible design. The original word size remains available in future designs, forming the basis of a size family.<br />
<br />
In the mid-1970s, [[Digital Equipment Corporation|DEC]] designed the [[VAX]] to be a 32-bit successor of the 16-bit [[PDP-11]]. They used ''word'' for a 16-bit quantity, while ''longword'' referred to a 32-bit quantity. This was in contrast to earlier machines, where the natural unit of addressing memory would be called a ''word'', while a quantity that is one half a word would be called a ''halfword''. In fitting with this scheme, a VAX ''quadword'' is 64 bits. They continued this word/longword/quadword terminology with the 64-bit [[DEC Alpha|Alpha]].<br />
<br />
Another example is the [[x86]] family, of which processors of three different word lengths (16-bit, later 32- and 64-bit) have been released, while ''word'' continues to designate a 16-bit quantity. As software is routinely [[Porting|ported]] from one word-length to the next, some [[Application Programming Interface|APIs]] and documentation define or refer to an older (and thus shorter) word-length than the full word length on the CPU that software may be compiled for. Also, similar to how bytes are used for small numbers in many programs, a shorter word (16 or 32 bits) may be used in contexts where the range of a wider word is not needed (especially where this can save considerable stack space or cache memory space). For example, Microsoft's [[Windows API]] maintains the [[programming language]] definition of ''WORD'' as 16 bits, despite the fact that the API may be used on a 32- or 64-bit x86 processor, where the standard word size would be 32 or 64 bits, respectively. Data structures containing such different sized words refer to them as ''WORD'' (16 bits/2 bytes), ''DWORD'' (32 bits/4 bytes) and ''QWORD'' (64 bits/8 bytes) respectively. A similar phenomenon has developed in [[Intel|Intel's]] x86 [[assembly language]] – because of the support for various sizes (and backward compatibility) in the instruction set, some instruction mnemonics carry "d" or "q" identifiers denoting "double-", "quad-" or "double-quad-", which are in terms of the architecture's original 16-bit word size.<br />
<br />
In general, new processors must use the same data word lengths and virtual address widths as an older processor to have [[binary-code compatibility|binary compatibility]] with that older processor.<br />
<br />
Often carefully written source code &ndash; written with [[source-code compatibility]] and [[software portability]] in mind &ndash; can be recompiled to run on a variety of processors, even ones with different data word lengths or different address widths or both.<br />
<br />
== Table of word sizes ==<br />
{| class="wikitable sortable" style="margin:auto;"<br />
|-<br />
!colspan=8|''key:'' bit: [[bit]]s, d: [[decimal digit]]s, ''w'': word size of architecture, ''n'': variable size<br />
|- style="text-align:center;"<br />
! data-sort-type="number" | Year<br />
!Computer<br /> architecture<br />
! data-sort-type="number" | Word size ''w''<br />
! data-sort-type="number" | Integer<br /> sizes<br />
! data-sort-type="number" | Floating&shy;point<br /> sizes<br />
! data-sort-type="number" | Instruction<br /> sizes<br />
!Unit of address<br />resolution<br />
! data-sort-type="number" | Char size<br />
|- style="text-align:center;"<br />
|1837<br />
|[[Babbage]]<br>[[Analytical engine]]<br />
|50 d<br />
|''w''<br />
|—<br />
|Five different cards were used for different functions, exact size of cards not known.<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1941<br />
|[[Z3 (computer)|Zuse Z3]]<br />
|22 bit<br />
|—<br />
|''w''<br />
|8 bit<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1942<br />
|[[Atanasoff–Berry Computer|ABC]]<br />
|50 bit<br />
|''w''<br />
|—<br />
|—<br />
|—<br />
|—<br />
|- style="text-align:center;"<br />
|1944<br />
|[[Harvard Mark I]]<br />
|23 d<br />
|''w''<br />
|—<br />
|24 bit<br />
|—<br />
|—<br />
|- style="text-align:center;"<br />
|1946<br />(1948)<br />{1953}<br />
|[[ENIAC]]<br />(w/Panel #16<ref name="Eniac_coding"/>)<br />{w/Panel #26<ref name="Eniac_coding_8"/>}<br />
|10 d<br />
|''w'', 2''w''<br />(w)<br />{w}<br />
|—<br />
|—<br />(2 d, 4 d, 6 d, 8 d)<br />{2 d, 4 d, 6 d, 8 d}<br />
|—<br />—<br />{w}<br />
|—<br />
|- style="text-align:center;"<br />
|1948<br />
|[[Manchester Baby]]<br />
|32 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1951<br />
|[[UNIVAC I]]<br />
|12 d<br />
|''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|1 d<br />
|- style="text-align:center;"<br />
|1952<br />
|[[IAS machine]]<br />
|40 bit<br />
|''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1952<br />
|[[Fast Universal Digital Computer M-2]]<br />
|34 bit<br />
|''w?''<br />
|''w''<br />
|34 bit = 4-bit opcode plus 3×10&nbsp;bit address<br />
|10 bit<br />
|—<br />
|- style="text-align:center;"<br />
|1952<br />
|[[IBM 701]]<br />
|36 bit<br />
|{{frac|1|2}}''w'', ''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1952<br />
|[[UNIVAC 60]]<br />
|''n'' d<br />
|1 d, ... 10 d<br />
|—<br />
|—<br />
|—<br />
|2 d, 3 d<br />
|- style="text-align:center;"<br />
|1952<br />
|[[ARRA (computer)|ARRA I]]<br />
|30 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1953<br />
|[[IBM 702]]<br />
|''n'' d<br />
|0 d, ... 511 d<br />
|—<br />
|5 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1953<br />
|[[UNIVAC 120]]<br />
|''n'' d<br />
|1 d, ... 10 d<br />
|—<br />
|—<br />
|—<br />
|2 d, 3 d<br />
|- style="text-align:center;"<br />
|1953<br />
|[[ARRA II (computer)|ARRA II]]<br />
|30 bit<br />
|''w''<br />
|2''w''<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1954<br>(1955)<br />
|[[IBM 650]]<br>(w/[[IBM 653]])<br />
|10 d<br />
|''w''<br />
|—<br>(w)<br />
|''w''<br />
|''w''<br />
|2 d<br />
|- style="text-align:center;"<br />
|1954<br />
|[[IBM 704]]<br />
|36 bit<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1954<br />
|[[IBM 705]]<br />
|''n'' d<br />
|0 d, ... 255 d<br />
|—<br />
|5 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1954<br />
|[[IBM Naval Ordnance Research Calculator|IBM NORC]]<br />
|16 d<br />
|''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1956<br />
|[[IBM 305]]<br />
|''n'' d<br />
|1 d, ... 100 d<br />
|—<br />
|10 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1956<br />
|[[ARMAC (computer)|ARMAC]]<br />
|34 bit<br />
|''w''<br />
|''w''<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|5 bit, 6 bit<br />
|- style="text-align:center;"<br />
|1957<br />
|[[Autonetics Recomp I]]<br />
|40 bit<br />
|''w'', 79 bit, 8 d, 15 d<br />
|—<br />
|{{frac|1|2}}''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1958<br />
|[[UNIVAC II]]<br />
|12 d<br />
|''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|1 d<br />
|- style="text-align:center;"<br />
|1958<br />
|[[Semi-Automatic Ground Environment|SAGE]]<br />
|32 bit<br />
|{{frac|1|2}}''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1958<br />
|[[Autonetics Recomp II]]<br />
|40 bit<br />
|''w'', 79 bit, 8 d, 15 d<br />
|2''w''<br />
|{{frac|1|2}}''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1958<br />
|[[Setun]]<br />
| 6&nbsp;[[trit (computing)|trit]] (~9.5&nbsp;bits){{efn|The bit equivalent is computed by taking the amount of [[Entropy_(information_theory)|information entropy]] provided by the trit, which is <math>\log_2(3)</math>. This gives an equivalent of about 9.51 bits for 6 trits.}}<br />
| up to 6&nbsp;[[tryte]]<br />
|<br />
| up to 3&nbsp;trytes<br />
|<br />
| 4&nbsp;trit<sup>?</sup><br />
|- style="text-align:center;"<br />
|1958<br />
|[[Electrologica X1]]<br />
|27 bit<br />
|''w''<br />
|2''w''<br />
|''w''<br />
|''w''<br />
|5 bit, 6 bit<br />
|- style="text-align:center;"<br />
|1959<br />
|[[IBM 1401]]<br />
|''n'' d<br />
|1 d, ...<br />
|—<br />
|1 d, 2 d, 4 d, 5 d, 7 d, 8 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1959<br>(TBD)<br />
|[[IBM 1620]]<br />
|''n'' d<br />
|2 d, ...<br />
|—<br>(4 d, ... 102 d)<br />
|12 d<br />
|d<br />
|2 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[UNIVAC LARC|LARC]]<br />
|12 d<br />
|''w'', 2''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|2 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[CDC 1604]]<br />
|48 bit<br />
|''w''<br />
|''w''<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1960<br />
|[[IBM 1410]]<br />
|''n'' d<br />
|1 d, ...<br />
|—<br />
|1 d, 2 d, 6 d, 7 d, 11 d, 12 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[IBM 7070]]<br />
|10 d<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w'', d<br />
|2 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[PDP-1]]<br />
|18 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1960<br />
|[[Elliott 803]]<br />
|39 bit<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|- style="text-align:center;"<br />
|1961<br />
|[[IBM 7030 Stretch|IBM 7030]]<br>(Stretch)<br />
|64 bit<br />
|1 bit, ... 64 bit,<br>1 d, ... 16 d<br />
|''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|b, {{frac|1|2}}''w'', ''w''<br />
|1 bit, ... 8 bit<br />
|- style="text-align:center;"<br />
|1961<br />
|[[IBM 7080]]<br />
|''n'' d<br />
|0 d, ... 255 d<br />
|—<br />
|5 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1962<br />
|[[GE-600 series|GE-6xx]]<br />
|36 bit<br />
|''w'', 2 ''w''<br />
|''w'', 2 ''w'', 80 bit<br />
|''w''<br />
|''w''<br />
|6 bit, 9 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|[[UNIVAC III]]<br />
|25 bit<br />
|''w'', 2''w'', 3''w'', 4''w'', 6 d, 12 d<br />
|—<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|Autonetics [[D-17B]]<br>[[Minuteman I]] Guidance Computer<br />
|27 bit<br />
|11 bit, 24 bit<br />
|—<br />
|24 bit<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1962<br />
|[[UNIVAC 1107]]<br />
|36 bit<br />
|{{frac|1|6}}''w'', {{frac|1|3}}''w'', {{frac|1|2}}''w'', ''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|[[IBM 7010]]<br />
|''n'' d<br />
|1 d, ...<br />
|—<br />
|1 d, 2 d, 6 d, 7 d, 11 d, 12 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1962<br />
|[[IBM 7094]]<br />
|36 bit<br />
|''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|[[SDS 9 Series]]<br />
|24 bit<br />
|''w''<br />
|2''w''<br />
|''w''<br />
|''w''<br />
|<br />
|- style="text-align:center;"<br />
|1963<br>(1966)<br />
|[[Apollo Guidance Computer]]<br />
|15 bit<br />
|''w''<br />
|—<br />
|''w'', 2''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1963<br />
|[[Saturn Launch Vehicle Digital Computer]]<br />
|26 bit<br />
|''w''<br />
|—<br />
|13 bit<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1964/1966<br />
|[[PDP-6]]/[[PDP-10]]<br />
|36 bit<br />
|''w''<br />
|''w'', 2 ''w''<br />
|''w''<br />
|''w''<br />
|6 bit, 9 bit (typical)<br />
|- style="text-align:center;"<br />
|1964<br />
|[[Titan (1963 computer) | Titan ]]<br />
|48 bit<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|- style="text-align:center;"<br />
|1964<br />
|[[CDC 6600]]<br />
|60 bit<br />
|''w''<br />
|''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1964<br />
|Autonetics [[D-37C]]<br>[[Minuteman II]] Guidance Computer<br />
|27 bit<br />
|11 bit, 24 bit<br />
|—<br />
|24 bit<br />
|''w''<br />
|4 bit, 5 bit<br />
|- id="IBM360Row" style="text-align:center;"<br />
|1965<br />
|[[Gemini Guidance Computer]]<br />
|39 bit<br />
|26 bit<br />
|—<br />
|13 bit<br />
|13 bit, 26 <br />
|—bit<br />
|- style="text-align:center;"<br />
|1965<br />
|[[IBM 360]]<br />
|32 bit<br />
|{{frac|1|2}}''w'', ''w'',<br>1 d, ... 16 d<br />
|''w'', 2''w''<br />
|{{frac|1|2}}''w'', ''w'', 1{{frac|1|2}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1965<br />
|[[UNIVAC 1108]]<br />
|36 bit<br />
|{{frac|1|6}}''w'', {{frac|1|4}}''w'', {{frac|1|3}}''w'', {{frac|1|2}}''w'', ''w'', 2''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|6 bit, 9 bit<br />
|- style="text-align:center;"<br />
|1965<br />
|[[PDP-8]]<br />
|12 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|8 bit <!-- Used ASR-33 Teletype ASCII --><br />
|- style="text-align:center;"<br />
|1965<br />
|[[Electrologica X8]]<br />
|27 bit<br />
|''w''<br />
|2''w''<br />
|''w''<br />
|''w''<br />
|6 bit, 7 bit<br />
|- style="text-align:center;"<br />
|1966<br />
|[[SDS Sigma series|SDS Sigma 7]]<br />
|32 bit<br />
|{{frac|1|2}}''w'', ''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1969<br />
|[[Four-Phase Systems AL1]]<br />
|8 bit<br />
|''w''<br />
|—<br />
|?<br />
|?<br />
|?<br />
|- style="text-align:center;"<br />
|1970<br />
|[[MP944]]<br />
|20 bit<br />
|''w''<br />
|—<br />
|?<br />
|?<br />
|?<br />
|- style="text-align:center;"<br />
|1970<br />
|[[PDP-11]]<br />
|16 bit<br />
|''w''<br />
|2''w'', 4''w''<br />
|''w'', 2''w'', 3''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1971<br />
|[[Texas Instruments TMS1000#History|TMS1802NC]]<br />
|4 bit<br />
|''w''<br />
|—<br />
|?<br />
|?<br />
|—<br />
|- style="text-align:center;"<br />
|1971<br />
|[[Intel 4004]]<br />
|4 bit<br />
|''w'', d<br />
|—<br />
|2''w'', 4''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1972<br />
|[[Intel 8008]]<br />
|8 bit<br />
|''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1972<br />
|[[Calcomp 900]]<br />
|9 bit<br />
|''w''<br />
|—<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1974<br />
|[[Intel 8080]]<br />
|8 bit<br />
|''w'', 2''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1975<br />
|[[ILLIAC IV]]<br />
|64 bit<br />
|''w''<br />
|''w'', {{frac|1|2}}''w''<br />
|''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1975<br />
|[[Motorola 6800]]<br />
|8 bit<br />
|''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1975<br />
|[[MOS Technology 6501|MOS Tech. 6501]]<br>[[MOS Technology 6502|MOS Tech. 6502]]<br />
|8 bit<br />
|''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1976<br />
|[[Cray-1]]<br />
|64 bit<br />
|24 bit, ''w''<br />
|''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1976<br />
|[[Zilog Z80]]<br />
|8 bit<br />
|''w'', 2''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w'', 4''w'', 5''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1978<br>(1980)<br />
|16-bit [[x86]] ([[Intel 8086]])<br>(w/floating point: [[Intel 8087]])<br />
|16 bit<br />
|{{frac|1|2}}''w'', ''w'', 2 d<br />
|—<br>(2''w'', 4''w'', 5''w'', 17 d)<br />
|{{frac|1|2}}''w'', ''w'', ... 7''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1978<br />
|[[VAX]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w'', 1 d, ... 31 d, 1 bit, ... 32 bit<br />
|''w'', 2''w''<br />
|{{frac|1|4}}''w'', ... 14{{frac|1|4}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1979<br>(1984)<br />
|[[Motorola 68000 series]]<br>(w/floating point)<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w'', 2 d<br />
|—<br>(''w'', 2''w'', 2{{frac|1|2}}''w'')<br />
|{{frac|1|2}}''w'', ''w'', ... 7{{frac|1|2}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1985<br />
|[[IA-32]] ([[Intel 80386]]) (w/floating point)<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|—<br>(''w'', 2''w'', 80 bit)<br />
|8 bit, ... 120 bit<br>{{frac|1|4}}''w'' ... 3{{frac|3|4}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1985<br />
|[[ARM architecture|ARMv1]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', ''w''<br />
|—<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1985<br />
|[[MIPS architecture#MIPS I|MIPS I]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1991<br />
|[[Cray C90]]<br />
|64 bit<br />
|32 bit, ''w''<br />
|''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', 48 bit<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1992<br />
|[[DEC Alpha|Alpha]]<br />
|64 bit<br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|''{{frac|1|2}}w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1992<br />
|[[PowerPC]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1996<br />
|[[ARM architecture|ARMv4]]<br/>(w/[[ARM Thumb|Thumb]])<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|—<br />
|''w''<br/>({{frac|1|2}}''w'', ''w'')<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2000<br />
|[[z/Architecture|IBM z/Architecture]]<br/>(w/vector facility)<br />
|64 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br>1 d, ... 31 d<br />
|{{frac|1|2}}''w'', ''w'', 2''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', {{frac|3|4}}''w''<br />
|8 bit<br />
|8 bit, [[UTF-16]], [[UTF-32]]<br />
|- style="text-align:center;"<br />
|2001<br />
|[[IA-64]]<br />
|64 bit <br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|41 bit<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2001<br />
|[[ARMv6]]<br/>(w/VFP)<br />
|32 bit<br />
|8 bit, {{frac|1|2}}''w'', ''w''<br />
|—<br/>(w, 2w)<br />
|{{frac|1|2}}''w'', ''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2003<br />
|[[x86-64]]<br />
|64 bit<br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w'', 80 bit<br />
|8 bit, ... 120 bit<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2013<br />
|[[ARMv8|ARMv8-A]] and ARMv9-A<br />
|64 bit<br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w''<br />
|8 bit<br />
|8 bit<br />
|-<br />
! data-sort-type="number" | Year<br />
!Computer<br /> architecture<br />
! data-sort-type="number" | Word size ''w''<br />
! data-sort-type="number" | Integer<br /> sizes<br />
! data-sort-type="number" | Floating&shy;point<br /> sizes<br />
! data-sort-type="number" | Instruction<br /> sizes<br />
!Unit of address<br />resolution<br />
! data-sort-type="number" | Char size<br />
|- style="text-align:center;"<br />
!colspan=8|''key:'' bit: bits, d: decimal digits, ''w'': word size of architecture, ''n'': variable size<br />
|}<ref name="dd"/><ref name="ddd"/><br />
<br />
== See also ==<br />
* [[Integer (computer science)]]<br />
<br />
== Notes ==<br />
{{notelist}}<br />
<br />
== References ==<br />
{{reflist|refs=<br />
<ref name="Eniac_coding">{{cite web |title=A Logical Coding System Applied to the ENIAC (Electronic Numerical Integrator and Computer) |id=Report No. 673; Project No. TB3-0007 of the Research and Development Division, Ordnance Department |author-first=Richard F. |author-last=Clippinger |author-link=:de:Richard Clippinger |date=1948-09-29 |publisher=[[Ballistic Research Laboratories]] |location=Aberdeen Proving Ground, Maryland, US |url=http://ftp.arl.mil/~mike/comphist/48eniac-coding/ |access-date=2017-04-05 |url-status=live}}</ref><br />
<ref name="Eniac_coding_8">{{cite web |title=A Logical Coding System Applied to the ENIAC |at=Section VIII: Modified ENIAC |author-first=Richard F. |author-last=Clippinger |author-link=:de:Richard Clippinger |date=1948-09-29 |publisher=[[Ballistic Research Laboratories]] |location=Aberdeen Proving Ground, Maryland, US |url=http://ftp.arl.mil/~mike/comphist/48eniac-coding/sec8.html |access-date=2017-04-05 |url-status=live}}</ref><br />
<ref name="dd">{{cite book |author-first1=Gerrit Anne |author-last1=Blaauw |author-link1=Gerrit Anne Blaauw |author-first2=Frederick Phillips |author-last2=Brooks, Jr. |author-link2=Frederick Phillips Brooks, Jr. |title=Computer Architecture: Concepts and Evolution |publisher=[[Addison-Wesley]] |date=1997 |edition=1 |isbn=0-201-10557-8}} (1213 pages) (NB. This is a single-volume edition. This work was also available in a two-volume version.)</ref><br />
<ref name="ddd">{{cite book |author-first1=Anthony |author-last1=Ralston |author-first2=Edwin D. |author-last2=Reilly |title=Encyclopedia of Computer Science |edition=3rd |publisher=[[Van Nostrand Reinhold]] |date=1993 |isbn=0-442-27679-6}}</ref><br />
<ref name="Buchholz_1962">{{cite book |title=Planning a Computer System – Project Stretch |author-first1=Gerrit Anne |author-last1=Blaauw |author-link1=Gerrit Anne Blaauw |author-first2=Frederick Phillips |author-last2=Brooks, Jr. |author-link2=Frederick Phillips Brooks, Jr. |author-first3=Werner |author-last3=Buchholz |author-link3=Werner Buchholz |editor-first=Werner |editor-last=Buchholz |editor-link=Werner Buchholz |publisher=[[McGraw-Hill Book Company, Inc.]] / The Maple Press Company, York, PA. |lccn=61-10466 |date=1962 |chapter=4: Natural Data Units |pages=39–40 |chapter-url=http://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/Buchholz_102636426.pdf |access-date=2017-04-03 |url-status=live |archive-url=https://web.archive.org/web/20170403014651/http://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/Buchholz_102636426.pdf |archive-date=2017-04-03 |quote=[...] Terms used here to describe the structure imposed by the machine design, in addition to ''[[bit]]'', are listed below.<br/>''[[Byte]]'' denotes a group of bits used to encode a character, or the number of bits transmitted in parallel to and from input-output units. A term other than ''[[character (computing)|character]]'' is used here because a given character may be represented in different applications by more than one code, and different codes may use different numbers of bits (i.e., different byte sizes). In input-output transmission the grouping of bits may be completely arbitrary and have no relation to actual characters. (The term is coined from ''[[bite]]'', but respelled to avoid accidental mutation to ''bit''.)<br/>A ''word'' consists of the number of data bits transmitted in parallel from or to memory in one memory cycle. [[Word size]] is thus defined as a structural property of the memory. (The term ''[[catena (unit)|catena]]'' was coined for this purpose by the designers of the [[Groupe Bull|Bull]] {{ill|Bull Gamma 60{{!}}GAMMA 60|fr|Gamma 60}} computer.)<br/>''[[Block (data storage)|Block]]'' refers to the number of words transmitted to or from an input-output unit in response to a single input-output instruction. Block size is a structural property of an input-output unit; it may have been fixed by the design or left to be varied by the program. [...]}}</ref><br />
<ref name="Dreyfus_1958_Gamma60">{{cite conference |title=System design of the Gamma 60 |author-first=Phillippe |author-last=Dreyfus |author-link=Philippe Dreyfus |conference=[[Western Joint Computer Conference]]: Contrasts in Computers |location=Los Angeles, California, USA |date=1958-05-08 |orig-year=1958-05-06 |id=IRE-ACM-AIEE '58 (Western) |publication-place=ACM, New York, NY, USA |pages=130–133 |url=https://www.computer.org/csdl/proceedings/afips/1958/5052/00/50520130.pdf |access-date=2017-04-03 |url-status=live |archive-url=https://web.archive.org/web/20170403224547/https://www.computer.org/csdl/proceedings/afips/1958/5052/00/50520130.pdf |archive-date=2017-04-03 |quote=[...] Internal data code is used: Quantitative (numerical) data are coded in a 4-bit decimal code; qualitative (alpha-numerical) data are coded in a 6-bit alphanumerical code. The internal [[instruction code]] means that the instructions are coded in straight binary code.<br/>As to the internal information length, the information quantum is called a "[[catena (unit)|catena]]," and it is composed of 24 bits representing either 6 decimal digits, or 4 alphanumerical characters. This quantum must contain a multiple of 4 and 6 bits to represent a whole number of decimal or alphanumeric characters. Twenty-four bits was found to be a good compromise between the minimum 12 bits, which would lead to a too-low transfer flow from a parallel readout core memory, and 36 bits or more, which was judged as too large an information quantum. The catena is to be considered as the equivalent of a [[character (computing)|character]] in variable word length machines, but it cannot be called so, as it may contain several characters. It is transferred in series to and from the main memory.<br/>Not wanting to call a "quantum" a word, or a set of characters a letter, (a word is a word, and a quantum is something else), a new word was made, and it was called a "catena." It is an English word and exists in [[Webster's]] although it does not in French. Webster's definition of the word catena is, "a connected series;" therefore, a 24-bit information item. The word catena will be used hereafter.<br/>The internal code, therefore, has been defined. Now what are the external data codes? These depend primarily upon the information handling device involved. The {{ill|Bull Gamma 60{{!}}Gamma 60|fr|Gamma 60}} is designed to handle information relevant to any binary coded structure. Thus an 80-column punched card is considered as a 960-bit information item; 12 rows multiplied by 80 columns equals 960 possible punches; is stored as an exact image in 960 magnetic cores of the main memory with 2 card columns occupying one catena. [...]}}</ref><br />
<ref name="Beebe_2017">{{cite book |author-first=Nelson H. F. |author-last=Beebe |title=The Mathematical-Function Computation Handbook - Programming Using the MathCW Portable Software Library |chapter=Chapter I. Integer arithmetic |date=2017-08-22 |location=Salt Lake City, UT, USA |publisher=[[Springer International Publishing AG]] |edition=1 |lccn=2017947446 |isbn=978-3-319-64109-6 |doi=10.1007/978-3-319-64110-2 |page=970|s2cid=30244721 }}</ref><br />
}}<br />
<br />
{{Computer Storage Volumes}}<br />
{{Data types}}<br />
{{CPU technologies}}<br />
<br />
[[Category:Data types]]<br />
[[Category:Data unit| ]]<br />
[[Category:Primitive types]]<br />
[[Category:Units of information]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Word_(computer_architecture)&diff=1073829256Word (computer architecture)2022-02-24T21:47:37Z<p>CodingKoopa: Specify MIPS version, as is done with the ARM versions</p>
<hr />
<div>{{Short description|Base memory unit handled by a computer}}<br />
{{Use dmy dates|date=August 2019|cs1-dates=y}}<br />
{{Computer architecture bit widths}}<br />
In [[computing]], a '''word''' is the natural unit of data used by a particular [[Central processing unit|processor]] design. A word is a fixed-sized [[Data (computing)|piece of data]] handled as a unit by the [[instruction set]] or the hardware of the processor. The number of [[bit]]s in a word (the ''word size'', ''word width'', or ''word length'') is an important characteristic of any specific processor design or [[computer architecture]]. <br />
<br />
The size of a word is reflected in many aspects of a computer's structure and operation; the majority of the [[processor register|registers]] in a processor are usually word sized and the largest piece of data that can be transferred to and from the [[computer memory|working memory]] in a single operation is a word in many (not all) architectures. The largest possible [[Memory address|address]] size, used to designate a location in memory, is typically a hardware word (here, "hardware word" means the full-sized natural word of the processor, as opposed to any other definition used).<br />
<br />
Documentation for computers with fixed word size commonly stated memory sizes in words rather than bytes or characters. Terms such as ''kilowords'' (KW) meaning 1024 words (2<sup>10</sup>) and ''megawords'' (MW) meaning 1,048,576 words (2<sup>20</sup>) were normally used. With standardization on 8-bit bytes and byte addressability, stating memory sizes in bytes, kilobytes, and megabytes has become the norm.<br />
<br />
Several of the earliest computers (and a few modern as well) used [[binary-coded decimal]] rather than plain [[Binary numeral system|binary]], typically having a word size of 10 or 12 [[decimal]] digits, and some early [[decimal computer]]s had no fixed word length at all. Early binary systems tended to use word lengths that were some multiple of 6-bits, with the 36-bit word being especially common on [[mainframe]] computers. The introduction of [[ASCII]] led to the move to systems with word lengths that were a multiple of 8-bits, with 16-bit machines being popular in the 1970s before the move to modern processors with 32 or 64 bits.<ref name="Beebe_2017"/> Special-purpose designs like [[digital signal processor]]s, may have any word length from 4 to 80 bits.<ref name="Beebe_2017"/><br />
<br />
The size of a word can sometimes differ from the expected due to [[backward compatibility]] with earlier computers. If multiple compatible variations or a family of processors share a common architecture and instruction set but differ in their word sizes, their documentation and software may become notationally complex to accommodate the difference (see [[#Size families|Size families]] below).<br />
<br />
== Uses of words ==<br />
Depending on how a computer is organized, word-size units may be used for:<br />
;Fixed-point numbers: Holders for [[fixed-point arithmetic|fixed point]], usually [[integer (computer science)|integer]], numerical values may be available in one or in several different sizes, but one of the sizes available will almost always be the word. The other sizes, if any, are likely to be multiples or fractions of the word size. The smaller sizes are normally used only for efficient use of memory; when loaded into the processor, their values usually go into a larger, word sized holder.<br />
;Floating-point numbers: Holders for [[floating-point arithmetic|floating-point]] numerical values are typically either a word or a multiple of a word.<br />
;Addresses: Holders for memory addresses must be of a size capable of expressing the needed range of values but not be excessively large, so often the size used is the word though it can also be a multiple or fraction of the word size.<br />
;Registers: [[Processor register]]s are designed with a size appropriate for the type of data they hold, e.g. integers, floating-point numbers, or addresses. Many computer architectures use [[general-purpose register]]s that are capable of storing data in multiple representations.<br />
;{{anchor|Catena}}Memory–processor transfer: When the processor reads from the memory subsystem into a register or writes a register's value to memory, the amount of data transferred is often a word. Historically, this amount of bits which could be transferred in one cycle was also called a ''catena'' in some environments (such as the [[Groupe Bull|Bull]] {{ill|Bull Gamma 60{{!}}GAMMA 60|fr|Gamma 60}}).<ref name="Dreyfus_1958_Gamma60"/><ref name="Buchholz_1962"/> In simple memory subsystems, the word is transferred over the memory [[Bus (computing)|data bus]], which typically has a width of a word or half-word. In memory subsystems that use [[CPU cache|caches]], the word-sized transfer is the one between the processor and the first level of cache; at lower levels of the [[memory hierarchy]] larger transfers (which are a multiple of the word size) are normally used.<br />
;Unit of address resolution: In a given architecture, successive address values designate successive units of memory; this unit is the unit of address resolution. In most computers, the unit is either a character (e.g. a byte) or a word. (A few computers have used bit resolution.) If the unit is a word, then a larger amount of memory can be accessed using an address of a given size at the cost of added complexity to access individual characters. On the other hand, if the unit is a byte, then individual characters can be addressed (i.e. selected during the memory operation).<br />
;Instructions: [[Machine instruction]]s are normally the size of the architecture's word, such as in [[RISC architectures]], or a multiple of the "char" size that is a fraction of it. This is a natural choice since instructions and data usually share the same memory subsystem. In [[Harvard architecture]]s the word sizes of instructions and data need not be related, as instructions and data are stored in different memories; for example, [[1ESS switch#1ESS computer|the processor in the 1ESS electronic telephone switch]] had 37-bit instructions and 23-bit data words.<br />
<br />
== Word size choice ==<br />
When a computer architecture is designed, the choice of a word size is of substantial importance. There are design considerations which encourage particular bit-group sizes for particular uses (e.g. for addresses), and these considerations point to different sizes for different uses. However, considerations of economy in design strongly push for one size, or a very few sizes related by multiples or fractions (submultiples) to a primary size. That preferred size becomes the word size of the architecture.<br />
<br />
[[Character (computing)|Character]] size was in the past (pre-variable-sized [[character encoding]]) one of the influences on unit of address resolution and the choice of word size. Before the mid-1960s, characters were most often stored in six bits; this allowed no more than 64 characters, so the alphabet was limited to upper case. Since it is efficient in time and space to have the word size be a multiple of the character size, word sizes in this period were usually multiples of 6 bits (in binary machines). A common choice then was the [[36-bit word length|36-bit word]], which is also a good size for the numeric properties of a floating point format.<br />
<br />
After the introduction of the [[IBM]] [[System/360]] design, which used eight-bit characters and supported lower-case letters, the standard size of a character (or more accurately, a [[byte]]) became eight bits. Word sizes thereafter were naturally multiples of eight bits, with 16, 32, and 64 bits being commonly used.<br />
<!-- Maybe this is too much detail as not about word size:<br />
[[Character encoding]]s that handle multiple alphabetic [[writing system]]s, and non-alphabetic writing systems, such as [[Shift JIS]], the [[Extended Unix Code]] (EUC) encodings, [[UTF-8]], and [[UTF-16]], use multiple bytes for some or all characters, decoupling the size of a character from the byte size or word size. --><br />
<br />
=== {{anchor|Variable word length}}Variable-word architectures ===<br />
Early machine designs included some that used what is often termed a ''variable word length''. In this type of organization, a numeric operand had no fixed length but rather its end was detected when a character with a special marking, often called [[word mark (computer hardware)|word mark]], was encountered. Such machines often used [[binary-coded decimal]] for numbers. This class of machines included the [[IBM 702]], [[IBM 705]], [[IBM 7080]], [[IBM 7010]], [[UNIVAC 1050]], [[IBM 1401]], and [[IBM 1620]].<br />
<br />
Most of these machines work on one unit of memory at a time and since each instruction or datum is several units long, each instruction takes several cycles just to access memory. These machines are often quite slow because of this. For example, instruction fetches on an [[IBM 1620 Model I]] take 8 cycles just to read the 12 digits of the instruction (the [[IBM 1620 Model II|Model II]] reduced this to 6 cycles, or 4 cycles if the instruction did not need both address fields). Instruction execution took a completely variable number of cycles, depending on the size of the operands.<br />
<br />
=== Word, bit and byte addressing ===<br />
{{Main | word addressing | byte addressing }}<br />
The memory model of an architecture is strongly influenced by the word size. In particular, the resolution of a memory address, that is, the smallest unit that can be designated by an address, has often been chosen to be the word. In this approach, the [[word-addressable]] machine approach, address values which differ by one designate adjacent memory words. This is natural in machines which deal almost always in word (or multiple-word) units, and has the advantage of allowing instructions to use minimally sized fields to contain addresses, which can permit a smaller instruction size or a larger variety of instructions.<br />
<br />
When byte processing is to be a significant part of the workload, it is usually more advantageous to use the [[byte]], rather than the word, as the unit of address resolution. Address values which differ by one designate adjacent bytes in memory. This allows an arbitrary character within a character string to be addressed straightforwardly. A word can still be addressed, but the address to be used requires a few more bits than the word-resolution alternative. The word size needs to be an integer multiple of the character size in this organization. This addressing approach was used in the IBM 360, and has been the most common approach in machines designed since then.<br />
<br />
When the workload involves processing fields of different sizes, it can be advantageous to address to the bit. Machines with bit addressing may have some instructions that use a programmer-defined byte size and other instructions that operate on fixed data sizes. As an example, on the [[IBM 7030]]<ref>{{Cite manual<br />
| title = Reference Manual 7030 Data Processing System<br />
| date = August 1961<br />
| section = Format<br />
| section-url = http://bitsavers.org/pdf/ibm/7030/22-6530-2_7030RefMan.pdf#page=59<br />
| pages = 50-57<br />
| url = http://bitsavers.org/pdf/ibm/7030/22-6530-2_7030RefMan.pdf<br />
| access-date = December 15, 2021<br />
| publisher = IBM<br />
}}<br />
</ref> ("Stretch"), a floating point instruction can only address words while an integer arithmetic instruction can specify a field length of 1-64 bits, a byte size of 1-8 bits and an accumulator offset of 0-127 bits. <br />
<br />
In at [[byte-addressable]] machine with storage-to-storage (SS) instructions, there are typically move instructions to copy one or multiple bytes from one arbitrary location to another. In a byte-oriented ([[byte-addressable]]) machine without SS instructions, moving a single byte from one arbitrary location to another is typically:<br />
# LOAD the source byte<br />
# STORE the result back in the target byte<br />
<br />
Individual bytes can be accessed on a word-oriented machine in one of two ways. Bytes can be manipulated by a combination of shift and mask operations in registers. Moving a single byte from one arbitrary location to another may require the equivalent of the following:<br />
# LOAD the word containing the source byte<br />
# [[Bitwise operation#Bit_shifts|SHIFT]] the source word to align the desired byte to the correct position in the target word<br />
# [[Bitwise operation#AND|AND]] the source word with a mask to zero out all but the desired bits<br />
# LOAD the word containing the target byte<br />
# AND the target word with a mask to zero out the target byte<br />
# [[Bitwise operation#OR|OR]] the registers containing the source and target words to insert the source byte<br />
# STORE the result back in the target location<br />
<br />
Alternatively many word-oriented machines implement byte operations with instructions using special ''byte pointers'' in registers or memory. For example, the [[PDP-10]] byte pointer contained the size of the byte in bits (allowing different-sized bytes to be accessed), the bit position of the byte within the word, and the word address of the data. Instructions could automatically adjust the pointer to the next byte on, for example, load and deposit (store) operations.<br />
<br />
=== Powers of two ===<br />
Different amounts of memory are used to store data values with different degrees of precision. The commonly used sizes are usually a [[power of two]] multiple of the unit of address resolution (byte or word). Converting the index of an item in an array into the memory address offset of the item then requires only a [[Arithmetic shift|shift]] operation rather than a multiplication. In some cases this relationship can also avoid the use of division operations. As a result, most modern computer designs have word sizes (and other operand sizes) that are a power of two times the size of a byte.<br />
<br />
== Size families ==<br />
As computer designs have grown more complex, the central importance of a single word size to an architecture has decreased. Although more capable hardware can use a wider variety of sizes of data, market forces exert pressure to maintain [[backward compatibility]] while extending processor capability. As a result, what might have been the central word size in a fresh design has to coexist as an alternative size to the original word size in a backward compatible design. The original word size remains available in future designs, forming the basis of a size family.<br />
<br />
In the mid-1970s, [[Digital Equipment Corporation|DEC]] designed the [[VAX]] to be a 32-bit successor of the 16-bit [[PDP-11]]. They used ''word'' for a 16-bit quantity, while ''longword'' referred to a 32-bit quantity. This was in contrast to earlier machines, where the natural unit of addressing memory would be called a ''word'', while a quantity that is one half a word would be called a ''halfword''. In fitting with this scheme, a VAX ''quadword'' is 64 bits. They continued this word/longword/quadword terminology with the 64-bit [[DEC Alpha|Alpha]].<br />
<br />
Another example is the [[x86]] family, of which processors of three different word lengths (16-bit, later 32- and 64-bit) have been released, while ''word'' continues to designate a 16-bit quantity. As software is routinely [[Porting|ported]] from one word-length to the next, some [[Application Programming Interface|APIs]] and documentation define or refer to an older (and thus shorter) word-length than the full word length on the CPU that software may be compiled for. Also, similar to how bytes are used for small numbers in many programs, a shorter word (16 or 32 bits) may be used in contexts where the range of a wider word is not needed (especially where this can save considerable stack space or cache memory space). For example, Microsoft's [[Windows API]] maintains the [[programming language]] definition of ''WORD'' as 16 bits, despite the fact that the API may be used on a 32- or 64-bit x86 processor, where the standard word size would be 32 or 64 bits, respectively. Data structures containing such different sized words refer to them as ''WORD'' (16 bits/2 bytes), ''DWORD'' (32 bits/4 bytes) and ''QWORD'' (64 bits/8 bytes) respectively. A similar phenomenon has developed in [[Intel|Intel's]] x86 [[assembly language]] – because of the support for various sizes (and backward compatibility) in the instruction set, some instruction mnemonics carry "d" or "q" identifiers denoting "double-", "quad-" or "double-quad-", which are in terms of the architecture's original 16-bit word size.<br />
<br />
In general, new processors must use the same data word lengths and virtual address widths as an older processor to have [[binary-code compatibility|binary compatibility]] with that older processor.<br />
<br />
Often carefully written source code &ndash; written with [[source-code compatibility]] and [[software portability]] in mind &ndash; can be recompiled to run on a variety of processors, even ones with different data word lengths or different address widths or both.<br />
<br />
== Table of word sizes ==<br />
{| class="wikitable sortable" style="margin:auto;"<br />
|-<br />
!colspan=8|''key:'' bit: [[bit]]s, d: [[decimal digit]]s, ''w'': word size of architecture, ''n'': variable size<br />
|- style="text-align:center;"<br />
! data-sort-type="number" | Year<br />
!Computer<br /> architecture<br />
! data-sort-type="number" | Word size ''w''<br />
! data-sort-type="number" | Integer<br /> sizes<br />
! data-sort-type="number" | Floating&shy;point<br /> sizes<br />
! data-sort-type="number" | Instruction<br /> sizes<br />
!Unit of address<br />resolution<br />
! data-sort-type="number" | Char size<br />
|- style="text-align:center;"<br />
|1837<br />
|[[Babbage]]<br>[[Analytical engine]]<br />
|50 d<br />
|''w''<br />
|—<br />
|Five different cards were used for different functions, exact size of cards not known.<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1941<br />
|[[Z3 (computer)|Zuse Z3]]<br />
|22 bit<br />
|—<br />
|''w''<br />
|8 bit<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1942<br />
|[[Atanasoff–Berry Computer|ABC]]<br />
|50 bit<br />
|''w''<br />
|—<br />
|—<br />
|—<br />
|—<br />
|- style="text-align:center;"<br />
|1944<br />
|[[Harvard Mark I]]<br />
|23 d<br />
|''w''<br />
|—<br />
|24 bit<br />
|—<br />
|—<br />
|- style="text-align:center;"<br />
|1946<br />(1948)<br />{1953}<br />
|[[ENIAC]]<br />(w/Panel #16<ref name="Eniac_coding"/>)<br />{w/Panel #26<ref name="Eniac_coding_8"/>}<br />
|10 d<br />
|''w'', 2''w''<br />(w)<br />{w}<br />
|—<br />
|—<br />(2 d, 4 d, 6 d, 8 d)<br />{2 d, 4 d, 6 d, 8 d}<br />
|—<br />—<br />{w}<br />
|—<br />
|- style="text-align:center;"<br />
|1948<br />
|[[Manchester Baby]]<br />
|32 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1951<br />
|[[UNIVAC I]]<br />
|12 d<br />
|''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|1 d<br />
|- style="text-align:center;"<br />
|1952<br />
|[[IAS machine]]<br />
|40 bit<br />
|''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1952<br />
|[[Fast Universal Digital Computer M-2]]<br />
|34 bit<br />
|''w?''<br />
|''w''<br />
|34 bit = 4-bit opcode plus 3×10&nbsp;bit address<br />
|10 bit<br />
|—<br />
|- style="text-align:center;"<br />
|1952<br />
|[[IBM 701]]<br />
|36 bit<br />
|{{frac|1|2}}''w'', ''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1952<br />
|[[UNIVAC 60]]<br />
|''n'' d<br />
|1 d, ... 10 d<br />
|—<br />
|—<br />
|—<br />
|2 d, 3 d<br />
|- style="text-align:center;"<br />
|1952<br />
|[[ARRA (computer)|ARRA I]]<br />
|30 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1953<br />
|[[IBM 702]]<br />
|''n'' d<br />
|0 d, ... 511 d<br />
|—<br />
|5 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1953<br />
|[[UNIVAC 120]]<br />
|''n'' d<br />
|1 d, ... 10 d<br />
|—<br />
|—<br />
|—<br />
|2 d, 3 d<br />
|- style="text-align:center;"<br />
|1953<br />
|[[ARRA II (computer)|ARRA II]]<br />
|30 bit<br />
|''w''<br />
|2''w''<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1954<br>(1955)<br />
|[[IBM 650]]<br>(w/[[IBM 653]])<br />
|10 d<br />
|''w''<br />
|—<br>(w)<br />
|''w''<br />
|''w''<br />
|2 d<br />
|- style="text-align:center;"<br />
|1954<br />
|[[IBM 704]]<br />
|36 bit<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1954<br />
|[[IBM 705]]<br />
|''n'' d<br />
|0 d, ... 255 d<br />
|—<br />
|5 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1954<br />
|[[IBM Naval Ordnance Research Calculator|IBM NORC]]<br />
|16 d<br />
|''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1956<br />
|[[IBM 305]]<br />
|''n'' d<br />
|1 d, ... 100 d<br />
|—<br />
|10 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1956<br />
|[[ARMAC (computer)|ARMAC]]<br />
|34 bit<br />
|''w''<br />
|''w''<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|5 bit, 6 bit<br />
|- style="text-align:center;"<br />
|1957<br />
|[[Autonetics Recomp I]]<br />
|40 bit<br />
|''w'', 79 bit, 8 d, 15 d<br />
|—<br />
|{{frac|1|2}}''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1958<br />
|[[UNIVAC II]]<br />
|12 d<br />
|''w''<br />
|—<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|1 d<br />
|- style="text-align:center;"<br />
|1958<br />
|[[Semi-Automatic Ground Environment|SAGE]]<br />
|32 bit<br />
|{{frac|1|2}}''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1958<br />
|[[Autonetics Recomp II]]<br />
|40 bit<br />
|''w'', 79 bit, 8 d, 15 d<br />
|2''w''<br />
|{{frac|1|2}}''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|5 bit<br />
|- style="text-align:center;"<br />
|1958<br />
|[[Setun]]<br />
| 6&nbsp;[[trit (computing)|trit]] (~9.5&nbsp;bits){{efn|The bit equivalent is computed by taking the amount of [[Entropy_(information_theory)|information entropy]] provided by the trit, which is <math>\log_2(3)</math>. This gives an equivalent of about 9.51 bits for 6 trits.}}<br />
| up to 6&nbsp;[[tryte]]<br />
|<br />
| up to 3&nbsp;trytes<br />
|<br />
| 4&nbsp;trit<sup>?</sup><br />
|- style="text-align:center;"<br />
|1958<br />
|[[Electrologica X1]]<br />
|27 bit<br />
|''w''<br />
|2''w''<br />
|''w''<br />
|''w''<br />
|5 bit, 6 bit<br />
|- style="text-align:center;"<br />
|1959<br />
|[[IBM 1401]]<br />
|''n'' d<br />
|1 d, ...<br />
|—<br />
|1 d, 2 d, 4 d, 5 d, 7 d, 8 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1959<br>(TBD)<br />
|[[IBM 1620]]<br />
|''n'' d<br />
|2 d, ...<br />
|—<br>(4 d, ... 102 d)<br />
|12 d<br />
|d<br />
|2 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[UNIVAC LARC|LARC]]<br />
|12 d<br />
|''w'', 2''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|2 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[CDC 1604]]<br />
|48 bit<br />
|''w''<br />
|''w''<br />
|{{frac|1|2}}''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1960<br />
|[[IBM 1410]]<br />
|''n'' d<br />
|1 d, ...<br />
|—<br />
|1 d, 2 d, 6 d, 7 d, 11 d, 12 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[IBM 7070]]<br />
|10 d<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w'', d<br />
|2 d<br />
|- style="text-align:center;"<br />
|1960<br />
|[[PDP-1]]<br />
|18 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1960<br />
|[[Elliott 803]]<br />
|39 bit<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|- style="text-align:center;"<br />
|1961<br />
|[[IBM 7030 Stretch|IBM 7030]]<br>(Stretch)<br />
|64 bit<br />
|1 bit, ... 64 bit,<br>1 d, ... 16 d<br />
|''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|b, {{frac|1|2}}''w'', ''w''<br />
|1 bit, ... 8 bit<br />
|- style="text-align:center;"<br />
|1961<br />
|[[IBM 7080]]<br />
|''n'' d<br />
|0 d, ... 255 d<br />
|—<br />
|5 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1962<br />
|[[GE-600 series|GE-6xx]]<br />
|36 bit<br />
|''w'', 2 ''w''<br />
|''w'', 2 ''w'', 80 bit<br />
|''w''<br />
|''w''<br />
|6 bit, 9 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|[[UNIVAC III]]<br />
|25 bit<br />
|''w'', 2''w'', 3''w'', 4''w'', 6 d, 12 d<br />
|—<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|Autonetics [[D-17B]]<br>[[Minuteman I]] Guidance Computer<br />
|27 bit<br />
|11 bit, 24 bit<br />
|—<br />
|24 bit<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1962<br />
|[[UNIVAC 1107]]<br />
|36 bit<br />
|{{frac|1|6}}''w'', {{frac|1|3}}''w'', {{frac|1|2}}''w'', ''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|[[IBM 7010]]<br />
|''n'' d<br />
|1 d, ...<br />
|—<br />
|1 d, 2 d, 6 d, 7 d, 11 d, 12 d<br />
|d<br />
|1 d<br />
|- style="text-align:center;"<br />
|1962<br />
|[[IBM 7094]]<br />
|36 bit<br />
|''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1962<br />
|[[SDS 9 Series]]<br />
|24 bit<br />
|''w''<br />
|2''w''<br />
|''w''<br />
|''w''<br />
|<br />
|- style="text-align:center;"<br />
|1963<br>(1966)<br />
|[[Apollo Guidance Computer]]<br />
|15 bit<br />
|''w''<br />
|—<br />
|''w'', 2''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1963<br />
|[[Saturn Launch Vehicle Digital Computer]]<br />
|26 bit<br />
|''w''<br />
|—<br />
|13 bit<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1964/1966<br />
|[[PDP-6]]/[[PDP-10]]<br />
|36 bit<br />
|''w''<br />
|''w'', 2 ''w''<br />
|''w''<br />
|''w''<br />
|6 bit, 9 bit (typical)<br />
|- style="text-align:center;"<br />
|1964<br />
|[[Titan (1963 computer) | Titan ]]<br />
|48 bit<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|''w''<br />
|- style="text-align:center;"<br />
|1964<br />
|[[CDC 6600]]<br />
|60 bit<br />
|''w''<br />
|''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w''<br />
|''w''<br />
|6 bit<br />
|- style="text-align:center;"<br />
|1964<br />
|Autonetics [[D-37C]]<br>[[Minuteman II]] Guidance Computer<br />
|27 bit<br />
|11 bit, 24 bit<br />
|—<br />
|24 bit<br />
|''w''<br />
|4 bit, 5 bit<br />
|- id="IBM360Row" style="text-align:center;"<br />
|1965<br />
|[[Gemini Guidance Computer]]<br />
|39 bit<br />
|26 bit<br />
|—<br />
|13 bit<br />
|13 bit, 26 <br />
|—bit<br />
|- style="text-align:center;"<br />
|1965<br />
|[[IBM 360]]<br />
|32 bit<br />
|{{frac|1|2}}''w'', ''w'',<br>1 d, ... 16 d<br />
|''w'', 2''w''<br />
|{{frac|1|2}}''w'', ''w'', 1{{frac|1|2}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1965<br />
|[[UNIVAC 1108]]<br />
|36 bit<br />
|{{frac|1|6}}''w'', {{frac|1|4}}''w'', {{frac|1|3}}''w'', {{frac|1|2}}''w'', ''w'', 2''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|''w''<br />
|6 bit, 9 bit<br />
|- style="text-align:center;"<br />
|1965<br />
|[[PDP-8]]<br />
|12 bit<br />
|''w''<br />
|—<br />
|''w''<br />
|''w''<br />
|8 bit <!-- Used ASR-33 Teletype ASCII --><br />
|- style="text-align:center;"<br />
|1965<br />
|[[Electrologica X8]]<br />
|27 bit<br />
|''w''<br />
|2''w''<br />
|''w''<br />
|''w''<br />
|6 bit, 7 bit<br />
|- style="text-align:center;"<br />
|1966<br />
|[[SDS Sigma series|SDS Sigma 7]]<br />
|32 bit<br />
|{{frac|1|2}}''w'', ''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1969<br />
|[[Four-Phase Systems AL1]]<br />
|8 bit<br />
|''w''<br />
|—<br />
|?<br />
|?<br />
|?<br />
|- style="text-align:center;"<br />
|1970<br />
|[[MP944]]<br />
|20 bit<br />
|''w''<br />
|—<br />
|?<br />
|?<br />
|?<br />
|- style="text-align:center;"<br />
|1970<br />
|[[PDP-11]]<br />
|16 bit<br />
|''w''<br />
|2''w'', 4''w''<br />
|''w'', 2''w'', 3''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1971<br />
|[[Texas Instruments TMS1000#History|TMS1802NC]]<br />
|4 bit<br />
|''w''<br />
|—<br />
|?<br />
|?<br />
|—<br />
|- style="text-align:center;"<br />
|1971<br />
|[[Intel 4004]]<br />
|4 bit<br />
|''w'', d<br />
|—<br />
|2''w'', 4''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1972<br />
|[[Intel 8008]]<br />
|8 bit<br />
|''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1972<br />
|[[Calcomp 900]]<br />
|9 bit<br />
|''w''<br />
|—<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1974<br />
|[[Intel 8080]]<br />
|8 bit<br />
|''w'', 2''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1975<br />
|[[ILLIAC IV]]<br />
|64 bit<br />
|''w''<br />
|''w'', {{frac|1|2}}''w''<br />
|''w''<br />
|''w''<br />
|—<br />
|- style="text-align:center;"<br />
|1975<br />
|[[Motorola 6800]]<br />
|8 bit<br />
|''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1975<br />
|[[MOS Technology 6501|MOS Tech. 6501]]<br>[[MOS Technology 6502|MOS Tech. 6502]]<br />
|8 bit<br />
|''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1976<br />
|[[Cray-1]]<br />
|64 bit<br />
|24 bit, ''w''<br />
|''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1976<br />
|[[Zilog Z80]]<br />
|8 bit<br />
|''w'', 2''w'', 2 d<br />
|—<br />
|''w'', 2''w'', 3''w'', 4''w'', 5''w''<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1978<br>(1980)<br />
|16-bit [[x86]] ([[Intel 8086]])<br>(w/floating point: [[Intel 8087]])<br />
|16 bit<br />
|{{frac|1|2}}''w'', ''w'', 2 d<br />
|—<br>(2''w'', 4''w'', 5''w'', 17 d)<br />
|{{frac|1|2}}''w'', ''w'', ... 7''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1978<br />
|[[VAX]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w'', 1 d, ... 31 d, 1 bit, ... 32 bit<br />
|''w'', 2''w''<br />
|{{frac|1|4}}''w'', ... 14{{frac|1|4}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1979<br>(1984)<br />
|[[Motorola 68000 series]]<br>(w/floating point)<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w'', 2 d<br />
|—<br>(''w'', 2''w'', 2{{frac|1|2}}''w'')<br />
|{{frac|1|2}}''w'', ''w'', ... 7{{frac|1|2}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1985<br />
|[[IA-32]] ([[Intel 80386]]) (w/floating point)<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|—<br>(''w'', 2''w'', 80 bit)<br />
|8 bit, ... 120 bit<br>{{frac|1|4}}''w'' ... 3{{frac|3|4}}''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1985<br />
|[[ARM architecture|ARMv1]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', ''w''<br />
|—<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1985<br />
|[[MIPS architecture|MIPS I]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1991<br />
|[[Cray C90]]<br />
|64 bit<br />
|32 bit, ''w''<br />
|''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', 48 bit<br />
|''w''<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1992<br />
|[[DEC Alpha|Alpha]]<br />
|64 bit<br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|''{{frac|1|2}}w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1992<br />
|[[PowerPC]]<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|''w'', 2''w''<br />
|''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|1996<br />
|[[ARM architecture|ARMv4]]<br/>(w/[[ARM Thumb|Thumb]])<br />
|32 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|—<br />
|''w''<br/>({{frac|1|2}}''w'', ''w'')<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2000<br />
|[[z/Architecture|IBM z/Architecture]]<br/>(w/vector facility)<br />
|64 bit<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br>1 d, ... 31 d<br />
|{{frac|1|2}}''w'', ''w'', 2''w''<br />
|{{frac|1|4}}''w'', {{frac|1|2}}''w'', {{frac|3|4}}''w''<br />
|8 bit<br />
|8 bit, [[UTF-16]], [[UTF-32]]<br />
|- style="text-align:center;"<br />
|2001<br />
|[[IA-64]]<br />
|64 bit <br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|41 bit<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2001<br />
|[[ARMv6]]<br/>(w/VFP)<br />
|32 bit<br />
|8 bit, {{frac|1|2}}''w'', ''w''<br />
|—<br/>(w, 2w)<br />
|{{frac|1|2}}''w'', ''w''<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2003<br />
|[[x86-64]]<br />
|64 bit<br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w'', 80 bit<br />
|8 bit, ... 120 bit<br />
|8 bit<br />
|8 bit<br />
|- style="text-align:center;"<br />
|2013<br />
|[[ARMv8|ARMv8-A]] and ARMv9-A<br />
|64 bit<br />
|8 bit, {{frac|1|4}}''w'', {{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w'', ''w''<br />
|{{frac|1|2}}''w''<br />
|8 bit<br />
|8 bit<br />
|-<br />
! data-sort-type="number" | Year<br />
!Computer<br /> architecture<br />
! data-sort-type="number" | Word size ''w''<br />
! data-sort-type="number" | Integer<br /> sizes<br />
! data-sort-type="number" | Floating&shy;point<br /> sizes<br />
! data-sort-type="number" | Instruction<br /> sizes<br />
!Unit of address<br />resolution<br />
! data-sort-type="number" | Char size<br />
|- style="text-align:center;"<br />
!colspan=8|''key:'' bit: bits, d: decimal digits, ''w'': word size of architecture, ''n'': variable size<br />
|}<ref name="dd"/><ref name="ddd"/><br />
<br />
== See also ==<br />
* [[Integer (computer science)]]<br />
<br />
== Notes ==<br />
{{notelist}}<br />
<br />
== References ==<br />
{{reflist|refs=<br />
<ref name="Eniac_coding">{{cite web |title=A Logical Coding System Applied to the ENIAC (Electronic Numerical Integrator and Computer) |id=Report No. 673; Project No. TB3-0007 of the Research and Development Division, Ordnance Department |author-first=Richard F. |author-last=Clippinger |author-link=:de:Richard Clippinger |date=1948-09-29 |publisher=[[Ballistic Research Laboratories]] |location=Aberdeen Proving Ground, Maryland, US |url=http://ftp.arl.mil/~mike/comphist/48eniac-coding/ |access-date=2017-04-05 |url-status=live}}</ref><br />
<ref name="Eniac_coding_8">{{cite web |title=A Logical Coding System Applied to the ENIAC |at=Section VIII: Modified ENIAC |author-first=Richard F. |author-last=Clippinger |author-link=:de:Richard Clippinger |date=1948-09-29 |publisher=[[Ballistic Research Laboratories]] |location=Aberdeen Proving Ground, Maryland, US |url=http://ftp.arl.mil/~mike/comphist/48eniac-coding/sec8.html |access-date=2017-04-05 |url-status=live}}</ref><br />
<ref name="dd">{{cite book |author-first1=Gerrit Anne |author-last1=Blaauw |author-link1=Gerrit Anne Blaauw |author-first2=Frederick Phillips |author-last2=Brooks, Jr. |author-link2=Frederick Phillips Brooks, Jr. |title=Computer Architecture: Concepts and Evolution |publisher=[[Addison-Wesley]] |date=1997 |edition=1 |isbn=0-201-10557-8}} (1213 pages) (NB. This is a single-volume edition. This work was also available in a two-volume version.)</ref><br />
<ref name="ddd">{{cite book |author-first1=Anthony |author-last1=Ralston |author-first2=Edwin D. |author-last2=Reilly |title=Encyclopedia of Computer Science |edition=3rd |publisher=[[Van Nostrand Reinhold]] |date=1993 |isbn=0-442-27679-6}}</ref><br />
<ref name="Buchholz_1962">{{cite book |title=Planning a Computer System – Project Stretch |author-first1=Gerrit Anne |author-last1=Blaauw |author-link1=Gerrit Anne Blaauw |author-first2=Frederick Phillips |author-last2=Brooks, Jr. |author-link2=Frederick Phillips Brooks, Jr. |author-first3=Werner |author-last3=Buchholz |author-link3=Werner Buchholz |editor-first=Werner |editor-last=Buchholz |editor-link=Werner Buchholz |publisher=[[McGraw-Hill Book Company, Inc.]] / The Maple Press Company, York, PA. |lccn=61-10466 |date=1962 |chapter=4: Natural Data Units |pages=39–40 |chapter-url=http://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/Buchholz_102636426.pdf |access-date=2017-04-03 |url-status=live |archive-url=https://web.archive.org/web/20170403014651/http://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/Buchholz_102636426.pdf |archive-date=2017-04-03 |quote=[...] Terms used here to describe the structure imposed by the machine design, in addition to ''[[bit]]'', are listed below.<br/>''[[Byte]]'' denotes a group of bits used to encode a character, or the number of bits transmitted in parallel to and from input-output units. A term other than ''[[character (computing)|character]]'' is used here because a given character may be represented in different applications by more than one code, and different codes may use different numbers of bits (i.e., different byte sizes). In input-output transmission the grouping of bits may be completely arbitrary and have no relation to actual characters. (The term is coined from ''[[bite]]'', but respelled to avoid accidental mutation to ''bit''.)<br/>A ''word'' consists of the number of data bits transmitted in parallel from or to memory in one memory cycle. [[Word size]] is thus defined as a structural property of the memory. (The term ''[[catena (unit)|catena]]'' was coined for this purpose by the designers of the [[Groupe Bull|Bull]] {{ill|Bull Gamma 60{{!}}GAMMA 60|fr|Gamma 60}} computer.)<br/>''[[Block (data storage)|Block]]'' refers to the number of words transmitted to or from an input-output unit in response to a single input-output instruction. Block size is a structural property of an input-output unit; it may have been fixed by the design or left to be varied by the program. [...]}}</ref><br />
<ref name="Dreyfus_1958_Gamma60">{{cite conference |title=System design of the Gamma 60 |author-first=Phillippe |author-last=Dreyfus |author-link=Philippe Dreyfus |conference=[[Western Joint Computer Conference]]: Contrasts in Computers |location=Los Angeles, California, USA |date=1958-05-08 |orig-year=1958-05-06 |id=IRE-ACM-AIEE '58 (Western) |publication-place=ACM, New York, NY, USA |pages=130–133 |url=https://www.computer.org/csdl/proceedings/afips/1958/5052/00/50520130.pdf |access-date=2017-04-03 |url-status=live |archive-url=https://web.archive.org/web/20170403224547/https://www.computer.org/csdl/proceedings/afips/1958/5052/00/50520130.pdf |archive-date=2017-04-03 |quote=[...] Internal data code is used: Quantitative (numerical) data are coded in a 4-bit decimal code; qualitative (alpha-numerical) data are coded in a 6-bit alphanumerical code. The internal [[instruction code]] means that the instructions are coded in straight binary code.<br/>As to the internal information length, the information quantum is called a "[[catena (unit)|catena]]," and it is composed of 24 bits representing either 6 decimal digits, or 4 alphanumerical characters. This quantum must contain a multiple of 4 and 6 bits to represent a whole number of decimal or alphanumeric characters. Twenty-four bits was found to be a good compromise between the minimum 12 bits, which would lead to a too-low transfer flow from a parallel readout core memory, and 36 bits or more, which was judged as too large an information quantum. The catena is to be considered as the equivalent of a [[character (computing)|character]] in variable word length machines, but it cannot be called so, as it may contain several characters. It is transferred in series to and from the main memory.<br/>Not wanting to call a "quantum" a word, or a set of characters a letter, (a word is a word, and a quantum is something else), a new word was made, and it was called a "catena." It is an English word and exists in [[Webster's]] although it does not in French. Webster's definition of the word catena is, "a connected series;" therefore, a 24-bit information item. The word catena will be used hereafter.<br/>The internal code, therefore, has been defined. Now what are the external data codes? These depend primarily upon the information handling device involved. The {{ill|Bull Gamma 60{{!}}Gamma 60|fr|Gamma 60}} is designed to handle information relevant to any binary coded structure. Thus an 80-column punched card is considered as a 960-bit information item; 12 rows multiplied by 80 columns equals 960 possible punches; is stored as an exact image in 960 magnetic cores of the main memory with 2 card columns occupying one catena. [...]}}</ref><br />
<ref name="Beebe_2017">{{cite book |author-first=Nelson H. F. |author-last=Beebe |title=The Mathematical-Function Computation Handbook - Programming Using the MathCW Portable Software Library |chapter=Chapter I. Integer arithmetic |date=2017-08-22 |location=Salt Lake City, UT, USA |publisher=[[Springer International Publishing AG]] |edition=1 |lccn=2017947446 |isbn=978-3-319-64109-6 |doi=10.1007/978-3-319-64110-2 |page=970|s2cid=30244721 }}</ref><br />
}}<br />
<br />
{{Computer Storage Volumes}}<br />
{{Data types}}<br />
{{CPU technologies}}<br />
<br />
[[Category:Data types]]<br />
[[Category:Data unit| ]]<br />
[[Category:Primitive types]]<br />
[[Category:Units of information]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=MIPS_architecture&diff=1073828231MIPS architecture2022-02-24T21:38:42Z<p>CodingKoopa: Specify that MIPS is a family of ISAs, rather than a specific ISA itself. MIPS is a family in the same way x86 is.</p>
<hr />
<div>{{Short description|Instruction set architecture}}<br />
{{Use mdy dates|date=November 2021}}<br />
{{Infobox CPU architecture<br />
| name = MIPS<br />
| designer = [[MIPS Technologies]], [[Imagination Technologies]]<br />
| bits = [[64-bit]] (32 → 64)<br />
| introduced = {{Start date and age|1985}}<br />
| version = MIPS32/64 Release 6 (2014)<br />
| design = [[Reduced instruction set computer|RISC]]<br />
| type = Register-Register<br />
| encoding = Fixed<br />
| branching = Compare and branch<br />
| endianness = [[Bi-endian|Bi]]<br />
| page size = 4&nbsp;KB<br />
| extensions = [[MDMX]], [[MIPS-3D]]<br />
| open = Partly. The [[R10000#R12000|R12000]] processor has been on the market for more than 20 years and so cannot be subject to patent claims. Therefore, the R12000 and older processors are fully open.<br />
| gpr = 32<br />
| fpr = 32<br />
}}<br />
<br />
'''MIPS''' ('''Microprocessor without Interlocked Pipelined Stages''')<ref>{{Cite book|title=Computer Organization and Design|last=Patterson|first=David|publisher=Elsevier|year=2014|isbn=978-0-12-407726-3|url=http://booksite.elsevier.com/9780124077263/downloads/historial%20perspectives/section_4.16.pdf|pages=4.16–4|access-date=November 28, 2018|archive-date=September 4, 2019|archive-url=https://web.archive.org/web/20190904223729/https://booksite.elsevier.com/9780124077263/downloads/historial%20perspectives/section_4.16.pdf|url-status=live}}</ref> is a family of [[reduced instruction set computer]] (RISC) [[instruction set architecture]]s (ISA)<ref name=Price1995>Price, Charles (September 1995). ''MIPS IV Instruction Set'' (Revision 3.2), MIPS Technologies, Inc.</ref>{{rp|A-1}}<ref name=Sweetman1999>{{cite book|last=Sweetman|first=Dominic|date=1999|title=See MIPS Run|publisher=Morgan Kaufmann Publishers, Inc.|isbn=1-55860-410-3}}</ref>{{rp|19}} developed by MIPS Computer Systems, now [[MIPS Technologies]], based in the United States.<br />
<br />
There are multiple versions of MIPS: including MIPS I, II, III, IV, and V; as well as five releases of MIPS32/64 (for 32- and 64-bit implementations, respectively). The early MIPS architectures were 32-bit; 64-bit versions were developed later. As of April 2017, the current version of MIPS is MIPS32/64 Release 6.<ref>{{cite web|url= https://www.mips.com/products/architectures/mips32-3/|title= MIPS32 Architecture|website= MIPS|access-date= March 20, 2020|archive-date= March 21, 2020|archive-url= https://web.archive.org/web/20200321031349/https://www.mips.com/products/architectures/mips32-3/|url-status= live}}</ref><ref>{{cite web|url= https://www.mips.com/products/architectures/mips64/|title= MIPS64 Architecture|website= MIPS|access-date= March 20, 2020|archive-date= February 2, 2020|archive-url= https://web.archive.org/web/20200202235833/https://www.mips.com/products/architectures/mips64/|url-status= live}}</ref> MIPS32/64 primarily differs from MIPS I–V by defining the privileged kernel mode System Control Coprocessor in addition to the user mode architecture.<br />
<br />
The MIPS architecture has several optional extensions. [[MIPS-3D]] which is a simple set of [[floating-point]] [[Instruction set architecture#SIMD instruction|SIMD instructions]] dedicated to common 3D tasks,<ref>{{cite web|url=http://www.imgtec.com/mips/mips-3d-ase.asp|title=MIPS-3D ASE|publisher=[[Imagination Technologies]]|archive-url=https://web.archive.org/web/20140103091950/http://www.imgtec.com/mips/mips-3d-ase.asp|archive-date=January 3, 2014|url-status=dead|access-date=January 4, 2014}}</ref> [[MDMX]] (MaDMaX) which is a more extensive integer [[Single instruction, multiple data|SIMD]] instruction set using the 64-bit floating-point registers, MIPS16e which adds [[compressed instructions|compression to the instruction stream]] to make programs take up less room,<ref>{{cite web|url=https://www.mips.com/products/architectures/ase/ase16e/|title=MIPS16e|website=MIPS|access-date=March 20, 2020|archive-date=January 16, 2021|archive-url=https://web.archive.org/web/20210116053233/https://www.mips.com/products/architectures/ase/ase16e/|url-status=live}}</ref> and MIPS MT, which adds [[Multithreading (computer architecture)|multithreading]] capability.<ref>{{cite web|url=https://www.mips.com/products/architectures/ase/multi-threading/|title=MIPS Multithreading|website=MIPS|access-date=March 20, 2020|archive-date=October 26, 2020|archive-url=https://web.archive.org/web/20201026011525/https://www.mips.com/products/architectures/ase/multi-threading/|url-status=live}}</ref><br />
<br />
[[Computer architecture]] courses in universities and technical schools often study the MIPS architecture.<ref>{{cite web|url=http://www.cs.ucdavis.edu/~peisert/teaching/ecs142-sp09/rt.html|title=ECS 142 (Compilers) References & Tools page|author=University of California, Davis|access-date=May 28, 2009|url-status=live|archive-url=https://web.archive.org/web/20110321052440/http://www.cs.ucdavis.edu/~peisert/teaching/ecs142-sp09/rt.html|archive-date=March 21, 2011}}</ref> The architecture greatly influenced later RISC architectures such as [[DEC Alpha|Alpha]]. In March 2021, MIPS announced that the development of the MIPS architecture had ended as the company is making the transition to [[RISC-V]].<ref>{{cite web|url=https://www.eejournal.com/article/wait-what-mips-becomes-risc-v/|title=Wait, What? MIPS Becomes RISC-V|first=Jim|last=Turley|website=Electronic Engineering Journal|date=March 8, 2021|access-date=March 28, 2021|archive-date=March 21, 2021|archive-url=https://web.archive.org/web/20210321193838/https://www.eejournal.com/article/wait-what-mips-becomes-risc-v/|url-status=live}}</ref><br />
<br />
== History ==<br />
{{expand section|date=February 2020}}<br />
{{See also|MIPS Technologies}}<br />
<br />
The first version of the MIPS architecture was designed by [[MIPS Computer Systems]] for its [[R2000 (microprocessor)|R2000]] microprocessor, the first MIPS implementation. Both MIPS and the R2000 were introduced together in 1985.{{citation needed|date=June 2016}} When MIPS II was introduced, ''MIPS'' was renamed ''MIPS I'' to distinguish it from the new version.<ref name=Sweetman1999/>{{rp|32}}<br />
<br />
[[MIPS Computer Systems]]' [[R6000]] microprocessor (1989) was the first MIPS II implementation.<ref name=Sweetman1999/>{{rp|8}} Designed for servers, the R6000 was fabricated and sold by [[Bipolar Integrated Technology]], but was a commercial failure. During the mid-1990s, many new 32-bit MIPS processors for [[embedded system]]s were MIPS II implementations because the introduction of the 64-bit MIPS III architecture in 1991 left MIPS II as the newest 32-bit MIPS architecture until MIPS32 was introduced in 1999.<ref name=Sweetman1999/>{{rp|19}}<br />
<br />
[[MIPS Computer Systems]]' [[R4000]] microprocessor (1991) was the first MIPS III implementation. It was designed for use in personal, workstation, and server computers. MIPS Computer Systems aggressively promoted the MIPS architecture and R4000, establishing the [[Advanced Computing Environment]] (ACE) consortium to advance its [[Advanced RISC Computing]] (ARC) standard, which aimed to establish MIPS as the dominant personal computing platform. ARC found little success in personal computers, but the R4000 (and the R4400 derivative) were widely used in workstation and server computers, especially by its largest user, [[Silicon Graphics]]. Other uses of the R4000 included high-end embedded systems and supercomputers. MIPS III was eventually implemented by a number of embedded microprocessors. [[Quantum Effect Design]]'s [[R4600]] (1993) and its derivatives was widely used in high-end embedded systems and low-end workstations and servers. MIPS Technologies' [[R4200]] (1994), was designed for embedded systems, laptop, and personal computers. A derivative, the R4300i, fabricated by [[NEC Electronics]], was used in the [[Nintendo 64]] game console. The Nintendo 64, along with the [[PlayStation (console)|PlayStation]], were among the highest volume users of MIPS architecture processors in the mid-1990s.<br />
<br />
The first MIPS IV implementation was the MIPS Technologies [[R8000]] microprocessor chipset (1994). The design of the R8000 began at Silicon Graphics, Inc. and it was only used in high-end workstations and servers for scientific and technical applications where high performance on large floating-point workloads was important. Later implementations were the MIPS Technologies [[R10000]] (1996) and the Quantum Effect Devices [[R5000]] (1996) and [[RM7000]] (1998). The R10000, fabricated and sold by NEC Electronics and Toshiba, and its derivatives were used by NEC, Pyramid Technology, Silicon Graphics, and Tandem Computers (among others) in workstations, servers, and supercomputers. The R5000 and R7000 found use in high-end embedded systems, personal computers, and low-end workstations and servers. A derivative of the R5000 from Toshiba, the R5900, was used in Sony Computer Entertainment's [[Emotion Engine]], which powered its [[PlayStation 2]] game console.<br />
<br />
Announced on October 21, 1996, at the Microprocessor Forum 1996 alongside the [[MDMX|MIPS Digital Media Extensions]] (MDMX) extension, MIPS V was designed to improve the performance of 3D graphics transformations.<ref>{{cite web|url=http://infopad.eecs.berkeley.edu/CIC/otherpr/enhanced_mips.html|title=Silicon Graphics Introduces Enhanced MIPS Architecture to Lead the Interactive Digital Revolution|publisher=[[Silicon Graphics, Inc.]]|date=October 21, 1996|url-status=dead|archive-url=https://archive.today/20120710115823/http://infopad.eecs.berkeley.edu/CIC/otherpr/enhanced_mips.html|archive-date=July 10, 2012}}</ref> In the mid-1990s, a major use of non-embedded MIPS microprocessors were graphics workstations from Silicon Graphics. MIPS V was completed by the integer-only MDMX extension to provide a complete system for improving the performance of 3D graphics applications.<ref name="MPR:1996-11-18">{{cite journal|last=Gwennap|first=Linley|date=November 18, 1996|url=http://studies.ac.upc.edu/ETSETB/SEGPAR/microprocessors/mdmx%20(mpr).pdf|title=Digital, MIPS Add Multimedia Extensions|journal=[[Microprocessor Report]]|volume=10|issue=15|pages=24–28|url-status=live|archive-url=https://web.archive.org/web/20110720095552/http://studies.ac.upc.edu/ETSETB/SEGPAR/microprocessors/mdmx%20(mpr).pdf|archive-date=July 20, 2011}}</ref> MIPS V implementations were never introduced. On May 12, 1997, Silicon Graphics announced the H1 ("Beast") and H2 ("Capitan") microprocessors. The former was to have been the first MIPS V implementation, and was due to be introduced in the first half of 1999.<ref>{{cite press release |title=Silicon Graphics Previews New High-Performance MIPS Microprocessor Roadmap |date=May 12, 1997}}</ref> The H1 and H2 projects were later combined and eventually canceled in 1998. While there have not been any MIPS V implementations, MIPS64 Release 1 (1999) was based on MIPS V and retains all of its features as an optional Coprocessor 1 (FPU) feature called Paired-Single.<br />
<br />
When MIPS Technologies was spun-out of Silicon Graphics in 1998, it refocused on the embedded market. Through MIPS V, each successive version was a strict superset of the previous version, but this property was found to be a problem,{{citation needed|date=June 2016}} and the architecture definition was changed to define a 32-bit and a 64-bit architecture: MIPS32 and MIPS64. Both were introduced in 1999.<ref name="mips32-and-mips64">{{cite press release|url=http://www.thefreelibrary.com/MIPS+Technologies,+Inc.+Enhances+Architecture+to+Support+Growing+Need...-a054531136|title=MIPS Technologies, Inc. Enhances Architecture to Support Growing Need for IP Re-Use and Integration|date=May 3, 1999|publisher=[[Business Wire]]|access-date=February 11, 2016|archive-date=December 1, 2018|archive-url=https://web.archive.org/web/20181201180124/https://www.thefreelibrary.com/MIPS+Technologies%2c+Inc.+Enhances+Architecture+to+Support+Growing+Need...-a054531136|url-status=live}}</ref> MIPS32 is based on MIPS II with some additional features from MIPS III, MIPS IV, and MIPS V; MIPS64 is based on MIPS V.<ref name="mips32-and-mips64"/> [[Nippon Electric Corporation|NEC]], [[Toshiba]] and [[SiByte]] (later acquired by [[Broadcom Corporation|Broadcom]]) each obtained licenses for MIPS64 as soon as it was announced. [[Philips]], [[LSI Corporation|LSI Logic]], [[Integrated Device Technology|IDT]], [[RMI Corporation|Raza Microelectronics, Inc.]], [[Cavium]], [[Loongson|Loongson Technology]] and [[Ingenic Semiconductor]] have since joined them. MIPS32/MIPS64 Release 5 was announced on December 6, 2012.<ref>{{cite press release|url=http://www.mips.com/news-events/newsroom/newsindex/index.dot?id=79069 |title=Latest Release of MIPS Architecture Includes Virtualization and SIMD Key Functionality for Enabling Next Generation of MIPS-Based Products|publisher=[[MIPS Technologies]]|date=December 6, 2012|archive-url=https://web.archive.org/web/20121213115846/http://www.mips.com/news-events/newsroom/newsindex/index.dot?id=79069|archive-date=December 13, 2012 }}</ref> Release 4 was skipped because the number four is perceived as [[Tetraphobia|unlucky]] in many Asian cultures.<ref>{{cite magazine|url=http://www.eetasia.com/ART_8800679179_480100_NT_439c939b.HTM|title=MIPS skips Release 4 amid bidding war|date=December 10, 2012|magazine=[[EE Times]]|url-status=live|archive-url=https://archive.today/20140417002825/http://www.eetasia.com/ART_8800679179_480100_NT_439c939b.HTM|archive-date=April 17, 2014}}</ref><br />
<br />
{{anchor|Open}}In December 2018, Wave Computing, the new owner of the MIPS architecture, announced that MIPS ISA would be open-sourced in a program dubbed the MIPS Open initiative.<ref>{{cite web|url=https://wavecomp.ai/wave-computing-extends-ai-lead-by-targeting-edge-of-cloud-through-acquisition-of-mips|title=Wave Computing Extends AI Lead by Targeting Edge of Cloud Through Acquisition of MIPS|date=June 15, 2018|access-date=December 19, 2018|archive-date=November 25, 2020|archive-url=https://web.archive.org/web/20201125030711/https://wavecomp.ai/wave-computing-extends-ai-lead-by-targeting-edge-of-cloud-through-acquisition-of-mips/|url-status=live}}</ref> The program was intended to open up access to the most recent versions of both the 32-bit and 64-bit designs making them available without any licensing or royalty fees as well as granting participants licenses to existing MIPS patents.<ref>{{cite web|url=https://wavecomp.ai/wave-computing-launches-the-mips-open-initiative|title=Wave Computing® Launches the MIPS Open Initiative To Accelerate Innovation for the Renowned MIPS® Architecture|date=December 17, 2018|access-date=December 19, 2018|archive-date=July 28, 2021|archive-url=https://web.archive.org/web/20210728072903/https://wavecomp.ai/wave-computing-launches-the-mips-open-initiative/|url-status=live}}</ref><ref>{{cite web |title=MIPS Processor ISA To Be Open-Sourced In 2019 - Phoronix |url=https://www.phoronix.com/scan.php?page=news_item&px=MIPS-Open-Source-2019 |access-date=December 18, 2018 |archive-date=March 6, 2021 |archive-url=https://web.archive.org/web/20210306084647/https://www.phoronix.com/scan.php?page=news_item&px=MIPS-Open-Source-2019 |url-status=live }}</ref><ref>{{Cite web |url=https://www.eetimes.com/document.asp?doc_id=1334087 |title=MIPS Goes Open Source |last=Yoshida |first=Junko |date=December 17, 2018 |website=EE Times |access-date=December 17, 2018 |archive-date=August 2, 2019 |archive-url=https://web.archive.org/web/20190802153207/https://www.eetimes.com/document.asp?doc_id=1334087 |url-status=live }}</ref><br />
<br />
In March 2019, one version of the architecture was made available under a royalty-free license,<ref>{{cite web|url=https://www.eetimes.com/mips-r6-architecture-now-available-for-open-use/|title=MIPS R6 Architecture Now Available for Open Use|date=March 28, 2019|access-date=December 16, 2019|archive-date=August 4, 2020|archive-url=https://web.archive.org/web/20200804035746/https://www.eetimes.com/mips-r6-architecture-now-available-for-open-use/|url-status=live}}</ref> but later that year the program was shut down again.<ref>{{cite web|url=https://www.hackster.io/news/wave-computing-closes-its-mips-open-initiative-with-immediate-effect-zero-warning-e88b0df9acd0|title=Wave Computing Closes Its MIPS Open Initiative with Immediate Effect, Zero Warning|date=November 15, 2019|access-date=December 16, 2019|archive-date=March 7, 2021|archive-url=https://web.archive.org/web/20210307041333/https://www.hackster.io/news/wave-computing-closes-its-mips-open-initiative-with-immediate-effect-zero-warning-e88b0df9acd0|url-status=live}}</ref><br />
<br />
In March 2021, Wave Computing announced that the development of the MIPS architecture has ceased. The company has joined the RISC-V foundation and future processor designs will be based on the RISC-V architecture.<ref>[https://www.eejournal.com/article/wait-what-mips-becomes-risc-v/ MIPS becomes RISC-V] {{Webarchive|url=https://web.archive.org/web/20210321193838/https://www.eejournal.com/article/wait-what-mips-becomes-risc-v/ |date=March 21, 2021 }} March 8, 2021. Retrieved March 11, 2021.</ref><ref>[https://www.prnewswire.com/news-releases/wave-computing-and-mips-emerge-from-chapter-11-bankruptcy-301237051.html Wave Computing and MIPS emerge from chapter 11 bankruptcy] {{Webarchive|url=https://web.archive.org/web/20210513151210/https://www.prnewswire.com/news-releases/wave-computing-and-mips-emerge-from-chapter-11-bankruptcy-301237051.html |date=May 13, 2021 }} March 1, 2021. Retrieved March 11, 2021.</ref> In spite of this, some licensees such as Longsoon continue with new extension of MIPS-compatible ISAs on their own.<ref>{{cite news |last1=Shilov |first1=Anton |title=Loongson Rips MIPS: Uses Old Code for New CPUs |url=https://www.tomshardware.com/uk/news/loongson-continues-to-use-mips-code-for-loongarch-cpus |access-date=1 December 2021 |work=Tom's Hardware |date=25 August 2021 |language=en |archive-date=January 25, 2022 |archive-url=https://web.archive.org/web/20220125121447/https://www.tomshardware.com/uk/news/loongson-continues-to-use-mips-code-for-loongarch-cpus |url-status=live }}</ref><br />
<br />
== Design ==<br />
{{expand section|date=February 2020}}<br />
<br />
MIPS is a modular architecture supporting up to four [[coprocessor]]s (CP0/1/2/3). In MIPS terminology, CP0 is the System Control Coprocessor (an essential part of the processor that is implementation-defined in MIPS I–V), CP1 is an optional [[floating-point unit]] (FPU) and CP2/3 are optional implementation-defined coprocessors (MIPS III removed CP3 and reused its opcodes for other purposes). For example, in the [[PlayStation (console)|PlayStation]] video game console, CP2 is the [[PlayStation technical specifications#Central processing unit (CPU)|Geometry Transformation Engine]] (GTE), which accelerates the processing of geometry in 3D computer graphics.<br />
<br />
== Versions ==<br />
<br />
=== MIPS I ===<br />
<br />
MIPS is a [[load/store architecture]] (also known as a ''register-register architecture''); except for the [[load/store instructions]] used to access [[Computer memory|memory]], all instructions operate on the registers.<br />
<br />
==== Registers ====<br />
<br />
MIPS I has thirty-two 32-bit general-purpose registers (GPR). Register $0 is hardwired to zero and writes to it are discarded. Register $31 is the link register. For integer multiplication and division instructions, which run asynchronously from other instructions, a pair of 32-bit registers, ''HI'' and ''LO'', are provided. There is a small set of instructions for copying data between the general-purpose registers and the HI/LO registers.<br />
<br />
The program counter has 32 bits. The two low-order bits always contain zero since MIPS I instructions are 32 bits long and are aligned to their natural word boundaries.<br />
<br />
==== Instruction formats ====<br />
<br />
Instructions are divided into three types: R (register), I (immediate), and J (jump). Every instruction starts with a 6-bit opcode. In addition to the opcode, R-type instructions specify three registers, a shift amount field, and a function field; I-type instructions specify two registers and a 16-bit immediate value; J-type instructions follow the opcode with a 26-bit jump target.<ref name=Price1995/>{{rp|A-174}}<br />
<br />
The following are the three formats used for the core instruction set:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Type || colspan=6| -31- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format (bits) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -0-<br />
|- align=center<br />
| '''R''' || opcode (6) || rs (5) || rt (5) || rd (5) || shamt (5) || funct (6)<br />
|- align=center<br />
| '''I''' || opcode (6) || rs (5) || rt (5) ||colspan=3| immediate (16)<br />
|- align=center<br />
| '''J''' || opcode (6) ||colspan=5| address (26)<br />
|}<br />
<br />
==== CPU instructions ====<br />
<br />
MIPS I has instructions that load and store 8-bit bytes, 16-bit halfwords, and 32-bit words. Only one [[addressing mode]] is supported: base + displacement. Since MIPS I is a 32-bit architecture, loading quantities fewer than 32 bits requires the datum to be either signed- or zero-extended to 32 bits. The load instructions suffixed by "unsigned" perform zero extension; otherwise sign extension is performed. Load instructions source the base from the contents of a GPR (rs) and write the result to another GPR (rt). Store instructions source the base from the contents of a GPR (rs) and the store data from another GPR (rt). All load and store instructions compute the memory address by summing the base with the sign-extended 16-bit immediate. MIPS I requires all memory accesses to be aligned to their natural word boundaries, otherwise an exception is signaled. To support efficient unaligned memory accesses, there are load/store word instructions suffixed by "left" or "right". All load instructions are followed by a [[load delay slot]]. The instruction in the load delay slot cannot use the data loaded by the load instruction. The load delay slot can be filled with an instruction that is not dependent on the load; a nop is substituted if such an instruction cannot be found.<br />
<br />
MIPS I has instructions to perform addition and subtraction. These instructions source their operands from two GPRs (rs and rt), and write the result to a third GPR (rd). Alternatively, addition can source one of the operands from a 16-bit immediate (which is sign-extended to 32 bits). The instructions for addition and subtraction have two variants: by default, an exception is signaled if the result overflows; instructions with the "unsigned" suffix do not signal an exception. The overflow check interprets the result as a 32-bit two's complement integer. MIPS I has instructions to perform [[bitwise operation|bitwise]] logical AND, OR, XOR, and NOR. These instructions source their operands from two GPRs and write the result to a third GPR. The AND, OR, and XOR instructions can alternatively source one of the operands from a 16-bit immediate (which is zero-extended to 32 bits). The Set on ''relation'' instructions write one or zero to the destination register if the specified relation is true or false. These instructions source their operands from two GPRs or one GPR and a 16-bit immediate (which is sign-extended to 32 bits), and write the result to a third GPR. By default, the operands are interpreted as signed integers. The variants of these instructions that are suffixed with "unsigned" interpret the operands as unsigned integers (even those that source an operand from the sign-extended 16-bit immediate).<br />
<br />
The Load Immediate Upper instruction copies the 16-bit immediate into the high-order 16 bits of a GPR. It is used in conjunction with the Or Immediate instruction to load a 32-bit immediate into a register.<br />
<br />
MIPS I has instructions to perform left and right logical shifts and right arithmetic shifts. The operand is obtained from a GPR (rt), and the result is written to another GPR (rd). The shift distance is obtained from either a GPR (rs) or a 5-bit "shift amount" (the "sa" field).<br />
<br />
MIPS I has instructions for signed and unsigned integer multiplication and division. These instructions source their operands from two GPRs and write their results to a pair of 32-bit registers called HI and LO, since they may execute separately from (and concurrently with) the other CPU instructions. For multiplication, the high- and low-order halves of the 64-bit product is written to HI and LO (respectively). For division, the quotient is written to LO and the remainder to HI. To access the results, a pair of instructions (Move from HI and Move from LO) is provided to copy the contents of HI or LO to a GPR. These instructions are interlocked: reads of HI and LO do not proceed past an unfinished arithmetic instruction that will write to HI and LO. Another pair of instructions (Move to HI or Move to LO) copies the contents of a GPR to HI and LO. These instructions are used to restore HI and LO to their original state after exception handling. Instructions that read HI or LO must be separated by two instructions that do not write to HI or LO.<br />
<br />
All MIPS I control flow instructions are followed by a [[branch delay slot]]. Unless the branch delay slot is filled by an instruction performing useful work, an nop is substituted. MIPS I branch instructions compare the contents of a GPR (rs) against zero or another GPR (rt) as signed integers and branch if the specified condition is true. Control is transferred to the address computed by shifting the 16-bit offset left by two bits, sign-extending the 18-bit result, and adding the 32-bit sign-extended result to the sum of the program counter (instruction address) and 8<sub>10</sub>. Jumps have two versions: absolute and register-indirect. Absolute jumps ("Jump" and "Jump and Link") compute the address control is transferred to by shifting the 26-bit instr_index left by two bits and concatenating the 28-bit result with the four high-order bits of the address of the instruction in the branch delay slot. Register-indirect jumps transfer control to the instruction at the address sourced from a GPR (rs). The address sourced from the GPR must be word-aligned, else an exception is signaled after the instruction in the branch delay slot is executed. Branch and jump instructions that link (except for "Jump and Link Register") save the return address to GPR 31. The "Jump and Link Register" instruction permits the return address to be saved to any writable GPR.<br />
<br />
MIPS I has two instructions for software to signal an exception: System Call and Breakpoint. System Call is used by user mode software to make kernel calls; and Breakpoint is used to transfer control to a debugger via the kernel's exception handler. Both instructions have a 20-bit Code field that can contain operating environment-specific information for the exception handler.<br />
<br />
MIPS has 32 floating-point registers. Two registers are paired for double precision numbers. Odd numbered registers cannot be used for arithmetic or branching, just as part of a double precision register pair, resulting in 16 usable registers for most instructions (moves/copies and loads/stores were not affected).<br />
<br />
Single precision is denoted by the .s suffix, while double precision is denoted by the .d suffix.<br />
<br />
=== MIPS II ===<br />
<br />
MIPS II removed the load delay slot<ref name=Sweetman1999/>{{rp|41}} and added several sets of instructions. For shared-memory multiprocessing, the ''Synchronize Shared Memory'', ''Load Linked Word'', and ''Store Conditional Word'' instructions were added. A set of Trap-on-Condition instructions were added. These instructions caused an exception if the evaluated condition is true. All existing branch instructions were given ''branch-likely'' versions that executed the instruction in the branch delay slot only if the branch is taken.<ref name=Sweetman1999/>{{rp|40}} These instructions improve performance in certain cases by allowing useful instructions to fill the branch delay slot.<ref name=Sweetman1999/>{{rp|212}} Doubleword load and store instructions for COP1–3 were added. Consistent with other memory access instructions, these loads and stores required the doubleword to be naturally aligned.<br />
<br />
The instruction set for the floating point coprocessor also had several instructions added to it. An IEEE 754-compliant floating-point square root instruction was added. It supported both single- and double-precision operands. A set of instructions that converted single- and double-precision floating-point numbers to 32-bit words were added. These complemented the existing conversion instructions by allowing the IEEE rounding mode to be specified by the instruction instead of the Floating Point Control and Status Register.<br />
<br />
=== MIPS III ===<br />
<br />
MIPS III is a [[backwards-compatible]] extension of MIPS II that added support for [[64-bit]] memory addressing and integer operations. The 64-bit data type is called a doubleword, and MIPS III extended the general-purpose registers, HI/LO registers, and program counter to 64 bits to support it. New instructions were added to load and store doublewords, to perform integer addition, subtraction, multiplication, division, and shift operations on them, and to move doubleword between the GPRs and HI/LO registers. Existing instructions originally defined to operate on 32-bit words were redefined, where necessary, to sign-extend the 32-bit results to permit words and doublewords to be treated identically by most instructions. Among those instructions redefined was ''Load Word''. In MIPS III it sign-extends words to 64 bits. To complement ''Load Word'', a version that zero-extends was added.<br />
<br />
The R instruction format's inability to specify the full shift distance for 64-bit shifts (its 5-bit shift amount field is too narrow to specify the shift distance for doublewords) required MIPS III to provide three 64-bit versions of each MIPS I shift instruction. The first version is a 64-bit version of the original shift instructions, used to specify constant shift distances of 0–31 bits. The second version is similar to the first, but adds 32<sub>10</sub> the shift amount field's value so that constant shift distances of 32–64 bits can be specified. The third version obtains the shift distance from the six low-order bits of a GPR.<br />
<br />
MIPS III added a ''supervisor'' privilege level in between the existing kernel and user privilege levels. This feature only affected the implementation-defined System Control Processor (Coprocessor 0).<br />
<br />
MIPS III removed the Coprocessor 3 (CP3) support instructions, and reused its opcodes for the new doubleword instructions. The remaining coprocessors gained instructions to move doublewords between coprocessor registers and the GPRs. The floating general registers (FGRs) were extended to 64 bits and the requirement for instructions to use even-numbered register only was removed. This is incompatible with earlier versions of the architecture; a bit in the floating-point control/status register is used to operate the MIPS III floating-point unit (FPU) in a MIPS I- and II-compatible mode. The floating-point control registers were not extended for compatibility. The only new floating-point instructions added were those to copy doublewords between the CPU and FPU convert single- and double-precision floating-point numbers into doubleword integers and vice versa.<br />
<br />
=== MIPS IV ===<br />
<br />
MIPS IV is the fourth version of the architecture. It is a superset of MIPS III and is compatible with all existing versions of MIPS. MIPS IV was designed to mainly improve floating-point (FP) performance. To improve access to operands, an indexed [[addressing mode]] (base + index, both sourced from GPRs) for FP loads and stores was added, as were prefetch instructions for performing memory prefetching and specifying cache hints (these supported both the base + offset and base + index addressing modes).<br />
<br />
MIPS IV added several features to improve instruction-level parallelism. To alleviate the bottleneck caused by a single condition bit, seven condition code bits were added to the floating-point control and status register, bringing the total to eight. FP comparison and branch instructions were redefined so they could specify which condition bit was written or read (respectively); and the delay slot in between an FP branch that read the condition bit written to by a prior FP comparison was removed. Support for [[Branch predication|partial predication]] was added in the form of conditional move instructions for both GPRs and FPRs; and an implementation could choose between having precise or imprecise exceptions for IEEE 754 traps.<br />
<br />
MIPS IV added several new FP arithmetic instructions for both single- and double-precision FPNs: fused-multiply add or subtract, reciprocal, and reciprocal square-root. The FP fused-multiply add or subtract instructions perform either one or two roundings (it is implementation-defined), to exceed or meet IEEE 754 accuracy requirements (respectively). The FP reciprocal and reciprocal square-root instructions do not comply with IEEE 754 accuracy requirements, and produce results that differ from the required accuracy by one or two units of last place (it is implementation defined). These instructions serve applications where instruction latency is more important than accuracy.<br />
<br />
=== MIPS V ===<br />
<br />
MIPS V added a new data type, the Paired Single (PS), which consisted of two single-precision (32-bit) floating-point numbers stored in the existing 64-bit floating-point registers. Variants of existing floating-point instructions for arithmetic, compare and conditional move were added to operate on this data type in a SIMD fashion. New instructions were added for loading, rearranging and converting PS data.<ref name=Sweetman1999/>{{rp|426–429}} It was the first instruction set to exploit floating-point SIMD with existing resources.<ref name="MPR:1996-11-18"/><br />
<br />
=== MIPS32/MIPS64 ===<br />
<br />
The first release of MIPS32, based on MIPS II, added conditional moves, [[Instruction prefetch|prefetch instructions]], and other features from the R4000 and R5000 families of 64-bit processors.<ref name="mips32-and-mips64"/> The first release of MIPS64 adds a MIPS32 mode to run 32-bit code.<ref name="mips32-and-mips64"/> The MUL and MADD ([[multiply-add]]) instructions, previously available in some implementations, were added to the MIPS32 and MIPS64 specifications, as were [[cache control instruction]]s.<ref name="mips32-and-mips64"/><br />
<br />
MIPS32/MIPS64 Release 6 in 2014 added the following:<ref>{{cite web|url=https://imgtec.com/mips/architectures/mips32/|title=MIPS – Market-leading RISC CPU IP processor solutions|website=imgtec.com|url-status=dead|archive-url=https://web.archive.org/web/20160309061723/https://imgtec.com/mips/architectures/mips32/|archive-date=March 9, 2016|access-date=February 11, 2016}}</ref><br />
* a new family of branches with no delay slot:<br />
** unconditional branches (BC) and branch-and-link (BALC) with a 26-bit offset,<br />
** conditional branch on zero/non-zero with a 21-bit offset,<br />
** full set of signed and unsigned conditional branches compare between two registers (e.g. BGTUC) or a register against zero (e.g. BGTZC),<br />
** full set of branch-and-link which compare a register against zero (e.g. BGTZALC).<br />
* index jump instructions with no delay slot designed to support large absolute addresses.<br />
* instructions to load 16-bit immediates at bit position 16, 32 or 48, allowing to easily generate large constants.<br />
* PC-relative load instructions, as well as address generation with large (PC-relative) offsets.<br />
* bit-reversal and byte-alignment instructions (previously only available with the DSP extension).<br />
* multiply and divide instructions redefined so that they use a single register for their result).<br />
* instructions generating truth values now generate all zeroes or all ones instead of just clearing/setting the 0-bit,<br />
* instructions using a truth value now only interpret all-zeroes as false instead of just looking at the 0-bit.<br />
<br />
Removed infrequently used instructions:<br />
* some conditional moves<br />
* ''branch likely'' instructions (deprecated in previous releases).<br />
* integer overflow trapping instructions with 16-bit immediate<br />
* integer accumulator instructions (together HI/LO registers, moved to the DSP Application-Specific Extension)<br />
* unaligned load instructions (LWL and LWR), (requiring that most ordinary loads and stores support misaligned access, possibly via trapping and with the addition of a new instruction (BALIGN))<br />
<br />
Reorganized the instruction encoding, freeing space for future expansions.<br />
<br />
=== microMIPS ===<br />
<br />
The microMIPS32/64 architectures are supersets of the MIPS32 and MIPS64 architectures (respectively) designed to replace the MIPS16e ASE. A disadvantage of MIPS16e is that it requires a mode switch before any of its 16-bit instructions can be processed. microMIPS adds versions of the most-frequently used 32-bit instructions that are encoded as 16-bit instructions. This allows programs to intermix 16- and 32-bit instructions without having to switch modes. microMIPS was introduced alongside of MIPS32/64 Release 3, and each subsequent release of MIPS32/64 has a corresponding microMIPS32/64 version. A processor may implement microMIPS32/64 or both microMIPS32/64 and its corresponding MIPS32/64 subset. Starting with MIPS32/64 Release 6, support for MIPS16e ended, and microMIPS is the only form of code compression in MIPS.<br />
<br />
== Application-specific extensions ==<br />
<br />
The base MIPS32 and MIPS64 architectures can be supplemented with a number of optional architectural extensions, which are collectively referred to as ''application-specific extensions'' (ASEs). These ASEs provide features that improve the efficiency and performance of certain workloads, such as [[digital signal processing]].<br />
<br />
; MIPS MCU: Enhancements for microcontroller applications. The MCU ASE (application-specific extension) has been developed to extend the interrupt controller support, reduce the interrupt latency and enhance the I/O peripheral control function typically required in microcontroller system designs.<br />
* Separate priority and vector generation<br />
* Supports up to 256 interrupts in EIC (External Interrupt Controller) mode and eight hardware interrupt pins<br />
* Provides 16-bit vector offset address<br />
* Pre-fetching of the interrupt exception vector<br />
* Automated Interrupt Prologue – adds hardware to save and update system status before the interrupt handling routine<br />
* Automated Interrupt Epilogue – restores the system state previously stored in the stack for returning from the interrupt.<br />
* Interrupt Chaining – supports the service of pending interrupts without the need to exit the initial interrupt routine, saving the cycles required to store and restore multiple active interrupts<br />
* Supports speculative pre-fetching of the interrupt vector address. Reduces the number of interrupt service cycles by overlapping memory accesses with pipeline flushes and exception prioritization<br />
* Includes atomic bit set/clear instructions which enables bits within an I/O register that are normally used to monitor or control external peripheral functions to be modified without interruption, ensuring the action is performed securely.<br />
; MIPS16: MIPS16 is an Application-Specific Extension for MIPS I through to V designed by [[LSI Logic]] and [[MIPS Technologies]], announced on October 21, 1996, alongside its first implementation, the LSI Logic TinyRISC processor.<ref>{{cite press release |title=Silicon Graphics Introduces Compact MIPS RISC Microprocessor Code For High Performance at a Low Cost |date=October 21, 1996}}</ref> MIPS16 was subsequently licensed by [[NEC Electronics]], [[Philips Semiconductors]], and [[Toshiba]] (among others); and implemented as an extension to the MIPS I, II, an III architectures. MIPS16 decreases the size of application by up to 40% by using 16-bit instructions instead of 32-bit instructions' and also improves power efficiency, the instruction cache hit rate, and is equivalent in performance to its base architecture.<ref>{{cite book|last1=Sweetman|first1=Dominic|title=See MIPS Run|date=2007|publisher=Morgan Kaufmann Publishers|location=San Francisco, California|isbn=978-0-12-088421-6|pages=425–427|edition=2nd}}</ref> It is supported by hardware and software development tools from MIPS Technologies and other providers. MIPS16e is an improved version of MIPS16 first supported by MIPS32 and MIPS64 Release 1. MIPS16e2 is an improved version of MIPS16 that is supported by MIPS32 and MIPS64 (up to Release 5). Release 6 replaced it with microMIPS.<br />
; MIPS Digital Signal Processing (DSP): The DSP ASE is an optional extension to the MIPS32/MIPS64 Release&nbsp;2 and newer instruction sets which can be used to accelerate a large range of "media" computations—particularly audio and video. The DSP module comprises a set of instructions and state in the integer pipeline and requires minimal additional logic to implement in MIPS processor cores. Revision 2 of the ASE was introduced in the second half of 2006. This revision adds extra instructions to the original ASE, but is otherwise backwards-compatible with it.<ref>{{cite web|url=https://gcc.gnu.org/onlinedocs/gcc/MIPS-DSP-Built-in-Functions.html|title=Using the GNU Compiler Collection (GCC): MIPS DSP Built-in Functions|website=gcc.gnu.org|url-status=live|archive-url=https://web.archive.org/web/20170420143138/https://gcc.gnu.org/onlinedocs/gcc/MIPS-DSP-Built-in-Functions.html|archive-date=April 20, 2017}}</ref> Unlike the bulk of the MIPS architecture, it's a fairly irregular set of operations, many chosen for a particular relevance to some key algorithm. Its main novel features (vs original MIPS32):<ref>{{cite web|url=https://www.linux-mips.org/wiki/Instruction_Set_Architecture#DSP_ASE|title=Instruction Set Architecture - LinuxMIPS|website=www.linux-mips.org|url-status=live|archive-url=https://web.archive.org/web/20170420045837/https://www.linux-mips.org/wiki/Instruction_Set_Architecture#DSP_ASE|archive-date=April 20, 2017}}</ref><br />
* Saturating arithmetic (when a calculation overflows, deliver the representable number closest to the non-overflowed answer).<br />
* Fixed-point arithmetic on signed 32- and 16-bit fixed-point fractions with a range of -1 to +1 (these are widely called "Q31" and "Q15").<br />
* The existing integer multiplication and multiply-accumulate instructions, which deliver results into a double-size accumulator (called "hi/lo" and 64 bits on MIPS32 CPUs). The DSP ASE adds three more accumulators, and some different flavours of multiply-accumulate.<br />
* [[Single instruction, multiple data|SIMD]] instructions operating on 4 x unsigned bytes or 2 x 16-bit values packed into a 32-bit register (the 64-bit variant of the DSP ASE supports larger vectors, too).<br />
* SIMD operations are basic arithmetic, shifts and some multiply-accumulate type operations.<br />
; MIPS SIMD architecture (MSA): Instruction set extensions designed to accelerate multimedia.<br />
* 32 vector registers of 16 x 8-bit, 8 x 16-bit, 4 x 32-bit, and 2 x 64 bit vector elements<br />
* Efficient vector parallel arithmetic operations on integer, fixed-point and floating-point data<br />
* Operations on absolute value operands<br />
* Rounding and saturation options available<br />
* Full precision multiply and multiply-add<br />
* Conversions between integer, floating-point, and fixed-point data<br />
* Complete set of vector-level compare and branch instructions with no condition flag<br />
* Vector (1D) and array (2D) shuffle operations<br />
* Typed load and store instructions for [[Endianness|endian]]-independent operation<br />
* IEEE Standard for Floating-Point Arithmetic 754-2008 compliant<br />
* Element precise floating-point exception signaling<br />
* Pre-defined scalable extensions for chips with more gates/transistors<br />
* Accelerates compute-intensive applications in conjunction with leveraging generic compiler support<br />
* Software-programmable solution for consumer electronics applications or functions not covered by dedicated hardware<br />
* Emerging data mining, feature extraction, image and video processing, and human-computer interaction applications<br />
* High-performance scientific computing<br />
; MIPS virtualization: Hardware supported virtualization technology.<br />
; MIPS multi-threading: Each multi-threaded MIPS core can support up to two VPEs (Virtual Processing Elements) which share a single pipeline as well as other hardware resources. However, since each VPE includes a complete copy of the processor state as seen by the software system, each VPE appears as a complete standalone processor to an [[Symmetric multiprocessing|SMP]] Linux operating system. For more fine-grained thread processing applications, each VPE is capable of supporting up to nine TCs allocated across two VPEs. The TCs share a common execution unit but each has its own program counter and core register files so that each can handle a thread from the software. The MIPS MT architecture also allows the allocation of processor cycles to threads, and sets the relative thread priorities with an optional Quality of Service ([[Quality of service|QoS]]) manager block. This enables two prioritization mechanisms that determine the flow of information across the bus. The first mechanism allows the user to prioritize one thread over another. The second mechanism is used to allocate a specified ratio of the cycles to specific threads over time. The combined use of both mechanisms allows effective allocation of bandwidth to the set of threads, and better control of latencies. In real-time systems, system-level determinism is very critical, and the QoS block facilitates improvement of the predictability of a system. Hardware designers of advanced systems may replace the standard QoS block provided by MIPS Technologies with one that is specifically tuned for their application.<br />
; SmartMIPS: SmartMIPS is an Application-Specific Extension (ASE) designed by [[Gemplus International]] and MIPS Technologies to improve performance and reduce memory consumption for [[smart card]] software. It is supported by MIPS32 only, since smart cards do not require the capabilities of MIPS64 processors. Few smart cards use SmartMIPS.<br />
; [[MDMX|MIPS Digital Media eXtension]] (MDMX): Multimedia application accelerations that were common in the 1990s on RISC and CISC systems. <br />
; [[MIPS-3D]]: Additional instructions for improving the performance of 3D graphics applications<br />
<br />
== Calling conventions ==<br />
MIPS has had several calling conventions, especially on the 32-bit platform.<br />
<br />
The O32 ABI is the most commonly-used ABI, owing to its status as the original [[System V]] [[Application binary interface|ABI]] for MIPS.<ref name=Sweetman>{{cite book|last=Sweetman|first=Dominic|title=See MIPS Run, 2nd edition|year=2007|publisher=Morgan Kaufmann|isbn=978-0-12088-421-6}}</ref><ref name="O32">{{cite web|url=https://www.mips.com/?do-download=mips32-instruction-set-quick-reference-v1-01|title=MIPS32 Instruction Set Quick Reference|access-date=August 17, 2020|archive-date=January 25, 2022|archive-url=https://web.archive.org/web/20220125121442/https://s3-eu-west-1.amazonaws.com/downloads-mips/documents/MD00565-2B-MIPS32-QRC-01.01.pdf|url-status=live}}</ref> It is strictly stack-based, with only four registers $a0-$a3 available to pass arguments. Space on the stack is reserved in case the callee needs to save its arguments, but the registers are not stored there by the caller. The return value is stored in register $v0; a second return value may be stored in $v1. The ABI took shape in 1990 and was last updated in 1994. This perceived slowness, along with an antique floating-point model with only 16 registers, has encouraged the proliferation of many other calling conventions. It is only defined for 32-bit MIPS, but [[GNU compiler collection|GCC]] has created a 64-bit variation called O64.<ref name="linux-mips">{{cite web |title=MIPS ABI History |url=https://www.linux-mips.org/wiki/MIPS_ABI_History |archive-url=https://web.archive.org/web/20180826012735/https://www.linux-mips.org/wiki/MIPS_ABI_History |archive-date=August 26, 2018}}</ref><br />
<br />
For 64-bit, the N64 ABI by Silicon Graphics is most commonly used. The most important improvement is that eight registers are now available for argument passing; it also increases the number of floating-point registers to 32. There is also an [[ILP32]] version called N32, which uses 32-bit pointers for smaller code, analogous to the [[x32 ABI]]. Both run under the 64-bit mode of the CPU.<ref name="linux-mips"/> The N32 and N64 ABIs pass the first eight arguments to a function in the registers $a0-$a7; subsequent arguments are passed on the stack. The return value (or a pointer to it) is stored in the registers $v0; a second return value may be stored in $v1. In both the N32 and N64 ABIs all registers are considered to be 64-bits wide.<br />
<br />
A few attempts have been made to replace O32 with a 32-bit ABI that resembles N32 more. A 1995 conference came up with MIPS EABI, for which the 32-bit version was quite similar.<ref>{{cite mailing list |url=https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html |author=Eric Christopher |title=mips eabi documentation |[email protected] |date=June 11, 2003 |access-date=June 19, 2020 |archive-date=May 7, 2020 |archive-url=https://web.archive.org/web/20200507151411/https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html |url-status=live }}</ref> EABI inspired MIPS Technologies to propose a more radical "NUBI" ABI additionally reuse argument registers for the return value.<ref>{{cite web |title=NUBI |url=https://www.linux-mips.org/wiki/NUBI |access-date=August 17, 2020 |archive-date=July 29, 2021 |archive-url=https://web.archive.org/web/20210729025259/https://www.linux-mips.org/wiki/NUBI |url-status=live }}</ref> MIPS EABI is supported by GCC but not LLVM, and neither supports NUBI.<br />
<br />
For all of O32 and N32/N64, the return address is stored in a $ra register. This is automatically set with the use of the JAL (jump and link) or JALR (jump and link register) instructions. The function prologue of a (non-leaf) MIPS subroutine pushes the return address (in $ra) to the stack.<ref>Karen Miller. "[http://pages.cs.wisc.edu/~markhill/cs354/Fall2008/beyond354/conventions.html The MIPS Register Usage Conventions] {{Webarchive|url=https://web.archive.org/web/20201025120512/http://pages.cs.wisc.edu/~markhill/cs354/Fall2008/beyond354/conventions.html |date=October 25, 2020 }}". 2006.</ref><ref>Hal Perkins. "[https://courses.cs.washington.edu/courses/cse410/09sp/examples/MIPSCallingConventionsSummary.pdf "MIPS Calling Convention] {{Webarchive|url=https://web.archive.org/web/20200930165249/https://courses.cs.washington.edu/courses/cse410/09sp/examples/MIPSCallingConventionsSummary.pdf |date=September 30, 2020 }}". 2006.</ref><br />
<br />
On both O32 and N32/N64 the stack grows downwards, but the N32/N64 ABIs require 64-bit alignment for all stack entries. The frame pointer ($30) is optional and in practice rarely used except when the stack allocation in a function is determined at runtime, for example, by calling <code>alloca()</code>.<br />
<br />
For N32 and N64, the return address is typically stored 8 bytes before the [[stack pointer]] although this may be optional.<br />
<br />
For the N32 and N64 ABIs, a function must preserve the $S0-$s7 registers, the global pointer ($gp or $28), the stack pointer ($sp or $29) and the frame pointer ($30). The O32 ABI is the same except the calling function is required to save the $gp register instead of the called function.<br />
<br />
For multi-threaded code, the thread local storage pointer is typically stored in special hardware register $29 and is accessed by using the mfhw (move from hardware) instruction. At least one vendor is known to store this information in the $k0 register which is normally reserved for kernel use, but this is not standard.<br />
<br />
The $k0 and $k1 registers ($26–$27) are reserved for kernel use and should not be used by applications since these registers can be changed at any time by the kernel due to interrupts, context switches or other events.<br />
<br />
{| class="wikitable"<br />
|+ Registers for O32 calling convention<br />
! Name || Number || Use || Callee must preserve?<br />
|-<br />
! $zero<br />
| $0 || constant 0 || {{N/A}}<br />
|-<br />
! $at<br />
| $1 || assembler temporary || {{no}}<br />
|-<br />
! $v0–$v1<br />
| $2–$3 || values for function returns and expression evaluation || {{no}}<br />
|-<br />
! $a0–$a3<br />
| $4–$7 || function arguments || {{no}}<br />
|-<br />
! $t0–$t7<br />
| $8–$15 || temporaries || {{no}}<br />
|-<br />
! $s0–$s7<br />
| $16–$23 || saved temporaries || {{yes}}<br />
|-<br />
! $t8–$t9<br />
| $24–$25 || temporaries || {{no}}<br />
|-<br />
! $k0–$k1<br />
| $26–$27 || reserved for OS kernel || {{N/A}}<br />
|-<br />
! $gp<br />
| $28 || global pointer || {{yes}} (except PIC code)<br />
|-<br />
! $sp<br />
| $29 || [[Stack-based memory allocation|stack pointer]] || {{yes}}<br />
|-<br />
! $fp<br />
| $30 || [[frame pointer]] || {{yes}}<br />
|-<br />
! $ra<br />
| $31 || [[return statement|return address]] || {{N/A}}<br />
|}<br />
<br />
{| class="wikitable"<br />
|+ Registers for N32 and N64 calling conventions<ref>{{cite book|url=https://www.linux-mips.org/pub/linux/mips/doc/ABI/MIPS-N32-ABI-Handbook.pdf|title=MIPSpro N32 ABI Handbook|publisher=[[Silicon Graphics]]|access-date=August 17, 2020|archive-date=December 17, 2021|archive-url=https://web.archive.org/web/20211217075522/https://www.linux-mips.org/pub/linux/mips/doc/ABI/MIPS-N32-ABI-Handbook.pdf|url-status=live}}</ref><br />
! Name || Number || Use || Callee must preserve?<br />
|-<br />
! $zero<br />
| $0 || constant 0 || {{N/A}}<br />
|-<br />
! $at<br />
| $1 || assembler temporary || {{no}}<br />
|-<br />
! $v0–$v1<br />
| $2–$3 || values for function returns and expression evaluation || {{no}}<br />
|-<br />
! $a0–$a7<br />
| $4–$11 || function arguments || {{no}}<br />
|-<br />
! $t4–$t7<br />
| $12–$15 || temporaries || {{no}}<br />
|-<br />
! $s0–$s7<br />
| $16–$23 || saved temporaries || {{yes}}<br />
|-<br />
! $t8–$t9<br />
| $24–$25 || temporaries || {{no}}<br />
|-<br />
! $k0–$k1<br />
| $26–$27 || reserved for OS kernel || {{N/A}}<br />
|-<br />
! $gp<br />
| $28 || global pointer || {{yes}}<br />
|-<br />
! $sp<br />
| $29 || [[Stack-based memory allocation|stack pointer]] || {{yes}}<br />
|-<br />
! $s8<br />
| $30 || [[frame pointer]] || {{yes}}<br />
|-<br />
! $ra<br />
| $31 || [[return statement|return address]] || {{N/A}}<br />
|}<br />
<br />
Registers that are preserved across a call are registers that (by convention) will not be changed by a system call or procedure (function) call. For example, $s-registers must be saved to the stack by a procedure that needs to use them, and $sp and $fp are always incremented by constants, and decremented back after the procedure is done with them (and the memory they point to). By contrast, $ra is changed automatically by any normal function call (ones that use jal), and $t-registers must be saved by the program before any procedure call (if the program needs the values inside them after the call).<br />
<br />
The userspace calling convention of position-independent code on Linux additionally requires that when a function is called the $t9 register must contain the address of that function.<ref>{{Cite web|url=https://www.linux-mips.org/wiki/PIC_code|title=PIC code – LinuxMIPS|website=www.linux-mips.org|language=en|access-date=September 21, 2018|archive-date=September 21, 2018|archive-url=https://web.archive.org/web/20180921153220/https://www.linux-mips.org/wiki/PIC_code|url-status=live}}</ref> This convention dates back to the System V ABI supplement for MIPS.<ref>{{cite web|url=http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf|title=System V Application Binary Interface MIPS RISC Processor Supplement, 3rd Edition|pages=3–12|access-date=August 17, 2020|archive-date=November 12, 2020|archive-url=https://web.archive.org/web/20201112032803/http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf|url-status=live}}</ref><br />
<br />
== Uses ==<br />
{{expand section|date=February 2020}}<br />
{{Update|section|part=2010s|date=August 2020}}<br />
<br />
MIPS processors are used in [[embedded system]]s such as [[residential gateway]]s and [[Router (computing)|router]]s. Originally, MIPS was designed for general-purpose computing. During the 1980s and 1990s, MIPS processors for [[Personal computer|personal]], [[workstation]], and [[Server (computing)|server]] computers were used by many companies such as [[Digital Equipment Corporation]], [[MIPS Computer Systems]], [[NEC]], [[Pyramid Technology]], [[SiCortex]], [[Siemens Nixdorf Informationssysteme|Siemens Nixdorf]], [[Silicon Graphics]], and [[Tandem Computers]].<br />
<br />
Historically, [[video game console]]s such as the [[Nintendo 64]], [[Sony]] [[PlayStation (console)|PlayStation]], [[PlayStation 2]], and [[PlayStation Portable]] used MIPS processors. MIPS processors also used to be popular in [[supercomputer]]s during the 1990s, but all such systems have dropped off the [[TOP500]] list. These uses were complemented by embedded applications at first, but during the 1990s, MIPS became a major presence in the embedded processor market, and by the 2000s, most MIPS processors were for these applications.<br />
<br />
In the mid- to late-1990s, it was estimated that one in three RISC microprocessors produced was a MIPS processor.<ref name="Victor P. Rubio, 2004">{{cite web|last=Rubio|first=Victor P|title=A FPGA Implementation of a MIPS RISC Processor for Computer Architecture Education|url=http://www.ece.nmsu.edu/~jecook/thesis/Victor_thesis.pdf|publisher=[[New Mexico State University]]|access-date=December 22, 2011|url-status=live|archive-url=https://web.archive.org/web/20120415011539/http://www.ece.nmsu.edu/~jecook/thesis/Victor_thesis.pdf|archive-date=April 15, 2012}}</ref><br />
<br />
By the late 2010s, MIPS machines were still commonly used in embedded markets, including automotive, wireless router, LTE modems (mainly via [[MediaTek]]), and microcontrollers (for example the [[Microchip Technology]] [[PIC microcontrollers#PIC32M MIPS-based line|PIC32M]]). They have mostly faded out of the personal, server, and application space.<br />
<br />
== Simulators ==<br />
<br />
Open Virtual Platforms (OVP)<ref>{{cite web |url=http://www.OVPworld.org |title=OVP: Fast Simulation, Free Open Source Models. Virtual Platforms for software development |publisher=Ovpworld.org |access-date=May 30, 2012 |url-status=live |archive-url=https://web.archive.org/web/20120608022021/http://www.ovpworld.org/ |archive-date=June 8, 2012 }}</ref> includes the freely available for non-commercial use simulator [[OVPsim]], a library of models of processors, peripherals and platforms, and APIs which enable users to develop their own models. The models in the library are open source, written in C, and include the MIPS 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, microAptiv, interAptiv, proAptiv 32-bit cores and the MIPS 64-bit 5K range of cores. These models are created and maintained by Imperas<ref>{{cite web |url=http://www.imperas.com |title=Imperas |publisher=Imperas |date=March 3, 2008 |access-date=May 30, 2012 |url-status=live |archive-url=https://web.archive.org/web/20120614212338/http://www.imperas.com/ |archive-date=June 14, 2012 }}</ref> and in partnership with MIPS Technologies have been tested and assigned the MIPS-Verified mark. Sample MIPS-based platforms include both bare metal environments and platforms for booting unmodified Linux binary images. These platforms–emulators are available as source or binaries and are fast, free for non-commercial usage, and are easy to use. OVPsim is developed and maintained by [[Imperas]] and is very fast (hundreds of million of instructions per second), and built to handle multicore homogeneous and heterogeneous architectures and systems.<br />
<br />
There is a freely available MIPS32 simulator (earlier versions simulated only the R2000/R3000) called [[SPIM]] for use in education. EduMIPS64<ref>{{cite web |url=http://www.edumips.org |title=EduMIPS64 |publisher=Edumips.org |access-date=May 30, 2012 |url-status=live |archive-url=https://web.archive.org/web/20120507013250/http://www.edumips.org/ |archive-date=May 7, 2012 }}</ref> is a GPL graphical cross-platform MIPS64 CPU simulator, written in Java/Swing. It supports a wide subset of the MIPS64 ISA and allows the user to graphically see what happens in the pipeline when an assembly program is run by the CPU.<br />
<br />
MARS<ref>{{cite web |url=http://courses.missouristate.edu/KenVollmar/MARS/ |title=MARS MIPS simulator - Missouri State University |publisher=Courses.missouristate.edu |access-date=May 30, 2012 |url-status=live |archive-url=https://web.archive.org/web/20120502195025/http://courses.missouristate.edu/KenVollmar/MARS/ |archive-date=May 2, 2012 }}</ref> is another GUI-based MIPS emulator designed for use in education, specifically for use with Hennessy's ''Computer Organization and Design''.<br />
<br />
WebMIPS<ref>{{cite web |url=http://www.maiconsoft.com.br/webmips/index.asp |title=WebMIPS - MIPS CPU PIPLINED SIMULATION On Line |access-date=January 13, 2012 |url-status=dead |archive-url=https://archive.today/20121231212131/http://www.maiconsoft.com.br/webmips/index.asp |archive-date=December 31, 2012 }} (online demonstration) {{cite web |url=http://www.dii.unisi.it/~giorgi/WEBMIPS/ |title=Archived copy |access-date=January 13, 2012 |url-status=live |archive-url=https://web.archive.org/web/20111010100936/http://www.dii.unisi.it/~giorgi/WEBMIPS/ |archive-date=October 10, 2011 }} (source)</ref> is a browser-based MIPS simulator with visual representation of a generic, pipelined processor. This simulator is quite useful for register tracking during step by step execution.<br />
<br />
QtMips<ref>{{cite web|url= https://github.com/cvut/QtMips/|title= QtMips - MIPS CPU simulator for education purposes|website= [[GitHub]]|access-date= January 24, 2021|url-status= live|archive-date= November 19, 2020|archive-url= https://web.archive.org/web/20201119192655/https://github.com/cvut/QtMips}}</ref><ref>{{cite thesis |type=MSc |last=Kočí |first=Karel |date=2018 |title=Graphical CPU Simulator with Cache Visualization |publisher=[[Czech Technical University in Prague]] |url=https://dspace.cvut.cz/bitstream/handle/10467/76764/F3-DP-2018-Koci-Karel-diploma.pdf |access-date=January 25, 2021 |url-status=live |archive-date=November 19, 2020 |archive-url=https://web.archive.org/web/20201119140019/https://dspace.cvut.cz/bitstream/handle/10467/76764/F3-DP-2018-Koci-Karel-diploma.pdf }}</ref><ref>{{cite web |last=Gizopoulos |first=Dimitris |author-link=Dimitris Gizopoulos |url=https://eclass.uoa.gr/modules/document/file.php/D52/%CE%94%CE%B9%CE%B1%CF%86%CE%AC%CE%BD%CE%B5%CE%B9%CE%B5%CF%82/%CE%A4%CE%B1%20%CE%B2%CE%B1%CF%83%CE%B9%CE%BA%CE%AC%20%CF%84%CE%BF%CF%85%20QtMips-v3.pdf |title=The basics of QtMips-v3 |date=December 6, 2020|publisher=[[National and Kapodistrian University of Athens]] |access-date=January 25, 2021}}{{dead link|date=February 2022}}</ref> provides simple 5-stages pipeline visualization as well as cache principle visualization for basic computer architectures courses. Windows, [[Linux]], [[macOS]] and online version is available.<br />
<br />
More advanced free emulators are available from the [[GXemul]] (formerly known as the mips64emul project) and [[QEMU]] projects. These emulate the various MIPS III and IV microprocessors in addition to entire computer systems which use them.<br />
<br />
Commercial simulators are available especially for the embedded use of MIPS processors, for example Wind River [[Simics]] (MIPS 4Kc and 5Kc, PMC RM9000, QED RM7000, Broadcom/Netlogic ec4400, [[Cavium]] Octeon I), [[Imperas]] (all MIPS32 and MIPS64 cores), VaST Systems (R3000, R4000), and [[CoWare]] (the MIPS4KE, MIPS24K, MIPS25Kf and MIPS34K).<br />
<br />
The Creator simulator<ref>{{Cite web|url=https://zenodo.org/record/5130302|title=CREATOR: Simulador didáctico y genérico para la programación en ensamblador|date=July 23, 2021|lang=es|access-date=September 29, 2021|archive-date=September 29, 2021|archive-url=https://web.archive.org/web/20210929155448/https://zenodo.org/record/5130302|url-status=live}}</ref><ref>CREATOR Web with MIPS32 example: https://creatorsim.github.io/creator/?example_set=default&example=e12 {{Webarchive|url=https://web.archive.org/web/20210929155446/https://creatorsim.github.io/creator/?example_set=default&example=e12 |date=September 29, 2021 }}</ref><ref>CREATOR source code on GitHub: https://github.com/creatorsim/creator {{Webarchive|url=https://web.archive.org/web/20210929155449/https://github.com/creatorsim/creator |date=September 29, 2021 }}</ref>is portable and allows the user to learn various assembly languages of different processors (Creator has examples with an implementation of MIPS32 and RISC-V instructions).<br />
<br />
WepSIM<ref>{{cite web |url=https://wepsim.github.io/wepsim/ws_dist/wepsim-classic.html?mode=ep&example=9&simulator=assembly:register_file&notify=false |title=WepSim |access-date=October 21, 2019 |id=(Web version with examples) |url-status=live |archive-date=October 1, 2017 |archive-url=https://web.archive.org/web/20171001030848/https://wepsim.github.io/wepsim/ }} {{cite web |url=https://github.com/wepsim/wepsim |title=WepSim |id=(GitHub site with source) |access-date=October 21, 2019 |url-status=live |archive-date=January 3, 2018 |archive-url=https://web.archive.org/web/20180103211610/https://github.com/wepsim/wepsim }}</ref> is a browser-based simulator where a subset of MIPS instructions are micro-programmed. This simulator is very useful in order to learn how a CPU works (microprogramming, MIPS routines, traps, interruptions, system calls, etc.).<br />
<br />
== See also ==<br />
* [[DLX]]<br />
* [[List of MIPS architecture processors]]<br />
* [[MIPS architecture processors]]<br />
* [[Pipeline (computing)]]<br />
* [[Prpl Foundation]]<br />
<br />
== References ==<br />
<br />
{{Reflist|30em}}<br />
<br />
== Further reading ==<br />
* {{cite book|first=Erin|last=Farquhar|author2=Philip Bunce|title=MIPS Programmer's Handbook|year=1994|publisher=Morgan Kaufmann Publishers|isbn=1-55860-297-6 |ref=none}}<br />
* {{cite book|first=David A|last=Patterson|author-link=David A. Patterson (scientist)|author2=John L. Hennessy|author2-link=John L. Hennessy|title=Computer Organization and Design: The Hardware/Software Interface|year=2004|publisher=[[Morgan Kaufmann Publishers]]|isbn=1-55860-604-1|url-access=registration|url=https://archive.org/details/isbn_9781558606043 |ref=none}}<br />
* {{cite book|first=Dominic|last=Sweetman|title=See MIPS Run|year=1999|publisher=Morgan Kaufmann Publishers|isbn=1-55860-410-3 |ref=none}}<br />
* {{cite book|first=Dominic|last=Sweetman|title=See MIPS Run, 2nd edition|year=2007|publisher=Morgan Kaufmann Publishers|isbn=978-0-12-088421-6 |ref=none}}<br />
<br />
== External links ==<br />
{{Wikibooks|MIPS Assembly}}<br />
{{Commons category|MIPS microprocessors}}<br />
* [https://www.mips.com/products/ MIPS Processors]<br />
* {{webarchive |url=https://web.archive.org/web/20130530213243/http://meld.org/library/education/mips-architectures |title=MIPS Architecture history diagram}}<br />
* [https://rivoire.cs.sonoma.edu/cs351/wemips/ Online MIPS emulator]<br />
* [https://web.cse.ohio-state.edu/~crawfis.3/cse675-02/Slides/MIPS%20Instruction%20Set.pdf MIPS Instructions - MIPS Instruction Set]<br />
<br />
{{MIPS microprocessors}}<br />
{{RISC-based processor architectures}}<br />
{{CPU technologies}}<br />
{{Authority control}}<br />
<br />
[[Category:MIPS architecture| ]]<br />
[[Category:Advanced RISC Computing]]<br />
[[Category:Computer-related introductions in 1985]]<br />
[[Category:Instruction set architectures]]<br />
[[Category:MIPS Technologies]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=.NET&diff=1064421798.NET2022-01-08T07:39:22Z<p>CodingKoopa: Added pronunciation of ".NET", as .NET Framework has.</p>
<hr />
<div>{{for multi|the earlier framework|.NET Framework|the top-level domain|.net|other uses|.net (disambiguation)}}<br />
{{Short description|Free and open-source software platform developed by Microsoft}}<br />
{{Infobox software<br />
| name = .NET<br />
| logo = .NET Logo.svg<br />
| logo_size = 150px<br />
| developer = [[.NET Foundation]]<br />
| replaces = [[.NET Framework]]<br />
| released = {{Start date and age|2016|06|27}}<br />
| discontinued = <br />
| latest release version = {{wikidata|property|edit|reference|P548=Q2804309|P348}}<br />
| latest release date = {{start date and age|{{wikidata|qualifier|P548=Q2804309|P348|P577}}}}<br />
<!-- Unhide when preview version of .NET is released: | latest preview version = {{wikidata|property|edit|reference|P548=Q3295609|P348}} --><br />
<!-- Unhide when preview version of .NET is released: | latest preview date = {{start date and age|{{wikidata|qualifier|P548=Q3295609|P348|P577}}}} --><br />
| programming language = [[C++]] and [[C Sharp (programming language)|C#]]<br />
| operating system = [[Windows]], [[Linux]] and [[macOS]]<br />
| platform = [[IA-32]], [[x86-64]], and [[ARM architecture|ARM]]<br />
| genre = [[Software framework]]<br />
| license = [[MIT License]]<ref name="GHlicense">{{cite web |url=https://github.com/dotnet/core/blob/master/LICENSE.TXT |title=core/LICENSE.TXT |website=[[GitHub]] |access-date=June 4, 2018}}</ref><br />
| website = {{URL|https://dotnet.microsoft.com/}}<br />
}}<br />
'''.NET''' (pronounced as "''dot net"''; previously named '''.NET Core''') is a [[free and open-source]], [[managed code|managed]] computer [[software framework]] for [[Microsoft Windows|Windows]], [[Linux]], and [[macOS]] [[operating system]]s.<ref>{{cite web|title=Download .NET Core|url=https://www.microsoft.com/net/download/core|website=microsoft.com|publisher=[[Microsoft]]|access-date=October 31, 2017}}</ref> It is a cross-platform<ref>{{cite web|title=.NET Core is the Future of .NET |url=https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-net/}}</ref> successor to [[.NET Framework]].<ref>{{cite web|title=.NET Framework is dead -- long live .NET 5|url=https://betanews.com/2019/05/07/future-of-dotnet/}}</ref> The project is primarily developed by [[Microsoft]] employees by way of the [[.NET Foundation]], and released under the [[MIT License]].<ref name="GHlicense" /><br />
<br />
==History==<br />
On November 12, 2014, Microsoft announced .NET Core, in an effort to include cross-platform support for .NET, including Linux and macOS, source for the .NET Core CoreCLR implementation, source for the "entire [...] library stack" for .NET Core, and the adoption of a conventional ("bazaar"-like) [[open-source software#Development model|open-source development model]] under the stewardship of the [[.NET Foundation]]. [[Miguel de Icaza]] describes .NET Core as a "redesigned version of .NET that is based on the simplified version of the class libraries",<ref name="icaza-dotnetcore-oss">{{cite web|title=Microsoft Open Sources .NET and Mono|first=Miguel|last=de Icaza|author-link=Miguel de Icaza|url=http://tirania.org/blog/archive/2014/Nov-12.html|website=Personal blog of Miguel de Icaza|access-date=November 16, 2014}}</ref> and Microsoft's Immo Landwerth explained that .NET Core would be "the foundation of all future .NET platforms". At the time of the announcement, the initial release of the .NET Core project had been seeded with a subset of the libraries' source code and coincided with the relicensing of Microsoft's existing .NET reference source away from the restrictions of the [[Ms-RSL]]. Landwerth acknowledged the disadvantages of the formerly selected shared license, explaining that it made [[Shared Source Common Language Infrastructure|codename Rotor]] "a non-starter" as a community-developed open source project because it did not meet the criteria of an [[Open Source Initiative]] (OSI) approved license.<ref name="landwerth-dotnetcore-oss">{{cite web|title=.NET Core is Open Source|url=https://blogs.msdn.microsoft.com/dotnet/2014/11/12/net-core-is-open-source/|website=.NET Framework Blog|publisher=Microsoft|access-date=December 30, 2014|date=November 12, 2014|first=Immo|last=Landwerth}}</ref><ref name="dotnetcore-github">{{cite web|title=dotnet/corefx|url=https://github.com/dotnet/corefx|publisher=GitHub|access-date=November 16, 2014}}</ref><ref name="referencesource-github">{{cite web|title=Microsoft/referencesource|url=https://github.com/Microsoft/referencesource|publisher=GitHub|access-date=November 16, 2014}}</ref><br />
<br />
{{Not a typo|.NET Core}} 1.0 was released on June 27, 2016,<ref name="arstechnicanetcorereleased">{{cite web|last1=Bright|first1=Peter|title=.NET Core 1.0 released, now officially supported by Red Hat|url=https://arstechnica.com/information-technology/2016/06/net-core-1-0-released-now-officially-supported-by-red-hat/|website=[[Ars Technica]]|publisher=[[Condé Nast]]|date=June 27, 2016}}</ref> along with [[Microsoft Visual Studio]] 2015 Update 3, which enables .NET Core development.<ref>{{cite web|last1=Foley|first1=Mary Jo|title=Microsoft showcases SQL Server, .NET Core on Red Hat Enterprise Linux deliverables|url=http://www.zdnet.com/article/microsoft-showcases-sql-server-net-core-on-red-hat-enterprise-linux-deliverables/|website=[[ZDNet]]|publisher=[[CBS Interactive]]|date=June 27, 2016}}</ref> {{Not a typo|.NET Core}} 1.0.4 and .NET Core 1.1.1 were released along with .NET Core Tools 1.0 and Visual Studio 2017 on March 7, 2017.<ref>{{cite web|url=https://blogs.msdn.microsoft.com/dotnet/2017/03/07/announcing-net-core-tools-1-0/ |title=Announcing .NET Core Tools 1.0 {{pipe}} .NET Blog |publisher=Blogs.msdn.microsoft.com |access-date=January 18, 2020}}</ref><br />
<br />
.NET Core 2.0 was released on August 14, 2017, along with Visual Studio 2017 15.3, ASP.NET Core 2.0, and [[Entity Framework]] Core 2.0.<ref name=":0">{{cite web|title=Announcing .NET Core 2.0|url=https://devblogs.microsoft.com/dotnet/announcing-net-core-2-0/|work=.NET Blog|publisher=Microsoft|date=August 14, 2017}}</ref> {{Not a typo|.NET Core}} 2.1 was released on May 30, 2018.<ref name=":1">{{cite web|title=Announcing .NET Core 2.1|url=https://devblogs.microsoft.com/dotnet/announcing-net-core-2-1/|work=.NET Blog|publisher=Microsoft|date=May 30, 2018}}</ref> NET Core 2.2 was released on December 4, 2018.<ref name=":2">{{cite web|title=Announcing .NET Core 2.2|url=https://devblogs.microsoft.com/dotnet/announcing-net-core-2-2/|work=.NET Blog|publisher=Microsoft|date=December 4, 2018}}</ref><br />
<br />
.NET Core 3 was released on September 23, 2019.<ref>{{cite web|url=https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-net/|title=.NET Core is the Future of .NET|date=May 6, 2019|website=.NET Blog|language=en-US|access-date=May 17, 2019}}</ref> .NET Core 3 adds support for Windows desktop application development<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#windows-desktop--com|title=What's new in .NET Core 3.0|website=.NET documentation|language=en-US|access-date=December 30, 2020}}</ref> and significant performance improvements throughout the base library.<br />
<br />
In November 2020, Microsoft released .NET 5.0, which replaced [[.NET Framework]]. The "Core" branding was removed and version 4.0 was skipped to avoid conflation with .NET Framework. It addresses the patent concerns related to the .NET Framework.<ref>{{Cite web|date=November 10, 2020|title=Announcing .NET 5.0|url=https://devblogs.microsoft.com/dotnet/announcing-net-5-0/|access-date=November 21, 2020|website=.NET Blog|language=en-US}}</ref><br />
<br />
In November 2021, Microsoft released .NET 6.0.<br />
<br />
{| class=wikitable<br />
|-<br />
! Version <br />
! Release date <br />
! Released with <br />
! Latest update <br />
! Latest update date <br />
! Support ends<ref>{{cite web|title=.NET Core official support policy|url=https://dotnet.microsoft.com/platform/support/policy/dotnet-core|work=.NET|publisher=Microsoft}}</ref><br />
|-<br />
| {{Version|o|.NET Core 1.0}} || 2016-06-27<ref>{{cite web|title=Announcing .NET Core 1.0|url=https://devblogs.microsoft.com/dotnet/announcing-net-core-1-0/|work=.NET Blog|publisher=Microsoft|date=June 27, 2016}}</ref> || [[Visual Studio 2015]] Update 3 || 1.0.16 || {{dts|2019|05|14}} || June 27, 2019<br />
|-<br />
| {{Version|o|.NET Core 1.1}} || 2016-11-16<ref>{{cite web|title=Announcing .NET Core 1.1|url=https://devblogs.microsoft.com/dotnet/announcing-net-core-1-1/|work=.NET Blog|publisher=Microsoft|date=November 16, 2016}}</ref> || [[Visual Studio 2017]] Version 15.0 || 1.1.13 || {{dts|2019|05|14}} || June 27, 2019<br />
|-<br />
| {{Version|o|.NET Core 2.0}} || 2017-08-14<ref name=":0" /> || Visual Studio 2017 Version 15.3 || 2.0.9 || {{dts|2018|07|10}} || October 1, 2018<br />
|-<br />
| {{Version|o|.NET Core 2.1}} || 2018-05-30<ref name=":1" /> || Visual Studio 2017 Version 15.7 || 2.1.30 ([[long-term support|LTS]]) || {{dts|2021|08|19}} || August 21, 2021<br />
|-<br />
| {{Version|o|.NET Core 2.2}} || 2018-12-04<ref name=":2" /> || [[Visual Studio 2019]] Version 16.0 || 2.2.8 || {{dts|2019|11|19}} || December 23, 2019<br />
|-<br />
| {{Version|o|.NET Core 3.0}} || 2019-09-23<ref>{{cite web|title=Announcing .NET Core 3.0|url=https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0/|work=.NET Blog|publisher=Microsoft|date=September 23, 2019}}</ref> || Visual Studio 2019 Version 16.3 || 3.0.3 || {{dts|2020|02|18}} || March 3, 2020<br />
|-<br />
| {{Version|co|.NET Core 3.1}} || 2019-12-03<ref>{{cite web|title=Announcing .NET Core 3.1|url=https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1/|work=.NET Blog|publisher=Microsoft|date=December 3, 2019}}</ref> || Visual Studio 2019 Version 16.4 || 3.1.22 ([[long-term support|LTS]]) || {{dts|2021|12|14}} || December 3, 2022<br />
|-<br />
| {{Version|co|.NET 5}} || 2020-11-10<ref>{{cite web|title=Announcing .NET 5.0|url=https://devblogs.microsoft.com/dotnet/announcing-net-5-0/|work=.NET Blog|publisher=Microsoft|date=November 10, 2020}}</ref> || Visual Studio 2019 Version 16.8 || 5.0.13 || {{dts|2021|12|14}} || May 8, 2022<br />
|-<br />
| {{Version|c|.NET 6}} || 2021-11-08<ref>{{cite web|title=Announcing .NET 6|url=https://devblogs.microsoft.com/dotnet/announcing-net-6/|work=.NET Blog|publisher=Microsoft|date=November 8, 2021}}</ref> || Visual Studio 2022 Version 17.0 || 6.0.1 ([[long-term support|LTS]]) || {{dts|2021|12|14}} || November 8, 2024<br />
|-<br />
| {{Version|p|.NET 7}} || 2022-11 (projected) || || || || May 2024 (projected)<br />
|-<br />
| {{Version|p|.NET 8}} || 2023-11 (projected) || || (will be [[long-term support|LTS]]) || || November 2026 (projected)<br />
|}<br />
<br />
.NET Core 2.1 and later, i.e. including .NET 5, support [[Alpine Linux]] (Alpine primarily supports and uses [[musl]] libc<ref>{{Cite web|title=Alpine 3.10.0 released {{!}} Alpine Linux|url=https://alpinelinux.org/posts/Alpine-3.10.0-released.html|access-date=June 9, 2020|website=alpinelinux.org}}</ref>).<ref>{{Cite web|title=dotnet/core|url=https://github.com/dotnet/core|access-date=June 9, 2020|website=GitHub|language=en}}</ref><br />
<br />
As of .NET 5, Windows Arm64 is natively supported. Previously, .NET on ARM was applications compiled for the x86 architecture, thereby meaning the applications were using the ARM emulation layer.<ref name="Announcing5">{{cite web|title=Announcing .NET 5.0|url=https://devblogs.microsoft.com/dotnet/announcing-net-5-0/|work=.NET Blog|publisher=Microsoft|date=November 10, 2020}}</ref><br />
<br />
==Language support==<br />
[[File:Overview of the Common Language Infrastructure 2015.svg|thumb|280px|.NET uses the [[Common Language Infrastructure]] (CLI)]]<br />
.NET fully supports [[C Sharp (programming language)|C#]] and [[F Sharp (programming language)|F#]] (and [[C++/CLI]] as of 3.1; only enabled on Windows) and supports [[Visual Basic .NET]] (for version 15.5 in .NET Core 5.0.100-preview.4, and some old versions supported in old .NET Core).<br />
<br />
VB.NET compiles and runs on .NET, but as of .NET Core 3.1, the separate Visual Basic Runtime is not implemented. Microsoft initially announced that .NET Core 3 would include the Visual Basic Runtime, but after two years the timeline for such support was updated to .NET 5.<ref>{{cite web|url=https://blogs.msdn.microsoft.com/vbteam/2018/11/12/visual-basic-in-net-core-3-0/ |title=Visual Basic in .NET Core 3.0 {{pipe}} Visual Basic Blog |publisher=Blogs.msdn.microsoft.com |date=October 12, 2019 |access-date=January 18, 2020}}</ref><ref>{{cite web|url=https://devblogs.microsoft.com/vbteam/visual-basic-support-planned-for-net-5-0/ |title=Visual Basic support planned for .NET 5.0 {{pipe}} Visual Basic Blog |publisher=Blogs.msdn.microsoft.com |date=March 11, 2020 |access-date=August 26, 2020}}</ref><br />
<br />
==Architecture==<br />
.NET supports four [[cross-platform]] scenarios: [[ASP.NET Core]] [[web app]]s; command-line apps; libraries; and [[Universal Windows Platform apps]]. Prior to .NET Core 3.0, it did not implement [[Windows Forms]] or [[Windows Presentation Foundation]] (WPF), which render the standard [[GUI]] for desktop software on Windows.<ref name=Cater2016>{{cite web |last1=Carter |first1=Phillip |last2=Knezevic |first2=Zlatko |title=.NET Core - .NET Goes Cross-Platform with .NET Core |url=https://msdn.microsoft.com/magazine/mt694084 |website=[[MSDN Magazine]] |publisher=[[Microsoft]] |date=April 2016 |volume=13 |number=4}}</ref><ref name="Schmelzer on .NET 2015">{{cite web |last1=Schmelzer |first1=Jay |title=.NET 2015 Overview |url=https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2015/NET-2015-Overview |website=[[Channel 9 (Microsoft) |Channel 9]] |publisher=[[Microsoft]] |date=November 18, 2015 |at=0:07:32}}</ref> Now, however, .NET Core 3 supports desktop technologies Windows Forms, WPF, and [[Universal Windows Platform]] (UWP).<ref name=Lander2018>{{cite web |last1=Lander |first1=Rich |title=.NET Core 3 and Support for Windows Desktop Applications |url=https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications/ |website=[[MSDN]] |publisher=[[Microsoft]] |date=May 7, 2018}}</ref> It is also possible to write cross-platform graphical applications using .NET with the [[GTKSharp|GTK#]] language-binding for the [[GTK]] widget toolkit.<br />
<br />
.NET supports use of [[NuGet]] packages. Unlike [[.NET Framework]], which is serviced using [[Windows Update]], .NET relies on its [[package manager]] to receive updates.<ref name=Cater2016/><ref name="Schmelzer on .NET 2015"/> Starting in December 2020, however, .NET updates started being delivered via Windows Update as well.<ref>{{Cite web|date=December 3, 2020|title=.NET Core 2.1, 3.1, and .NET 5.0 updates are coming to Microsoft Update|url=https://devblogs.microsoft.com/dotnet/net-core-updates-coming-to-microsoft-update/|access-date=December 15, 2020|website=.NET Blog|language=en-US}}</ref><br />
<br />
The two main components of .NET are CoreCLR and CoreFX, which are comparable to the [[Common Language Runtime]] (CLR) and the [[Framework Class Library]] (FCL) of the [[.NET Framework]]'s [[Common Language Infrastructure]] (CLI) implementation.<ref>{{Cite web|title=Understanding .NET Framework, .NET Core, .NET Standard And Future .NET|url=https://www.c-sharpcorner.com/blogs/understanding-net-framework-net-core-and-net-standard-and-future-net|access-date=February 1, 2021|website=www.c-sharpcorner.com|language=en}}</ref> <br />
<br />
As a CLI implementation of [[Virtual Execution System]] (VES), CoreCLR is a complete [[runtime system|runtime]] and [[virtual machine]] for [[managed code|managed]] [[execution (computing)|execution]] of CLI programs and includes a [[just-in-time compiler]] called RyuJIT.<ref>{{cite web |last1=Landwerth |first1=Immo |title=CoreCLR is now Open Source |url=https://blogs.msdn.microsoft.com/dotnet/2015/02/03/coreclr-is-now-open-source/ |website=.NET Framework Blog |publisher=[[Microsoft]] |access-date=February 27, 2015 |date=February 3, 2015}}</ref>{{efn|The prefix "Ryu" is the Japanese word for "dragon" (竜, ''ryū''), and is a reference to the book ''[[Compilers: Principles, Techniques, and Tools]]'' (commonly known as the dragon book, from an early cover design), as well as to a character from the video game ''[[Street Fighter]]''.<ref>{{cite web |title=Why RyuJIT? How was the name chosen? |url=https://akfd.wordpress.com/2014/11/25/what-is-ryujit/ |website=nuWave eSolutions Development Team Blog |access-date=June 21, 2016}}</ref>}} {{Not a typo|.NET Core}} also contains CoreRT, the {{Not a typo|.NET Native}} runtime optimized to be integrated into [[ahead-of-time compilation|AOT]] compiled native [[executable|binaries]].<ref>{{Cite web|last=Ramel|first=David|date=August 31, 2020|title=Microsoft Survey: Developers Held Back by Lack of 'Native AOT' in .NET Core -|url=https://visualstudiomagazine.com/articles/2020/08/31/aot-survey.aspx|url-status=live|archive-url=https://web.archive.org/web/20201022100947/https://visualstudiomagazine.com/articles/2020/08/31/aot-survey.aspx|archive-date=October 22, 2020|access-date=February 1, 2021|website=Visual Studio Magazine|language=en-US}}</ref> <br />
<br />
As a CLI implementation of the foundational [[Standard Libraries (CLI)|Standard Libraries]],<ref>{{cite web |last1=Landwerth |first1=Immo |title=Introducing .NET Core |url=https://blogs.msdn.microsoft.com/dotnet/2014/12/04/introducing-net-core/ |website=.NET Framework Blog |publisher=[[Microsoft]] |access-date=February 27, 2015 |date=December 4, 2014}}</ref> CoreFX shares a subset of {{Not a typo|.NET Framework}} APIs, however, it also comes with its own APIs that are not part of the {{Not a typo|.NET Framework}}.<ref name=Cater2016/> A variant of the .NET [[library (computing)|library]] is used for [[Universal Windows Platform|UWP]].<ref>{{cite web |title=Intro to .NET Native and CoreRT |url=https://github.com/dotnet/corert/blob/master/Documentation/intro-to-corert.md |date=April 23, 2016}}</ref><br />
<br />
The .NET [[command-line interface]] offers an execution entry point for [[operating system]]s and provides developer services like compilation and package management.<ref>{{cite web |title=Intro to CLI |url=https://github.com/dotnet/cli/blob/rel/1.0.0/Documentation/intro-to-cli.md |date=April 23, 2016}}</ref><br />
<br />
==Mascot==<br />
[[File:Dotnet-bot.svg|thumb|150px|dotnet bot, the community mascot for .NET]]<br />
The official community mascot of .NET is the .NET Bot (stylized as "dotnet bot" or "dotnet-bot"). The dotnet bot served as the placeholder developer for the initial check-in of the .NET source code when it was open-sourced.<ref>{{cite AV media |people=Wang, Abel |date=September 9, 2020 |title=What is the dotnet bot? |medium=Podcast |language=English |url=https://www.youtube.com/watch?v=OkHkQHurCIs |access-date=March 9, 2021 |time=4 seconds in |publisher=Microsoft}}</ref> It has since been used as the official mascot.<br />
<br />
==Notes==<br />
{{reflist|group=lower-alpha}}<br />
<br />
==References==<br />
{{Reflist|20em}}<br />
<br />
==Further reading==<br />
* {{cite book|author1-first=Hammad|author1-last=Arif|author2-first=Habib|author2-last=Qureshi|year=2020|title=Adopting .NET 5: Understand modern architectures, migration best practices, and the new features in .NET 5|publisher=Packt Publishing|isbn=978-1800560567}}<br />
* {{cite book|author-first=Dustin|author-last=Metzgar|year=2018|title=.NET Core in Action|publisher=Manning Publications|isbn=978-1617294273}}<br />
* {{cite book|author-first=Mark J.|author-last=Price|year=2020|title=C# 9 and .NET 5 – Modern Cross-Platform Development|publisher=Packt Publishing|isbn=978-1800568105}}<br />
* {{cite book|author-first=Mark J.|author-last=Price|year=2019|title=C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development|publisher=Packt Publishing|isbn=978-1788478120}}<br />
* {{cite book|author-first=Mark J.|author-last=Price|year=2017|title=C# 7.1 and .NET Core 2.0 – Modern Cross-Platform Development|publisher=Packt Publishing|isbn=978-1788398077}}<br />
* {{cite book|author-first=Mark J.|author-last=Price|year=2017|title=C# 7 and .NET Core: Modern Cross-Platform Development|publisher=Packt Publishing|isbn=978-1787129559}}<br />
* {{cite book|author-first=Mark J.|author-last=Price|year=2016|title=C# 6 and .NET Core 1.0: Modern Cross-Platform Development|publisher=Packt Publishing|isbn=978-1785285691}}<br />
* {{cite book|author-first=Alexey|author-last=Zimarev|year=2019|title=Hands-On Domain-Driven Design with .NET Core|publisher=Packt Publishing|isbn=978-1788834094}}<br />
<br />
==External links==<br />
<!--================{{No more links}}==================<br />
| PLEASE BE CAUTIOUS IN ADDING MORE LINKS TO THIS ARTICLE.<br />
|<br />
| Wikipedia is not a link collection nor should it be used to advertise.<br />
|<br />
| Excessive or inappropriate links WILL BE DELETED.<br />
|<br />
| For details, see [[Wikipedia:External links]] & [[Wikipedia:Spam]].<br />
|<br />
| If there are already plentiful links, please propose additions or<br />
| replacements on this article's discussion page, or submit your link | to the relevant category at the Open Directory Project (dmoz.org)<br />
| and link back to that project via the {{dmoz}} template.<br />
|<br />
======================={{No more links}}==================--><br />
<br />
{{Wikibooks|.NET Development Foundation}}<br />
{{Wikiversity|Introduction to .NET}}<br />
* {{Official website}}<br />
* [https://msdn.microsoft.com/en-us/library/zw4w595w.aspx Overview of .NET Framework (MSDN)]<br />
* [https://github.com/Microsoft/dotnet .NET GitHub repository]<br />
<br />
{{.NET}}<br />
{{Common Language Infrastructure}}<br />
{{Microsoft APIs}}<br />
{{Microsoft FOSS}}<br />
<br />
[[Category:.NET implementations]]<br />
[[Category:Cross-platform software]]<br />
[[Category:Microsoft application programming interfaces]]<br />
[[Category:Microsoft development tools]]<br />
[[Category:Microsoft free software]]<br />
[[Category:Software using the MIT license]]<br />
[[Category:2016 software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=.NET_Framework&diff=1064418792.NET Framework2022-01-08T07:07:45Z<p>CodingKoopa: Mention CLI and .NET in the article introduction.</p>
<hr />
<div>{{Short description|Software platform developed by Microsoft}}<br />
{{for multi|the newer cross-platform framework|.NET|other uses|.net (disambiguation)}}<br />
{{Use mdy dates|date=September 2018}}<br />
{{Infobox software<br />
| name = .NET Framework<br />
| logo = .NET Logo.svg<br />
| logo size = 120px<br />
| screenshot = DotNet.svg<br />
| caption = .NET Framework component stack<br />
| developer = [[Microsoft]]<br />
| released = {{Start date and age|2001|02|14}}<br />
| discontinued = yes<br />
| latest release version = 4.8.0 Build 4115<br />
| latest release date = {{Start date and age|2021|05|01}}<ref>{{Cite web|url=https://dotnet.microsoft.com/download/thank-you/net48-offline|title=Download .NET Framework 4.8 Offline Installer|website=Microsoft|access-date=August 15, 2019|archive-date=August 15, 2019|archive-url=https://web.archive.org/web/20190815224743/https://dotnet.microsoft.com/download/thank-you/net48-offline|url-status=live}}</ref><br />
| replaced_by = [[.NET]]<br />
| operating system = [[Windows 98]] or later, [[Windows NT 4.0]] or later<br />
| platform = [[IA-32]], [[x86-64]], and [[ARM architecture|ARM]]<br />
| genre = [[Software framework]]<br />
| license = Mixed; see {{section link||Licensing}}<br />
| website = <!-- no need to specify here... it is in WikiData --><br />
}}<br />
The '''.NET Framework''' (pronounced as "''dot net"'') is a proprietary [[software framework]] developed by [[Microsoft]] that runs primarily on [[Microsoft Windows]]. It was the predominant implementation of the [[Common Language Infrastructure]] (CLI) until being superseded by the cross-platform [[.NET]] project. It includes a large [[class library]] called [[Framework Class Library]] (FCL) and provides [[language interoperability]] (each language can use code written in other languages) across several [[programming language]]s. Programs written for .NET Framework execute in a [[software]] environment (in contrast to a [[computer hardware|hardware]] environment) named the [[Common Language Runtime]] (CLR). The CLR is an [[process virtual machine|application virtual machine]] that provides services such as security, [[memory management]], and [[exception handling]]. As such, computer code written using .NET Framework is called "[[managed code]]". FCL and CLR together constitute the .NET Framework.<br />
<br />
FCL provides the [[user interface]], [[data access]], [[database connection|database connectivity]], [[cryptography]], [[web application]] development, numeric [[algorithm]]s, and [[computer networking|network communications]]. Programmers produce software by combining their [[source code]] with .NET Framework and other libraries. The framework is intended to be used by most new applications created for the Windows platform. Microsoft also produces an [[integrated development environment]] for .NET software called [[Microsoft Visual Studio|Visual Studio]].<br />
<br />
.NET Framework began as [[proprietary software]], although the firm worked to [[software standard|standardize]] the software stack almost immediately, even before its first release. Despite the standardization efforts, developers, mainly those in the [[free and open-source software]] communities, expressed their unease with the selected terms and the prospects of any free and open-source implementation, especially regarding [[software patent]]s. Since then, Microsoft has changed .NET development to more closely follow a contemporary model of a community-developed software project, including issuing an update to its patent promising to address the concerns.<ref>{{Cite web|date=November 19, 2014 |title=Microsoft gets on board with open source|url=https://opensource.com/business/14/11/microsoft-dot-net-empower-open-source-communities|access-date=2020-01-02|website=Opensource.com|language=en}}</ref><br />
<br />
In April 2019, Microsoft released .NET Framework 4.8, the last version of the framework as a proprietary offering. Only monthly security and reliability bug fixes to that version have been released since then. No further changes to that version are planned.<ref>{{Cite web|last=gewarren|title=.NET Framework & Windows OS versions|url=https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/versions-and-dependencies|access-date=2020-11-21|website=docs.microsoft.com|language=en-us}}</ref><br />
<br />
==History==<br />
{{Main|.NET Framework version history}}<br />
Microsoft began developing .NET Framework in the late 1990s, originally under the name of Next Generation Windows Services (NGWS), as part of the [[.NET strategy]]. By early 2000, the first beta versions of .NET 1.0 were released.<br />
<br />
In August 2000, [[Microsoft]], and [[Intel]] worked to standardize [[Common Language Infrastructure]] (CLI) and [[C Sharp (programming language)|C#]]. By December 2001, both were ratified [[Ecma International]] (ECMA) standards.<ref>{{cite web|url=http://www.ecma-international.org/publications/standards/Ecma-335.htm|title=Standard ECMA-335: Common Language Infrastructure (CLI)|date=June 2012|website=ecma-international.org|publisher=[[Ecma International|ECMA]]|edition=6|access-date=August 31, 2005|archive-date=June 26, 2013|archive-url=https://www.webcitation.org/6HfXxFXH8?url=http://www.ecma-international.org/publications/standards/Ecma-335.htm|url-status=live}}</ref><ref>{{cite web|url=http://www.ecma-international.org/publications/standards/Ecma-334.htm|title=Standard ECMA-334: C# Language Specification|date=June 2006|website=ecma-international.org|publisher=[[Ecma International|ECMA]]|edition=4|access-date=August 31, 2005|archive-date=October 31, 2010|archive-url=https://web.archive.org/web/20101031042906/http://www.ecma-international.org/publications/standards/Ecma-334.htm|url-status=live}}</ref> [[International Organization for Standardization]] (ISO) followed in April 2003. The current version of ISO standards are ISO/IEC 23271:2012 and ISO/IEC 23270:2006.<ref>{{cite web|url=http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=58046|title=ISO/IEC 23271:2012 Information technology – Common Language Infrastructure|publisher=[[International Organization for Standardization]]|date=February 13, 2012|edition=3|website=iso.org}}</ref><ref>{{cite web|url=http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=42926|title=ISO/IEC 23270:2006 – Information technology – Programming languages – C#|publisher=[[International Organization for Standardization]]|date=January 26, 2012|website=iso.org|edition=2|access-date=April 1, 2008|archive-date=December 6, 2010|archive-url=https://web.archive.org/web/20101206152217/http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=42926|url-status=live}}</ref><br />
<br />
While Microsoft and their partners hold patents for CLI and C#, ECMA and ISO require that all patents essential to implementation be made available under "[[reasonable and non-discriminatory licensing|reasonable and non-discriminatory terms]]". The firms agreed to meet these terms, and to make the patents available royalty-free. However, this did not apply for the part of .NET Framework not covered by ECMA-ISO standards, which included [[Windows Forms]], [[ADO.NET]], and [[ASP.NET]]. Patents that Microsoft holds in these areas may have deterred non-Microsoft implementations of the full framework.<ref>{{cite web|title=Microsoft's Empty Promise|url=http://www.fsf.org/news/2009-07-mscp-mono|work=[[Free Software Foundation]]|date=July 16, 2009|quote=However, there are several libraries that are included with Mono, and commonly used by applications like Tomboy, that are not required by the standard. And just to be clear, we're not talking about Windows-specific libraries like ASP.NET and Windows Forms. Instead, we're talking about libraries under the System namespace that provide common functionality programmers expect in modern programming languages|access-date=August 3, 2009|archive-url=https://web.archive.org/web/20090819101829/http://www.fsf.org/news/2009-07-mscp-mono/|archive-date=August 19, 2009|url-status=live|df=dmy}}</ref><br />
<br />
On October 3, 2007, Microsoft announced that the [[source code]] for .NET Framework 3.5 libraries was to become available under the [[Microsoft Reference Source License]] (Ms-RSL{{efn|name=Ms-RSL-dab|The license was formerly abbreviated Ms-RL, but Ms-RL now refers to the [[Microsoft Reciprocal License]].}}).<ref name="sourcerelease">{{cite web|url=http://weblogs.asp.net/scottgu/releasing-the-source-code-for-the-net-framework-libraries|title=Releasing the Source Code for the NET Framework|website=Scott Guthrie's Blog|publisher=[[Microsoft]]|first=Scott|last=Guthrie|author-link=Scott Guthrie|date=October 3, 2007|access-date=September 15, 2010|archive-url=https://web.archive.org/web/20100907233621/http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx|archive-date=September 7, 2010|url-status=live|df=dmy}}</ref> The source code repository became available online on January 16, 2008 and included BCL, ASP.NET, ADO.NET, Windows Forms, WPF, and XML. [[Scott Guthrie]] of Microsoft promised that LINQ, WCF, and WF libraries were being added.<ref>{{cite web|title=.NET Framework Library Source Code now available|url=https://weblogs.asp.net/scottgu/net-framework-library-source-code-now-available|website=Scott Guthrie's Blog|publisher=[[Microsoft]]|access-date=February 28, 2015|date=January 16, 2008|first=Scott|last=Guthrie|author-link=Scott Guthrie}}</ref><br />
<br />
The [[.NET Compact Framework]] and [[.NET Micro Framework]] variants of the .NET Framework provided support for other Microsoft platforms such as [[Windows Mobile]], [[Windows CE]] and other resource-constrained embedded devices. [[Silverlight]] provided support for [[web browser]]s via plug-ins.<br />
<br />
[[File:Microsoft .NET Framework v4.5 logo.png|thumb|Microsoft .NET Framework v4.5 logo]]<br />
<br />
In November 2014, Microsoft also produced an update to its patent grants, which further extends the scope beyond its prior pledges. Prior projects like [[Mono (software)|Mono]] existed in a legal [[loophole|grey area]] because Microsoft's earlier grants applied only to the technology in "covered specifications", including strictly the 4th editions each of ECMA-334 and ECMA-335. The new patent promise, however, places no ceiling on the specification version, and even extends to any .NET runtime technologies documented on MSDN that have not been formally specified by the ECMA group, if a project chooses to implement them. This allows Mono and other projects to maintain feature parity with modern .NET features that have been introduced since the 4th edition was published without being at risk of patent litigation over the implementation of those features. The new grant does maintain the restriction that any implementation must maintain minimum compliance with the mandatory parts of the CLI specification.<ref name="dotnet-patent-promise">{{cite web|title=Microsoft Patent Promise for .NET Libraries and Runtime Components|website=[[GitHub]]|url=https://github.com/dotnet/corefx/blob/master/PATENTS.TXT|access-date=November 16, 2014|archive-date=February 21, 2021|archive-url=https://web.archive.org/web/20210221070138/https://github.com/dotnet/corefx/blob/master/PATENTS.TXT|url-status=live}}</ref><br />
<br />
On March 31, 2016, Microsoft announced at [[Build (developer conference)|Microsoft Build]] that they will completely [[software relicensing|relicense]] Mono under an [[MIT License]] even in scenarios where formerly a commercial license was needed.<ref>{{cite web|last1=Krill|first1=Paul|title=Xamarin's Mono runtime gets a looser license|url=http://www.infoworld.com/article/3050732/microsoft-windows/xamarins-mono-runtime-gets-a-looser-license.html|website=[[InfoWorld]]|publisher=[[IDG]]|date=April 1, 2016}}</ref> Microsoft also supplemented its prior patent promise for Mono, stating that they will not assert any "applicable patents" against parties that are "using, selling, offering for sale, importing, or distributing Mono."<ref name=Ferraira1>{{cite web|url=http://techreport.com/news/29929/xamarin-now-comes-free-with-visual-studio|title=Xamarin now comes free with Visual Studio.|work=The Tech Report|date=March 31, 2016|first=Bruno|last=Ferraira|access-date=April 12, 2016|archive-date=April 2, 2016|archive-url=https://web.archive.org/web/20160402173444/http://techreport.com/news/29929/xamarin-now-comes-free-with-visual-studio|url-status=live}}</ref><ref name="Microsoft_PP_Mono">{{cite web|url=https://github.com/mono/mono/blob/master/PATENTS.TXT|title=Microsoft Patent Promise for Mono|work=Mono on GitHub|publisher=Mono Project|date=March 28, 2016|archive-url=https://web.archive.org/web/20160416133644/https://github.com/mono/mono/blob/master/PATENTS.TXT|archive-date=April 16, 2016|access-date=April 16, 2016|url-status=live|df=dmy}}</ref> It was announced that the Mono Project was contributed to the .NET Foundation. These developments followed the acquisition of [[Xamarin]], which began in February 2016 and was finished on March 18, 2016.<ref name="Friedman2">{{cite web|url=https://blog.xamarin.com/xamarin-for-all/|title=Xamarin for Everyone|work=Xamarin Blog|publisher=Xamarin|date=March 31, 2016|archive-url=https://web.archive.org/web/20160412072728/https://blog.xamarin.com/xamarin-for-all/|archive-date=April 12, 2016|access-date=April 12, 2016}}</ref><br />
<br />
Microsoft's press release highlights that the cross-platform commitment now allows for a fully open-source, modern server-side .NET stack. Microsoft released the source code for WPF, Windows Forms and WinUI on December 4, 2018.<ref name="ms-wpf-winforms-oss">{{cite web|title=Announcing Open Source of WPF, Windows Forms, and WinUI at Microsoft Connect 2018|url=https://blogs.windows.com/buildingapps/2018/12/04/announcing-open-source-of-wpf-windows-forms-and-winui-at-microsoft-connect-2018/|website=Windows Developer Blog|date=December 4, 2018|publisher=Microsoft|access-date=December 24, 2018|archive-url=https://web.archive.org/web/20181215163944/https://blogs.windows.com/buildingapps/2018/12/04/announcing-open-source-of-wpf-windows-forms-and-winui-at-microsoft-connect-2018/|archive-date=December 15, 2018}}</ref><br />
<br />
==Architecture==<br />
[[File:Overview of the Common Language Infrastructure.svg|thumb|right|330px|Visual overview of the Common Language Infrastructure (CLI)]]<br />
<br />
===Common Language Infrastructure===<br />
{{Main|Common Language Infrastructure}}<br />
Common Language Infrastructure (CLI) provides a language-neutral platform for application development and execution. By implementing the core aspects of .NET Framework within the scope of CLI, these functions will not be tied to one language but will be available across the many languages supported by the framework.<br />
<br />
===Common Language Runtime===<br />
{{Main|Common Language Runtime}}<br />
.NET Framework includes the Common Language Runtime (CLR). It serves as the execution engine of .NET Framework and offers many services such as [[memory management]], [[type safety]], [[exception handling]], [[garbage collection (computer science)|garbage collection]], security and [[thread management]]. All programs written for .NET Framework are executed by the CLR.<br />
<br />
Programs written for .NET Framework are compiled into [[Common Intermediate Language|Common Intermediate Language code]] (CIL), as opposed to being directly compiled into [[machine code]]. During execution, an architecture-specific [[just-in-time compiler]] (JIT) turns the [[Common Intermediate Language|CIL code]] into machine code.<br />
<br />
===Assemblies===<br />
Compiled CIL code is stored in [[assembly (CLI)|CLI assemblies]]. As mandated by the specification, assemblies are stored in [[Portable Executable]] (PE) file format, common on Windows platform for all ''[[dynamic-link library]]'' (DLL) and ''executable'' [[EXE]] files. Each assembly consists of one or more files, one of which must contain a manifest bearing the [[metadata]] for the assembly. The complete name of an assembly (not to be confused with the file name on disk) contains its simple text name, version number, culture, and [[public key]] token. Assemblies are considered equivalent if they share the same complete name.<br />
<br />
A private key can also be used by the creator of the assembly for [[strong name|strong naming]]. The public key token identifies which private key an assembly is signed with. Only the creator of the key pair (typically the person signing the assembly) can sign assemblies that have the same strong name as a prior version assembly, since the creator possesses the private key. Strong naming is required to add assemblies to [[Global Assembly Cache]].<br />
<br />
Starting with Visual Studio 2015, .NET Native compilation technology allows for the compilation of .NET code of [[Universal Windows Platform apps]] directly to machine code rather than CIL code, but the app must be written in either C# or Visual Basic.NET.<ref>{{cite web|url=https://docs.microsoft.com/en-us/dotnet/framework/net-native/|title=Compiling Apps with .NET Native|last=rpetrusha|website=docs.microsoft.com|access-date=December 2, 2017|archive-date=December 3, 2017|archive-url=https://web.archive.org/web/20171203082710/https://docs.microsoft.com/en-us/dotnet/framework/net-native/|url-status=live}}</ref><br />
<br />
===Class library===<br />
{{Main|Framework Class Library}}<br />
.NET Framework includes an implementation of the CLI foundational [[Standard Libraries (CLI)|Standard Libraries]]. The .NET Framework Class Library (FCL) is organized in a hierarchy of [[namespace]]s. Most of the built-in [[application programming interface]]s (APIs) are part of either <code>System.*</code> or <code>Microsoft.*</code> namespaces. These class libraries implement many common functions, such as file reading and writing, graphic rendering, database interaction, and XML document manipulation. The class libraries are available for all [[List of CLI languages|CLI compliant languages]]. The FCL implements the CLI [[Base Class Library]] (BCL) and other class libraries—some are specified by CLI and other are Microsoft specific.<br />
<br />
BCL includes a small subset of the entire class library and is the core set of classes that serve as the basic [[API]] of CLR.<ref name="bcllibs">{{cite web|url=https://msdn.microsoft.com/netframework/aa569603.aspx|title=Base Class Library|access-date=June 1, 2008}}</ref> For .NET Framework most classes considered being part of BCL reside in <code>mscorlib.dll</code>, <code>System.dll</code> and <code>System.Core.dll</code>. BCL classes are available in .NET Framework as well as its alternative implementations including [[.NET Compact Framework]], [[Microsoft Silverlight]], [[.NET Core]] and [[Mono (software)|Mono]].<br />
<br />
FCL refers to the entire class library that ships with .NET Framework. It includes an expanded set of libraries, including BCL, [[Windows Forms]], [[ASP.NET]], and [[Windows Presentation Foundation]] (WPF) but also extensions to the base class libraries [[ADO.NET]], [[Language Integrated Query]] (LINQ), [[Windows Communication Foundation]] (WCF), and [[Workflow Foundation]] (WF). FCL is much larger in scope than standard libraries for languages like [[C++]], and comparable in scope to [[Java Class Library|standard libraries of Java]].<br />
<br />
With the introduction of alternative implementations (e.g., Silverlight), Microsoft introduced the concept of Portable Class Libraries (PCL) allowing a consuming library to run on more than one platform. With the further proliferation of .NET platforms, the PCL approach failed to scale (PCLs are defined intersections of API surface between two or more platforms).<ref name="netstandard">{{cite web|url=https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md|title=.NET Platform Standard|website=[[GitHub]]|access-date=April 23, 2016|archive-date=May 19, 2016|archive-url=https://web.archive.org/web/20160519180849/https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md|url-status=live}}</ref> As the next evolutionary step of PCL, the .NET Standard Library was created retroactively based on the <code>System.Runtime.dll</code> based APIs found in UWP and Silverlight. New .NET platforms are encouraged to implement a version of the standard library allowing them to re-use extant third-party libraries to run without new versions of them. The .NET Standard Library allows an independent evolution of the library and app model layers within the .NET architecture.<ref name="appmodels">{{cite web|url=http://www.hanselman.com/blog/AnUpdateOnASPNETCore10RC2.aspx|title=An update on ASP.NET Core 1.0 RC2|access-date=April 23, 2016}}</ref><br />
<br />
[[NuGet]] is the package manager for all .NET platforms. It is used to retrieve third-party libraries into a .NET project with a global library feed at NuGet.org.<ref>{{cite web|url=https://nuget.org|title=NuGet Gallery - Home|website=nuget.org|access-date=February 21, 2021|archive-date=February 21, 2021|archive-url=https://web.archive.org/web/20210221070142/https://www.nuget.org/|url-status=live}}</ref> Private feeds can be maintained separately, e.g., by a build server or a file system directory.<br />
<br />
===C++/CLI===<br />
{{Main|C++/CLI}}<br />
Microsoft introduced [[C++/CLI]] in [[Visual Studio]] 2005, which is a language and means of compiling [[Visual C++]] programs to run within the .NET Framework. Some parts of the C++ program still run within an unmanaged [[Visual C++]] Runtime, while specially modified parts are translated into [[Common Intermediate Language|CIL code]] and run with the .NET Framework's [[Common Language Runtime|CLR]].<br />
<br />
Assemblies compiled using the C++/CLI compiler are termed mixed-mode assemblies, since they contain native and managed code in the same DLL.<ref>[https://msdn.microsoft.com/en-us/library/x0w2664k.aspx Mixed (Native and Managed) Assemblies] {{Webarchive|url=https://web.archive.org/web/20141022111729/http://msdn.microsoft.com/en-us/library/x0w2664k.aspx |date=October 22, 2014 }}, MSDN</ref> Such assemblies are more complex to reverse engineer, since .NET [[decompilers]] such as [[.NET Reflector]] reveal only the managed code.<br />
<br />
==Design principle==<br />
<br />
===Interoperability===<br />
Because computer systems commonly require interaction between newer and older applications, .NET Framework provides means to access functions implemented in newer and older programs that execute outside .NET environment. Access to [[Component Object Model]] (COM) components is provided in <code>System.Runtime.InteropServices</code> and <code>System.EnterpriseServices</code> namespaces of the framework. Access to other functions is via [[Platform Invocation Services]] (P/Invoke). Access to .NET functions from native applications is via reverse P/Invoke function.<br />
<br />
===Language independence===<br />
.NET Framework introduces a [[Common Type System]] (CTS) that defines all possible [[data type]]s and [[programming language|programming]] constructs supported by CLR and how they may or may not interact conforming to CLI specification. Because of this feature, .NET Framework supports the exchange of types and object instances between libraries and applications written using [[list of CLI languages|any conforming .NET language]].<br />
<br />
===Type safety===<br />
CTS and the CLR used in .NET Framework also enforce [[type safety]]. This prevents ill-defined casts, wrong method invocations, and memory size issues when accessing an object. This also makes most CLI languages [[type system|statically typed]] (with or without [[type inference]]). However, starting with .NET Framework 4.0, the [[Dynamic Language Runtime]] extended the CLR, allowing dynamically typed languages to be implemented atop the CLI.<br />
<br />
===Portability===<br />
While Microsoft has never implemented the full framework on any system except Microsoft Windows, it has engineered the framework to be cross-platform,<ref>{{cite web|url=https://channel9.msdn.com/shows/Going+Deep/Scott-Guthrie-Silverlight-and-the-Cross-Platform-CLR|title=Scott Guthrie: Silverlight and the Cross-Platform CLR|date=April 30, 2007|publisher=[[Channel 9 (discussion forum)|Channel 9]]|access-date=April 16, 2016|archive-url=https://www.webcitation.org/6XHacUsDc?url=http://channel9.msdn.com/shows/Going+Deep/Scott-Guthrie-Silverlight-and-the-Cross-Platform-CLR|archive-date=March 25, 2015|url-status=live|df=dmy}}</ref> and implementations are available for other operating systems (see [[Microsoft Silverlight|Silverlight]] and [[#Alternative implementations|§ Alternative implementations]]). Microsoft submitted the specifications for CLI (which includes the core class libraries, CTS, and CIL),<ref>{{cite web|url=http://www.ecma-international.org/publications/standards/Ecma-335.htm|title=ECMA 335 – Standard ECMA-335 Common Language Infrastructure (CLI) 4th edition (June 2006)|date=June 1, 2006|access-date=June 1, 2008|publisher=ECMA|archive-url=https://web.archive.org/web/20080614092650/http://www.ecma-international.org/publications/standards/Ecma-335.htm|archive-date=June 14, 2008}}</ref><ref>{{cite web|url=http://standards.iso.org/ittf/PubliclyAvailableStandards/c042927_ISO_IEC_23271_2006(E)_Software.zip|title=ISO/IEC 23271:2006|publisher=Standards.iso.org|date=September 29, 2006|access-date=April 17, 2012|archive-date=July 1, 2018|archive-url=https://web.archive.org/web/20180701142510/http://standards.iso.org/ittf/PubliclyAvailableStandards/c042927_ISO_IEC_23271_2006%28E%29_Software.zip|url-status=live}}</ref><ref>{{cite web|url=http://www.ecma-international.org/publications/techreports/E-TR-084.htm|title=Technical Report TR/84 Common Language Infrastructure (CLI) – Information Derived from Partition IV XML File|date=June 1, 2006|publisher=ECMA|access-date=April 16, 2016|archive-url=https://www.webcitation.org/6XHagdtvH?url=http://www.ecma-international.org/publications/techreports/E-TR-084.htm|archive-date=March 25, 2015|url-status=live|df=dmy}}</ref> [[C Sharp (programming language)|C#]],<ref>{{cite web|url=http://www.ecma-international.org/publications/standards/Ecma-334.htm|title=ECMA-334 C# Language Specification|date=June 1, 2006|publisher=ECMA|access-date=August 31, 2005|archive-date=October 31, 2010|archive-url=https://web.archive.org/web/20101031042906/http://www.ecma-international.org/publications/standards/Ecma-334.htm|url-status=live}}</ref> and C++/CLI<ref>{{cite web|url=http://www.ecma-international.org/publications/standards/Ecma-372.htm|title=Standard ECMA-372 C++/CLI Language Specification|date=December 1, 2005|publisher=ECMA|access-date=January 16, 2008|archive-url=https://web.archive.org/web/20080810165757/http://www.ecma-international.org/publications/standards/Ecma-372.htm|archive-date=August 10, 2008|url-status=dead}}</ref> to both [[Ecma International]] (ECMA) and [[International Organization for Standardization]] (ISO), making them available as official standards. This makes it possible for third parties to create compatible implementations of the framework and its languages on other platforms.<br />
<br />
===Security===<br />
.NET Framework has its own security mechanism with two general features: [[Code Access Security]] (CAS), and validation and verification. CAS is based on evidence that is associated with a specific assembly. Typically the evidence is the source of the assembly (whether it is installed on the local machine or has been downloaded from the Internet). CAS uses evidence to determine the permissions granted to the code. Other code can demand that calling code be granted a specified permission. The demand causes CLR to perform a call stack walk: every assembly of each method in the call stack is checked for the required permission; if any assembly is not granted the permission a security exception is thrown.<br />
<br />
[[Managed code|Managed]] [[Common Intermediate Language|CIL]] bytecode is easier to [[reverse engineering#Reverse engineering of software|reverse-engineer]] than native code, unless [[obfuscated code|obfuscated]].<ref>Gartner, Inc. as reported in "Hype Cycle for Cyberthreats, 2006", September 2006, Neil MacDonald; Amrit Williams, et al.</ref> {{Not a typo|.NET}} [[decompiler]] programs enable developers with no reverse-engineering skills to view the source code behind unobfuscated .NET assemblies. In contrast, apps compiled to native machine code are much harder to reverse-engineer, and source code is almost never produced successfully, mainly because of compiler optimizations and lack of [[reflection (computer programming)|reflection]].<ref>{{cite thesis|last1=Cifuentes|first1=Cristina|title=Reverse Compilation Techniques|chapter-url=http://www.labri.fr/perso/fleury/download/papers/binary_analysis/cifuentes-thesis.pdf|publisher=[[Queensland University of Technology]]|date=July 1994|chapter=6: Control Flow Analysis|url-status=dead|archive-url=https://web.archive.org/web/20161122154356/http://www.labri.fr/perso/fleury/download/papers/binary_analysis/cifuentes-thesis.pdf|archive-date=November 22, 2016|df=dmy-all}}</ref> This creates concerns in the business community over the possible loss of [[trade secret]]s and the bypassing of license control mechanisms. To mitigate this, Microsoft has included [[Dotfuscator]] Community Edition with [[Visual Studio .NET]] since 2002.{{efn|Dotfuscator Community Edition 4.0}} Third-party obfuscation tools are also available from vendors such as [[VMware]], [[V.i. Labs]], [[Turbo (software)|Turbo]], and [[Red Gate Software]]. Method-level encryption tools for .NET code are available from vendors such as [[SafeNet]].<br />
<br />
===Memory management===<br />
CLR frees the developer from the burden of managing memory (allocating and freeing up when done); it handles memory management itself by detecting when memory can be safely freed. Instantiations of .NET types (objects) are allocated from the managed heap; a pool of memory managed by CLR. As long as a reference to an object exists, which may be either direct, or via a [[graph (data structure)|graph]] of objects, the object is considered to be in use. When no reference to an object exists, and it cannot be reached or used, it becomes garbage, eligible for collection.<br />
<br />
.NET Framework includes a [[Garbage collection (computer science)|garbage collector]] (GC) which runs periodically, on a separate [[thread (computing)|thread]] from the application's thread, that enumerates all the unusable objects and reclaims the memory allocated to them. It is a non-deterministic, compacting, [[tracing garbage collection#Naïve mark-and-sweep|mark-and-sweep]] garbage collector. GC runs only when a set amount of memory has been used or there is enough pressure for memory on the system. Since it is not guaranteed when the conditions to reclaim memory are reached, GC runs are [[Nondeterministic algorithm|non-deterministic]]. Each .NET application has a set of roots, which are pointers to objects on the managed heap (''managed objects''). These include references to static objects, objects defined as local variables or method parameters currently in scope, and objects referred to by CPU registers.<ref name="part1">{{cite web|url=https://msdn.microsoft.com/msdnmag/issues/1100/GCI/|archive-url=https://web.archive.org/web/20070703083608/http://msdn.microsoft.com/msdnmag/issues/1100/GCI/|archive-date=July 3, 2007|title=Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework|access-date=June 1, 2008|url-status=dead|df=mdy-all}}</ref> When GC runs, it pauses the application and then, for each object referred to in the root, it [[recursion|recursively]] enumerates all the objects reachable from the root objects and marks them as reachable. It uses CLI metadata and [[reflection (computer programming)|reflection]] to discover the objects encapsulated by an object, and then recursively walk them. It then enumerates all the objects on the heap (which were initially allocated contiguously) using reflection. All objects not marked as reachable are garbage.<ref name="part1"/> This is the ''mark'' phase.<ref name="gcnet">{{cite web|url=http://www.csharphelp.com/archives2/archive297.html|title=Garbage collection in .NET|access-date=June 1, 2008|archive-url=https://web.archive.org/web/20080525165023/http://www.csharphelp.com/archives2/archive297.html|archive-date=May 25, 2008|url-status=dead|df=dmy}}</ref> Since the memory held by garbage is of no consequence, it is considered free space. However, this leaves chunks of free space between objects which were initially contiguous. The objects are then ''compacted'' together to make free space on the managed heap contiguous again.<ref name="part1"/><ref name="gcnet"/> Any reference to an object invalidated by moving the object is updated by GC to reflect the new location.<ref name="gcnet"/> The application is resumed after garbage collection ends. The latest version of .NET framework uses concurrent garbage collection along with user code, making pauses unnoticeable, because it is done in the background.<ref>{{cite web|url=https://blogs.msdn.microsoft.com/dotnet/2012/07/20/the-net-framework-4-5-includes-new-garbage-collector-enhancements-for-client-and-server-apps/|title=The .NET Framework 4.5 includes new garbage collector enhancements for client and server apps|access-date=October 2, 2015}}</ref><br />
<br />
The garbage collector used by .NET Framework is also ''[[Garbage collection (computer science)#Generational|generational]]''.<ref name=PART2>{{cite web|url=https://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx|archive-url=https://web.archive.org/web/20070626080134/http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx|archive-date=June 26, 2007|title=Garbage Collection—Part 2: Automatic Memory Management in the Microsoft .NET Framework|access-date=June 1, 2008|url-status=dead|df=mdy-all}}</ref> Objects are assigned a ''generation''. Newly created objects are tagged ''Generation 0''. Objects that survive one garbage collection are tagged ''Generation 1''. Generation 1 objects that survive another collection are ''Generation 2''. The framework uses up to Generation 2 objects.{{r|PART2}} Higher generation objects are garbage collected less often than lower generation objects. This raises the efficiency of garbage collection, as older objects tend to have longer lifetimes than newer objects.{{r|PART2}} By ignoring older objects in most collection runs, fewer checks and compaction operations are needed in total.{{r|PART2}}<br />
<br />
===Performance===<br />
When an application is first launched, the .NET Framework compiles the [[Common Intermediate Language|CIL code]] into executable code using its [[just-in-time compiler]], and caches the executable program into the .NET Native Image Cache.<ref>{{cite web|url=http://blogs.telerik.com/justteam/posts/13-05-28/understanding-net-just-in-time-compilation|title=Understanding .NET Just-In-Time Compilation|date=May 28, 2013|website=telerik.com|access-date=May 21, 2015|archive-date=June 11, 2013|archive-url=https://web.archive.org/web/20130611052214/http://blogs.telerik.com/justteam/posts/13-05-28/understanding-net-just-in-time-compilation|url-status=live}}</ref><ref name="cache">[https://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.90).aspx Compiling MSIL to Native Code] {{Webarchive|url=https://web.archive.org/web/20150419013531/https://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.90).aspx |date=April 19, 2015 }}, MSDN, Microsoft</ref> Due to caching, the application launches faster for subsequent launches, although the first launch is usually slower. To speed up the first launch, developers may use the [[Native Image Generator]] utility to manually [[Ahead-of-time compilation|ahead-of-time compile]] and cache any .NET application.<ref name="cache"/><br />
<br />
The garbage collector, which is integrated into the environment, can introduce unanticipated delays of execution over which the developer has little direct control. "In large applications, the number of objects that the garbage collector needs to work with can become very large, which means it can take a very long time to visit and rearrange all of them."<ref>{{Cite web|url=https://www.red-gate.com/simple-talk/dotnet/net-framework/understanding-garbage-collection-in-net/|title=Understanding Garbage Collection in .NET|date=June 17, 2009}}</ref><br />
<br />
.NET Framework provides support for calling [[Streaming SIMD Extensions]] (SSE) via [[managed code]] from April 2014 in Visual Studio 2013 Update 2. However, [[Mono (software)|Mono]] has provided support for [[SIMD]] Extensions as of version 2.2 within the {{Not a typo|Mono.Simd}} namespace in 2009.<ref name="Release Notes">{{cite web|url=http://www.mono-project.com/docs/about-mono/releases/2.2.0/|title=Release Notes Mono 2.2 - Mono|website=mono-project.com}}</ref> Mono's lead developer [[Miguel de Icaza]] has expressed hope that this SIMD support will be adopted by CLR's ECMA standard.<ref>{{cite web|url=http://tirania.org/blog/archive/2008/Nov-03.html|title=Mono's SIMD Support: Making Mono safe for Gaming|publisher=Tirania.org|date=November 3, 2008|access-date=April 17, 2012|archive-date=November 4, 2010|archive-url=https://web.archive.org/web/20101104173338/http://tirania.org/blog/archive/2008/Nov-03.html|url-status=live}}</ref> Streaming SIMD Extensions have been available in [[x86]] CPUs since the introduction of the [[Pentium III]]. Some other architectures such as [[ARM architecture|ARM]] and [[MIPS architecture|MIPS]] also have SIMD extensions. In case the CPU lacks support for those extensions, the instructions are simulated in software.{{citation needed|date=June 2020}}<br />
<br />
==Alternative implementations==<br />
.NET Framework was the predominant implementation of .NET technologies, until the release of [[.NET]]. Other implementations for parts of the framework exist. Although the runtime engine is described by an ECMA-ISO specification, other implementations of it may be encumbered by [[software patent|patent]] issues; ISO standards may include the disclaimer, "Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. ISO shall not be held responsible for identifying any or all such patent rights."<ref>ISO 9001:2008, Foreword</ref> It is harder to develop alternatives to FCL, which is not described by an open standard and may be subject to copyright restrictions. Also, parts of FCL have Windows-specific functions and behavior, so implementation on non-Windows platforms can be problematic.<br />
<br />
Some alternative implementations of parts of the framework are listed here.<br />
* [[.NET Micro Framework]] is a .NET platform for extremely resource-constrained devices. It includes a small version of CLR and supports development in [[C Sharp (programming language)|C#]] (though some developers were able to use [[VB.NET]],<ref>{{cite web|url=http://www.christec.co.nz/blog/archives/317|title=Using VB.NET with the .NET Micro Framework «/dev/mobile|publisher=Christec.co.nz|date=April 1, 2008|access-date=April 17, 2012}}{{Dead link|date=January 2021 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> albeit with an amount of hacking, and with limited functionalities) and debugging (in an emulator or on hardware), both using [[Microsoft Visual Studio]]. It also features a subset of .NET Framework Class Library (about 70 classes with about 420 methods), a [[GUI]] framework loosely based on WPF, and additional libraries specific to embedded applications.<br />
* [[Mono (software)|Mono]] is an implementation of CLI and FCL, and provides added functions. It is licensed as [[free software]] under the [[MIT License]]. It includes support for ASP.NET, ADO.NET, and Windows Forms libraries for a wide range of architectures and operating systems. It also includes C# and VB.NET compilers.<br />
* [[Portable.NET]] (part of [[DotGNU]]) provides an implementation of CLI, parts of FCL, and a C# compiler. It supports a variety of CPUs and operating systems. The project was discontinued, with the last stable release in 2009.<br />
* Microsoft [[Shared Source Common Language Infrastructure]] is a [[shared source#Microsoft Shared Source Common Language Infrastructure|non-free]] implementation of CLR. However, the last version runs on Windows XP SP2 only, and has not been updated since 2006. Thus, it does not contain all features of version 2.0 of .NET Framework.<br />
* CrossNet<ref>{{cite web|url=https://www.codeplex.com/crossnet|title=CrossNet|publisher=Codeplex.com|access-date=April 17, 2012|archive-date=January 25, 2010|archive-url=https://web.archive.org/web/20100125035452/http://www.codeplex.com/crossnet|url-status=live}}</ref> is an implementation of CLI and parts of FCL. It is free software using an open source [[MIT License]].<br />
<br />
==Licensing==<br />
Microsoft managed code frameworks and their components are licensed as follows:<br />
{{anchor|lic-detail-table}}<br />
{| class="wikitable plainrowheaders" border=1<br />
! scope=col | Component<br />
! scope=col | License<br />
|-<br />
! scope=row | .NET Framework (redistributable package)<br />
| [[Proprietary software]]<ref>{{cite web|title=Microsoft .NET Framework Redistributable EULA|url=https://msdn.microsoft.com/en-us/library/ms994405.aspx|website=[[MSDN]]|publisher=[[Microsoft]]|access-date=February 28, 2015|archive-date=April 2, 2015|archive-url=https://web.archive.org/web/20150402161923/https://msdn.microsoft.com/en-us/library/ms994405.aspx|url-status=live}}</ref><br />
|-<br />
! scope=row | Reference [[source code]] of .NET Framework 4.5 and earlier<br />
| [[Microsoft Reference License]] (Ms-RSL{{efn|name=Ms-RSL-dab}})<ref name="sourcerelease"/><ref>{{cite web|last1=Bray|first1=Brandon|title=Announcing the release of .NET Framework 4.5 RTM – Product and Source Code|url=https://blogs.msdn.microsoft.com/dotnet/2012/08/15/announcing-the-release-of-net-framework-4-5-rtm-product-and-source-code/|website=.NET Framework Blog|publisher=[[Microsoft]]|date=August 15, 2012|access-date=August 18, 2016|archive-date=October 4, 2016|archive-url=https://web.archive.org/web/20161004153213/https://blogs.msdn.microsoft.com/dotnet/2012/08/15/announcing-the-release-of-net-framework-4-5-rtm-product-and-source-code/|url-status=live}}</ref><br />
|-<br />
! scope=row | Reference source code of .NET Framework 4.6<br />
| [[MIT License]]<ref>{{cite web|title=Announcing .NET 2015 Preview: A New Era for .NET|url=https://blogs.msdn.microsoft.com/dotnet/2014/11/12/announcing-net-2015-preview-a-new-era-for-net/|website=.NET Framework Blog|publisher=[[Microsoft]]|date=November 12, 2014|access-date=August 18, 2016|archive-date=August 19, 2016|archive-url=https://web.archive.org/web/20160819154819/https://blogs.msdn.microsoft.com/dotnet/2014/11/12/announcing-net-2015-preview-a-new-era-for-net/|url-status=live}}</ref><br />
|-<br />
! scope=row | [[Mono (software)|Mono]]<br />
| MIT License<ref>{{cite web|title=Xamarin for Everyone|url=https://blog.xamarin.com/xamarin-for-all/|website=Xamarin Blog|publisher=[[Microsoft]]|date=April 17, 2016|access-date=April 12, 2016|archive-date=April 12, 2016|archive-url=https://web.archive.org/web/20160412072728/https://blog.xamarin.com/xamarin-for-all/|url-status=live}}</ref><br />
|-<br />
! scope=row | [[.NET]] (formerly .NET Core)<br /><small>CoreFX, CoreCLR and CLI</small><br />
| MIT License<ref>{{cite web|title=.NET Core 5|url=https://www.dotnetfoundation.org/netcore5|website=dotnetfoundation.org|publisher=.NET Foundation|access-date=February 17, 2015|url-status=dead|archive-url=https://web.archive.org/web/20150217191151/https://www.dotnetfoundation.org/netcore5|archive-date=February 17, 2015|df=dmy-all}}</ref><br />
|-<br />
! scope=row | [[.NET Micro Framework]]<br />
| [[Apache License 2.0]]<ref>{{cite web|title=.NET Micro Framework|url=https://www.dotnetfoundation.org/dotnet-micro-framework|website=dotnetfoundation.org|publisher=.NET Foundation|access-date=February 17, 2015|url-status=dead|archive-url=https://web.archive.org/web/20150217191241/https://www.dotnetfoundation.org/dotnet-micro-framework|archive-date=February 17, 2015|df=dmy-all}}</ref><br />
|-<br />
! scope=row | [[.NET Compiler Platform]] (codename "Roslyn")<br />
| MIT License<ref>{{cite web |url=https://github.com/dotnet/roslyn/blob/master/License.txt |title=Roslyn License |author=<!--Not stated--> |date=February 5, 2020 |website=GitHub |publisher=.NET Foundation |access-date=April 14, 2018 |archive-date=March 24, 2018 |archive-url=https://web.archive.org/web/20180324160854/https://github.com/dotnet/roslyn/blob/master/License.txt |url-status=live }}</ref><br />
|-<br />
! scope=row | [[ASP.NET MVC]], Web API and Web Pages ([[ASP.NET Razor|Razor]])<br />
| Apache License 2.0<ref>{{cite web|title=ASP.NET MVC, Web API and Web Pages (Razor)|url=https://www.dotnetfoundation.org/aspnet-4|website=dotnetfoundation.org|publisher=.NET Foundation|access-date=February 17, 2015|url-status=dead|archive-url=https://web.archive.org/web/20150217190307/https://www.dotnetfoundation.org/aspnet-4|archive-date=February 17, 2015|df=dmy-all}}</ref><br />
|-<br />
! scope=row | [[ASP.NET Core]]<br />
| Apache License 2.0<ref>{{cite web|url=https://github.com/aspnet/Home/blob/master/LICENSE.txt|title=ASP.NET Core License|date=July 5, 2017|website=GitHub|publisher=.NET Foundation|access-date=April 14, 2018|archive-date=February 21, 2021|archive-url=https://web.archive.org/web/20210221070142/https://github.com/dotnet/aspnetcore/blob/main/LICENSE.txt|url-status=live}}</ref><br />
|-<br />
! scope=row | [[ASP.NET Ajax Control Toolkit]]<br />
| [[BSD License]]<ref>{{cite web|title=ASP.NET Ajax Control Toolkit|url=https://www.dotnetfoundation.org/aspnet-ajax|website=dotnetfoundation.org|publisher=.NET Foundation|access-date=February 17, 2015|url-status=dead|archive-url=https://web.archive.org/web/20150217201242/https://www.dotnetfoundation.org/aspnet-ajax|archive-date=February 17, 2015|df=dmy-all}}</ref><br />
|-<br />
! scope=row | [[ASP.NET SignalR]]<br />
| Apache License 2.0<ref>{{cite web|title=ASP.NET SignalR|url=https://www.dotnetfoundation.org/asp.net-signalr|website=dotnetfoundation.org|publisher=.NET Foundation|access-date=February 17, 2015|url-status=dead|archive-url=https://web.archive.org/web/20150217191338/https://www.dotnetfoundation.org/asp.net-signalr|archive-date=February 17, 2015|df=dmy-all}}</ref><br />
|-<br />
! scope=row | [[Entity Framework]]<br />
| Apache License 2.0<ref>{{cite web|title=Entity Framework|url=https://www.dotnetfoundation.org/entity-framework|website=dotnetfoundation.org|publisher=.NET Foundation|access-date=April 16, 2016|url-status=dead|archive-url=https://web.archive.org/web/20160418163228/http://www.dotnetfoundation.org/entity-framework|archive-date=April 18, 2016|df=dmy-all}}</ref><br />
|-<br />
! scope=row | [[NuGet]]<br />
| Apache License 2.0<ref>{{cite web|title=NuGet|url=https://www.dotnetfoundation.org/nuget|website=dotnetfoundation.org|publisher=.NET Foundation|access-date=February 17, 2015|url-status=dead|archive-url=https://web.archive.org/web/20150217200934/https://www.dotnetfoundation.org/nuget|archive-date=February 17, 2015|df=dmy-all}}</ref><br />
|}<br />
<br />
==See also==<br />
* [[.NET]] (formerly .NET Core)<br />
* [[List of CLI languages]]<br />
* [[Standard Libraries (CLI)]], the .NET standard libraries<br />
* [[Base Class Library]] (BCL)<br />
<br />
==Notes==<br />
{{Notelist}}<br />
<br />
==References==<br />
{{Reflist|30em}}<br />
<br />
==External links==<br />
<!--{{No more links}} PLEASE BE CAUTIOUS IN ADDING MORE LINKS TO THIS ARTICLE.<br />
| For details, see [[Wikipedia:External links]] & [[Wikipedia:Spam]].<br />
|<br />
| If there are already plentiful links, please propose additions or<br />
| replacements on this article's discussion page, or submit your link<br />
| to the relevant category at the Open Directory Project (dmoz.org)<br />
| and link back to that project via the {{dmoz}} template.--><br />
<br />
{{Wikibooks|.NET Development Foundation}}<br />
{{Wikiversity|Introduction to .NET}}<br />
* {{Official website|https://dotnet.microsoft.com/en-us/}} <!-- copy it from Wikidata --><br />
* [https://msdn.microsoft.com/en-us/library/zw4w595w.aspx Overview of .NET Framework (MSDN)]<br />
* [https://github.com/Microsoft/dotnet .NET Github repository]<br />
<br />
{{.NET Framework}}<br />
{{Common Language Infrastructure}}<br />
{{Microsoft APIs}}<br />
{{Microsoft FOSS}}<br />
{{Microsoft Windows components}}<br />
{{Authority control}}<br />
<br />
[[Category:.NET Framework implementations]]<br />
[[Category:2002 software]]<br />
[[Category:Cross-platform software]]<br />
[[Category:Microsoft application programming interfaces]]<br />
[[Category:Microsoft development tools]]<br />
[[Category:Microsoft free software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Common_Language_Infrastructure&diff=1062361050Common Language Infrastructure2021-12-28T00:53:53Z<p>CodingKoopa: Reworded sentence to unambiguously signify that CLS is a subset of CTS, rather than the other way around.</p>
<hr />
<div>{{Short description|Open specification used to define the .NET Framework, among other runtimes}}<br />
{{Use mdy dates|date=January 2019}}<br />
{{Use American English|date=January 2019}}<br />
{{Infobox technology standard<br />
| title = Common Language Infrastructure<br />
| status = Published<br />
| year_started = {{Start date and age|2000}}<br />
| version = Sixth edition<br />
| version_date = {{Start date and age|2012|06}}<br />
| organization = '''Developed by:''' [[Microsoft]], [[Hewlett-Packard]], [[Intel]], and others<br /><br />
'''Standardized by:''' [[Ecma International|Ecma]], [[International Organization for Standardization|ISO]]<br />
| related_standards = <br />
| abbreviation = CLI<br />
| domain = Common Language ([[Cross-platform]])<br />
| website = {{URL|http://www.ecma-international.org/publications/standards/Ecma-335.htm|ECMA-335}},<br />{{URL|https://www.iso.org/standard/58046.html|ISO/IEC 23271}}<br />
| long_name = ISO/IEC 23271:2012(E)<br />
| first_published = {{Start date and age|2001}} (Ecma) and {{Start date and age|2003}} (ISO)<br />
| committee = [https://www.iso.org/committee/45202.html ISO/IEC JTC 1/SC 22]<br />
| license = [[Reasonable and non-discriminatory licensing|RAND]]<br />
}}<br />
The '''Common Language Infrastructure''' ('''CLI''') is an open [[specification]] and [[technical standard]] originally developed by [[Microsoft]] and standardized by [[International Organization for Standardization|ISO]] ('''ISO/IEC 23271''') and [[Ecma International]] ('''ECMA 335''')<ref name="iso_iec_23271_2012">[http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=58046 ISO/IEC 23271:2012 - Information technology -- Common Language Infrastructure (CLI)]</ref><ref name="ecma_355_2012">[http://www.ecma-international.org/publications/standards/Ecma-335.htm Standard ECMA-335 - 6th edition (June 2012)]</ref> that describes executable code and a runtime environment that allows [[List of CLI languages|multiple high-level languages]] to be used on different [[Computing platform|computer platforms]] without being rewritten for specific architectures. This implies it is platform agnostic. The [[.NET Framework]], [[.NET]] and [[Mono (software)|Mono]] are implementations of the CLI.<br />
The [[metadata]] format is also used to specify the [[API]] definitions exposed by the [[Windows Runtime]].<ref>[https://www.microsoftpressstore.com/articles/article.aspx?p=2199428&seqNum=3 Introduction to Advanced Windows Store App Development using HTML5 and JavaScript | Microsoft Press Store]</ref><ref>[https://tirania.org/blog/archive/2011/Sep-15.html WinRT demystified - Miguel de Icaza]</ref><br />
<br />
==Overview==<br />
[[File:Overview of the Common Language Infrastructure 2015.svg|thumb|280px|Visual overview of the Common Language Infrastructure (CLI)]]<br />
Among other things, the CLI specification describes the following four aspects:<br />
<br />
;The [[Common Type System]] (CTS)<br />
:A set of [[data type]]s and operations that are shared by all CTS-compliant [[programming language]]s.<br />
;The [[Metadata (CLI)|Metadata]]<br />
:Information about program structure is [[Language-independent specification|language-agnostic]], so that it can be referenced between languages and tools, making it easy to work with code written in a language the developer is not using.<br />
;The Common Language Specification (CLS)<br />
:The CLI should conform with the set of base rules to which any language targeting, since that language should interoperate with other CLS-compliant languages. The CLS rules are a subset of the Common Type System.<br />
;The [[Virtual Execution System]] (VES)<br />
:The VES loads and executes CLI-compatible programs, using the metadata to combine separately generated pieces of code at runtime.<br />
<br />
All compatible languages compile to [[Common Intermediate Language]] (CIL), which is an [[intermediate language]] that is abstracted from the platform hardware. When the code is executed, the platform-specific VES will compile the CIL to the [[machine language]] according to the specific hardware and operating system.<br />
<br />
==Standardization and licensing==<br />
In August 2000, [[Microsoft]], [[Hewlett-Packard]], [[Intel]], and others worked to standardize CLI. By December 2001, it was ratified by the [[Ecma International|Ecma]], with [[International Organization for Standardization|ISO]] standardization following in April 2003.<br />
<br />
Microsoft and its partners hold patents for CLI. Ecma and ISO require that all patents essential to implementation be made available under "[[Reasonable and non-discriminatory licensing|reasonable and non-discriminatory (RAND) terms]]." It is common for RAND licensing to require some royalty payment, which could be a cause for concern with [[Mono (software)|Mono]]. As of January 2013, neither Microsoft nor its partners have identified any patents essential to CLI implementations subject to RAND terms.<br />
<br />
As of July 2009,<ref>{{Cite web<br />
|url=http://port25.technet.com/archive/2009/07/06/the-ecma-c-and-cli-standards.aspx<br />
|title=The Ecma C# and CLI Standards - Port 25: The Open Source Community at Microsoft<br />
|date=2009-07-06<br />
|access-date=September 26, 2009<br />
|archive-url=https://web.archive.org/web/20090709232640/http://port25.technet.com/archive/2009/07/06/the-ecma-c-and-cli-standards.aspx<br />
|archive-date=July 9, 2009<br />
|url-status=dead<br />
}}</ref> [[Microsoft]] added [[C Sharp (programming language)|C#]] and CLI to the list of specifications that the [[Microsoft Community Promise]] applies to,<ref name="mcp_covered_specifications">[http://www.microsoft.com/openspecifications/en/us/programs/community-promise/covered-specifications/default.aspx Covered Specifications | Microsoft Open Specifications]</ref> so anyone can safely implement specified editions of the standards without fearing a patent lawsuit from Microsoft. To implement the CLI standard requires conformance to one of the supported and defined profiles of the standard, the minimum of which is the kernel profile. The kernel profile is actually a very small set of types to support in comparison to the well known core library of default .NET installations. However, the conformance clause of the CLI allows for extending the supported profile by adding new methods and types to classes, as well as deriving from new namespaces. But it does not allow for adding new members to interfaces. This means that the features of the CLI can be used and extended, as long as the conforming profile implementation does not change the behavior of a program intended to run on that profile, while allowing for unspecified behavior from programs written specifically for that implementation.<br />
<br />
In 2012, Ecma and ISO published the new edition of the CLI standard,<ref name="iso_iec_23271_2012"/><ref name="ecma_355_2012"/> which is not covered by the Community Promise.<ref name="mcp_covered_specifications"/><br />
<br />
==Implementations==<br />
*[[.NET Framework]] is Microsoft's original commercial implementation of the CLI. It only supports Windows. It was superseded by .NET in November 2020.<br />
*[[.NET]] is the free and open-source multi-platform successor to .NET Framework, released under the [[MIT License]]<br />
*[[.NET Compact Framework]] is Microsoft's commercial implementation of the CLI for portable devices and [[Xbox 360]].<br />
*[[.NET Micro Framework]] is an open source implementation of the CLI for resource-constrained devices.<br />
*[[Mono (software)|Mono]] is an alternative open source implementation of CLI and accompanying technologies, mainly used for mobile and game development.<br />
<br />
==See also==<br />
*[[Standard Libraries (CLI)]]<br />
*[[List of CLI languages]]<br />
*[[.NET Standard]]<br />
<br />
==Notes==<br />
{{Reflist}}<br />
<br />
==References==<br />
*{{Cite web<br />
|title = Standard ECMA-335, Common Language Infrastructure (CLI)<br />
|work = Ecma International<br />
|url = http://www.ecma-international.org/publications/standards/Ecma-335.htm<br />
|access-date = August 31, 2005<br />
}}<br />
*{{Cite web<br />
|title = ISO/IEC 23271, Common Language Infrastructure<br />
|work = ISO<br />
|url = http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=42927<br />
|access-date = September 27, 2006<br />
}}<br />
*{{Cite web<br />
|title = Ecma C# and Common Language Infrastructure Standards<br />
|work = Microsoft Corporation<br />
|url = http://msdn.microsoft.com/en-us/netframework/aa569283.aspx<br />
|access-date = October 13, 2009<br />
}}<br />
<br />
==External links==<br />
*{{Official|https://www.iso.org/standard/58046.html|ISO/IEC 23271:2012 Information technology — Common Language Infrastructure (CLI)}}<br />
<br />
{{Common Language Infrastructure}}<br />
{{Ecma International Standards}}<br />
{{ISO standards}}<br />
<br />
[[Category:Common Language Infrastructure| ]]<br />
[[Category:Ecma standards]]<br />
[[Category:IEC standards]]<br />
[[Category:ISO standards]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1059371255OpenJDK2021-12-09T02:00:11Z<p>CodingKoopa: Added sources for modification of Oracle OpenJDK.</p>
<hr />
<div>{{Short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPL-2.0-only]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License|GPL-2.0-only]] with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 17.<ref name=":0" /><br />
*The JDK project release 16.<ref name=":0">{{cite web|last=OpenJDK|title=JDK Project|url=http://openjdk.java.net/projects/jdk|url-status=live}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! {{abbr|LTS|Long-term support}}<br />
! Permissive <br/>license<br />
! [[Technology Compatibility Kit|TCK]] <br/>tested<br />
! Built <br/>unmodified<br />
! Commercial<br/>support<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref> <sub>(moved to Eclipse as Eclipse Adoptium in 2021)</sub><ref>{{Cite web|title=Good-bye AdoptOpenJDK. Hello Adoptium!|url=https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/|access-date=2021-09-22|website=blog.adoptopenjdk.net|language=en}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Eclipse Adoptium/Temurin<ref>{{cite web |url=https://adoptium.net/ |title=Adoptium - Open source, prebuilt OpenJDK binaries |access-date=2020-08-03}}</ref><br />
| [[Eclipse Foundation]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (Azul, IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Certified Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<ref name=semeru-license>{{cite web |url=https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/ |title=Introducing the no-cost IBM Semeru Runtimes to develop and run Java applications |access-date=2021-09-23}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Open Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<ref name="semeru-license" /><br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><sub>(version 11 moved to IBM Semeru Runtime Certified Edition)</sub><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://bugs.openjdk.java.net/browse/JDK-8215030 |title=[JDK-8215030] Disable shenandoah in Oracle builds|access-date=2021-12-08}}</ref><ref>{{cite web |url=https://developers.redhat.com/blog/2019/04/19/not-all-openjdk-12-builds-include-shenandoah-heres-why |title=Not all OpenJDK 12 builds include Shenandoah: Here's why|access-date=2021-12-08}}</ref><br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaced the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] was in a [[Oracle America, Inc. v. Google, Inc.|legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1058146439OpenJDK2021-12-01T19:19:40Z<p>CodingKoopa: Undid most of revision 1054632858 by Tim@ (talk). Alibaba Dragonwell and IBM Java SDK 8 are not deprecated. AdoptOpenJDK has been around since 2017, and is well worth mentioning.</p>
<hr />
<div>{{Short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPL-2.0-only]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License|GPL-2.0-only]] with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 17.<ref name=":0" /><br />
*The JDK project release 16.<ref name=":0">{{cite web|last=OpenJDK|title=JDK Project|url=http://openjdk.java.net/projects/jdk|url-status=live}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! {{abbr|LTS|Long-term support}}<br />
! Permissive <br/>license<br />
! [[Technology Compatibility Kit|TCK]] <br/>tested<br />
! Built <br/>unmodified<br />
! Commercial<br/>support<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref> <sub>(moved to Eclipse as Eclipse Adoptium in 2021)</sub><ref>{{Cite web|title=Good-bye AdoptOpenJDK. Hello Adoptium!|url=https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/|access-date=2021-09-22|website=blog.adoptopenjdk.net|language=en}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Eclipse Adoptium/Temurin<ref>{{cite web |url=https://adoptium.net/ |title=Adoptium - Open source, prebuilt OpenJDK binaries |access-date=2020-08-03}}</ref><br />
| [[Eclipse Foundation]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (Azul, IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Certified Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<ref name=semeru-license>{{cite web |url=https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/ |title=Introducing the no-cost IBM Semeru Runtimes to develop and run Java applications |access-date=2021-09-23}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Open Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<ref name="semeru-license" /><br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><sub>(version 11 moved to IBM Semeru Runtime Certified Edition)</sub><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaced the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] was in a [[Oracle America, Inc. v. Google, Inc.|legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1046076964OpenJDK2021-09-23T21:06:50Z<p>CodingKoopa: Add indication that IBM Java version 11 has been renamed.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPL-2.0-only]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License|GPL-2.0-only]] with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! {{abbr|LTS|Long-term support}}<br />
! Permissive <br/>license<br />
! [[Technology Compatibility Kit|TCK]] <br/>tested<br />
! Built <br/>unmodified<br />
! Commercial<br/>support<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref> <sub>(moved to Eclipse as Adoptium in 2021)</sub><ref>{{Cite web|title=Good-bye AdoptOpenJDK. Hello Adoptium!|url=https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/|access-date=2021-09-22|website=blog.adoptopenjdk.net|language=en}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Eclipse Adoptium/Temurin<ref>{{cite web |url=https://adoptium.net/ |title=Adoptium - Open source, prebuilt OpenJDK binaries |access-date=2020-08-03}}</ref><br />
| [[Eclipse Foundation]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{Optional}}<br />
| {{Optional}} (Azul, IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Certified Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<ref name=semeru-license>{{cite web |url=https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/ |title=Introducing the no-cost IBM Semeru Runtimes to develop and run Java applications |access-date=2021-09-23}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Open Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<ref name="semeru-license" /><br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><sub>(version 11 moved to IBM Semeru Runtime Certified Edition)</sub><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaced the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] was in a [[Oracle America, Inc. v. Google, Inc.|legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Talk:OpenJDK&diff=1046071894Talk:OpenJDK2021-09-23T20:28:10Z<p>CodingKoopa: re: openj9</p>
<hr />
<div>{{WikiProject Computing|class=C|importance=Mid|free-software=yes|free-software-importance=High|java=yes|java-importance=High|software=yes|software-importance=High}}<br />
<br />
== "The Java Trap"? ==<br />
<br />
Someone either explain what "The Java Trap" is or delete that line. [[User:Fig wright|Fig]] ([[User talk:Fig wright|talk]]) 20:45, 16 July 2009 (UTC)<br />
<br />
:It does have a reference where you can read all about the Java trap but I agree that it needed some explaining, so I added a few words there. &mdash;[[User:ZeroOne|ZeroOne]] (<small>[[User talk:ZeroOne|talk]]</small>&nbsp;/&nbsp;<small>[[Special:Emailuser/ZeroOne|@]]</small>) 23:05, 15 February 2010 (UTC)<br />
<br />
== OpenJDK vs. JDK ==<br />
<br />
Can someone point out the main differences between OpenJDK and the [[Java Development Kit]]? To me, both articles read as if JDK is superseded by OpenJDK, as most of JDK has been merged to OpenJDK. Or is Sun/Oracle maintaining both projects separately? --[[User:Abdull|Abdull]] ([[User talk:Abdull|talk]]) 18:52, 3 October 2010 (UTC)<br />
<br />
: There are three primary differences between OpenJDK and OraJDK, which stem directly from Oracle's strategy{{citation needed}} of using OpenJDK as a public version where they can receive help from Red Hat / Canonical / Apple / IBM / Google / etc ... but keeping OraJDK in a private branch that they do not have to share in return. First, difference number one, availability of the source code: you can look at the OpenJDK, but not the OraJDK (unless you work for Oracle or similar). Second, performance at runtime of Java apps you run in their respective JVMs, especially on windows: Oracle adds some secret sauce in their private branch. (Whether the secret sauce is any good[http://www.phoronix.com/scan.php?page=article&item=java_vm_performance&num=3][http://blog.gonzih.me/blog/2013/04/14/clojure-on-raspberry-pi-openjdk-vs-oracle-java-8/][http://www.ilsistemista.net/index.php/linux-a-unix/37-openjdk-vs-oraclejvm-a-look-at-java-performance-under-redhat-6-3-with-specjvm2008.html?start=2][https://blogs.oracle.com/jtc/entry/part_deux_comparing_jvms_on] is another question entirely.[https://www.redhat.com/about/news/press-archive/2013/4/red-hat-achieves-world-record-java-benchmark-result-openjdk][http://www.ilsistemista.net/index.php/linux-a-unix/37-openjdk-vs-oraclejvm-a-look-at-java-performance-under-redhat-6-3-with-specjvm2008.html?start=5][http://www.phoronix.com/scan.php?page=article&item=java_vm_performance&num=2]) Third, official licensing and terms of use: GPLv2-with-linking-exception for OpenJDK, and proprietary for OraJVM binaries. [[Special:Contributions/74.192.84.101|74.192.84.101]] ([[User talk:74.192.84.101|talk]]) 16:13, 26 September 2013 (UTC)<br />
: For your other questions, as you point out, the articles read as if the JDK -- meaning the *Sun* JDK from before Oracle acquired that corporation -- has been superseded by OpenJDK, and furthermore, that most (but not all) of the Sun JDK has been merged into OpenJDK. However, the more correct way to look at it is that 99% of the Sun JDK has been replaced by OpenJDK, and the other 1% secret sauce was held back; the combination OpenJDK+secretSauce==OraJDK. Therefore, the answer to your final question is yes, Oracle is maintaining OpenJDK (along with Red Hat and Canonical and Apple and IBM and SAP and various others) in a public codebase, but simultaneously they maintain a private branch, which has copies of all the stuff in OpenJDK, but some additional tweaks (the secret sauce). Note that only Oracle can manage this trick: OpenJDK is GPL, so anybody else that wants to [[derivative work | modify OpenJDK]] and then distribute the result *has* to publish the source-code of their modifications, for Oracle and everybody else to see. However, because Oracle (and Sun before them) require a contributor-license-agreement for all codebase commits to OpenJDK, they effectively also own the copyright to OpenJDK, on which the GPL license of OpenJDK depends... which means, as the copyright owner, Oracle is free to re-license[http://web.archive.org/web/20120717015706/http://java.sun.com/javase/licensees.jsp] a modified copy of OpenJDK (their private branch with secret sauce), and then distribute that modified version as a closed-source binary (the OraJRE binaries for win/lin/osx/etc being the easiest example in which they are effectively re-licensing-to-themselves). It also means that Oracle -- and only Oracle -- can sell closed-source binaries for other platforms, such as Raspberry Pi.[http://www.raspberrypi.org/phpBB3/viewtopic.php?p=401112] It is unknown whether OpenJDK is patent-encumbered, and whether or not the GPLv2 license it is released under acts as an implicit patent grant; see [https://en.wikipedia.org/wiki/Talk:IcedTea#but_what_IS_IT.3F]. [[Special:Contributions/74.192.84.101|74.192.84.101]] ([[User talk:74.192.84.101|talk]]) 16:13, 26 September 2013 (UTC)<br />
<br />
:: when few years ago I was running some custom performance testing of jvms, I clearly saw Windows version was faster than both linux's and even their own opensolaris ones. The test program involved did not very complex line drawings and was ran on THE SAME machine for all 3 OSes. That guy from one of your link (that from moronix) just says the ubuntu's java is faster than windows vista's, but he even is not clear whether comparable hw was used. There are so much influence factors on the performance from a side, so without detailed description of test environment such claimings are not more than demonstrating his own willings.<br />
[[Special:Contributions/77.52.154.62|77.52.154.62]] ([[User talk:77.52.154.62|talk]]) 19:15, 14 September 2014 (UTC)java-caca<br />
<br />
== Overlap with Java Class Library, IcedTea and Free Java implementations ==<br />
<br />
Parts of this article overlap with [[Java Class Library]], [[IcedTea]] and [[Free Java implementations]]. I'm not clear on what can be done about it though. I don't think the articles can be merged. Should a new article covering the overlapping parts be created? --[[User:Chealer|Chealer]] ([[User talk:Chealer|talk]]) 21:37, 18 December 2011 (UTC)<br />
<br />
== Spelling issue ==<br />
Perhaps I'm missing something...<br />
<br />
This paragraph<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on Fedora 9, built using IcedTea 6, had passed the Technology Compatibility Kit tests and could claim to be a fully compatible Java 6 implementation.[51] In July 2009, an IcedTea 6 binary build for Ubuntu 9.04 passed all of the compatibility tests in the Java SE 6 JCK.[52]<br />
<br />
Should the last word be TCK, and not JCK? <span style="font-size: smaller;" class="autosigned">— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[Special:Contributions/41.85.136.18|41.85.136.18]] ([[User talk:41.85.136.18|talk]]) 08:46, 14 February 2012 (UTC)</span><!-- Template:Unsigned IP --> <!--Autosigned by SineBot--><br />
<br />
: {{done}} Good catch. If you see an obvious error like this, [[WP:BOLD | BE BOLD]] and fix it immediately; it is more fun that way. No need to ask on the talkpage, unless you think someone might find it controversial (e.g. if you find an 'obvious' error on a page about religion or politics or best-software-for-some-particular-task then make sure you have a Reliable Source to back you up). Thanks. [[Special:Contributions/74.192.84.101|74.192.84.101]] ([[User talk:74.192.84.101|talk]]) 17:19, 26 September 2013 (UTC)<br />
<br />
== Why release an open source implemention? ==<br />
<br />
Perhaps the article needs to state why OpenJDK was created or open sourced in the first place?<br /><br />
Was it simply due to pressure from the open source community? - [[User:Wislam|wislam]] ([[User talk:Wislam|talk]]) 11:07, 25 October 2013 (UTC)<br />
<br />
== Removal of Azul Zulu ==<br />
<br />
I removed the Azul Zulu part, I think it has nothing to do in the main OpenJDK article, and notability has to be checked. There were no links excepts from the company itself. [[User:Hervegirod|Hervegirod]] ([[User talk:Hervegirod|talk]]) 21:30, 12 November 2015 (UTC)<br />
: I'm removing it again, there are still no sources except from the editor itself. Please add valid references, because for now notability is not checked. [[User:Hervegirod|Hervegirod]] ([[User talk:Hervegirod|talk]]) 22:11, 17 November 2015 (UTC)<br />
<br />
== External links modified ==<br />
<br />
Hello fellow Wikipedians,<br />
<br />
I have just added archive links to {{plural:3|one external link|3 external links}} on [[OpenJDK]]. Please take a moment to review [https://en.wikipedia.org/w/index.php?diff=prev&oldid=705817668 my edit]. If necessary, add {{tlx|cbignore}} after the link to keep me from modifying it. Alternatively, you can add {{tlx|nobots|deny{{=}}InternetArchiveBot}} to keep me off the page altogether. I made the following changes:<br />
*Added archive https://web.archive.org/20090527021318/http://en.opensuse.org:80/OpenJDK to http://en.opensuse.org/OpenJDK<br />
*Added archive https://web.archive.org/20060717164412/http://blogs.sun.com:80/roller/page/jonathan/200605 to http://blogs.sun.com/roller/page/jonathan/200605#busy_week1<br />
*Added archive https://web.archive.org/20081003094214/http://kennke.org:80/blog/2008/09/29/a-small-step-for-me/ to http://kennke.org/blog/2008/09/29/a-small-step-for-me/<br />
<br />
When you have finished reviewing my changes, please set the ''checked'' parameter below to '''true''' to let others know.<br />
<br />
{{sourcecheck|checked=false}}<br />
<br />
Cheers.—[[User:Cyberbot II|<sup style="color:green;font-family:Courier;">cyberbot II</sup>]]<small><sub style="margin-left:-14.9ex;color:green;font-family:Comic Sans MS;">[[User talk:Cyberbot II|<span style="color:green;">Talk to my owner</span>]]:Online</sub></small> 19:02, 19 February 2016 (UTC)<br />
<br />
== External links modified ==<br />
<br />
Hello fellow Wikipedians,<br />
<br />
I have just added archive links to {{plural:1|one external link|1 external links}} on [[OpenJDK]]. Please take a moment to review [https://en.wikipedia.org/w/index.php?diff=prev&oldid=707700238 my edit]. If necessary, add {{tlx|cbignore}} after the link to keep me from modifying it. Alternatively, you can add {{tlx|nobots|deny{{=}}InternetArchiveBot}} to keep me off the page altogether. I made the following changes:<br />
*Added archive http://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg to http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg<br />
<br />
When you have finished reviewing my changes, please set the ''checked'' parameter below to '''true''' or '''failed''' to let others know (documentation at {{tlx|Sourcecheck}}).<br />
<br />
{{sourcecheck|checked=false}}<br />
<br />
Cheers.—[[User:Cyberbot II|<sup style="color:green;font-family:Courier;">cyberbot II</sup>]]<small><sub style="margin-left:-14.9ex;color:green;font-family:Comic Sans MS;">[[User talk:Cyberbot II|<span style="color:green;">Talk to my owner</span>]]:Online</sub></small> 08:27, 1 March 2016 (UTC)<br />
<br />
== AdoptOpenJDK/RedHat OpenJDK ==<br />
<br />
Why does the RedHat OpenJDK entry in the table of builds link instead to the AdoptOpenJDK page? When I’d first looked at AdoptOpenJDK I was able to observe that they declared affiliation with RedHat and also declared non-affiliation with RedHat. <i><b>In the same sentence.</b></i>. Add that I was unable to find at the time any RedHat sourced mentions of AdoptOpenJDK, and it left me with the feeling that someone was possibly being dishonest. Also, there are places to download a RedHat build of OpenJDK, with their commitments to it, and places to download an AdoptOpenJDK build of OpenJDK. The builds are demonstrably different, and there are pages that question differences between them -> demonstrably they are not a single entity, and therefore are not the same thing. So why the errant link? Meanwhile, if you feel that the two parties are factually affiliated, I’d love to see the source from RedHat confirming this. [[Special:Contributions/67.190.126.82|67.190.126.82]] ([[User talk:67.190.126.82|talk]]) 00:13, 5 November 2019 (UTC)<br />
<br />
== Pure ==<br />
<br />
The article shows a table of implementations with a column "Pure" which is not explained. What does that mean ? -- Juergen [[Special:Contributions/212.202.144.106|212.202.144.106]] ([[User talk:212.202.144.106|talk]]) 10:23, 27 January 2020 (UTC)<br />
<br />
: +1. Please add an explanation. --[[Special:Contributions/2A02:16F0:0:0:0:0:0:A|2A02:16F0:0:0:0:0:0:A]] ([[User talk:2A02:16F0:0:0:0:0:0:A|talk]]) 12:49, 18 February 2020 (UTC)<br />
On May 25th, an IP user modified "Pure" to "build of unmodified upstream" without adding a source. My guesswork of ''Pure'' meaning that the software ist distributed as a standalone package without bundling it with some other software seems wrong and this question seems resolved. -- Juergen [[Special:Contributions/212.202.144.106|212.202.144.106]] ([[User talk:212.202.144.106|talk]]) 15:59, 21 July 2020 (UTC)<br />
<br />
== Links to specific OpenJDK builds ==<br />
<br />
Is there a reason why all of the links to the OpenJDK builds in the table are presented as citations, and not as external links? I've been finding that to be a little strange.<br />
<br />
[[User:CodingKoopa|CodingKoopa]] ([[User talk:CodingKoopa|talk]]) 18:49, 15 June 2021 (UTC)<br />
<br />
== Removed OpenJ9 and GraalVM JVMs from the builds list ==<br />
In the [https://projects.eclipse.org/projects/adoptium/charter Eclipse Adoptium charter], "Licensing" section, point 1, Oracles says that the Java SE TCKs are only licensed to "Java SE implementations that in each case are based on OpenJDK code and include only HotSpot based Java Runtime Environments sourced from the OpenJDK project, or any natural successor thereof sourced from the OpenJDK project, and no other Java Virtual Machine". They specifically call out "the OpenJ9 Project, Oracle’s GraalVM project(s) or any successors of either of the foregoing" as '''not''' based on OpenJDK. That's why I removed OpenJ9, IBM Java (the last available version 8 is [https://www.ibm.com/docs/en/sdk-java-technology/8?topic=openj9-user-documentation based on OpenJ9]), and GraalVM from the list of OpenJDK versions.<br />
<br />
Please also see this [https://foojay.slack.com/archives/C018M6P8S0G/p1632082221118700?thread_ts=1631199624.051400&cid=C018M6P8S0G discussion thread] in the "Friends of OpenJDK" Slack.<br />
<br />
:Hi - Sorry, I've reverted this without seeing this talk section. I will still elaborate here. I disagree with that interpretation of the licensing statement because the JDKs in question are still based on OpenJDK. For instance, the IBM Semeru Runtimes are very much based on OpenJDK, but they include the OpenJ9 JVM *on top* of it. The fact that it includes OpenJ9 doesn't negate its OpenJDK heritage. Indeed, IBM's website does brand them as OpenJDK builds here and there.<br />
<br />
:I hope this helps to clear things up. — [[User:CodingKoopa|CodingKoopa]] ([[User talk:CodingKoopa|talk]]) 20:27, 23 September 2021 (UTC)</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1046069992OpenJDK2021-09-23T20:14:54Z<p>CodingKoopa: Fix copypaste error.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPL-2.0-only]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License|GPL-2.0-only]] with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! {{abbr|LTS|Long-term support}}<br />
! Permissive <br/>license<br />
! [[Technology Compatibility Kit|TCK]] <br/>tested<br />
! Built <br/>unmodified<br />
! Commercial<br/>support<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref> <sub>(moved to Eclipse as Adoptium in 2021)</sub><ref>{{Cite web|title=Good-bye AdoptOpenJDK. Hello Adoptium!|url=https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/|access-date=2021-09-22|website=blog.adoptopenjdk.net|language=en}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Eclipse Adoptium/Temurin<ref>{{cite web |url=https://adoptium.net/ |title=Adoptium - Open source, prebuilt OpenJDK binaries |access-date=2020-08-03}}</ref><br />
| [[Eclipse Foundation]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{Optional}}<br />
| {{Optional}} (Azul, IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Certified Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<ref name=semeru-license>{{cite web |url=https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/ |title=Introducing the no-cost IBM Semeru Runtimes to develop and run Java applications |access-date=2021-09-23}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Open Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<ref name="semeru-license" /><br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaced the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] was in a [[Oracle America, Inc. v. Google, Inc.|legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1046069873OpenJDK2021-09-23T20:14:03Z<p>CodingKoopa: Fix access date that can't be right.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPL-2.0-only]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License|GPL-2.0-only]] with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! {{abbr|LTS|Long-term support}}<br />
! Permissive <br/>license<br />
! [[Technology Compatibility Kit|TCK]] <br/>tested<br />
! Built <br/>unmodified<br />
! Commercial<br/>support<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref> <sub>(moved to Eclipse as Adoptium in 2021)</sub><ref>{{Cite web|title=Good-bye AdoptOpenJDK. Hello Adoptium!|url=https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/|access-date=2021-09-22|website=blog.adoptopenjdk.net|language=en}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Eclipse Adoptium/Temurin<ref>{{cite web |url=https://adoptium.net/ |title=Adoptium - Open source, prebuilt OpenJDK binaries |access-date=2020-08-03}}</ref><br />
| [[Eclipse Foundation]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{Optional}}<br />
| {{Optional}} (Azul, IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Certified Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<ref name=semeru-license>{{cite web |url=https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/ |title=Introducing the no-cost IBM Semeru Runtimes to develop and run Java applications |access-date=2021-09-23 |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Open Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2021-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<ref name="semeru-license" /><br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaced the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] was in a [[Oracle America, Inc. v. Google, Inc.|legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1046069448OpenJDK2021-09-23T20:10:59Z<p>CodingKoopa: IBM Semeru Certified Edition does not have a permissive license.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPL-2.0-only]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License|GPL-2.0-only]] with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! {{abbr|LTS|Long-term support}}<br />
! Permissive <br/>license<br />
! [[Technology Compatibility Kit|TCK]] <br/>tested<br />
! Built <br/>unmodified<br />
! Commercial<br/>support<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref> <sub>(moved to Eclipse as Adoptium in 2021)</sub><ref>{{Cite web|title=Good-bye AdoptOpenJDK. Hello Adoptium!|url=https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/|access-date=2021-09-22|website=blog.adoptopenjdk.net|language=en}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Eclipse Adoptium/Temurin<ref>{{cite web |url=https://adoptium.net/ |title=Adoptium - Open source, prebuilt OpenJDK binaries |access-date=2020-08-03}}</ref><br />
| [[Eclipse Foundation]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{Optional}}<br />
| {{Optional}} (Azul, IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Certified Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2020-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<ref name=semeru-license>{{cite web |url=https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/ |title=Introducing the no-cost IBM Semeru Runtimes to develop and run Java applications |access-date=2021-09-23 |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Open Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2020-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<ref name="semeru-license" /><br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaced the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] was in a [[Oracle America, Inc. v. Google, Inc.|legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1046065927OpenJDK2021-09-23T19:47:52Z<p>CodingKoopa: Undid revision 1045570866 by Ksilz (talk). These are still OpenJDK based distributions that belong here. The licensing excerpt given discusses how the Java SE TCKs given to Adoptium developers must not be used with these projects, but still acknowledges that they are based on OpenJDK code.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPL-2.0-only]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License|GPL-2.0-only]] with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! {{abbr|LTS|Long-term support}}<br />
! Permissive <br/>license<br />
! [[Technology Compatibility Kit|TCK]] <br/>tested<br />
! Built <br/>unmodified<br />
! Commercial<br/>support<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref> <sub>(moved to Eclipse as Adoptium in 2021)</sub><ref>{{Cite web|title=Good-bye AdoptOpenJDK. Hello Adoptium!|url=https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/|access-date=2021-09-22|website=blog.adoptopenjdk.net|language=en}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Eclipse Adoptium/Temurin<ref>{{cite web |url=https://adoptium.net/ |title=Adoptium - Open source, prebuilt OpenJDK binaries |access-date=2020-08-03}}</ref><br />
| [[Eclipse Foundation]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{Optional}}<br />
| {{Optional}} (Azul, IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Certified Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2020-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Semeru Runtime Open Edition<ref>{{cite web |url=https://developer.ibm.com/languages/java/semeru-runtimes/ |title=IBM Semeru Runtimes - IBM Developer |access-date=2020-08-03}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaced the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] was in a [[Oracle America, Inc. v. Google, Inc.|legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Musl&diff=1029403257Musl2021-06-19T19:22:17Z<p>CodingKoopa: Fix grammar.</p>
<hr />
<div>{{for|the American lottery organization often called MUSL|Multi-State Lottery Association}}<br />
{{Lowercase title}}<br />
{{Infobox software<br />
| name = musl<br />
| logo = Musl libc.svg<br />
| developer = Rich Felker (dalias) and others<br />
| released = {{Start date and years ago|2011|02|11}}<ref>{{cite web<br />
| title=musl - obsolete versions<br />
| url=https://www.musl-libc.org/oldversions.html<br />
| website=musl-libc.org<br />
| date=2017-10-31<br />
| access-date=2018-01-14}}></ref><br />
| latest release version = 1.2.2<ref name = "releases" /><br />
| latest release date = {{Start date and age|2021|01|15}}<br />
| operating system = [[Linux]] 2.6 or later<br />
| platform = [[x86]], [[x86 64]], [[ARM architecture|ARM]], [[MIPS architecture|MIPS]], [[Microblaze]], [[PowerPC]], [[powerpc64]], [[X32_ABI|x32]], [[OpenRISC]], [[s390x]], [[SuperH]]<br />
| genre = {{unbulleted list|[[C standard library]]|[[Linux for embedded systems]]|[[Linux for mobile devices]]}}<br />
| license = [[MIT License]]<br />
| website = {{url|https://musl.libc.org|musl.libc.org}}<br />
}}<br />
<br />
'''musl''' is a [[C standard library]] intended for [[operating system]]s based on the [[Linux kernel]], released under the [[MIT License]].<ref>{{cite web |url=https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT |title=COPYRIGHT |author=Rich Felker|display-authors=etal|date=2016-04-29 |access-date=2016-09-26}}</ref> It was developed by Rich Felker with the goal to write a clean, efficient and standards-conformant libc implementation.<ref name="musl-intro"/><br />
<br />
==Overview==<br />
musl was designed from scratch to allow efficient [[static linking]] and to have realtime-quality robustness by avoiding [[Race condition|race conditions]], internal failures on resource exhaustion and various other bad worst-case behaviors present in existing implementations.<ref name="musl-intro">{{cite web |url=https://www.musl-libc.org/intro.html |title=Introduction to musl |date=2016-04-21 |access-date=2016-09-26}}</ref> The dynamic runtime is a single file with stable [[Application binary interface|ABI]] allowing race-free updates and the static linking support allows an application to be deployed as a single portable binary without significant size overhead.<br />
<br />
It claims compatibility with the [[POSIX]] 2008 specification and the [[C11 (C standard revision)|C11]] standard. It also implements most of the widely used non-standard [[Linux]], [[BSD]], and [[glibc]] functions.<ref>{{cite web |url=http://wiki.musl-libc.org/wiki/Compatibility |title=Compatibility |website=wiki.musl-libc.org |date=2014-05-27 |access-date=2016-09-26}}</ref> There is partial ABI compatibility with the part of glibc required by [[Linux Standard Base]].<ref>{{cite web |title=Comparison of C/POSIX standard library implementations for Linux |url=http://www.etalabs.net/compare_libcs.html |website=www.etalabs.net}}</ref><br />
<br />
Version 1.2.0 has support for (no longer current) [[Unicode]] 12.1.0 (while still having full [[UTF-8]] support,<ref>{{Cite web|title=musl libc - Functional differences from glibc|url=https://wiki.musl-libc.org/functional-differences-from-glibc.html|access-date=2020-08-13|website=wiki.musl-libc.org}}</ref> more conformant/strict than [[GNU C Library|glibc]]), and version 1.2.1 "features the new 'mallocng' [[malloc]] implementation, replacing musl's original [[dlmalloc]]-like allocator that suffered from fundamental design problems."<ref name = "releases">{{Cite web|title=musl libc Release History|url=https://musl.libc.org/releases.html|access-date=2020-08-13|website=musl.libc.org}}</ref><br />
<br />
==Use==<br />
Some [[Linux distribution]]s that can use musl as the standard C library include [[Alpine Linux]], [[Dragora | Dragora 3]], [[Gentoo Linux]], [[OpenWrt]], Sabotage,<ref>{{Github|sabotage-linux/sabotage/blob/master/README.md}}</ref> Morpheus Linux<ref>{{cite web |url=https://morpheus.2f30.org/ |title=morpheus:|access-date=2018-06-15}}</ref> and [[Void Linux]]. The [[seL4]] microkernel<ref>{{Citation|title=seL4/musllibc|date=2020-08-30|url=https://github.com/seL4/musllibc|publisher=seL4 microkernel and related repositories|access-date=2020-09-05}}</ref> ships with musl. For binaries that have been linked against glibc, gcompat<ref>{{Cite web|url=https://code.foxkit.us/adelie/gcompat|title=Adélie Linux / gcompat|website=GitLab|language=en|access-date=2019-10-21}}</ref> can be used to execute them on musl-based distros.<br />
<br />
==See also==<br />
{{Portal|Free and open-source software}}<br />
{{Div col|colwidth=20em}}<br />
* [[Bionic (software)|Bionic libc]]<br />
* [[dietlibc]]<br />
* [[Embedded GLIBC|EGLIBC]]<br />
* [[GNU C Library|glibc]]<br />
* [[klibc]]<br />
* [[Newlib]]<br />
* [[uClibc]]<br />
{{div col end}}<br />
<br />
==References==<br />
{{Reflist|30em}}<br />
<br />
==External links==<br />
* {{Official website|https://musl.libc.org/}}<br />
* [https://www.etalabs.net/compare_libcs.html Comparison of C/POSIX standard library implementations for Linux]<br />
* [https://web.archive.org/web/20161106192843/http://uclibc-ng.org/wiki/matrix Matrix of C/POSIX standard libraries by architecture]<br />
* [https://wiki.gentoo.org/wiki/Project:Hardened_musl Project:Hardened musl on Gentoo wiki]<br />
* Rich Felker held a talk at the [[Embedded Linux Conference]] (ELC) 2015: [https://www.youtube.com/watch?v=JbhYSGSYkpQ ELC 2015 - Transitioning From uclibc to musl for Embedded Development - Rich Felker, Openwall]<br />
<br />
{{CProLang}}<br />
<br />
[[Category:C standard library]]<br />
[[Category:Free computer libraries]]<br />
[[Category:Free software programmed in C]]<br />
[[Category:Interfaces of the Linux kernel]]<br />
[[Category:Linux APIs]]<br />
[[Category:Software using the MIT license]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1028760934OpenJDK2021-06-15T21:13:30Z<p>CodingKoopa: It seems to me that the community edition of the GraalVM JDK is no longer branded with "Oracle".</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPLv2]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License]] (GNU GPL) version 2 with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! LTS<br />
! Permissive<br/>license<br />
! [[Technology_Compatibility_Kit|TCK]]<br/>Tested<br />
! build of<br/>unmodified<br/>upstream<br />
! Commercial<br/>support<br/>available<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=GraalVM |website=[[GraalVM]] |access-date=2021-06-15}}</ref><br />
| [[GraalVM]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaces the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] has been in an [[Oracle America, Inc. v. Google, Inc.|ongoing legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1028745019OpenJDK2021-06-15T19:18:38Z<p>CodingKoopa: Correct name of Microsoft's JDK, according to their website and documentation.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPLv2]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License]] (GNU GPL) version 2 with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! LTS<br />
! Permissive<br/>license<br />
! [[Technology_Compatibility_Kit|TCK]]<br/>Tested<br />
! build of<br/>unmodified<br/>upstream<br />
! Commercial<br/>support<br/>available<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft Build of OpenJDK<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft Build of OpenJDK |access-date=2021-06-15}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=Oracle GraalVM Community Edition|department=Oracle |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaces the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] has been in an [[Oracle America, Inc. v. Google, Inc.|ongoing legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1028742735OpenJDK2021-06-15T19:01:31Z<p>CodingKoopa: Add JetBrains Runtime.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation|Oracle]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc.|Apple]], [[SAP]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPLv2]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License]] (GNU GPL) version 2 with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! Organization<br />
! LTS<br />
! Permissive<br/>license<br />
! [[Technology_Compatibility_Kit|TCK]]<br/>Tested<br />
! build of<br/>unmodified<br/>upstream<br />
! Commercial<br/>support<br/>available<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| [[Alibaba Group]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| [[Amazon (company)|Amazon]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| [[Azul Systems]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| [[BellSoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | JetBrains Runtime<ref>{{cite web |url=https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime |title=JetBrains Runtime - JetBrains Runtime - Confluence |access-date=2021-06-15}}</ref><br />
| [[JetBrains]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Microsoft<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft OpenJDK |access-date=2021-04-06}}</ref><br />
| [[Microsoft]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| <br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| [[OpenLogic]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=Oracle GraalVM Community Edition|department=Oracle |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| [[Oracle Corporation]]<br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| [[IBM]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| [[SAP]]<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaces the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] has been in an [[Oracle America, Inc. v. Google, Inc.|ongoing legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=Talk:OpenJDK&diff=1028740950Talk:OpenJDK2021-06-15T18:49:24Z<p>CodingKoopa: /* Links to specific OpenJDK builds */ new section</p>
<hr />
<div>{{WikiProject Computing|class=C|importance=Mid|free-software=yes|free-software-importance=High|java=yes|java-importance=High|software=yes|software-importance=High}}<br />
<br />
== "The Java Trap"? ==<br />
<br />
Someone either explain what "The Java Trap" is or delete that line. [[User:Fig wright|Fig]] ([[User talk:Fig wright|talk]]) 20:45, 16 July 2009 (UTC)<br />
<br />
:It does have a reference where you can read all about the Java trap but I agree that it needed some explaining, so I added a few words there. &mdash;[[User:ZeroOne|ZeroOne]] (<small>[[User talk:ZeroOne|talk]]</small>&nbsp;/&nbsp;<small>[[Special:Emailuser/ZeroOne|@]]</small>) 23:05, 15 February 2010 (UTC)<br />
<br />
== OpenJDK vs. JDK ==<br />
<br />
Can someone point out the main differences between OpenJDK and the [[Java Development Kit]]? To me, both articles read as if JDK is superseded by OpenJDK, as most of JDK has been merged to OpenJDK. Or is Sun/Oracle maintaining both projects separately? --[[User:Abdull|Abdull]] ([[User talk:Abdull|talk]]) 18:52, 3 October 2010 (UTC)<br />
<br />
: There are three primary differences between OpenJDK and OraJDK, which stem directly from Oracle's strategy{{citation needed}} of using OpenJDK as a public version where they can receive help from Red Hat / Canonical / Apple / IBM / Google / etc ... but keeping OraJDK in a private branch that they do not have to share in return. First, difference number one, availability of the source code: you can look at the OpenJDK, but not the OraJDK (unless you work for Oracle or similar). Second, performance at runtime of Java apps you run in their respective JVMs, especially on windows: Oracle adds some secret sauce in their private branch. (Whether the secret sauce is any good[http://www.phoronix.com/scan.php?page=article&item=java_vm_performance&num=3][http://blog.gonzih.me/blog/2013/04/14/clojure-on-raspberry-pi-openjdk-vs-oracle-java-8/][http://www.ilsistemista.net/index.php/linux-a-unix/37-openjdk-vs-oraclejvm-a-look-at-java-performance-under-redhat-6-3-with-specjvm2008.html?start=2][https://blogs.oracle.com/jtc/entry/part_deux_comparing_jvms_on] is another question entirely.[https://www.redhat.com/about/news/press-archive/2013/4/red-hat-achieves-world-record-java-benchmark-result-openjdk][http://www.ilsistemista.net/index.php/linux-a-unix/37-openjdk-vs-oraclejvm-a-look-at-java-performance-under-redhat-6-3-with-specjvm2008.html?start=5][http://www.phoronix.com/scan.php?page=article&item=java_vm_performance&num=2]) Third, official licensing and terms of use: GPLv2-with-linking-exception for OpenJDK, and proprietary for OraJVM binaries. [[Special:Contributions/74.192.84.101|74.192.84.101]] ([[User talk:74.192.84.101|talk]]) 16:13, 26 September 2013 (UTC)<br />
: For your other questions, as you point out, the articles read as if the JDK -- meaning the *Sun* JDK from before Oracle acquired that corporation -- has been superseded by OpenJDK, and furthermore, that most (but not all) of the Sun JDK has been merged into OpenJDK. However, the more correct way to look at it is that 99% of the Sun JDK has been replaced by OpenJDK, and the other 1% secret sauce was held back; the combination OpenJDK+secretSauce==OraJDK. Therefore, the answer to your final question is yes, Oracle is maintaining OpenJDK (along with Red Hat and Canonical and Apple and IBM and SAP and various others) in a public codebase, but simultaneously they maintain a private branch, which has copies of all the stuff in OpenJDK, but some additional tweaks (the secret sauce). Note that only Oracle can manage this trick: OpenJDK is GPL, so anybody else that wants to [[derivative work | modify OpenJDK]] and then distribute the result *has* to publish the source-code of their modifications, for Oracle and everybody else to see. However, because Oracle (and Sun before them) require a contributor-license-agreement for all codebase commits to OpenJDK, they effectively also own the copyright to OpenJDK, on which the GPL license of OpenJDK depends... which means, as the copyright owner, Oracle is free to re-license[http://web.archive.org/web/20120717015706/http://java.sun.com/javase/licensees.jsp] a modified copy of OpenJDK (their private branch with secret sauce), and then distribute that modified version as a closed-source binary (the OraJRE binaries for win/lin/osx/etc being the easiest example in which they are effectively re-licensing-to-themselves). It also means that Oracle -- and only Oracle -- can sell closed-source binaries for other platforms, such as Raspberry Pi.[http://www.raspberrypi.org/phpBB3/viewtopic.php?p=401112] It is unknown whether OpenJDK is patent-encumbered, and whether or not the GPLv2 license it is released under acts as an implicit patent grant; see [https://en.wikipedia.org/wiki/Talk:IcedTea#but_what_IS_IT.3F]. [[Special:Contributions/74.192.84.101|74.192.84.101]] ([[User talk:74.192.84.101|talk]]) 16:13, 26 September 2013 (UTC)<br />
<br />
:: when few years ago I was running some custom performance testing of jvms, I clearly saw Windows version was faster than both linux's and even their own opensolaris ones. The test program involved did not very complex line drawings and was ran on THE SAME machine for all 3 OSes. That guy from one of your link (that from moronix) just says the ubuntu's java is faster than windows vista's, but he even is not clear whether comparable hw was used. There are so much influence factors on the performance from a side, so without detailed description of test environment such claimings are not more than demonstrating his own willings.<br />
[[Special:Contributions/77.52.154.62|77.52.154.62]] ([[User talk:77.52.154.62|talk]]) 19:15, 14 September 2014 (UTC)java-caca<br />
<br />
== Overlap with Java Class Library, IcedTea and Free Java implementations ==<br />
<br />
Parts of this article overlap with [[Java Class Library]], [[IcedTea]] and [[Free Java implementations]]. I'm not clear on what can be done about it though. I don't think the articles can be merged. Should a new article covering the overlapping parts be created? --[[User:Chealer|Chealer]] ([[User talk:Chealer|talk]]) 21:37, 18 December 2011 (UTC)<br />
<br />
== Spelling issue ==<br />
Perhaps I'm missing something...<br />
<br />
This paragraph<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on Fedora 9, built using IcedTea 6, had passed the Technology Compatibility Kit tests and could claim to be a fully compatible Java 6 implementation.[51] In July 2009, an IcedTea 6 binary build for Ubuntu 9.04 passed all of the compatibility tests in the Java SE 6 JCK.[52]<br />
<br />
Should the last word be TCK, and not JCK? <span style="font-size: smaller;" class="autosigned">— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[Special:Contributions/41.85.136.18|41.85.136.18]] ([[User talk:41.85.136.18|talk]]) 08:46, 14 February 2012 (UTC)</span><!-- Template:Unsigned IP --> <!--Autosigned by SineBot--><br />
<br />
: {{done}} Good catch. If you see an obvious error like this, [[WP:BOLD | BE BOLD]] and fix it immediately; it is more fun that way. No need to ask on the talkpage, unless you think someone might find it controversial (e.g. if you find an 'obvious' error on a page about religion or politics or best-software-for-some-particular-task then make sure you have a Reliable Source to back you up). Thanks. [[Special:Contributions/74.192.84.101|74.192.84.101]] ([[User talk:74.192.84.101|talk]]) 17:19, 26 September 2013 (UTC)<br />
<br />
== Why release an open source implemention? ==<br />
<br />
Perhaps the article needs to state why OpenJDK was created or open sourced in the first place?<br /><br />
Was it simply due to pressure from the open source community? - [[User:Wislam|wislam]] ([[User talk:Wislam|talk]]) 11:07, 25 October 2013 (UTC)<br />
<br />
== Removal of Azul Zulu ==<br />
<br />
I removed the Azul Zulu part, I think it has nothing to do in the main OpenJDK article, and notability has to be checked. There were no links excepts from the company itself. [[User:Hervegirod|Hervegirod]] ([[User talk:Hervegirod|talk]]) 21:30, 12 November 2015 (UTC)<br />
: I'm removing it again, there are still no sources except from the editor itself. Please add valid references, because for now notability is not checked. [[User:Hervegirod|Hervegirod]] ([[User talk:Hervegirod|talk]]) 22:11, 17 November 2015 (UTC)<br />
<br />
== External links modified ==<br />
<br />
Hello fellow Wikipedians,<br />
<br />
I have just added archive links to {{plural:3|one external link|3 external links}} on [[OpenJDK]]. Please take a moment to review [https://en.wikipedia.org/w/index.php?diff=prev&oldid=705817668 my edit]. If necessary, add {{tlx|cbignore}} after the link to keep me from modifying it. Alternatively, you can add {{tlx|nobots|deny{{=}}InternetArchiveBot}} to keep me off the page altogether. I made the following changes:<br />
*Added archive https://web.archive.org/20090527021318/http://en.opensuse.org:80/OpenJDK to http://en.opensuse.org/OpenJDK<br />
*Added archive https://web.archive.org/20060717164412/http://blogs.sun.com:80/roller/page/jonathan/200605 to http://blogs.sun.com/roller/page/jonathan/200605#busy_week1<br />
*Added archive https://web.archive.org/20081003094214/http://kennke.org:80/blog/2008/09/29/a-small-step-for-me/ to http://kennke.org/blog/2008/09/29/a-small-step-for-me/<br />
<br />
When you have finished reviewing my changes, please set the ''checked'' parameter below to '''true''' to let others know.<br />
<br />
{{sourcecheck|checked=false}}<br />
<br />
Cheers.—[[User:Cyberbot II|<sup style="color:green;font-family:Courier;">cyberbot II</sup>]]<small><sub style="margin-left:-14.9ex;color:green;font-family:Comic Sans MS;">[[User talk:Cyberbot II|<span style="color:green;">Talk to my owner</span>]]:Online</sub></small> 19:02, 19 February 2016 (UTC)<br />
<br />
== External links modified ==<br />
<br />
Hello fellow Wikipedians,<br />
<br />
I have just added archive links to {{plural:1|one external link|1 external links}} on [[OpenJDK]]. Please take a moment to review [https://en.wikipedia.org/w/index.php?diff=prev&oldid=707700238 my edit]. If necessary, add {{tlx|cbignore}} after the link to keep me from modifying it. Alternatively, you can add {{tlx|nobots|deny{{=}}InternetArchiveBot}} to keep me off the page altogether. I made the following changes:<br />
*Added archive http://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg to http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg<br />
<br />
When you have finished reviewing my changes, please set the ''checked'' parameter below to '''true''' or '''failed''' to let others know (documentation at {{tlx|Sourcecheck}}).<br />
<br />
{{sourcecheck|checked=false}}<br />
<br />
Cheers.—[[User:Cyberbot II|<sup style="color:green;font-family:Courier;">cyberbot II</sup>]]<small><sub style="margin-left:-14.9ex;color:green;font-family:Comic Sans MS;">[[User talk:Cyberbot II|<span style="color:green;">Talk to my owner</span>]]:Online</sub></small> 08:27, 1 March 2016 (UTC)<br />
<br />
== AdoptOpenJDK/RedHat OpenJDK ==<br />
<br />
Why does the RedHat OpenJDK entry in the table of builds link instead to the AdoptOpenJDK page? When I’d first looked at AdoptOpenJDK I was able to observe that they declared affiliation with RedHat and also declared non-affiliation with RedHat. <i><b>In the same sentence.</b></i>. Add that I was unable to find at the time any RedHat sourced mentions of AdoptOpenJDK, and it left me with the feeling that someone was possibly being dishonest. Also, there are places to download a RedHat build of OpenJDK, with their commitments to it, and places to download an AdoptOpenJDK build of OpenJDK. The builds are demonstrably different, and there are pages that question differences between them -> demonstrably they are not a single entity, and therefore are not the same thing. So why the errant link? Meanwhile, if you feel that the two parties are factually affiliated, I’d love to see the source from RedHat confirming this. [[Special:Contributions/67.190.126.82|67.190.126.82]] ([[User talk:67.190.126.82|talk]]) 00:13, 5 November 2019 (UTC)<br />
<br />
== Pure ==<br />
<br />
The article shows a table of implementations with a column "Pure" which is not explained. What does that mean ? -- Juergen [[Special:Contributions/212.202.144.106|212.202.144.106]] ([[User talk:212.202.144.106|talk]]) 10:23, 27 January 2020 (UTC)<br />
<br />
: +1. Please add an explanation. --[[Special:Contributions/2A02:16F0:0:0:0:0:0:A|2A02:16F0:0:0:0:0:0:A]] ([[User talk:2A02:16F0:0:0:0:0:0:A|talk]]) 12:49, 18 February 2020 (UTC)<br />
On May 25th, an IP user modified "Pure" to "build of unmodified upstream" without adding a source. My guesswork of ''Pure'' meaning that the software ist distributed as a standalone package without bundling it with some other software seems wrong and this question seems resolved. -- Juergen [[Special:Contributions/212.202.144.106|212.202.144.106]] ([[User talk:212.202.144.106|talk]]) 15:59, 21 July 2020 (UTC)<br />
<br />
== Links to specific OpenJDK builds ==<br />
<br />
Is there a reason why all of the links to the OpenJDK builds in the table are presented as citations, and not as external links? I've been finding that to be a little strange.<br />
<br />
[[User:CodingKoopa|CodingKoopa]] ([[User talk:CodingKoopa|talk]]) 18:49, 15 June 2021 (UTC)</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1028478219OpenJDK2021-06-14T06:47:02Z<p>CodingKoopa: Link to Dragonwell website.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc]], [[SAP SE]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPLv2]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License]] (GNU GPL) version 2 with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! LTS<br />
! Permissive<br/>license<br />
! [[Technology_Compatibility_Kit|TCK]]<br/>Tested<br />
! build of<br/>unmodified<br/>upstream<br />
! Commercial<br/>support<br/>available<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=http://dragonwell-jdk.io/ |title=Alibaba Dragonwell |access-date=2021-06-14}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
<br />
! {{rh}} | Microsoft<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft OpenJDK |access-date=2021-04-06}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=Oracle GraalVM Community Edition|department=Oracle |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaces the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] has been in an [[Oracle America, Inc. v. Google, Inc.|ongoing legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopahttps://en.wikipedia.org/w/index.php?title=OpenJDK&diff=1028477914OpenJDK2021-06-14T06:44:02Z<p>CodingKoopa: Dragonwell is not TCK tested. See http://dragonwell-jdk.io/.</p>
<hr />
<div>{{short description|Free and open-source implementation of Java SE}}<br />
{{Use mdy dates|date=June 2013}}<br />
{{Infobox software<br />
| name = OpenJDK<br />
| logo = [[File:OpenJDK logo.svg|200px]]<br />
| screenshot =<br />
| caption =<br />
| developer = [[Oracle Corporation]], OpenJDK and Java Community, [[Red Hat]], [[Azul Systems]], [[IBM]], [[Microsoft]], [[Amazon (company)|Amazon]], [[Apple Inc]], [[SAP SE]]<br />
| released = {{Start date and age|2007|05|08}}<br />
| latest release version =<br />
| latest release date =<br />
| operating system = [[Linux]], [[FreeBSD]], [[macOS]], [[Microsoft Windows]], [[OpenIndiana]]; several other ports in progress<br />
| programming language = [[C++]] and [[Java (programming language)|Java]]<br />
| genre = [[Java (software platform)|Java platform]]<br />
| license = [[GNU General Public License|GPLv2]] with [[GPL linking exception|linking exception]]<br />
| website = {{URL|openjdk.java.net}}<br />
}}<br />
'''OpenJDK''' ('''Open Java Development Kit''') is a [[free and open-source software|free and open-source]] implementation of the [[Java Platform, Standard Edition]] (Java SE).<ref>{{cite web|url = http://openjdk.java.net/|title = OpenJDK homepage|publisher=[[Oracle Corporation]] and/or its affiliates|access-date=January 1, 2013}}</ref> It is the result of an effort [[Sun Microsystems]] began in 2006. The implementation is licensed under the [[GNU General Public License]] (GNU GPL) version 2 with a [[GPL linking exception|linking exception]]. Were it not for the GPL linking exception, components that linked to the [[Java Class Library|Java class library]] would be subject to the terms of the GPL license. OpenJDK is the official [[reference implementation]] of Java SE since version 7.<ref>[https://blogs.oracle.com/java/moving-to-openjdk-as-the-official-java-se-7-reference-implementation Moving to OpenJDK as the official Java SE 7 Reference Implementation]</ref><ref>[http://jdk.java.net/java-se-ri/7 Java Platform, Standard Edition 7 Reference Implementations]</ref><ref>{{cite web |title=Java Platform, Standard Edition 8 Reference Implementations |url=http://jdk.java.net/java-se-ri/8 |archive-url=https://web.archive.org/web/20151121054204/https://jdk8.java.net/java-se-8-ri/ |archive-date=November 21, 2015}}</ref><br />
<br />
==Components==<br />
The OpenJDK project produces a number of components: most importantly the [[virtual machine]] ([[HotSpot (virtual machine)|HotSpot]]), the [[Java Class Library]] and the Java compiler ([[javac]]).<br />
<br />
The web-browser plugin and [[Java Web Start|Web Start]], which form part of [[Oracle Java]], are not included in OpenJDK. Sun previously indicated that they would try to open-source these components, but neither Sun nor [[Oracle Corporation|Oracle]] have done so.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2009-June/000604.html<br />
| title=OpenJDK and the new plugin<br />
| date=June 8, 2009<br />
| access-date=September 5, 2009<br />
| last=Darcy|first=Joe<br />
}}<br />
</ref><br />
The only currently available free plugin and Web Start implementations {{as of | 2016 | lc = on}} are those provided by [[IcedTea]].{{citation needed|date=April 2016}}<br />
<br />
OpenJDK 9+ supports [[AOT compilation]] ({{code|jaotc}}) using [[GraalVM]] (JEP 295).<ref><br />
{{cite web<br />
| url=https://www.infoq.com/news/2016/10/AOT-HotSpot-OpenJDK-9<br />
| publisher=InfoQ.com<br />
| title=Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9<br />
| quote=''AOT brings about a new tool called ‘jaotc' which uses Graal as the backend (to generate code)''<br />
| date=2016-10-01<br />
| access-date=2016-10-06<br />
}}<br />
</ref> The experimental {{code|-XX:+EnableJVMCIProduct}} flag enables the use of Graal JIT (JEP 317).<!-- before java11 it was two flags, long flags bad--><ref>{{cite web |title=[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode - Java Bug System |url=https://bugs.openjdk.java.net/browse/JDK-8232118 |website=bugs.openjdk.java.net}}</ref><br />
<br />
==OpenJDK versions==<br />
OpenJDK was initially based only on the [[Java SE 7|JDK 7 version]] of the Java platform.<ref>{{cite web<br />
| url=http://www.sun.com/software/opensource/java/faq.jsp#b10<br />
| title=Didn't you promise to open source both JDK 6 and JDK 7 last November? What happened to JDK 6?<br />
| quote=Sun did make that promise, and we plan to keep it. But in the six months since the November 2006 announcement, it has become clear that doing this is far more complex than just changing the license and publishing the source code.<br />
| publisher=Sun Microsystems<br />
| access-date=October 14, 2007<br />
| archive-date=March 3, 2012<br />
| archive-url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b10<br />
| url-status=dead<br />
}}</ref><br />
<br />
Since JDK 10, the effort to produce an open-source reference implementation of the Java SE Platform was moved over to the JDK Project.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/announce/2017-September/000231.html|title=CFV: New Project: JDK|last=oracle.com|first=mark reinhold at|date=September 26, 2017|access-date=2018-02-16}}</ref> Unlike past JDK Release Projects, which produced just one feature release and then terminated, this long-running Project will produce all future JDK feature releases and will ship a feature release every six months according to a strict, time-based model.<ref>{{Cite web|url=http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html|title=Accelerating the JDK release cadence|last=oracle.com|first=mark reinhold at|date=September 6, 2017|access-date=2018-02-16}}</ref><br />
<br />
There are several separate OpenJDK & JDK Project development branches:<br />
*The JDK project release 16.<ref name=":0">{{cite web|url=http://openjdk.java.net/projects/jdk/|title=JDK Project|last=OpenJDK}}</ref><br />
*The JDK project release 15.<ref name=":0"/><br />
*The JDK project release 14.<ref name=":0"/><br />
*The JDK project release 13.<ref name=":0"/><br />
*The JDK project release 12.<ref name=":0"/><br />
*The JDK project release 11.<ref name=":0"/><br />
*The JDK project release 10.<ref name=":0"/><br />
*The OpenJDK 9 project, which is the basis for JDK 9.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk9|title=JDK 9|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8u project, which is based on JDK 8 and produces updates to the existing Java 8 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8u|title=OpenJDK: JDK 8 Updates|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 8 project, which is the basis for JDK 8, was released on 18 March 2014.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk8|title=JDK 8|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 7u project, which is based on JDK 7 and produces updates to the existing Java 7 releases.<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk7/|title=JDK 7|website=openjdk.java.net|access-date=2018-02-16}}</ref><br />
*The OpenJDK 6 project, which is based on JDK 7, retrofitted to provide an open-source version of [[Java 6]].<ref>{{Cite web|url=http://openjdk.java.net/projects/jdk6|title=OpenJDK: JDK 6|website=openjdk.java.net|access-date=2018-02-16}}</ref><ref>[http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html It will be (Open)JDK7 where OpenJDK==JDK | Java.net] {{webarchive|url=https://web.archive.org/web/20110820044416/http://weblogs.java.net/blog/robogeek/archive/2009/01/it_will_be_open.html |date=August 20, 2011 }}. Weblogs.java.net. Retrieved on 2013-08-09.</ref><ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-February/000001.html<br />
| title=The code is coming! The code is coming!<br />
|quote=''At Sun we're making final preparations for the first source release for the OpenJDK 6 project. We plan to release a tarball of the source, along with matching binary plugs, by February 15, 2008.''<br />
| last=Darcy|first=Joe<br />
| date=February 11, 2008<br />
| access-date=February 16, 2008}}</ref> Note that Red Hat resigned leadership of OpenJDK 6 at the beginning of 2017 and this was then taken up by Azul Systems.<ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |title=OpenJDK6 End Of Life |mailing-list=jdk6-dev |date=October 1, 2016 |last=Haley |first=Andrew |access-date=February 12, 2018 |archive-url=https://web.archive.org/web/20170702101259/http://mail.openjdk.java.net/pipermail/jdk6-dev/2016-October/003606.html |archive-date=July 2, 2017 |url-status=live}}</ref><ref>{{cite mailing list |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |title=New lead for the JDK 6 Project: Andrew Brygin |mailing-list=jdk6-dev |date=October 1, 2016 |last=Bell |first=Tim |access-date=February 19, 2018 |archive-url=https://web.archive.org/web/20180219175751/http://mail.openjdk.java.net/pipermail/jdk6-dev/2017-January/003614.html |archive-date=February 19, 2018 |url-status=live}}</ref><br />
<br />
==OpenJDK builds==<br />
{{missing information|section|presence of installer providing system integration (Windows registry, Mac framework, Linux MIME)|date=November 2020}}<!-- mainly for desktop users --><br />
Due to Oracle no longer releasing updates for [[long-term support]] (LTS) releases under a permissive license, others have begun offering builds for Windows.<ref>{{cite web |url=https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html|title= Time to look beyond Oracle's JDK }}</ref><ref>[https://stackoverflow.com/questions/52431764/difference-between-openjdk-and-adoptopenjdk Difference between OpenJDK and AdoptOpenJDK]</ref><ref>[https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244 Java is Still Free]</ref> Linux distributions have always offered their own builds.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Build<br />
! LTS<br />
! Permissive<br/>license<br />
! [[Technology_Compatibility_Kit|TCK]]<br/>Tested<br />
! build of<br/>unmodified<br/>upstream<br />
! Commercial<br/>support<br/>available<br />
|-<br />
! {{rh}} | AdoptOpenJDK<ref>{{cite web |url=https://adoptopenjdk.net/ |title=AdoptOpenJDK - Open source, prebuilt OpenJDK binaries |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
| {{Optional}} (IBM)<br />
|-<br />
! {{rh}} | Alibaba Dragonwell<ref>{{cite web |url=https://github.com/alibaba/dragonwell8 |title=Alibaba Dragonwell |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Amazon Corretto<ref>{{cite web |url=https://aws.amazon.com/corretto/ |title=Amazon Corretto |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<ref>{{cite web |url=https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/|title= Amazon Introduces Amazon Corretto Crypto Provider (ACCP) }}</ref><br />
| {{Optional}} (on AWS)<br />
|-<br />
! {{rh}} | Azul Zulu<ref>{{cite web |url=https://www.azul.com/products/zulu-community/ |title=Zulu Community: Free, tested builds of OpenJDK managed by Azul engineers |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | BellSoft Liberica JDK<ref>{{cite web |url=https://bell-sw.com/java |title=Download Liberica JDK, OpenJDK, Java 8, Java 11, Linux, Windows, macOS |website=BellSoft |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | IBM Java SDK<ref>{{cite web |url=https://developer.ibm.com/javasdk/ |title=Home - Java SDK |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
<br />
! {{rh}} | Microsoft<ref>{{cite web |url=https://www.microsoft.com/openjdk |title=Microsoft OpenJDK |access-date=2021-04-06}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (on Azure)<br />
|-<br />
<br />
! {{rh}} | ojdkbuild<ref>{{cite web |url=https://github.com/ojdkbuild/ojdkbuild |title=ojdkbuild/ojdkbuild |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | OpenLogic OpenJDK<ref>{{cite web |url=https://www.openlogic.com/openjdk-downloads |title=OpenJDK Downloads|website=OpenLogic |access-date=2020-10-02}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
| {{Optional}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Community Edition<ref>{{cite web |url=https://www.graalvm.org/ |title=Oracle GraalVM Community Edition|department=Oracle |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Oracle GraalVM Enterprise Edition<ref>{{cite web |url=https://www.oracle.com/java/graalvm/ |title=GraalVM Enterprise |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2021-04-27}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle Java SE<ref>{{cite web |url=https://www.oracle.com/technetwork/java/javase/ |title=Java SE |department=Oracle Technology Network |website=[[Oracle Corporation|Oracle]] |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | Oracle OpenJDK<ref>{{cite web |url=https://jdk.java.net/ |title=JDK Builds from Oracle |access-date=2020-07-10}}</ref><br />
| {{no}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
|-<br />
! {{rh}} | Red Hat build of OpenJDK<ref name="RHOJDK">{{cite web |url=https://developers.redhat.com/products/openjdk/overview |title=OpenJDK Overview |website=Red Hat Developer |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{yes}}<br />
|-<br />
! {{rh}} | SAP SapMachine<ref>{{cite web |url=https://sap.github.io/SapMachine/ |title=An OpenJDK release maintained and supported by SAP |department=SapMachine |website=[[GitHub]] |access-date=2020-07-10}}</ref><br />
| {{yes}}<br />
| {{yes}}<br />
| {{yes}}<br />
| {{no}}<br />
| {{optional}} (for SAP products)<br />
|-<br />
|}<br />
<br />
==IcedTea and inclusion in software distributions==<br />
{{Main|IcedTea}}<br />
<br />
In order to bundle OpenJDK in [[Fedora (Linux distribution)|Fedora]] and other [[free software|free]] [[Linux]] distributions, OpenJDK needed to be buildable using only [[free software]] components. Due to the [[closed source|encumbered]] components in the [[Java Class Library|class library]] and implicit assumptions within the build system that the JDK being used to build OpenJDK was a Sun JDK, this was not possible. To achieve openness, [[Red Hat]] started the IcedTea project in June 2007.<ref><br />
{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2007-June/000032.html<br />
| title=Credits<br />
| date=June 8, 2007<br />
|last=Fitzsimmons|first=Thomas<br />
| access-date=June 8, 2007}}<br />
</ref><br />
It began life as an OpenJDK/[[GNU Classpath]] hybrid that could be used to [[bootstrapping (compilers)|bootstrap]] OpenJDK, replacing the encumbrances with code from GNU Classpath.<ref>{{cite web<br />
| url=http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
| date=June 7, 2007<br />
| last=Andrew<br />
| first=Haley<br />
| access-date=June 9, 2007<br />
| archive-url=https://web.archive.org/web/20070820003552/http://article.gmane.org/gmane.comp.java.openjdk.distro-packaging.devel/5<br />
| archive-date=August 20, 2007<br />
| url-status=dead<br />
}}</ref><ref>{{cite web<br />
| url=http://developer.classpath.org/pipermail/classpath/2007-June/002109.html<br />
| title=Experimental Build Repository at icedtea.classpath.org<br />
|last=Mark|first=Wielaard<br />
| date=June 7, 2007<br />
| access-date=June 9, 2007}}<br />
</ref><br />
<br />
On November 5, 2007, Red Hat signed both the Sun Contributor Agreement and the OpenJDK Community [[Technology Compatibility Kit|TCK]] License.<ref name="fitzsimAnnounce">{{cite web<br />
| url=http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en<br />
| title=Red Hat and Sun Collaborate to Advance Open Source Java Technology<br />
| publisher=[[Red Hat]]<br />
| date=November 5, 2007<br />
| access-date=November 6, 2007<br />
| archive-url=https://web.archive.org/web/20070825211213/http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view<br />
| archive-date=August 25, 2007<br />
| url-status=dead<br />
}}</ref> One of the first benefits of this agreement is tighter alignment with the IcedTea project, which brings together [[Fedora (Linux distribution)|Fedora]], the Linux distribution, and [[JBoss application server|JBoss]], the application server, technologies in a Linux environment. IcedTea provided free software alternatives for the few remaining proprietary sections in the OpenJDK project.<br />
<br />
In May 2008, the [[Fedora (operating system)|Fedora]] 9<ref name="fedora9redhat">{{cite web<br />
| url=http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| title=OpenJDK in Fedora 9!<br />
| last=Wade<br />
| first=Karsten<br />
| publisher=redhatmagazine.com<br />
| quote=Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.<br />
| date=March 13, 2008<br />
| access-date=April 5, 2008<br />
| archive-url=https://web.archive.org/web/20080421100346/http://developer.redhatmagazine.com/2008/03/12/openjdk-to-replace-icedtea-in-fedora-9/<br />
| archive-date=April 21, 2008<br />
| url-status=dead<br />
}}</ref><ref><br />
{{cite web<br />
| url=http://www.sun.com/aboutsun/pr/2008-04/sunflash.20080430.1.xml<br />
| title=Open Source Java Technology Debuts In GNU/Linux Distributions<br />
| publisher=Sun Microsystems<br />
| access-date=May 2, 2008}}</ref> and [[Ubuntu (operating system)|Ubuntu 8.04]]<ref name="ubuntu openjdk-6">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/openjdk-6<br />
| title=openjdk-6 in Ubuntu<br />
| access-date=April 19, 2008}}<br />
</ref><br />
distributions included IcedTea 6, based completely on [[free software|free]] and [[Open-source software|open source]] code.<ref><br />
{{cite web<br />
|url = http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|title = There's not a moment to lose!<br />
|last = Reinhold<br />
|first = Mark<br />
|date = April 24, 2008<br />
|access-date = April 19, 2008<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080429191849/http://blogs.sun.com/mr/entry/in_hardy_heron<br />
|archive-date = April 29, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> [[Fedora (Linux distribution)|Fedora 9]] was the first version to be shipped with IcedTea6, based on the OpenJDK6 sources from Sun rather than OpenJDK7. It was also the first to use OpenJDK for the package name (via the [http://openjdk.java.net/legal/openjdk-trademark-notice.html OpenJDK trademark agreement]) instead of IcedTea.<ref name="fedora9redhat" /> [[Ubuntu (operating system)|Ubuntu]] also first packaged IcedTea7<ref name="ubuntu icedtea-java7">{{cite web<br />
| url=https://launchpad.net/ubuntu/+source/icedtea-java7<br />
| title=icedtea-java7 in Ubuntu<br />
| access-date=April 19, 2008}}</ref> before later moving to IcedTea6. Packages for IcedTea6 were also created for [[Debian]] and included in ''Lenny''. On July 12, 2008, [[Debian]] accepted OpenJDK-6 in unstable,<ref>{{cite web<br />
|url=http://robilad.livejournal.com/33750.html<br />
|title=QotD: Debian Overview of openjdk-6 source package<br />
|last=Topic|first=Dalibor<br />
|access-date=July 15, 2008<br />
|date=July 14, 2008}}<br />
</ref><ref>{{cite web<br />
|url=http://packages.qa.debian.org/o/openjdk-6.html<br />
|title=Overview of openjdk-6 source package<br />
|publisher=debian.org<br />
|access-date=July 15, 2008}}</ref> and it later was included in [[Debian#Package life cycle|stable]].<ref>{{cite web<br />
|url=http://packages.debian.org/stable/openjdk-6-jdk<br />
|title=Package: openjdk-6-jdk<br />
|publisher=debian.org<br />
|date=February 14, 2009<br />
|access-date=February 16, 2009}}</ref> OpenJDK is also available on [[openSUSE]],<ref>{{cite web|url=http://en.opensuse.org/OpenJDK |title=Package: OpenJDK |publisher=opensuse.org |access-date=June 1, 2009 |url-status=dead |archive-url=https://web.archive.org/web/20090527021318/http://en.opensuse.org/OpenJDK |archive-date=May 27, 2009 }}</ref> [[Red Hat Enterprise Linux]] and RHEL derivatives such as [[CentOS]].<ref>{{cite web<br />
| url=http://openjdk.java.net/install/#epel<br />
| title=How to download and install prebuilt OpenJDK packages<br />
| access-date=March 3, 2010}}</ref><br />
<br />
In June 2008, Red Hat announced that the packaged binaries for OpenJDK on [[Fedora (Linux distribution)|Fedora 9]], built using IcedTea 6, had passed the [[Technology Compatibility Kit]] tests and could claim to be a fully compatible Java 6 implementation.<ref>{{cite web<br />
|url = http://blog.softwhere.org/archives/196<br />
|title = Java is finally Free and Open<br />
|date = June 19, 2008<br />
|last = Sharples<br />
|first = Rich<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196<br />
|archive-date = June 20, 2008<br />
|df = mdy-all<br />
}}<br />
</ref> In July 2009, an IcedTea 6 binary build for [[Ubuntu (operating system)|Ubuntu 9.04]] passed all of the compatibility tests in the Java SE 6 [[Technology Compatibility Kit|TCK]].<ref>[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-July/000587.html Announcing OpenJDK 6 Certification for Ubuntu 9.04 (jaunty)]</ref><br />
<br />
Since August 2008, OpenJDK 7 is usable on [[macOS]] and other [[Berkeley Software Distribution|BSD]] variants.<ref>{{cite web<br />
|url=http://landonf.bikemonkey.org/code/java/SoyLatte_Meets_OpenJDK.20080819.html<br />
|title=SoyLatte, Meet OpenJDK: OpenJDK 7 for Mac OS X<br />
|last=Fuller|first=Landon<br />
|access-date=August 22, 2008<br />
|date=August 19, 2008}}<br />
</ref><br />
<br />
On [[Android Nougat]], OpenJDK replaces the now-discontinued [[Apache Harmony]] as the Java libraries in the source code of the [[mobile operating system]]. [[Google]] has been in an [[Oracle America, Inc. v. Google, Inc.|ongoing legal dispute with Oracle]] over claims of copyright and patent infringement through its use of re-implementations of copyrighted Java APIs via Harmony. While also stating that this change was to create a more consistent platform between Java on Android and other platforms, the company admitted that the switch was motivated by the lawsuit, arguing that Oracle had authorized its use of the OpenJDK code by licensing it under the GPL.<ref name=ars-njdk>{{cite web|title=Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL|url=https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/|website=Ars Technica|access-date=7 January 2016}}</ref><br />
<br />
==History==<br />
{{see also|Java (Sun)#Licensing}}<br />
<br />
===Sun's promise and initial release===<br />
[[Sun Microsystems|Sun]] announced in [[JavaOne|JavaOne 2006]] that Java would become open-source software,<ref>{{cite web|url=http://blogs.sun.com/roller/page/jonathan/200605#busy_week1 |title=Busy Week... |last=Schwartz |first=Jonathan |publisher=Sun Microsystems |date=May 23, 2006 |access-date=May 9, 2007 |url-status=dead |archive-url=https://web.archive.org/web/20060717164412/http://blogs.sun.com/roller/page/jonathan/200605 |archive-date=July 17, 2006 }}</ref><ref>{{cite web|url=http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |format=[[OGG Theora]] |title=Sun Opens Java |publisher=[[Sun Microsystems]] |url-status=dead |archive-url=https://web.archive.org/web/20090319020035/http://mediacast.sun.com/share/tmarble/Sun_Opens_Java.ogg |archive-date=March 19, 2009 }}</ref> and on October 25, 2006, at the [[Oracle OpenWorld]] conference, [[Jonathan I. Schwartz|Jonathan Schwartz]] said that the company intended to announce the open-sourcing of the core [[Java Platform]] within 30 to 60 days.<ref>{{cite web<br />
| url= http://www.infoworld.com/d/developer-world/sun-ceo-sets-open-source-java-time-frame-558<br />
| title = Sun CEO sets open source Java time frame - Announcement set for 30 to 60 days<br />
| publisher=[[InfoWorld]]<br />
| date = October 25, 2006<br />
| access-date=2011-12-22}}</ref><br />
<br />
Sun released the Java [[HotSpot (virtual machine)|HotSpot]] virtual machine and compiler as [[free software]] under the [[GNU General Public License]] on November 13, 2006, with a promise that the rest of the JDK (which includes the [[Java Runtime Environment]]) would be placed under the GPL by March 2007, "except for a few components that Sun does not have the right to publish in source form under the GPL".<ref>{{cite web<br />
| url= http://www.sun.com/2006-1113/feature/index.jsp<br />
| title = Sun Opens Java<br />
| publisher=Sun Microsystems<br />
| date = November 13, 2006<br />
|access-date=May 9, 2007 |archive-url = https://web.archive.org/web/20070421151747/http://www.sun.com/2006-1113/feature/index.jsp <!-- Bot retrieved archive --> |archive-date = April 21, 2007}}</ref> According to free-software advocate [[Richard Stallman]], this would end the "Java trap", the [[vendor lock-in]] that he argues applied to Java and programs written in Java.<ref>{{cite web | url=https://www.gnu.org/philosophy/java-trap.html | title=Free But Shackled—The Java Trap | last=Stallman | first=Richard | access-date=December 4, 2007}}</ref><br />
<br />
===Release of the class library===<br />
Following their promise to release a [[Java Development Kit]] (JDK) based almost completely on free and open-source code in the first half of 2007,<ref>[http://www.sun.com/software/opensource/java/faq.jsp#b4 Oracle and Sun] {{Webarchive|url=https://www.webcitation.org/65tawvVM4?url=http://www.oracle.com/us/sun/index.htm#b4 |date=March 3, 2012 }}. Sun.com (2011-10-04). Retrieved on 2013-08-09.</ref> Sun released the complete [[source code]] of the Java Class Library under the GPL on May 8, 2007, except for some limited parts that had been licensed to Sun by third parties and Sun was unable to [[Software relicensing|re-license]] under the GPL.<ref>{{cite web<br />
| url= http://mail.openjdk.java.net/pipermail/announce/2007-May.txt | title = Open JDK is here!<br />
| publisher=Sun Microsystems<br />
| date = May 8, 2007<br />
| access-date=May 9, 2007}}</ref> Included in the list of encumbered parts were several major components of the Java [[graphical user interface]] (GUI). Sun stated that it planned to replace the remaining [[proprietary software|proprietary]] components with alternative implementations and to make the class library completely free.<br />
<br />
When initially released in May 2007, 4% of the OpenJDK class library remained proprietary.<ref>{{cite web<br />
| url=http://fitzsim.org/blog/?p=17<br />
| title=Plans for OpenJDK<br />
| last=Fitzsimmons|first=Thomas<br />
| date=May 18, 2007<br />
| access-date=May 22, 2007}}</ref> By the appearance of OpenJDK 6 in May 2008, less than 1% (the [[Simple Network Management Protocol|SNMP]] implementation,<ref name="openjdk b10" /> which is not part of the Java specification) remained,<ref name="fedora9redhat"/> making it possible to build OpenJDK without any binary plugs.<ref name="openjdk b10">{{cite web<br />
|url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-May/000058.html<br />
|title=OpenJDK 6 b10 source posted<br />
|date=May 30, 2008<br />
|access-date=June 1, 2008<br />
}}</ref> The binary plug requirement was later dropped from OpenJDK 7 as part of b53 in April 2009.<ref>{{cite web<br />
|url = http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|title = Changes in OpenJDK7 b53<br />
|date = April 2, 2009<br />
|access-date = September 5, 2009<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20090406171143/http://download.java.net/jdk7/changes/jdk7-b53.html<br />
|archive-date = April 6, 2009<br />
|df = mdy-all<br />
}}</ref><br />
<br />
This was made possible, over the course of the first year, by the work of [[Sun Microsystems]] and the OpenJDK community. Each encumbrance<ref>{{cite web<br />
|url = http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|title = Plans for OpenJDK<br />
|last = Herron<br />
|first = David<br />
|date = October 4, 2007<br />
|access-date = October 9, 2007<br />
|url-status = dead<br />
|archive-url = https://web.archive.org/web/20071011014156/http://weblogs.java.net/blog/robogeek/archive/2007/10/openjdk_encumbr.html<br />
|archive-date = October 11, 2007<br />
|df = mdy-all<br />
}}</ref> was either released as [[free and open-source software]] or replaced with an alternative. Beginning in December 2010, all the so-called ''binary plugs'' were replaced by [[open-source software|open-source]] replacements, making the whole JDK open sourced and the ''binary plugs'' not necessary anymore.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html<br />
| title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed<br />
| author=Kelly O'Hair<br />
| publisher=[[Oracle Corporation]]<br />
| date=December 2010<br />
| access-date=2011-11-25}}</ref><br />
<br />
===Community improvements===<br />
On November 5, 2007, [[Red Hat]] announced an agreement with Sun, signing Sun's broad contributor agreement (which covers participation in all Sun-led free and open-source software projects by all Red Hat engineers) and Sun's OpenJDK Community [[Technology Compatibility Kit]] (TCK) License Agreement (which gives the company access to the test suite that determines whether a project based on OpenJDK complies with the Java SE 6 specification).<ref>[http://www.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&newsId=20071105005882&newsLang=en Broad contributor agreement and TCK License pave way for a fully compatible, free and open-source Java Development Kit for Red Hat Enterprise Linux]</ref><br />
<br />
Also in November 2007, the ''Porters Group'' was created on OpenJDK to aid in efforts to port OpenJDK to different [[microarchitecture|processor architectures]] and [[operating system]]s. The [[BSD]] porting project led by Kurt Miller and Greg Lewis and the [[Mac OS X]] porting project (based on the BSD one) led by Landon Fuller have expressed interest in joining OpenJDK via the Porters Group. As of January 2008, both are part of the mailing list discussions. Another project pending formalization on the Porters Group is the [[Haiku (operating system)|Haiku]] Java Team led by Bryan Varner.<ref>{{cite web|url=http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|archive-url=https://web.archive.org/web/20080105150946/http://haiku-os.org/news/2008-01-03/new_java_for_haiku_team_formed|url-status=dead|archive-date=January 5, 2008|title=New java for haiku team formed|date=January 3, 2008|author=koki|publisher=Haiku}}</ref><br />
<br />
In December 2007, Sun moved the [[revision control]] of OpenJDK from [[Sun WorkShop TeamWare|TeamWare]] to [[Mercurial]] (and later to [[Git]] and [[GitHub]]), as part of the process of releasing it to [[open-source software|open-source]] communities.<ref>{{cite interview<br />
| subject = [[James Gosling]]<br />
| interviewer = Robert Eckstein<br />
| url = http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html<br />
| title = James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1<br />
|date=October 2006<br />
}}</ref><ref>{{cite web<br />
|last = O'Hair<br />
|first = Kelly<br />
|date = December 12, 2007<br />
|title = Mercurial OpenJDK Questions<br />
|url = http://blogs.sun.com/kto/entry/mercurial_openjdk_questions<br />
|url-status = dead<br />
|archive-url = https://www.webcitation.org/6671inOnV?url=https://blogs.oracle.com/roller-ui/errors/404.jsp<br />
|archive-date = March 12, 2012<br />
|df = mdy-all<br />
}}</ref><br />
<br />
OpenJDK has comparatively strict procedures of accepting code contributions: every proposed contribution must be reviewed by another OpenJDK committer and the contributor must have signed the Sun/Oracle Contributor Agreement (SCA/OCA).<ref>{{cite web<br />
| url = http://oss.oracle.com/oca.pdf<br />
| title = Sun Microsystems Inc. Contributor Agreement}}</ref> Preferably, there should also be a [[JavaTest harness|jtreg]]<ref>{{cite web<br />
| url = http://openjdk.java.net/jtreg/<br />
| title = Regression Test Harness for the OpenJDK platform: jtreg<br />
| access-date = August 26, 2008<br />
}}</ref> test demonstrating the bug has been fixed. Initially, the external patch submission process was slow<ref>{{cite web<br />
| url = http://www.javalobby.org/java/forums/t98834.html<br />
| title = Classpath hackers frustrated with slow OpenJDK process<br />
| last = Tripp<br />
| first = Andy<br />
| date = July 16, 2007<br />
| access-date = April 20, 2008<br />
| archive-url = https://www.webcitation.org/6671kDV9H?url=http://www.javalobby.org/java/forums/t98834.html<br />
| archive-date = March 12, 2012<br />
| url-status = dead<br />
}}</ref> and, until September 2008, commits to the [[codebase]] were only made by Sun engineers.<ref>{{cite web|url=http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |title=A small step for me |last=Kennke |first=Roman |date=September 29, 2008 |access-date=October 19, 2008 |url-status=dead |archive-url=https://web.archive.org/web/20081003094214/http://kennke.org/blog/2008/09/29/a-small-step-for-me/ |archive-date=October 3, 2008 }}</ref> The process has improved and, {{as of|2010|lc=on}}, simple patches and backports from OpenJDK 7 to OpenJDK 6 can take place within hours rather than days.<ref>{{cite web<br />
| url = http://mail.openjdk.java.net/pipermail/jdk6-dev/2010-June/001708.html<br />
| title = Backporting changeset from 7 to 6 for bugfix<br />
| last=Darcy|first=Joe<br />
| date = June 10, 2010}}</ref><br />
<br />
In 2011, an unofficial port of OpenJDK 6.0 to OS/2 was first released.<ref>{{cite web|url=https://trac.netlabs.org/java|website=netlabs.org|access-date=2020-09-09|title=Java for OS/2 and OS/2-based systems}}</ref> This port is included in the OS/2 derivative [[ArcaOS]].<ref>{{cite web|url=https://www.arcanoae.com/wiki/arcaos/compatibility-subsystems/|title=Compatibility Subsystems|access-date=2020-09-09|website=arcanoae.com}}</ref><br />
<br />
On 25 September 2013, Microsoft and [[Azul Systems]] collaborated to create Zulu,<ref>{{Cite web|title = Microsoft, Azul Bring OpenJDK to Windows Azure With 'Zulu'|url = http://www.eweek.com/developer/microsoft-azul-bring-openjdk-to-windows-azure-with-zulu.html|website = www.eweek.com|access-date = 2015-12-03}}</ref> a build of OpenJDK for users of the Windows Azure cloud. Zulu is available as a free download from the community site [http://zulu.org/ Zulu.org]. It is also possible to get Zulu on Amazon Web Services<ref>{{Cite web|title = Azul Zing goes live on Red Hat Enterprise Linux on Amazon Web Services {{!}} Financial Industry & Algorithmic Trading News {{!}} Automated Trader|url = http://www.automatedtrader.net/news/at/154682/azul-zing-goes-live-on-red-hat-enterprise-linux-on-amazon-web--services|website = www.automatedtrader.net|access-date = 2015-12-03}}</ref> via Canonical's Juju Charm Store,<ref>{{Cite web|title = Azul Systems Joins Canonical's Charm Partner Program|url = http://www.enterprisetech.com/2015/07/22/azul-systems-joins-canonicals-charm-partner-program/|website = EnterpriseTech|access-date = 2015-12-03}}</ref> the Docker Hub,<ref>{{Cite web|title = Azul Systems puts Java 8 into Docker containers for Linux users|url = http://www.v3.co.uk/v3-uk/news/2371497/azul-systems-puts-java-8-into-docker-containers-for-linux-users|website = www.v3.co.uk|access-date = 2015-12-03}}</ref> and Azul Systems repositories. Azul contributes bug fixes and enhancements back to the OpenJDK project and has several project committers on staff.<ref>{{Cite news|url=https://www.azul.com/products/zulu-and-zulu-enterprise/java-standards/|title=Java Standards: Essential for Your Business - Azul Systems, Inc.|work=Azul Systems, Inc.|access-date=2018-02-06|language=en-US}}</ref><br />
<br />
Since April 2016 there are unsupported community builds of OpenJDK for [[Microsoft Windows]] on [[GitHub]] in the project [https://github.com/ojdkbuild/ojdkbuild ojdkbuild] which are released in pace with updates for [[Oracle Corporation|Oracle]] JDK. From build 8u151 on, the MSI-installer offers an optional component for using [[Java Web Start]] based on the [[IcedTea#IcedTea-Web|IcedTea-Web]] project.<br />
<br />
In 2020, a port of OpenJDK 8 to [[OpenVMS]] on the [[Itanium]] platform was released.<ref>{{cite web|url=https://vmssoftware.com/about/news/2020-06-10-openjdk-announcement/|title=New OpenJDK for OpenVMS announced|date=2020-06-10|website=vmssoftware.com|access-date=2020-09-09}}</ref> <br />
<br />
The number of external contributions to OpenJDK is growing since project inception. OpenJDK 11, released in September 2018, received 20% of external fixes<ref>{{cite web<br />
| url=https://blogs.oracle.com/java-platform-group/building-jdk-11-together<br />
| title=Building JDK 11 Together<br />
| author=Dalibor Topic <br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref> and brought 17 new JEPs (features), out of which 3 were contributed by the community. Namely, JEP 315: "Improve Aarch64 Intrinsics" (contributed by [[BellSoft]]), JEP 318: "Epsilon: A No-Op Garbage Collector" (by Red Hat) and JEP 331: "Low-Overhead Heap Profiling" (contributed by Google).<ref>{{cite web<br />
| url=https://openjdk.java.net/projects/jdk/11/<br />
| title=JDK 11<br />
| author=Mark Reinhold<br />
| publisher=[[Oracle Corporation]]<br />
| date=October 2018<br />
| access-date=2019-05-27}}</ref><br />
<br />
===Collaboration with IBM, Apple, and SAP===<br />
On October 11, 2010, [[IBM]], by far the biggest participant in the [[Apache Harmony]] project, decided to join [[Oracle Corporation|Oracle]] on the OpenJDK project, effectively shifting its efforts from Harmony to OpenJDK.<ref>{{cite web<br />
| url=http://www.marketwire.com/press-release/Oracle-and-IBM-Collaborate-to-Accelerate-Java-Innovation-Through-OpenJDK-NASDAQ-ORCL-1332855.htm<br />
| title=Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK<br />
| publisher=[[Oracle Corporation]]<br />
| access-date=October 22, 2010}}</ref><ref>{{cite web<br />
| url=https://arstechnica.com/open-source/news/2010/10/ibm-joins-openjdk-as-oracle-shuns-apache-harmony.ars<br />
| title=Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony<br />
|author=Ryan Paul<br />
| publisher=Ars Technica<br />
| access-date=October 22, 2010}}</ref> Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".<ref>{{cite web<br />
| url=http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| title=IBM joins the OpenJDK community, will help unify open source Java efforts<br />
| author=Bob Sutor<br />
| quote=IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we’ll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.<br />
| access-date=October 22, 2010<br />
| archive-url=https://web.archive.org/web/20101018160132/http://www.sutor.com/c/2010/10/ibm-joins-the-openjdk-community/<br />
| archive-date=October 18, 2010<br />
| url-status=dead<br />
}}</ref><br />
<br />
On November 12, 2010, [[Apple Inc.]] (just three weeks after deprecating its own Java runtime port<ref>{{cite web<br />
| url=https://developer.apple.com/library/mac/#releasenotes/Java/JavaSnowLeopardUpdate3LeopardUpdate8RN/NewandNoteworthy/NewandNoteworthy.html<br />
| title=Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes<br />
| date=October 20, 2010}}</ref>) and Oracle Corporation announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client.<ref>{{cite web<br />
| url=http://www.businesswire.com/news/home/20101112005253/en/Oracle-Apple-Announce-OpenJDK-Project-Mac-OS<br />
| title=Oracle and Apple Announce OpenJDK Project for Mac OS X<br />
| publisher=[[Business Wire]]<br />
| date=November 12, 2010<br />
| quote=Oracle and Apple today announced the OpenJDK project for Mac OS X. Apple will contribute most of the key components, tools and technology required for a Java SE 7 implementation on Mac OS X, including a 32-bit and 64-bit HotSpot-based Java virtual machine, class libraries, a networking stack and the foundation for a new graphical client. OpenJDK will make Apple’s Java technology available to open source developers so they can access and contribute to the effort.<br />
| access-date=2010-11-12}}</ref><br />
<br />
On January 11, 2011, the Mac OS X Port Project was created on OpenJDK, and [[Apple Inc.|Apple]] made the first public contribution of code to the project. The initial Apple contribution built on the OpenJDK [[Berkeley Software Distribution|BSD]] port.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html<br />
| title=Announcing: OpenJDK for Mac OS X source repository, mailing list, project home<br />
| author=Mike Swingler ([[Apple Inc.|Apple]])<br />
| publisher=OpenJDK<br />
| date=January 11, 2011<br />
| quote=''I'm very happy to let you know that today we made the first public contribution of code to the OpenJDK project for Mac OS X. This initial contribution builds on the hard work of the BSD port, and initially has the same functionality. Today's contribution simply modifies the build process to create universal binary, and produces a .jdk bundle which is recognized by Java Preferences and the JVM detection logic in Mac OS X.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
In July 2011, [[SAP AG]] announced that SAP officially joined the OpenJDK project.<ref>{{cite web<br />
| url=http://mail.openjdk.java.net/pipermail/discuss/2011-July/001982.html<br />
| title=SAP joins the OpenJDK<br />
| author=Volker Simonis ([[SAP AG]])<br />
| publisher=OpenJDK<br />
| date=July 14, 2011<br />
| quote=''I'm really happy that as of today, SAP has signed the Oracle Contributor Agreement (OCA). This means that with immediate effect the SAP JVM developers can officially join the discussions on the various OpenJDK mailing lists and contribute patches and enhancements to the project.''<br />
| access-date=2010-11-12}}</ref><br />
<br />
==See also==<br />
*[[Free Java implementations]]<br />
<br />
==References==<br />
{{reflist}}<br />
<br />
==External links==<br />
*[http://openjdk.java.net/ Main site]<br />
*[http://jdk.java.net/ OpenJDK builds from Oracle]<br />
*[https://developers.redhat.com/products/openjdk/overview/ OpenJDK builds from Red Hat]<br />
*[https://adoptopenjdk.net/ OpenJDK builds from AdoptOpenJDK]<br />
*[https://www.microsoft.com/openjdk Microsoft Build of OpenJDK]<br />
*[https://www.youtube.com/watch?v=wHoRBvt3U6o Java in 2018: Change is the Only Constant Keynote by Mark Reinhold]<br />
*[https://web.archive.org/web/20090531095111/http://today.java.net/pub/a/today/2009/05/21/zero-and-shark-openjdk-port.html Zero and Shark: a Zero-Assembly Port of OpenJDK]<br />
*[http://hg.openjdk.java.net/ OpenJDK official source code]<br />
<br />
{{Java (software platform)}}<br />
{{Java Virtual Machine}}<br />
{{Oracle FOSS}}<br />
{{Portal bar|Free and open-source software|Computer programming}}<br />
<br />
[[Category:Free software programmed in C++]]<br />
[[Category:Free software programmed in Java (programming language)]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Java (programming language)]]<br />
[[Category:Java (programming language) libraries]]<br />
[[Category:Java virtual machine]]<br />
[[Category:Oracle software]]</div>CodingKoopa