<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
      <title>2026 Week 3: Code as Cultural Heritage — CCS Working Group</title>
      <link>https://wg.criticalcodestudies.com/index.php?p=/</link>
      <pubDate>Sun, 12 Apr 2026 07:17:19 +0000</pubDate>
          <description>2026 Week 3: Code as Cultural Heritage — CCS Working Group</description>
    <language>en</language>
    <atom:link href="https://wg.criticalcodestudies.com/index.php?p=/categories/2026-week-3/feed.rss" rel="self" type="application/rss+xml"/>
    <item>
        <title>Week 3: Latin American World Model</title>
        <link>https://wg.criticalcodestudies.com/index.php?p=/discussion/213/week-3-latin-american-world-model</link>
        <pubDate>Wed, 28 Jan 2026 15:39:51 +0000</pubDate>
        <category>2026 Week 3: Code as Cultural Heritage</category>
        <dc:creator>période</dc:creator>
        <guid isPermaLink="false">213@/index.php?p=/discussions</guid>
        <description><![CDATA[<p><em>This code critique is based on a contribution to the <a rel="nofollow" href="https://wg.criticalcodestudies.com/index.php?p=/discussion/210/week-3-software-heritage-for-code-studies-a-guide-based-on-programming-historian" title="Source Code exhibit">Source Code exhibit</a>.</em></p>

<hr />

<p>Authors: H. Scolnik, L. Talavera, I. Loiseau, M. Camuyrang, J. Perrez Iturrioz, E. Rocchi, C. Ruiz<br />
Date: 1976<br />
Language: Fortran</p>

<hr />

<h2>Source code</h2>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/g8/hiyoc2duolpm.png" alt="Excerpt from the Latin American World Model" title="" /></p>

<hr />

<h2>Context</h2>

<p>Even in the early years of computer science, the idea that the world could be understood as a system that could be simulated by computers was already popular. Early digital simulations promised to understand and predict global trends acting as warning devices without offering ways to avoid their predicted futures. The LAWM (Latin America World Model), developed by a multidisciplinary team around Argentinian geologist Amílcar Herrera, deliberately tried to steer an early global community of world modelers toward solutions, not risks.With a focus on basic needs – like adequate housing, education or protein intake –, the model indicated a path towards optimal allocation of labor and capital to ensure the longest possible life expectancy. Their model showed that a global catastrophe was not imminent; with the use of optimization and planning, there were even ways for the less wealthy regions of the world to reach a standard of living as in the US or European countries.</p>

<p>The code is of double interest: it exemplifies both the grammar and lexicon of one of the earliest and most widely used high-level programming languages, Fortran, and the way computer programs are never neutral, but instead embody particular political visions.</p>

<hr />

<h2>Resources</h2>

<ul>
<li><a rel="nofollow" href="https://www.sciencedirect.com/science/article/abs/pii/S0016328700000550">The Latin American World Model</a> (a.k.a. the Bariloche model): three decades ago, a personal reflection by one of the authors.</li>
<li><a rel="nofollow" href="https://www.researchgate.net/publication/37876330_Catastrophe_or_new_society_A_Latin_American_world_model">Catastrophe or New Society?: A Latin American World Model</a>, the original publication around the LAWM</li>
<li><a rel="nofollow" href="https://mitpress.mit.edu/9780262053198/simpolitics/">SimPolitics: America’s Quest to Solve Politics with Computers</a>, upcoming book by Fenwick McKelvey at MIT Press</li>
</ul>

<hr />

<h2>Questions</h2>

<ul>
<li>What role does Fortran (a Formula Translation language) play in translating concepts that are themselves beyond a formula (i.e. "basic needs")? As a response to the World3 model focusing on material realities, the LAWM proposes to focus on social and political factors: are one of these domains more amenable than the other to be translated into code "productively"?</li>
<li>Is there some sort of isomorphism between the written code/running software relation and the model/simulation relation? Or is written code already a simulation of an existing conceptual model?</li>
<li>How does the LAMW compare to World3 model, and what does that tell us of code's institutional ties in order to perform, not only mechanically, but also politically?</li>
</ul>

<hr />

<h2>Credits</h2>

<p>This source code excerpts has been contributed by Fenwick McKelvey and Markus E. Ramsauer.</p>

<p>Fenwick McKelvey is an Associate Professor in Information and Communication Technology Policy in the Department of Communication Studies at Concordia University. He leads “Machine Agencies” at the Milieux Institute. He studies digital politics and policy.</p>

<p>Markus E. Ramsauer is a PhD Candidate in the History of Science at the University of Vienna. Ramsauer investigates origins of global simulation models in relation to the Global South.</p>
]]>
        </description>
    </item>
    <item>
        <title>Rivulet: calligraphic code inspired by natural language</title>
        <link>https://wg.criticalcodestudies.com/index.php?p=/discussion/212/rivulet-calligraphic-code-inspired-by-natural-language</link>
        <pubDate>Tue, 27 Jan 2026 22:39:18 +0000</pubDate>
        <category>2026 Week 3: Code as Cultural Heritage</category>
        <dc:creator>Temkin</dc:creator>
        <guid isPermaLink="false">212@/index.php?p=/discussions</guid>
        <description><![CDATA[<p>In Rivulet, code is inscribed in strands, box-drawing characters that combine into continuous lines. Strands are organized into glyphs, units of code that resemble paragraphs more than blocks of code. They are usually tightly packed; the aesthetic of Rivulet is inspired by the satisfying compactness of mazes, Anni Albers's Meanders series, and space-filling algorithms. Semantically, a glyph is a set of strands that execute together. But they are also syntactic units, in that not all strands can appear together in the same glyph because they might block each other in how they flow through the glyph's space.</p>

<p>Rivulet is a language inspired by natural language; it has an internal logic, a coherence, but with no rational explanation. Rivulet relates to the Week 3 discussions, as it's part of the <a rel="nofollow" href="https://wg.criticalcodestudies.com/index.php?p=/discussion/209/week-3-code-as-exhibit" title="Source Code Exhbition">Source Code Exhbition</a>, but it's also in Forty-Four Esolangs, <a rel="nofollow" href="https://wg.criticalcodestudies.com/index.php?p=/discussion/189/book-forty-four-esolangs-by-daniel-temkin" title="discussed in Week 1">discussed in Week 1</a>.</p>

<p>It takes a while to understand the full syntax of Rivulet, but I want to focus here on only two aspects: first, the way that line numbers work in the language, and second in how "zero strands" are written.</p>

<p>Here is a single Rivulet glyph:</p>

<pre><code> 1 ╵──╮───╮╶╮ 
 2  ╰─╯╰──╯ │  
 3     ──╮  │  
 5       ╰──╯ ╷
</code></pre>

<p>And here is pseudo-code for the glyph, which can be generated by running the interpreter with the <code>-v</code> for verbose option:</p>

<pre><code>list2[0] += 0
list2[1] += 1
list1[0] += -16
</code></pre>

<p>The glyph begins and ends with glyph markers: <code>╵</code> and <code>╷</code>. Each strand begins with a hook pointing up or left, which marks its beginning (strands without hooks or with hooks pointing in other directions are used for other types of strands not considered here). Each unit it moves to the right adds the value of that line number, and each movement to the left subtracts it. The line number it appears on marks a list element it is writing to; by default, it is an add-assignment (+=). First from the left is the strand beginning on line 2, which gives us <code>list2[0] += 0</code>. This is called a zero strand, and it has no effect on that list element, but is there so that the second strand beginning on line 2 can write to list element 1, for <code>list2[1] += 1</code>. Finally, it reads the third strand (reading from left to right), which assigns to <code>list1</code>. It moves to the left twice on line 5, subtracting 10, and then twice on line 3, giving us -16.</p>

<p>You may notice there is no line 4. In Rivulet, line numbers are successive primes. Line numbers don't need to appear in the code, but can be included as reference, as the Rivulet interpreter ignores all non-box-drawing characters. They also reset with each glyph. Why prime numbers? The compactness of the glyphs need numbers that grow faster than a linear progression, and less than exponential growth, so that one can represent large numbers without making the glyphs very large. Prime numbers hint at a deeper meaning, but this is primarily an aesthetic decision. I imagined what a programming language might look like had it developed like a natural language, with conventions that have an internal consistency, but no rational explanation.</p>

<p>The zero strand is needed often, to allow writing to list elements beyond zero. There are many ways to write them. Here is a set of zero cells writing to <code>list1</code>. Each of these is equivalent:</p>

<pre><code> 1 ╵╰──╮╰───╮╶╮
 2    ─╯    │ │
 3         ─╯ ╰──╮
 5          ╭────╯
 7          ╰──  ╷
</code></pre>

<p>Running <code>-v</code> gives us this pseudo-code:</p>

<pre><code>list1[0] += 0
list1[1] += 0
list1[2] += 0
</code></pre>

<p>But more specifically, the flow is:</p>

<pre><code>list1[0] += (2*1) + (-1*2)
list1[1] += (3*1) + (-1*3)
list1[2] += (2*3) + (-5*5) + (-3*7)
</code></pre>

<p>Writing to <code>list2</code>, these are all zero strands:</p>

<pre><code> 1 ╵╭─╮        ──╮
 2  │╶╯╶╮╰────╮╰─╯╶╮
 3  ╰──╮╰─╮ ╭─╯ ╭──╯   
 5    ─╯  │─╯   ╰────╮
 7    ╭───╯        ──╯
11    ╰────╮
13       ──╯         ╷

list2[0] += (-1*1) + (2*3) + (-1*5) 
list2[1] += (1*3) + (-3*7) + (4*11) + (-2*13)
list2[2] += (4*2) + (-1*3) + (-1*5)
list2[3] += (1*2) + (-2*1)
list2[4] += (-2*3) + (4*5) + (-2*7)
</code></pre>

<p>Any one of these can be used as a zero strand for <code>list2</code>. We would draw a strand -- one of these or another -- which gets out of the way of other strands we want to appear in the same glyph. Writing Rivulet is often a re-working of existing strands in order to add others to the glyph.</p>

<p>The Rivulet interpreter also includes an svg generator, which draws the strands as complete lines and colors them so that related strands are the same color (we have no strands that refer to each other here, since we are only dealing with the simplest kind of strand, that used for add-assignment):<br />
<img src="https://wg.criticalcodestudies.com/uploads/editor/cs/we6oetubgbi6.png" alt="" title="" /></p>

<p>And here is a complete Fibonacci program, using the same algorithm, the same "code," represented with strands that move differently through the space (and generated with different color themes):</p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/ob/oq1ygot5q7t0.png" alt="" title="" /></p>

<p>More on Rivulet</p>

<ul>
<li><a rel="nofollow" href="https://github.com/rottytooth/Rivulet" title="Rivulet interpreter">Rivulet interpreter</a> (github)</li>
<li><a rel="nofollow" href="https://github.com/rottytooth/Rivulet/blob/main/tutorial_fibonacci.md" title="The original tutorial">The original tutorial</a></li>
<li><a rel="nofollow" href="https://observablehq.com/@jwolondon/rivulet-intro" title="Intro to Rivulet">Intro to Rivulet</a> by Jo Wood</li>
<li><a rel="nofollow" href="https://github.com/rottytooth/Rivulet/blob/main/syntax.md" title="Syntax reference">Syntax reference</a></li>
<li><a rel="nofollow" href="https://news.ycombinator.com/item?id=43492652" title="Hacker News discussion">Hacker News discussion</a></li>
</ul>
]]>
        </description>
    </item>
    <item>
        <title>Week 3: Software Heritage for Code Studies: A Guide Based on Programming Historian</title>
        <link>https://wg.criticalcodestudies.com/index.php?p=/discussion/210/week-3-software-heritage-for-code-studies-a-guide-based-on-programming-historian</link>
        <pubDate>Mon, 26 Jan 2026 08:04:48 +0000</pubDate>
        <category>2026 Week 3: Code as Cultural Heritage</category>
        <dc:creator>Titaÿna</dc:creator>
        <guid isPermaLink="false">210@/index.php?p=/discussions</guid>
        <description><![CDATA[<p><em>Posted by Titaÿna Kauffmann, C²DH, University of Luxembourg</em></p>

<hr />

<p>For those who want to work with Software Heritage, the best practical guide available is a 2024 Programming Historian tutorial by Sabrina Granger, Baptiste Mélès, and Frédéric Santos: <a rel="nofollow" href="https://programminghistorian.org/fr/lecons/preserver-logiciels-recherche">"Préserver et rendre identifiables les logiciels de recherche avec Software Heritage"</a>. One problem: it's only in French. This post summarizes its key points for non-French speakers, with examples from the exhibition.</p>

<p>A note on the name: Software Heritage's founding documents speak of preserving "the technical and cultural heritage of humanity." In French, <em>heritage</em> is <em>patrimoine</em> — a term that carries connotations of inheritance, of what we receive from and pass to generations. It frames code not just as functional artifact but as something worth transmitting.</p>

<p>This framing has institutional weight. In 2003, UNESCO's <a rel="nofollow" href="https://www.unesco.org/en/legal-affairs/charter-preservation-digital-heritage">Charter on the Preservation of Digital Heritage</a> explicitly listed software among the "born-digital" materials requiring preservation — alongside texts, databases, images, and web pages. The Charter notes that "where resources are 'born digital', there is no other format but the digital object." Unlike a manuscript that can be photographed or a painting that can be reproduced, source code has no analogue original to fall back on. If the digital form is lost, there is nothing else.</p>

<p>In 2016, UNESCO and Inria <a rel="nofollow" href="https://www.unesco.org/en/articles/agreement-software-preservation-signed-unesco">signed an agreement</a> specifically recognizing Software Heritage's mission. At the signing, François Hollande captured the stakes: "What is expected of us is to be able to control, to be able to transmit, is to be able to put these technologies, this information, these elements that become of the heritage at the service of humanity." The verb <em>transmit</em> — <em>transmettre</em> — is key. Heritage is not just what we keep but what we pass on.</p>

<hr />

<h2>What is Software Heritage?</h2>

<p>Software Heritage is a nonprofit initiative launched in 2016 by Inria (French National Institute for Research in Digital Science and Technology) with UNESCO's support. Its mission: collect, preserve, and share all publicly available source code. The archive currently contains over 18 billion unique source files from more than 300 million projects.</p>

<p>The archive addresses a real problem. As the tutorial authors note, URLs in academic publications have a lifespan somewhere between that of a hamster (2 years) and a penguin (15-20 years). Personal websites disappear when people change jobs or retire. Institutional pages break when organizations rename themselves. Even major forges offer no guarantee — remember Google Code?</p>

<p>Software Heritage provides a stable alternative: code archived once remains accessible, with permanent identifiers that won't break.</p>

<hr />

<h2>Why Source Code (Not Executables)?</h2>

<p>The tutorial emphasizes a key distinction. Software exists in three forms: source code (human-readable instructions), compilation (the translation process), and executable (machine-readable binary).</p>

<p>Software Heritage archives only source code, not executables. The reason is practical: compilation is largely a one-way process. When source code becomes a binary, comments, variable names, and documentation are stripped away. What remains runs on machines but can't be read or reconstructed by humans. Archiving the executable would preserve the program's function; archiving the source preserves how its creators thought.</p>

<p>The tutorial points to the Apollo guidance computer code as an example. The source contains comments like explanations of why certain routines exist. These are stripped away entirely in the executable. You can explore this yourself in Software Heritage by searching for the repository URL <a href="https://github.com/virtualagc/virtualagc" rel="nofollow">https://github.com/virtualagc/virtualagc</a>.</p>

<hr />

<h2>How Software Heritage Archives Code</h2>

<p>The tutorial describes two archiving methods:</p>

<p><strong>Automatic harvesting</strong>: Software Heritage regularly crawls major forges (GitHub, GitLab, Bitbucket, etc.) and package archives (npm, PyPI, etc.). Most public open-source code is already archived.</p>

<p><strong>Manual archiving</strong>: Anyone can trigger archiving of a public repository using the <a rel="nofollow" href="https://archive.softwareheritage.org/save/">"Save Code Now"</a> feature. You don't need to be the code's author — you just need the repository URL.</p>

<p>Beyond the code itself, Software Heritage preserves development histories. Every commit is archived with its author, timestamp, and message. This matters for understanding how software evolved. The tutorial cites a 2008 Linux kernel commit by Matthew Wilcox explaining why he simplified a section of code — that reasoning, captured in the commit message, helps future readers understand the codebase.</p>

<p>Gabriel Alcaras's exhibition panel on git-stash makes similar use of commit history. Nanako Shiraishi's original commit from June 30, 2007 includes her explanation: "When my boss has something to show me and I have to update, for some reason I am always in the middle of doing something else." The timestamp tells us it was a Saturday afternoon in Japan. The commit message tells us she wrote it to solve a personal workflow problem. Software Heritage preserves all of this.</p>

<hr />

<h2>Finding Code in the Archive</h2>

<p>The tutorial outlines several search strategies depending on what you know:</p>

<p><strong>If you know the project name</strong>: Search for the repository in a search engine, find its URL (e.g., <a href="https://github.com/torvalds/linux" rel="nofollow">https://github.com/torvalds/linux</a>), then enter that URL in <a rel="nofollow" href="https://archive.softwareheritage.org/browse/search/">Software Heritage's search</a>.</p>

<p><strong>If you have a code snippet</strong>: Search for the exact text in a search engine to find which repository contains it, then locate that repository in Software Heritage.</p>

<p><strong>If you have a file</strong>: Drag and drop it onto the Software Heritage homepage. The system will tell you if identical content exists in the archive.</p>

<p><strong>If you have a SWHID</strong>: Paste it directly into the search bar.</p>

<hr />

<h2>The SWHID Identifier System</h2>

<p>This is the core of the tutorial's practical guidance. SWHIDs (SoftWare Hash Identifiers) are permanent identifiers designed specifically for software. Unlike DOIs, which are assigned by a registry, SWHIDs are <em>intrinsic</em> — computed directly from the content through cryptographic hashing. The identifier is tied to the exact content: change one character, and the SWHID changes.</p>

<p>As of April 2025, SWHID is an ISO standard (ISO/IEC 18670).</p>

<p>There are five types, suited to different needs:</p>

<table>
<thead>
<tr>
  <th>Type</th>
  <th>What it identifies</th>
  <th>When to use</th>
</tr>
</thead>
<tbody>
<tr>
  <td><code>snapshot</code></td>
  <td>A complete state of a repository at harvest time</td>
  <td>Citing a project's overall state</td>
</tr>
<tr>
  <td><code>release</code></td>
  <td>A tagged version</td>
  <td>Citing a specific software release</td>
</tr>
<tr>
  <td><code>revision</code></td>
  <td>A single commit</td>
  <td>Citing a specific change or commit message</td>
</tr>
<tr>
  <td><code>directory</code></td>
  <td>A folder of files at a point in time</td>
  <td>Citing a project's source tree</td>
</tr>
<tr>
  <td><code>content</code></td>
  <td>A specific file (can include line numbers)</td>
  <td>Citing exact code you're analyzing</td>
</tr>
</tbody>
</table>

<p>The tutorial gives concrete examples. If you're a researcher who used version 1.1.1 of a specific R package, you'd want a release SWHID. If you're writing about a specific algorithm implementation, you'd want a content SWHID pointing to that file, possibly with line numbers.</p>

<hr />

<h2>Obtaining a SWHID: Step by Step</h2>

<p>The tutorial walks through the process:</p>

<ol>
<li>Navigate to the code in Software Heritage's archive</li>
<li>For files, you can select specific lines by clicking line numbers (shift-click for ranges)</li>
<li>Open the "Permalinks" tab on the right side of the interface</li>
<li>Choose the appropriate identifier type</li>
<li>Optionally check "Add contextual information" to include qualifiers (origin repository, path, etc.)</li>
<li>Copy the SWHID</li>
</ol>

<p>The contextual qualifiers are useful for readers. A bare SWHID like <code>swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2</code> points to content but doesn't explain where it came from. A qualified SWHID includes the origin repository, the snapshot, and the file path.</p>

<hr />

<h2>When to Use Which Identifier</h2>

<p>The tutorial distinguishes between two main use cases:</p>

<p><strong>For citation</strong> (attributing intellectual credit, pointing readers to a version): Use DOI or HAL-ID if available, which link to descriptive metadata. These are like an identity card — they tell you <em>about</em> the software.</p>

<p><strong>For technical verification</strong> (ensuring reproducibility, examining specific code): Use SWHID, which points directly to content. These are like fingerprints — they identify the exact artifact.</p>

<p>The two are complementary. A HAL deposit might include a SWHID that points to the precise archived code.</p>

<hr />

<h2>Adding Metadata with CodeMeta</h2>

<p>The tutorial's final section covers CodeMeta, a standard for software metadata. A codemeta.json file in a repository provides structured information (authors, license, dependencies, related publications) in a format that bridges different platforms' metadata vocabularies.</p>

<p>The tutorial links to <a rel="nofollow" href="https://codemeta.github.io/codemeta-generator/">CodeMeta Generator</a>, a web tool for creating these files without writing JSON manually.</p>

<hr />

<h2>Connecting to the Exhibition</h2>

<p>Several exhibition panels feature code accessible through Software Heritage:</p>

<p><strong>Stockfish</strong> (Mathieu Acher's panel): <a rel="nofollow" href="https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://github.com/official-stockfish/Stockfish">Browse the repository</a>, navigate to src/position.cpp, find the line <code>PRNG rng(1070372);</code></p>

<p><strong>Git-stash</strong> (Gabriel Alcaras's panel): The original commit can be accessed directly via its SWHID: <a rel="nofollow" href="https://archive.softwareheritage.org/swh:1:rev:f2c66ed196d1d1410d014e4ee3e2b585936101f5">swh:1:rev:f2c66ed196d1d1410d014e4ee3e2b585936101f5</a></p>

<p><strong>Wenyan</strong> (Baptiste Mélès's panel): <a rel="nofollow" href="https://archive.softwareheritage.org/browse/origin/directory/?origin_url=https://github.com/wenyan-lang/wenyan">Browse the repository</a></p>

<p>Other panels feature code that required archival work outside Software Heritage — ELIZA's original MAD-SLIP source was transcribed from MIT archive printouts, the Latin American World Model survives as printed code sheets. This distinction matters for thinking about what gets automatically preserved and what requires deliberate recovery.</p>

<hr />

<h2>Resources</h2>

<ul>
<li>Software Heritage archive: <a rel="nofollow" href="https://archive.softwareheritage.org/">archive.softwareheritage.org</a></li>
<li>Save Code Now: <a rel="nofollow" href="https://archive.softwareheritage.org/save/">archive.softwareheritage.org/save</a></li>
<li>SWHID documentation: <a rel="nofollow" href="https://docs.softwareheritage.org/">docs.softwareheritage.org</a></li>
<li>Full French tutorial: <a rel="nofollow" href="https://programminghistorian.org/fr/lecons/preserver-logiciels-recherche">programminghistorian.org/fr/lecons/preserver-logiciels-recherche</a></li>
<li>Exhibition website: <a rel="nofollow" href="http://www.sourcecode-exhibition.softwareheritage.org/">www.sourcecode-exhibition.softwareheritage.org</a></li>
</ul>
]]>
        </description>
    </item>
    <item>
        <title>Week 3: Code as Exhibit</title>
        <link>https://wg.criticalcodestudies.com/index.php?p=/discussion/209/week-3-code-as-exhibit</link>
        <pubDate>Mon, 26 Jan 2026 07:50:52 +0000</pubDate>
        <category>2026 Week 3: Code as Cultural Heritage</category>
        <dc:creator>Titaÿna</dc:creator>
        <guid isPermaLink="false">209@/index.php?p=/discussions</guid>
        <description><![CDATA[<p><em>Titaÿna Kauffmann, C²DH — Luxembourg Centre for Contemporary and Digital History, University of Luxembourg (Exhibition Organizing Committee)</em></p>

<p><em>Pierre Depaz, Postdoctoral Researcher, Universität Basel (Exhibition Scientific Committee)</em></p>

<hr />

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/1a/g0n6bddqd54o.png" alt="" title="" /></p>

<p>On January 29, 2026, Software Heritage and Inria will open a new exhibition at UNESCO Headquarters in Paris. The "Source Code Exhibition" presents fifteen code examples spanning seventy-five years of computing history. Each is interpreted by a different contributor—historians, artists, developers, activists. The exhibition takes an unusual approach: it treats source code as the central exhibit, not merely as contextual material for hardware or interfaces.</p>

<p>We are part of the organizing team, and we'd like to bring the project to this community: not as a finished argument, but as an invitation to critique, extend, and challenge the choices we've made.</p>

<hr />

<h2>Software Heritage: Preservation as Foundation</h2>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/kv/a6iee5vwjlz7.png" alt="" title="" /></p>

<p>This exhibition grows from the work of Software Heritage, a nonprofit launched in 2016 with an ambitious mission: collect, preserve, and share all publicly available source code. Their archive now holds over 18 billion unique source files from more than 300 million projects—a Library of Alexandria for software.</p>

<p>But Software Heritage's vision goes beyond storage. As they put it: "Software in source code form is produced by humans and is understandable by them; as such it is an important part of our heritage that we should not lose." Code carries our technical and scientific knowledge. It mediates access to all our digital information—lose the software, and we lose the capacity to interpret what we've created. Software Heritage recognizes that preserving code is essential for preserving cultural heritage itself.</p>

<p>The exhibition marks Software Heritage's tenth anniversary. It experiments with what becomes possible when preservation meets interpretation. An archive makes code available; an exhibition asks what it means.</p>

<hr />

<h2>The Three Axes</h2>

<p>The exhibition organizes its fifteen panels around three overlapping axes:</p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/wb/vc8jv7zzylyt.jpg" alt="" title="" /></p>

<p><strong>Source code as historical testimony</strong> — how recovered code offers windows into technical and social transformations, from the first programming textbook to ELIZA to XMODEM.</p>

<p><strong>Source code as mirror of society</strong> — how code reflects and shapes the cultures that produce it, from a Saturday afternoon git commit to RSA encryption on a protest T-shirt.</p>

<p><strong>Source code as cultural artifact</strong> — how code functions as an expressive, aesthetic form, from the thirteen-character fork bomb to programming in classical Chinese.</p>

<p>These aren't rigid categories; most panels resonate across multiple axes.</p>

<hr />

<h2>The Exhibition Online</h2>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/4i/1cpy23gywbb4.png" alt="" title="" /></p>

<p>The physical exhibition space at UNESCO limited us to fifteen panels. We received fifty-one proposals in response to our call for contributions. Selecting among them was difficult. We sought diversity—in time periods, programming languages, geographic origins, and contributors' relationships to code. The final selection reflects those priorities, but also inevitable compromises.</p>

<p>Our hope is that the online version will offer more flexibility. All panel texts, code examples, and contributor bios are available under a Creative Commons license. We aim at revisiting some of the initial proposals and welcome new contributions in the future. We encourage you to spend time with the materials before diving into discussion.</p>

<p><strong>Visit:</strong> <a rel="nofollow" href="http://www.sourcecode-exhibition.softwareheritage.org/">www.sourcecode-exhibition.softwareheritage.org</a></p>

<hr />

<h2>Starting the Conversation</h2>

<p>Over the coming days, we'll post in-depth code critiques of exhibition panels for discussion, alongside a practical introduction to using Software Heritage as a research tool. But we wanted to open this week by inviting reactions to the exhibition as a whole—its premise, its choices, its gaps.</p>

<p>For instance: how do we best communicate the cultural significance of source code to a broader audience? Many visitors at UNESCO won't have written a line of code. What works, and what gets lost in translation? To paraphrase Benjamin, what is the exhibition value of source code?</p>

<p>Are the three axes we chose—historical testimony, mirror of society, cultural artifact—the right categories? Do they help or hinder interpretation? Are there any other categories that might seem relevant?</p>

<p>And more broadly: what can code learn from existing heritage practices, and what new heritage practices might code require?</p>

<p>We've also posted a companion thread on Software Heritage as a resource for code studies—how to navigate the archive, what's possible with their tools and APIs, and how researchers in this community might use it in their own work.</p>

<p>We look forward to hearing your thoughts—and to exploring the exhibition together.</p>
]]>
        </description>
    </item>
    <item>
        <title>Book: Output by Lillian-Yvonne Bertram and Nick Montfort</title>
        <link>https://wg.criticalcodestudies.com/index.php?p=/discussion/215/book-output-by-lillian-yvonne-bertram-and-nick-montfort</link>
        <pubDate>Wed, 28 Jan 2026 22:40:13 +0000</pubDate>
        <category>2026 Week 3: Code as Cultural Heritage</category>
        <dc:creator>jeremydouglass</dc:creator>
        <guid isPermaLink="false">215@/index.php?p=/discussions</guid>
        <description><![CDATA[<p>Our featured book discussion is <em><a rel="nofollow" href="https://mitpress.mit.edu/9780262549813/output/">Output: An Anthology of Computer-Generated Text, 1953–2023</a></em>, edited by Lillian-Yvonne Bertram, Nick Montfort. The book is co-pubished by The MIT Press and Counterpath Press, and available in <a rel="nofollow" href="https://mitpress.mit.edu/9780262549813/output/">paperback/ebook</a>.</p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/68/ym1b9yem7eio.png" alt="" title="" /></p>

<p>From the MIT Press:</p>

<blockquote><div>
  <p>An anthology of seven decades of English-language outputs from computer generation systems, chronicling the vast history of machine-written texts created long before ChatGPT.</p>
  
  <p>The discussion of computer-generated text has recently reached a fever pitch but largely omits the long history of work in this area—text generation, as it happens, was not invented yesterday in Silicon Valley. This anthology, <em>Output</em>, thoughtfully selected, introduced, and edited by Lillian-Yvonne Bertram and Nick Montfort, aims to correct that omission by gathering seven decades of English-language texts produced by generation systems and software. The outputs span many different types of creative writing and include text generated by research systems, along with reports and utilitarian texts, representing many general advances and experiments in text generation.</p>
  
  <p><em>Output</em> is first and foremost a collection of outputs to be encountered by readers. In addition to an overall introduction, each of the excerpts is introduced individually and organized by fine-grain genre including conversations, humor, letters, poetry, prose, and sentences. Bibliographic references allow readers to learn more about outputs and systems that intrigue them. Although Output could serve as a reference book, it is designed to be readable and to be read. Purposefully excluded are human–computer collaborations that were conceptually defined but not implemented as a computer system.</p>
</div></blockquote>

<p>This book is part of the new <a rel="nofollow" href="https://mitpress.mit.edu/series/hardcopy/">Hardcopy series</a> edited by Nick Montfort and Mary Flanagan, which "features computational artworks that manifest themselves in print" and places itself in "the traditions of artists’ books, bookworks, and publishing as an artistic practice." We have <a rel="nofollow" href="https://wg.criticalcodestudies.com/index.php?p=/discussion/189/book-forty-four-esolangs-by-daniel-temkin">previously discussed</a> Daniel Temkin's <a rel="nofollow" href="https://mitpress.mit.edu/9780262553087/forty-four-esolangs/">Forty-Four Esolangs</a> from the same series.</p>

<blockquote><div>
  <p>Hardcopy features computational artworks that manifest themselves in print. Works in the series engage with and arise from computation in culturally important ways. The series is a space for (among other things) books that are computer generated by artists and poets, whether they include text, image, or both; print works based around glitched media formats; ones that feature type-in programs with sample output; and ones arising from interaction with automated agents.</p>
  
  <p>The publications presented in Hardcopy are themselves the primary artworks. A Hardcopy book is a literary art project, not a work of literary studies, for example. Rather than being catalogs for shows, publications in the series are more aligned with the traditions of artists’ books, bookworks, and publishing as an artistic practice. By presenting innovative and compelling projects, we aim to reveal the diversity of the computational arts —found in algorithmic and software art, electronic literature, digital gaming, the demoscene, livecoding, and generative systems—while also showing connections between historical, current, and emerging practices.</p>
</div></blockquote>

<p>The <em>Output</em> anthology contains a provisional timeline of works (1953-2023) as an appendix, but it is organized instead by 15 topical sections arranged alphabetically: <em>Conversations</em>, <em>Humor</em>, <em>Letters</em>, <em>Novels</em>, <em>Performance</em>, <em>Poetry</em>, <em>Prose</em>, <em>Reporting</em>, <em>Rhetoric Oratory and Lectures</em>, <em>Sentences</em>, <em>Storytelling</em>, <em>Text and Image</em>, <em>Tweets and Microblogging</em>, and <em>Words</em>. One may browse these sections from the table of contents, look up a work by title in the index, or browse years in the timeline and look up the works listed there by their corresponding section heading.</p>

<p>In their introduction, Bertram and Montfort emphasize their principled methods of selection and engagement which eschew creating their own software-based generations in favor of previously available outputs:</p>

<blockquote><div>
  <p>In selecting the outputs that follow, although ones of this sort are omitted, we have promiscuously included text from research systems, natural-language generation products and services, and artistic and literary programs. We did not reimplement historical generators to produce the outputs in this book or even download and run programs. The texts here were all previously published in print or online or, in a few cases, were obtained simply by visiting a Web page. Whenever possible, we used the outputs that natural language researchers and author/programmers themselves presented to showcase their work.</p>
</div></blockquote>

<p>For some key selected works appearing in <em>Output</em>, see also this writeup from The MIT Press Reader:</p>

<ul>
<li>"<a rel="nofollow" href="https://thereader.mitpress.mit.edu/the-living-history-and-surprising-diversity-of-computer-generated-text/">The Living History and Surprising Diversity of Computer-Generated Text</a>: selections from 'Output,' an anthology showcasing seven decades of English-language machine-generated texts, long predating ChatGPT."</li>
</ul>

<p>It includes:</p>

<ul>
<li>Random Generation of English Sentences (Victor H. Yngve, 1961)</li>
<li>Fairy Tale Generator (Joseph E. Grimes, 1963)</li>
<li>The House of Dust (Alison Knowles, 1967)</li>
<li>Articulations (Allison Parrish, 2018)</li>
<li>A Noise Such as a Man Might Make (Milton Läufer, 2018)</li>
<li>Arria NLG (Arria NLG plc, 2019)</li>
</ul>

<p>Especially relevant to Critical Code Studies is the editorial emphasis on next steps and "extending your engagement" after reading outputs -- in ways that may be quite familiar to participants in this CCSWG:</p>

<blockquote><div>
  <p>We chose to compile this English-language anthology because we knew of no resource like this one. Extending your engagement with the outputs here could be as easy as following a link, either to a working system online or through a bibliographic entry where a paper or article is available. There are already several excellent scholarly articles and books, and even some more popular writing, relevant to the topic of text generation overall. Pursuing those is a great next step for people fascinated with these outputs. Another way to deepen your involvement with text generators is to make one.</p>
</div></blockquote>
]]>
        </description>
    </item>
    <item>
        <title>Three Axes, Three Examples — What Escapes the Frame (Code Critique)</title>
        <link>https://wg.criticalcodestudies.com/index.php?p=/discussion/222/three-axes-three-examples-what-escapes-the-frame-code-critique</link>
        <pubDate>Mon, 02 Feb 2026 13:36:55 +0000</pubDate>
        <category>2026 Week 3: Code as Cultural Heritage</category>
        <dc:creator>Titaÿna</dc:creator>
        <guid isPermaLink="false">222@/index.php?p=/discussions</guid>
        <description><![CDATA[<p>The Source Code Exhibition at UNESCO, which opened on January 28, organized its fifteen panels around three thematic axes: Source Code as Historical Testimony, Source Code as Mirror of Society, and Source Code as Cultural Artifact. These categories structured both the call for proposals and the final curation. But as <a rel="nofollow" href="https://wg.criticalcodestudies.com/index.php?p=/profile/jeremydouglass">@jeremydouglass</a> observed in an earlier thread, the three axes present overlapping "value propositions" that may be harder to disentangle than they first appear:</p>

<blockquote><div>
  <p>"The hard thing for me about these keywords is that at a deeper level all three concepts are historical, all are societal, and all are cultural. [...] Or, to be disciplinary, we might articulate the exhibition value of Code for Historians, Code for Sociologists, and Code for Artists a bit differently because each discipline constitutes knowledge a bit differently."</p>
</div></blockquote>

<p>Jeremy's observation sent me back to the <a rel="nofollow" href="https://cnam-my.sharepoint.com/personal/mathilde_fichen_lecnam_net/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fmathilde%5Ffichen%5Flecnam%5Fnet%2FDocuments%2FSource%20Code%20Exhibiti%2FSource%20Code%20Exhibit%20%2D%20Call%20for%20proposal%2Epdf&amp;parent=%2Fpersonal%2Fmathilde%5Ffichen%5Flecnam%5Fnet%2FDocuments%2FSource%20Code%20Exhibiti&amp;ga=1" title="call-for-proposals document">call-for-proposals document</a>, where three example submissions were provided to help potential contributors understand what we were looking for. Each example was deliberately chosen because it mapped cleanly onto one axis: Prolog for historical testimony, Black Perl for cultural artifact, the Brexit protest sign for mirror of society. This was intentional — the goal was to show the diversity of code's place in society and to signal that contributions from varied backgrounds were welcome. We were grateful that this approach worked; the examples helped potential contributors from different fields feel that their code belonged in the exhibition.</p>

<p>Now that the inauguration has passed, I want to reflect on these examples in light of what the final selection revealed. The material constraints of the UNESCO poster format (visible in the attached photograph) shaped what could be shown. Looking back at these three examples alongside the exhibited panels, what do the categories illuminate, and what do they leave in shadow?</p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/n7/qie17zuqt6ci.jpg" alt="" title="" /></p>

<hr />

<h3>EXAMPLE 1</h3>

<p><strong>Title:</strong> Prolog in Capitals — A Historical Glimpse into its First Programs<br />
<strong>Author(s):</strong> A. Colmerauer, H. Kanoui, P. Roussel, R. Pasero<br />
<strong>Language:</strong> Prolog<br />
<strong>Year:</strong> 1973<br />
<strong>Axis:</strong> Historical Testimony<br />
<strong>Commentary by:</strong> Mathilde Fichen</p>

<p>From the call-for-proposals:</p>

<blockquote><div>
  <p>"This particular program, designed to decompose a product into its factors, reveals much about the scientific, material and social context of its creation. For instance, the code is written entirely in capital letters, and variables are marked with a star symbol. These features reflect the limitations of the hardware available to the research team, who accessed a remote IBM computer in Grenoble via a teletype machine connected by telephone line—a frugal setup that only permitted uppercase input. The use of the command 'AMEN' to enclose a statement suggests a degree of playfulness among the young team of developers, reflecting their informal working culture."</p>
</div></blockquote>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/nc/bxcpwqqd91vf.jpg" alt="" title="" /></p>

<pre><code>OPERATEURS ARI TH
   BINAIRE DG + .
   BINAIRE DG . .
AMEN

LIRE AXIOMES
  +T(*A + *B,*C)-T(*A,*A1)-T(*B,*B1)-TPLUS(*A1,*B1,*C)..
  +TPLUS(*A,*B,*A+*B)..
  +TMULT(*A,*B,*A.*B)..
AMEN

DEMONTRER(AXIOMES,DONNEES,RESULT)
ECRIRE(RESULT)
AMEN
</code></pre>

<p>The framing emphasizes hardware constraints and material conditions — teletype, remote access, uppercase-only input. But notice what else is present: the "AMEN" command is a joke, a cultural artifact produced by a specific working culture. The "DEMONTRER" command reflects Prolog's origins in theorem-proving, carrying traces of logic and philosophy that exceed the "testimony" frame.</p>

<p><strong>Compare to the exhibition:</strong> <br />
Kate Mancey's panel on <a rel="nofollow" href="https://www.sourcecode-exhibition.softwareheritage.org/the-hooter-within-the-sound-of-computer-programming/">The Hooter</a> similarly begins with technical description (audio debugging on the Manchester Mark II) but opens onto questions of musical thinking and human-computer relationships. Both examples show how "historical testimony" inevitably carries cultural and social dimensions.</p>

<hr />

<h3>EXAMPLE 2</h3>

<p><strong>Title:</strong> Black Perl<br />
<strong>Author(s):</strong> Anonymous (updated by kck for Perl 5.20, 2017)<br />
<strong>Language:</strong> Perl<br />
<strong>Year:</strong> 1990 (updated 2017)<br />
<strong>Axis:</strong> Cultural Artifact<br />
<strong>Commentary by:</strong> Pierre Depaz</p>

<p>From the call-for-proposals:</p>

<blockquote><div>
  <p>"The most obvious feature of this code poem is that it can be read by anyone, including by readers with no previous programming experience: each word is valid both in English and in Perl. A second feature is the abundant use of verbs. Perl belongs to the family of imperative programming languages, which matches a similar grammatical mood in natural languages, the imperative mood."</p>
</div></blockquote>

<pre><code>#!/usr/bin/perl
no warnings;

BEFOREHAND: close door, each window &amp; exit; wait until time.
    open spellbook, study, read (scan, $elect, tell us);
    write it, print the hex while each watches,
        reverse its, length, write, again;
    kill spiders, pop them, chop, split, kill them.
        unlink arms, shift, wait &amp; listen (listening, wait),
        sort the flock (then, warn &quot;the goats&quot; &amp; kill &quot;the sheep&quot;);
    kill them, dump qualms, shift moralities,
        values aside, each one;
    die sheep? die to : reverse { the =&gt; system
        ( you accept (reject, respect) ) };
    next step,
        kill 'the next sacrifice', each sacrifice,
        wait, redo ritual until &quot;all the spirits are pleased&quot;;
    do { it =&gt; &quot;as they say&quot; }.
    return last victim; package body;
    exit crypt (time, times &amp; &quot;half a time&quot;) &amp; close it,
        select (quickly) &amp; warn your (next victim);
AFTERWARDS: tell nobody.
        wait, wait until time;
    wait until next year, next decade;
        sleep, sleep, die yourself,
            die @last
</code></pre>

<p>Pierre's framing emphasizes aesthetics: dual-register words, imperative mood, ambiguity of address. But the 2017 update introduces a historical dimension — the Perl community's ongoing maintenance of Black Perl is itself evidence of how communities sustain cultural artifacts across technical change. Its anonymous 1990 authorship documents a specific moment in USENET culture.</p>

<p><strong>Compare to the exhibition:</strong> Baptiste Mélès's panel on <a rel="nofollow" href="https://www.sourcecode-exhibition.softwareheritage.org/programming-in-classical-chinese/">Wenyan</a> similarly explores programming as linguistic and cultural expression. Where Wenyan challenges English hegemony by using Classical Chinese syntax, Black Perl exploits the fact that Perl keywords happen to be English words. Both raise questions about the relationship between natural language and programming language — and both have communities that maintain and celebrate them across versions.</p>

<hr />

<h3>EXAMPLE 3</h3>

<p><strong>Title:</strong> britain.js — Protest Sign at the People's Vote March<br />
<strong>Author(s):</strong> Unknown (photographed by u/Bronson_AD)<br />
<strong>Language:</strong> Pseudo-JavaScript<br />
<strong>Year:</strong> March 23, 2019<br />
<strong>Axis:</strong> Mirror of Society<br />
<strong>Commentary by:</strong> Titaÿna Kauffmann</p>

<p>From the call-for-proposals:</p>

<blockquote><div>
  <p>"This protest sign exemplifies how programming languages can be repurposed for cultural expression. Rather than instructing a computer, the code serves as a symbolic language for political commentary, similar to a political cartoon. By using JavaScript, the protester specifically targets tech-savvy individuals and younger generations, adding a layer of cultural specificity to the message."</p>
</div></blockquote>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/9h/y96oyt3ggcbl.jpg" alt="" title="" /></p>

<pre><code>// britain.js
//government servers
while(brexit.isHappening()){
    weAre.screwed();
}
</code></pre>

<p>The "mirror of society" framing positions code as reflecting political struggle and programmer identity. But the Reddit circulation revealed something else: community debates about whether the code was "technically accurate" exposed gatekeeping norms about what counts as legitimate code. The sign is also straightforwardly historical testimony — it documents March 23, 2019, a specific moment in British political history.</p>

<p><strong>Compare to the exhibition:</strong> Stéphane Bortzmeyer's panel on the <a rel="nofollow" href="https://www.sourcecode-exhibition.softwareheritage.org/when-source-code-is-illegal-crypto-wars-on-a-t-shirt/">RSA T-shirt</a> shows another case where code on fabric performs defiance and community membership. Both examples raise questions about code's circulation beyond screens.</p>

<hr />

<h3>Synthesis: What Escapes the Frame</h3>

<p>Jeremy's suggestion that we might reframe the axes disciplinarily — Code for Historians, Code for Sociologists, Code for Artists — clarifies something important. The axes are not properties of the code itself but modes of attention we bring to it. The same snippet can be historical testimony, mirror of society, and cultural artifact depending on what questions we ask.</p>

<p>The call-for-proposals examples were chosen for clarity, and that clarity served contributors well. But looking at the final exhibition — panels like <a rel="nofollow" href="https://sourcecode-exhibition.softwareheritage.org">ELIZA</a>, <a rel="nofollow" href="https://sourcecode-exhibition.softwareheritage.org">git-stash</a>, or <a rel="nofollow" href="https://sourcecode-exhibition.softwareheritage.org">Murs Invisibles</a> — the most compelling code tends to resist clean categorization. These panels invite multiple disciplinary approaches simultaneously.</p>

<hr />

<h3>Discussion Questions</h3>

<ol>
<li><p>Do you find the three thematic axes helpful as interpretive lenses, or do they risk flattening what code can tell us? Would different categories — perhaps disciplinary ones, as Jeremy suggests — open different possibilities?</p></li>
<li><p>The call examples were chosen for clarity, and several contributors told us the examples helped them feel their code belonged. Is there a tension between pedagogical clarity and interpretive complexity when curating code?</p></li>
<li><p>For those who work with code as primary source material: how do you decide which frame to foreground? Do you let the code guide you, or do you arrive with questions already formed?</p></li>
</ol>
]]>
        </description>
    </item>
    <item>
        <title>ELIZA at UNESCO</title>
        <link>https://wg.criticalcodestudies.com/index.php?p=/discussion/214/eliza-at-unesco</link>
        <pubDate>Wed, 28 Jan 2026 16:14:55 +0000</pubDate>
        <category>2026 Week 3: Code as Cultural Heritage</category>
        <dc:creator>davidmberry</dc:creator>
        <guid isPermaLink="false">214@/index.php?p=/discussions</guid>
        <description><![CDATA[<p>I recently attended the Software Heritage symposium and exhibition held at UNESCO headquarters in Paris. The event brought together researchers, archivists, and developers working on preserving the world's software source code. I thought it might be interesting to share some photographs from the day, although I should admit that it was MM who actually suggested I upload them <img src="https://wg.criticalcodestudies.com/resources/emoji/smile.png" title=":smile:" alt=":smile:" height="20" />. The symposium offered a fascinating insight into our computational heritage has become of interest to UNESCO, and they are seeking to ensure it remain accessible for future generations.</p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/sz/dwo3vu04lx1n.png" alt="" title="" /></p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/3m/ogxgwv11jbq2.png" alt="" title="" /></p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/rw/l61g6t5tbrbe.png" alt="" title="" /></p>

<p><img src="https://wg.criticalcodestudies.com/uploads/editor/c0/ldwqjlj42pzi.png" alt="" title="" /></p>

<p>I have more but Eurostar WiFi isn’t what it was…</p>
]]>
        </description>
    </item>
   <language>en</language>
   </channel>
</rss>
