Skip to content

Free Software ​

Fuji is free software, and so is the library it plays video through, and the two facts are one story. The formats a collection holds were products, each with a company behind it that moved on, and the decoders that still open them were written and kept by volunteers under a license that let them be kept. Fuji is under that license too, the GNU General Public License, version 3, so that what happened to the formats can happen to Fuji: the collection outlives the company, and the software that opens it outlives its author.

Free as in speech ​

Free software is software anyone may run, read, change and pass on. The Free Software Foundation's definition counts four freedoms, to run the program for any purpose, to study how it works and change it, to redistribute copies, and to distribute changed copies, and it says the word is to be read "as in 'free speech,' not as in 'free beer.'" The price may be nothing, and usually is, but the point is what you are allowed to do with it.

The idea has a founder and a date. Richard Stallman, a programmer at MIT's AI Lab, was refused the source code to a Xerox laser printer's software in 1980, having modified the lab's older printer himself, and concluded that people must be able to change the software they use. He announced the GNU Project in September 1983, an operating system anyone could share, and founded the Free Software Foundation in October 1985 to carry it. The GNU General Public License followed in February 1989, version 2 in June 1991 and version 3 in June 2007, and it was the first license of its kind for general use. Its mechanism is called copyleft: it uses copyright to pass the four freedoms on to everyone who receives the program or anything built from it, so a free program cannot be taken private by whoever gets it next. The Linux kernel, announced by Linus Torvalds in October 1991 and under the GPL from February 1992, is the thing most people have heard of that this produced. The Lesser GPL, published in 1991 for libraries and renamed in 1999, keeps the freedoms for the library itself while letting any program link it, free or not, and that distinction matters below.

"Open source" is the same software under a name a business could say. The Open Source Initiative was founded in February 1998 by Bruce Perens and Eric Raymond to campaign under it, and the two words now cover the whole field, from the kernel in a phone to the player in this file manager. The older name says what the field is for.

Creative Commons ​

Writing, pictures and film got their version in 2001. Lawrence Lessig, with Hal Abelson and Eric Eldred, founded Creative Commons in January 2001 to widen the pool of works people could legally reuse and share, and the first licenses came out in December 2002; version 4.0, the current one, in November 2013. A Creative Commons license is to a photograph or an essay what a free software license is to a program: a grant, written once, that says anyone may copy this, with the author's name kept on it. Big Buck Bunny, the Blender Institute's ten-minute film of 2008, was made to prove the idea for film and released under Creative Commons Attribution, and it is the film any video project may copy and play without asking anyone.

The formats that were products ​

The video on a drive was made by products, and every product had a company and a year. QuickTime arrived on December 2, 1991, and Cinepak joined it in 1992, written by Peter Barrett at SuperMac Technologies to play 320 by 240 video at the speed of a single-speed CD-ROM drive; it reached Windows in 1993 and the Sega CD, the Saturn, the 3DO and the Jaguar CD besides, so it is in the CD-ROM titles and the console cutscenes of that decade. Video for Windows shipped in November 1992 with Microsoft Video 1, a codec Microsoft licensed from Media Vision, and with Indeo, from Intel Architecture Labs, which Intel sold to Ligos in 2000. Sorenson Video came with QuickTime 3 on March 30, 1998, and its maker filed for bankruptcy in October 2018. RealVideo, from RealNetworks in February 1997, was made for streaming over a modem, and its files are the ones named .rm. Windows Media Video began in 1999 as Microsoft's answer to it. DivX began in 1998 when Jérôme Rota pulled a Microsoft MPEG-4 codec out of Windows Media Tools because the newer Windows Media Player would not play his own portfolio, and the company built on it was sold in 2011, 2014, 2015 and 2018. Flash Video, from Macromedia in 2003, carried Sorenson Spark, then VP6, then H.264, and was what YouTube played; Adobe stopped supporting Flash Player on December 31, 2020.

Then the platforms that made them let them go. On the Mac, Apple's own page says that "macOS Mojave is the final version of macOS to be compatible with legacy QuickTime software", and macOS Catalina, in October 2019, dropped the QuickTime 7 framework and every codec that lived in it. Six months ahead of it, Final Cut Pro 10.4.6 gained a step that detects media that may be incompatible with future versions of macOS after Mojave and converts it, which is Apple telling its editors to re-encode their archives while they still could; Howard Oakley's list of what was going ran to Cinepak, DivX, Flash Video, RealVideo, several Sorensons and Windows Media Video 7, 8 and 9. On Windows, Microsoft's security advisory of December 8, 2009 answered flaws in the Indeo codec by disabling it in Internet Explorer and Windows Media Player, and the list of formats Windows' media framework supports natively today has H.264, MPEG-4, Windows Media Video 9, DV and Motion JPEG on it, and not Cinepak, Indeo, Microsoft Video 1, Sorenson or RealVideo.

None of this is wrong of them. A company is a thing that moves on. But a collection does not move on, and a collector who kept a folder of CD-ROM clips from 1994 still has it, byte for byte, on a drive that opens nothing in it.

Volunteers ​

The people who had the files wrote the players. MPlayer began in 2000 because Árpád Gereöffy could not find a Linux player he liked after XAnim stopped in 1999, and by November of that year it had merged with a player that loaded Windows codec libraries directly, so a Linux machine could play what only Windows was meant to. VideoLAN began in 1996 as a student project at École Centrale Paris and released VLC under the GPL on February 1, 2001; by January 2025 it counted more than six billion downloads. The DivX codec itself was a week's reverse engineering by two people who wanted to play a file. What these had in common was the license: every one of them was free software, which meant that when a student graduated or a maintainer tired, the next person could pick the code up, and did.

FFmpeg ​

Under all of them, from December 2000, is FFmpeg. Fabrice Bellard started it that year, Michael Niedermayer led it from 2004 to 2015, and it is the library of decoders every free player reaches for, with more than a hundred codecs in it. The project's own description of its reach is a boast it can back: "It supports the most obscure ancient formats up to the cutting edge." Its table of video codecs has a row for every product above: Cinepak, Indeo 2 through 5, Microsoft Video 1, Sorenson 1 and 3, RealVideo 1 through 4, Windows Media Video 7 through 9, Sorenson Spark and VP6, and the Microsoft MPEG-4 that became DivX. Each of those rows is a decoder volunteers wrote and keep.

The license is where the story turns. FFmpeg is under the Lesser GPL, version 2.1 or later, with optional parts under the GPL, so a program that is not free may carry it, and the largest do: Chromium keeps its own copy of FFmpeg, and Google Chrome plays H.264 and AAC through it while Chromium does not. So the license is not what decides what a program plays. The decision is whether to carry the library whole, every decoder and every demuxer, or to switch on the short modern list a market wants. A free player carries it whole, because it exists for the files, and that is the choice Fuji makes.

Fuji reaches FFmpeg through mpv, a player begun in 2012 from the MPlayer line, which in June 2015 began moving most of its source from the GPL to the Lesser GPL so that other programs could embed it. Its library, libmpv, is what draws Fuji's video.

Provenance ​

A library that plays whatever it is handed is also the largest piece of someone else's code inside Fuji, and a collector who trusts Fuji with a drive is trusting that library to be what it says it is. So Fuji builds it rather than downloads it. One recipe, kept in the repository, names every source, each a tagged release fetched from its own project and checked against a hash written in the recipe before it is unpacked:

python
def fetch(name, url, sha):
	sources.append({'name': name, 'url': url, 'sha256': sha})
	file = src / url.rsplit('/', 1)[1]
	if (src / name).is_dir(): return
	say(f'== fetching {name}')
	run(['curl', '-fsSL', '--retry', '3', '-o', file, url])
	if sha256(file) != sha: sys.exit(f'{file} does not match the hash written in build.py')
	run(['tar', '-xf', file, '-C', src])

These are the sources, as the recipe names them on 2026-10-15. A tarball is checked by its SHA-256, and a project that publishes no tarball with its parts inside is cloned at a tag and checked by the commit.

LibraryVersionFromChecked against
zlib1.3.2github.com/madler/zlibd7a0654783a4da529d1bb793b7ad9c3318020af77667bcae35f95d0e42a792f3
FreeType2.15.0download-mirror.savannah.gnu.org93cd47eb719c325107f2d3cf087d06299e944c3b48a40b55537302304dea1dd5
FriBidi1.0.17github.com/fribidi/fribidi6949dcde27d41cebad1fd741fcafc36d55a1020d2d872d4a6eb3914caabbada2
HarfBuzz14.6.0github.com/harfbuzz/harfbuzzd07a007327277708a2a73ae437887cdbaf282937f6d03ca5467723e9099af586
libass0.17.5github.com/libass/libass2dca25c0e0c837ddf00b52011b3f82cac1e4ddd3ad018227806b0c2288864acc
Little CMS2.19github.com/mm2/Little-CMS49e7e134e4299733dd0eda434fa468997a28ab3d33fa397c642b03644f552216
libplacebo7.360.1code.videolan.org, clonedcommit cee9b076f2c63104ccfd497fa79c39a867293ec4
dav1d1.5.4downloads.videolan.org686616b7c69eb88d44459391ab25cac13b6647a3b288835c5784e71c1514a5c5
FFmpeg9.0.2ffmpeg.org8c3850283eb25fa026482078a04051e0be17347b09ef81a0849bec15a96e002e
mpv0.41.0github.com/mpv-player/mpvee21092a5ee427353392360929dc64645c54479aefdb5babc5cfbb5fad626209
SPIRV-Crossvulkan-sdk-1.4.363.0github.com/KhronosGroup/SPIRV-Crossf708982e88b763ef5b0394ed468fc2c3628f68cdab89f2e7a946cd628c04e721
shaderc2026.4github.com/google/shadercf06ce5bcca94e5df7f34e115743597d0ad2e13c5fe9213c67dc8c76031241947
glslanginside shadercgithub.com/KhronosGroup/glslang, clonedcommit e1b562a8bed273a02f30b59b66a5d499793cede5
SPIRV-Toolsinside shadercgithub.com/KhronosGroup/SPIRV-Tools, clonedcommit ef96ed763b43b59b33b31b362f09a02b729fa1c9
SPIRV-Headersinside shadercgithub.com/KhronosGroup/SPIRV-Headers, clonedcommit 04fd3caa1e8267e4d95c806cad901181728e1006

The first ten go into every platform's library. The last five are Windows' alone, where the picture is drawn through Direct3D, which takes its shaders in HLSL while mpv writes them in GLSL: shaderc compiles GLSL to SPIR-V, with the three libraries inside it at the commits its own DEPS file names, and SPIRV-Cross translates SPIR-V to HLSL. The Mac and Linux draw through OpenGL, which takes the shaders as mpv writes them.

They are built in order into one library with nothing in it from anywhere else: no nightly from a build farm, and no package manager's copy of the day, since Homebrew on the Mac, MSYS2 on Windows and Debian in the Linux containers provide the compiler and the build tools and not one byte of the result. The same recipe runs on all three, so every package of Fuji carries a library built from the same sources at the same versions, and the About section of Fuji's settings lists those parts and their versions, which are the recipe's numbers, mpv 0.41.0 on FFmpeg 9.0.2.

PlatformLibraryDecodes withDraws withSound through
Windowslibmpv-2.dllD3D11VA, DXVA2 and softwareDirect3D 11WASAPI
Maclibmpv.2.dylibVideoToolbox and softwareOpenGLCoreAudio
Linuxlibmpv.so.2softwareOpenGLALSA and PulseAudio

The build is reproducible: the recipe pins the time the linker would stamp into the file, zeroes the dates in its archives, keeps the Swift compiler from writing a per-run hash into the Mac's objects, and keeps local symbols out of the Mac's link, since Apple's linker writes those in whichever order its threads finish and hashes the file into the library's UUID before they are stripped, so the hash of the library names the recipe, the compilers and the folder it was built in, since mpv and FFmpeg each write their configure line into the binary, rather than the afternoon or the machine's load. On the Mac mini on 2026-10-15, two builds of every package gave the same libmpv.2.dylib, 25,717,744 bytes, SHA-256 622f89438d2fca1453b34b3f6234dcbea85e3d6e2165078f97e7b3df660085ed, and two relinks of mpv under full CPU load gave the same library again; on the Windows box on 2026-10-12, a build and two relinks of mpv gave the same libmpv-2.dll three times.

The recipe also writes down what it made, twice. Beside the library goes a record: the library's hash and size, the moment it was built, the hash of the recipe itself, the tools it was built with, and every source in the table with its hash. The command that stages a release copies that record into the package's sidecar, the small file beside every download on this site that carries the download's SHA-256, and the sidecars are committed to the repository, so the repository says of every release, in one tracked file, which library it carried and where each part of that library came from. And the same record goes into a ledger: four files at the root of the repository, library-mac.txt, library-win.txt, library-amd.txt and library-arm.txt, one per library Fuji ships, each appended by every compile and never otherwise edited. An entry is the library's line, with the moment, the size and the hash, then the recipe's hash, then the compilers, then one line per source with its hash and where it came from. Two entries with one hash on different days are the reproducibility shown rather than claimed. The command that stages a release refuses a package whose library the recipe as checked out did not build, and one whose library has no entry in the ledger, so no download carries a library the repository does not know.

The tools come from the machine rather than from the recipe, so the record names them: a library whose hash moved with nothing changed in the recipe is explained by the line that says what compiled it.

That is what free software looks like from the inside: a license that let the decoders be kept, a recipe that says exactly which copy of them Fuji carries, a record of which copy each release carried, and a program under the same license, so that the next person can keep it too.

Fuji licenses the text of this page under Creative Commons Attribution 4.0 International.