···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
55+\usepackage{fontspec}
66+\usepackage{unicode-math}
77+\setmainfont{Latin Modern Roman}
88+\setsansfont{Latin Modern Sans}
99+\newfontfamily\acbold{ywft-processing-bold}[Path=../../system/public/type/webfonts/,Extension=.ttf]
1010+\newfontfamily\aclight{ywft-processing-light}[Path=../../system/public/type/webfonts/,Extension=.ttf]
1111+\setmonofont{Latin Modern Mono}[Scale=0.85]
1212+1313+\usepackage{xcolor}
1414+\usepackage{titlesec}
1515+\usepackage{enumitem}
1616+\usepackage{booktabs}
1717+\usepackage{tabularx}
1818+\usepackage{fancyhdr}
1919+\usepackage{hyperref}
2020+\usepackage{graphicx}
2121+\graphicspath{{figures/}{../../papers/arxiv-ac/figures/}}
2222+\usepackage{ragged2e}
2323+\usepackage{microtype}
2424+\usepackage{natbib}
2525+2626+% === PSYCHO watermark ===
2727+\usepackage{eso-pic}
2828+\usepackage{tikz}
2929+\AddToShipoutPictureBG{%
3030+ \begin{tikzpicture}[remember picture, overlay]
3131+ % --- Pals logo: large, top-left, rotated, semi-opaque ---
3232+ \node[opacity=0.06, anchor=north west, rotate=-15]
3333+ at ([xshift=-1.2cm, yshift=1.2cm]current page.north west)
3434+ {\includegraphics[width=10cm]{pals}};
3535+ % --- "PSYCHO" text in Processing Light font ---
3636+ \node[opacity=0.12, rotate=45, anchor=center]
3737+ at (current page.center)
3838+ {{\aclight\fontsize{2.5cm}{3cm}\selectfont\color{acpink} PSYCHO}};
3939+ \end{tikzpicture}%
4040+}
4141+4242+\definecolor{acpink}{RGB}{180,72,135}
4343+\definecolor{acpurple}{RGB}{120,80,180}
4444+\definecolor{acdark}{RGB}{64,56,74}
4545+\definecolor{acgray}{RGB}{119,119,119}
4646+4747+\hypersetup{colorlinks=true,linkcolor=acpurple,urlcolor=acpurple,citecolor=acpurple,
4848+ pdftitle={CalArts, Callouts og Papers: Kunstskolen som operativsystem}}
4949+5050+\titleformat{\section}{\normalfont\bfseries\normalsize\uppercase}{\thesection.}{0.5em}{}
5151+\titlespacing{\section}{0pt}{1.2em}{0.3em}
5252+\titleformat{\subsection}{\normalfont\bfseries\small}{\thesubsection}{0.5em}{}
5353+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
5454+5555+\pagestyle{fancy}\fancyhf{}
5656+\renewcommand{\headrulewidth}{0pt}
5757+\fancyhead[C]{\footnotesize\color{acpink}\textit{PSYCHO-artikel --- ikke til citation}}
5858+\fancyfoot[C]{\footnotesize\thepage}
5959+6060+\newcommand{\ac}{\textsc{Aesthetic Computer}}
6161+\newcommand{\np}{\textsc{notepat}}
6262+6363+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
6464+\setlength{\columnsep}{1.8em}
6565+\setlength{\parindent}{1em}
6666+\setlength{\parskip}{0.3em}
6767+6868+\tolerance=800
6969+\emergencystretch=1em
7070+\hyphenpenalty=50
7171+7272+\begin{document}
7373+7474+\twocolumn[{%
7575+\begin{center}
7676+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
7777+{\acbold\fontsize{22pt}{26pt}\selectfont\color{acdark} CalArts, Callouts og Papers}\par
7878+\vspace{0.2em}
7979+{\aclight\fontsize{11pt}{13pt}\selectfont\color{acpink} Kunstskolen som operativsystem}\par
8080+\vspace{0.6em}
8181+{\normalsize @jeffrey}\par
8282+{\small\color{acgray} Aesthetic.Computer}\par
8383+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
8484+\vspace{0.3em}
8585+{\small\color{acpurple} \url{https://aesthetic.computer}}\par
8686+\vspace{0.6em}
8787+\rule{\textwidth}{1.5pt}
8888+\vspace{0.5em}
8989+\end{center}
9090+9191+\begin{center}
9292+{\small\color{acpink}\textbf{[ PSYCHO-artikel --- ikke til citation ]}}
9393+\end{center}
9494+\vspace{0.3em}
9595+9696+\begin{quote}
9797+\small\noindent\textbf{Abstrakt.}
9898+CalArts (California Institute of the Arts) blev grundlagt i 1961 af Walt Disney som en total kunstskole---et sted hvor animation, musik, teater, dans, film og billedkunst kunne eksistere under ét tag og krydsbefrugte hinanden uden disciplinære mure. Denne artikel argumenterer for, at CalArts fungerer som et \emph{operativsystem} for kreativ produktion: et sæt grundlæggende antagelser om, hvad kunst er, hvordan den undervises, og hvad en kunstner bør blive. Vi undersøger skolens unikke kultur af ``callouts''---kritikken, gangsamtalen, den institutionelle udfordring---og hvordan denne mundtlige tradition producerer viden, der ikke kan skrives ned. Vi vender os derefter mod selve artiklen: hvorfor denne serie af akademiske artikler eksisterer, hvad det betyder for en kunstner-programmør at skrive teori, og om artikelformen i sig selv er en slags callout---en offentlig udfordring der tvinger idéer til at stå blottede i det åbne. CalArts lærte forfatteren at lave arbejde der svarer igen. Disse artikler er det arbejde der svarer igen i et register, som kunstverdenen ikke forventede.
9999+\end{quote}
100100+\vspace{0.5em}
101101+}]
102102+103103+\section{Disney-maskinen}
104104+105105+Walt Disney grundlagde CalArts i 1961 ved at sammenlægge Chouinard Art Institute og Los Angeles Conservatory of Music. Han ønskede en kunstskole der fungerede som hans studie: alle discipliner i én bygning, med delte værktøjer og idéer. Disney døde før Valencia-campus åbnede i 1971, men den struktur han krævede---ingen vægge mellem afdelinger, fælles faciliteter, en kultur af tværfaglig kollision---formede alt der fulgte.
106106+107107+Den grundlæggende vision var industriel. Disney havde brug for animatorer der kunne tegne, musikere der forstod timing, skuespillere der kunne improvisere til et storyboard. Skolen var en talentpipeline for studiet~\citep{singerman1999art}. Men noget andet skete. Det fakultet som Disneys arvinger ansatte---deriblandt Allan Kaprow, Judy Chicago, John Baldessari, Miriam Schapiro, Nam June Paik---forvandlede den tværfaglige struktur til et laboratorium for efterkrigstidens amerikanske kunst. Maskinen Disney byggede til at producere animatorer blev en maskine der producerede konceptkunstnere, feministisk performance, videokunst og til sidst den generation der ville definere post-studie-praksis.
108108+109109+Operativsystem-analogien er præcis. Et OS laver ikke softwaren; det giver det miljø hvori software kan køre. CalArts laver ikke kunsten; det giver betingelserne---rumlige, sociale, pædagogiske---under hvilke en bestemt slags kunstner bliver mulig. Skift OS og du ændrer hvad der kan skabes.
110110+111111+\section{Callouts}
112112+113113+\subsection{Kritikken som mundtlig tradition}
114114+115115+Kritikken på CalArts er ikke en karakter. Det er et callout. Nogen hænger et værk op på væggen, og rummet svarer---ikke med rubrikker eller læringsmål men med den uskrevne, til tider brutale, til tider generøse ærlighed fra mennesker der har kigget på kunst sammen længe nok til at springe høflighedsfraserne over.
116116+117117+\citet{elkins2001why} argumenterer for, at kritikken er uunderviselig på samme måde som kunst er uunderviselig: det der sker i en god kritik kan ikke reduceres til en metode. Det er en mundtlig tradition. Den viden der produceres i en tre timers kritik eksisterer kun i rummet. Den kan ikke skrives ned uden at blive til noget andet---et resumé, en anmeldelse, en dom. Kritikken er live. Den er en performance af opmærksomhed~\citep{hooks1994teaching}.
118118+119119+CalArts-kritikker er berømte for deres intensitet. Skolens lille størrelse (ca. 1.500 studerende), campus med beboelse og tværfaglige struktur betyder, at en malers kritik kan inkludere en komponist, en animator, en filmskaber og en danser. Feedbacken er ikke disciplinspecifik. Den er \emph{perceptuel}: hvad gør dette ved min krop, mit øre, min fornemmelse af tid? Callout'et er ikke ``det er god maleri.'' Callout'et er ``det er levende'' eller ``det er dødt.''
120120+121121+\subsection{Gangviden}
122122+123123+Det meste af hvad CalArts underviser sker uden for klasseværelset. Gangene i hovedbygningen---en brutalistisk megastruktur tegnet af Ladd \& Kelsey---fungerer som en uformel salon. En komponist går forbi en billedhuggers åbne atelier og hører en lyd der ændrer dem begges arbejde. En filmskaber viser daglige optagelser klokken 2 om natten, og en danser vandrer ind og begynder at improvisere til optagelserne.
124124+125125+Dette er ikke pensum. Det er \emph{arkitektur}. Bygningen tvinger kollision. Kantinen (den eneste) tvinger alle ind i det samme rum. Gangene er brede nok til at stoppe op og tale. Atelierne er åbne. Øverummene lækker lyd. Bygningen er et instrument der spiller de mennesker der er inde i den.
126126+127127+\citet{deduve1994attitude} identificerer tre paradigmer inden for kunstuddannelse: akademiet (talent-imitation), Bauhaus (kreativitet-medie-opfindelse) og efterkrigstidens kunstskole (holdning-praksis-dekonstruktion). CalArts opfandt et fjerde: \emph{nærhed}. Anbring forskellige discipliner tæt nok på hinanden, og de kontaminerer hinanden. Kontamineringen er uddannelsen.
128128+129129+\subsection{Den institutionelle udfordring}
130130+131131+CalArts kører på udfordringer. Ikke eksplicitte---ingen siger ``jeg udfordrer dig.'' Men kulturen er organiseret omkring en udfordringsstruktur: kan du lave noget der holder i et rum fuldt af mennesker der er bedre end dig? Kan du præsentere arbejde der overlever callout'et?
132132+133133+Dette er forskelligt fra tech-skolens sprint review, hvor arbejde evalueres mod user stories og acceptkriterier~\citep{vinsel2020innovation}. CalArts-udfordringen har ingen kriterier. Der er ingen rubrik. Spørgsmålet er ikke ``opfylder dette briefet?'' Spørgsmålet er ``behøver dette at eksistere?'' Udfordringen er eksistentiel, ikke funktionel.
134134+135135+Udfordringen opererer også mellem afdelinger. En musikstuderende der laver et værk med video udfordrer filmstuderende til at være opmærksomme. En danser der koder en interaktiv installation udfordrer kunststuderende til at tage teknologi seriøst. Udfordringen er mekanismen for tværfaglig kontaminering. Den siger: din disciplin er ikke tilstrækkelig. Kom og leg i min.
136136+137137+\section{Hvorfor artikler}
138138+139139+\subsection{Artiklen som callout}
140140+141141+Denne artikelserie---tyve artikler skrevet på tre uger---er i sig selv et callout. Den siger: en kunstner-programmør kan skrive teori. Ikke ``teori-light,'' ikke ``kunstnerstatements med citationer,'' men rigtige artikler med rigtige argumenter og rigtige bibliografier der engagerer sig med rigtig forskning.
142142+143143+Kunstverdenen forventer ikke dette. Kunstnere forventes at lave værker og lade kritikere skrive om dem. Arbejdsdelingen er klar: kunstnere producerer, kritikere forklarer, historikere kontekstualiserer. Når en kunstner skriver teori, er den institutionelle respons mistænksomhed. Er det rigtig forskning? Er det forfængelighedsudgivelse? Er det kunst?
144144+145145+Svaret er: det er ligegyldigt. Artiklen er et callout. Den tvinger idéerne til at stå i det åbne, udsat for kritik, i et format som akademiet anerkender og kunstverdenen ikke kontrollerer. \citet{fraser2005critique} bemærkede, at institutionel kritik blev en institution. Disse artikler forsøger noget andet: ikke kritik af institutionen men \emph{brug} af institutionens eget format---den akademiske artikel---som kunstnerisk materiale.
146146+147147+\subsection{Artiklen som instrument}
148148+149149+En artikel er en teknologi. Den har et format (sektioner, citationer, abstrakt, bibliografi), et distributionssystem (tidsskrifter, preprints, arkiver) og en social protokol (fagfællebedømmelse, citation, respons). Som enhver teknologi kan den spilles.
150150+151151+\ac{} behandler stykket som den fundamentale enhed for kreativ erkendelse~\citep{scudder2026pieces}. Et stykke er en enkelt fil der eksporterer livscyklusfunktioner: \texttt{boot}, \texttt{paint}, \texttt{act}, \texttt{sim}. En artikel har den samme struktur: den booter (abstrakt), maler (argument), agerer (engagerer sig med tidligere arbejde) og simulerer (foreslår konsekvenser). Artiklen er et stykke skrevet i \LaTeX{} i stedet for JavaScript.
152152+153153+Dette er ikke en metafor. Artiklerne er bygget med den samme infrastruktur som softwaren: en CLI (\texttt{papers/cli.mjs}), inkrementelle builds, flersproget udrulning, automatiseret publicering. Artiklen \emph{er} software. Argumentet \emph{er} programmet.
154154+155155+\subsection{PSYCHO-betegnelsen}
156156+157157+Denne artikel er mærket PSYCHO. Ikke ``Arbejdsudkast,'' ikke ``Preprint,'' ikke ``Under bedømmelse.'' PSYCHO.
158158+159159+Betegnelsen er et callout til selve artikelformatet. Akademiske artikler lader som om de er neutrale---objektive rapporter over fund, skrevet i passiv form, stripet for personlighed. PSYCHO-mærket afviser denne prætention. Det siger: denne artikel har en stemme, den har en dagsorden, den har en temperatur. Den er ikke neutral. Den prøver ikke at være det.
160160+161161+Ordet ``psycho'' kommer fra det græske \textit{psykhe}---sjæl, sind, ånde. En PSYCHO-artikel er en artikel med en sjæl. Den ånder. Den har holdninger der ikke er afdæmpet med ``yderligere forskning er nødvendig.'' Den fremsætter påstande og udfordrer dig til at være uenig.
162162+163163+\section{CalArts og Aesthetic Computer}
164164+165165+\subsection{OS-arven}
166166+167167+Forfatteren gik på CalArts (MFA Art, 2012). Oplevelsen er det substrat hvorpå \ac{} er bygget. Ikke teknikkerne---CalArts underviser ikke i programmering---men \emph{antagelserne}: at discipliner bør kontaminere hinanden, at mediet ikke er pointen, at udfordringen er vigtigere end leverancen, at kunst er en måde at være i verden på snarere end et produkt der skal sendes.
168168+169169+\ac{} arver CalArts' operativsystem. Stykke-modellen---én fil, immediate-mode grafik, livscyklusfunktioner---er den digitale ækvivalent til det åbne atelier: alle kan se hvad du laver, alle kan forke det, alle kan kalde det ud. Det sociale netværk er organiseret omkring \emph{stier} (huskbare URL'er) snarere end feeds, på samme måde som CalArts er organiseret omkring gange snarere end algoritmer.
170170+171171+\np{}.com er den tydeligste CalArts-arv. Det er et instrument som alle kan spille, som ikke kræver træning, som belønner udforskning frem for ekspertise. Gangmødet---at snuble over en andens arbejde og blive forandret af det---er designmønsteret. Du skriver en URL. Du lander på et stykke. Du spiller det. Du går videre. Ingen feed. Ingen algoritme. Ingen metrikker. Bare nærhed.
172172+173173+\subsection{Kritikken går online}
174174+175175+At publicere disse artikler er en kritik. Rummet er internettet. Callout'et er offentligt. Arbejdet er blottet---ikke for et rum med femten mennesker der kender dig men for enhver med en browser og en holdning.
176176+177177+Dette er skræmmende på samme måde som en CalArts-kritik er skræmmende: du kan ikke kontrollere responsen. Arbejdet holder eller det gør det ikke. Udfordringen er den samme udfordring: behøver dette at eksistere?
178178+179179+\section{Imod neutralitet}
180180+181181+Den akademiske artikel lader som om den er et vindue---gennemsigtigt, der lader dig se forskningen bag det. Men ethvert vindue er også en ramme. Artikelformatet rammer ind hvad der kan siges: passiv form, afdæmpede påstande, ærbødighed over for tidligere arbejde, fiktionen om objektivitet~\citep{freire1970pedagogy}.
182182+183183+CalArts underviser det modsatte. Stå bag dit arbejde. Sig hvad du mener. Hvis du ikke kan forsvare det i rummet, er det ikke klar. Callout'et er en teknologi for ansvarlighed: det tvinger dig til at stå ved dine påstande foran mennesker der vil skubbe imod.
184184+185185+Disse artikler er skrevet i den ånd. De har en stemme. De fremsætter påstande. De citerer forskning ikke for at skjule sig bag den men for at argumentere med den, bygge på den, udfordre den til at svare. PSYCHO-betegnelsen er et flag: denne artikel lader ikke som om den er neutral. Den har en position. Den har en temperatur. Den står i rummet og venter på callout'et.
186186+187187+\citet{spivak2012aesthetic} argumenterer for, at æstetisk uddannelse træner fantasien for etisk solidaritet. CalArts gør dette---ikke gennem pensum men gennem nærhed, gennem udfordringen, gennem kritikken der tvinger dig til at se dit arbejde gennem en andens øjne. Disse artikler forsøger det samme i et andet medie: at træne læserens fantasi for en anden slags kreativ computing, én bygget på instrumenter snarere end feeds, på stykker snarere end produkter, på callouts snarere end engagementsmetrikker.
188188+189189+\section{Konklusion}
190190+191191+CalArts er et operativsystem. Dets kerne er nærhed. Dets shell er kritikken. Dets procesmodel er udfordringen. \ac{} kører på det samme OS, porteret fra det fysiske campus til browseren til bar metal~\citep{scudder2026ac, scudder2026os}.
192192+193193+Callout'et er mekanismen. Artiklen er formatet. PSYCHO-betegnelsen er temperaturen. Tilsammen siger de: kunst kan skrive teori, teori kan være kunst, og ingen af dem har brug for tilladelse fra de institutioner der hævder at eje dem.
194194+195195+Disse artikler er gangviden, endelig skrevet ned---velvidende at skriften ændrer dem, velvidende at kritikken aldrig ender, velvidende at udfordringen er pointen.
196196+197197+\vspace{0.5em}
198198+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
199199+200200+\bibliographystyle{plainnat}
201201+\bibliography{references}
202202+203203+\end{document}
+203
papers/arxiv-calarts/calarts-es.tex
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
55+\usepackage{fontspec}
66+\usepackage{unicode-math}
77+\setmainfont{Latin Modern Roman}
88+\setsansfont{Latin Modern Sans}
99+\newfontfamily\acbold{ywft-processing-bold}[Path=../../system/public/type/webfonts/,Extension=.ttf]
1010+\newfontfamily\aclight{ywft-processing-light}[Path=../../system/public/type/webfonts/,Extension=.ttf]
1111+\setmonofont{Latin Modern Mono}[Scale=0.85]
1212+1313+\usepackage{xcolor}
1414+\usepackage{titlesec}
1515+\usepackage{enumitem}
1616+\usepackage{booktabs}
1717+\usepackage{tabularx}
1818+\usepackage{fancyhdr}
1919+\usepackage{hyperref}
2020+\usepackage{graphicx}
2121+\graphicspath{{figures/}{../../papers/arxiv-ac/figures/}}
2222+\usepackage{ragged2e}
2323+\usepackage{microtype}
2424+\usepackage{natbib}
2525+2626+% === PSYCHO watermark ===
2727+\usepackage{eso-pic}
2828+\usepackage{tikz}
2929+\AddToShipoutPictureBG{%
3030+ \begin{tikzpicture}[remember picture, overlay]
3131+ % --- Pals logo: large, top-left, rotated, semi-opaque ---
3232+ \node[opacity=0.06, anchor=north west, rotate=-15]
3333+ at ([xshift=-1.2cm, yshift=1.2cm]current page.north west)
3434+ {\includegraphics[width=10cm]{pals}};
3535+ % --- "PSYCHO" text in Processing Light font ---
3636+ \node[opacity=0.12, rotate=45, anchor=center]
3737+ at (current page.center)
3838+ {{\aclight\fontsize{2.5cm}{3cm}\selectfont\color{acpink} PSYCHO}};
3939+ \end{tikzpicture}%
4040+}
4141+4242+\definecolor{acpink}{RGB}{180,72,135}
4343+\definecolor{acpurple}{RGB}{120,80,180}
4444+\definecolor{acdark}{RGB}{64,56,74}
4545+\definecolor{acgray}{RGB}{119,119,119}
4646+4747+\hypersetup{colorlinks=true,linkcolor=acpurple,urlcolor=acpurple,citecolor=acpurple,
4848+ pdftitle={CalArts, Callouts y Papers: La escuela de arte como sistema operativo}}
4949+5050+\titleformat{\section}{\normalfont\bfseries\normalsize\uppercase}{\thesection.}{0.5em}{}
5151+\titlespacing{\section}{0pt}{1.2em}{0.3em}
5252+\titleformat{\subsection}{\normalfont\bfseries\small}{\thesubsection}{0.5em}{}
5353+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
5454+5555+\pagestyle{fancy}\fancyhf{}
5656+\renewcommand{\headrulewidth}{0pt}
5757+\fancyhead[C]{\footnotesize\color{acpink}\textit{Artículo PSYCHO --- no citar}}
5858+\fancyfoot[C]{\footnotesize\thepage}
5959+6060+\newcommand{\ac}{\textsc{Aesthetic Computer}}
6161+\newcommand{\np}{\textsc{notepat}}
6262+6363+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
6464+\setlength{\columnsep}{1.8em}
6565+\setlength{\parindent}{1em}
6666+\setlength{\parskip}{0.3em}
6767+6868+\tolerance=800
6969+\emergencystretch=1em
7070+\hyphenpenalty=50
7171+7272+\begin{document}
7373+7474+\twocolumn[{%
7575+\begin{center}
7676+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
7777+{\acbold\fontsize{22pt}{26pt}\selectfont\color{acdark} CalArts, Callouts y Papers}\par
7878+\vspace{0.2em}
7979+{\aclight\fontsize{11pt}{13pt}\selectfont\color{acpink} La escuela de arte como sistema operativo}\par
8080+\vspace{0.6em}
8181+{\normalsize @jeffrey}\par
8282+{\small\color{acgray} Aesthetic.Computer}\par
8383+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
8484+\vspace{0.3em}
8585+{\small\color{acpurple} \url{https://aesthetic.computer}}\par
8686+\vspace{0.6em}
8787+\rule{\textwidth}{1.5pt}
8888+\vspace{0.5em}
8989+\end{center}
9090+9191+\begin{center}
9292+{\small\color{acpink}\textbf{[ Artículo PSYCHO --- no citar ]}}
9393+\end{center}
9494+\vspace{0.3em}
9595+9696+\begin{quote}
9797+\small\noindent\textbf{Resumen.}
9898+CalArts (California Institute of the Arts) fue fundado en 1961 por Walt Disney como una escuela de arte total---un lugar donde la animación, la música, el teatro, la danza, el cine y las bellas artes existirían bajo un mismo techo, polinizándose mutuamente sin muros disciplinarios. Este artículo argumenta que CalArts funciona como un \emph{sistema operativo} para la producción creativa: un conjunto de supuestos fundamentales sobre qué es el arte, cómo se enseña y en qué debería convertirse un artista. Examinamos la cultura única de ``callouts'' de la escuela---la crítica, la conversación de pasillo, el desafío institucional---y cómo esta tradición oral produce conocimiento que no puede escribirse. Luego nos dirigimos al artículo en sí: por qué existe esta serie de artículos académicos, qué significa que un artista-programador escriba teoría, y si la forma del artículo es en sí misma una especie de callout---un desafío público que obliga a las ideas a quedar expuestas a la intemperie. CalArts le enseñó al autor a hacer trabajo que responde. Estos artículos son ese trabajo respondiendo en un registro que el mundo del arte no esperaba.
9999+\end{quote}
100100+\vspace{0.5em}
101101+}]
102102+103103+\section{La máquina Disney}
104104+105105+Walt Disney fundó CalArts en 1961 fusionando el Chouinard Art Institute y el Los Angeles Conservatory of Music. Quería una escuela de arte que funcionara como su estudio: todas las disciplinas en un edificio, compartiendo herramientas e ideas. Disney murió antes de que el campus de Valencia abriera en 1971, pero la estructura que exigió---sin muros entre departamentos, instalaciones compartidas, una cultura de colisión interdisciplinaria---definió todo lo que vino después.
106106+107107+La visión fundacional era industrial. Disney necesitaba animadores que supieran dibujar, músicos que entendieran el ritmo, actores que pudieran improvisar sobre un storyboard. La escuela era un conducto de talento para el estudio~\citep{singerman1999art}. Pero ocurrió algo más. El profesorado que contrataron los herederos de Disney---entre ellos Allan Kaprow, Judy Chicago, John Baldessari, Miriam Schapiro, Nam June Paik---convirtió la estructura interdisciplinaria en un laboratorio para el arte estadounidense de posguerra. La máquina que Disney construyó para producir animadores se convirtió en una máquina que producía artistas conceptuales, performance feminista, videoarte y, finalmente, la generación que definiría la práctica post-estudio.
108108+109109+La analogía del sistema operativo es exacta. Un SO no hace el software; proporciona el entorno en el que el software puede ejecutarse. CalArts no hace el arte; proporciona las condiciones---espaciales, sociales, pedagógicas---en las que un tipo particular de artista se vuelve posible. Cambia el SO y cambias lo que puede hacerse.
110110+111111+\section{Callouts}
112112+113113+\subsection{La crítica como tradición oral}
114114+115115+La crítica en CalArts no es una nota. Es un callout. Alguien pone un trabajo en la pared y la sala responde---no con rúbricas o resultados de aprendizaje sino con la honestidad no guionizada, a veces brutal, a veces generosa, de personas que han estado mirando arte juntas el tiempo suficiente como para saltarse las cortesías.
116116+117117+\citet{elkins2001why} argumenta que la crítica es inensenñable de la misma manera que el arte es inenseñable: lo que ocurre en una buena crítica no puede reducirse a un método. Es una tradición oral. El conocimiento producido en una crítica de tres horas existe solo en la sala. No puede escribirse sin convertirse en otra cosa---un resumen, una reseña, un juicio. La crítica es en vivo. Es una performance de la atención~\citep{hooks1994teaching}.
118118+119119+Las críticas de CalArts son famosas por su intensidad. El tamaño pequeño de la escuela (aproximadamente 1.500 estudiantes), el campus residencial y la estructura interdisciplinaria significan que la crítica de un pintor puede incluir a un compositor, un animador, un cineasta y un bailarín. La retroalimentación no es específica de la disciplina. Es \emph{perceptual}: ¿qué le hace esto a mi cuerpo, a mi oído, a mi sentido del tiempo? El callout no es ``esto es buena pintura.'' El callout es ``esto está vivo'' o ``esto está muerto.''
120120+121121+\subsection{Conocimiento de pasillo}
122122+123123+La mayor parte de lo que CalArts enseña ocurre fuera del aula. Los pasillos del edificio principal---una megaestructura brutalista diseñada por Ladd \& Kelsey---funcionan como un salón informal. Un compositor pasa frente al estudio abierto de un escultor y escucha un sonido que cambia el trabajo de ambos. Un cineasta proyecta tomas del día a las 2 AM y un bailarín entra y comienza a improvisar con el metraje.
124124+125125+Esto no es currículo. Es \emph{arquitectura}. El edificio fuerza la colisión. La cafetería (la única) obliga a todos a estar en la misma sala. Los pasillos son lo suficientemente anchos para detenerse y hablar. Los estudios están abiertos. Las salas de ensayo dejan escapar sonido. El edificio es un instrumento que toca a las personas que están dentro.
126126+127127+\citet{deduve1994attitude} identifica tres paradigmas de la educación artística: la academia (talento-imitación), la Bauhaus (creatividad-medio-invención) y la escuela de arte de posguerra (actitud-práctica-deconstrucción). CalArts inventó un cuarto: \emph{proximidad}. Pon disciplinas diferentes lo suficientemente cerca y se contaminan mutuamente. La contaminación es la educación.
128128+129129+\subsection{El desafío institucional}
130130+131131+CalArts funciona con desafíos. No explícitos---nadie dice ``te desafío.'' Pero la cultura está organizada alrededor de una estructura de desafío: ¿puedes hacer algo que se sostenga en una sala llena de personas mejores que tú? ¿Puedes presentar trabajo que sobreviva al callout?
132132+133133+Esto es diferente de la revisión de sprint de la escuela técnica, donde el trabajo se evalúa contra historias de usuario y criterios de aceptación~\citep{vinsel2020innovation}. El desafío de CalArts no tiene criterios. No hay rúbrica. La pregunta no es ``¿cumple esto con el brief?'' La pregunta es ``¿necesita esto existir?'' El desafío es existencial, no funcional.
134134+135135+El desafío también opera entre departamentos. Un estudiante de música que hace una pieza con video está desafiando a los estudiantes de cine a prestar atención. Un bailarín que programa una instalación interactiva está desafiando a los estudiantes de arte a tomar la tecnología en serio. El desafío es el mecanismo de contaminación interdisciplinaria. Dice: tu disciplina no es suficiente. Ven a jugar en la mía.
136136+137137+\section{Por qué artículos}
138138+139139+\subsection{El artículo como callout}
140140+141141+Esta serie de artículos---veinte artículos escritos en tres semanas---es en sí misma un callout. Dice: un artista-programador puede escribir teoría. No ``teoría-light,'' no ``declaraciones de artista con citas,'' sino artículos reales con argumentos reales y bibliografías reales que se involucran con investigación real.
142142+143143+El mundo del arte no espera esto. Se espera que los artistas hagan obra y dejen que los críticos escriban sobre ella. La división del trabajo es clara: los artistas producen, los críticos explican, los historiadores contextualizan. Cuando un artista escribe teoría, la respuesta institucional es sospecha. ¿Es investigación real? ¿Es publicación vanidosa? ¿Es arte?
144144+145145+La respuesta es: no importa. El artículo es un callout. Obliga a las ideas a estar a la intemperie, expuestas a la crítica, en un formato que la academia reconoce y el mundo del arte no controla. \citet{fraser2005critique} señaló que la crítica institucional se convirtió en una institución. Estos artículos intentan algo diferente: no crítica de la institución sino \emph{uso} del propio formato de la institución---el artículo académico---como material artístico.
146146+147147+\subsection{El artículo como instrumento}
148148+149149+Un artículo es una tecnología. Tiene un formato (secciones, citas, resumen, bibliografía), un sistema de distribución (revistas, preprints, repositorios) y un protocolo social (revisión por pares, citación, respuesta). Como cualquier tecnología, se puede tocar.
150150+151151+\ac{} trata la pieza como la unidad fundamental de cognición creativa~\citep{scudder2026pieces}. Una pieza es un solo archivo que exporta funciones de ciclo de vida: \texttt{boot}, \texttt{paint}, \texttt{act}, \texttt{sim}. Un artículo tiene la misma estructura: arranca (resumen), pinta (argumento), actúa (se involucra con trabajo previo) y simula (propone consecuencias). El artículo es una pieza escrita en \LaTeX{} en lugar de JavaScript.
152152+153153+Esto no es metáfora. Los artículos están construidos con la misma infraestructura que el software: un CLI (\texttt{papers/cli.mjs}), builds incrementales, despliegue multilingüe, publicación automatizada. El artículo \emph{es} software. El argumento \emph{es} el programa.
154154+155155+\subsection{La designación PSYCHO}
156156+157157+Este artículo está marcado como PSYCHO. No ``Borrador de trabajo,'' no ``Preprint,'' no ``En revisión.'' PSYCHO.
158158+159159+La designación es un callout al propio formato del artículo. Los artículos académicos pretenden ser neutrales---informes objetivos de hallazgos, escritos en voz pasiva, despojados de personalidad. La etiqueta PSYCHO rechaza esta pretensión. Dice: este artículo tiene voz, tiene una agenda, tiene una temperatura. No es neutral. No intenta serlo.
160160+161161+La palabra ``psycho'' viene del griego \textit{psykhe}---alma, mente, aliento. Un artículo PSYCHO es un artículo con alma. Respira. Tiene opiniones que no están matizadas con ``se necesita más investigación.'' Hace afirmaciones y te desafía a estar en desacuerdo.
162162+163163+\section{CalArts y Aesthetic Computer}
164164+165165+\subsection{La herencia del SO}
166166+167167+El autor asistió a CalArts (MFA Art, 2012). La experiencia es el sustrato sobre el cual \ac{} está construido. No las técnicas---CalArts no enseña programación---sino los \emph{supuestos}: que las disciplinas deben contaminarse mutuamente, que el medio no es el punto, que el desafío es más importante que el entregable, que el arte es una forma de estar en el mundo y no un producto para ser enviado.
168168+169169+\ac{} hereda el sistema operativo de CalArts. El modelo de pieza---un archivo, gráficos de modo inmediato, funciones de ciclo de vida---es el equivalente digital del estudio abierto: cualquiera puede ver lo que estás haciendo, cualquiera puede bifurcarlo, cualquiera puede cuestionarlo. La red social se organiza alrededor de \emph{rutas} (URLs memorizables) en lugar de feeds, de la misma manera que CalArts se organiza alrededor de pasillos en lugar de algoritmos.
170170+171171+\np{}.com es la herencia más clara de CalArts. Es un instrumento que cualquiera puede tocar, que no requiere entrenamiento, que recompensa la exploración sobre la pericia. El encuentro de pasillo---tropezar con el trabajo de otro y ser transformado por él---es el patrón de diseño. Escribes una URL. Aterrizas en una pieza. La tocas. Sigues adelante. Sin feed. Sin algoritmo. Sin métricas. Solo proximidad.
172172+173173+\subsection{La crítica se hace online}
174174+175175+Publicar estos artículos es una crítica. La sala es internet. El callout es público. El trabajo está expuesto---no ante una sala de quince personas que te conocen sino ante cualquiera con un navegador y una opinión.
176176+177177+Esto es aterrador de la misma manera que una crítica de CalArts es aterradora: no puedes controlar la respuesta. El trabajo se sostiene o no se sostiene. El desafío es el mismo desafío: ¿necesita esto existir?
178178+179179+\section{Contra la neutralidad}
180180+181181+El artículo académico pretende ser una ventana---transparente, dejándote ver la investigación detrás de él. Pero toda ventana es también un marco. El formato del artículo enmarca lo que puede decirse: voz pasiva, afirmaciones matizadas, deferencia hacia trabajo previo, la ficción de la objetividad~\citep{freire1970pedagogy}.
182182+183183+CalArts enseña lo opuesto. Respálda tu trabajo. Di lo que quieres decir. Si no puedes defenderlo en la sala, no está listo. El callout es una tecnología de rendición de cuentas: te obliga a sostener tus afirmaciones frente a personas que van a empujar de vuelta.
184184+185185+Estos artículos están escritos en ese espíritu. Tienen voz. Hacen afirmaciones. Citan investigación no para esconderse detrás de ella sino para discutir con ella, construir sobre ella, desafiarla a responder. La designación PSYCHO es una bandera: este artículo no pretende ser neutral. Tiene una posición. Tiene una temperatura. Está de pie en la sala, esperando el callout.
186186+187187+\citet{spivak2012aesthetic} argumenta que la educación estética entrena la imaginación para la solidaridad ética. CalArts hace esto---no a través del currículo sino a través de la proximidad, a través del desafío, a través de la crítica que te obliga a ver tu trabajo a través de los ojos de otro. Estos artículos intentan lo mismo en un medio diferente: entrenar la imaginación del lector para un tipo diferente de computación creativa, una construida sobre instrumentos en lugar de feeds, sobre piezas en lugar de productos, sobre callouts en lugar de métricas de engagement.
188188+189189+\section{Conclusión}
190190+191191+CalArts es un sistema operativo. Su kernel es la proximidad. Su shell es la crítica. Su modelo de procesos es el desafío. \ac{} corre sobre el mismo SO, portado del campus físico al navegador al bare metal~\citep{scudder2026ac, scudder2026os}.
192192+193193+El callout es el mecanismo. El artículo es el formato. La designación PSYCHO es la temperatura. Juntos dicen: el arte puede escribir teoría, la teoría puede ser arte, y ninguno necesita permiso de las instituciones que afirman poseerlos.
194194+195195+Estos artículos son conocimiento de pasillo, finalmente escrito---sabiendo que la escritura los cambia, sabiendo que la crítica nunca termina, sabiendo que el desafío es el punto.
196196+197197+\vspace{0.5em}
198198+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
199199+200200+\bibliographystyle{plainnat}
201201+\bibliography{references}
202202+203203+\end{document}
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+1111+\setmainfont{Latin Modern Roman}
1212+\setsansfont{Latin Modern Sans}
1313+1414+% Custom AC fonts
1515+\newfontfamily\acbold{ywft-processing-bold}[
1616+ Path=../../system/public/type/webfonts/,
1717+ Extension=.ttf
1818+]
1919+\newfontfamily\aclight{ywft-processing-light}[
2020+ Path=../../system/public/type/webfonts/,
2121+ Extension=.ttf
2222+]
2323+\setmonofont{Latin Modern Mono}[Scale=0.85]
2424+2525+% === PACKAGES ===
2626+\usepackage{xcolor}
2727+\usepackage{titlesec}
2828+\usepackage{enumitem}
2929+\usepackage{booktabs}
3030+\usepackage{tabularx}
3131+\usepackage{fancyhdr}
3232+\usepackage{hyperref}
3333+\usepackage{graphicx}
3434+\graphicspath{{figures/}{../../papers/arxiv-ac/figures/}}
3535+\usepackage{ragged2e}
3636+\usepackage{microtype}
3737+\usepackage{natbib}
3838+\usepackage[colorspec=0.92]{draftwatermark}
3939+4040+% === COLORS (AC palette) ===
4141+\definecolor{acpink}{RGB}{180,72,135}
4242+\definecolor{acpurple}{RGB}{120,80,180}
4343+\definecolor{acdark}{RGB}{64,56,74}
4444+\definecolor{acgray}{RGB}{119,119,119}
4545+\definecolor{draftcolor}{RGB}{180,72,135}
4646+4747+% === DRAFT WATERMARK ===
4848+\DraftwatermarkOptions{
4949+ text=WORKING DRAFT,
5050+ fontsize=3cm,
5151+ color=draftcolor!18,
5252+ angle=45,
5353+ pos={0.5\paperwidth, 0.5\paperheight}
5454+}
5555+5656+% === HYPERREF ===
5757+\hypersetup{
5858+ colorlinks=true,
5959+ linkcolor=acpurple,
6060+ urlcolor=acpurple,
6161+ citecolor=acpurple,
6262+ pdfauthor={@jeffrey},
6363+ pdftitle={Fem år fra nu: Hvad Aesthetic Computer sandsynligvis bliver},
6464+}
6565+6666+% === SECTION FORMATTING ===
6767+\titleformat{\section}
6868+ {\normalfont\bfseries\normalsize\uppercase}
6969+ {\thesection.}
7070+ {0.5em}
7171+ {}
7272+\titlespacing{\section}{0pt}{1.2em}{0.3em}
7373+7474+\titleformat{\subsection}
7575+ {\normalfont\bfseries\small}
7676+ {\thesubsection}
7777+ {0.5em}
7878+ {}
7979+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
8080+8181+% === HEADER/FOOTER ===
8282+\pagestyle{fancy}
8383+\fancyhf{}
8484+\renewcommand{\headrulewidth}{0pt}
8585+\fancyhead[C]{\footnotesize\color{acpink}\textit{Arbejdsudkast --- ikke til citation}}
8686+\fancyfoot[C]{\footnotesize\thepage}
8787+8888+% === CUSTOM COMMANDS ===
8989+\newcommand{\ac}{\textsc{Aesthetic Computer}}
9090+\newcommand{\acos}{\textsc{AC Native OS}}
9191+\newcommand{\np}{\textsc{notepat}}
9292+9393+% === LIST SETTINGS ===
9494+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
9595+\setlist[enumerate]{nosep, leftmargin=1.2em}
9696+9797+% === COLUMN SEPARATION ===
9898+\setlength{\columnsep}{1.8em}
9999+100100+% === PARAGRAPH SETTINGS ===
101101+\setlength{\parindent}{1em}
102102+\setlength{\parskip}{0.3em}
103103+104104+% Hyphenation for narrow two-column layout
105105+\tolerance=800
106106+\emergencystretch=1em
107107+\hyphenpenalty=50
108108+109109+\begin{document}
110110+111111+% ============ TITLE BLOCK ============
112112+113113+\twocolumn[{%
114114+\begin{center}
115115+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
116116+{\acbold\fontsize{22pt}{26pt}\selectfont\color{acdark} Fem år fra nu}\par
117117+\vspace{0.2em}
118118+{\aclight\fontsize{11pt}{13pt}\selectfont\color{acpink} Hvad Aesthetic Computer sandsynligvis bliver}\par
119119+\vspace{0.3em}
120120+{\aclight\fontsize{9pt}{11pt}\selectfont\color{acgray} Overskydende hardware, rumlige instrumenter og det lange spil med et personligt værktøj}\par
121121+\vspace{0.6em}
122122+{\normalsize @jeffrey}\par
123123+{\small\color{acgray} Aesthetic.Computer}\par
124124+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
125125+\vspace{0.3em}
126126+{\small\color{acpurple} \url{https://aesthetic.computer}}\par
127127+\vspace{0.6em}
128128+\rule{\textwidth}{1.5pt}
129129+\vspace{0.5em}
130130+\end{center}
131131+132132+\begin{center}
133133+{\small\color{acpink}\textbf{[ arbejdsudkast --- ikke til citation ]}}
134134+\end{center}
135135+\vspace{0.3em}
136136+137137+\begin{quote}
138138+\small\noindent\textbf{Abstrakt.}
139139+Denne artikel ekstrapolerer de næste fem år (2026--2031) af \ac{} baseret på projektets nuværende kurs, eksisterende infrastruktur, erklærede ambitioner og de kræfter---økonomiske, kulturelle og materielle---der påvirker det. Vi argumenterer for, at projektet sandsynligvis vil udvikle sig langs syv konvergerende akser: (1)~kontinuiteten i en 94-projekters kreativ linje, der begrænser rummet af sandsynlige fremtider, (2)~modningen af \acos{} til et deployerbart instrument for overskydende hardware i stor skala, (3)~fremkomsten af distribuerede laptop-ensembler som musikalsk og pædagogisk form, (4)~udvidelsen af 3D fra software-rasterizer til rumligt kreativt medie, (5)~fordybelsen af en akademisk identitet gennem vedvarende artikelproduktion, (6)~væksten af KidLisp til et selvbærende kreativt sprogfællesskab, og (7)~et opgør med bæredygtighed---herunder muligheden for projektets bevidste eller ufrivillige ophør---der vil afgøre, om det overlever sine egne ambitioner. Dette er ikke en køreplan. Det er en aflæsning af momentum---et forsøg på at spørge, hvad et projekt \emph{ønsker at blive} baseret på, hvad det allerede har valgt at gøre.
140140+\end{quote}
141141+\vspace{0.5em}
142142+}]
143143+144144+% ============ 1. INTRODUKTION ============
145145+146146+\section{Introduktion}
147147+148148+\ac{} er en mobil-først-køretid og et socialt netværk for kreativ computing, der omfatter 359 indbyggede interaktive programmer (``pieces''), et bare-metal Linux-operativsystem, der starter enhver x86\_64-maskine som et kreativt instrument, en minimal Lisp-dialekt til generativ kunst og et voksende fællesskab af 2.812 registrerede brugere~\citep{scudder2026ac}. Projektet er skrevet og vedligeholdt primært af en enkelt udvikler, @jeffrey, med AI-assisteret vedligeholdelse (``AestheticAnts''), der håndterer rutinemæssigt vedligehold.
149149+150150+Per marts 2026 har projektet produceret 19 forskningsartikler på fire sprog, et bare-metal OS, der starter på 7,3 sekunder~\citep{scudder2026os}, en blockchain-integration til prægning af generative kunstværker og et 7.912-linjers musikinstrument (\np{}), der er blevet systemets hoveddør~\citep{scudder2026notepat}. Kodebasen sporer sin linje gennem 94 forgængerprojekter, der spænder over mere end et årti af værktøjsfremstilling.
151151+152152+Denne artikel foreslår ikke, hvad \ac{} \emph{bør} gøre. Den forsøger at aflæse, hvad det \emph{sandsynligvis vil} gøre, baseret på det momentum, der allerede er synligt i koden, artiklerne, infrastrukturbeslutningerne og de filosofiske forpligtelser, der har formet projektet til dato.
153153+154154+% ============ 2. FIREOGHALVFEMS PROJEKTER ============
155155+156156+\section{Fireoghalvfems projekter og flere på vej}
157157+\label{sec:history}
158158+159159+Enhver fremskrivning af \ac{}'s fremtid må gøre op med dybden af dets fortid. Projektet er ikke en startup, der pivoter mod produkt-markedsfit. Det er den 95. iteration af en enkelt vedvarende undersøgelse: \emph{hvad bør et personligt kreativt computing-instrument være?}
160160+161161+\subsection{Tegnesoftware-linjen (2011--2020)}
162162+163163+Arkæologiartiklen~\citep{scudder2026archaeology} sporer \ac{} gennem 94 forgængerprojekter, der spænder over to GitHub-konti (50+ repositories), et 109\,GB legacy-serverarkiv og et Dropbox-korpus. Banen begynder med \textbf{thePRBAT} (Polygon Replicating Bitmap Authoring Tool, 2011), et Flash-baseret digitalt billedværktøj bygget som BFA-afhandling på Ringling College, og ankommer til \ac{} gennem et årti af tegnesoftware-varianter: \textbf{JeffreyPaint} (2014, JavaScript + Unity), \textbf{Finger Quilt} (2016, iOS/Swift), \textbf{Dot} (2017, en tegneapplikation, der foregriber AC's \texttt{plot}-disk), og vigtigst \textbf{No Paint} (2014--2020), der gennemgik fem inkarnationer---Rails, JavaScript-shim, WebGL-prototype, iOS/Cordova, Vercel-site---før det blev absorberet i \ac{}.
164164+165165+Dette er ikke en historie om forladte projekter. Det er en historie om \emph{genstarter}: den samme person, der stiller det samme spørgsmål, og vælger at starte forfra frem for at akkumulere funktioner. Mønstret er synligt i \ac{} selv: piece-modellen (enkelt fil, livscyklusfunktioner, immediate-mode grafik) er et begrænsnings-først-design, der \emph{forhindrer} den funktionsakkumulering, der dræbte tidligere iterationer.
166166+167167+\subsection{Performance-vendingen (2016--2018)}
168168+169169+Mellem 2016 og 2018 turnerede @jeffrey med Goodiepal \& Pals på tværs af 65+ spillesteder i Europa og byggede realtids-performanceværktøjer: publikumsdeltagelsesgrænseflader, musiknotationsrenderere, undertekstvisninger til live-forelæsninger. Disse værktøjer---bygget hurtigt, brugt én gang, smidt ud---etablerede et designprincip, der vedvarer i \ac{}: software som instrument, ikke som produkt. Værktøjerne blev spillet, ikke leveret.
170170+171171+Goodiepal-indflydelsen går dybere end samarbejde. Goodiepal-artiklen~\citep{scudder2026goodiepal} identificerer fem tråde, der fortsætter ind i \ac{}: instrument-først-design, fællesskab organiseret gennem affinitet snarere end institution, værker designet til at modstå digital reproduktion og radikal pædagogik gennem direkte engagement snarere end pensum.
172172+173173+\subsection{Hvorfor historien er vigtig for fremskrivning}
174174+175175+94-projekters historien begrænser vores fremskrivning på to måder. For det første gør den pludselige omlægninger usandsynlige. @jeffrey har kredset om de samme problemer---personlige værktøjer, kreative instrumenter, begrænsningsbaseret design---i 15 år. De næste 5 år vil næsten med sikkerhed forblive inden for denne bane. For det andet gør den opgivelse usandsynlig af de grunde, folk normalt opgiver projekter (kedsomhed, tab af interesse, tiltrækning af noget mere skinnende). Risikoen er ikke distraktion; det er udmattelse. Vi vender tilbage til dette i \S\ref{sec:giveup}.
176176+177177+% ============ 3. BØLGEN AF OVERSKYDENDE HARDWARE ============
178178+179179+\section{Bølgen af overskydende hardware}
180180+\label{sec:surplus}
181181+182182+Den enkeltstående største kraft, der påvirker \ac{}'s fremtid, er ekstern: i oktober 2025 afsluttede Microsoft understøttelsen af Windows 10, hvilket ifølge institutionelle standarder gjorde skønsmæssigt 240 millioner pc'er forældede~\citep{ewaste2024monitor}. Disse maskiner er ikke i stykker. De er ThinkPads, EliteBooks og Latitudes med 8--16\,GB RAM, 1080p-skærme, WiFi og 6--10 timers batterier. De koster \$30--80 på brugtmarkedet. De er råmaterialet til alt, der følger.
183183+184184+\subsection{Fra prototype til flåde (2026--2027)}
185185+186186+\acos{} starter allerede på overskydende hardware~\citep{scudder2026os}. Afstanden mellem ``starter på to ThinkPads i @jeffreys lejlighed'' og ``starter på 30 maskiner i et klasseværelse'' er ikke primært teknisk. Den er operationel: WiFi-legitimationshåndtering, per-enhedsidentitetsprovisionering, hardwarekompatibilitetstest på tværs af snesevis af laptopmodeller og en flashingworkflow, som en ikke-teknisk person kan udføre.
187187+188188+Det sandsynlige arbejde på kort sigt er prosaisk men kritisk:
189189+190190+\begin{itemize}
191191+ \item \textbf{Per-bruger WiFi-lagring}: flytning af hardkodede SSID'er ud af JavaScript-pieces og ind i persistente per-enheds-konfigurationsfiler, der overlever OTA-opdateringer
192192+ \item \textbf{Hardwarekompatibilitetsmatrix}: systematisk test på tværs af ThinkPad X1/T/L-serien, HP EliteBook 800-serien, Dell Latitude 5000/7000-serien
193193+ \item \textbf{Enkommando-flashing}: en USB-imagebygning, der tager et handle, farver og WiFi-legitimationsoplysninger og producerer et bootbart drev
194194+ \item \textbf{A/B-kernepladser}: dual-partition boot med automatisk rollback, hvis den nye kerne fejler sundhedstjek
195195+\end{itemize}
196196+197197+Disse er ikke glamourøse funktioner. De er forskellen mellem et kunstprojekt og et infrastrukturprojekt. Kodebasens kurs---OTA-opdateringer fungerer allerede, buildnavne genereres allerede, enhedsidentitet indskrives allerede i bootpartitionen---tyder på, at @jeffrey forstår denne forskel og bevæger sig mod infrastruktursiden.
198198+199199+\subsection{50-dollar-instrumentet (2027--2028)}
200200+201201+Hvis det operationelle arbejde lander, bliver det økonomiske argument meget højlydt: et komplet kreativt computing-instrument---personaliseret, selvopda\-terende, uden behov for nogen IT-infrastruktur---til prisen af en brugt laptop og et USB-drev. Ingen Chromebook-tilmelding. Intet Apple ID. Intet abonnement.
202202+203203+OLPC-projektet~\citep{kraemer2009olpc} demonstrerede, at hardware-først-tilgange til computing-adgang fejler på omkostninger og logistik. Raspberry Pi adresserede omkostninger (\$35) men kræver \$150 i tilbehør. \ac{}'s forslag er anderledes: hardwaren eksisterer allerede, har allerede en skærm, et tastatur, et batteri og WiFi og bliver kasseret i millionvis. Softwaren fylder 89\,MB.
204204+205205+Det sandsynlige resultat i 2028 er ikke masseadoption men \emph{bevispunkter}: en håndfuld klasseværelser, fællesskabscentre eller workshopkontekster, hvor flåder af 10--30 brugte maskiner kører \acos{}, og resultaterne dokumenteres. Disse bevispunkter bliver evidensgrundlaget for ansøgninger om støtte, institutionelle partnerskaber og bæredygtighedsargumenterne beskrevet i \S\ref{sec:sustainability}.
206206+207207+% ============ 3. PLANETARISKE ENSEMBLER ============
208208+209209+\section{Planetariske ensembler}
210210+\label{sec:ensembles}
211211+212212+PLOrk-artiklen~\citep{scudder2026plork} fremsætter et argument, som den eksisterende kodebase allerede understøtter: laptoporkestre har været musikalsk legitime, siden Princetons PLOrk beviste konceptet i 2006~\citep{trueman2006plork}, men modellen er fanget i universiteter til \$1.500+ per plads. \acos{} på overskydende hardware reducerer omkostningerne til \$50/plads. Spørgsmålet er, om nogen vil spille.
213213+214214+\subsection{notepat som ensembleinstrument (2026--2027)}
215215+216216+\np{} er allerede et polyfonisk keyboardinstrument med 32-stemmers syntese, rumklang og bølgetypevalg~\citep{scudder2026notepat}. Det kører på bare metal ved 192\,kHz. Den manglende ingrediens for ensembleperformance er ikke lydkvalitet men \emph{koordinering}: synkroniseret tempo, delt harmonisk rum og en dirigentgrænseflade.
217217+218218+Den sandsynlige udviklingssti:
219219+220220+\begin{itemize}
221221+ \item \textbf{UDP-ensemblesync}: udvidelse af den eksisterende dobbeltkanals-netværksforbindelse (WebSocket + UDP) til at synkronisere beat-ure på tværs af enheder i et lokalt netværk
222222+ \item \textbf{Dirigent-piece}: et nyt piece, der viser ensembletilstanden og lader en dirigent sætte tempo, toneart og dynamik
223223+ \item \textbf{Spatialisering}: brug af de fysiske positioner af brugte laptops som distribuerede højttalere---ensemblet \emph{er} lydsystemet, efter Turinos deltagende musikmodel~\citep{turino2008music}
224224+\end{itemize}
225225+226226+Denne tråd har åbenlyst konferenceappel. En live-demonstration af 10 brugte ThinkPads, der spiller et koordineret musikstykke---hver med spillerens handle i regnbuetekst, hver bidragende en stemme til et distribueret lydfelt---er den slags demo, der vinder omtale ved Ars Electronica og NIME-indsendelser.
227227+228228+\subsection{Ud over musik (2028--2031)}
229229+230230+Ensemblemodellen generaliserer ud over musik. Et netværk af brugte maskiner, der kører koordinerede pieces, kunne være:
231231+232232+\begin{itemize}
233233+ \item En \textbf{distribueret tegnevæg}: hver skærm viser en sektion af et større lærred, deltagere tegner lokalt, og netværket sammensætter resultatet
234234+ \item Et \textbf{kollaborativt KidLisp-miljø}: studerende skriver generative programmer, der føder ind i et delt visuelt rum
235235+ \item En \textbf{performancepartitur}: maskinerne udfører et grafisk partitur~\citep{scudder2026pieces}, hvor hver fortolker den samme notation gennem forskellige pieces
236236+\end{itemize}
237237+238238+Infrastrukturen for alt dette eksisterer allerede: WebSocket-relay, UDP-broadcast, per-enheds-identitet og en piece-model, der understøtter enhver kombination af grafik, lyd og input. Det, der mangler, er \emph{koreografien}---selve piecesne og de sociale former omkring dem.
239239+240240+% ============ DEN TREDJE DIMENSION ============
241241+242242+\section{Den tredje dimension}
243243+\label{sec:3d}
244244+245245+\ac{} opfattes i vid udstrækning som et 2D-system. Den immediate-mode grafik-API---\texttt{wipe}, \texttt{ink}, \texttt{line}, \texttt{box}---og pixelkunstæstetikken i de fleste pieces forstærker dette indtryk. Men infrastrukturen fortæller en anden historie. En fuld software-3D-rasterizer eksisterer allerede, et multiplayer-FPS leveres allerede, og de arkitektoniske valg i bare-metal OS'et positionerer 3D som den næste store udtryksmæssige grænse.
246246+247247+\subsection{Hvad der allerede virker}
248248+249249+Bare-metal OS'et inkluderer \texttt{graph3d.c}, en ~600-linjers CPU-softwarerasterizer med perspektivprojektion, frustum-klipning (Sutherland-Hodgman mod 6 klipplaner), dybdebuffer, per-vertex-farveinterpolation og teksturmapping med perspektivkorrekte barycentriske koordinater. JavaScript-API'en eksponerer dette gennem en \texttt{Form}-konstruktør: pieces skaber meshes med vertexpositioner, farver og teksturkoordinater og renderer dem med \texttt{ink(r,g,b).form(mesh)}.
250250+251251+To produktions-pieces demonstrerer systemet. \texttt{fps.mjs} leverer et førstepersonskamera med pointer lock, WASD-bevægelse, teksturerede grundplaner og roterende kuber. \texttt{1v1.mjs} udvider dette til et multiplayer-FPS med hitscan-våben, bot-AI (patrulje-/forfølgelses-/flugttilstande), drabssporing og dobbeltkanals-netværksmønsteret (WebSocket for pålidelige spilbegivenheder, UDP for lav-latens positionssynkronisering). Browserstien bruger Three.js (r0.182) med WebGL-rendering og inkluderer VR/XR-sessionsunderstøttelse~\citep{sutherland1968head}.
252252+253253+Systemet har altså to parallelle 3D-stier: en softwarerasterizer på bare metal (kun CPU, ingen GPU) og en hardwareaccelereret sti i browseren (WebGL/Three.js, med WebGPU-infrastruktur på plads). API-overfladen er identisk set fra piece-forfatterens perspektiv.
254254+255255+\subsection{GPU-spørgsmålet på bare metal (2026--2028)}
256256+257257+Softwarerasterizeren er elegant men fundamentalt begrænset. Hver brugt ThinkPad og EliteBook i målflåden har en Intel-integreret GPU, der kan OpenGL 4.x eller Vulkan 1.x, og som sidder ubrugt. Kernens DRM-delsystem styrer allerede skærmen via KMS-modesetting; at udvide det til at eksponere en rendernode for GPU-accelereret rasterisering er en kendt ingeniørmæssig sti (EGL på DRM eller Vulkan via \texttt{/dev/dri/renderD128}).
258258+259259+Den sandsynlige kurs er forsigtig. @jeffreys designinstinkt favoriserer softwarekontrol over hardwaredelegering---hele bare-metal OS-filosofien er ``kend enhver instruktion mellem tænding og pixel.'' GPU-drivere introducerer uigennemsigtighed: firmware-blobs, driverbug, leverandørspecifik opførsel. Softwarerasterizer-ens dyd er, at den er \emph{læsbar}: pipelinen fra vertex til pixel er 600 linjer C, som en studerende kan læse.
260260+261261+Det sandsynlige kompromis: GPU-acceleration som en opt-in-sti for pieces, der har brug for det, med softwarerasterizeren som standard og referenceimplementering. Dette afspejler browserarkitekturen, hvor WebGPU eksisterer ved siden af 2D-canvas men ikke erstatter det.
262262+263263+\subsection{3D som kreativt medie (2028--2031)}
264264+265265+Det mere interessante spørgsmål er ikke teknisk men udtryksmæssigt. Hvad betyder 3D i et system designet omkring begrænsning, umiddelbarhed og enkelt-fil-pieces?
266266+267267+Forgængerprojekterne giver et fingerpeg. @jeffreys arbejde har altid handlet om \emph{maleri}: No Paint, JeffreyPaint, thePRBAT, Radical Digital Painting-forelæsningsturnen. 3D-infrastrukturen bygger ikke mod en spilmotor eller et CAD-værktøj. Den bygger mod \emph{rumligt maleri}---evnen til at placere mærker, farver og former i tredimensionelt rum med den samme umiddelbarhed, som \texttt{ink(255,0,0).line(0,0,100,100)} giver i to dimensioner.
268268+269269+De pieces, der vil betyde noget, er ikke dem, der ligner Unity-demoer. De er dem, hvor 3D bruges, som @jeffrey bruger 2D: som råmateriale til instrumenter, til performances, til ting, der spilles frem for forbruges. Et 3D \np{}, hvor noder har rumlig position, og rumklangen er bogstavelig---lyd, der udstråler fra former fordelt i virtuelt rum. Et 3D KidLisp, hvor \texttt{(box 0 0 0 50 50 50)} placerer en kube, som \texttt{(rect 0 0 50 50)} placerer et rektangel. En flåde af brugte laptops, der hver renderer en anden kameravinkel af den samme distribuerede 3D-scene.
270270+271271+Konvergensen med ensembler (\S\ref{sec:ensembles}) er, hvor 3D bliver genuint nyt. Synkroniserede 3D-scener på tværs af netværksbaserede brugte maskiner---hver skærm et vindue ind i et delt virtuelt rum, hver spillers input påvirker scenen for alle deltagere---er en form, som hverken spilmotorer eller kreative kodningsværktøjer har udforsket til \$50/plads-prisklassen. Netværket er allerede bevist (\texttt{1v1.mjs}). Hardwaren er allerede tilgængelig (\S\ref{sec:surplus}). Det manglende stykke er den kunstneriske vision for, hvordan et distribueret rumligt instrument bør føles, og det er netop den slags spørgsmål, @jeffrey har brugt 94 projekter på at lære at besvare.
272272+273273+% ============ 5. DEN AKADEMISKE VENDING ============
274274+275275+\section{Den akademiske vending}
276276+\label{sec:scholarly}
277277+278278+Mellem 3. marts og 20. marts 2026 producerede @jeffrey 19 forskningsartikler på fire sprog. Dette er ikke normal opførsel for en soloutvikler. Det signalerer en bevidst vending mod akademisk legitimitet---et forsøg på at opbygge, hvad RESEARCH-DIRECTION.md-filen kalder en ``forskningsvoldgrav'' omkring projektet.
279279+280280+\subsection{Artikelfabrikken (2026--2027)}
281281+282282+Artikelinfrastrukturen er allerede industriel: en tilpasset \LaTeX{}-skabelon med AC-skrifttyper, automatiseret PDF-bygning via en server (``ovnen''), et kortformat til enkeltarks udskrifter og en oversættelsespipeline, der producerer danske, spanske og kinesiske udgaver af hver artikel. Biblioteket med 40+ læsninger leverer citationsgrundlaget. Pipelinen er designet til at producere, ikke til at prototypeudvikle.
283283+284284+Kursen på kort sigt er indsendelse: ACM C\&C Demos (16. april), ICCC Short Papers (24. april), JOSS softwareartikler (løbende). Hvis nogen af disse lander, opnår projektet et akademisk fodfæste, som de fleste kreative kodningsværktøjer aldrig opnår. Processing~\citep{reas2007processing} og Scratch~\citep{resnick2009scratch} opbyggede deres akademiske legitimitet over år; @jeffrey forsøger at komprimere den tidslinje ved at producere volumen og målrette flere fora samtidigt.
285285+286286+\subsection{Kunstner-forsker-identitet (2028--2031)}
287287+288288+CalArts-artiklen argumenterer for, at en kunstskole er et operativsystem---at de strukturer af nærhed, kritik og disciplinær kontaminering, der karakteriserer institutioner som CalArts, kan porteres ind i software. Hvis @jeffrey fortsætter med at publicere i dette tempo, bliver artiklerne selv et værk: ikke dokumentation af et softwareprojekt, men et vedvarende argument om, hvad kreativ computing er, og hvem det er til.
289289+290290+Det sandsynlige 5-årsresultat er et af to scenarier:
291291+292292+\begin{enumerate}
293293+ \item \textbf{Voldgraven holder}: 6--10 artikler publiceres i peer-reviewede fora, @jeffrey inviteres til at tale ved konferencer, og \ac{} indtræder i kanon ved siden af Processing, Scratch og Sonic Pi~\citep{aaron2016sonic} som et anerkendt kreativt computing-miljø. Artiklerne skaber en feedbackloop: akademisk opmærksomhed bringer brugere, brugere skaber pieces, pieces genererer nye artikler.
294294+ \item \textbf{Voldgraven holder ikke}: indsendelser afvises, soloforfattermønstret vækker bedømmernes opmærksomhed, og artikelinfrastrukturen går i dvale. Koden overlever; den akademiske identitet gør det ikke. Dette er det mere almindelige resultat for kunstner-programmører.
295295+\end{enumerate}
296296+297297+Det ærlige bud er et sted imellem: nogle få publikationer lander, nok til at etablere troværdighed i nicheforummer (NIME, xCoAx, ICLC), men de toneangivende HCI- og PL-konferencer forbliver uden for rækkevidde uden medforfattere og brugerstudier.
298298+299299+% ============ 5. KIDLISPS EGET LIV ============
300300+301301+\section{KidLisps eget liv}
302302+\label{sec:kidlisp}
303303+304304+KidLisp er en 118-funktioners Lisp-dialekt til generativ kunst~\citep{scudder2026kidlisp}. Den er sandboxed (ingen fil-I/O, intet netværk), kører i browseren og har allerede akkumuleret 16.779 gemte programmer og en blockchain-prægningsintegration via Tezos. Sproget er lille nok til at passe på et kartotekskort.
305305+306306+\subsection{Sprogfællesskab (2026--2028)}
307307+308308+Tezos ``keeps''-systemet---hvor KidLisp-programmer præges som on-chain kunstværker for 2,5 XTZ---skaber et økonomisk incitament til at skrive KidLisp. Keeps-kontrakten (v11) er live, prægnings-UI'et eksisterer på keeps.kidlisp.com, og 5 tokens er allerede præget og migreret. Hvis det generative kunstmarked forbliver aktivt, vedligeholder denne tråd sig selv.
309309+310310+Den mere interessante mulighed er pædagogisk. KidLisps begrænsninger---ingen tilstandsmutation, ingen sideeffekter ud over tegning, 118 funktioner, kører i en browser---gør det til en kandidat til undervisningsmiljøer. Et KidLisp-pensum bygget omkring kortformatet (enkeltarks-programmer, som studerende kan holde i hænderne) stemmer overens med Paperts konstruktionisme~\citep{papert1980mindstorms} og projektets eksisterende infrastruktur.
311311+312312+\subsection{Sprogevolution (2028--2031)}
313313+314314+KidLisp vil møde pres for at vokse. Brugere vil ønske tilstand, animation, interaktivitet, lyd. Designspørgsmålet er, om sproget absorberer disse funktioner (og bliver et generelt kreativt sprog) eller forbliver bevidst minimalt (et ``haiku-sprog'' for statisk generativ kunst, med JavaScript til alt andet).
315315+316316+Projektets historie tyder på det sidstnævnte. @jeffreys designinstinkt, synligt på tværs af 94 forgængerprojekter, favoriserer skarpe begrænsninger over funktionsakkumulering. Piece-modellen selv---enkelt fil, livscyklusfunktioner, immediate-mode grafik~\citep{scudder2026pieces}---er et begrænsnings-først-design. KidLisp vil sandsynligvis forblive lille. Den interessante vækst vil være i, hvad folk laver med det, ikke hvad sproget tilføjer.
317317+318318+% ============ 6. BÆREDYGTIGHED ============
319319+320320+\section{Bæredygtighedsspørgsmålet}
321321+\label{sec:sustainability}
322322+323323+Enhver tråd beskrevet ovenfor afhænger af, at en enkelt person fortsætter med at arbejde. \ac{} har ingen venturekapital, ingen institutionel opbakning og ingen ansatte ud over @jeffrey. AestheticAnts-vedligeholdelsessystemet automatiserer rutineopgaver, men arkitekturbeslutninger, artikelskrivning, hardwaretest og fællesskabspleje kræver menneskelig opmærksomhed.
324324+325325+\subsection{Finansieringslandskabet (2026--2028)}
326326+327327+Projektet har identificeret finansieringskilder: Creative Capital (\$50.000 projektbevillinger), Prix Ars Electronica (\texteuro10.000), Gary Marsden Travel Awards og GitHub Sponsors. Artikelfabrikken er delvist en ansøgningsstrategi: et projekt med 19 artikler, konferencedemoer og en dokumenteret brugerbase er en stærkere ansøger end et med kun kode.
328328+329329+Tezos-keeps giver en lille indtægtsstrøm. Tryk (20 bestilt per marts 2026) giver en anden. Ingen af dem er tilstrækkelige til at opretholde fuldtidsudvikling.
330330+331331+Den ærlige fremskrivning: i 2028 sikrer projektet sig enten en bevilling eller institutionel tilknytning (en residency, en undervisningsstilling, et forskningsstipendium) eller det nedsættes til vedligeholdelsesudvikling. Dette er ikke et fejlscenario---mange vigtige kreative værktøjer vedligeholdes deltids af deres skabere i årtier. Men de ambitiøse tråde (planetariske ensembler, flåder af overskydende hardware, akademisk voldgrav) kræver fuldtidsopmærksomhed.
332332+333333+\subsection{Soloforfattarrisikoen (2028--2031)}
334334+335335+Illichs ``værktøjer til konvivialitet''~\citep{illich1973tools} argumenterer for, at gode værktøjer bør kunne betjenes uden specialiseret ekspertise. \ac{} tilstræber dette for sine brugere, men projektet selv er ikke konvivialt i Illichs forstand: det kræver @jeffreys ekspertise at vedligeholde. Busfaktoren er én.
336336+337337+Afbødningen er allerede delvist på plads: kodebasen er open source, arkitekturen er dokumenteret i 19 artikler, piece-API'en er designet til enkelt-fil-enkelhed, og AestheticAnts-systemet håndterer rutinevedligeholdelse autonomt. Men forskellen mellem ``koden er åben'' og ``en anden kan lede projektet'' er enorm.
338338+339339+Den sandsynlige 5-årskurs: @jeffrey forbliver den eneste arkitekt. Et lille fællesskab af piece-forfattere bidrager med indhold (265 publicerede pieces og stigende). En eller to bidragydere indsender pull requests til specifikke funktioner. Projektet opnår ikke ``tusind bidragydere''-modellen fra Processing eller p5.js, men det behøver heller ikke---dets værdiforslag er ikke bredde men dybde: en enkelt vision, omhyggeligt vedligeholdt, der tager kreativ computing steder hen, som komité-designede værktøjer ikke kan nå.
340340+341341+% ============ 7. KONVERGENSEN ============
342342+343343+\section{Konvergensen}
344344+\label{sec:convergence}
345345+346346+De syv tråde beskrevet ovenfor er ikke parallelle spor. De konvergerer.
347347+348348+94-projekternes historie (\S\ref{sec:history}) etablerer den kurs, der gør de andre tråde læsbare. Overskydende hardware (\S\ref{sec:surplus}) leverer materialegrundlaget for planetariske ensembler (\S\ref{sec:ensembles}). 3D-infrastrukturen (\S\ref{sec:3d}) udvider ensemblemodellen til rumlig performance. Artiklerne (\S\ref{sec:scholarly}) dokumenterer og legitimerer alt det. KidLisp (\S\ref{sec:kidlisp}) leverer et sikkert indgangspunkt for nye brugere, der ankommer gennem enhver af disse kanaler. Bæredygtighed (\S\ref{sec:sustainability}) afgør, om konvergensen overhovedet sker---og \S\ref{sec:giveup} undersøger, hvad der sker, hvis den ikke gør.
349349+350350+Det mest sandsynlige 5-årsscenarie er dette: i 2031 er \ac{} et anerkendt men niche kreativt computing-miljø med:
351351+352352+\begin{itemize}
353353+ \item \textbf{5.000--10.000 registrerede brugere}, op fra 2.812, drevet af notepat-viralitet, konferencedemoer og klasseværelsesudrulninger
354354+ \item \textbf{Et bare-metal OS} deployeret på 100--500 brugte maskiner på tværs af 5--15 steder (skoler, fællesskabscentre, kunstresidencies, workshops)
355355+ \item \textbf{3--5 publicerede artikler} i peer-reviewede fora, der etablerer et minimalt akademisk fodaftryk
356356+ \item \textbf{50.000+ KidLisp-programmer}, med et lille men aktivt generativt kunstfællesskab, der præger keeps på Tezos
357357+ \item \textbf{Ensembleperformances} ved 2--3 festivaler eller konferencer, med flåder af brugte laptops som distribuerede instrumenter
358358+ \item \textbf{En enkelt vedligeholder}, der stadig skriver det meste af koden, med AI-assisteret vedligeholdelse, der håndterer en stigende andel af rutinearbejdet
359359+\end{itemize}
360360+361361+Dette er hverken det mest ambitiøse resultat eller det mest konservative. Det er det resultat, der er konsistent med et projekt, der har truffet specifikke, bevidste valg om, hvad det bekymrer sig om---dybde over bredde, instrumenter over IDE'er, vedligeholdelse over disruption---og som har infrastrukturen til at følge op på disse valg i det tempo, en soloutvikler kan opretholde.
362362+363363+% ============ 8. HVAD DER KUNNE ÆNDRE ALT ============
364364+365365+\section{Hvad der kunne ændre alt}
366366+\label{sec:wildcards}
367367+368368+Fremskrivninger baseret på momentum er pålidelige netop fordi de ignorerer diskontinuiteter. Fire jokere kunne ændre kursen totalt:
369369+370370+\subsection{Et institutionelt hjem}
371371+372372+Hvis @jeffrey tager en undervisningsstilling på en kunstskole eller et forskningsuniversitet, opnår \ac{} noget, det i øjeblikket mangler: studerende. En årgang af 15--30 studerende, der bruger \ac{} som deres primære kreative computing-miljø i et semester, ville producere flere pieces, flere fejlrapporter, flere brugscases og mere forskning end et årti af soloutvkling. CalArts-artiklens argument---at en kunstskole er et operativsystem---virker i den modsatte retning: operativsystemet kunne blive en skole.
373373+374374+\subsection{Et viralt øjeblik}
375375+376376+\np{} blev postet på Hacker News og modtog opmærksomhed. Et andet viralt øjeblik---en TikTok af et klasseværelse fuldt af brugte laptops, der spiller musik sammen, en tweet-tråd om det kreative instrument til \$50, en konferencedemo, der filmes og deles---kunne bringe tusindvis af brugere på en uge. Infrastrukturen (URL-adresserbare pieces, øjeblikkelig registrering, sociale funktioner) er designet til at absorbere dette. Om @jeffrey \emph{ønsker} at absorbere det, er et separat spørgsmål. Projektets anti-platformholdning~\citep{fisher2009capitalist} antyder ambivalens over for vækst-for-vækstens-skyld.
377377+378378+\subsection{AI som samarbejdspartner}
379379+380380+AestheticAnts-systemet bruger allerede AI til rutinevedligeholdelse. Agenthukommelsessystemet logger interaktioner og opretholder kontinuitet på tværs af samtaler. Hvis AI-kapaciteterne fortsætter med at avancere, kunne en fremtidig version af dette system gøre mere end vedligeholdelse: det kunne skrive pieces, generere KidLisp-programmer, komponere ensemblepartiturer og udarbejde artikler. Soloforfattarrisikoen (\S\ref{sec:sustainability}) mindskes, hvis ``soloforfatteren'' er forstærket af en AI-samarbejdspartner, der forstår projektets historie, filosofi og kodebase.
381381+382382+Dette er ikke spekulativt på den måde, de andre scenarier er. Det sker allerede. Spørgsmålet er et spørgsmål om grad: i 2031, håndterer AI 10\% af det kreative arbejde, eller 50\%? Svaret vil afhænge af de valg, @jeffrey træffer om, hvad han delegerer, og hvad han insisterer på at gøre selv. Projektets vægt på personlig stemme, på de ``PSYCHO''-artikler, der bærer forfatterens temperatur, tyder på, at det vigtigste arbejde forbliver menneskeligt. Infrastrukturen omkring det gør det måske ikke.
383383+384384+\subsection{Hvad hvis han stopper}
385385+\label{sec:giveup}
386386+387387+Fremskrivningerne ovenfor antager fortsat indsats. Men 94-projekternes historie (\S\ref{sec:history}) indeholder et mønster, der må nævnes: @jeffrey har forladt ting før. No Paint havde fem inkarnationer. Hver enkelt blev forladt, ikke fordi idéen mislykkedes, men fordi implementeringen stivnede---fordi kløften mellem, hvad værktøjet \emph{var}, og hvad det \emph{burde være}, blev uudholdelig. Genstarterne var ikke fejl i engagement. De var udtryk for det.
388388+389389+Risikoen for \ac{} er ikke, at @jeffrey mister interessen. Femten års kredsen om de samme problemer udelukker tilfældig opgivelse. Risikoen er \emph{strukturel udmattelse}: ophobningen af operationel vægt---serverregninger, brugersupport, hardwaretest, artikelindsendelser, ansøgninger om støtte, afhængighedsopdateringer---indtil vedligeholdelseslasten fortrænger det kreative arbejde, der gør projektet værd at vedligeholde. Ukeles~\citep{ukeles1969manifesto} argumenterede for, at vedligeholdelse er kunst, men selv Ukeles anerkendte, at vedligeholdelse uden anerkendelse bliver usynligt arbejde.
390390+391391+Tre scenarier for ophør fortjener overvejelse:
392392+393393+\begin{enumerate}
394394+ \item \textbf{Den stille bortfaden}: udviklingen aftager til sporadiske commits, serverne forbliver oppe, men fællesskabet driver væk, og \ac{} slutter sig til den lange liste af ambitiøse personlige værktøjer, der eksisterer som arkiver snarere end levende systemer. Dette er det mest almindelige resultat for soloforfattede kreative computing-projekter. Det er ikke dramatisk. Det er standarden.
395395+396396+ \item \textbf{Det bevidste stop}: @jeffrey erklærer projektet færdigt ved en naturlig grænse---måske når OS'et starter pålideligt på et dusin laptopmodeller, eller når artikelantallet når et rundt tal, eller når det 100. piece publiceres af en anden end ham. Han vender tilbage til at male på lærred (Venice Family Clinic-udstillingen i maj 2026 tyder på, at denne tråd allerede er aktiv). Koden forbliver åben. Nogen forker den måske. Mest sandsynligt gør ingen det.
397397+398398+ \item \textbf{Den 95. genstart}: @jeffrey forlader \ac{} for at bygge dens efterfølger. Dette er det mønster, historien forudsiger stærkest. No Paint blev til \ac{}. \ac{} kunne blive til noget andet---noget, der absorberer lektionerne fra OS'et, piece-modellen, ensemblenetværket og 3D-rasterizeren, men kaster den akkumulerede infrastrukturvægt af. Det nye projekt starter rent, i en enkelt fil, og cyklussen begynder igen. Udefra ligner dette fiasko. Indefra i den 94 projekters linje ligner det processen, der virker præcis som designet.
399399+\end{enumerate}
400400+401401+Den ærlige vurdering: scenarie 3 er usandsynligt inden for 5 år, fordi \ac{} har opnået flugthastighed på måder, No Paint aldrig gjorde---en registreret brugerbase, et bare-metal OS, en blockchain-integration, 19 artikler, et sprog med 16.000+ programmer. Den investerede indsats er for stor til en ren genstart. Men scenarie 1 er fuldt ud muligt, hvis bæredygtighedsspørgsmålet (\S\ref{sec:sustainability}) forbliver ubesvaret. Et projekt af denne ambition, vedligeholdt af én person uden stabil finansiering, er altid ét dårligt år fra den stille bortfaden.
402402+403403+Afbødningen er den samme, der har opretholdt projektet indtil nu: at gøre selve arbejdet tilstrækkeligt givende til, at den operationelle byrde er til at bære. Artiklerne, performancerne, 3D-rasterizeren skrevet fra bunden, bare-metal-boot, der tager 7 sekunder---disse er ikke funktioner på en køreplan. De er den kreative praksis. Hvis praksis ophører med at være interessant, stopper projektet. Hvis den forbliver interessant, overlever projektet alt andet end at lyset slukkes.
404404+405405+% ============ 10. KONKLUSION ============
406406+407407+\section{Konklusion}
408408+409409+Aesthetic Computer er et projekt, der ved, hvad det er. Det søger ikke produktmarkedsfit, pivoter ikke mod enterprise og optimerer ikke for vækstmetrikker. Det er et personligt kreativt computing-instrument, der bygges offentligt af en enkelt person, som har lavet versioner af det i mere end et årti på tværs af 94 forgængerprojekter.
410410+411411+De næste fem år vil blive formet af kræfter, der er både interne (det tempo @jeffrey kan opretholde, den finansiering han kan sikre) og eksterne (240 millioner brugte pc'er, den generative kunstøkonomi, den akademiske konferencecyklus). Projektets infrastruktur---bare-metal OS, artikelfabrik, piece-model, socialt netværk, blockchain-prægning---er bygget til at absorbere disse kræfter. Om det vil, er et spørgsmål om udholdenhed, held og verdens vilje til at bekymre sig om kreative computing-værktøjer, der ikke ejes af en platform.
412412+413413+Nelson skrev i 1974, at ``du kan og skal forstå computere NU''~\citep{nelson1974computerlib}. Illich skrev i 1973, at værktøjer bør udvide personlig autonomi, ikke kræve institutionel formidling~\citep{illich1973tools}. Ukeles skrev i 1969, at vedligeholdelse er kunst~\citep{ukeles1969manifesto}. \ac{} er syntesen: et værktøj, der er personligt, konvivialt og vedligeholdt som en kreativ praksis. Væddemålet er, at denne syntese, anvendt på overskydende hardware og opretholdt over tid, skaber noget, der varer.
414414+415415+Om det gør, er det eneste interessante spørgsmål. Denne artikel tilbyder intet svar, kun en aflæsning af de kræfter i spil. Koden vil afgøre det.
416416+417417+\vspace{0.5em}
418418+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
419419+420420+\vspace{0.5em}\noindent\textit{Oversat fra engelsk. Originalversion tilgængelig på \url{https://papers.aesthetic.computer}}
421421+422422+% ============ REFERENCES ============
423423+424424+\bibliographystyle{plainnat}
425425+\bibliography{references}
426426+427427+\end{document}
+427
papers/arxiv-futures/futures-es.tex
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+1111+\setmainfont{Latin Modern Roman}
1212+\setsansfont{Latin Modern Sans}
1313+1414+% Custom AC fonts
1515+\newfontfamily\acbold{ywft-processing-bold}[
1616+ Path=../../system/public/type/webfonts/,
1717+ Extension=.ttf
1818+]
1919+\newfontfamily\aclight{ywft-processing-light}[
2020+ Path=../../system/public/type/webfonts/,
2121+ Extension=.ttf
2222+]
2323+\setmonofont{Latin Modern Mono}[Scale=0.85]
2424+2525+% === PACKAGES ===
2626+\usepackage{xcolor}
2727+\usepackage{titlesec}
2828+\usepackage{enumitem}
2929+\usepackage{booktabs}
3030+\usepackage{tabularx}
3131+\usepackage{fancyhdr}
3232+\usepackage{hyperref}
3333+\usepackage{graphicx}
3434+\graphicspath{{figures/}{../../papers/arxiv-ac/figures/}}
3535+\usepackage{ragged2e}
3636+\usepackage{microtype}
3737+\usepackage{natbib}
3838+\usepackage[colorspec=0.92]{draftwatermark}
3939+4040+% === COLORS (AC palette) ===
4141+\definecolor{acpink}{RGB}{180,72,135}
4242+\definecolor{acpurple}{RGB}{120,80,180}
4343+\definecolor{acdark}{RGB}{64,56,74}
4444+\definecolor{acgray}{RGB}{119,119,119}
4545+\definecolor{draftcolor}{RGB}{180,72,135}
4646+4747+% === DRAFT WATERMARK ===
4848+\DraftwatermarkOptions{
4949+ text=WORKING DRAFT,
5050+ fontsize=3cm,
5151+ color=draftcolor!18,
5252+ angle=45,
5353+ pos={0.5\paperwidth, 0.5\paperheight}
5454+}
5555+5656+% === HYPERREF ===
5757+\hypersetup{
5858+ colorlinks=true,
5959+ linkcolor=acpurple,
6060+ urlcolor=acpurple,
6161+ citecolor=acpurple,
6262+ pdfauthor={@jeffrey},
6363+ pdftitle={Cinco años a partir de ahora: En qué probablemente se convierte Aesthetic Computer},
6464+}
6565+6666+% === SECTION FORMATTING ===
6767+\titleformat{\section}
6868+ {\normalfont\bfseries\normalsize\uppercase}
6969+ {\thesection.}
7070+ {0.5em}
7171+ {}
7272+\titlespacing{\section}{0pt}{1.2em}{0.3em}
7373+7474+\titleformat{\subsection}
7575+ {\normalfont\bfseries\small}
7676+ {\thesubsection}
7777+ {0.5em}
7878+ {}
7979+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
8080+8181+% === HEADER/FOOTER ===
8282+\pagestyle{fancy}
8383+\fancyhf{}
8484+\renewcommand{\headrulewidth}{0pt}
8585+\fancyhead[C]{\footnotesize\color{acpink}\textit{Borrador de trabajo --- no citar}}
8686+\fancyfoot[C]{\footnotesize\thepage}
8787+8888+% === CUSTOM COMMANDS ===
8989+\newcommand{\ac}{\textsc{Aesthetic Computer}}
9090+\newcommand{\acos}{\textsc{AC Native OS}}
9191+\newcommand{\np}{\textsc{notepat}}
9292+9393+% === LIST SETTINGS ===
9494+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
9595+\setlist[enumerate]{nosep, leftmargin=1.2em}
9696+9797+% === COLUMN SEPARATION ===
9898+\setlength{\columnsep}{1.8em}
9999+100100+% === PARAGRAPH SETTINGS ===
101101+\setlength{\parindent}{1em}
102102+\setlength{\parskip}{0.3em}
103103+104104+% Hyphenation for narrow two-column layout
105105+\tolerance=800
106106+\emergencystretch=1em
107107+\hyphenpenalty=50
108108+109109+\begin{document}
110110+111111+% ============ TITLE BLOCK ============
112112+113113+\twocolumn[{%
114114+\begin{center}
115115+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
116116+{\acbold\fontsize{22pt}{26pt}\selectfont\color{acdark} Cinco años a partir de ahora}\par
117117+\vspace{0.2em}
118118+{\aclight\fontsize{11pt}{13pt}\selectfont\color{acpink} En qué probablemente se convierte Aesthetic Computer}\par
119119+\vspace{0.3em}
120120+{\aclight\fontsize{9pt}{11pt}\selectfont\color{acgray} Hardware excedente, instrumentos espaciales y el juego largo de una herramienta personal}\par
121121+\vspace{0.6em}
122122+{\normalsize @jeffrey}\par
123123+{\small\color{acgray} Aesthetic.Computer}\par
124124+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
125125+\vspace{0.3em}
126126+{\small\color{acpurple} \url{https://aesthetic.computer}}\par
127127+\vspace{0.6em}
128128+\rule{\textwidth}{1.5pt}
129129+\vspace{0.5em}
130130+\end{center}
131131+132132+\begin{center}
133133+{\small\color{acpink}\textbf{[ borrador de trabajo --- no citar ]}}
134134+\end{center}
135135+\vspace{0.3em}
136136+137137+\begin{quote}
138138+\small\noindent\textbf{Resumen.}
139139+Este artículo extrapola los próximos cinco años (2026--2031) de \ac{} basándose en la trayectoria actual del proyecto, la infraestructura existente, las ambiciones declaradas y las fuerzas---económicas, culturales y materiales---que actúan sobre él. Argumentamos que el proyecto probablemente evolucionará a lo largo de siete ejes convergentes: (1)~la continuidad de un linaje creativo de 94 proyectos que restringe el espacio de futuros probables, (2)~la maduración de \acos{} en un instrumento desplegable para hardware excedente a escala, (3)~la emergencia de ensambles distribuidos de portátiles como forma musical y pedagógica, (4)~la expansión del 3D desde rasterizador por software a medio creativo espacial, (5)~la profundización de una identidad académica a través de la producción sostenida de artículos, (6)~el crecimiento de KidLisp en una comunidad creativa lingüística autosuficiente, y (7)~un ajuste de cuentas con la sostenibilidad---incluyendo la posibilidad del cese deliberado o involuntario del proyecto---que determinará si sobrevive a sus propias ambiciones. Esto no es una hoja de ruta. Es una lectura del impulso---un intento de preguntar en qué \emph{quiere convertirse} un proyecto basándose en lo que ya ha elegido hacer.
140140+\end{quote}
141141+\vspace{0.5em}
142142+}]
143143+144144+% ============ 1. INTRODUCCIÓN ============
145145+146146+\section{Introducción}
147147+148148+\ac{} es un entorno de ejecución mobile-first y una red social para la computación creativa, que comprende 359 programas interactivos integrados (``pieces''), un sistema operativo Linux bare-metal que arranca cualquier máquina x86\_64 como instrumento creativo, un dialecto Lisp mínimo para arte generativo y una comunidad creciente de 2.812 usuarios registrados~\citep{scudder2026ac}. El proyecto es escrito y mantenido principalmente por un solo desarrollador, @jeffrey, con mantenimiento asistido por IA (``AestheticAnts'') encargándose de las tareas rutinarias.
149149+150150+A marzo de 2026, el proyecto ha producido 19 artículos de investigación en cuatro idiomas, un SO bare-metal que arranca en 7,3 segundos~\citep{scudder2026os}, una integración blockchain para acuñar obras de arte generativo, y un instrumento musical de 7.912 líneas (\np{}) que se ha convertido en la puerta de entrada del sistema~\citep{scudder2026notepat}. La base de código traza su linaje a través de 94 proyectos predecesores que abarcan más de una década de fabricación de herramientas.
151151+152152+Este artículo no propone lo que \ac{} \emph{debería} hacer. Intenta leer lo que \emph{probablemente hará}, basándose en el impulso ya visible en el código, los artículos, las decisiones de infraestructura y los compromisos filosóficos que han dado forma al proyecto hasta la fecha.
153153+154154+% ============ 2. NOVENTA Y CUATRO PROYECTOS ============
155155+156156+\section{Noventa y cuatro proyectos y contando}
157157+\label{sec:history}
158158+159159+Cualquier proyección del futuro de \ac{} debe confrontar la profundidad de su pasado. El proyecto no es una startup pivotando hacia el ajuste producto-mercado. Es la iteración número 95 de una única investigación sostenida: \emph{¿qué debería ser un instrumento personal de computación creativa?}
160160+161161+\subsection{El linaje del software de dibujo (2011--2020)}
162162+163163+El artículo de arqueología~\citep{scudder2026archaeology} traza \ac{} a través de 94 proyectos predecesores que abarcan dos cuentas de GitHub (más de 50 repositorios), un archivo de servidor legado de 109\,GB y un corpus de Dropbox. La trayectoria comienza con \textbf{thePRBAT} (Polygon Replicating Bitmap Authoring Tool, 2011), una herramienta de imagen digital basada en Flash construida como tesis de BFA en Ringling College, y llega a \ac{} a través de una década de variantes de software de dibujo: \textbf{JeffreyPaint} (2014, JavaScript + Unity), \textbf{Finger Quilt} (2016, iOS/Swift), \textbf{Dot} (2017, una aplicación de trazado que prefigura el disco \texttt{plot} de AC), y lo más importante \textbf{No Paint} (2014--2020), que pasó por cinco encarnaciones---Rails, shim JavaScript, prototipo WebGL, iOS/Cordova, sitio Vercel---antes de ser absorbido en \ac{}.
164164+165165+Esta no es una historia de proyectos abandonados. Es una historia de \emph{reinicios}: la misma persona, haciendo la misma pregunta, eligiendo empezar de nuevo en lugar de acumular funcionalidades. El patrón es visible en \ac{} mismo: el modelo de pieces (archivo único, funciones de ciclo de vida, gráficos en modo inmediato) es un diseño que prioriza las restricciones y que \emph{previene} la acumulación de funcionalidades que mató iteraciones anteriores.
166166+167167+\subsection{El giro performático (2016--2018)}
168168+169169+Entre 2016 y 2018, @jeffrey realizó giras con Goodiepal \& Pals por más de 65 escenarios en Europa, construyendo herramientas de performance en tiempo real: interfaces de participación del público, renderizadores de notación musical, pantallas de subtítulos para conferencias en vivo. Estas herramientas---construidas rápido, usadas una vez, descartadas---establecieron un principio de diseño que persiste en \ac{}: software como instrumento, no como producto. Las herramientas se tocaban, no se enviaban.
170170+171171+La influencia de Goodiepal va más allá de la colaboración. El artículo sobre Goodiepal~\citep{scudder2026goodiepal} identifica cinco hilos que se trasladan a \ac{}: diseño que prioriza el instrumento, comunidad organizada por afinidad en lugar de institución, obras diseñadas para resistir la reproducción digital y pedagogía radical a través del compromiso directo en lugar del currículo.
172172+173173+\subsection{Por qué la historia importa para la proyección}
174174+175175+La historia de 94 proyectos restringe nuestra proyección de dos maneras. Primero, hace improbables los giros repentinos. @jeffrey ha estado orbitando los mismos problemas---herramientas personales, instrumentos creativos, diseño basado en restricciones---durante 15 años. Los próximos 5 años casi con certeza permanecerán dentro de esta órbita. Segundo, hace improbable el abandono por las razones por las que la gente suele abandonar proyectos (aburrimiento, pérdida de interés, atracción por algo más brillante). El riesgo no es la distracción; es el agotamiento. Volvemos a esto en \S\ref{sec:giveup}.
176176+177177+% ============ 3. LA OLA DE HARDWARE EXCEDENTE ============
178178+179179+\section{La ola de hardware excedente}
180180+\label{sec:surplus}
181181+182182+La mayor fuerza individual que actúa sobre el futuro de \ac{} es externa: en octubre de 2025, Microsoft finalizó el soporte para Windows 10, convirtiendo en obsoletos según estándares institucionales unos 240 millones de PC estimados~\citep{ewaste2024monitor}. Estas máquinas no están rotas. Son ThinkPads, EliteBooks y Latitudes con 8--16\,GB de RAM, pantallas 1080p, WiFi y baterías de 6--10 horas. Cuestan \$30--80 en el mercado de excedentes. Son la materia prima para todo lo que sigue.
183183+184184+\subsection{De prototipo a flota (2026--2027)}
185185+186186+\acos{} ya arranca en hardware excedente~\citep{scudder2026os}. La brecha entre ``arranca en dos ThinkPads en el apartamento de @jeffrey'' y ``arranca en 30 máquinas en un aula'' no es principalmente técnica. Es operativa: gestión de credenciales WiFi, aprovisionamiento de identidad por dispositivo, pruebas de compatibilidad de hardware en docenas de modelos de portátiles y un flujo de trabajo de flasheo que una persona no técnica pueda ejecutar.
187187+188188+El trabajo probable a corto plazo es prosaico pero crítico:
189189+190190+\begin{itemize}
191191+ \item \textbf{Almacenamiento WiFi por usuario}: mover los SSID codificados fuera de los pieces JavaScript a archivos de configuración persistentes por dispositivo que sobrevivan actualizaciones OTA
192192+ \item \textbf{Matriz de compatibilidad de hardware}: pruebas sistemáticas en las series ThinkPad X1/T/L, HP EliteBook 800, Dell Latitude 5000/7000
193193+ \item \textbf{Flasheo con un solo comando}: un constructor de imagen USB que tome un handle, colores y credenciales WiFi y produzca una unidad arrancable
194194+ \item \textbf{Slots de kernel A/B}: arranque de doble partición con reversión automática si el nuevo kernel falla las comprobaciones de salud
195195+\end{itemize}
196196+197197+Estas no son funcionalidades glamurosas. Son la diferencia entre un proyecto artístico y un proyecto de infraestructura. La trayectoria de la base de código---las actualizaciones OTA ya funcionan, los nombres de compilación ya se generan, la identidad del dispositivo ya se inscribe en la partición de arranque---sugiere que @jeffrey comprende esta distinción y se está moviendo hacia el lado de la infraestructura.
198198+199199+\subsection{El instrumento de 50 dólares (2027--2028)}
200200+201201+Si el trabajo operativo se materializa, el argumento económico se vuelve muy elocuente: un instrumento de computación creativa completo---personalizado, autoactualizable, sin requerir infraestructura de TI---por el precio de un portátil excedente y una unidad USB. Sin matriculación Chromebook. Sin Apple ID. Sin suscripción.
202202+203203+El proyecto OLPC~\citep{kraemer2009olpc} demostró que los enfoques de hardware primero para el acceso a la computación fracasan en costos y logística. La Raspberry Pi abordó el costo (\$35) pero requiere \$150 en accesorios. La propuesta de \ac{} es diferente: el hardware ya existe, ya tiene pantalla, teclado, batería y WiFi, y está siendo descartado por millones. El software ocupa 89\,MB.
204204+205205+El resultado probable para 2028 no es la adopción masiva sino \emph{puntos de prueba}: un puñado de aulas, centros comunitarios o contextos de talleres donde flotas de 10--30 máquinas excedentes ejecutan \acos{} y los resultados se documentan. Estos puntos de prueba se convierten en la base de evidencia para solicitudes de subvenciones, alianzas institucionales y los argumentos de sostenibilidad descritos en \S\ref{sec:sustainability}.
206206+207207+% ============ 3. ENSAMBLES PLANETARIOS ============
208208+209209+\section{Ensambles planetarios}
210210+\label{sec:ensembles}
211211+212212+El artículo sobre PLOrk~\citep{scudder2026plork} presenta un argumento que la base de código existente ya respalda: las orquestas de portátiles han sido musicalmente legítimas desde que el PLOrk de Princeton demostró el concepto en 2006~\citep{trueman2006plork}, pero el modelo está atrapado en universidades a \$1.500+ por plaza. \acos{} sobre hardware excedente reduce el costo a \$50/plaza. La pregunta es si alguien tocará.
213213+214214+\subsection{notepat como instrumento de ensamble (2026--2027)}
215215+216216+\np{} ya es un instrumento de teclado polifónico con síntesis de 32 voces, reverberación de sala y selección de tipo de onda~\citep{scudder2026notepat}. Corre sobre bare metal a 192\,kHz. El ingrediente que falta para la performance en ensamble no es la calidad de audio sino la \emph{coordinación}: tempo sincronizado, espacio armónico compartido y una interfaz de director.
217217+218218+La ruta de desarrollo probable:
219219+220220+\begin{itemize}
221221+ \item \textbf{Sincronización UDP de ensamble}: extender la red de doble canal existente (WebSocket + UDP) para sincronizar relojes de tempo entre dispositivos en una red local
222222+ \item \textbf{Piece de director}: un nuevo piece que muestre el estado del ensamble y permita al director establecer tempo, tonalidad y dinámica
223223+ \item \textbf{Espacialización}: usar las posiciones físicas de los portátiles excedentes como altavoces distribuidos---el ensamble \emph{es} el sistema de sonido, siguiendo el modelo de música participativa de Turino~\citep{turino2008music}
224224+\end{itemize}
225225+226226+Este hilo tiene un evidente atractivo para conferencias. Una demostración en vivo de 10 ThinkPads excedentes tocando una pieza musical coordinada---cada uno mostrando el handle del intérprete en texto arcoíris, cada uno contribuyendo una voz a un campo sonoro distribuido---es el tipo de demo que gana menciones en Ars Electronica y presentaciones en NIME.
227227+228228+\subsection{Más allá de la música (2028--2031)}
229229+230230+El modelo de ensamble se generaliza más allá de la música. Una red de máquinas excedentes ejecutando pieces coordinados podría ser:
231231+232232+\begin{itemize}
233233+ \item Un \textbf{muro de dibujo distribuido}: cada pantalla muestra una sección de un lienzo mayor, los participantes dibujan localmente y la red compone el resultado
234234+ \item Un \textbf{entorno colaborativo de KidLisp}: los estudiantes escriben programas generativos que alimentan un espacio visual compartido
235235+ \item Una \textbf{partitura de performance}: las máquinas ejecutan una partitura gráfica~\citep{scudder2026pieces}, cada una interpretando la misma notación a través de diferentes pieces
236236+\end{itemize}
237237+238238+La infraestructura para todo esto ya existe: relay WebSocket, broadcast UDP, identidad por dispositivo y un modelo de pieces que soporta cualquier combinación de gráficos, audio e input. Lo que falta es la \emph{coreografía}---los propios pieces y las formas sociales a su alrededor.
239239+240240+% ============ LA TERCERA DIMENSIÓN ============
241241+242242+\section{La tercera dimensión}
243243+\label{sec:3d}
244244+245245+\ac{} es ampliamente percibido como un sistema 2D. La API gráfica en modo inmediato---\texttt{wipe}, \texttt{ink}, \texttt{line}, \texttt{box}---y la estética pixel-art de la mayoría de los pieces refuerzan esta impresión. Pero la infraestructura cuenta una historia diferente. Un rasterizador 3D por software completo ya existe, un FPS multijugador ya se distribuye, y las decisiones arquitectónicas tomadas en el SO bare-metal posicionan el 3D como la próxima gran frontera expresiva.
246246+247247+\subsection{Lo que ya funciona}
248248+249249+El SO bare-metal incluye \texttt{graph3d.c}, un rasterizador por software CPU de ~600 líneas con proyección en perspectiva, recorte de frustum (Sutherland-Hodgman contra 6 planos de recorte), buffer de profundidad, interpolación de color por vértice y mapeo de texturas con coordenadas baricéntricas con corrección de perspectiva. La API JavaScript expone esto a través de un constructor \texttt{Form}: los pieces crean mallas con posiciones de vértices, colores y coordenadas de textura, luego las renderizan con \texttt{ink(r,g,b).form(mesh)}.
250250+251251+Dos pieces de producción demuestran el sistema. \texttt{fps.mjs} proporciona una cámara en primera persona con bloqueo de puntero, movimiento WASD, planos de suelo texturizados y cubos giratorios. \texttt{1v1.mjs} extiende esto a un FPS multijugador con armas hitscan, IA de bots (estados de patrulla/persecución/huida), seguimiento de bajas y el patrón de red de doble canal (WebSocket para eventos de juego confiables, UDP para sincronización de posición de baja latencia). La ruta del navegador usa Three.js (r0.182) con renderizado WebGL e incluye soporte de sesión VR/XR~\citep{sutherland1968head}.
252252+253253+El sistema tiene así dos rutas 3D paralelas: un rasterizador por software en bare metal (solo CPU, sin GPU) y una ruta acelerada por hardware en el navegador (WebGL/Three.js, con infraestructura WebGPU preparada). La superficie de API es idéntica desde la perspectiva del autor del piece.
254254+255255+\subsection{La cuestión de la GPU en bare metal (2026--2028)}
256256+257257+El rasterizador por software es elegante pero fundamentalmente limitado. Cada ThinkPad y EliteBook excedente en la flota objetivo tiene una GPU integrada Intel capaz de OpenGL 4.x o Vulkan 1.x, inactiva. El subsistema DRM del kernel ya gestiona la pantalla mediante modesetting KMS; extenderlo para exponer un nodo de renderizado para rasterización acelerada por GPU es un camino de ingeniería conocido (EGL sobre DRM, o Vulkan vía \texttt{/dev/dri/renderD128}).
258258+259259+La trayectoria probable es cautelosa. El instinto de diseño de @jeffrey favorece el control por software sobre la delegación al hardware---toda la filosofía del SO bare-metal es ``conocer cada instrucción entre el encendido y el píxel.'' Los controladores de GPU introducen opacidad: blobs de firmware, errores de controladores, comportamiento específico del fabricante. La virtud del rasterizador por software es que es \emph{legible}: la cadena desde el vértice hasta el píxel son 600 líneas de C que un estudiante puede leer.
260260+261261+El compromiso probable: aceleración GPU como ruta opcional para pieces que lo necesiten, con el rasterizador por software permaneciendo como predeterminado y la implementación de referencia. Esto refleja la arquitectura del navegador, donde WebGPU existe junto al canvas 2D pero no lo reemplaza.
262262+263263+\subsection{3D como medio creativo (2028--2031)}
264264+265265+La pregunta más interesante no es técnica sino expresiva. ¿Qué significa el 3D en un sistema diseñado en torno a la restricción, la inmediatez y los pieces de archivo único?
266266+267267+Los proyectos predecesores ofrecen una pista. El trabajo de @jeffrey siempre ha tratado sobre \emph{pintura}: No Paint, JeffreyPaint, thePRBAT, la gira de conferencias Radical Digital Painting. La infraestructura 3D no se construye hacia un motor de juegos o una herramienta CAD. Se construye hacia la \emph{pintura espacial}---la capacidad de colocar marcas, colores y formas en el espacio tridimensional con la misma inmediatez que \texttt{ink(255,0,0).line(0,0,100,100)} proporciona en dos dimensiones.
268268+269269+Los pieces que importarán no son los que parecen demos de Unity. Son aquellos donde el 3D se usa como @jeffrey usa el 2D: como materia prima para instrumentos, para performances, para cosas que se tocan en lugar de consumirse. Un \np{} 3D donde las notas tienen posición espacial y la reverberación de sala es literal---sonido emanando de formas distribuidas en el espacio virtual. Un KidLisp 3D donde \texttt{(box 0 0 0 50 50 50)} coloca un cubo como \texttt{(rect 0 0 50 50)} coloca un rectángulo. Una flota de portátiles excedentes, cada uno renderizando un ángulo de cámara diferente de la misma escena 3D distribuida.
270270+271271+La convergencia con los ensambles (\S\ref{sec:ensembles}) es donde el 3D se vuelve genuinamente nuevo. Escenas 3D sincronizadas a través de máquinas excedentes en red---cada pantalla una ventana a un espacio virtual compartido, el input de cada jugador afectando la escena para todos los participantes---es una forma que ni los motores de juegos ni las herramientas de codificación creativa han explorado al precio de \$50/plaza. La red ya está probada (\texttt{1v1.mjs}). El hardware ya está disponible (\S\ref{sec:surplus}). La pieza que falta es la visión artística de cómo debería sentirse un instrumento espacial distribuido, y esa es precisamente el tipo de pregunta que @jeffrey ha pasado 94 proyectos aprendiendo a responder.
272272+273273+% ============ 5. EL GIRO ACADÉMICO ============
274274+275275+\section{El giro académico}
276276+\label{sec:scholarly}
277277+278278+Entre el 3 y el 20 de marzo de 2026, @jeffrey produjo 19 artículos de investigación en cuatro idiomas. Este no es un comportamiento normal para un desarrollador en solitario. Señala un giro deliberado hacia la legitimidad académica---un intento de construir lo que el archivo RESEARCH-DIRECTION.md llama un ``foso de investigación'' alrededor del proyecto.
279279+280280+\subsection{La fábrica de artículos (2026--2027)}
281281+282282+La infraestructura de artículos ya es industrial: una plantilla \LaTeX{} personalizada con fuentes de AC, construcción automatizada de PDF vía un servidor (``el horno''), un formato de tarjetas para impresiones de una sola hoja, y un pipeline de traducción que produce ediciones en danés, español y chino de cada artículo. La biblioteca de más de 40 lecturas proporciona la base de citaciones. El pipeline está diseñado para producir, no para prototipar.
283283+284284+La trayectoria a corto plazo es la presentación: ACM C\&C Demos (16 de abril), ICCC Short Papers (24 de abril), artículos de software JOSS (continuo). Si alguno de estos resulta aceptado, el proyecto gana un punto de apoyo académico que la mayoría de las herramientas de codificación creativa nunca alcanzan. Processing~\citep{reas2007processing} y Scratch~\citep{resnick2009scratch} construyeron su legitimidad académica a lo largo de años; @jeffrey intenta comprimir esa línea temporal produciendo volumen y apuntando a múltiples foros simultáneamente.
285285+286286+\subsection{Identidad artista-académico (2028--2031)}
287287+288288+El artículo sobre CalArts argumenta que una escuela de arte es un sistema operativo---que las estructuras de proximidad, crítica y contaminación disciplinaria que caracterizan instituciones como CalArts pueden portarse al software. Si @jeffrey continúa publicando a este ritmo, los artículos mismos se convierten en un cuerpo de obra: no documentación de un proyecto de software, sino un argumento sostenido sobre qué es la computación creativa y para quién es.
289289+290290+El resultado probable a 5 años es uno de dos escenarios:
291291+292292+\begin{enumerate}
293293+ \item \textbf{El foso se mantiene}: 6--10 artículos se publican en foros con revisión por pares, @jeffrey es invitado a hablar en conferencias, y \ac{} entra en el canon junto a Processing, Scratch y Sonic Pi~\citep{aaron2016sonic} como un entorno de computación creativa reconocido. Los artículos crean un ciclo de retroalimentación: la atención académica trae usuarios, los usuarios crean pieces, los pieces generan nuevos artículos.
294294+ \item \textbf{El foso no se mantiene}: las presentaciones son rechazadas, el patrón de autor único levanta sospechas entre los revisores, y la infraestructura de artículos se vuelve latente. El código sobrevive; la identidad académica no. Este es el resultado más común para artistas-programadores.
295295+\end{enumerate}
296296+297297+La apuesta honesta está en algún punto intermedio: unas pocas publicaciones son aceptadas, suficientes para establecer credibilidad en foros de nicho (NIME, xCoAx, ICLC), pero las conferencias principales de HCI y PL permanecen fuera de alcance sin colaboradores y estudios de usuarios.
298298+299299+% ============ 5. LA VIDA PROPIA DE KIDLISP ============
300300+301301+\section{La vida propia de KidLisp}
302302+\label{sec:kidlisp}
303303+304304+KidLisp es un dialecto Lisp de 118 funciones para arte generativo~\citep{scudder2026kidlisp}. Está aislado (sin I/O de archivos, sin red), corre en el navegador y ya ha acumulado 16.779 programas almacenados y una integración de acuñación blockchain vía Tezos. El lenguaje es lo suficientemente pequeño como para caber en una ficha.
305305+306306+\subsection{Comunidad lingüística (2026--2028)}
307307+308308+El sistema ``keeps'' de Tezos---donde los programas KidLisp se acuñan como obras de arte on-chain por 2,5 XTZ---crea un incentivo económico para escribir KidLisp. El contrato keeps (v11) está activo, la UI de acuñación existe en keeps.kidlisp.com, y 5 tokens ya han sido acuñados y migrados. Si el mercado de arte generativo permanece activo, este hilo se sostiene por sí solo.
309309+310310+La posibilidad más interesante es pedagógica. Las restricciones de KidLisp---sin mutación de estado, sin efectos secundarios más allá del dibujo, 118 funciones, corre en un navegador---lo convierten en candidato para entornos de enseñanza. Un currículo de KidLisp construido alrededor del formato de tarjetas (programas de una sola hoja que los estudiantes pueden sostener en sus manos) se alinea con el construccionismo de Papert~\citep{papert1980mindstorms} y la infraestructura existente del proyecto.
311311+312312+\subsection{Evolución del lenguaje (2028--2031)}
313313+314314+KidLisp enfrentará presión para crecer. Los usuarios querrán estado, animación, interactividad, sonido. La pregunta de diseño es si el lenguaje absorbe estas funcionalidades (convirtiéndose en un lenguaje creativo de propósito general) o permanece deliberadamente mínimo (un ``lenguaje haiku'' para arte generativo estático, con JavaScript manejando todo lo demás).
315315+316316+La historia del proyecto sugiere lo segundo. El instinto de diseño de @jeffrey, visible a través de 94 proyectos predecesores, favorece restricciones agudas sobre la acumulación de funcionalidades. El modelo de pieces en sí---archivo único, funciones de ciclo de vida, gráficos en modo inmediato~\citep{scudder2026pieces}---es un diseño que prioriza las restricciones. KidLisp probablemente permanecerá pequeño. El crecimiento interesante estará en lo que la gente haga con él, no en lo que el lenguaje añada.
317317+318318+% ============ 6. SOSTENIBILIDAD ============
319319+320320+\section{La cuestión de la sostenibilidad}
321321+\label{sec:sustainability}
322322+323323+Cada hilo descrito arriba depende de que una sola persona continúe trabajando. \ac{} no tiene financiación de capital riesgo, ni respaldo institucional, ni empleados más allá de @jeffrey. El sistema de mantenimiento AestheticAnts automatiza tareas rutinarias, pero las decisiones arquitectónicas, la escritura de artículos, las pruebas de hardware y el cultivo de la comunidad requieren atención humana.
324324+325325+\subsection{El panorama de financiación (2026--2028)}
326326+327327+El proyecto ha identificado fuentes de financiación: Creative Capital (subvenciones de proyecto de \$50.000), Prix Ars Electronica (\texteuro10.000), Gary Marsden Travel Awards y GitHub Sponsors. La fábrica de artículos es en parte una estrategia de solicitud de subvenciones: un proyecto con 19 artículos, demos en conferencias y una base de usuarios documentada es un solicitante más fuerte que uno con solo código.
328328+329329+Los keeps de Tezos proporcionan un pequeño flujo de ingresos. Las impresiones (20 pedidas a marzo de 2026) proporcionan otro. Ninguno es suficiente para sostener el desarrollo a tiempo completo.
330330+331331+La proyección honesta: para 2028, el proyecto o asegura una subvención o afiliación institucional (una residencia, un puesto docente, una beca de investigación) o se ralentiza a desarrollo en modo mantenimiento. Este no es un escenario de fracaso---muchas herramientas creativas importantes son mantenidas a tiempo parcial por sus creadores durante décadas. Pero los hilos ambiciosos (ensambles planetarios, flotas de hardware excedente, foso académico) requieren atención a tiempo completo.
332332+333333+\subsection{El riesgo del autor único (2028--2031)}
334334+335335+Las ``herramientas para la convivialidad'' de Illich~\citep{illich1973tools} argumentan que las buenas herramientas deberían ser operables sin experiencia especializada. \ac{} aspira a esto para sus usuarios, pero el proyecto en sí no es convivial en el sentido de Illich: requiere la experiencia de @jeffrey para mantenerse. El factor autobús es uno.
336336+337337+La mitigación ya está parcialmente en su lugar: la base de código es de código abierto, la arquitectura está documentada en 19 artículos, la API de pieces está diseñada para la simplicidad de archivo único, y el sistema AestheticAnts maneja el mantenimiento rutinario de forma autónoma. Pero la diferencia entre ``el código es abierto'' y ``alguien más puede liderar el proyecto'' es vasta.
338338+339339+La trayectoria probable a 5 años: @jeffrey sigue siendo el único arquitecto. Una pequeña comunidad de autores de pieces contribuye contenido (265 pieces publicados y en aumento). Uno o dos colaboradores envían pull requests para funcionalidades específicas. El proyecto no alcanza el modelo de ``mil colaboradores'' de Processing o p5.js, pero no lo necesita---su propuesta de valor no es amplitud sino profundidad: una visión única, rigurosamente mantenida, que lleva la computación creativa a lugares donde las herramientas diseñadas por comité no pueden llegar.
340340+341341+% ============ 7. LA CONVERGENCIA ============
342342+343343+\section{La convergencia}
344344+\label{sec:convergence}
345345+346346+Los siete hilos descritos arriba no son pistas paralelas. Convergen.
347347+348348+La historia de 94 proyectos (\S\ref{sec:history}) establece la trayectoria que hace legibles los otros hilos. El hardware excedente (\S\ref{sec:surplus}) proporciona la base material para los ensambles planetarios (\S\ref{sec:ensembles}). La infraestructura 3D (\S\ref{sec:3d}) extiende el modelo de ensamble a la performance espacial. Los artículos (\S\ref{sec:scholarly}) documentan y legitiman todo. KidLisp (\S\ref{sec:kidlisp}) proporciona un punto de entrada seguro para nuevos usuarios que llegan a través de cualquiera de estos canales. La sostenibilidad (\S\ref{sec:sustainability}) determina si la convergencia sucede en absoluto---y \S\ref{sec:giveup} examina qué pasa si no sucede.
349349+350350+El escenario más probable a 5 años es este: para 2031, \ac{} es un entorno de computación creativa reconocido pero de nicho con:
351351+352352+\begin{itemize}
353353+ \item \textbf{5.000--10.000 usuarios registrados}, desde los 2.812 actuales, impulsado por la viralidad de notepat, demos en conferencias y despliegues en aulas
354354+ \item \textbf{Un SO bare-metal} desplegado en 100--500 máquinas excedentes en 5--15 sitios (escuelas, centros comunitarios, residencias artísticas, talleres)
355355+ \item \textbf{3--5 artículos publicados} en foros con revisión por pares, estableciendo una huella académica mínima
356356+ \item \textbf{Más de 50.000 programas KidLisp}, con una comunidad pequeña pero activa de arte generativo acuñando keeps en Tezos
357357+ \item \textbf{Performances en ensamble} en 2--3 festivales o conferencias, usando flotas de portátiles excedentes como instrumentos distribuidos
358358+ \item \textbf{Un único mantenedor} que sigue escribiendo la mayor parte del código, con mantenimiento asistido por IA manejando una proporción creciente del trabajo rutinario
359359+\end{itemize}
360360+361361+Este no es el resultado más ambicioso, ni el más conservador. Es el resultado consistente con un proyecto que ha tomado decisiones específicas y deliberadas sobre lo que le importa---profundidad sobre amplitud, instrumentos sobre IDEs, mantenimiento sobre disrupción---y que tiene la infraestructura para cumplir con esas decisiones al ritmo que un desarrollador en solitario puede sostener.
362362+363363+% ============ 8. QUÉ PODRÍA CAMBIARLO TODO ============
364364+365365+\section{Qué podría cambiarlo todo}
366366+\label{sec:wildcards}
367367+368368+Las proyecciones basadas en el impulso son confiables precisamente porque ignoran las discontinuidades. Cuatro comodines podrían alterar la trayectoria por completo:
369369+370370+\subsection{Un hogar institucional}
371371+372372+Si @jeffrey acepta un puesto docente en una escuela de arte o universidad de investigación, \ac{} gana algo que actualmente le falta: estudiantes. Una cohorte de 15--30 estudiantes usando \ac{} como su entorno principal de computación creativa durante un semestre produciría más pieces, más reportes de errores, más casos de uso y más investigación que una década de desarrollo en solitario. El argumento del artículo sobre CalArts---que una escuela de arte es un sistema operativo---funciona a la inversa: el sistema operativo podría convertirse en una escuela.
373373+374374+\subsection{Un momento viral}
375375+376376+\np{} fue publicado en Hacker News y recibió atención. Un segundo momento viral---un TikTok de un aula llena de portátiles excedentes tocando música juntos, un hilo de tweets sobre el instrumento creativo de \$50, una demo en conferencia que se filma y comparte---podría traer miles de usuarios en una semana. La infraestructura (pieces direccionables por URL, registro instantáneo, funciones sociales) está diseñada para absorber esto. Si @jeffrey \emph{quiere} absorberlo es una pregunta separada. La postura anti-plataforma del proyecto~\citep{fisher2009capitalist} sugiere ambivalencia respecto al crecimiento por el crecimiento mismo.
377377+378378+\subsection{IA como colaborador}
379379+380380+El sistema AestheticAnts ya usa IA para mantenimiento rutinario. El sistema de memoria del agente registra interacciones y mantiene continuidad entre conversaciones. Si las capacidades de IA continúan avanzando, una versión futura de este sistema podría hacer más que mantenimiento: podría escribir pieces, generar programas KidLisp, componer partituras de ensamble y redactar artículos. El riesgo de autor único (\S\ref{sec:sustainability}) disminuye si el ``autor único'' está aumentado por un colaborador de IA que comprende la historia, la filosofía y la base de código del proyecto.
381381+382382+Esto no es especulativo de la manera en que lo son los otros escenarios. Ya está sucediendo. La pregunta es de grado: para 2031, ¿la IA maneja el 10\% del trabajo creativo, o el 50\%? La respuesta dependerá de las decisiones que @jeffrey tome sobre qué delega y qué insiste en hacer él mismo. El énfasis del proyecto en la voz personal, en los artículos ``PSYCHO'' que portan la temperatura del autor, sugiere que el trabajo más importante seguirá siendo humano. La infraestructura a su alrededor quizás no.
383383+384384+\subsection{¿Qué pasa si se detiene?}
385385+\label{sec:giveup}
386386+387387+Las proyecciones anteriores asumen esfuerzo continuado. Pero la historia de 94 proyectos (\S\ref{sec:history}) contiene un patrón que debe nombrarse: @jeffrey ha abandonado cosas antes. No Paint tuvo cinco encarnaciones. Cada una fue abandonada, no porque la idea fracasara, sino porque la implementación se calcificó---porque la brecha entre lo que la herramienta \emph{era} y lo que \emph{debería ser} se volvió intolerable. Los reinicios no fueron fracasos de compromiso. Fueron expresiones de él.
388388+389389+El riesgo para \ac{} no es que @jeffrey pierda interés. Quince años orbitando los mismos problemas descarta el abandono casual. El riesgo es el \emph{agotamiento estructural}: la acumulación de peso operativo---facturas de servidores, soporte de usuarios, pruebas de hardware, presentaciones de artículos, solicitudes de subvenciones, actualizaciones de dependencias---hasta que la carga de mantenimiento desplaza el trabajo creativo que hace que el proyecto valga la pena mantener. Ukeles~\citep{ukeles1969manifesto} argumentó que el mantenimiento es arte, pero incluso Ukeles reconoció que el mantenimiento sin reconocimiento se convierte en trabajo invisible.
390390+391391+Tres escenarios de cese merecen consideración:
392392+393393+\begin{enumerate}
394394+ \item \textbf{El desvanecimiento silencioso}: el desarrollo se reduce a commits esporádicos, los servidores siguen activos pero la comunidad se dispersa, y \ac{} se une a la larga lista de herramientas personales ambiciosas que existen como archivos en lugar de sistemas vivos. Este es el resultado más común para proyectos de computación creativa de autor único. No es dramático. Es el caso por defecto.
395395+396396+ \item \textbf{La parada deliberada}: @jeffrey declara el proyecto completo en algún límite natural---quizás cuando el SO arranca de manera confiable en una docena de modelos de portátiles, o cuando la cuenta de artículos alcanza un número redondo, o cuando el piece número 100 es publicado por alguien distinto a él. Regresa a pintar sobre lienzo (la exposición en Venice Family Clinic en mayo de 2026 sugiere que este hilo ya está activo). El código permanece abierto. Alguien podría bifurcarlo. Lo más probable es que nadie lo haga.
397397+398398+ \item \textbf{El reinicio número 95}: @jeffrey abandona \ac{} para construir su sucesor. Este es el patrón que la historia predice con más fuerza. No Paint se convirtió en \ac{}. \ac{} podría convertirse en otra cosa---algo que absorba las lecciones del SO, el modelo de pieces, la red de ensamble y el rasterizador 3D, pero se deshaga del peso de infraestructura acumulado. El nuevo proyecto comienza limpio, en un solo archivo, y el ciclo empieza de nuevo. Desde fuera, esto parece un fracaso. Desde dentro del linaje de 94 proyectos, parece el proceso funcionando exactamente como fue diseñado.
399399+\end{enumerate}
400400+401401+La evaluación honesta: el escenario 3 es improbable dentro de 5 años porque \ac{} ha alcanzado velocidad de escape de maneras que No Paint nunca logró---una base de usuarios registrados, un SO bare-metal, una integración blockchain, 19 artículos, un lenguaje con más de 16.000 programas. El costo hundido es demasiado alto para un reinicio limpio. Pero el escenario 1 es totalmente posible si la cuestión de sostenibilidad (\S\ref{sec:sustainability}) queda sin respuesta. Un proyecto así de ambicioso, mantenido por una persona sin financiación estable, siempre está a un mal año del desvanecimiento silencioso.
402402+403403+La mitigación es la misma que ha sostenido el proyecto hasta ahora: hacer que el trabajo en sí sea lo suficientemente gratificante como para que la carga operativa sea tolerable. Los artículos, las performances, el rasterizador 3D escrito desde cero, el arranque bare-metal que toma 7 segundos---estos no son funcionalidades en una hoja de ruta. Son la práctica creativa. Si la práctica deja de ser interesante, el proyecto se detiene. Si sigue siendo interesante, el proyecto sobrevive a todo menos a que se apaguen las luces.
404404+405405+% ============ 10. CONCLUSIÓN ============
406406+407407+\section{Conclusión}
408408+409409+Aesthetic Computer es un proyecto que sabe lo que es. No busca ajuste producto-mercado, no pivota hacia la empresa, no optimiza para métricas de crecimiento. Es un instrumento personal de computación creativa siendo construido en público por una sola persona que ha estado haciendo versiones de él durante más de una década a través de 94 proyectos predecesores.
410410+411411+Los próximos cinco años serán moldeados por fuerzas tanto internas (el ritmo que @jeffrey puede sostener, la financiación que puede asegurar) como externas (240 millones de PC excedentes, la economía del arte generativo, el ciclo de conferencias académicas). La infraestructura del proyecto---SO bare-metal, fábrica de artículos, modelo de pieces, red social, acuñación blockchain---está construida para absorber estas fuerzas. Si lo hará es una cuestión de resistencia, suerte y la disposición del mundo a importarle las herramientas de computación creativa que no son propiedad de una plataforma.
412412+413413+Nelson escribió en 1974 que ``puedes y debes entender las computadoras AHORA''~\citep{nelson1974computerlib}. Illich escribió en 1973 que las herramientas deberían expandir la autonomía personal, no requerir mediación institucional~\citep{illich1973tools}. Ukeles escribió en 1969 que el mantenimiento es arte~\citep{ukeles1969manifesto}. \ac{} es la síntesis: una herramienta que es personal, convivial y mantenida como práctica creativa. La apuesta es que esta síntesis, aplicada a hardware excedente y sostenida en el tiempo, crea algo que perdura.
414414+415415+Si lo hace es la única pregunta interesante. Este artículo no ofrece respuesta, solo una lectura de las fuerzas en juego. El código decidirá.
416416+417417+\vspace{0.5em}
418418+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
419419+420420+\vspace{0.5em}\noindent\textit{Traducido del inglés. Versión original disponible en \url{https://papers.aesthetic.computer}}
421421+422422+% ============ REFERENCES ============
423423+424424+\bibliographystyle{plainnat}
425425+\bibliography{references}
426426+427427+\end{document}
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+1111+\setmainfont{Latin Modern Roman}
1212+\setsansfont{Latin Modern Sans}
1313+1414+% Custom AC fonts
1515+\newfontfamily\acbold{ywft-processing-bold}[
1616+ Path=../../system/public/type/webfonts/,
1717+ Extension=.ttf
1818+]
1919+\newfontfamily\aclight{ywft-processing-light}[
2020+ Path=../../system/public/type/webfonts/,
2121+ Extension=.ttf
2222+]
2323+\setmonofont{Latin Modern Mono}[Scale=0.85]
2424+2525+% === PACKAGES ===
2626+\usepackage{xcolor}
2727+\usepackage{titlesec}
2828+\usepackage{enumitem}
2929+\usepackage{booktabs}
3030+\usepackage{tabularx}
3131+\usepackage{multicol}
3232+\usepackage{fancyhdr}
3333+\usepackage{hyperref}
3434+\usepackage{graphicx}
3535+\graphicspath{{figures/}{../../papers/arxiv-ac/figures/}}
3636+\usepackage{ragged2e}
3737+\usepackage{microtype}
3838+\usepackage{listings}
3939+\usepackage{natbib}
4040+\usepackage[colorspec=0.92]{draftwatermark}
4141+4242+% === COLORS (AC palette) ===
4343+\definecolor{acpink}{RGB}{180,72,135}
4444+\definecolor{acpurple}{RGB}{120,80,180}
4545+\definecolor{acdark}{RGB}{64,56,74}
4646+\definecolor{acgray}{RGB}{119,119,119}
4747+\definecolor{draftcolor}{RGB}{180,72,135}
4848+4949+% === DRAFT WATERMARK ===
5050+\DraftwatermarkOptions{
5151+ text=WORKING DRAFT,
5252+ fontsize=3cm,
5353+ color=draftcolor!18,
5454+ angle=45,
5555+ pos={0.5\paperwidth, 0.5\paperheight}
5656+}
5757+5858+% === JS SYNTAX COLORS ===
5959+\definecolor{jskw}{RGB}{119,51,170}
6060+\definecolor{jsfn}{RGB}{0,136,170}
6161+\definecolor{jsstr}{RGB}{170,120,0}
6262+\definecolor{jsnum}{RGB}{204,0,102}
6363+\definecolor{jscmt}{RGB}{102,102,102}
6464+6565+% === HYPERREF ===
6666+\hypersetup{
6767+ colorlinks=true,
6868+ linkcolor=acpurple,
6969+ urlcolor=acpurple,
7070+ citecolor=acpurple,
7171+ pdfauthor={@jeffrey},
7272+ pdftitle={Handle-identitet på AT Protocol: Fra Auth0 til decentraliseret login},
7373+}
7474+7575+% === SECTION FORMATTING ===
7676+\titleformat{\section}
7777+ {\normalfont\bfseries\normalsize\uppercase}
7878+ {\thesection.}
7979+ {0.5em}
8080+ {}
8181+\titlespacing{\section}{0pt}{1.2em}{0.3em}
8282+8383+\titleformat{\subsection}
8484+ {\normalfont\bfseries\small}
8585+ {\thesubsection}
8686+ {0.5em}
8787+ {}
8888+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
8989+9090+% === HEADER/FOOTER ===
9191+\pagestyle{fancy}
9292+\fancyhf{}
9393+\renewcommand{\headrulewidth}{0pt}
9494+\fancyhead[C]{\footnotesize\color{acpink}\textit{Arbejdsudkast --- ikke til citation}}
9595+\fancyfoot[C]{\footnotesize\thepage}
9696+9797+% === CUSTOM COMMANDS ===
9898+\newcommand{\acdot}{{\color{acpink}.}}
9999+\newcommand{\ac}{\textsc{Aesthetic.Computer}}
100100+\newcommand{\atproto}{\textsc{AT Protocol}}
101101+102102+% === LISTINGS ===
103103+\lstdefinelanguage{acjs}{
104104+ morekeywords=[1]{function,export,const,let,var,return,if,else,new,async,await,import,from},
105105+ morekeywords=[2]{wipe,ink,line,box,circle,write,screen,params,colon,jump,send,store,net,sound,speaker,system},
106106+ sensitive=true,
107107+ morecomment=[l]{//},
108108+ morestring=[b]",
109109+ morestring=[b]',
110110+ morestring=[b]`,
111111+ escapeinside={|}{|},
112112+}
113113+114114+\lstdefinestyle{acjsstyle}{
115115+ language=acjs,
116116+ keywordstyle=[1]\color{jskw}\bfseries,
117117+ keywordstyle=[2]\color{jsfn}\bfseries,
118118+ commentstyle=\color{jscmt}\itshape,
119119+ stringstyle=\color{jsstr},
120120+}
121121+122122+\lstset{
123123+ basicstyle=\ttfamily\small,
124124+ breaklines=true,
125125+ frame=single,
126126+ rulecolor=\color{acgray!30},
127127+ backgroundcolor=\color{acgray!5},
128128+ xleftmargin=0.5em,
129129+ xrightmargin=0.5em,
130130+ aboveskip=0.5em,
131131+ belowskip=0.5em,
132132+}
133133+134134+% === LIST SETTINGS ===
135135+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
136136+\setlist[enumerate]{nosep, leftmargin=1.2em}
137137+138138+% === COLUMN SEPARATION ===
139139+\setlength{\columnsep}{1.8em}
140140+141141+% === PARAGRAPH SETTINGS ===
142142+\setlength{\parindent}{1em}
143143+\setlength{\parskip}{0.3em}
144144+145145+% Hyphenation for narrow two-column layout
146146+\tolerance=800
147147+\emergencystretch=1em
148148+\hyphenpenalty=50
149149+150150+\begin{document}
151151+152152+% ============ TITLE BLOCK ============
153153+154154+\twocolumn[{%
155155+\begin{center}
156156+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
157157+{\acbold\fontsize{24pt}{28pt}\selectfont\color{acdark} Handle-identitet på AT Protocol}\par
158158+\vspace{0.2em}
159159+{\aclight\fontsize{11pt}{13pt}\selectfont\color{acpink} Fra Auth0 til decentraliseret login på Aesthetic Computer}\par
160160+\vspace{0.3em}
161161+{\aclight\fontsize{9pt}{11pt}\selectfont\color{acgray} ATProto OAuth, handle-verifikation og portabel kreativ identitet}\par
162162+\vspace{0.6em}
163163+{\normalsize @jeffrey}\par
164164+{\small\color{acgray} Aesthetic.Computer}\par
165165+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
166166+\vspace{0.3em}
167167+{\small\color{acpurple} \url{https://aesthetic.computer}}\par
168168+\vspace{0.6em}
169169+\rule{\textwidth}{1.5pt}
170170+\vspace{0.5em}
171171+\end{center}
172172+173173+\begin{center}
174174+{\small\color{acpink}\textbf{[ arbejdsudkast --- ikke til citation ]}}
175175+\end{center}
176176+\vspace{0.3em}
177177+178178+\begin{quote}
179179+\small\noindent\textbf{Abstrakt.}
180180+Aesthetic Computer autentificerer i øjeblikket brugere gennem Auth0 og opretholder en parallel identitet på en selvhostet AT Protocol Personal Data Server (PDS) på \texttt{at.aesthetic.computer}. Hver verificeret bruger modtager en DID og et PDS-handle, men autentificering foregår gennem en centraliseret OAuth-udbyder. Vi foreslår at sammenlægge denne duale identitetsarkitektur ved at adoptere AT Protocol OAuth~\citep{atproto2024oauth} som primær login-metode, hvilket gør det muligt for alle med en Bluesky- eller ATProto-identitet at autentificere sig direkte og få det tilsvarende handle på Aesthetic Computer. Denne artikel gennemgår \atproto{}-identitetsstakken---DID'er, handle-verifikation, OAuth 2.1 med DPoP og PAR---undersøger, hvordan pckt.blog og andre ATProto-native applikationer implementerer decentraliseret login~\citep{pcktblog2025}, kortlægger den nuværende AC-autentificeringsarkitektur og foreslår en faseinddelt migration fra Auth0-afhængighed til \atproto{}-først-identitet. Det centrale argument: på en platform, der allerede kører sin egen PDS og udsteder sine egne DID'er, er den centraliserede identitetsudbyder det vestigiale organ. At fjerne den forenkler stakken, eliminerer en betalt afhængighed og gør AC til en førsteklasses borger i det fødererede sociale web.
181181+\end{quote}
182182+\vspace{0.5em}
183183+}]
184184+185185+% ============ 1. INTRODUKTION ============
186186+187187+\section{Introduktion}
188188+189189+Identitet på webben er et udlejerproblem. Du ejer ikke dit handle på Twitter, dit brugernavn på Instagram eller dit login på nogen platform, der kan slette din konto. AT Protocol~\citep{atproto2024spec}---den decentraliserede sociale netværksprotokol bag Bluesky---foreslår en anden ordning: din identitet er et kryptografisk nøglepar, dit handle er et domænenavn, du kontrollerer, og dine data ligger på en Personal Data Server, som du kan flytte mellem udbydere.
190190+191191+Aesthetic Computer har opereret med et hybrid identitetssystem siden 2024. Auth0~\citep{auth0spa} håndterer autentificering: OAuth 2.0 med PKCE, refresh tokens og en administreret brugerdatabase. Separat udsteder en selvhostet PDS på \texttt{at.aesthetic.computer} ATProto-identiteter for hver verificeret bruger. Resultatet er et fordoblet system: to identiteter per bruger, to credential-lagre, to handle-synkroniseringsveje og et betalt Auth0-abonnement, der bygger bro over kløften.
192192+193193+Denne artikel spørger: hvad nu hvis PDS'en \emph{er} identitetsudbyderen?
194194+195195+Svaret er ikke hypotetisk. pckt.blog~\citep{pcktblog2025}, en blogplatform bygget på \atproto{}, autentificerer brugere udelukkende gennem \atproto{} OAuth. Brugere logger ind med deres Bluesky-handle, deres selvhostede PDS eller enhver kompatibel identitetsudbyder. Ingen Auth0, ingen Firebase, ingen centraliseret brugerdatabase. Indholdet synkroniseres til brugerens egen PDS ved hjælp af delte lexicons fra Standard.site~\citep{standardsite2025}.
196196+197197+Vi undersøger, hvordan denne model gælder for Aesthetic Computer---en kreativ computing-platform med 600+ interaktive pieces, multiplayer-sessioner, et KidLisp-programmeringssprog og et native bare-metal OS~\citep{scudder2026os}---og foreslår en faseinddelt migration, der bevarer bagudkompatibilitet, mens den bevæger sig mod decentraliseret identitet.
198198+199199+% ============ 2. DEN NUVÆRENDE AC-IDENTITETSARKITEKTUR ============
200200+201201+\section{Nuværende arkitektur}
202202+\label{sec:current}
203203+204204+\subsection{Auth0 som identitetsudbyder}
205205+206206+Autentificering foregår gennem Auth0's SPA SDK. Ved sideindlæsning tjekker \texttt{boot.mjs} localStorage for cached Auth0-tilstand. Hvis en session eksisterer (eller et OAuth-callback detekteres), initialiserer den Auth0-klienten med PKCE og refresh tokens, udveksler autorisationskoder for access tokens og henter brugerprofilen. Auth0's \texttt{sub}-felt (f.eks. \texttt{auth0|abc123} eller \texttt{google-oauth2|xyz}) fungerer som den interne brugeridentifikator.
207207+208208+\begin{lstlisting}[style=acjsstyle]
209209+// boot.mjs: current Auth0 flow
210210+const auth0 = await createAuth0Client({
211211+ domain: |\textcolor{jsstr}{"hi.aesthetic.computer"}|,
212212+ clientId: |\textcolor{jsstr}{"LVdZaM..."}|,
213213+ cacheLocation: |\textcolor{jsstr}{"localstorage"}|,
214214+ useRefreshTokens: true,
215215+});
216216+const user = await auth0.getUser();
217217+// { sub, email, email_verified, ... }
218218+\end{lstlisting}
219219+220220+\subsection{Handle-systemet}
221221+222222+Handles gemmes i en MongoDB \texttt{@handles}-collection, der mapper Auth0 \texttt{sub} til en streng på 1--16 alfanumeriske tegn (med \texttt{.} og \texttt{\_} tilladt). Validering håndhæver ingen indledende/afsluttende tegnsætning, case-insensitiv unikhed og profanitetsfiltrering. Handles er den primære brugervendte identitet: URL-adresserbare (\texttt{@handle/piece-name}), synlige i chat og oplæst af AC Native OS.
223223+224224+\subsection{ATProto-skyggeidentitet}
225225+226226+Ved første e-mail-verifikation udløser en Auth0-webhook \texttt{createAtprotoAccount()}, som:
227227+228228+\begin{enumerate}
229229+ \item Genererer en adgangskode på 32 tegn
230230+ \item Opretter en invitationskode på PDS'en
231231+ \item Opretter en konto på \texttt{handle.at.aesthetic.computer}
232232+ \item Gemmer DID, handle og krypteret adgangskode i MongoDB (\texttt{users.atproto})
233233+\end{enumerate}
234234+235235+Når en bruger ændrer sit AC-handle, synkroniserer \texttt{updateAtprotoHandle()} ændringen til PDS'en. Indhold (malerier, stemninger, KidLisp-snippets, tapes, nyheder) spejles til PDS'en via seks brugerdefinerede lexicons (\texttt{computer.aesthetic.*}). ATProto-identiteten er reel og funktionel---men brugeren autentificerer sig aldrig gennem den. Det er en skyggeidentitet: til stede, synkroniseret, men ikke suveræn.
236236+237237+\subsection{Duplikeringsproblemet}
238238+239239+Denne arkitektur medfører:
240240+241241+\begin{itemize}
242242+ \item To credential-lagre (Auth0 + PDS)
243243+ \item To handle-navnerum (AC-handles + PDS-handles)
244244+ \item To synkroniseringsveje (handle-ændringer propagerer Auth0 $\to$ MongoDB $\to$ PDS)
245245+ \item En betalt afhængighed (Auth0-abonnement)
246246+ \item Ingen interoperabilitet (en Bluesky-bruger kan ikke logge ind på AC med sin eksisterende identitet)
247247+\end{itemize}
248248+249249+PDS'en ved allerede, hvem hver bruger er. Den gemmer allerede deres DID, deres handle, deres indhold. Auth0-laget tilføjer omkostninger og kompleksitet uden at tilføje kapabilitet, som PDS'en ikke kan levere.
250250+251251+% ============ 3. AT PROTOCOL-IDENTITETSSTAKKEN ============
252252+253253+\section{AT Protocol-identitetsstakken}
254254+\label{sec:atproto}
255255+256256+At forstå migrationen kræver forståelse af de tre lag i \atproto{}-identitet: DID'er, handles og OAuth.
257257+258258+\subsection{Decentraliserede identifikatorer (DID'er)}
259259+260260+En DID~\citep{w3cdid2022, atproto2024did} er en persistent, kryptografisk verificerbar identifikator. \atproto{} bruger primært \texttt{did:plc}, en metode designet til stærk konsistens, høj tilgængelighed og nøglerotation uden tab af identitet. Hver DID opløses til et dokument, der indeholder:
261261+262262+\begin{itemize}
263263+ \item En \textbf{signeringsnøgle} (P-256 eller K-256)~\citep{atproto2024crypto} til autentificering af repository-opdateringer
264264+ \item \textbf{Rotationsnøgler} til kontogendannelse
265265+ \item Et \textbf{PDS-endpoint} URL
266266+ \item Brugerens aktuelle \textbf{handle}
267267+\end{itemize}
268268+269269+DID'en er den stabile identitet. Handles ændrer sig; nøgler roteres; PDS-udbydere kommer og går. DID'en forbliver. AC udsteder allerede DID'er for hver bruger gennem sin PDS. Infrastrukturen eksisterer.
270270+271271+\subsection{Handle-verifikation}
272272+273273+Et \atproto{}-handle~\citep{atproto2024handle} er et domænenavn, der opløses bidirektionelt til en DID. Verifikation bruger to metoder:
274274+275275+\textbf{DNS TXT}: Placer en record på \texttt{\_atproto.example.com}:
276276+\begin{lstlisting}
277277+_atproto.example.com TXT "did=did:plc:abc..."
278278+\end{lstlisting}
279279+280280+\textbf{HTTPS Well-Known}: Server DID'en på:
281281+\begin{lstlisting}
282282+GET /.well-known/atproto-did
283283+Response: did:plc:abc...
284284+\end{lstlisting}
285285+286286+Begge metoder kræver, at handlet opløses til DID'en \emph{og} at DID-dokumentet hævder handlet tilbage. Denne bidirektionelle verifikation betyder: hvis du kontrollerer domænet, kontrollerer du handlet. Ingen central myndighed tildeler handles; DNS er myndigheden.
287287+288288+For AC betyder dette, at \texttt{jeffrey.at.aesthetic.computer} er et reelt, verificerbart ATProto-handle, fordi AC kontrollerer både DNS'en og PDS'en. Men det betyder også, at en bruger, der allerede ejer \texttt{alice.bsky.social} eller \texttt{alice.dev}, har en kryptografisk verificeret identitet, som AC kan stole på uden en adgangskode.
289289+290290+\subsection{ATProto OAuth}
291291+292292+\atproto{} OAuth-specifikationen~\citep{atproto2024oauth} udvider OAuth 2.1 med tre obligatoriske sikkerhedsmekanismer:
293293+294294+\textbf{PKCE} (Proof Key for Code Exchange)~\citep{rfc7636pkce}: Forhindrer aflytning af autorisationskoder. Klienten genererer en tilfældig verifier, sender dens hash med autorisationsforespørgslen og beviser besiddelse af den originale verifier under token-udveksling.
295295+296296+\textbf{PAR} (Pushed Authorization Requests)~\citep{rfc9126par}: Klienten indsender autorisationsparametre via POST til autorisationsserveren \emph{inden} brugeren omdirigeres. Dette forhindrer parameter-manipulation i omdirigerings-URL'en.
297297+298298+\textbf{DPoP} (Demonstrating Proof of Possession)~\citep{rfc9449dpop}: Hver forespørgsel inkluderer en signeret JWT, der beviser, at klienten besidder den private nøgle associeret med tokenet. Selv hvis et access token lækkes, kan det ikke bruges af en anden klient.
299299+300300+\subsubsection{Klientidentifikation}
301301+302302+I modsætning til traditionel OAuth kræver \atproto{} ikke forhåndsregistrering hos hver autorisationsserver. I stedet publicerer klienter metadata på en offentlig HTTPS-URL:
303303+304304+\begin{lstlisting}[style=acjsstyle]
305305+// aesthetic.computer/oauth/client-metadata.json
306306+{
307307+ |\textcolor{jsstr}{"client\_id"}|: |\textcolor{jsstr}{"https://aesthetic.computer/..."}|,
308308+ |\textcolor{jsstr}{"client\_name"}|: |\textcolor{jsstr}{"Aesthetic Computer"}|,
309309+ |\textcolor{jsstr}{"redirect\_uris"}|: [|\textcolor{jsstr}{"https://..."}|],
310310+ |\textcolor{jsstr}{"grant\_types"}|: [|\textcolor{jsstr}{"authorization\_code"}|],
311311+ |\textcolor{jsstr}{"dpop\_bound\_access\_tokens"}|: true
312312+}
313313+\end{lstlisting}
314314+315315+Enhver PDS kan opdage og verificere klienten ved at hente denne URL. Ingen forhåndsdelte hemmeligheder, ingen app store-registrering, ingen API-nøgle-administration.
316316+317317+\subsubsection{Flowet}
318318+319319+\begin{enumerate}
320320+ \item Brugeren indtaster sit handle (f.eks. \texttt{alice.bsky.social})
321321+ \item Klienten opløser handle $\to$ DID $\to$ PDS-endpoint $\to$ autorisationsserver
322322+ \item Klienten pusher autorisationsparametre via PAR
323323+ \item Brugeren omdirigeres til sin PDS's autorisations-UI
324324+ \item Brugeren godkender; PDS'en omdirigerer tilbage med autorisationskode
325325+ \item Klienten udveksler kode for DPoP-bundet access token
326326+ \item Klienten verificerer, at den returnerede DID matcher den forventede identitet
327327+\end{enumerate}
328328+329329+Den afgørende forskel fra Auth0: brugeren autentificerer sig med \emph{sin egen server}. AC ser aldrig en adgangskode. PDS'en---hvad enten det er Bluesky's, AC's egen eller en selvhostet instans---er identitetsmyndigheden.
330330+331331+% ============ 4. SÅDAN GØR PCKT.BLOG ============
332332+333333+\section{Casestudie: pckt.blog}
334334+\label{sec:pckt}
335335+336336+pckt.blog~\citep{pcktblog2025} er en blogplatform, der autentificerer udelukkende gennem \atproto{} OAuth. Dens implementering demonstrerer den praktiske levedygtighed af ATProto-only-autentificering for en indholdsplatform.
337337+338338+\subsection{Autentificering}
339339+340340+Brugere logger ind ved at indtaste deres ATProto-handle. pckt.blog opløser handlet, opdager autorisationsserveren og igangsætter OAuth-flowet. Brugeren godkender på sin PDS (Bluesky, Blacksky, en selvhostet server). pckt.blog modtager et DPoP-bundet access token og brugerens DID. Ingen adgangskoder gemmes. Ingen separat brugerdatabase vedligeholdes.
341341+342342+\subsection{Datasuverænitet}
343343+344344+Indhold synkroniseres til brugerens egen PDS ved hjælp af Standard.site-lexicons~\citep{standardsite2025}:
345345+346346+\begin{itemize}
347347+ \item \texttt{site.standard.publication} --- blogsamlinger
348348+ \item \texttt{site.standard.document} --- individuelle artikler
349349+ \item \texttt{site.standard.graph.subscription} --- følge-relationer
350350+\end{itemize}
351351+352352+Hvis pckt.blog forsvinder, forbliver brugerens indhold på deres PDS, tilgængeligt for enhver kompatibel læser. Dette er løftet fra ATProto: platformen er en visning, ikke en silo.
353353+354354+\subsection{Implikationer for AC}
355355+356356+pckt.blog beviser, at en indholdsorienteret platform kan operere udelukkende på ATProto-identitet. Parallellerne til AC er direkte:
357357+358358+\begin{itemize}
359359+ \item pckt.blog publicerer artikler; AC publicerer pieces, malerier og stemninger
360360+ \item pckt.blog bruger Standard.site-lexicons; AC har seks brugerdefinerede \texttt{computer.aesthetic.*}-lexicons
361361+ \item pckt.blog's brugere ejer deres indhold på deres PDS; AC spejler allerede indhold til sin PDS
362362+ \item Begge er Node.js/JavaScript-applikationer
363363+\end{itemize}
364364+365365+Kløften: pckt.blog blev bygget ATProto-nativt. AC har en eksisterende Auth0-brugerbase, der skal migreres elegant.
366366+367367+% ============ 5. FORESLÅET MIGRATION ============
368368+369369+\section{Foreslået migration}
370370+\label{sec:migration}
371371+372372+\subsection{Fase 1: ATProto OAuth som sekundær login}
373373+374374+Tilføj ``Log ind med Bluesky'' ved siden af Auth0, uden at fjerne Auth0.
375375+376376+\textbf{Infrastruktur:}
377377+\begin{enumerate}
378378+ \item Publicer klientmetadata på \texttt{aesthetic.computer/oauth/client-metadata.json}
379379+ \item Tilføj \texttt{@atproto/oauth-client-node}~\citep{npmAtprotoOauth} til backend'en
380380+ \item Opret to nye Netlify-funktioner:
381381+ \begin{itemize}
382382+ \item \texttt{POST /api/atproto-auth/start} --- opløs handle, PAR, omdiriger
383383+ \item \texttt{GET /api/atproto-auth/callback} --- kodeudveksling med DPoP
384384+ \end{itemize}
385385+ \item Gem sessioner i Redis (DID, handle, DPoP-nøglepar, tokens)
386386+\end{enumerate}
387387+388388+\textbf{Klientflow:} En ny ``Log ind med Bluesky''-knap i \texttt{boot.mjs} udløser ATProto OAuth-flowet. Ved succes udfyldes \texttt{window.acUSER} fra ATProto-sessionen (DID som \texttt{sub}, handle, ingen e-mail medmindre brugeren angiver en). Piece API-overfladen er identisk---pieces ser en bruger med et handle, uanset hvilken auth-sti der oprettede sessionen.
389389+390390+\subsection{Fase 2: Handle-brobygning}
391391+392392+Når en bruger logger ind via ATProto, byg bro for deres handle til AC:
393393+394394+\begin{enumerate}
395395+ \item Udtræk brugernavnet fra ATProto-handlet (f.eks. \texttt{alice} fra \texttt{alice.bsky.social})
396396+ \item Tjek tilgængelighed mod AC \texttt{@handles}-collection'en
397397+ \item Hvis tilgængelig og gyldig (1--16 tegn, alfanumerisk), tilbyd ét-klik-reservation
398398+ \item Hvis optaget, tjek om den eksisterende ejers e-mail matcher---tilbyd kontosammenkobling
399399+ \item Hvis optaget af en anden, bed om et alternativ
400400+ \item Gem en DID $\leftrightarrow$ AC sub-mapping i MongoDB til fremtidige logins
401401+\end{enumerate}
402402+403403+Brugerdefinerede domæne-handles (f.eks. \texttt{alice.dev}) kræver, at brugeren manuelt vælger et AC-handle, da domænet i sig selv muligvis ikke mapper til en gyldig handle-streng.
404404+405405+\subsection{Fase 3: Identitetssammenkobling}
406406+407407+Eksisterende Auth0-brugere kan koble deres ATProto-identitet:
408408+409409+\begin{enumerate}
410410+ \item Fra kontoindstillinger, igangsæt ATProto OAuth
411411+ \item Ved succes, gem den eksterne DID sammen med Auth0 sub
412412+ \item Fremtidige logins accepterer begge auth-stier
413413+ \item Indhold kan valgfrit synkroniseres til brugerens eksterne PDS (ikke kun AC's PDS)
414414+\end{enumerate}
415415+416416+Denne fase forvandler det eksisterende \texttt{users.atproto}-felt fra en skyggeidentitet til en førsteklasses identitetskobling.
417417+418418+\subsection{Fase 4: ATProto-primær}
419419+420420+Når migrationen er valideret:
421421+422422+\begin{enumerate}
423423+ \item Nye tilmeldinger bruger som standard ATProto OAuth (opretter konti på AC's PDS)
424424+ \item Auth0 forbliver som en legacy-sti for eksisterende brugere
425425+ \item Gradvis udfasning af Auth0 efterhånden som brugere kobler deres ATProto-identiteter
426426+ \item Fjern Auth0-afhængighed, eliminer abonnementsomkostning
427427+\end{enumerate}
428428+429429+\subsection{PDS-routing}
430430+431431+En central arkitektonisk beslutning: hvor skal indholdet hen?
432432+433433+\begin{itemize}
434434+ \item \textbf{Auth0-only-brugere}: indhold synkroniseres til AC's PDS (nuværende adfærd)
435435+ \item \textbf{ATProto-brugere med ekstern PDS}: indhold synkroniseres til \emph{deres} PDS
436436+ \item \textbf{ATProto-brugere på AC's PDS}: indhold forbliver på AC's PDS
437437+\end{itemize}
438438+439439+Dette betyder, at backend-synkroniseringsfunktionerne (\texttt{media-atproto.mjs}, \texttt{painting-atproto.mjs} osv.) har brug for en betinget sti: opløs brugerens PDS-endpoint fra deres DID-dokument og skriv til det endpoint i stedet for at antage AC's PDS.
440440+441441+% ============ 6. HANDLE-SEMANTIK ============
442442+443443+\section{Handle-semantik}
444444+\label{sec:handles}
445445+446446+Handlet er den mest menneskesynlige del af identitetsstakken, og migrationen rejser spørgsmål om, hvad et handle \emph{betyder}.
447447+448448+\subsection{Nuværende handle-model}
449449+450450+I dag er et AC-handle:
451451+\begin{itemize}
452452+ \item En streng på 1--16 tegn, først til mølle
453453+ \item Unikt inden for AC-navnerummet
454454+ \item Brugt til URL'er (\texttt{@alice/painting}), chat og OS-personalisering
455455+ \item Gemt i MongoDB, cached i Redis
456456+ \item Spejlet til PDS'en som \texttt{alice.at.aesthetic.computer}
457457+\end{itemize}
458458+459459+\subsection{ATProto-handle-model}
460460+461461+Et ATProto-handle er:
462462+\begin{itemize}
463463+ \item Et domænenavn (ethvert gyldigt DNS-navn)
464464+ \item Verificeret bidirektionelt mod en DID
465465+ \item Globalt unikt via DNS-autoritet
466466+ \item Portabelt på tværs af tjenester
467467+\end{itemize}
468468+469469+\subsection{Brobygning mellem modellerne}
470470+471471+Forslaget: et AC-handle er et \emph{alias}, der mapper til en DID. Sandhedskilden flyttes fra MongoDB til DID-laget. Flere login-metoder (Auth0, ATProto OAuth) opløses til den samme DID, som opløses til det samme AC-handle.
472472+473473+For AC Native OS~\citep{scudder2026os}, hvor handlet er indskrevet i \texttt{config.json} på boot-partitionen, betyder dette, at enhedens identitet er understøttet af en kryptografisk identitet. ``Hej @alice'' på boot-skærmen betyder Alices DID, Alices signeringsnøgle, Alices portabel identitet---ikke blot en streng i en konfigurationsfil.
474474+475475+% ============ 7. ÅBNE SPØRGSMÅL ============
476476+477477+\section{Åbne spørgsmål}
478478+\label{sec:questions}
479479+480480+\textbf{Handle-prioritet.} Hvis \texttt{alice} er ureserveret på AC, men \texttt{alice.bsky.social} logger ind, skal hun så automatisk få det? Først til mølle er simpelt, men tillader squatting. ATProto-verificeret prioritet er mere retfærdigt, men tilføjer kompleksitet.
481481+482482+\textbf{E-mail-krav.} Auth0 leverer verificeret e-mail til kontogendannelse. ATProto OAuth garanterer ikke e-mail. Skal AC kræve en e-mail til fulde kontofunktioner (køb, notifikationer)?
483483+484484+\textbf{Multi-tenant.} AC driver en anden tenant (\texttt{sotce}) med separat Auth0. Hvordan mapper ATProto-identiteter på tværs af tenants? DID'en er tenant-agnostisk, hvilket kan forenkle identitet på tværs af tenants.
485485+486486+\textbf{Sessionsserver.} Realtidsfunktioner (chat, multiplayer) autentificerer via Auth0-tokens videresendt gennem WebSocket. Sessionsserveren skal acceptere ATProto-udstedte tokens eller et samlet sessions-token.
487487+488488+\textbf{Enhedsparring.} AC Native OS parrer via en 6-tegns kode udvekslet gennem Auth0. ATProto-ækvivalenten: scan en QR-kode, der igangsætter et OAuth-flow på telefonen og leverer tokens til enheden.
489489+490490+\textbf{Admin-identitet.} Admin er i øjeblikket \texttt{handle === "jeffrey" \&\& sub === ADMIN\_SUB}. Under ATProto-først-auth er admin \texttt{did === admin\_did}---renere, kryptografisk forankret.
491491+492492+% ============ 8. RELATERET ARBEJDE ============
493493+494494+\section{Relateret arbejde}
495495+\label{sec:related}
496496+497497+\textbf{Decentraliseret identitet.} W3C DID-specifikationen~\citep{w3cdid2022} udgør den formelle ramme for decentraliserede identifikatorer. AT Protocols \texttt{did:plc}-metode~\citep{atproto2024did} udvider dette med stærke konsistensgarantier og en centraliseret-men-auditerbar mappe på \texttt{plc.directory}. Dette er et pragmatisk kompromis: fuld decentralisering af identitetsopløsning forbliver et åbent problem, og \texttt{did:plc} bytter noget decentralisering for operationel pålidelighed.
498498+499499+\textbf{ATProto-native applikationer.} pckt.blog~\citep{pcktblog2025} demonstrerer blogging; Leaflet.pub og Offprint.app samarbejder om delte lexicons via Standard.site~\citep{standardsite2025}. Disse applikationer beviser levedygtigheden af ATProto-only-auth for indholdsplatforme.
500500+501501+\textbf{OAuth-sikkerhed.} DPoP~\citep{rfc9449dpop} forhindrer token-tyveri; PAR~\citep{rfc9126par} forhindrer parameter-manipulation; PKCE~\citep{rfc7636pkce} forhindrer kode-aflytning. Tilsammen repræsenterer de state of the art inden for browserbaseret OAuth-sikkerhed---betydeligt stærkere end det Auth0 SPA-flow, som AC i øjeblikket bruger.
502502+503503+\textbf{Konvivial identitet.} Illichs værktøjer til konvivialitet~\citep{illich1973tools} rammer spørgsmålet: udvider identitetssystemet personlig autonomi, eller kræver det afhængighed af en udbyder? Auth0 er en administreret tjeneste---bekvem men afhængig. ATProto-identitet er portabel, selv-verificerbar og udbyderuafhængig. Nelsons vision om personlig computing~\citep{nelson1974computerlib} udvides naturligt til personlig identitet: du bør eje dit navn på netværket.
504504+505505+% ============ 9. KONKLUSION ============
506506+507507+\section{Konklusion}
508508+509509+Aesthetic Computer kører allerede en PDS, udsteder DID'er, synkroniserer indhold til ATProto-records og publicerer brugerdefinerede lexicons. Den eneste manglende brik er at lade brugere autentificere sig gennem den infrastruktur i stedet for at gå omvejen gennem Auth0. Migrationen er ikke en omskrivning---den er fjernelsen af en workaround.
510510+511511+Den faseinddelte tilgang (ATProto som sekundær login $\to$ handle-brobygning $\to$ identitetssammenkobling $\to$ ATProto-primær) sikrer, at ingen eksisterende bruger forstyrres. Sluttilstanden: en kreativ computing-platform, hvor dit handle er en kryptografisk identitet, dit indhold lever på en server, du kontrollerer, og at logge ind betyder at bevise, at du ejer dine nøgler---ikke at stole på en tredjepart til at indestå for dig.
512512+513513+PDS'en kører allerede. DID'erne er allerede udstedt. Lexiconerne er allerede publiceret. Det er tid til at lade brugere logge ind gennem hoveddøren.
514514+515515+% ============ REFERENCER ============
516516+517517+\vspace{0.5em}
518518+\noindent\rule{\columnwidth}{0.5pt}
519519+520520+\subsection*{Referencelinks}
521521+522522+\noindent\small
523523+524524+\textbf{AT Protocol-specifikationer:}
525525+\begin{itemize}
526526+ \item \url{https://atproto.com/specs} --- Fuld protokolspecifikation
527527+ \item \url{https://atproto.com/specs/oauth} --- OAuth-specifikation
528528+ \item \url{https://atproto.com/specs/handle} --- Handle-opløsning
529529+ \item \url{https://atproto.com/specs/cryptography} --- Kryptografiske metoder
530530+ \item \url{https://web.plc.directory/spec/v0.1/did-plc} --- DID PLC-specifikation
531531+ \item \url{https://atproto.com/guides/lexicon} --- Lexicon-skema-system
532532+ \item \url{https://atproto.com/guides/oauth-patterns} --- OAuth-implementeringsmønstre
533533+\end{itemize}
534534+535535+\textbf{Implementeringsguider:}
536536+\begin{itemize}
537537+ \item \url{https://docs.bsky.app/blog/oauth-atproto} --- Byg ATProto OAuth-apps
538538+ \item \url{https://docs.bsky.app/docs/advanced-guides/resolving-identities} --- Identitetsopløsning
539539+ \item \url{https://docs.bsky.app/docs/advanced-guides/oauth-client} --- OAuth-klientguide
540540+\end{itemize}
541541+542542+\textbf{NPM-pakker:}
543543+\begin{itemize}
544544+ \item \texttt{@atproto/oauth-client-node} --- Node.js OAuth-klient
545545+ \item \texttt{@atproto/oauth-client-browser} --- Browser OAuth-klient
546546+ \item \texttt{@atproto/api} --- TypeScript XRPC-klient
547547+ \item \texttt{@atproto/identity} --- DID/handle-opløsning
548548+ \item \texttt{@atcute/oauth-browser-client} --- Let alternativ
549549+\end{itemize}
550550+551551+\textbf{Referenceimplementeringer:}
552552+\begin{itemize}
553553+ \item \url{https://github.com/pilcrowonpaper/atproto-oauth-example} --- Astro OAuth-eksempel
554554+ \item \url{https://github.com/bluesky-social/atproto} --- Officielt ATProto-monorepo
555555+ \item \url{https://standard.site/docs/introduction/} --- Standard.site delte lexicons
556556+\end{itemize}
557557+558558+\textbf{Applikationer der bruger ATProto Auth:}
559559+\begin{itemize}
560560+ \item pckt.blog --- Blogging på det åbne sociale web
561561+ \item Leaflet.pub --- Langt format-publicering
562562+ \item Offprint.app --- Kollaborativ skrivning
563563+\end{itemize}
564564+565565+\textbf{IETF-standarder:}
566566+\begin{itemize}
567567+ \item RFC 9449 --- DPoP (Demonstrating Proof of Possession)
568568+ \item RFC 7636 --- PKCE (Proof Key for Code Exchange)
569569+ \item RFC 9126 --- PAR (Pushed Authorization Requests)
570570+\end{itemize}
571571+572572+\vspace{0.5em}
573573+574574+\bibliographystyle{plainnat}
575575+\bibliography{references}
576576+577577+\end{document}
+577
papers/arxiv-identity/identity-es.tex
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+1111+\setmainfont{Latin Modern Roman}
1212+\setsansfont{Latin Modern Sans}
1313+1414+% Custom AC fonts
1515+\newfontfamily\acbold{ywft-processing-bold}[
1616+ Path=../../system/public/type/webfonts/,
1717+ Extension=.ttf
1818+]
1919+\newfontfamily\aclight{ywft-processing-light}[
2020+ Path=../../system/public/type/webfonts/,
2121+ Extension=.ttf
2222+]
2323+\setmonofont{Latin Modern Mono}[Scale=0.85]
2424+2525+% === PACKAGES ===
2626+\usepackage{xcolor}
2727+\usepackage{titlesec}
2828+\usepackage{enumitem}
2929+\usepackage{booktabs}
3030+\usepackage{tabularx}
3131+\usepackage{multicol}
3232+\usepackage{fancyhdr}
3333+\usepackage{hyperref}
3434+\usepackage{graphicx}
3535+\graphicspath{{figures/}{../../papers/arxiv-ac/figures/}}
3636+\usepackage{ragged2e}
3737+\usepackage{microtype}
3838+\usepackage{listings}
3939+\usepackage{natbib}
4040+\usepackage[colorspec=0.92]{draftwatermark}
4141+4242+% === COLORS (AC palette) ===
4343+\definecolor{acpink}{RGB}{180,72,135}
4444+\definecolor{acpurple}{RGB}{120,80,180}
4545+\definecolor{acdark}{RGB}{64,56,74}
4646+\definecolor{acgray}{RGB}{119,119,119}
4747+\definecolor{draftcolor}{RGB}{180,72,135}
4848+4949+% === DRAFT WATERMARK ===
5050+\DraftwatermarkOptions{
5151+ text=WORKING DRAFT,
5252+ fontsize=3cm,
5353+ color=draftcolor!18,
5454+ angle=45,
5555+ pos={0.5\paperwidth, 0.5\paperheight}
5656+}
5757+5858+% === JS SYNTAX COLORS ===
5959+\definecolor{jskw}{RGB}{119,51,170}
6060+\definecolor{jsfn}{RGB}{0,136,170}
6161+\definecolor{jsstr}{RGB}{170,120,0}
6262+\definecolor{jsnum}{RGB}{204,0,102}
6363+\definecolor{jscmt}{RGB}{102,102,102}
6464+6565+% === HYPERREF ===
6666+\hypersetup{
6767+ colorlinks=true,
6868+ linkcolor=acpurple,
6969+ urlcolor=acpurple,
7070+ citecolor=acpurple,
7171+ pdfauthor={@jeffrey},
7272+ pdftitle={Identidad de handle en el AT Protocol: De Auth0 al inicio de sesión descentralizado},
7373+}
7474+7575+% === SECTION FORMATTING ===
7676+\titleformat{\section}
7777+ {\normalfont\bfseries\normalsize\uppercase}
7878+ {\thesection.}
7979+ {0.5em}
8080+ {}
8181+\titlespacing{\section}{0pt}{1.2em}{0.3em}
8282+8383+\titleformat{\subsection}
8484+ {\normalfont\bfseries\small}
8585+ {\thesubsection}
8686+ {0.5em}
8787+ {}
8888+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
8989+9090+% === HEADER/FOOTER ===
9191+\pagestyle{fancy}
9292+\fancyhf{}
9393+\renewcommand{\headrulewidth}{0pt}
9494+\fancyhead[C]{\footnotesize\color{acpink}\textit{Borrador de trabajo --- no citar}}
9595+\fancyfoot[C]{\footnotesize\thepage}
9696+9797+% === CUSTOM COMMANDS ===
9898+\newcommand{\acdot}{{\color{acpink}.}}
9999+\newcommand{\ac}{\textsc{Aesthetic.Computer}}
100100+\newcommand{\atproto}{\textsc{AT Protocol}}
101101+102102+% === LISTINGS ===
103103+\lstdefinelanguage{acjs}{
104104+ morekeywords=[1]{function,export,const,let,var,return,if,else,new,async,await,import,from},
105105+ morekeywords=[2]{wipe,ink,line,box,circle,write,screen,params,colon,jump,send,store,net,sound,speaker,system},
106106+ sensitive=true,
107107+ morecomment=[l]{//},
108108+ morestring=[b]",
109109+ morestring=[b]',
110110+ morestring=[b]`,
111111+ escapeinside={|}{|},
112112+}
113113+114114+\lstdefinestyle{acjsstyle}{
115115+ language=acjs,
116116+ keywordstyle=[1]\color{jskw}\bfseries,
117117+ keywordstyle=[2]\color{jsfn}\bfseries,
118118+ commentstyle=\color{jscmt}\itshape,
119119+ stringstyle=\color{jsstr},
120120+}
121121+122122+\lstset{
123123+ basicstyle=\ttfamily\small,
124124+ breaklines=true,
125125+ frame=single,
126126+ rulecolor=\color{acgray!30},
127127+ backgroundcolor=\color{acgray!5},
128128+ xleftmargin=0.5em,
129129+ xrightmargin=0.5em,
130130+ aboveskip=0.5em,
131131+ belowskip=0.5em,
132132+}
133133+134134+% === LIST SETTINGS ===
135135+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
136136+\setlist[enumerate]{nosep, leftmargin=1.2em}
137137+138138+% === COLUMN SEPARATION ===
139139+\setlength{\columnsep}{1.8em}
140140+141141+% === PARAGRAPH SETTINGS ===
142142+\setlength{\parindent}{1em}
143143+\setlength{\parskip}{0.3em}
144144+145145+% Hyphenation for narrow two-column layout
146146+\tolerance=800
147147+\emergencystretch=1em
148148+\hyphenpenalty=50
149149+150150+\begin{document}
151151+152152+% ============ TITLE BLOCK ============
153153+154154+\twocolumn[{%
155155+\begin{center}
156156+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
157157+{\acbold\fontsize{24pt}{28pt}\selectfont\color{acdark} Identidad de handle en el AT Protocol}\par
158158+\vspace{0.2em}
159159+{\aclight\fontsize{11pt}{13pt}\selectfont\color{acpink} De Auth0 al inicio de sesión descentralizado en Aesthetic Computer}\par
160160+\vspace{0.3em}
161161+{\aclight\fontsize{9pt}{11pt}\selectfont\color{acgray} ATProto OAuth, verificación de handles e identidad creativa portátil}\par
162162+\vspace{0.6em}
163163+{\normalsize @jeffrey}\par
164164+{\small\color{acgray} Aesthetic.Computer}\par
165165+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
166166+\vspace{0.3em}
167167+{\small\color{acpurple} \url{https://aesthetic.computer}}\par
168168+\vspace{0.6em}
169169+\rule{\textwidth}{1.5pt}
170170+\vspace{0.5em}
171171+\end{center}
172172+173173+\begin{center}
174174+{\small\color{acpink}\textbf{[ borrador de trabajo --- no citar ]}}
175175+\end{center}
176176+\vspace{0.3em}
177177+178178+\begin{quote}
179179+\small\noindent\textbf{Resumen.}
180180+Aesthetic Computer actualmente autentica a los usuarios a través de Auth0 y mantiene una identidad paralela en un Personal Data Server (PDS) autoalojado del AT Protocol en \texttt{at.aesthetic.computer}. Cada usuario verificado recibe un DID y un handle en el PDS, pero la autenticación pasa por un proveedor OAuth centralizado. Proponemos colapsar esta arquitectura de identidad dual adoptando AT Protocol OAuth~\citep{atproto2024oauth} como método principal de inicio de sesión, permitiendo que cualquier persona con una identidad de Bluesky o ATProto se autentique directamente y reclame el handle equivalente en Aesthetic Computer. Este artículo revisa la pila de identidad de \atproto{}---DIDs, verificación de handles, OAuth 2.1 con DPoP y PAR---examina cómo pckt.blog y otras aplicaciones nativas de ATProto implementan el inicio de sesión descentralizado~\citep{pcktblog2025}, mapea la arquitectura de autenticación actual de AC y propone una migración por fases desde la dependencia de Auth0 hacia una identidad \atproto{}-first. El argumento central: en una plataforma que ya ejecuta su propio PDS y acuña sus propios DIDs, el proveedor de identidad centralizado es el órgano vestigial. Eliminarlo simplifica la pila, elimina una dependencia de pago y convierte a AC en un ciudadano de primera clase de la web social federada.
181181+\end{quote}
182182+\vspace{0.5em}
183183+}]
184184+185185+% ============ 1. INTRODUCCIÓN ============
186186+187187+\section{Introducción}
188188+189189+La identidad en la web es un problema de arrendador. No eres dueño de tu handle en Twitter, tu nombre de usuario en Instagram ni tu inicio de sesión en ninguna plataforma que pueda eliminar tu cuenta. El AT Protocol~\citep{atproto2024spec}---el protocolo de red social descentralizada detrás de Bluesky---propone un arreglo diferente: tu identidad es un par de claves criptográficas, tu handle es un nombre de dominio que tú controlas, y tus datos viven en un Personal Data Server que puedes mover entre proveedores.
190190+191191+Aesthetic Computer ha operado un sistema de identidad híbrido desde 2024. Auth0~\citep{auth0spa} gestiona la autenticación: OAuth 2.0 con PKCE, refresh tokens y una base de datos de usuarios administrada. Por separado, un PDS autoalojado en \texttt{at.aesthetic.computer} acuña identidades ATProto para cada usuario verificado. El resultado es un sistema duplicado: dos identidades por usuario, dos almacenes de credenciales, dos rutas de sincronización de handles y una suscripción de pago a Auth0 que cubre la brecha.
192192+193193+Este artículo pregunta: ¿y si el PDS \emph{es} el proveedor de identidad?
194194+195195+La respuesta no es hipotética. pckt.blog~\citep{pcktblog2025}, una plataforma de blogging construida sobre \atproto{}, autentica a los usuarios exclusivamente a través de \atproto{} OAuth. Los usuarios inician sesión con su handle de Bluesky, su PDS autoalojado o cualquier proveedor de identidad compatible. Sin Auth0, sin Firebase, sin base de datos de usuarios centralizada. El contenido se sincroniza con el PDS del propio usuario utilizando lexicons compartidos de Standard.site~\citep{standardsite2025}.
196196+197197+Examinamos cómo este modelo se aplica a Aesthetic Computer---una plataforma de computación creativa con más de 600 piezas interactivas, sesiones multijugador, un lenguaje de programación KidLisp y un sistema operativo nativo bare-metal~\citep{scudder2026os}---y proponemos una migración por fases que preserva la compatibilidad hacia atrás mientras avanza hacia la identidad descentralizada.
198198+199199+% ============ 2. LA ARQUITECTURA DE IDENTIDAD ACTUAL DE AC ============
200200+201201+\section{Arquitectura actual}
202202+\label{sec:current}
203203+204204+\subsection{Auth0 como proveedor de identidad}
205205+206206+La autenticación fluye a través del SDK SPA de Auth0. Al cargar la página, \texttt{boot.mjs} verifica localStorage en busca de estado Auth0 en caché. Si existe una sesión (o se detecta un callback OAuth), inicializa el cliente Auth0 con PKCE y refresh tokens, intercambia códigos de autorización por access tokens y recupera el perfil del usuario. El campo \texttt{sub} de Auth0 (p. ej., \texttt{auth0|abc123} o \texttt{google-oauth2|xyz}) sirve como identificador interno del usuario.
207207+208208+\begin{lstlisting}[style=acjsstyle]
209209+// boot.mjs: current Auth0 flow
210210+const auth0 = await createAuth0Client({
211211+ domain: |\textcolor{jsstr}{"hi.aesthetic.computer"}|,
212212+ clientId: |\textcolor{jsstr}{"LVdZaM..."}|,
213213+ cacheLocation: |\textcolor{jsstr}{"localstorage"}|,
214214+ useRefreshTokens: true,
215215+});
216216+const user = await auth0.getUser();
217217+// { sub, email, email_verified, ... }
218218+\end{lstlisting}
219219+220220+\subsection{Sistema de handles}
221221+222222+Los handles se almacenan en una colección MongoDB \texttt{@handles}, que mapea el \texttt{sub} de Auth0 a una cadena alfanumérica de 1--16 caracteres (con \texttt{.} y \texttt{\_} permitidos). La validación impone que no haya puntuación inicial/final, unicidad insensible a mayúsculas y filtrado de contenido ofensivo. Los handles son la identidad principal orientada al usuario: direccionables por URL (\texttt{@handle/piece-name}), visibles en el chat y pronunciados por AC Native OS.
223223+224224+\subsection{Identidad sombra ATProto}
225225+226226+En la primera verificación de correo electrónico, un webhook de Auth0 activa \texttt{createAtprotoAccount()}, que:
227227+228228+\begin{enumerate}
229229+ \item Genera una contraseña de 32 caracteres
230230+ \item Crea un código de invitación en el PDS
231231+ \item Crea una cuenta en \texttt{handle.at.aesthetic.computer}
232232+ \item Almacena el DID, el handle y la contraseña cifrada en MongoDB (\texttt{users.atproto})
233233+\end{enumerate}
234234+235235+Cuando un usuario cambia su handle de AC, \texttt{updateAtprotoHandle()} sincroniza el cambio con el PDS. El contenido (pinturas, estados de ánimo, fragmentos de KidLisp, cintas, noticias) se replica en el PDS a través de seis lexicons personalizados (\texttt{computer.aesthetic.*}). La identidad ATProto es real y funcional---pero el usuario nunca se autentica a través de ella. Es una identidad sombra: presente, sincronizada, pero no soberana.
236236+237237+\subsection{El problema de la duplicación}
238238+239239+Esta arquitectura significa:
240240+241241+\begin{itemize}
242242+ \item Dos almacenes de credenciales (Auth0 + PDS)
243243+ \item Dos espacios de nombres de handles (handles de AC + handles de PDS)
244244+ \item Dos rutas de sincronización (los cambios de handle se propagan Auth0 $\to$ MongoDB $\to$ PDS)
245245+ \item Una dependencia de pago (suscripción a Auth0)
246246+ \item Sin interoperabilidad (un usuario de Bluesky no puede iniciar sesión en AC con su identidad existente)
247247+\end{itemize}
248248+249249+El PDS ya sabe quién es cada usuario. Ya almacena su DID, su handle, su contenido. La capa de Auth0 añade coste y complejidad sin añadir capacidad que el PDS no pueda proporcionar.
250250+251251+% ============ 3. LA PILA DE IDENTIDAD DEL AT PROTOCOL ============
252252+253253+\section{La pila de identidad del AT Protocol}
254254+\label{sec:atproto}
255255+256256+Comprender la migración requiere comprender las tres capas de identidad de \atproto{}: DIDs, handles y OAuth.
257257+258258+\subsection{Identificadores descentralizados (DIDs)}
259259+260260+Un DID~\citep{w3cdid2022, atproto2024did} es un identificador persistente y criptográficamente verificable. \atproto{} utiliza principalmente \texttt{did:plc}, un método diseñado para consistencia fuerte, alta disponibilidad y rotación de claves sin pérdida de identidad. Cada DID se resuelve a un documento que contiene:
261261+262262+\begin{itemize}
263263+ \item Una \textbf{clave de firma} (P-256 o K-256)~\citep{atproto2024crypto} para autenticar actualizaciones del repositorio
264264+ \item \textbf{Claves de rotación} para recuperación de cuenta
265265+ \item Una URL de \textbf{endpoint PDS}
266266+ \item El \textbf{handle} actual del usuario
267267+\end{itemize}
268268+269269+El DID es la identidad estable. Los handles cambian; las claves rotan; los proveedores de PDS van y vienen. El DID persiste. AC ya acuña DIDs para cada usuario a través de su PDS. La infraestructura existe.
270270+271271+\subsection{Verificación de handles}
272272+273273+Un handle de \atproto{}~\citep{atproto2024handle} es un nombre de dominio que se resuelve bidireccionalmente a un DID. La verificación utiliza dos métodos:
274274+275275+\textbf{DNS TXT}: Colocar un registro en \texttt{\_atproto.example.com}:
276276+\begin{lstlisting}
277277+_atproto.example.com TXT "did=did:plc:abc..."
278278+\end{lstlisting}
279279+280280+\textbf{HTTPS Well-Known}: Servir el DID en:
281281+\begin{lstlisting}
282282+GET /.well-known/atproto-did
283283+Response: did:plc:abc...
284284+\end{lstlisting}
285285+286286+Ambos métodos requieren que el handle se resuelva al DID \emph{y} que el documento DID reclame el handle de vuelta. Esta verificación bidireccional significa: si controlas el dominio, controlas el handle. Ninguna autoridad central asigna handles; el DNS es la autoridad.
287287+288288+Para AC, esto significa que \texttt{jeffrey.at.aesthetic.computer} es un handle ATProto real y verificable porque AC controla tanto el DNS como el PDS. Pero también significa que un usuario que ya posee \texttt{alice.bsky.social} o \texttt{alice.dev} tiene una identidad criptográficamente verificada en la que AC puede confiar sin una contraseña.
289289+290290+\subsection{ATProto OAuth}
291291+292292+La especificación OAuth de \atproto{}~\citep{atproto2024oauth} extiende OAuth 2.1 con tres mecanismos de seguridad obligatorios:
293293+294294+\textbf{PKCE} (Proof Key for Code Exchange)~\citep{rfc7636pkce}: Previene la interceptación de códigos de autorización. El cliente genera un verificador aleatorio, envía su hash con la solicitud de autorización y demuestra posesión del verificador original durante el intercambio de tokens.
295295+296296+\textbf{PAR} (Pushed Authorization Requests)~\citep{rfc9126par}: El cliente envía los parámetros de autorización mediante POST al servidor de autorización \emph{antes} de redirigir al usuario. Esto previene la manipulación de parámetros en la URL de redirección.
297297+298298+\textbf{DPoP} (Demonstrating Proof of Possession)~\citep{rfc9449dpop}: Cada solicitud incluye un JWT firmado que demuestra que el cliente posee la clave privada asociada al token. Incluso si un access token se filtra, no puede ser utilizado por otro cliente.
299299+300300+\subsubsection{Identificación del cliente}
301301+302302+A diferencia del OAuth tradicional, \atproto{} no requiere prerregistro con cada servidor de autorización. En su lugar, los clientes publican metadatos en una URL HTTPS pública:
303303+304304+\begin{lstlisting}[style=acjsstyle]
305305+// aesthetic.computer/oauth/client-metadata.json
306306+{
307307+ |\textcolor{jsstr}{"client\_id"}|: |\textcolor{jsstr}{"https://aesthetic.computer/..."}|,
308308+ |\textcolor{jsstr}{"client\_name"}|: |\textcolor{jsstr}{"Aesthetic Computer"}|,
309309+ |\textcolor{jsstr}{"redirect\_uris"}|: [|\textcolor{jsstr}{"https://..."}|],
310310+ |\textcolor{jsstr}{"grant\_types"}|: [|\textcolor{jsstr}{"authorization\_code"}|],
311311+ |\textcolor{jsstr}{"dpop\_bound\_access\_tokens"}|: true
312312+}
313313+\end{lstlisting}
314314+315315+Cualquier PDS puede descubrir y verificar el cliente obteniendo esta URL. Sin secretos precompartidos, sin registro en tiendas de aplicaciones, sin gestión de claves API.
316316+317317+\subsubsection{El flujo}
318318+319319+\begin{enumerate}
320320+ \item El usuario introduce su handle (p. ej., \texttt{alice.bsky.social})
321321+ \item El cliente resuelve handle $\to$ DID $\to$ endpoint PDS $\to$ servidor de autorización
322322+ \item El cliente envía los parámetros de autorización mediante PAR
323323+ \item El usuario es redirigido a la UI de autorización de su PDS
324324+ \item El usuario aprueba; el PDS redirige de vuelta con el código de autorización
325325+ \item El cliente intercambia el código por un access token vinculado con DPoP
326326+ \item El cliente verifica que el DID devuelto coincide con la identidad esperada
327327+\end{enumerate}
328328+329329+La diferencia crítica respecto a Auth0: el usuario se autentica con \emph{su propio servidor}. AC nunca ve una contraseña. El PDS---ya sea el de Bluesky, el propio de AC o una instancia autoalojada---es la autoridad de identidad.
330330+331331+% ============ 4. CÓMO LO HACE PCKT.BLOG ============
332332+333333+\section{Caso de estudio: pckt.blog}
334334+\label{sec:pckt}
335335+336336+pckt.blog~\citep{pcktblog2025} es una plataforma de blogging que autentica exclusivamente a través de \atproto{} OAuth. Su implementación demuestra la viabilidad práctica de la autenticación solo-ATProto para una plataforma de contenido.
337337+338338+\subsection{Autenticación}
339339+340340+Los usuarios inician sesión introduciendo su handle ATProto. pckt.blog resuelve el handle, descubre el servidor de autorización e inicia el flujo OAuth. El usuario aprueba en su PDS (Bluesky, Blacksky, un servidor autoalojado). pckt.blog recibe un access token vinculado con DPoP y el DID del usuario. No se almacenan contraseñas. No se mantiene una base de datos de usuarios separada.
341341+342342+\subsection{Soberanía de datos}
343343+344344+El contenido se sincroniza con el PDS del propio usuario utilizando lexicons de Standard.site~\citep{standardsite2025}:
345345+346346+\begin{itemize}
347347+ \item \texttt{site.standard.publication} --- colecciones de blog
348348+ \item \texttt{site.standard.document} --- artículos individuales
349349+ \item \texttt{site.standard.graph.subscription} --- relaciones de seguimiento
350350+\end{itemize}
351351+352352+Si pckt.blog desaparece, el contenido del usuario permanece en su PDS, accesible para cualquier lector compatible. Esta es la promesa de ATProto: la plataforma es una vista, no un silo.
353353+354354+\subsection{Implicaciones para AC}
355355+356356+pckt.blog demuestra que una plataforma orientada al contenido puede operar enteramente sobre identidad ATProto. Los paralelismos con AC son directos:
357357+358358+\begin{itemize}
359359+ \item pckt.blog publica artículos; AC publica piezas, pinturas y estados de ánimo
360360+ \item pckt.blog usa lexicons de Standard.site; AC tiene seis lexicons personalizados \texttt{computer.aesthetic.*}
361361+ \item Los usuarios de pckt.blog poseen su contenido en su PDS; AC ya replica contenido en su PDS
362362+ \item Ambas son aplicaciones Node.js/JavaScript
363363+\end{itemize}
364364+365365+La brecha: pckt.blog fue construido nativo de ATProto. AC tiene una base de usuarios Auth0 existente que debe migrarse elegantemente.
366366+367367+% ============ 5. MIGRACIÓN PROPUESTA ============
368368+369369+\section{Migración propuesta}
370370+\label{sec:migration}
371371+372372+\subsection{Fase 1: ATProto OAuth como inicio de sesión secundario}
373373+374374+Añadir ``Iniciar sesión con Bluesky'' junto a Auth0, sin eliminar Auth0.
375375+376376+\textbf{Infraestructura:}
377377+\begin{enumerate}
378378+ \item Publicar metadatos del cliente en \texttt{aesthetic.computer/oauth/client-metadata.json}
379379+ \item Añadir \texttt{@atproto/oauth-client-node}~\citep{npmAtprotoOauth} al backend
380380+ \item Crear dos nuevas funciones Netlify:
381381+ \begin{itemize}
382382+ \item \texttt{POST /api/atproto-auth/start} --- resolver handle, PAR, redirigir
383383+ \item \texttt{GET /api/atproto-auth/callback} --- intercambio de código con DPoP
384384+ \end{itemize}
385385+ \item Almacenar sesiones en Redis (DID, handle, par de claves DPoP, tokens)
386386+\end{enumerate}
387387+388388+\textbf{Flujo del cliente:} Un nuevo botón ``Iniciar sesión con Bluesky'' en \texttt{boot.mjs} activa el flujo ATProto OAuth. En caso de éxito, \texttt{window.acUSER} se llena desde la sesión ATProto (DID como \texttt{sub}, handle, sin correo electrónico a menos que el usuario lo proporcione). La superficie de la API de piezas es idéntica---las piezas ven un usuario con un handle, independientemente de qué ruta de autenticación creó la sesión.
389389+390390+\subsection{Fase 2: Puente de handles}
391391+392392+Cuando un usuario inicia sesión mediante ATProto, crear un puente para su handle hacia AC:
393393+394394+\begin{enumerate}
395395+ \item Extraer el nombre de usuario del handle ATProto (p. ej., \texttt{alice} de \texttt{alice.bsky.social})
396396+ \item Verificar disponibilidad contra la colección \texttt{@handles} de AC
397397+ \item Si está disponible y es válido (1--16 caracteres, alfanumérico), ofrecer reclamación con un clic
398398+ \item Si está ocupado, verificar si el correo del propietario existente coincide---ofrecer vinculación de cuentas
399399+ \item Si está ocupado por otra persona, solicitar una alternativa
400400+ \item Almacenar un mapeo DID $\leftrightarrow$ AC sub en MongoDB para futuros inicios de sesión
401401+\end{enumerate}
402402+403403+Los handles de dominio personalizado (p. ej., \texttt{alice.dev}) requieren que el usuario elija manualmente un handle de AC, ya que el dominio en sí puede no corresponder a una cadena de handle válida.
404404+405405+\subsection{Fase 3: Vinculación de identidad}
406406+407407+Los usuarios existentes de Auth0 pueden vincular su identidad ATProto:
408408+409409+\begin{enumerate}
410410+ \item Desde la configuración de la cuenta, iniciar ATProto OAuth
411411+ \item En caso de éxito, almacenar el DID externo junto al sub de Auth0
412412+ \item Los futuros inicios de sesión aceptan ambas rutas de autenticación
413413+ \item El contenido puede sincronizarse opcionalmente con el PDS externo del usuario (no solo con el PDS de AC)
414414+\end{enumerate}
415415+416416+Esta fase transforma el campo existente \texttt{users.atproto} de una identidad sombra a un vínculo de identidad de primera clase.
417417+418418+\subsection{Fase 4: ATProto-primario}
419419+420420+Una vez validada la migración:
421421+422422+\begin{enumerate}
423423+ \item Los nuevos registros utilizan ATProto OAuth por defecto (creando cuentas en el PDS de AC)
424424+ \item Auth0 permanece como ruta legacy para usuarios existentes
425425+ \item Descontinuación gradual de Auth0 a medida que los usuarios vinculan sus identidades ATProto
426426+ \item Eliminar la dependencia de Auth0, eliminar el coste de suscripción
427427+\end{enumerate}
428428+429429+\subsection{Enrutamiento de PDS}
430430+431431+Una decisión arquitectónica clave: ¿a dónde va el contenido?
432432+433433+\begin{itemize}
434434+ \item \textbf{Usuarios solo-Auth0}: el contenido se sincroniza con el PDS de AC (comportamiento actual)
435435+ \item \textbf{Usuarios ATProto con PDS externo}: el contenido se sincroniza con \emph{su} PDS
436436+ \item \textbf{Usuarios ATProto en el PDS de AC}: el contenido permanece en el PDS de AC
437437+\end{itemize}
438438+439439+Esto significa que las funciones de sincronización del backend (\texttt{media-atproto.mjs}, \texttt{painting-atproto.mjs}, etc.) necesitan una ruta condicional: resolver el endpoint PDS del usuario desde su documento DID y escribir en ese endpoint en lugar de asumir el PDS de AC.
440440+441441+% ============ 6. SEMÁNTICA DE HANDLES ============
442442+443443+\section{Semántica de handles}
444444+\label{sec:handles}
445445+446446+El handle es la parte más visible para los humanos de la pila de identidad, y la migración plantea preguntas sobre lo que un handle \emph{significa}.
447447+448448+\subsection{Modelo de handle actual}
449449+450450+Hoy, un handle de AC es:
451451+\begin{itemize}
452452+ \item Una cadena de 1--16 caracteres, por orden de llegada
453453+ \item Único dentro del espacio de nombres de AC
454454+ \item Usado para URLs (\texttt{@alice/painting}), chat y personalización del OS
455455+ \item Almacenado en MongoDB, cacheado en Redis
456456+ \item Replicado en el PDS como \texttt{alice.at.aesthetic.computer}
457457+\end{itemize}
458458+459459+\subsection{Modelo de handle ATProto}
460460+461461+Un handle ATProto es:
462462+\begin{itemize}
463463+ \item Un nombre de dominio (cualquier nombre DNS válido)
464464+ \item Verificado bidireccionalmente contra un DID
465465+ \item Globalmente único por autoridad DNS
466466+ \item Portátil entre servicios
467467+\end{itemize}
468468+469469+\subsection{Puente entre los modelos}
470470+471471+La propuesta: un handle de AC es un \emph{alias} que mapea a un DID. La fuente de verdad se desplaza de MongoDB a la capa DID. Múltiples métodos de inicio de sesión (Auth0, ATProto OAuth) se resuelven al mismo DID, que se resuelve al mismo handle de AC.
472472+473473+Para AC Native OS~\citep{scudder2026os}, donde el handle está inscrito en \texttt{config.json} en la partición de arranque, esto significa que la identidad del dispositivo está respaldada por una identidad criptográfica. ``Hola @alice'' en la pantalla de arranque significa el DID de Alice, la clave de firma de Alice, la identidad portátil de Alice---no solo una cadena en un archivo de configuración.
474474+475475+% ============ 7. PREGUNTAS ABIERTAS ============
476476+477477+\section{Preguntas abiertas}
478478+\label{sec:questions}
479479+480480+\textbf{Prioridad de handles.} Si \texttt{alice} no está reclamado en AC pero \texttt{alice.bsky.social} inicia sesión, ¿debería obtenerlo automáticamente? El orden de llegada es simple pero permite el acaparamiento. La prioridad verificada por ATProto es más justa pero añade complejidad.
481481+482482+\textbf{Requisito de correo electrónico.} Auth0 proporciona correo electrónico verificado para recuperación de cuentas. ATProto OAuth no garantiza correo electrónico. ¿Debería AC requerir un correo electrónico para funcionalidades completas de la cuenta (compras, notificaciones)?
483483+484484+\textbf{Multi-tenant.} AC opera un segundo tenant (\texttt{sotce}) con Auth0 separado. ¿Cómo se mapean las identidades ATProto entre tenants? El DID es agnóstico al tenant, lo que puede simplificar la identidad entre tenants.
485485+486486+\textbf{Servidor de sesiones.} Las funcionalidades en tiempo real (chat, multijugador) se autentican mediante tokens Auth0 reenviados a través de WebSocket. El servidor de sesiones debe aceptar tokens emitidos por ATProto o un token de sesión unificado.
487487+488488+\textbf{Emparejamiento de dispositivos.} AC Native OS empareja mediante un código de 6 caracteres intercambiado a través de Auth0. El equivalente en ATProto: escanear un código QR que inicia un flujo OAuth en el teléfono, entregando tokens al dispositivo.
489489+490490+\textbf{Identidad de administrador.} El administrador actualmente es \texttt{handle === "jeffrey" \&\& sub === ADMIN\_SUB}. Bajo autenticación ATProto-first, el administrador es \texttt{did === admin\_did}---más limpio, fundamentado criptográficamente.
491491+492492+% ============ 8. TRABAJO RELACIONADO ============
493493+494494+\section{Trabajo relacionado}
495495+\label{sec:related}
496496+497497+\textbf{Identidad descentralizada.} La especificación DID del W3C~\citep{w3cdid2022} proporciona el marco formal para identificadores descentralizados. El método \texttt{did:plc} del AT Protocol~\citep{atproto2024did} lo extiende con garantías de consistencia fuerte y un directorio centralizado-pero-auditable en \texttt{plc.directory}. Este es un compromiso pragmático: la descentralización completa de la resolución de identidad sigue siendo un problema abierto, y \texttt{did:plc} intercambia algo de descentralización por fiabilidad operativa.
498498+499499+\textbf{Aplicaciones nativas de ATProto.} pckt.blog~\citep{pcktblog2025} demuestra el blogging; Leaflet.pub y Offprint.app colaboran en lexicons compartidos a través de Standard.site~\citep{standardsite2025}. Estas aplicaciones demuestran la viabilidad de la autenticación solo-ATProto para plataformas de contenido.
500500+501501+\textbf{Seguridad OAuth.} DPoP~\citep{rfc9449dpop} previene el robo de tokens; PAR~\citep{rfc9126par} previene la manipulación de parámetros; PKCE~\citep{rfc7636pkce} previene la interceptación de códigos. Juntos representan el estado del arte en seguridad OAuth basada en navegador---significativamente más fuerte que el flujo Auth0 SPA que AC utiliza actualmente.
502502+503503+\textbf{Identidad convivial.} Las herramientas para la convivialidad de Illich~\citep{illich1973tools} enmarcan la pregunta: ¿el sistema de identidad expande la autonomía personal, o requiere dependencia de un proveedor? Auth0 es un servicio administrado---conveniente pero dependiente. La identidad ATProto es portátil, autoverificable e independiente del proveedor. La visión de Nelson de la computación personal~\citep{nelson1974computerlib} se extiende naturalmente a la identidad personal: deberías ser dueño de tu nombre en la red.
504504+505505+% ============ 9. CONCLUSIÓN ============
506506+507507+\section{Conclusión}
508508+509509+Aesthetic Computer ya ejecuta un PDS, acuña DIDs, sincroniza contenido con registros ATProto y publica lexicons personalizados. La única pieza que falta es permitir que los usuarios se autentiquen a través de esa infraestructura en lugar de pasar por Auth0. La migración no es una reescritura---es la eliminación de un parche.
510510+511511+El enfoque por fases (ATProto como inicio de sesión secundario $\to$ puente de handles $\to$ vinculación de identidad $\to$ ATProto-primario) asegura que ningún usuario existente sea perturbado. El estado final: una plataforma de computación creativa donde tu handle es una identidad criptográfica, tu contenido vive en un servidor que tú controlas, e iniciar sesión significa demostrar que posees tus claves---no confiar en un tercero para que responda por ti.
512512+513513+El PDS ya está funcionando. Los DIDs ya están acuñados. Los lexicons ya están publicados. Es hora de dejar que los usuarios inicien sesión por la puerta principal.
514514+515515+% ============ REFERENCIAS ============
516516+517517+\vspace{0.5em}
518518+\noindent\rule{\columnwidth}{0.5pt}
519519+520520+\subsection*{Enlaces de referencia}
521521+522522+\noindent\small
523523+524524+\textbf{Especificaciones del AT Protocol:}
525525+\begin{itemize}
526526+ \item \url{https://atproto.com/specs} --- Especificación completa del protocolo
527527+ \item \url{https://atproto.com/specs/oauth} --- Especificación OAuth
528528+ \item \url{https://atproto.com/specs/handle} --- Resolución de handles
529529+ \item \url{https://atproto.com/specs/cryptography} --- Métodos criptográficos
530530+ \item \url{https://web.plc.directory/spec/v0.1/did-plc} --- Especificación DID PLC
531531+ \item \url{https://atproto.com/guides/lexicon} --- Sistema de esquemas Lexicon
532532+ \item \url{https://atproto.com/guides/oauth-patterns} --- Patrones de implementación OAuth
533533+\end{itemize}
534534+535535+\textbf{Guías de implementación:}
536536+\begin{itemize}
537537+ \item \url{https://docs.bsky.app/blog/oauth-atproto} --- Construir aplicaciones ATProto OAuth
538538+ \item \url{https://docs.bsky.app/docs/advanced-guides/resolving-identities} --- Resolución de identidades
539539+ \item \url{https://docs.bsky.app/docs/advanced-guides/oauth-client} --- Guía del cliente OAuth
540540+\end{itemize}
541541+542542+\textbf{Paquetes NPM:}
543543+\begin{itemize}
544544+ \item \texttt{@atproto/oauth-client-node} --- Cliente OAuth para Node.js
545545+ \item \texttt{@atproto/oauth-client-browser} --- Cliente OAuth para navegador
546546+ \item \texttt{@atproto/api} --- Cliente TypeScript XRPC
547547+ \item \texttt{@atproto/identity} --- Resolución de DID/handle
548548+ \item \texttt{@atcute/oauth-browser-client} --- Alternativa ligera
549549+\end{itemize}
550550+551551+\textbf{Implementaciones de referencia:}
552552+\begin{itemize}
553553+ \item \url{https://github.com/pilcrowonpaper/atproto-oauth-example} --- Ejemplo OAuth con Astro
554554+ \item \url{https://github.com/bluesky-social/atproto} --- Monorepo oficial de ATProto
555555+ \item \url{https://standard.site/docs/introduction/} --- Lexicons compartidos de Standard.site
556556+\end{itemize}
557557+558558+\textbf{Aplicaciones que usan ATProto Auth:}
559559+\begin{itemize}
560560+ \item pckt.blog --- Blogging en la web social abierta
561561+ \item Leaflet.pub --- Publicación de formato largo
562562+ \item Offprint.app --- Escritura colaborativa
563563+\end{itemize}
564564+565565+\textbf{Estándares IETF:}
566566+\begin{itemize}
567567+ \item RFC 9449 --- DPoP (Demonstrating Proof of Possession)
568568+ \item RFC 7636 --- PKCE (Proof Key for Code Exchange)
569569+ \item RFC 9126 --- PAR (Pushed Authorization Requests)
570570+\end{itemize}
571571+572572+\vspace{0.5em}
573573+574574+\bibliographystyle{plainnat}
575575+\bibliography{references}
576576+577577+\end{document}
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+1111+\setmainfont{Latin Modern Roman}
1212+\setsansfont{Latin Modern Sans}
1313+1414+% Custom AC fonts
1515+\newfontfamily\acbold{ywft-processing-bold}[
1616+ Path=../../system/public/type/webfonts/,
1717+ Extension=.ttf
1818+]
1919+\newfontfamily\aclight{ywft-processing-light}[
2020+ Path=../../system/public/type/webfonts/,
2121+ Extension=.ttf
2222+]
2323+\newfontfamily\kidlispfont{ComicRelief-Regular}[
2424+ Path=../arxiv-kidlisp/fonts/,
2525+ Extension=.ttf
2626+]
2727+\newfontfamily\kidlispbold{ComicRelief-Bold}[
2828+ Path=../arxiv-kidlisp/fonts/,
2929+ Extension=.ttf
3030+]
3131+\setmonofont{Latin Modern Mono}[Scale=0.85]
3232+3333+% === PACKAGES ===
3434+\usepackage{xcolor}
3535+\usepackage{titlesec}
3636+\usepackage{enumitem}
3737+\usepackage{booktabs}
3838+\usepackage{tabularx}
3939+\usepackage{fancyhdr}
4040+\usepackage{hyperref}
4141+\usepackage{graphicx}
4242+\graphicspath{{figures/}{../arxiv-kidlisp/figures/}}
4343+\usepackage{ragged2e}
4444+\usepackage{microtype}
4545+\usepackage{listings}
4646+\usepackage{natbib}
4747+\usepackage[colorspec=0.92]{draftwatermark}
4848+4949+% === COLORS (AC palette) ===
5050+\definecolor{acpink}{RGB}{180,72,135}
5151+\definecolor{acpurple}{RGB}{120,80,180}
5252+\definecolor{acdark}{RGB}{64,56,74}
5353+\definecolor{acgray}{RGB}{119,119,119}
5454+\definecolor{klbrand}{RGB}{205,92,155}
5555+\definecolor{klcyan}{RGB}{112,214,255}
5656+\definecolor{kldark}{RGB}{48,43,58}
5757+\definecolor{draftcolor}{RGB}{205,92,155}
5858+5959+% === DRAFT WATERMARK ===
6060+\DraftwatermarkOptions{
6161+ text=ARBEJDSUDKAST,
6262+ fontsize=3cm,
6363+ color=draftcolor!18,
6464+ angle=45,
6565+ pos={0.5\paperwidth, 0.5\paperheight}
6666+}
6767+6868+% === KIDLISP SYNTAX COLORS ===
6969+\definecolor{klfn}{RGB}{0,136,170}
7070+\definecolor{klform}{RGB}{119,51,170}
7171+\definecolor{klrepeat}{RGB}{170,0,170}
7272+\definecolor{klnum}{RGB}{204,0,102}
7373+\definecolor{klstr}{RGB}{170,120,0}
7474+\definecolor{klcmt}{RGB}{102,102,102}
7575+\definecolor{klmath}{RGB}{0,136,0}
7676+\definecolor{klvar}{RGB}{204,102,0}
7777+\definecolor{klembed}{RGB}{0,136,0}
7878+7979+% KidLisp inline color macros
8080+\newcommand{\kn}[1]{\textcolor{klnum}{#1}}
8181+\newcommand{\kt}[1]{\textcolor{klstr}{#1}}
8282+\newcommand{\kv}[1]{\textcolor{klvar}{#1}}
8383+\newcommand{\ke}[1]{\textcolor{klembed}{\textbf{#1}}}
8484+\newcommand{\km}[1]{\textcolor{klmath}{#1}}
8585+8686+% === HYPERREF ===
8787+\hypersetup{
8888+ colorlinks=true,
8989+ linkcolor=acpurple,
9090+ urlcolor=acpurple,
9191+ citecolor=acpurple,
9292+ pdfauthor={@jeffrey},
9393+ pdftitle={KidLisp-kort: Programmer der kan v\ae re p\aa\ et kort},
9494+}
9595+9696+% === SECTION FORMATTING ===
9797+\titleformat{\section}
9898+ {\normalfont\bfseries\normalsize\uppercase}
9999+ {\thesection.}
100100+ {0.5em}
101101+ {}
102102+\titlespacing{\section}{0pt}{1.2em}{0.3em}
103103+104104+\titleformat{\subsection}
105105+ {\normalfont\bfseries\small}
106106+ {\thesubsection}
107107+ {0.5em}
108108+ {}
109109+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
110110+111111+% === HEADER/FOOTER ===
112112+\pagestyle{fancy}
113113+\fancyhf{}
114114+\renewcommand{\headrulewidth}{0pt}
115115+\fancyhead[C]{\footnotesize\color{acpink}\textit{Arbejdsudkast --- ikke til citation}}
116116+\fancyfoot[C]{\footnotesize\thepage}
117117+118118+% === CUSTOM COMMANDS ===
119119+\newcommand{\acdot}{{\color{acpink}.}}
120120+\newcommand{\kidlisp}{\textsc{KidLisp}}
121121+122122+% === LISTINGS ===
123123+\lstdefinelanguage{kidlisp}{
124124+ morekeywords=[1]{wipe,ink,line,box,circle,tri,plot,flood,shape,zoom,scroll,spin,blur,contrast,embed,layer,width,height,frame,time,wiggle,melody,mic,suck,sort,form,trans,cube,move,scale,hop,overtone,resolution,write,text,type,stamp,paste,point,poly,noise,fade,pan,unpan,mask,unmask,flip,crawl,left,right,up,down,goto,face,outline,fill,stroke},
125125+ morekeywords=[2]{def,let,if,cond,once,later,lambda,do},
126126+ morekeywords=[3]{repeat},
127127+ morekeywords=[4]{random,sin,cos,tan,floor,ceil,round,abs,sqrt,min,max},
128128+ sensitive=true,
129129+ morecomment=[l]{;},
130130+ morestring=[b]",
131131+ escapeinside={|}{|},
132132+}
133133+\lstset{
134134+ language=kidlisp,
135135+ basicstyle=\ttfamily\small,
136136+ keywordstyle=[1]\color{klfn}\bfseries,
137137+ keywordstyle=[2]\color{klform}\bfseries,
138138+ keywordstyle=[3]\color{klrepeat}\bfseries,
139139+ keywordstyle=[4]\color{klmath},
140140+ commentstyle=\color{klcmt}\itshape,
141141+ stringstyle=\color{klstr},
142142+ breaklines=true,
143143+ frame=single,
144144+ rulecolor=\color{acgray!30},
145145+ backgroundcolor=\color{acgray!5},
146146+ xleftmargin=0.5em,
147147+ xrightmargin=0.5em,
148148+ aboveskip=0.5em,
149149+ belowskip=0.5em,
150150+}
151151+152152+\lstdefinelanguage{python}{
153153+ morekeywords={def,return,import,from,class,if,else,for,in,with,as,try,except,None,True,False,self,and,or,not,lambda,yield,pass,break,continue,raise,while},
154154+ sensitive=true,
155155+ morecomment=[l]{\#},
156156+ morestring=[b]",
157157+ morestring=[b]',
158158+}
159159+\lstset{
160160+ language=kidlisp,
161161+}
162162+163163+% === LIST SETTINGS ===
164164+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
165165+\setlist[enumerate]{nosep, leftmargin=1.2em}
166166+167167+% === COLUMN SEPARATION ===
168168+\setlength{\columnsep}{1.8em}
169169+170170+% === PARAGRAPH SETTINGS ===
171171+\setlength{\parindent}{1em}
172172+\setlength{\parskip}{0.3em}
173173+174174+\tolerance=800
175175+\emergencystretch=1em
176176+\hyphenpenalty=50
177177+178178+\begin{document}
179179+180180+% ============ TITLE BLOCK ============
181181+182182+\twocolumn[{%
183183+\begin{center}
184184+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
185185+{\kidlispbold\fontsize{24pt}{28pt}\selectfont\color{kldark} Kid{\color{klbrand}Lisp}-kort}\par
186186+\vspace{0.2em}
187187+{\kidlispfont\fontsize{11pt}{13pt}\selectfont\color{klbrand} Programmer der kan v\ae re p\aa\ et kort}\par
188188+\vspace{0.6em}
189189+{\normalsize @jeffrey}\par
190190+{\small\color{acgray} Aesthetic\acdot Computer}\par
191191+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
192192+\vspace{0.3em}
193193+{\small\color{acpurple} \url{https://kidlisp.com} \enspace$\cdot$\enspace \url{https://aesthetic.computer}}\par
194194+\vspace{0.6em}
195195+\rule{\textwidth}{1.5pt}
196196+\vspace{0.5em}
197197+\end{center}
198198+199199+\begin{center}
200200+{\small\color{acpink}\textbf{[ arbejdsudkast --- ikke til citation ]}}
201201+\end{center}
202202+\vspace{0.3em}
203203+204204+\begin{quote}
205205+\small\noindent\textbf{Abstrakt.}
206206+\kidlisp{}-programmer er korte. Et typisk program best\aa r af 2--4 linjer S-udtryk, der producerer en komplet visuel komposition---en stjerneburst, en spiral, et t\ae ppe, en fraktal. Denne korthed er ikke tilf\ae ldig men designet: sproget udelader brugerdefinerede funktioner, rekursion og abstraktionsmekanismer, s\aa\ programmer forbliver flade og l\ae sbare. Vi observerer, at denne fladhed skaber en naturlig korrespondance mellem programmer og fysiske kort. Et \kidlisp{}-program, dets kildekode og dets renderede output kan sameksistere p\aa\ et enkelt trykt kort. Denne artikel beskriver \emph{KidLisp Cards}-formatet---et s\ae t programmer organiseret efter visuel kategori---og en Python-renderingspipeline (PIL-baseret fortolker), der producerer kortbilleder uden for browseren. Vi diskuterer, hvad kort er nu (en kurateret notesbog af visuelle koaner), hvad de kunne blive (byttekort, p\ae dagogiske sekvenser, trykte partiturer, postkunst), og hvordan kortbegr\ae nsningen p\aa virker sprogdesignet.
207207+\end{quote}
208208+\vspace{0.5em}
209209+}]
210210+211211+% ============ 1. INTRODUKTION ============
212212+213213+\section{Introduktion}
214214+215215+De fleste programmeringssprog producerer programmer, der er for lange til at trykke p\aa\ et kartotekskort. Dette er en konsekvens af abstraktion: generelle programmeringssprog opmuntrer til nedbrydning i funktioner, klasser, moduler og filer. Programmet er fordelt over en kodebase. Ingen enkelt artefakt fanger helheden.
216216+217217+\kidlisp{} er anderledes. Dets programmer er typisk 1--6 linjer lange. En komplet animeret scene, et geometrisk m\o nster, en rekursiv fraktal eller et moir\'{e}-interferensm\o nster kan v\ae re i f\aa\ S-udtryk. Dette er ikke en begr\ae nsning men et designvalg: \kidlisp{} udelader brugerdefinerede funktioner, rekursion (undtagen gennem \texttt{later}), mutable datastrukturer og imports. Programmer er flade sekvenser af tegnekommandoer, l\o kker og betingelser.
218218+219219+Denne fladhed skaber en mulighed. Hvis kildekoden til et program kan v\ae re p\aa\ et kort, og det visuelle output af det program kan v\ae re p\aa\ det samme kort, s\aa\ bliver kortet en selvst\ae ndig artefakt: et program du kan holde, give til nogen, s\ae tte p\aa\ en v\ae g eller sende med posten. Kortet er b\aa de dokumentation og eksekverbart. Det er et \emph{partitur}---instruktioner til at producere en visuel begivenhed.
220220+221221+Denne artikel beskriver KidLisp Cards-formatet (\S\ref{sec:format}), offline-renderingspipelinen (\S\ref{sec:pipeline}), det aktuelle kortkatalog (\S\ref{sec:catalog}), layoutvariationer og deres sociale og fysiske affordanser (\S\ref{sec:layouts}) samt spekulative fremtider for formatet (\S\ref{sec:futures}).
222222+223223+% ============ 2. KORTFORMATET ============
224224+225225+\section{Kortformatet}
226226+\label{sec:format}
227227+228228+Et KidLisp-kort har tre elementer:
229229+230230+\begin{enumerate}
231231+ \item \textbf{Titel.} Et kort navn der fremkalder det visuelle output: ``Starburst,'' ``Honeycomb,'' ``Spiral Walk.''
232232+ \item \textbf{Renderet output.} Et pixel-art-billede (160$\times$120 standardopl\o sning, opskaleret 3$\times$ med nearest-neighbor-interpolation for at bevare skarpe kanter).
233233+ \item \textbf{Kildekode.} Det komplette \kidlisp{}-program, typisk 1--4 linjer, vist i monospace under billedet.
234234+\end{enumerate}
235235+236236+Kortet er selvst\ae ndigt: enhver der l\ae ser kildekoden kan reproducere billedet pr\ae cist, i enhver \kidlisp{}-fortolker. Der er ingen eksterne afh\ae ngigheder, ingen imports, ingen konfiguration. Programmet \emph{er} kortet.
237237+238238+\subsection{Kortdimensioner}
239239+240240+Det renderede billede fylder et 160$\times$120 pixel-l\ae rred (4:3-format), svarende til standard \kidlisp{}-opl\o sningen. Ved 3$\times$ opskalering producerer dette et 480$\times$360 pixel-billede egnet til sk\ae rmvisning. Til tryk er kort dimensioneret som 4$\times$6 tommer (standard kartotekskort / postkort), med billedet i den \o vre del og kildekoden nedenunder.
241241+242242+\subsection{Hvad g\o r et godt kort}
243243+244244+Ikke ethvert \kidlisp{}-program giver et godt kort. De bedste kort deler egenskaber:
245245+246246+\begin{itemize}
247247+ \item \textbf{Korthed.} 1--4 linjer. Hvis kildekoden ikke passer komfortabelt under billedet, er programmet for langt til formatet.
248248+ \item \textbf{Overraskelse.} Outputtet b\o r v\ae re mere komplekst eller smukt end kildekoden antyder. Et tre-linjers program der producerer et moir\'{e}-m\o nster belønner n\ae rmere inspektion.
249249+ \item \textbf{L\ae sbarhed.} En l\ae ser b\o r kunne f\o lge fra kilde til output uden at k\o re programmet. Forbindelsen mellem kode og billede b\o r v\ae re synlig, selv om den ikke er umiddelbart indlysende.
250250+ \item \textbf{Uafh\ae ngighed.} Ingen \texttt{\$code}-indlejringer, ingen ekstern tilstand. Kortet skal fungere isoleret.
251251+\end{itemize}
252252+253253+\begin{figure}[t]
254254+\centering
255255+\fbox{\includegraphics[width=0.47\columnwidth]{card-starburst.png}}%
256256+\hfill%
257257+\fbox{\includegraphics[width=0.47\columnwidth]{card-moire.png}}
258258+\caption{To programkort renderet af Python-fortolkeren: ``Starburst'' (72 radiale linjer, 3 linjer kode) og ``Moir\'{e}'' (overlappende koncentriske cirkler, 3 linjer). Disse er trivielle eksempler---de demonstrerer kortformatets struktur men repr\ae senterer ikke sprogets udtryksevne eller formatets ambitioner.}
259259+\label{fig:program-cards}
260260+\end{figure}
261261+262262+% ============ 3. RENDERINGSPIPELINE ============
263263+264264+\section{Offline-renderingspipeline}
265265+\label{sec:pipeline}
266266+267267+KidLisp-kort renderes med en Python-fortolker der k\o rer uden for browseren. Dette muligg\o r batch-rendering, trykproduktion og notesbog-baseret kuratering uden at kr\ae ve den fulde Aesthetic\acdot Computer-runtime.
268268+269269+\subsection{Python-fortolkeren}
270270+271271+Fortolkeren (\texttt{notebooks/ac.py}, 452 linjer) implementerer en delm\ae ngde af \kidlisp{} tilstr\ae kkelig til statisk kortrendering:
272272+273273+\begin{itemize}
274274+ \item \textbf{Tegning:} \texttt{wipe}, \texttt{ink}, \texttt{line}, \texttt{box}, \texttt{circle}, \texttt{tri}, \texttt{plot}, \texttt{shape}, \texttt{flood}
275275+ \item \textbf{Skildpadde:} \texttt{crawl}, \texttt{left}, \texttt{right}, \texttt{goto}, \texttt{face}, \texttt{up}, \texttt{down}
276276+ \item \textbf{Kontrol:} \texttt{repeat}, \texttt{if}, \texttt{def}, \texttt{later}, \texttt{do}
277277+ \item \textbf{Matematik:} fuld aritmetik, trigonometri, \texttt{abs}, \texttt{sqrt}, \texttt{min}, \texttt{max}
278278+ \item \textbf{L\ae rred:} \texttt{resolution}, \texttt{fill}, \texttt{outline}, \texttt{stroke}
279279+\end{itemize}
280280+281281+Fortolkeren bruger PIL (Pillow) til rendering. Hvert kort tegnes p\aa\ et RGBA-l\ae rred, opskaleres med nearest-neighbor-interpolation og eksporteres som PNG. Python-implementeringen er bevidst simplere end browser-evaluatoren (15.161 linjer)---den udelader animation, lyd, indlejring og timing-syntaks og fokuserer udelukkende p\aa\ den delm\ae ngde der er n\o dvendig for statisk visuelt output.
282282+283283+\subsection{Jupyter Notebook-arbejdsgang}
284284+285285+Det prim\ae re kurateringsv\ae rkt\o j er en Jupyter-notesbog (\texttt{notebooks/kidlisp-cards.ipynb}). Funktionen \texttt{show\_card()} renderer et program og viser det inline som et HTML-kort:
286286+287287+\begin{lstlisting}[language=python,basicstyle=\ttfamily\footnotesize]
288288+show_card("Starburst", """(wipe black)
289289+(ink white)
290290+(repeat 72 i
291291+ (line 80 60
292292+ (+ 80 (* 55 (cos (* i 0.087))))
293293+ (+ 60 (* 55 (sin (* i 0.087))))))""")
294294+\end{lstlisting}
295295+296296+Hvert kald producerer et kort med m\o rk baggrund med titel, renderet billede og kildekode vist inline. Notesbogen fungerer b\aa de som udviklingsmilj\o\ og galleri---at scrolle gennem notesbogen er som at bladre i et s\ae t kort.
297297+298298+\subsection{To fortolkere, \'{e}t sprog}
299299+300300+Eksistensen af to uafh\ae ngige fortolkere (JavaScript i browseren, Python i notesbogen) tjener som en krydsvalideringsmekanisme. Hvis et program renderes identisk i begge, er dets adf\ae rd bestemt udelukkende af sprogets semantik snarere end implementeringsdetaljer. Programmer der afh\ae nger af browserspecifikke funktioner (animation, lyd, indlejrede lag) udelukkes fra kortformatet pr. konstruktion---de renderer simpelthen ikke i Python-fortolkeren.
301301+302302+% ============ 4. KORTKATALOG ============
303303+304304+\section{Kortkataloget}
305305+\label{sec:catalog}
306306+307307+Den aktuelle notesbog indeholder 28 kort organiseret i syv kategorier. Hver kategori udforsker et andet aspekt af sproget gennem minimale eksempler. Disse programmer er bevidst trivielle---tegne\o velser, matematiske illustrationer, skildpaddeg\aa ture. De etablerer kortformatets struktur men repr\ae senterer ikke dets udtryksm\ae ssige potentiale. De interessante kort er endnu ikke lavet. Formatets v\ae rdi vil fremkomme fra programmer der bruger korthed til at sige noget v\ae rd at sige, ikke fra geometriske demoer.
308308+309309+\subsection{Linjer}
310310+311311+Linjekort demonstrerer \texttt{repeat} og trigonometri. En stjerneburst udsender 72 linjer fra centrum. En krydsarkering overlejrer vandrette og lodrette gitre med lav opacitet.
312312+313313+\begin{figure}[h]
314314+\centering
315315+\fbox{\includegraphics[width=0.47\columnwidth]{card-starburst.png}}%
316316+\hfill%
317317+\fbox{\includegraphics[width=0.47\columnwidth]{card-crosshatch.png}}
318318+\caption{``Starburst'' og ``Crosshatch'' --- linjekort.}
319319+\label{fig:lines}
320320+\end{figure}
321321+322322+\begin{lstlisting}
323323+; Starburst — 72 radial lines
324324+(wipe |\kt{black}|)
325325+(ink |\kt{white}|)
326326+(repeat |\kn{72}| |\kv{i}|
327327+ (line |\kn{80}| |\kn{60}|
328328+ (|\km{+}| |\kn{80}| (|\km{*}| |\kn{55}| (|\km{cos}| (|\km{*}| |\kv{i}| |\kn{0.087}|))))
329329+ (|\km{+}| |\kn{60}| (|\km{*}| |\kn{55}| (|\km{sin}| (|\km{*}| |\kv{i}| |\kn{0.087}|))))))
330330+\end{lstlisting}
331331+332332+\subsection{Cirkler}
333333+334334+Cirkelkort bruger \texttt{outline}-tilstand og indlejrede \texttt{repeat}-l\o kker. ``Ripple'' tegner 30 koncentriske cirkler med bl\aa skiftende farve.
335335+336336+\begin{figure}[h]
337337+\centering
338338+\fbox{\includegraphics[width=0.47\columnwidth]{card-ripple.png}}%
339339+\hfill%
340340+\fbox{\includegraphics[width=0.47\columnwidth]{card-mondrian.png}}
341341+\caption{``Ripple'' (cirkler) og ``Mondrian'' (bokse).}
342342+\label{fig:circles-boxes}
343343+\end{figure}
344344+345345+\subsection{Bokse \& komposition}
346346+347347+``Mondrian'' genskaber det prim\ae rfarvede gitter med fire farvede rektangler. ``Nest'' tegner 10 indrykkede rektangler med skiftende nuancer.
348348+349349+\subsection{Matematik \& kurver}
350350+351351+Disse kort bruger \texttt{plot} med matematiske funktioner. ``Lissajous'' tegner en Lissajous-figur med 600 punkter. ``Spiral'' plotter en pol\ae r spiral.
352352+353353+\begin{figure}[h]
354354+\centering
355355+\fbox{\includegraphics[width=0.47\columnwidth]{card-lissajous.png}}%
356356+\hfill%
357357+\fbox{\includegraphics[width=0.47\columnwidth]{card-sierpinski.png}}
358358+\caption{``Lissajous'' (matematiske kurver) og ``Sierpinski'' (bitwise AND-fraktal).}
359359+\label{fig:math}
360360+\end{figure}
361361+362362+\subsection{Farve \& gradienter}
363363+364364+``Sierpinski'' bruger bitwise AND til at generere Sierpinski-trekanten: \texttt{(if (= 0 (\& x y)) (plot (+ 16 x) y))}. ``Sunflower'' plotter 500 punkter langs en gylden-vinkel-spiral med cykliske farver.
365365+366366+\subsection{Skildpaddegrafik}
367367+368368+Skildpaddekort bruger \texttt{crawl}, \texttt{left}, \texttt{right} og \texttt{face}. En femtakket stjerne bruger \texttt{(right 144)}. Et tr\ae\ bruger \texttt{later} til rekursiv forgrening. En snefnug indlejrer Koch-kurvesegmenter.
369369+370370+\begin{figure}[h]
371371+\centering
372372+\fbox{\includegraphics[width=0.47\columnwidth]{card-star.png}}%
373373+\hfill%
374374+\fbox{\includegraphics[width=0.47\columnwidth]{card-tree.png}}
375375+\caption{``Star'' og ``Tree'' --- skildpaddegrafikkort.}
376376+\label{fig:turtle}
377377+\end{figure}
378378+379379+\begin{lstlisting}
380380+; Star — 5 sides, 144-degree turns
381381+(wipe |\kt{navy}|)
382382+(ink |\kt{yellow}|)
383383+(repeat |\kn{5}| |\kv{i}| (crawl |\kn{50}|) (right |\kn{144}|))
384384+\end{lstlisting}
385385+386386+\subsection{Minimale koaner}
387387+388388+De korteste kort i s\ae ttet. ``Horizon'' er tre linjer: m\o rk himmel, gylden jord. ``Pip'' er en enkelt r\o d prik p\aa\ sort. Disse kort n\ae rmer sig det minimale levedygtige program---den mindste m\ae ngde kode der producerer et genkendeligt billede.
389389+390390+\begin{figure}[h]
391391+\centering
392392+\fbox{\includegraphics[width=0.47\columnwidth]{card-horizon.png}}%
393393+\hfill%
394394+\fbox{\includegraphics[width=0.47\columnwidth]{card-pip.png}}
395395+\caption{``Horizon'' og ``Pip'' --- minimale koaner (2--3 linjer hver).}
396396+\label{fig:koans}
397397+\end{figure}
398398+399399+\begin{lstlisting}
400400+; Pip — the minimum card
401401+(wipe |\kt{black}|)
402402+(ink |\kt{red}|)
403403+(circle |\kn{80}| |\kn{60}| |\kn{4}|)
404404+\end{lstlisting}
405405+406406+\begin{figure*}[t]
407407+\centering
408408+\fbox{\includegraphics[height=5.5cm]{card-nest.png}}%
409409+\hfill%
410410+\fbox{\includegraphics[height=5.5cm]{card-sunflower.png}}%
411411+\hfill%
412412+\fbox{\includegraphics[height=5.5cm]{card-snowflake.png}}%
413413+\hfill%
414414+\fbox{\includegraphics[height=5.5cm]{card-spiral.png}}
415415+\caption{Fire komplette kort der viser formatet: titel, renderet output og kildekode. Fra venstre mod h\o jre: ``Nest,'' ``Sunflower,'' ``Snowflake,'' ``Spiral.'' Hvert kort er selvst\ae ndigt---kildekoden under billedet er det komplette program. Disse er trivielle tegne\o velser, ikke udtryk for formatets potentiale.}
416416+\label{fig:four-cards}
417417+\end{figure*}
418418+419419+% ============ 5. LAYOUTS ============
420420+421421+\section{Layouts}
422422+\label{sec:layouts}
423423+424424+Kortformatet har intet fast layout. Hvordan de tre elementer (titel, output, kilde) arrangeres bestemmer hvad kortet afforderer---hvad du kan g\o re med det fysisk og socialt. Dette afsnit udforsker layoutvariationer og deres konsekvenser.
425425+426426+\begin{figure*}[t]
427427+\centering
428428+\includegraphics[width=\textwidth]{layout-comparison.png}
429429+\caption{Tre layoutstrategier. \textbf{Vertikal:} titel / billede / kilde stablet fra top til bund, optimeret til telefonsk\ae rme og portr\ae ttryk. \textbf{Horisontal:} billede til venstre, titel og kilde til h\o jre, velegnet til landskabskort og side-om-side-gennemsyn. \textbf{Postkort:} renderet output p\aa\ forsiden, kildekode og metadata p\aa\ bagsiden---et kort der kan sendes med posten, hvor programmet er skjult indtil man vender det.}
430430+\label{fig:layouts}
431431+\end{figure*}
432432+433433+\subsection{Vertikal (sk\ae rm / tryk)}
434434+435435+Standardlayoutet stabler titel, billede og kilde fra top til bund. Dette er notesbog-layoutet---det scroller naturligt p\aa\ en telefon eller i en Jupyter-notesbog. Til tryk passer det til et 4$\times$6 tommers kort i portr\ae tformat. L\ae serens \o je bev\ae ger sig nedad fra navn til billede til kode og f\o lger forholdet mellem programmet og dets output.
436436+437437+\subsection{Horisontal (s\ae t / landskab)}
438438+439439+Et landskabslayout placerer det renderede billede til venstre og kildekoden til h\o jre. Dette fungerer til at sprede kort ud over et bord, til pr\ae sentationer og til sammenligning side om side. To kort placeret ved siden af hinanden skaber et diptyk---betragteren kan sammenligne programmer og output samtidigt.
440440+441441+\subsection{Postkort (postkunst)}
442442+443443+Postkortlayoutet adskiller forside fra bagside. Forsiden viser kun det renderede billede, fuld udblødning, ingen tekst. Bagsiden viser kildekoden, forfatterens handle, kortkoden (\texttt{\$xyz}) og et frim\ae rkeomr\aa de. Modtageren ser billedet f\o rst---en visuel artefakt. At vende kortet afsl\o rer programmet: instruktionerne der producerede det. Kortet er b\aa de kunstobjekt og eksekverbart partitur, afh\ae ngigt af hvilken side man l\ae ser.
444444+445445+\begin{figure*}[h]
446446+\centering
447447+\includegraphics[width=\textwidth]{layout-affordances.png}
448448+\caption{Sociale og fysiske affordanser ved kortformatet. Hver affordans f\o lger af kortets materialitet: det kan \textbf{deles} fra h\aa nd til h\aa nd, \textbf{sendes} som postkort, \textbf{byttes} og samles, \textbf{undervises} fra i p\ae dagogiske sekvenser, \textbf{opf\o res} som et grafisk partitur eller \textbf{s\ae ttes op} p\aa\ en galleriv\ae g.}
449449+\label{fig:affordances}
450450+\end{figure*}
451451+452452+\subsection{S\ae tarrangementer}
453453+454454+Kort er ikke enkeltobjekter. De danner s\ae t, og arrangementet af et s\ae t skaber mening. En \emph{p\ae dagogisk sekvens} ordner kort efter koncept: bokse f\o rst (koordinater), derefter linjer (trigonometri), derefter cirkler (radius og gentagelse), derefter matematiske kurver (plot og sinus), derefter skildpaddegrafik (relativ bev\ae gelse) og til sidst koaner (minimalt udtryk). Et \emph{gallerigitter} arrangerer kort rumligt p\aa\ en v\ae g og inviterer til sammenligning p\aa\ tv\ae rs af kategorier. Et \emph{blandet s\ae t} randomiserer r\ae kkef\o lgen og producerer uventede sammenstillinger mellem en fraktal og en horisont, mellem et tr\ae\ og en prik.
455455+456456+\begin{figure}[h]
457457+\centering
458458+\includegraphics[width=\columnwidth]{layout-decks.png}
459459+\caption{S\ae tarrangementer. Venstre: kort spredt ud efter kategori (linjer, cirkler, bokse, matematik, skildpadde, koaner) med flere kort stablet per kategori. H\o jre: et gallerigitter hvor kort er arrangeret rumligt til gennemsyn.}
460460+\label{fig:decks}
461461+\end{figure}
462462+463463+% ============ 6. KORT I DEN VIRKELIGE VERDEN ============
464464+465465+\section{Kort i den virkelige verden}
466466+\label{sec:wild}
467467+468468+Notesbogskortene er \o velser. Det egentlige \kidlisp{}-korpus---16.000+ programmer skabt af 59 forfattere---indeholder v\ae rker der bruger den fulde runtime: animation, lyd, indlejrede lag, gradientfading, tilf\ae ldig placering og timing-syntaks. Disse v\ae rker er korte nok til kortformatet men langt mere udtryksfulde end notesbog-eksemplerne. Deres forh\aa ndsvisningsbilleder renderes af oven-tjenesten (Puppeteer-baseret sk\ae rmoptagelse) og serveres via CDN.
469469+470470+\begin{figure*}[t]
471471+\centering
472472+\includegraphics[height=7cm]{user-card-bop.png}%
473473+\hfill%
474474+\includegraphics[height=7cm]{user-card-roz.png}%
475475+\hfill%
476476+\includegraphics[height=7cm]{user-card-cow.png}%
477477+\hfill%
478478+\includegraphics[height=7cm]{user-card-r2f.png}
479479+\caption{Fire kort fra det levende \kidlisp{}-korpus, renderet af oven-tjenesten. Fra venstre mod h\o jre: \texttt{\$bop} (12.188 afspilninger---det mest popul\ae re v\ae rk, 4 linjer), \texttt{\$roz} (7.064 afspilninger, 3 linjer), \texttt{\$cow} (5.980 afspilninger---en komposition der indlejrer to andre v\ae rker via \texttt{\$39i} og \texttt{\$r2f}), \texttt{\$r2f} (4.413 afspilninger, 3 linjer med tilf\ae ldig boksplacering). Alle af @jeffrey. Disse programmer bruger funktioner der ikke findes i Python-fortolkeren---animation, tilf\ae ldighed (\texttt{?}), gradientfading (\texttt{fade:}), indlejrede lag (\texttt{\$code})---men deres kildekode passer stadig p\aa\ et kort.}
480480+\label{fig:user-cards}
481481+\end{figure*}
482482+483483+\subsection{Hvad rigtige v\ae rker tilf\o jer}
484484+485485+Notesbogskortene bruger en statisk delm\ae ngde af \kidlisp{}. Rigtige v\ae rker p\aa\ \texttt{kidlisp.com} bruger den fulde runtime:
486486+487487+\begin{itemize}
488488+ \item \textbf{Animation.} Programmer re-evalueres hvert frame. \texttt{frame} og \texttt{time} \ae ndres automatisk. Et enkelt-frame-sk\ae rmbillede fanger \'{e}t \o jeblik af et levende v\ae rk.
489489+ \item \textbf{Tilf\ae ldighed.} \texttt{?}-operatoren producerer en tilf\ae ldig v\ae rdi fra en liste hvert frame. \texttt{(ink (? red blue green))} flimrer mellem farver.
490490+ \item \textbf{Gradientfading.} \texttt{fade:red-blue-black} interpolerer en fler-stops-gradient over l\ae rredet, drevet af \texttt{frame}-t\ae llingen. \'{E}t udtryk erstatter sider af manuel farvematematik.
491491+ \item \textbf{Indlejring.} \texttt{(\$cow)} henter v\ae rket \texttt{cow} fra MongoDB, evaluerer det i en offscreen-buffer og sammens\ae tter resultatet. V\ae rker bygger p\aa\ v\ae rker.
492492+ \item \textbf{Timing.} \texttt{1s... (zoom 0.5)} anvender en zoom hvert sekund. Ingen eksplicit animationsl\o kke.
493493+\end{itemize}
494494+495495+Disse funktioner holder programmer korte mens de dramatisk udvider hvad de kan udtrykke. \texttt{\$bop}---det mest afspillede v\ae rk med 12.188 visninger---er fire linjer: en lilla baggrund, regnbueflikrende bl\ae k, en tilf\ae ldig linje og en sl\o ring. P\aa\ et kort ligner det et frosset \o jeblik af et kinetisk maleri. I browseren er det \'{e}t.
496496+497497+\subsection{Kortet som \o jebliksbillede}
498498+499499+Et kort af et animeret v\ae rk er n\o dvendigvis ufuldst\ae ndigt. Det fanger \'{e}t frame af en temporal proces. Denne ufuldst\ae ndighed er en del af formatet: kortet inviterer dig til at taste koden og se hvad den rent faktisk g\o r. Det statiske billede er et l\o fte. Kildekoden er opfyldelsen. Kortkoden (\texttt{\$bop}) er broen---tast den ind p\aa\ \texttt{kidlisp.com} og kortet kommer til live.
500500+501501+% ============ 7. HVAD KORT KUNNE BLIVE ============
502502+503503+\section{Hvad kort kunne blive}
504504+\label{sec:futures}
505505+506506+Kortformatet er ungt. Den aktuelle notesbog er et proof of concept---28 programmer renderet offline. Men korrespondancen mellem korte programmer og fysiske kort antyder flere retninger.
507507+508508+\subsection{Byttekort}
509509+510510+Et KidLisp-kort er samlev\ae rdigt p\aa\ en m\aa de som det meste software ikke er. Hvert kort har et navn, en visuel identitet, en kortkode (\texttt{\$xyz}) og en forfatter. Kort kunne trykkes, nummereres og byttes. Sj\ae ldne kort kunne bruge obskure sprogfunktioner eller producere uventet komplekst output fra minimal kode. ``Sj\ae ldenheden'' af et kort er dets informationst\ae thed: hvor meget visuel kompleksitet der opst\aa r fra hvor f\aa\ tegn.
511511+512512+\subsection{P\ae dagogiske sekvenser}
513513+514514+De syv kategorier i den aktuelle notesbog antyder en undervisningsr\ae kkef\o lge: start med bokse (simple koordinater), g\aa\ videre til linjer (trigonometri), cirkler (radius og gentagelse), matematiske kurver (plot og sinus), skildpaddegrafik (relativ bev\ae gelse) og til sidst koaner (minimalt udtryk). Hvert kort underviser i \'{e}t koncept. En l\ae rer kunne give elever et fysisk s\ae t og bede dem reproducere hvert kort, modificere det eller skabe et nyt kort i samme kategori.
515515+516516+\subsection{Trykte partiturer}
517517+518518+I musik er et partitur instruktioner til at producere en temporal begivenhed. Et KidLisp-kort er instruktioner til at producere en visuel begivenhed. Kort kunne fungere som grafiske partiturer i traditionen fra Cornelius Cardew, John Cage og Fluxus-begivenhedspartiturer. En opf\o rer modtager et kort, fortolker koden (ved at taste den ind p\aa\ \texttt{kidlisp.com}, ved at l\ae se den h\o jt, ved at tegne den i h\aa nden) og producerer en begivenhed. Kortet er partituret. Renderingen er \'{e}n mulig realisering.
519519+520520+\subsection{Postkunst}
521521+522522+Ved 4$\times$6 tommer er et KidLisp-kort et postkort. Forsiden viser det renderede billede. Bagsiden viser kildekoden, forfatterens handle og kortkoden til at sl\aa\ det op online. Postkunst med eksekverbart indhold---modtageren kan taste koden og se billedet genskabt p\aa\ deres sk\ae rm. Det fysiske kort og det digitale program er det samme v\ae rk i to medier.
523523+524524+\subsection{Generativt papirvarer}
525525+526526+Fordi Python-fortolkeren er deterministisk og selvst\ae ndig, kan kort batch-renderes til trykproduktion uden netv\ae rksadgang. Et s\ae t kort kunne trykkes som et h\ae fte, et zine eller et s\ae t i \ae ske. Pipelinen \texttt{cards-convert.mjs} producerer allerede 4$\times$6 tommers PDF-kort fra papirformatet; at udvide dette til at inkludere renderet programoutput sammen med kildekode er et naturligt n\ae ste skridt.
527527+528528+\subsection{Begr\ae nsning som generativt princip}
529529+530530+Den mest interessante konsekvens af kortformatet er hvordan det p\aa virker sproget. Programmer der ikke passer p\aa\ et kort antyder manglende abstraktioner---eller antyder at programmet g\o r for meget. Kortbegr\ae nsningen opmuntrer til \o konomi: find tre-linjers-programmet der producerer det mest interessante billede. Dette er en generativ begr\ae nsning i Oulipo-traditionen---vilk\aa rlige formelle restriktioner der producerer uventede kreative resultater.
531531+532532+% ============ 6. RELATERET ARBEJDE ============
533533+534534+\section{Relateret arbejde}
535535+536536+\textbf{Trykt kode.} Demoscene-traditionen med ``sizecoding'' (programmer under 256 bytes) deler \ae stetikken med minimale programmer der producerer maksimalt output. \kidlisp{}-kort er t\ae ttere p\aa\ ``kodedigt''-traditionen, hvor selve kildekoden l\ae ses som tekst sammen med dens output.
537537+538538+\textbf{Grafiske partiturer.} Cardews \emph{Treatise} (1967) og Cages \emph{Notations} (1969) etablerede at visuel notation kan tjene som opf\o relsesinstruktioner uden at foreskrive en specifik realisering. KidLisp-kort adskiller sig ved at de er fuldt eksekverbare---renderingen er deterministisk, ikke \aa ben for fortolkning. Men kort-som-partitur-indramningen inviterer til genfortolkning: hvad nu hvis man ``spiller'' kortet anderledes hver gang?
539539+540540+\textbf{Byttekortspil.} Spil som \emph{Magic: The Gathering} (1993) demonstrerede at kort med strukturerede metadata (navn, type, regeltekst, kunst) skaber rige kombinatoriske rum. KidLisp-kort har naturlige metadata (titel, kategori, funktionsantal, linjeantal, output-kompleksitet) der kunne underst\o tte lignende spilmekanikker.
541541+542542+\textbf{Beregningsmæssige notesbøger.} Jupyter-notesbøger kombinerer allerede kode og output. KidLisp Cards-notesbogen er en Jupyter-notesbog, men med en specifik begr\ae nsning: hver celle er et selvst\ae ndigt kort snarere end et trin i en l\ae ngere beregning. Notesbogen er et galleri, ikke en fort\ae lling.
543543+544544+% ============ 7. KONKLUSION ============
545545+546546+\section{Konklusion}
547547+548548+KidLisp-kort udspringer af en simpel observation: n\aa r programmer er korte nok, passer de p\aa\ kort. Kortformatet---titel, billede, kilde---g\o r programmer til fysiske artefakter der kan trykkes, sendes med posten, samles, undervises fra og opf\o res. Python-renderingspipelinen muligg\o r offline batchproduktion. Kataloget med syv kategorier giver et kurateret indgangspunkt til sproget.
549549+550550+Formatet er et igangv\ae rende arbejde. Det aktuelle s\ae t p\aa\ 28 kort er et udgangspunkt, ikke en f\ae rdig samling. Sp\o rgsm\aa let er ikke hvor mange kort der skal laves, men hvilke programmer der fortjener at v\ae re kort---hvilke tre-linjers kompositioner der producerer billeder v\ae rd at holde i h\aa nden.
551551+552552+Notesbogen, fortolkeren og kortkataloget er tilg\ae ngelige p\aa\ \url{https://github.com/whistlegraph/aesthetic-computer}. Programmer kan oprettes og deles p\aa\ \url{https://kidlisp.com}.
553553+554554+\vspace{0.5em}
555555+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
556556+557557+% ============ REFERENCER ============
558558+559559+\bibliographystyle{plainnat}
560560+\bibliography{references}
561561+562562+\end{document}
+562
papers/arxiv-kidlisp-cards/kidlisp-cards-es.tex
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+1111+\setmainfont{Latin Modern Roman}
1212+\setsansfont{Latin Modern Sans}
1313+1414+% Custom AC fonts
1515+\newfontfamily\acbold{ywft-processing-bold}[
1616+ Path=../../system/public/type/webfonts/,
1717+ Extension=.ttf
1818+]
1919+\newfontfamily\aclight{ywft-processing-light}[
2020+ Path=../../system/public/type/webfonts/,
2121+ Extension=.ttf
2222+]
2323+\newfontfamily\kidlispfont{ComicRelief-Regular}[
2424+ Path=../arxiv-kidlisp/fonts/,
2525+ Extension=.ttf
2626+]
2727+\newfontfamily\kidlispbold{ComicRelief-Bold}[
2828+ Path=../arxiv-kidlisp/fonts/,
2929+ Extension=.ttf
3030+]
3131+\setmonofont{Latin Modern Mono}[Scale=0.85]
3232+3333+% === PACKAGES ===
3434+\usepackage{xcolor}
3535+\usepackage{titlesec}
3636+\usepackage{enumitem}
3737+\usepackage{booktabs}
3838+\usepackage{tabularx}
3939+\usepackage{fancyhdr}
4040+\usepackage{hyperref}
4141+\usepackage{graphicx}
4242+\graphicspath{{figures/}{../arxiv-kidlisp/figures/}}
4343+\usepackage{ragged2e}
4444+\usepackage{microtype}
4545+\usepackage{listings}
4646+\usepackage{natbib}
4747+\usepackage[colorspec=0.92]{draftwatermark}
4848+4949+% === COLORS (AC palette) ===
5050+\definecolor{acpink}{RGB}{180,72,135}
5151+\definecolor{acpurple}{RGB}{120,80,180}
5252+\definecolor{acdark}{RGB}{64,56,74}
5353+\definecolor{acgray}{RGB}{119,119,119}
5454+\definecolor{klbrand}{RGB}{205,92,155}
5555+\definecolor{klcyan}{RGB}{112,214,255}
5656+\definecolor{kldark}{RGB}{48,43,58}
5757+\definecolor{draftcolor}{RGB}{205,92,155}
5858+5959+% === DRAFT WATERMARK ===
6060+\DraftwatermarkOptions{
6161+ text=BORRADOR,
6262+ fontsize=3cm,
6363+ color=draftcolor!18,
6464+ angle=45,
6565+ pos={0.5\paperwidth, 0.5\paperheight}
6666+}
6767+6868+% === KIDLISP SYNTAX COLORS ===
6969+\definecolor{klfn}{RGB}{0,136,170}
7070+\definecolor{klform}{RGB}{119,51,170}
7171+\definecolor{klrepeat}{RGB}{170,0,170}
7272+\definecolor{klnum}{RGB}{204,0,102}
7373+\definecolor{klstr}{RGB}{170,120,0}
7474+\definecolor{klcmt}{RGB}{102,102,102}
7575+\definecolor{klmath}{RGB}{0,136,0}
7676+\definecolor{klvar}{RGB}{204,102,0}
7777+\definecolor{klembed}{RGB}{0,136,0}
7878+7979+% KidLisp inline color macros
8080+\newcommand{\kn}[1]{\textcolor{klnum}{#1}}
8181+\newcommand{\kt}[1]{\textcolor{klstr}{#1}}
8282+\newcommand{\kv}[1]{\textcolor{klvar}{#1}}
8383+\newcommand{\ke}[1]{\textcolor{klembed}{\textbf{#1}}}
8484+\newcommand{\km}[1]{\textcolor{klmath}{#1}}
8585+8686+% === HYPERREF ===
8787+\hypersetup{
8888+ colorlinks=true,
8989+ linkcolor=acpurple,
9090+ urlcolor=acpurple,
9191+ citecolor=acpurple,
9292+ pdfauthor={@jeffrey},
9393+ pdftitle={Tarjetas KidLisp: Programas que caben en una tarjeta},
9494+}
9595+9696+% === SECTION FORMATTING ===
9797+\titleformat{\section}
9898+ {\normalfont\bfseries\normalsize\uppercase}
9999+ {\thesection.}
100100+ {0.5em}
101101+ {}
102102+\titlespacing{\section}{0pt}{1.2em}{0.3em}
103103+104104+\titleformat{\subsection}
105105+ {\normalfont\bfseries\small}
106106+ {\thesubsection}
107107+ {0.5em}
108108+ {}
109109+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
110110+111111+% === HEADER/FOOTER ===
112112+\pagestyle{fancy}
113113+\fancyhf{}
114114+\renewcommand{\headrulewidth}{0pt}
115115+\fancyhead[C]{\footnotesize\color{acpink}\textit{Borrador de trabajo --- no citar}}
116116+\fancyfoot[C]{\footnotesize\thepage}
117117+118118+% === CUSTOM COMMANDS ===
119119+\newcommand{\acdot}{{\color{acpink}.}}
120120+\newcommand{\kidlisp}{\textsc{KidLisp}}
121121+122122+% === LISTINGS ===
123123+\lstdefinelanguage{kidlisp}{
124124+ morekeywords=[1]{wipe,ink,line,box,circle,tri,plot,flood,shape,zoom,scroll,spin,blur,contrast,embed,layer,width,height,frame,time,wiggle,melody,mic,suck,sort,form,trans,cube,move,scale,hop,overtone,resolution,write,text,type,stamp,paste,point,poly,noise,fade,pan,unpan,mask,unmask,flip,crawl,left,right,up,down,goto,face,outline,fill,stroke},
125125+ morekeywords=[2]{def,let,if,cond,once,later,lambda,do},
126126+ morekeywords=[3]{repeat},
127127+ morekeywords=[4]{random,sin,cos,tan,floor,ceil,round,abs,sqrt,min,max},
128128+ sensitive=true,
129129+ morecomment=[l]{;},
130130+ morestring=[b]",
131131+ escapeinside={|}{|},
132132+}
133133+\lstset{
134134+ language=kidlisp,
135135+ basicstyle=\ttfamily\small,
136136+ keywordstyle=[1]\color{klfn}\bfseries,
137137+ keywordstyle=[2]\color{klform}\bfseries,
138138+ keywordstyle=[3]\color{klrepeat}\bfseries,
139139+ keywordstyle=[4]\color{klmath},
140140+ commentstyle=\color{klcmt}\itshape,
141141+ stringstyle=\color{klstr},
142142+ breaklines=true,
143143+ frame=single,
144144+ rulecolor=\color{acgray!30},
145145+ backgroundcolor=\color{acgray!5},
146146+ xleftmargin=0.5em,
147147+ xrightmargin=0.5em,
148148+ aboveskip=0.5em,
149149+ belowskip=0.5em,
150150+}
151151+152152+\lstdefinelanguage{python}{
153153+ morekeywords={def,return,import,from,class,if,else,for,in,with,as,try,except,None,True,False,self,and,or,not,lambda,yield,pass,break,continue,raise,while},
154154+ sensitive=true,
155155+ morecomment=[l]{\#},
156156+ morestring=[b]",
157157+ morestring=[b]',
158158+}
159159+\lstset{
160160+ language=kidlisp,
161161+}
162162+163163+% === LIST SETTINGS ===
164164+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
165165+\setlist[enumerate]{nosep, leftmargin=1.2em}
166166+167167+% === COLUMN SEPARATION ===
168168+\setlength{\columnsep}{1.8em}
169169+170170+% === PARAGRAPH SETTINGS ===
171171+\setlength{\parindent}{1em}
172172+\setlength{\parskip}{0.3em}
173173+174174+\tolerance=800
175175+\emergencystretch=1em
176176+\hyphenpenalty=50
177177+178178+\begin{document}
179179+180180+% ============ TITLE BLOCK ============
181181+182182+\twocolumn[{%
183183+\begin{center}
184184+\includegraphics[height=4em]{pals}\par\vspace{0.5em}
185185+{\kidlispbold\fontsize{24pt}{28pt}\selectfont\color{kldark} Kid{\color{klbrand}Lisp} Tarjetas}\par
186186+\vspace{0.2em}
187187+{\kidlispfont\fontsize{11pt}{13pt}\selectfont\color{klbrand} Programas que caben en una tarjeta}\par
188188+\vspace{0.6em}
189189+{\normalsize @jeffrey}\par
190190+{\small\color{acgray} Aesthetic\acdot Computer}\par
191191+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
192192+\vspace{0.3em}
193193+{\small\color{acpurple} \url{https://kidlisp.com} \enspace$\cdot$\enspace \url{https://aesthetic.computer}}\par
194194+\vspace{0.6em}
195195+\rule{\textwidth}{1.5pt}
196196+\vspace{0.5em}
197197+\end{center}
198198+199199+\begin{center}
200200+{\small\color{acpink}\textbf{[ borrador de trabajo --- no citar ]}}
201201+\end{center}
202202+\vspace{0.3em}
203203+204204+\begin{quote}
205205+\small\noindent\textbf{Resumen.}
206206+Los programas de \kidlisp{} son cortos. Un programa t\'ipico consta de 2--4 l\'ineas de S-expresiones que producen una composici\'on visual completa---una explosi\'on estelar, una espiral, un mosaico, un fractal. Esta brevedad no es incidental sino dise\~nada: el lenguaje omite funciones definidas por el usuario, recursi\'on y mecanismos de abstracci\'on, de modo que los programas permanecen planos y legibles. Observamos que esta planitud crea una correspondencia natural entre programas y tarjetas f\'isicas. Un programa de \kidlisp{}, su c\'odigo fuente y su salida renderizada pueden coexistir en una sola tarjeta impresa. Este art\'iculo describe el formato \emph{KidLisp Cards}---una baraja de programas organizados por categor\'ia visual---y un pipeline de renderizado en Python (int\'erprete basado en PIL) que produce im\'agenes de tarjetas fuera del navegador. Discutimos qu\'e son las tarjetas ahora (un cuaderno curado de koans visuales), en qu\'e podr\'ian convertirse (tarjetas coleccionables, secuencias pedag\'ogicas, partituras impresas, arte postal), y c\'omo la restricci\'on de la tarjeta retroalimenta el dise\~no del lenguaje.
207207+\end{quote}
208208+\vspace{0.5em}
209209+}]
210210+211211+% ============ 1. INTRODUCCI\'ON ============
212212+213213+\section{Introducci\'on}
214214+215215+La mayor\'ia de los lenguajes de programaci\'on producen programas demasiado largos para imprimir en una ficha. Esto es consecuencia de la abstracci\'on: los lenguajes de prop\'osito general fomentan la descomposici\'on en funciones, clases, m\'odulos y archivos. El programa se distribuye a trav\'es de una base de c\'odigo. Ning\'un artefacto individual captura el todo.
216216+217217+\kidlisp{} es diferente. Sus programas tienen t\'ipicamente 1--6 l\'ineas de largo. Una escena animada completa, un patr\'on geom\'etrico, un fractal recursivo o un patr\'on de interferencia moir\'{e} cabe en unas pocas S-expresiones. Esto no es una limitaci\'on sino una elecci\'on de dise\~no: \kidlisp{} omite funciones definidas por el usuario, recursi\'on (excepto a trav\'es de \texttt{later}), estructuras de datos mutables e importaciones. Los programas son secuencias planas de comandos de dibujo, bucles y condicionales.
218218+219219+Esta planitud crea una oportunidad. Si el c\'odigo fuente de un programa cabe en una tarjeta, y la salida visual de ese programa cabe en la misma tarjeta, entonces la tarjeta se convierte en un artefacto autocontenido: un programa que puedes sostener, pasar a alguien, clavar en una pared o enviar por correo. La tarjeta es tanto documentaci\'on como ejecutable. Es una \emph{partitura}---instrucciones para producir un evento visual.
220220+221221+Este art\'iculo describe el formato KidLisp Cards (\S\ref{sec:format}), el pipeline de renderizado offline (\S\ref{sec:pipeline}), el cat\'alogo actual de tarjetas (\S\ref{sec:catalog}), las variaciones de disposici\'on y sus affordances sociales y f\'isicas (\S\ref{sec:layouts}), y futuros especulativos para el formato (\S\ref{sec:futures}).
222222+223223+% ============ 2. EL FORMATO DE TARJETA ============
224224+225225+\section{El formato de tarjeta}
226226+\label{sec:format}
227227+228228+Una tarjeta KidLisp tiene tres elementos:
229229+230230+\begin{enumerate}
231231+ \item \textbf{T\'itulo.} Un nombre corto que evoca la salida visual: ``Starburst,'' ``Honeycomb,'' ``Spiral Walk.''
232232+ \item \textbf{Salida renderizada.} Una imagen de pixel art (resoluci\'on predeterminada de 160$\times$120, escalada 3$\times$ con interpolaci\'on de vecino m\'as cercano para preservar bordes n\'itidos).
233233+ \item \textbf{C\'odigo fuente.} El programa \kidlisp{} completo, t\'ipicamente 1--4 l\'ineas, mostrado en monoespaciado debajo de la imagen.
234234+\end{enumerate}
235235+236236+La tarjeta es autocontenida: cualquiera que lea el c\'odigo fuente puede reproducir la imagen exactamente, en cualquier int\'erprete de \kidlisp{}. No hay dependencias externas, no hay importaciones, no hay configuraci\'on. El programa \emph{es} la tarjeta.
237237+238238+\subsection{Dimensiones de la tarjeta}
239239+240240+La imagen renderizada ocupa un lienzo de 160$\times$120 p\'ixeles (proporci\'on 4:3), coincidiendo con la resoluci\'on predeterminada de \kidlisp{}. A 3$\times$ de escala, esto produce una imagen de 480$\times$360 p\'ixeles adecuada para visualizaci\'on en pantalla. Para impresi\'on, las tarjetas miden 4$\times$6 pulgadas (ficha est\'andar / postal), con la imagen en la parte superior y el c\'odigo fuente debajo.
241241+242242+\subsection{Qu\'e hace una buena tarjeta}
243243+244244+No todo programa de \kidlisp{} produce una buena tarjeta. Las mejores tarjetas comparten propiedades:
245245+246246+\begin{itemize}
247247+ \item \textbf{Brevedad.} 1--4 l\'ineas. Si el c\'odigo fuente no cabe c\'omodamente debajo de la imagen, el programa es demasiado largo para el formato.
248248+ \item \textbf{Sorpresa.} La salida debe ser m\'as compleja o bella de lo que sugiere el c\'odigo fuente. Un programa de tres l\'ineas que produce un patr\'on moir\'{e} recompensa la inspecci\'on.
249249+ \item \textbf{Legibilidad.} Un lector deber\'ia poder trazar desde la fuente hasta la salida sin ejecutar el programa. La conexi\'on entre c\'odigo e imagen debe ser discernible, aunque no sea inmediatamente obvia.
250250+ \item \textbf{Independencia.} Sin incrustaciones \texttt{\$code}, sin estado externo. La tarjeta debe funcionar de forma aislada.
251251+\end{itemize}
252252+253253+\begin{figure}[t]
254254+\centering
255255+\fbox{\includegraphics[width=0.47\columnwidth]{card-starburst.png}}%
256256+\hfill%
257257+\fbox{\includegraphics[width=0.47\columnwidth]{card-moire.png}}
258258+\caption{Dos tarjetas de programa renderizadas por el int\'erprete Python: ``Starburst'' (72 l\'ineas radiales, 3 l\'ineas de c\'odigo) y ``Moir\'{e}'' (c\'irculos conc\'entricos superpuestos, 3 l\'ineas). Estos son ejemplos triviales---demuestran la estructura del formato de tarjeta pero no representan el rango expresivo del lenguaje ni las ambiciones del formato.}
259259+\label{fig:program-cards}
260260+\end{figure}
261261+262262+% ============ 3. PIPELINE DE RENDERIZADO ============
263263+264264+\section{Pipeline de renderizado offline}
265265+\label{sec:pipeline}
266266+267267+Las tarjetas KidLisp se renderizan usando un int\'erprete Python que se ejecuta fuera del navegador. Esto permite el renderizado por lotes, la producci\'on para impresi\'on y la curaci\'on basada en cuadernos sin requerir el runtime completo de Aesthetic\acdot Computer.
268268+269269+\subsection{El int\'erprete Python}
270270+271271+El int\'erprete (\texttt{notebooks/ac.py}, 452 l\'ineas) implementa un subconjunto de \kidlisp{} suficiente para el renderizado est\'atico de tarjetas:
272272+273273+\begin{itemize}
274274+ \item \textbf{Dibujo:} \texttt{wipe}, \texttt{ink}, \texttt{line}, \texttt{box}, \texttt{circle}, \texttt{tri}, \texttt{plot}, \texttt{shape}, \texttt{flood}
275275+ \item \textbf{Tortuga:} \texttt{crawl}, \texttt{left}, \texttt{right}, \texttt{goto}, \texttt{face}, \texttt{up}, \texttt{down}
276276+ \item \textbf{Control:} \texttt{repeat}, \texttt{if}, \texttt{def}, \texttt{later}, \texttt{do}
277277+ \item \textbf{Matem\'aticas:} aritm\'etica completa, trigonometr\'ia, \texttt{abs}, \texttt{sqrt}, \texttt{min}, \texttt{max}
278278+ \item \textbf{Lienzo:} \texttt{resolution}, \texttt{fill}, \texttt{outline}, \texttt{stroke}
279279+\end{itemize}
280280+281281+El int\'erprete usa PIL (Pillow) para el renderizado. Cada tarjeta se dibuja en un lienzo RGBA, se escala con interpolaci\'on de vecino m\'as cercano y se exporta como PNG. La implementaci\'on en Python es intencionalmente m\'as simple que el evaluador del navegador (15.161 l\'ineas)---omite animaci\'on, audio, incrustaci\'on y sintaxis de temporizaci\'on, centr\'andose solo en el subconjunto necesario para la salida visual est\'atica.
282282+283283+\subsection{Flujo de trabajo con Jupyter Notebook}
284284+285285+La herramienta principal de curaci\'on es un cuaderno Jupyter (\texttt{notebooks/kidlisp-cards.ipynb}). La funci\'on \texttt{show\_card()} renderiza un programa y lo muestra en l\'inea como una tarjeta HTML:
286286+287287+\begin{lstlisting}[language=python,basicstyle=\ttfamily\footnotesize]
288288+show_card("Starburst", """(wipe black)
289289+(ink white)
290290+(repeat 72 i
291291+ (line 80 60
292292+ (+ 80 (* 55 (cos (* i 0.087))))
293293+ (+ 60 (* 55 (sin (* i 0.087))))))""")
294294+\end{lstlisting}
295295+296296+Cada llamada produce una tarjeta con fondo oscuro con el t\'itulo, la imagen renderizada y el c\'odigo fuente mostrados en l\'inea. El cuaderno sirve tanto como entorno de desarrollo como galer\'ia---desplazarse por el cuaderno es como hojear una baraja de tarjetas.
297297+298298+\subsection{Dos int\'erpretes, un lenguaje}
299299+300300+La existencia de dos int\'erpretes independientes (JavaScript en el navegador, Python en el cuaderno) sirve como mecanismo de validaci\'on cruzada. Si un programa se renderiza de forma id\'entica en ambos, su comportamiento est\'a determinado enteramente por la sem\'antica del lenguaje y no por detalles de implementaci\'on. Los programas que dependen de caracter\'isticas espec\'ificas del navegador (animaci\'on, audio, capas incrustadas) quedan excluidos del formato de tarjeta por construcci\'on---simplemente no se renderizan en el int\'erprete Python.
301301+302302+% ============ 4. CAT\'ALOGO DE TARJETAS ============
303303+304304+\section{El cat\'alogo de tarjetas}
305305+\label{sec:catalog}
306306+307307+El cuaderno actual contiene 28 tarjetas organizadas en siete categor\'ias. Cada categor\'ia explora un aspecto diferente del lenguaje a trav\'es de ejemplos m\'inimos. Estos programas son deliberadamente triviales---ejercicios de dibujo, ilustraciones matem\'aticas, caminatas de tortuga. Establecen la estructura del formato de tarjeta pero no representan su potencial expresivo. Las tarjetas interesantes a\'un no se han hecho. El valor del formato surgir\'a de programas que usen la brevedad para decir algo que valga la pena decir, no de demos geom\'etricas.
308308+309309+\subsection{L\'ineas}
310310+311311+Las tarjetas de l\'ineas demuestran \texttt{repeat} y trigonometr\'ia. Una explosi\'on estelar irradia 72 l\'ineas desde el centro. Un entrecruzado superpone rejillas horizontales y verticales con baja opacidad.
312312+313313+\begin{figure}[h]
314314+\centering
315315+\fbox{\includegraphics[width=0.47\columnwidth]{card-starburst.png}}%
316316+\hfill%
317317+\fbox{\includegraphics[width=0.47\columnwidth]{card-crosshatch.png}}
318318+\caption{``Starburst'' y ``Crosshatch'' --- tarjetas de l\'ineas.}
319319+\label{fig:lines}
320320+\end{figure}
321321+322322+\begin{lstlisting}
323323+; Starburst — 72 radial lines
324324+(wipe |\kt{black}|)
325325+(ink |\kt{white}|)
326326+(repeat |\kn{72}| |\kv{i}|
327327+ (line |\kn{80}| |\kn{60}|
328328+ (|\km{+}| |\kn{80}| (|\km{*}| |\kn{55}| (|\km{cos}| (|\km{*}| |\kv{i}| |\kn{0.087}|))))
329329+ (|\km{+}| |\kn{60}| (|\km{*}| |\kn{55}| (|\km{sin}| (|\km{*}| |\kv{i}| |\kn{0.087}|))))))
330330+\end{lstlisting}
331331+332332+\subsection{C\'irculos}
333333+334334+Las tarjetas de c\'irculos usan el modo \texttt{outline} y bucles \texttt{repeat} anidados. ``Ripple'' dibuja 30 c\'irculos conc\'entricos con color que cambia hacia el azul.
335335+336336+\begin{figure}[h]
337337+\centering
338338+\fbox{\includegraphics[width=0.47\columnwidth]{card-ripple.png}}%
339339+\hfill%
340340+\fbox{\includegraphics[width=0.47\columnwidth]{card-mondrian.png}}
341341+\caption{``Ripple'' (c\'irculos) y ``Mondrian'' (cajas).}
342342+\label{fig:circles-boxes}
343343+\end{figure}
344344+345345+\subsection{Cajas y composici\'on}
346346+347347+``Mondrian'' recrea la rejilla de colores primarios con cuatro rect\'angulos coloreados. ``Nest'' dibuja 10 rect\'angulos insertados con tonos cambiantes.
348348+349349+\subsection{Matem\'aticas y curvas}
350350+351351+Estas tarjetas usan \texttt{plot} con funciones matem\'aticas. ``Lissajous'' dibuja una figura de Lissajous con 600 puntos. ``Spiral'' traza una espiral polar.
352352+353353+\begin{figure}[h]
354354+\centering
355355+\fbox{\includegraphics[width=0.47\columnwidth]{card-lissajous.png}}%
356356+\hfill%
357357+\fbox{\includegraphics[width=0.47\columnwidth]{card-sierpinski.png}}
358358+\caption{``Lissajous'' (curvas matem\'aticas) y ``Sierpinski'' (fractal AND a nivel de bits).}
359359+\label{fig:math}
360360+\end{figure}
361361+362362+\subsection{Color y gradientes}
363363+364364+``Sierpinski'' usa AND a nivel de bits para generar el tri\'angulo de Sierpinski: \texttt{(if (= 0 (\& x y)) (plot (+ 16 x) y))}. ``Sunflower'' traza 500 puntos a lo largo de una espiral de \'angulo \'aureo con colores c\'iclicos.
365365+366366+\subsection{Gr\'aficos de tortuga}
367367+368368+Las tarjetas de tortuga usan \texttt{crawl}, \texttt{left}, \texttt{right} y \texttt{face}. Una estrella de cinco puntas usa \texttt{(right 144)}. Un \'arbol usa \texttt{later} para ramificaci\'on recursiva. Un copo de nieve anida segmentos de curva de Koch.
369369+370370+\begin{figure}[h]
371371+\centering
372372+\fbox{\includegraphics[width=0.47\columnwidth]{card-star.png}}%
373373+\hfill%
374374+\fbox{\includegraphics[width=0.47\columnwidth]{card-tree.png}}
375375+\caption{``Star'' y ``Tree'' --- tarjetas de gr\'aficos de tortuga.}
376376+\label{fig:turtle}
377377+\end{figure}
378378+379379+\begin{lstlisting}
380380+; Star — 5 sides, 144-degree turns
381381+(wipe |\kt{navy}|)
382382+(ink |\kt{yellow}|)
383383+(repeat |\kn{5}| |\kv{i}| (crawl |\kn{50}|) (right |\kn{144}|))
384384+\end{lstlisting}
385385+386386+\subsection{Koans m\'inimos}
387387+388388+Las tarjetas m\'as cortas de la baraja. ``Horizon'' son tres l\'ineas: cielo oscuro, tierra dorada. ``Pip'' es un solo punto rojo sobre negro. Estas tarjetas se acercan al programa m\'inimo viable---la menor cantidad de c\'odigo que produce una imagen reconocible.
389389+390390+\begin{figure}[h]
391391+\centering
392392+\fbox{\includegraphics[width=0.47\columnwidth]{card-horizon.png}}%
393393+\hfill%
394394+\fbox{\includegraphics[width=0.47\columnwidth]{card-pip.png}}
395395+\caption{``Horizon'' y ``Pip'' --- koans m\'inimos (2--3 l\'ineas cada uno).}
396396+\label{fig:koans}
397397+\end{figure}
398398+399399+\begin{lstlisting}
400400+; Pip — the minimum card
401401+(wipe |\kt{black}|)
402402+(ink |\kt{red}|)
403403+(circle |\kn{80}| |\kn{60}| |\kn{4}|)
404404+\end{lstlisting}
405405+406406+\begin{figure*}[t]
407407+\centering
408408+\fbox{\includegraphics[height=5.5cm]{card-nest.png}}%
409409+\hfill%
410410+\fbox{\includegraphics[height=5.5cm]{card-sunflower.png}}%
411411+\hfill%
412412+\fbox{\includegraphics[height=5.5cm]{card-snowflake.png}}%
413413+\hfill%
414414+\fbox{\includegraphics[height=5.5cm]{card-spiral.png}}
415415+\caption{Cuatro tarjetas completas que muestran el formato: t\'itulo, salida renderizada y c\'odigo fuente. De izquierda a derecha: ``Nest,'' ``Sunflower,'' ``Snowflake,'' ``Spiral.'' Cada tarjeta es autocontenida---el c\'odigo fuente debajo de la imagen es el programa completo. Estos son ejercicios de dibujo triviales, no expresiones del potencial del formato.}
416416+\label{fig:four-cards}
417417+\end{figure*}
418418+419419+% ============ 5. DISPOSICIONES ============
420420+421421+\section{Disposiciones}
422422+\label{sec:layouts}
423423+424424+El formato de tarjeta no tiene una disposici\'on fija. C\'omo se organizan los tres elementos (t\'itulo, salida, fuente) determina lo que la tarjeta permite---lo que puedes hacer con ella f\'isica y socialmente. Esta secci\'on explora variaciones de disposici\'on y sus consecuencias.
425425+426426+\begin{figure*}[t]
427427+\centering
428428+\includegraphics[width=\textwidth]{layout-comparison.png}
429429+\caption{Tres estrategias de disposici\'on. \textbf{Vertical:} t\'itulo / imagen / fuente apilados de arriba a abajo, optimizado para pantallas de tel\'efono e impresi\'on en retrato. \textbf{Horizontal:} imagen a la izquierda, t\'itulo y fuente a la derecha, adecuado para tarjetas en paisaje y navegaci\'on de baraja lado a lado. \textbf{Postal:} salida renderizada en el frente, c\'odigo fuente y metadatos en el reverso---una tarjeta enviable por correo donde el programa est\'a oculto hasta que la volteas.}
430430+\label{fig:layouts}
431431+\end{figure*}
432432+433433+\subsection{Vertical (pantalla / impresi\'on)}
434434+435435+La disposici\'on predeterminada apila t\'itulo, imagen y fuente de arriba a abajo. Esta es la disposici\'on del cuaderno---se desplaza naturalmente en un tel\'efono o en un cuaderno Jupyter. Para impresi\'on, corresponde a una tarjeta de 4$\times$6 pulgadas en orientaci\'on retrato. El ojo del lector se mueve hacia abajo desde el nombre hasta la imagen y el c\'odigo, trazando la relaci\'on entre el programa y su salida.
436436+437437+\subsection{Horizontal (baraja / paisaje)}
438438+439439+Una disposici\'on en paisaje coloca la imagen renderizada a la izquierda y el c\'odigo fuente a la derecha. Esto funciona para desplegar tarjetas sobre una mesa, para presentaciones y para comparaci\'on lado a lado. Dos tarjetas colocadas una junto a otra crean un d\'iptico---el espectador puede comparar programas y salidas simult\'aneamente.
440440+441441+\subsection{Postal (arte postal)}
442442+443443+La disposici\'on postal separa el frente del reverso. El frente muestra solo la imagen renderizada, a sangre completa, sin texto. El reverso muestra el c\'odigo fuente, el handle del autor, el c\'odigo corto (\texttt{\$xyz}) y un \'area para sello. El destinatario ve la imagen primero---un artefacto visual. Voltear la tarjeta revela el programa: las instrucciones que lo produjeron. La tarjeta es tanto objeto art\'istico como partitura ejecutable, dependiendo de qu\'e lado leas.
444444+445445+\begin{figure*}[h]
446446+\centering
447447+\includegraphics[width=\textwidth]{layout-affordances.png}
448448+\caption{Affordances sociales y f\'isicas del formato de tarjeta. Cada affordance se deriva de la materialidad de la tarjeta: puede \textbf{compartirse} de mano en mano, \textbf{enviarse} como postal, \textbf{intercambiarse} y coleccionarse, \textbf{ense\~narse} en secuencias pedag\'ogicas, \textbf{interpretarse} como partitura gr\'afica o \textbf{colgarse} en la pared de una galer\'ia.}
449449+\label{fig:affordances}
450450+\end{figure*}
451451+452452+\subsection{Arreglos de baraja}
453453+454454+Las tarjetas no son objetos individuales. Forman barajas, y el arreglo de una baraja crea significado. Una \emph{secuencia pedag\'ogica} ordena tarjetas por concepto: cajas primero (coordenadas), luego l\'ineas (trigonometr\'ia), luego c\'irculos (radio y repetici\'on), luego curvas matem\'aticas (plot y seno), luego gr\'aficos de tortuga (movimiento relativo) y finalmente koans (expresi\'on m\'inima). Una \emph{cuadr\'icula de galer\'ia} arregla tarjetas espacialmente en una pared, invitando a la comparaci\'on entre categor\'ias. Una \emph{baraja mezclada} aleatoriza el orden, produciendo yuxtaposiciones inesperadas entre un fractal y un horizonte, entre un \'arbol y un punto.
455455+456456+\begin{figure}[h]
457457+\centering
458458+\includegraphics[width=\columnwidth]{layout-decks.png}
459459+\caption{Arreglos de baraja. Izquierda: tarjetas desplegadas por categor\'ia (l\'ineas, c\'irculos, cajas, matem\'aticas, tortuga, koans) con m\'ultiples tarjetas apiladas por categor\'ia. Derecha: una cuadr\'icula de galer\'ia donde las tarjetas est\'an arregladas espacialmente para su navegaci\'on.}
460460+\label{fig:decks}
461461+\end{figure}
462462+463463+% ============ 6. TARJETAS EN EL MUNDO REAL ============
464464+465465+\section{Tarjetas en el mundo real}
466466+\label{sec:wild}
467467+468468+Las tarjetas del cuaderno son ejercicios. El verdadero corpus de \kidlisp{}---m\'as de 16.000 programas creados por 59 autores---contiene piezas que usan el runtime completo: animaci\'on, audio, capas incrustadas, gradientes, colocaci\'on aleatoria y sintaxis de temporizaci\'on. Estas piezas son lo suficientemente cortas para el formato de tarjeta pero mucho m\'as expresivas que los ejemplos del cuaderno. Sus im\'agenes de vista previa son renderizadas por el servicio oven (captura de pantalla basada en Puppeteer) y servidas v\'ia CDN.
469469+470470+\begin{figure*}[t]
471471+\centering
472472+\includegraphics[height=7cm]{user-card-bop.png}%
473473+\hfill%
474474+\includegraphics[height=7cm]{user-card-roz.png}%
475475+\hfill%
476476+\includegraphics[height=7cm]{user-card-cow.png}%
477477+\hfill%
478478+\includegraphics[height=7cm]{user-card-r2f.png}
479479+\caption{Cuatro tarjetas del corpus vivo de \kidlisp{}, renderizadas por el servicio oven. De izquierda a derecha: \texttt{\$bop} (12.188 reproducciones---la pieza m\'as popular, 4 l\'ineas), \texttt{\$roz} (7.064 reproducciones, 3 l\'ineas), \texttt{\$cow} (5.980 reproducciones---una composici\'on que incrusta dos otras piezas v\'ia \texttt{\$39i} y \texttt{\$r2f}), \texttt{\$r2f} (4.413 reproducciones, 3 l\'ineas de colocaci\'on aleatoria de cajas). Todos por @jeffrey. Estos programas usan caracter\'isticas ausentes del int\'erprete Python---animaci\'on, aleatoriedad (\texttt{?}), gradientes (\texttt{fade:}), capas incrustadas (\texttt{\$code})---pero su c\'odigo fuente a\'un cabe en una tarjeta.}
480480+\label{fig:user-cards}
481481+\end{figure*}
482482+483483+\subsection{Qu\'e a\~naden las piezas reales}
484484+485485+Las tarjetas del cuaderno usan un subconjunto est\'atico de \kidlisp{}. Las piezas reales en \texttt{kidlisp.com} usan el runtime completo:
486486+487487+\begin{itemize}
488488+ \item \textbf{Animaci\'on.} Los programas se re-eval\'uan cada fotograma. \texttt{frame} y \texttt{time} cambian autom\'aticamente. Una captura de un solo fotograma captura un momento de una pieza viva.
489489+ \item \textbf{Aleatoriedad.} El operador \texttt{?} produce un valor aleatorio de una lista cada fotograma. \texttt{(ink (? red blue green))} parpadea entre colores.
490490+ \item \textbf{Gradientes.} \texttt{fade:red-blue-black} interpola un gradiente de m\'ultiples paradas a trav\'es del lienzo, impulsado por el conteo de \texttt{frame}. Una expresi\'on reemplaza p\'aginas de matem\'aticas de color manuales.
491491+ \item \textbf{Incrustaci\'on.} \texttt{(\$cow)} obtiene la pieza \texttt{cow} de MongoDB, la eval\'ua en un b\'ufer fuera de pantalla y compone el resultado. Las piezas se construyen sobre piezas.
492492+ \item \textbf{Temporizaci\'on.} \texttt{1s... (zoom 0.5)} aplica un zoom cada segundo. Sin bucle de animaci\'on expl\'icito.
493493+\end{itemize}
494494+495495+Estas caracter\'isticas mantienen los programas cortos mientras expanden dram\'aticamente lo que pueden expresar. \texttt{\$bop}---la pieza m\'as reproducida con 12.188 vistas---son cuatro l\'ineas: un fondo morado, tinta parpadeante arco\'iris, una l\'inea aleatoria y un desenfoque. En una tarjeta, parece un momento congelado de una pintura cin\'etica. En el navegador, lo es.
496496+497497+\subsection{La tarjeta como instant\'anea}
498498+499499+Una tarjeta de una pieza animada es necesariamente incompleta. Captura un fotograma de un proceso temporal. Esta incompletitud es parte del formato: la tarjeta te invita a teclear el c\'odigo y ver qu\'e hace realmente. La imagen est\'atica es una promesa. El c\'odigo fuente es el cumplimiento. El c\'odigo corto (\texttt{\$bop}) es el puente---tecl\'ealo en \texttt{kidlisp.com} y la tarjeta cobra vida.
500500+501501+% ============ 7. EN QU\'E PODR\'IAN CONVERTIRSE LAS TARJETAS ============
502502+503503+\section{En qu\'e podr\'ian convertirse las tarjetas}
504504+\label{sec:futures}
505505+506506+El formato de tarjeta es joven. El cuaderno actual es una prueba de concepto---28 programas renderizados offline. Pero la correspondencia entre programas cortos y tarjetas f\'isicas sugiere varias direcciones.
507507+508508+\subsection{Tarjetas coleccionables}
509509+510510+Una tarjeta KidLisp es coleccionable de una manera que la mayor\'ia del software no lo es. Cada tarjeta tiene un nombre, una identidad visual, un c\'odigo corto (\texttt{\$xyz}) y un autor. Las tarjetas podr\'ian imprimirse, numerarse e intercambiarse. Las tarjetas raras podr\'ian usar caracter\'isticas oscuras del lenguaje o producir salidas inesperadamente complejas a partir de c\'odigo m\'inimo. La ``rareza'' de una tarjeta es su densidad de informaci\'on: cu\'anta complejidad visual emerge de cu\'an pocos caracteres.
511511+512512+\subsection{Secuencias pedag\'ogicas}
513513+514514+Las siete categor\'ias del cuaderno actual sugieren un orden de ense\~nanza: comenzar con cajas (coordenadas simples), pasar a l\'ineas (trigonometr\'ia), c\'irculos (radio y repetici\'on), curvas matem\'aticas (plot y seno), gr\'aficos de tortuga (movimiento relativo) y finalmente koans (expresi\'on m\'inima). Cada tarjeta ense\~na un concepto. Un profesor podr\'ia entregar a los estudiantes una baraja f\'isica y pedirles que reproduzcan cada tarjeta, la modifiquen o creen una nueva tarjeta en la misma categor\'ia.
515515+516516+\subsection{Partituras impresas}
517517+518518+En m\'usica, una partitura son instrucciones para producir un evento temporal. Una tarjeta KidLisp son instrucciones para producir un evento visual. Las tarjetas podr\'ian funcionar como partituras gr\'aficas en la tradici\'on de Cornelius Cardew, John Cage y las partituras de eventos Fluxus. Un int\'erprete recibe una tarjeta, interpreta el c\'odigo (tecle\'andolo en \texttt{kidlisp.com}, ley\'endolo en voz alta, dibuj\'andolo a mano) y produce un evento. La tarjeta es la partitura. El renderizado es una realizaci\'on posible.
519519+520520+\subsection{Arte postal}
521521+522522+A 4$\times$6 pulgadas, una tarjeta KidLisp es una postal. El frente muestra la imagen renderizada. El reverso muestra el c\'odigo fuente, el handle del autor y el c\'odigo corto para buscarlo en l\'inea. Arte postal con contenido ejecutable---el destinatario puede teclear el c\'odigo y ver la imagen regenerarse en su pantalla. La tarjeta f\'isica y el programa digital son la misma obra en dos medios.
523523+524524+\subsection{Papeler\'ia generativa}
525525+526526+Dado que el int\'erprete Python es determinista y aut\'onomo, las tarjetas pueden renderizarse por lotes para producci\'on de impresi\'on sin acceso a la red. Un conjunto de tarjetas podr\'ia imprimirse como folleto, fanzine o set en caja. El pipeline \texttt{cards-convert.mjs} ya produce tarjetas PDF de 4$\times$6 pulgadas desde el formato del art\'iculo; extender esto para incluir la salida renderizada del programa junto con el c\'odigo fuente es un pr\'oximo paso natural.
527527+528528+\subsection{La restricci\'on como principio generativo}
529529+530530+La consecuencia m\'as interesante del formato de tarjeta es c\'omo retroalimenta el lenguaje. Los programas que no caben en una tarjeta sugieren abstracciones faltantes---o sugieren que el programa hace demasiado. La restricci\'on de la tarjeta fomenta la econom\'ia: encontrar el programa de tres l\'ineas que produce la imagen m\'as interesante. Esta es una restricci\'on generativa en la tradici\'on de Oulipo---restricciones formales arbitrarias que producen resultados creativos inesperados.
531531+532532+% ============ 6. TRABAJO RELACIONADO ============
533533+534534+\section{Trabajo relacionado}
535535+536536+\textbf{C\'odigo impreso.} La tradici\'on de la demoscene de ``sizecoding'' (programas de menos de 256 bytes) comparte la est\'etica de programas m\'inimos que producen salida m\'axima. Las tarjetas de \kidlisp{} est\'an m\'as cerca de la tradici\'on del ``poema de c\'odigo'', donde el c\'odigo fuente mismo se lee como texto junto con su salida.
537537+538538+\textbf{Partituras gr\'aficas.} El \emph{Treatise} de Cardew (1967) y las \emph{Notations} de Cage (1969) establecieron que la notaci\'on visual puede servir como instrucciones de interpretaci\'on sin prescribir una realizaci\'on espec\'ifica. Las tarjetas KidLisp difieren en que son completamente ejecutables---el renderizado es determinista, no abierto a interpretaci\'on. Pero el encuadre de tarjeta-como-partitura invita a la reinterpretaci\'on: \textquestiondown qu\'e pasa si ``tocas'' la tarjeta de manera diferente cada vez?
539539+540540+\textbf{Juegos de tarjetas coleccionables.} Juegos como \emph{Magic: The Gathering} (1993) demostraron que las tarjetas con metadatos estructurados (nombre, tipo, texto de reglas, arte) crean ricos espacios combinatorios. Las tarjetas KidLisp tienen metadatos naturales (t\'itulo, categor\'ia, n\'umero de funciones, n\'umero de l\'ineas, complejidad de salida) que podr\'ian soportar mec\'anicas de juego similares.
541541+542542+\textbf{Cuadernos computacionales.} Los cuadernos Jupyter ya combinan c\'odigo y salida. El cuaderno de KidLisp Cards es un cuaderno Jupyter, pero con una restricci\'on espec\'ifica: cada celda es una tarjeta autocontenida en lugar de un paso en un c\'alculo m\'as largo. El cuaderno es una galer\'ia, no una narrativa.
543543+544544+% ============ 7. CONCLUSI\'ON ============
545545+546546+\section{Conclusi\'on}
547547+548548+Las tarjetas KidLisp surgen de una observaci\'on simple: cuando los programas son lo suficientemente cortos, caben en tarjetas. El formato de tarjeta---t\'itulo, imagen, fuente---convierte los programas en artefactos f\'isicos que pueden imprimirse, enviarse por correo, coleccionarse, ense\~narse y ejecutarse. El pipeline de renderizado en Python permite la producci\'on offline por lotes. El cat\'alogo de siete categor\'ias proporciona un punto de entrada curado al lenguaje.
549549+550550+El formato es un trabajo en progreso. La baraja actual de 28 tarjetas es un punto de partida, no una colecci\'on terminada. La pregunta no es cu\'antas tarjetas hacer sino qu\'e programas merecen ser tarjetas---qu\'e composiciones de tres l\'ineas producen im\'agenes que vale la pena sostener en la mano.
551551+552552+El cuaderno, el int\'erprete y el cat\'alogo de tarjetas est\'an disponibles en \url{https://github.com/whistlegraph/aesthetic-computer}. Los programas pueden crearse y compartirse en \url{https://kidlisp.com}.
553553+554554+\vspace{0.5em}
555555+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
556556+557557+% ============ REFERENCIAS ============
558558+559559+\bibliographystyle{plainnat}
560560+\bibliography{references}
561561+562562+\end{document}
···11+% !TEX program = xelatex
22+\documentclass[11pt, a4paper]{article}
33+44+\usepackage{fontspec}
55+\usepackage{unicode-math}
66+\setmainfont{Latin Modern Roman}
77+\setsansfont{Latin Modern Sans}
88+\setmonofont{Latin Modern Mono}[Scale=0.88]
99+1010+\usepackage{graphicx}
1111+\graphicspath{{figures/}{../arxiv-ac/figures/}}
1212+\usepackage{booktabs}
1313+\usepackage{tabularx}
1414+\usepackage{ragged2e}
1515+\usepackage{microtype}
1616+\usepackage{natbib}
1717+\usepackage{multicol}
1818+1919+\usepackage[
2020+ top=2.2cm, bottom=2.5cm, left=2.0cm, right=2.0cm
2121+]{geometry}
2222+2323+\makeatletter
2424+\def\input@path{{../}}
2525+\makeatother
2626+\usepackage{ac-paper-layout}
2727+2828+\newcommand{\acos}{\textsc{AC Native OS}}
2929+3030+\hypersetup{
3131+ pdftitle={Få lukket kildekode ud af skolerne: Hver Chromebook er en nægtet adgang},
3232+}
3333+3434+\begin{document}
3535+3636+\thispagestyle{empty}
3737+\vspace*{\fill}
3838+\begin{center}
3939+\includegraphics[height=8em]{pals}\par\vspace{0.3em}
4040+{\acbold\fontsize{18pt}{22pt}\selectfont\color{acdark} Få lukket kildekode ud af skolerne}\par
4141+\vspace{0.3em}
4242+{\fontsize{10pt}{12pt}\selectfont\color{acpink} Hver Chromebook er en nægtet adgang}\par
4343+\vspace{0.8em}
4444+{\normalsize\color{cyan!70!blue}\textbf{@jeffrey}}\par
4545+{\small\color{acgray} Aesthetic.Computer}\par
4646+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
4747+\vspace{0.8em}
4848+\rule{0.6\textwidth}{1pt}\par
4949+\vspace{0.4em}
5050+{\small\color{acpink!40}\textit{arbejdsudkast --- ikke til citation}}\par
5151+\vspace{0.3em}
5252+{\footnotesize\color{acgray} Marts 2026}\par
5353+\end{center}
5454+\vspace*{\fill}
5555+\clearpage
5656+5757+\begin{multicols}{2}
5858+5959+% ============================================================
6060+% ABSTRACT
6161+% ============================================================
6262+6363+\begin{abstract}
6464+\noindent
6565+Der er over 50 millioner Chromebooks i amerikanske skoler. Hver eneste er en kapabel computer, der kører et låst, lukket styresystem, som kanaliserer enhver elevinteraktion gennem Googles overvågningsinfrastruktur. Eleven kan ikke se, hvordan maskinen fungerer. Eleven kan ikke ændre maskinen. Eleven kan ikke eje maskinen i nogen meningsfuld forstand. I en tid med store sprogmodeller---hvor ``alle er programmører'' ikke længere er et slogan, men en materiel virkelighed---er dette en pædagogisk forsømmelse. Denne artikel argumenterer for, at enhver elev fortjener en fri og åben styresystemstak: én hvor Chromebooken bliver en port til elevens egen vej gennem logik, kreativitet, internettet, fællesskab og det computationelle landskab som helhed. Vi præsenterer de tekniske, pædagogiske, økonomiske og politiske argumenter for at erstatte lukket skolecomputerinfrastruktur med åbne alternativer, idet vi trækker på internationale præcedenser fra Kerala, Slesvig-Holsten og Frankrig, miljødata om planlagt forældelse, føderale og statslige retssager mod elevers overvågning, samt ny forskning i AI-assisteret programmeringsundervisning. Vi præsenterer \acos{}~\citep{scudder2026acos} som én konkret implementering af denne vision.
6666+\end{abstract}
6767+6868+% ============================================================
6969+% 1. THE CHROMEBOOK PROBLEM
7070+% ============================================================
7171+7272+\section{Chromebook-problemet}
7373+7474+I 2012 begyndte Google aggressivt at markedsføre Chromebooks til amerikanske skoledistrikter. Budskabet var enkelt: billig hardware, ingen IT-overhead, alt i skyen. I 2026 udgør Chromebooks ca.\ 60\% af enhederne leveret til amerikanske K--12-skoler med en installeret base på over 50 millioner enheder~\citep{google2024chromeos}. En hel generation af amerikanske elever bliver uddannet på maskiner, de ikke kan forstå, ikke kan ændre og ikke ejer---selv når skolen har betalt for dem.
7575+7676+ChromeOS er proprietær software. Kildekoden er ikke tilgængelig til inspektion. Browseren er hele grænsefladen. Hvert dokument lever i Google Drev. Enhver søgning går gennem Google. Enhver interaktion logges, analyseres og bruges til at opbygge adfærdsprofiler, der følger eleven ind i voksenlivet~\citep{zuboff2019surveillance}.
7777+7878+Dette er ikke en bekymring i periferien. Dette er \emph{arkitekturen} bag, hvordan amerikanske børn lærer at bruge computere. Mediet er budskabet~\citep{mcluhan1964understanding}: Chromebooken lærer, at en computer er en enhed til forbrug af cloudtjenester ejet af en virksomhed. Den lærer, at dit arbejde lever på en andens server. Den lærer, at maskinen ikke er din at forstå.
7979+8080+\subsection{Hvad eleven ikke kan gøre}
8181+8282+På en Chromebook i skolen kan en elev ikke:
8383+8484+\begin{itemize}
8585+ \item Installere et programmeringssprog-runtime (Python, Node.js, GCC)
8686+ \item Køre en lokal webserver eller kompilere kode
8787+ \item Inspicere styresystemets kildekode
8888+ \item Ændre opstartsekvensen
8989+ \item Tilslutte hardwareperiferiudstyr til fysisk computing
9090+ \item Bruge maskinen offline til seriøst arbejde
9191+ \item Opbevare sine data på enheden uden cloudsynkronisering
9292+ \item Vælge sin egen software
9393+ \item Forstå, hvad maskinen gør med deres opmærksomhed
9494+\end{itemize}
9595+9696+ChromeOS inkluderer en Linux-container (Crostini), der i teorien kunne levere disse muligheder, men skolernes IT-administratorer deaktiverer den næsten altid. Maskinen leveres med en terminal og låser den derefter. Hver af disse restriktioner er en lukket dør. Hver lukket dør er en vej, eleven aldrig vil opdage. Chromebooken er ikke en port---den er en \emph{låge}.
9797+9898+\subsection{Skyen som udlejer}
9999+100100+Når en elevs arbejde lever i Google Drev, er de lejere, ikke ejere. Google kan ændre servicevilkårene. Google kan nedlægge produkter. Google kan tilbagekalde adgangen. Eleven dimitterer og mister sin Google-skolekonto---og med den hvert dokument, hvert projekt, hvert kreativt artefakt, de producerede under deres uddannelse.
101101+102102+Dette er ikke hypotetisk. Det sker hvert år i hvert skoledistrikt. Elever mister adgang til års arbejde, fordi den institution, der købte deres cloudkonto, afvikler den. Arkitekturen \emph{garanterer} dette resultat: eleven havde aldrig sine filer. De havde tilladelse til at tilgå filer på Googles servere, og den tilladelse blev tilbagekaldt.
103103+104104+Freire kaldte dette ``bankmodellen'' for uddannelse~\citep{freire1970pedagogy}: viden indsat i elever af autoriteter. Chromebooken gør metaforen bogstavelig. Elevens arbejde indsættes i en bank, de ikke kontrollerer, ikke kan revidere og til sidst vil blive låst ude af.
105105+106106+\subsection{Planlagt forældelse: AUE-problemet}
107107+108108+Hver Chromebook leveres med en Auto Update Expiration (AUE)-dato, hvorefter Google ikke leverer sikkerhedsopdateringer, funktionsopdateringer eller browseropdateringer. Historisk sat til 6,5 år fra \emph{platformens} første udgivelse---ikke købsdatoen---kan en skole, der køber en Chromebook sent i en platformscyklus, kun modtage 3--4 års opdateringer. Google forlængede dette til 10 år for enheder lanceret i 2024, men den installerede base af kortlivede maskiner er stadig enorm.
109109+110110+U.S. PIRG Education Fund estimerede, at AUE-politikker ville tvinge den for tidlige bortskaffelse af 21,5 millioner funktionelt fungerende Chromebooks inden 2024, hvilket ville koste skoler ca.\ \$1,8 milliarder i unødvendige udskiftninger~\citep{pirg2023chromebook}. Disse er maskiner med fungerende processorer, fungerende skærme, fungerende tastaturer---gjort forældede af en softwarepolitik, ikke af hardwarefejl.
111111+112112+Kontrasten med Linux er absolut. En 2015 ThinkPad med Ubuntu LTS modtager fortsat sikkerhedsopdateringer på ubestemt tid. Der er ingen kunstig udløbsdato knyttet til hardwaremodellen. Maskinen forbliver nyttig, så længe hardwaren fungerer.
113113+114114+% ============================================================
115115+% 2. THE SURVEILLANCE MACHINE
116116+% ============================================================
117117+118118+\section{Overvågningsmaskinen}
119119+\label{sec:surveillance}
120120+121121+Google leverer Chromebooks til skoler under kostpris, fordi elever er et fanget marked for adfærdsdata~\citep{zuboff2019surveillance, doctorow2020attack}. En elev, der vokser op i Googles økosystem---Gmail, Google Docs, Google Drev, Google Classroom, YouTube---er en kunde for livet. Chromebooken er ikke en velgørende donation. Det er en kundeerhvervelsesstrategi rettet mod børn.
122122+123123+\subsection{Hvad Google indsamler}
124124+125125+De data, der indsamles fra elevers Chromebooks, inkluderer:
126126+127127+\begin{itemize}
128128+ \item Enhver søgeforespørgsel og hvert besøgt websted
129129+ \item Hvert dokument åbnet, redigeret og delt
130130+ \item Hver YouTube-video set og i hvor lang tid
131131+ \item Tastetryk-timing-mønstre og loginfrekvens
132132+ \item Placeringsdata (på cellulære modeller)
133133+ \item Sociale grafer (hvem samarbejder med hvem i Google Docs)
134134+ \item Enhedsdiagnostik og app-brugstelemetri
135135+\end{itemize}
136136+137137+Google hævder, at data indsamlet under Workspace for Education ``kernetjenester'' ikke bruges til reklame. Men ``yderligere tjenester''---YouTube, Google Søgning, Google Maps når man er logget ind---opererer under andre vilkår. Elever på skole-Chromebooks bruger disse yderligere tjenester konstant, og dataen strømmer til Googles reklameinfrastruktur.
138138+139139+\subsection{Retssager}
140140+141141+Retssagerne tegner et dystert billede. I 2019 betalte Google \$170 millioner til FTC og New Yorks statsadvokat for YouTubes COPPA-overtrædelser---indsamling af data fra børn uden forældresamtykke~\citep{google2019coppa}. I 2020 sagsøgte New Mexicos statsadvokat Hector Balderas Google direkte for at indsamle personlige data fra børn, der bruger Chromebooks i skoler~\citep{newmexico2020google}. EFF indgav en FTC-klage i 2015, der dokumenterede, at Google dataminerede elevers browsingaktivitet gennem Chromebooks~\citep{eff2015chromebook}. I 2024 indgav en koalition af digitale rettighedsorganisationer yderligere FTC-klager vedrørende fortsat elevers overvågning~\citep{eff2024monitoring}. Gruppesøgsmål vedrørende biometrisk dataindsamling fra elever under Illinois' BIPA-lov er igangværende.
142142+143143+Disse data indsamles fra mindreårige, i et institutionelt miljø hvor deltagelse er obligatorisk, på maskiner eleven ikke valgte og ikke kan konfigurere. Eleven kan ikke fravælge. Forælderen kan ofte ikke fravælge. Skoledistriktet underskrev en kontrakt, og børnene er bundet af den.
144144+145145+\subsection{Overvågningssoftware}
146146+147147+Ud over Googles egen dataindsamling lægger skoledistrikter yderligere overvågningssoftware---Gaggle, GoGuardian, Securly---oven på Chromebooks. EFF dokumenterede, at disse værktøjer overvåger privat kommunikation og uforholdsmæssigt rammer udsatte, minoritets- og LGBTQ-unge~\citep{eff2024monitoring}. Af 152 ed-tech-tjenester undersøgt af EFF havde kun 118 offentliggjort privatlivspolitikker; langt færre adresserede dataopbevaring, kryptering eller afidentificering.
148148+149149+Winner argumenterede for, at artefakter har politik~\citep{winner1980artifacts}. Chromebookens politik er klar: den er et overvågningsinstrument indsat i en kontekst, hvor de overvågede ikke har noget valg, ingen mulighed for klage og ingen forståelse af, hvad der tages fra dem.
150150+151151+Et frit og åbent styresystem indsamler ingen telemetri. Det ringer ikke hjem til nogen virksomhed. Det opbygger ingen adfærdsprofil. Elevens opmærksomhed, deres nysgerrighed, deres fejl, deres udforskning---alt dette forbliver privat, fordi maskinen ikke har noget økonomisk incitament til at observere dem.
152152+153153+% ============================================================
154154+% 3. THE LLM INFLECTION
155155+% ============================================================
156156+157157+\section{Alle er programmører nu}
158158+159159+Store sprogmodeller har ændret programmering\-ens økonomi. En elev, der kan beskrive, hvad de vil have, i naturligt sprog, kan producere fungerende kode. Barrieren for computationel skabelse er kollapset fra ``års teknisk uddannelse'' til ``evnen til at formulere en idé.'' Karpathys observation om, at ``det hotteste nye programmeringssprog er engelsk,'' er ikke længere overdrivelse---det er en beskrivelse af materiel virkelighed.
160160+161161+Dette er det vigtigste skift i computing siden den personlige computer. Og det gør Chromebook-problemet \emph{katastrofalt værre}.
162162+163163+\subsection{Den nye læsefærdighed}
164164+165165+Hvis alle kan programmere, så er programmering læsefærdighed. Og læsefærdighed kræver værktøjer, som den læsefærdige person kan eje. Man lærer ikke et barn at læse ved at give dem en låst bog, der kun kan åbnes i en bestemt bygning med en bestemt virksomhedskonto. Man giver dem bogen. De tager den med hjem. De læser den i sengen. De skriver i margenerne. De låner den til en ven.
166166+167167+En elev med en LLM og et åbent styresystem kan:
168168+169169+\begin{itemize}
170170+ \item Bygge et værktøj til at organisere deres lektier
171171+ \item Skrive et spil og dele det med klassekammerater
172172+ \item Automatisere en gentagende opgave, som deres lærer giver
173173+ \item Skabe en lille virksomhed, der sælger software til deres lokalsamfund
174174+ \item Bidrage til open source-projekter, der tjener menneskeheden
175175+ \item Forstå og ændre de systemer, der styrer deres digitale liv
176176+ \item Udforske logik, matematik og sprog gennem direkte manipulation
177177+ \item Bygge instrumenter til kunstnerisk udtryk
178178+\end{itemize}
179179+180180+En elev med en LLM og en Chromebook kan bruge Google Docs hurtigere.
181181+182182+Ko (University of Washington) har argumenteret for, at hvis AI kan skrive kode, må CS-uddannelse skifte mod systemtænkning, debugging og evaluering---alt sammen kræver adgang til rigtige udviklingsmiljøer, ikke sandkassebrowsere~\citep{denny2024computing}. Krishnamurthi (Brown University) har været kritisk over for tilgange, der reducerer programmering til prompting. Den fremvoksende konsensus i CS-uddannelsesforskning er, at LLM'er gør fuld stack-adgang \emph{vigtigere}, ikke mindre~\citep{prather2024robots}: elever skal kunne køre, debugge, ændre og forstå genereret kode. Chromebooks gør alle fire sværere.
183183+184184+\subsection{Chromebooken kan ikke eksekvere}
185185+186186+Her er det konkrete svigt: LLM'en producerer et Python-script, og Chromebooken kan ikke køre det. LLM'en genererer en webserver, og Chromebooken kan ikke hoste den. LLM'en skriver C-kode, og Chromebooken har ingen compiler. LLM'en lærer eleven, hvordan et styresystem fungerer, og Chromebooken lader dem ikke inspicere ét.
187187+188188+På en typisk skole-Chromebook (MediaTek- eller Celeron-processor, 4\,GB RAM) kæmper selv Linux-containeren---når den er aktiveret---med at køre basale udviklingsværktøjskæder. At køre en lokal LLM er fysisk umuligt: selv en kvantiseret 1B-parametermodel kræver mere hukommelse, end de fleste skole-Chromebooks har.
189189+190190+Alternativet er trivielt. En brugt ThinkPad med 8\,GB RAM, der kører Linux, kan eksekvere enhver LLM-genereret kode, køre en lokal 3B-parametermodel via Ollama med interaktive hastigheder, hoste en webserver, kompilere programmer og give eleven root-adgang til hele systemet. Hardwaren eksisterer. Softwaren er gratis. Chromebooken er flaskehalsen.
191191+192192+\subsection{Den åndelige dimension}
193193+194194+Dette handler ikke kun om økonomi eller karriereforberedelse. Der er en åndelig dimension ved computing, som Chromebook-arkitekturen udsletter.
195195+196196+Når en elev skriver et program, der gør noget, de ikke forventede---når maskinen overrasker dem med emergent adfærd fra regler, de selv definerede---oplever de noget dybtgående. De møder grænsen mellem intention og konsekvens. De lærer, at systemer har deres egen logik. De udvikler et forhold til abstraktion selv.
197197+198198+Papert forstod dette~\citep{papert1980mindstorms}: Logo handlede ikke om at undervise i programmering. Det handlede om at give børn et medium til at tænke over tænkning. Skildpadden var et middel til erkendelse.
199199+200200+LLM'er forstærker dette tusinddobbelt. En elev kan nu have en \emph{samtale} med det computationelle medium. De kan spørge ``hvad nu hvis?'' og få svar på sekunder. De kan iterere på ideer med tankens hastighed. De kan udforske veje, som ingen læseplan forudså.
201201+202202+Men kun hvis maskinen lader dem. En Chromebook lader dem ikke. En Chromebook siger: du må forbruge tjenester. Du må ikke skabe infrastruktur. Du må ikke køre din egen kode på din egen måde på din egen maskine.
203203+204204+% ============================================================
205205+% 4. WHAT STUDENTS DESERVE
206206+% ============================================================
207207+208208+\section{Hvad enhver elev fortjener}
209209+210210+Enhver elev fortjener en computer, der:
211211+212212+\begin{enumerate}
213213+ \item \textbf{De kan forstå.} Styresystemets kildekode bør være tilgængelig til inspektion. Ikke som et abstrakt princip, men som en praktisk realitet: eleven bør kunne læse den kode, der kører, når de trykker på en tast.
214214+215215+ \item \textbf{De kan ændre.} Hvis eleven vil ændre, hvordan maskinen opfører sig, bør de kunne det. Ikke gennem en app-butik, ikke gennem et indstillingspanel, men ved at ændre koden.
216216+217217+ \item \textbf{De kan eje.} Elevens arbejde bør leve på elevens maskine. Ikke på en virksomhedsserver, ikke i en cloudkonto, der bliver afviklet, når de dimitterer.
218218+219219+ \item \textbf{De kan dele.} Eleven bør kunne give sin software til en ven. Ikke gennem en platform, ikke gennem en markedsplads, men ved at kopiere en fil.
220220+221221+ \item \textbf{De kan ødelægge.} Eleven bør kunne ødelægge maskinen og reparere den. Sådan lærer man. Et system, der ikke kan ødelægges, kan ikke forstås.
222222+223223+ \item \textbf{De kan tage med sig.} Når eleven forlader skolen, følger computeren---og alt på den---med dem. Deres computationelle liv er ikke lejet. Det er deres.
224224+225225+ \item \textbf{Respekterer deres opmærksomhed.} Styresystemet bør ikke indeholde reklame, adfærdssporing eller engagementsoptimering. Elevens opmærksomhed tilhører eleven.
226226+227227+ \item \textbf{Forbinder dem med fællesskab.} Eleven bør kunne bidrage til det computationelle landskab---skrive kode, som andre bruger, deltage i open source-projekter, bygge værktøjer, der tjener deres fællesskab og opretholder deres livsstil og velbefindende.
228228+\end{enumerate}
229229+230230+Hvert eneste af disse krav overtrædes af ChromeOS. Hvert eneste af dem opfyldes af et frit og åbent styresystem.
231231+232232+% ============================================================
233233+% 5. IT ALREADY WORKS
234234+% ============================================================
235235+236236+\section{Det virker allerede: Internationale præcedenser}
237237+238238+Indvendingen om, at open source-skolecomputing er uafprøvet, er falsk. Det er blevet testet i stor skala på tre kontinenter.
239239+240240+\subsection{Kerala, Indien: 16.000 skoler}
241241+242242+Keralas KITE-program (Kerala Infrastructure and Technology for Education) gik fuldt over til fri software i 2007 på tværs af 16.000+ offentlige skoler. KITE GNU/Linux 22.04, udgivet i august 2024, kører på over 300.000 skolecomputere~\citep{kite2024gnulinux}. Distributionen inkluderer uddannelsessoftware (Krita, GCompris, PictoBlox), grundlæggende AI/ML-undervisningsværktøjer og en Wayland-displayserver. De estimerede besparelser: 30 milliarder INR (ca.\ \$400 millioner). Over 150.000 grundskolelærere er blevet uddannet. Indiens National Law School udråbte KITE som den nationale standard for open source-transformation i uddannelse.
243243+244244+Dette er ikke et pilotprogram. Det er en statslig udrulning, der betjener millioner af elever og har kørt kontinuerligt i næsten to årtier.
245245+246246+\subsection{Slesvig-Holsten, Tyskland: 30.000 PC'er}
247247+248248+Ved udgangen af sommeren 2025 afsluttede den tyske delstat Slesvig-Holsten migrering af næsten 30.000 statslige PC'er fra Microsoft til Linux, med yderligere 30.000 offentlige skolelærere forventet at følge~\citep{schleswig2025linux}. Erstatningerne inkluderer LibreOffice, Nextcloud, Open-Xchange og Mozilla Thunderbird. Estimerede besparelser: 15 millioner EUR alene i 2026. Danmark annoncerede en lignende overgang mellem juni og november 2025.
249249+250250+\subsection{Frankrig: National open source-strategi}
251251+252252+Frankrigs strategi for digital uddannelse 2023--2027, ledet af Alexis Kauffmann i Uddannelsesministeriet, sigter eksplicit mod digital suverænitet og reduceret afhængighed af Microsoft og Google~\citep{france2023digital}. Den nationale platform \texttt{apps.education.fr} leverer open source-værktøjer til alle franske lærere. I 2025 vedtog Frankrig et interoperabilitetsdekret, der kræver, at skoler bruger digitale værktøjer, der overholder åbne standarder---hvilket skaber en strukturel fordel for open source-løsninger.
253253+254254+\subsection{Penn Manor, Pennsylvania: 1.725 Linux-bærbare}
255255+256256+I USA udrullede Penn Manor School District i Lancaster, PA 1.725 Ubuntu-bærbare til elever i 9.--12.\ klasse~\citep{pennmanor2024linux}. Programmet inkluderer et elevstyret reparationsinitiativ, hvor elever lærer at reparere deres egne maskiner. Dette er ikke et specialdistrikt med specialfinansiering. Det er et offentligt skoledistrikt, der traf et andet valg.
257257+258258+\subsection{Bevægelsen ``Offentlige penge, offentlig kode''}
259259+260260+Free Software Foundation Europes kampagne ``Public Money? Public Code!''---der argumenterer for, at software udviklet med offentlige midler bør udgives under frie licenser---har samlet over 200 civilsamfundsorganisationer og 31.000 individuelle underskrivere~\citep{fsfe2024publiccode}. UNESCOs Dubai-erklæring om åbne uddannelsesressourcer fra 2024 forpligter formelt underskriverne til at fremme åbne ressourcer gennem AI og nye teknologier~\citep{unesco2024oer}. Global Digital Compact forpligter sig til at ``udvikle, udbrede og vedligeholde open source-software, åbne data, åbne AI-modeller og åbne standarder, der gavner samfundet.''
261261+262262+Disse er ikke marginale bevægelser. De er retningen for international politik.
263263+264264+% ============================================================
265265+% 6. THE ECONOMICS
266266+% ============================================================
267267+268268+\section{Økonomien}
269269+270270+\subsection{Omkostningsundskyldningen}
271271+272272+Chromebooks er billige. Men det er brugte bærbare med Linux også. En brugt ThinkPad T480 eller Dell Latitude 5400 koster \$100--180 i bulk og er en overlegen maskine i enhver dimension bortset fra ``administreret af Google.'' Omkostningsargumentet for Chromebooks er et argument for Googles økosystem, ikke for hardwaren.
273273+274274+\begin{table}[H]
275275+\small
276276+\centering
277277+\begin{tabular}{lrr}
278278+\toprule
279279+\textbf{Tilgang} & \textbf{Omkostning} & \textbf{Eleven ejer den} \\
280280+\midrule
281281+Chromebook (ny) & \$250--350 & Nej \\
282282+Chrome Edu Upgrade & +\$38/enhed & Nej \\
283283+Google Workspace Plus & +\$5/elev/år & Nej \\
284284+iPad (edu) & \$299+ & Nej \\
285285+\midrule
286286+Brugt bærbar + Linux & \$100--180 & \textbf{Ja} \\
287287+Brugt bærbar + AC OS & \$100--180 & \textbf{Ja} \\
288288+\bottomrule
289289+\end{tabular}
290290+\caption{Omkostnings- og ejerskabssammenligning. Chromebook-omkostninger ekskluderer overvågningssoftware (GoGuardian: \$5--10/enhed/år) og tvungne AUE-udskiftninger.}
291291+\label{tab:cost}
292292+\end{table}
293293+294294+Når man medregner Googles Chrome Education Upgrade (\$38/enhed), Workspace for Education Plus (\$5/elev/år), overvågningssoftware og den tvungne udskiftningscyklus fra AUE, kan de samlede ejerskabsomkostninger for en Chromebook over 5 år nå \$450--550/enhed. En brugt ThinkPad med Linux: \$100--180, med nul løbende licensomkostninger, ingen kunstig udløbsdato, og eleven beholder den.
295295+296296+\subsection{Udbuddet}
297297+298298+Maskinerne eksisterer. Anslået 50--60 millioner erhvervs-PC'er pensioneres årligt i USA. Virksomhedsleasingcyklusser pensionerer millioner af funktionelle bærbare hvert 3.--5.\ år---maskiner med moderne processorer, 8--16\,GB RAM, WiFi og 6--10 timers batteri. Organisationer som PCs for People (100.000+ enheder/år), Human-I-T (50.000+/år), Kramden Institute, Free Geek og det føderale Computers for Learning-program renoverer og distribuerer allerede disse maskiner.
299299+300300+Et klasseværelse med 30 kreative computinginstrumenter kan anskaffes for \$3.000--5.400 i hardware. Intet løbende abonnement. Ingen IT-supportkontrakt. Ingen administrerede konti.
301301+302302+\subsection{Miljøargumentet}
303303+304304+En typisk bærbar producerer 300--400 kg CO$_2$e i fremstilling---70--80\% af dens samlede livstids-CO$_2$-aftryk. Renovering tilføjer ca.\ 5--15 kg CO$_2$e. Circular Computings uafhængigt reviderede analyse fandt 316 kg CO$_2$e sparet per genfremstillet bærbar~\citep{circularcomputing2023carbon}. FNs Global E-waste Monitor 2024 rapporterer, at USA genererer ca.\ 7,2 Mt e-affald årligt, hvoraf kun 25\% genanvendes korrekt~\citep{un2024ewaste}.
305305+306306+Googles AUE-politik tvinger skoler til at kassere millioner af fungerende Chromebooks. Ret-til-reparation-lovgivning begynder at adressere dette: Oregons lov (gældende fra januar 2025) kræver, at producenter leverer dele og reparationsinformation~\citep{oregon2024repair}; New Hampshires HB1701 dækker eksplicit skoleutleverede bærbare~\citep{newhampshire2024repair}. Men lovgivning kan ikke rette en softwarepolitik, der erklærer funktionel hardware forældet.
307307+308308+Linux har ingen AUE. En bærbar, der kører et frit styresystem, forbliver nyttig, så længe hardwaren fungerer.
309309+310310+% ============================================================
311311+% 7. THE OPEN STACK
312312+% ============================================================
313313+314314+\section{Den åbne stak}
315315+316316+\subsection{Enhver Chromebook er allerede en Linux-maskine}
317317+318318+Her er det absurde: enhver Chromebook kører allerede Linux-kernen. ChromeOS er Linux med et låst brugerrum, der tvinger al interaktion gennem Googles browser. Hardwaren er fuldt i stand til at køre et frit styresystem. Google tog en fri kerne, indpakkede den i proprietære restriktioner og solgte den til skoler som en besparelsesforanstaltning.
319319+320320+Befrielsen af disse maskiner kræver ikke ny hardware. Den kræver at flashe ny software. Mange Chromebooks kan låses op og reflashes med en standard Linux-distribution eller med \acos{}. Maskinen \emph{vil allerede gerne være fri}. Google er låsen.
321321+322322+\subsection{IT-undskyldningen}
323323+324324+Skolernes IT-afdelinger vælger Chromebooks, fordi de er ``nemme at administrere.'' Det er sandt. Det er nemt at administrere en maskine, der ikke gør noget. Det er nemt at administrere en flåde, når hver enhed er en tynd klient for en enkelt virksomheds tjenester. Administrationsletheden er en direkte konsekvens af maskinens magtesløshed.
325325+326326+Spørgsmålet er: nemt for hvem? Nemt for IT-afdelingen, bestemt. Men katastrofalt for eleven. IT-afdelingens bekvemmelighed købes med elevens autonomi. Det er en dårlig handel.
327327+328328+Open source-administrationsværktøjer eksisterer. NixOS leverer reproducerbare systemkonfigurationer. Ansible automatiserer flådedeployment. PXE-boot muliggør nul-berørings-klargøring. \acos{}~\citep{scudder2026acos} demonstrerer, at et helt styresystem kan deployes ved at flashe et USB-drev på under et minut, med OTA-opdateringer der kræver ingen IT-infrastruktur. Penn Manor driver 1.725 Linux-bærbare med et mindre IT-team end sammenlignelige Chromebook-distrikter~\citep{pennmanor2024linux}. ``Administrationsproblemet'' er løst. Hvad der er tilbage, er institutionel inerti og et kontraktforhold med Google, der tjener institutionen, ikke eleven.
329329+330330+\subsection{LLM-infrastrukturen}
331331+332332+Et åbent system muliggør et fundamentalt anderledes forhold til AI. En enkelt brugt server (32--64\,GB RAM, eller en brugt NVIDIA T4 GPU til \$100--200) kan køre Ollama og betjene et helt klasseværelse af elever via Open WebUI---en gratis, open source LLM-frontend. Elever forbinder fra deres bærbare via en browser rettet mod den lokale server. Modeller som Llama 3.2 3B (passer i 4\,GB), DeepSeek Coder 6.7B eller Qwen 2.5 Coder 7B leverer stærk kodegenereringskapacitet.
333333+334334+Dette er lokal AI-infrastruktur, som skolen ejer, der ikke indsamler telemetri, der ikke sender data til nogen virksomhed, og som elever kan inspicere, ændre og lære af. Alternativet---Google Gemini integreret i Workspace for Education---tilføjer endnu et lag af virksomhedsafhængighed, endnu en datapipeline, endnu et abonnementsgebyr.
335335+336336+% ============================================================
337337+% 8. THE LLM GATEWAY
338338+% ============================================================
339339+340340+\section{Eleven som forfatter}
341341+342342+På et åbent system med LLM-adgang kan eleven:
343343+344344+\begin{itemize}
345345+ \item Bede LLM'en forklare styresystemets kildekode
346346+ \item Generere programmer, der kører lokalt, med fuld hardwareadgang
347347+ \item Bygge webservere, databaser, API'er---rigtig infrastruktur
348348+ \item Skabe værktøjer, der løser virkelige problemer i deres lokalsamfund
349349+ \item Lære ethvert programmeringssprog ved at bygge med det
350350+ \item Forstå LLM'en selv ved at undersøge dens input og output
351351+ \item Skabe en piece på \ac{}~\citep{scudder2026ac}, som alle i verden kan køre
352352+\end{itemize}
353353+354354+LLM'en bliver en tutor med uendelig tålmodighed, tilgængelig 24 timer i døgnet, der møder eleven præcis dér, hvor de er~\citep{khan2024bravenew}. Men denne tutor kan kun være effektiv, hvis eleven har en maskine, der kan \emph{eksekvere}, hvad tutoren producerer.
355355+356356+Chromebook-modellen siger: du er en bruger. Den åbne model siger: du er en forfatter. I LLM-alderen er forskellen mellem disse to rammer forskellen mellem digital læsefærdighed og digital livegenskab.
357357+358358+% ============================================================
359359+% 9. A PATH FORWARD
360360+% ============================================================
361361+362362+\section{En vej frem}
363363+364364+\subsection{Fase 1: Bevidsthed}
365365+366366+Forældre, lærere og skolebestyrelsesmedlemmer skal forstå, hvad en Chromebook faktisk er: en overvågningsenhed, der lærer tillært hjælpeløshed. Det første skridt er oplysning---ikke af børnene, men af de voksne, der køber maskinerne. EFFs ``Spying on Students''-dokumentation, U.S. PIRGs ``Chromebook Churn''-rapport og New Mexico-statsadvokatens retssag giver konkret bevismateriale, der kan præsenteres ved skolebestyrelsesmøder.
367367+368368+\subsection{Fase 2: Pilotprogrammer}
369369+370370+Skoledistrikter bør pilottest open source-alternativer efter Penn Manors model:
371371+372372+\begin{itemize}
373373+ \item 30 brugte bærbare med Linux eller \acos{}, anskaffet for \$3.000--5.400
374374+ \item En lokal LLM-server (én brugt arbejdsstation, \$200--500) med Ollama + Open WebUI
375375+ \item En LLM-assisteret læseplan, hvor elever bygger rigtig software
376376+ \item Elevejerskab: maskinen tager med hjem med eleven
377377+ \item Et elevstyret reparationsprogram (Penn Manors elever reparerer deres egne maskiner)
378378+ \item Ingen cloudafhængighed: arbejde gemmes lokalt og sikkerhedskopieres af eleven
379379+ \item Åben evaluering: elevens portfolio er kode, de skrev, værktøjer, de byggede, bidrag, de gav
380380+\end{itemize}
381381+382382+\subsection{Fase 3: Politik}
383383+384384+Stater og distrikter bør vedtage politikker, der kræver, at:
385385+386386+\begin{enumerate}
387387+ \item Al software implementeret på elevers enheder er open source eller source-available
388388+ \item Elever har root-adgang til deres egne maskiner
389389+ \item Ingen adfærdstelemetri indsamles fra elevers enheder
390390+ \item Elever bevarer ejerskab over alt arbejde produceret på skolens enheder
391391+ \item Dimitterende elever beholder deres enheder
392392+ \item Indkøb af enheder prioriterer renoveret hardware over nyfremstilling
393393+\end{enumerate}
394394+395395+Over 40 stater har vedtaget love om elevdatasikkerhed. Californiens SOPIPA forbyder brug af elevdata til målrettet reklame. De nye COPPA-regler (gældende fra juni 2025) styrker børns databeskyttelse. Disse lovgivningsmæssige tendenser støtter argumentet for åben, ikke-overvågende skolecomputerinfrastruktur.
396396+397397+\subsection{Fase 4: Befrielse}
398398+399399+Slutmålet er ikke en politikændring. Det er et kulturskifte. Slutmålet er en generation af elever, der forstår, at en computer ikke er et produkt, de forbruger, men et instrument, de spiller---et medium for tanke, skabelse og bidrag. Elever, der kan læse kildekode, som de læser bøger. Elever, der kan ændre deres værktøjer, som en tømrer ændrer en arbejdsbænk. Elever, der ser computing ikke som en virksomhedstjeneste, men som en offentlig fælled, som de både bidrager til og tilhører.
400400+401401+Nelson skrev i 1974~\citep{nelson1974computerlib}: ``Du kan og skal forstå computere NU.'' Halvtreds år senere har vi fejlet dette imperativ præcis som Nelson frygtede---ved at overdrage maskinerne til virksomheder og kalde det fremskridt.
402402+403403+LLM-øjeblikket gør denne fejl synlig. Enhver elev har nu \emph{evnen} til at programmere. Hvad de mangler, er en \emph{maskine, der lader dem}. Dette er et løseligt problem. Teknologien er gratis. Hardwaren er overskud. Det eneste, der står mellem enhver elev og deres egen computationelle vej, er et virksomhedsstyresystem, der aldrig var designet til at tjene dem.
404404+405405+% ============================================================
406406+% 10. CONCLUSION
407407+% ============================================================
408408+409409+\section{Konklusion}
410410+411411+Enhver Chromebook i enhver amerikansk skole er en Linux-maskine i lænker. Hardwaren kan køre et frit styresystem. Eleven kan lære at programmere med en LLM. Det brugte bærbarmarked leverer maskiner til \$100--180. Hele open source-stakken er tilgængelig til nul omkostninger. Kerala har gjort det for 300.000 computere. Slesvig-Holsten har gjort det for 30.000. Penn Manor har gjort det for 1.725. Det virker.
412412+413413+Hvad vi mangler, er ikke teknologi. Vi mangler den politiske vilje til at prioritere elevautonomi over institutionel bekvemmelighed og virksomhedsprofit.
414414+415415+Illich skrev, at værktøjer bør udvide personlig autonomi snarere end kræve specialiseret ekspertise~\citep{illich1973tools}. Papert skrev, at computere bør være instrumenter til at tænke over tænkning~\citep{papert1980mindstorms}. Stallman skrev, at brugere fortjener at kontrollere den software, de kører~\citep{stallman2002free}. Postman advarede om, at teknologi i skoler uden formål tjener teknologien, ikke barnet~\citep{postman1995end}. Disse er ikke marginale holdninger. De er grundprincipperne for personlig computing, og vi har forladt dem det ene sted, de betyder mest: uddannelsen af børn.
416416+417417+Få lukket kildekode ud af skolerne. Giv enhver elev et frit og åbent styresystem. Lad Chromebooken være, hvad den altid var i stand til at være: ikke en låge, men en \emph{port}---til logik, kreativitet, fællesskab, åndelighed og enhver elevs egen vej gennem det computationelle landskab.
418418+419419+I LLM-alderen er dette ikke idealisme. Det er den mindste levedygtige uddannelse.
420420+421421+\vspace{0.5em}
422422+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
423423+424424+\end{multicols}
425425+426426+% ============================================================
427427+% REFERENCES
428428+% ============================================================
429429+430430+\bibliographystyle{plainnat}
431431+\bibliography{references}
432432+433433+\end{document}
+433
papers/arxiv-open-schools/open-schools-es.tex
···11+% !TEX program = xelatex
22+\documentclass[11pt, a4paper]{article}
33+44+\usepackage{fontspec}
55+\usepackage{unicode-math}
66+\setmainfont{Latin Modern Roman}
77+\setsansfont{Latin Modern Sans}
88+\setmonofont{Latin Modern Mono}[Scale=0.88]
99+1010+\usepackage{graphicx}
1111+\graphicspath{{figures/}{../arxiv-ac/figures/}}
1212+\usepackage{booktabs}
1313+\usepackage{tabularx}
1414+\usepackage{ragged2e}
1515+\usepackage{microtype}
1616+\usepackage{natbib}
1717+\usepackage{multicol}
1818+1919+\usepackage[
2020+ top=2.2cm, bottom=2.5cm, left=2.0cm, right=2.0cm
2121+]{geometry}
2222+2323+\makeatletter
2424+\def\input@path{{../}}
2525+\makeatother
2626+\usepackage{ac-paper-layout}
2727+2828+\newcommand{\acos}{\textsc{AC Native OS}}
2929+3030+\hypersetup{
3131+ pdftitle={Saquen el código cerrado de las escuelas: Cada Chromebook es una puerta denegada},
3232+}
3333+3434+\begin{document}
3535+3636+\thispagestyle{empty}
3737+\vspace*{\fill}
3838+\begin{center}
3939+\includegraphics[height=8em]{pals}\par\vspace{0.3em}
4040+{\acbold\fontsize{18pt}{22pt}\selectfont\color{acdark} Saquen el código cerrado de las escuelas}\par
4141+\vspace{0.3em}
4242+{\fontsize{10pt}{12pt}\selectfont\color{acpink} Cada Chromebook es una puerta denegada}\par
4343+\vspace{0.8em}
4444+{\normalsize\color{cyan!70!blue}\textbf{@jeffrey}}\par
4545+{\small\color{acgray} Aesthetic.Computer}\par
4646+{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
4747+\vspace{0.8em}
4848+\rule{0.6\textwidth}{1pt}\par
4949+\vspace{0.4em}
5050+{\small\color{acpink!40}\textit{borrador de trabajo --- no citar}}\par
5151+\vspace{0.3em}
5252+{\footnotesize\color{acgray} Marzo 2026}\par
5353+\end{center}
5454+\vspace*{\fill}
5555+\clearpage
5656+5757+\begin{multicols}{2}
5858+5959+% ============================================================
6060+% ABSTRACT
6161+% ============================================================
6262+6363+\begin{abstract}
6464+\noindent
6565+Hay más de 50 millones de Chromebooks en las escuelas estadounidenses. Cada una es una computadora capaz que ejecuta un sistema operativo cerrado y bloqueado que canaliza cada interacción del estudiante a través de la infraestructura de vigilancia de Google. El estudiante no puede ver cómo funciona la máquina. El estudiante no puede modificar la máquina. El estudiante no puede poseer la máquina en ningún sentido significativo. En la era de los grandes modelos de lenguaje---cuando ``todos somos programadores'' ya no es un eslogan sino una realidad material---esto es un acto de negligencia educativa. Este artículo argumenta que cada estudiante merece una pila de sistema operativo libre y abierto: una donde el Chromebook se convierta en una puerta de entrada al propio camino del estudiante a través de la lógica, la creatividad, internet, la comunidad y el paisaje computacional en su conjunto. Presentamos los argumentos técnicos, pedagógicos, económicos y políticos para reemplazar la infraestructura informática escolar de código cerrado con alternativas abiertas, basándonos en precedentes internacionales de Kerala, Schleswig-Holstein y Francia, datos ambientales sobre la obsolescencia programada, acciones legales federales y estatales contra la vigilancia estudiantil, e investigación emergente sobre educación en programación asistida por IA. Presentamos \acos{}~\citep{scudder2026acos} como una implementación concreta de esta visión.
6666+\end{abstract}
6767+6868+% ============================================================
6969+% 1. THE CHROMEBOOK PROBLEM
7070+% ============================================================
7171+7272+\section{El problema del Chromebook}
7373+7474+En 2012, Google comenzó a comercializar agresivamente los Chromebooks a los distritos escolares estadounidenses. La propuesta era simple: hardware barato, cero sobrecarga de TI, todo en la nube. Para 2026, los Chromebooks representan aproximadamente el 60\% de los dispositivos enviados a las escuelas K--12 de EE.\,UU., con una base instalada que supera los 50 millones de unidades~\citep{google2024chromeos}. Toda una generación de estudiantes estadounidenses está siendo educada en máquinas que no pueden entender, no pueden modificar y no poseen---incluso cuando la escuela pagó por ellas.
7575+7676+ChromeOS es software propietario. Su código fuente no está disponible para inspección. El navegador es toda la interfaz. Cada documento vive en Google Drive. Cada búsqueda pasa por Google. Cada interacción es registrada, analizada y utilizada para construir perfiles de comportamiento que siguen al estudiante hasta la edad adulta~\citep{zuboff2019surveillance}.
7777+7878+Esto no es una preocupación marginal. Esta es la \emph{arquitectura} de cómo los niños estadounidenses aprenden a usar computadoras. El medio es el mensaje~\citep{mcluhan1964understanding}: el Chromebook enseña que una computadora es un dispositivo para consumir servicios en la nube propiedad de una corporación. Enseña que tu trabajo vive en el servidor de otra persona. Enseña que la máquina no es tuya para entenderla.
7979+8080+\subsection{Lo que el estudiante no puede hacer}
8181+8282+En un Chromebook escolar, un estudiante no puede:
8383+8484+\begin{itemize}
8585+ \item Instalar un entorno de ejecución de lenguaje de programación (Python, Node.js, GCC)
8686+ \item Ejecutar un servidor web local o compilar código
8787+ \item Inspeccionar el código fuente del sistema operativo
8888+ \item Modificar la secuencia de arranque
8989+ \item Conectar periféricos de hardware para computación física
9090+ \item Usar la máquina sin conexión para trabajo serio
9191+ \item Mantener sus datos en el dispositivo sin sincronización en la nube
9292+ \item Elegir su propio software
9393+ \item Entender qué está haciendo la máquina con su atención
9494+\end{itemize}
9595+9696+ChromeOS incluye un contenedor Linux (Crostini) que teóricamente podría proporcionar estas capacidades, pero los administradores de TI escolares casi universalmente lo desactivan. La máquina viene con una terminal y luego la cierra con llave. Cada una de estas restricciones es una puerta cerrada. Cada puerta cerrada es un camino que el estudiante nunca descubrirá. El Chromebook no es una puerta de entrada---es una \emph{barrera}.
9797+9898+\subsection{La nube como arrendador}
9999+100100+Cuando el trabajo de un estudiante vive en Google Drive, son inquilinos, no propietarios. Google puede cambiar los términos de servicio. Google puede descontinuar productos. Google puede revocar el acceso. El estudiante se gradúa y pierde su cuenta escolar de Google---y con ella, cada documento, cada proyecto, cada artefacto creativo que produjo durante su educación.
101101+102102+Esto no es hipotético. Sucede cada año, en cada distrito escolar. Los estudiantes pierden acceso a años de trabajo porque la institución que compró su cuenta en la nube la desactiva. La arquitectura \emph{garantiza} este resultado: el estudiante nunca tuvo sus archivos. Tenía permiso para acceder a archivos en los servidores de Google, y ese permiso fue revocado.
103103+104104+Freire llamó a esto el ``modelo bancario'' de la educación~\citep{freire1970pedagogy}: conocimiento depositado en los estudiantes por autoridades. El Chromebook literaliza la metáfora. El trabajo del estudiante se deposita en un banco que no controlan, no pueden auditar y del que eventualmente serán excluidos.
105105+106106+\subsection{Obsolescencia programada: El problema del AUE}
107107+108108+Cada Chromebook viene con una fecha de Expiración de Actualización Automática (AUE), después de la cual Google no proporciona parches de seguridad, actualizaciones de funciones ni actualizaciones del navegador. Históricamente fijada en 6,5 años desde el \emph{primer lanzamiento de la plataforma}---no desde la fecha de compra---una escuela que compra un Chromebook tarde en el ciclo de una plataforma podría recibir solo 3--4 años de actualizaciones. Google extendió esto a 10 años para dispositivos lanzados en 2024, pero la base instalada de máquinas con vida más corta sigue siendo enorme.
109109+110110+El U.S. PIRG Education Fund estimó que las políticas de AUE forzarían la eliminación prematura de 21,5 millones de Chromebooks funcionalmente operativos para 2024, costando a las escuelas aproximadamente \$1.800 millones en reemplazos innecesarios~\citep{pirg2023chromebook}. Estas son máquinas con procesadores funcionando, pantallas funcionando, teclados funcionando---convertidas en obsoletas por una política de software, no por fallo de hardware.
111111+112112+El contraste con Linux es absoluto. Un ThinkPad de 2015 ejecutando Ubuntu LTS continúa recibiendo actualizaciones de seguridad indefinidamente. No hay fecha de expiración artificial vinculada al modelo de hardware. La máquina sigue siendo útil mientras el hardware funcione.
113113+114114+% ============================================================
115115+% 2. THE SURVEILLANCE MACHINE
116116+% ============================================================
117117+118118+\section{La máquina de vigilancia}
119119+\label{sec:surveillance}
120120+121121+Google proporciona Chromebooks a las escuelas por debajo del costo porque los estudiantes son un mercado cautivo para datos de comportamiento~\citep{zuboff2019surveillance, doctorow2020attack}. Un estudiante que crece en el ecosistema de Google---Gmail, Google Docs, Google Drive, Google Classroom, YouTube---es un cliente de por vida. El Chromebook no es una donación caritativa. Es una estrategia de adquisición de clientes desplegada contra niños.
122122+123123+\subsection{Lo que Google recopila}
124124+125125+Los datos recopilados de los Chromebooks de los estudiantes incluyen:
126126+127127+\begin{itemize}
128128+ \item Cada consulta de búsqueda y cada sitio web visitado
129129+ \item Cada documento abierto, editado y compartido
130130+ \item Cada video de YouTube visto y por cuánto tiempo
131131+ \item Patrones de temporización de pulsaciones de teclas y frecuencia de inicio de sesión
132132+ \item Datos de ubicación (en modelos celulares)
133133+ \item Grafos sociales (quién colabora con quién en Google Docs)
134134+ \item Diagnósticos del dispositivo y telemetría de uso de aplicaciones
135135+\end{itemize}
136136+137137+Google afirma que los datos recopilados bajo los ``servicios principales'' de Workspace for Education no se utilizan para publicidad. Pero los ``servicios adicionales''---YouTube, Búsqueda de Google, Google Maps cuando se ha iniciado sesión---operan bajo términos diferentes. Los estudiantes en Chromebooks escolares usan estos servicios adicionales constantemente, y los datos fluyen hacia la infraestructura publicitaria de Google.
138138+139139+\subsection{Acciones legales}
140140+141141+El registro legal es condenatorio. En 2019, Google pagó \$170 millones a la FTC y al Fiscal General de Nueva York por las violaciones de COPPA de YouTube---recopilar datos de niños sin consentimiento parental~\citep{google2019coppa}. En 2020, el Fiscal General de Nuevo México, Hector Balderas, demandó directamente a Google por recopilar datos personales de niños que usan Chromebooks en escuelas~\citep{newmexico2020google}. La EFF presentó una queja ante la FTC en 2015 documentando que Google estaba extrayendo datos de la actividad de navegación de los estudiantes a través de los Chromebooks~\citep{eff2015chromebook}. En 2024, una coalición de organizaciones de derechos digitales presentó quejas adicionales ante la FTC sobre la vigilancia continua de estudiantes~\citep{eff2024monitoring}. Las demandas colectivas que alegan recopilación de datos biométricos de estudiantes bajo el estatuto BIPA de Illinois están en curso.
142142+143143+Estos datos se recopilan de menores, en un entorno institucional donde la participación es obligatoria, en máquinas que el estudiante no eligió y no puede configurar. El estudiante no puede optar por no participar. El padre a menudo no puede optar por no participar. El distrito escolar firmó un contrato, y los niños están obligados por él.
144144+145145+\subsection{Software de monitoreo}
146146+147147+Más allá de la propia recopilación de datos de Google, los distritos escolares superponen software de vigilancia adicional---Gaggle, GoGuardian, Securly---en los Chromebooks. La EFF documentó que estas herramientas vigilan comunicaciones privadas y afectan desproporcionadamente a jóvenes desfavorecidos, de minorías y LGBTQ~\citep{eff2024monitoring}. De 152 servicios de tecnología educativa encuestados por la EFF, solo 118 tenían políticas de privacidad publicadas; muchos menos abordaban la retención de datos, el cifrado o la desidentificación.
148148+149149+Winner argumentó que los artefactos tienen política~\citep{winner1980artifacts}. La política del Chromebook es clara: es un instrumento de vigilancia desplegado en un contexto donde los vigilados no tienen opción, no tienen recurso y no entienden lo que se les está quitando.
150150+151151+Un sistema operativo libre y abierto no recopila telemetría. No llama a ninguna corporación. No construye ningún perfil de comportamiento. La atención del estudiante, su curiosidad, sus errores, sus exploraciones---todo esto permanece privado, porque la máquina no tiene incentivo económico para observarlos.
152152+153153+% ============================================================
154154+% 3. THE LLM INFLECTION
155155+% ============================================================
156156+157157+\section{Todos somos programadores ahora}
158158+159159+Los grandes modelos de lenguaje han cambiado la economía de la programación. Un estudiante que puede describir lo que quiere en lenguaje natural puede producir código funcional. La barrera para la creación computacional ha colapsado de ``años de formación técnica'' a ``la capacidad de articular una idea.'' La observación de Karpathy de que ``el nuevo lenguaje de programación más popular es el inglés'' ya no es una hipérbole---es una descripción de la realidad material.
160160+161161+Este es el cambio más importante en la informática desde la computadora personal. Y hace que el problema del Chromebook sea \emph{catastróficamente peor}.
162162+163163+\subsection{La nueva alfabetización}
164164+165165+Si todos pueden programar, entonces la programación es alfabetización. Y la alfabetización requiere herramientas que la persona alfabetizada pueda poseer. No se enseña a un niño a leer dándole un libro cerrado que solo puede abrirse en un edificio específico con una cuenta corporativa específica. Se le da el libro. Se lo lleva a casa. Lo lee en la cama. Escribe en los márgenes. Se lo presta a un amigo.
166166+167167+Un estudiante con un LLM y un sistema operativo abierto puede:
168168+169169+\begin{itemize}
170170+ \item Construir una herramienta para organizar sus tareas
171171+ \item Escribir un juego y compartirlo con compañeros de clase
172172+ \item Automatizar una tarea repetitiva que su profesor asigna
173173+ \item Crear un pequeño negocio vendiendo software a su comunidad
174174+ \item Contribuir a proyectos de código abierto que sirvan a la humanidad
175175+ \item Entender y modificar los sistemas que gobiernan su vida digital
176176+ \item Explorar la lógica, las matemáticas y el lenguaje a través de la manipulación directa
177177+ \item Construir instrumentos para la expresión artística
178178+\end{itemize}
179179+180180+Un estudiante con un LLM y un Chromebook puede usar Google Docs más rápido.
181181+182182+Ko (University of Washington) ha argumentado que si la IA puede escribir código, la educación en ciencias de la computación debe orientarse hacia el pensamiento sistémico, la depuración y la evaluación---todo lo cual requiere acceso a entornos de desarrollo reales, no navegadores aislados~\citep{denny2024computing}. Krishnamurthi (Brown University) ha sido crítico con los enfoques que reducen la programación a la generación de prompts. El consenso emergente en la investigación sobre educación en ciencias de la computación es que los LLMs hacen que el acceso completo a la pila sea \emph{más} importante, no menos~\citep{prather2024robots}: los estudiantes necesitan ejecutar, depurar, modificar y entender el código generado. Los Chromebooks dificultan las cuatro cosas.
183183+184184+\subsection{El Chromebook no puede ejecutar}
185185+186186+Aquí está el fallo concreto: el LLM produce un script de Python, y el Chromebook no puede ejecutarlo. El LLM genera un servidor web, y el Chromebook no puede alojarlo. El LLM escribe código C, y el Chromebook no tiene compilador. El LLM enseña al estudiante cómo funciona un sistema operativo, y el Chromebook no les permite inspeccionar uno.
187187+188188+En un Chromebook escolar típico (procesador MediaTek o Celeron, 4\,GB de RAM), incluso el contenedor Linux---cuando está habilitado---lucha por ejecutar cadenas de herramientas de desarrollo básicas. Ejecutar un LLM local es físicamente imposible: incluso un modelo cuantizado de 1B parámetros requiere más memoria de la que poseen la mayoría de los Chromebooks escolares.
189189+190190+La alternativa es trivial. Un ThinkPad excedente con 8\,GB de RAM ejecutando Linux puede ejecutar cualquier código generado por un LLM, ejecutar un modelo local de 3B parámetros vía Ollama a velocidades interactivas, alojar un servidor web, compilar programas y dar al estudiante acceso root a todo el sistema. El hardware existe. El software es gratuito. El Chromebook es el cuello de botella.
191191+192192+\subsection{La dimensión espiritual}
193193+194194+Esto no se trata solo de economía o preparación profesional. Hay una dimensión espiritual de la computación que la arquitectura del Chromebook aniquila.
195195+196196+Cuando un estudiante escribe un programa que hace algo que no esperaba---cuando la máquina los sorprende con comportamiento emergente de reglas que ellos definieron---experimentan algo profundo. Encuentran el límite entre la intención y la consecuencia. Aprenden que los sistemas tienen su propia lógica. Desarrollan una relación con la abstracción misma.
197197+198198+Papert entendió esto~\citep{papert1980mindstorms}: Logo no se trataba de enseñar programación. Se trataba de dar a los niños un medio para pensar sobre el pensamiento. La tortuga era un vehículo para la epistemología.
199199+200200+Los LLMs amplifican esto mil veces. Un estudiante ahora puede tener una \emph{conversación} con el medio computacional. Pueden preguntar ``¿qué pasaría si?'' y obtener una respuesta en segundos. Pueden iterar sobre ideas a la velocidad del pensamiento. Pueden explorar caminos que ningún currículo anticipó.
201201+202202+Pero solo si la máquina se lo permite. Un Chromebook no se lo permite. Un Chromebook dice: puedes consumir servicios. No puedes crear infraestructura. No puedes ejecutar tu propio código a tu manera en tu propia máquina.
203203+204204+% ============================================================
205205+% 4. WHAT STUDENTS DESERVE
206206+% ============================================================
207207+208208+\section{Lo que cada estudiante merece}
209209+210210+Cada estudiante merece una computadora que:
211211+212212+\begin{enumerate}
213213+ \item \textbf{Puedan entender.} El código fuente del sistema operativo debería estar disponible para inspección. No como un principio abstracto, sino como una realidad práctica: el estudiante debería poder leer el código que se ejecuta cuando presiona una tecla.
214214+215215+ \item \textbf{Puedan modificar.} Si el estudiante quiere cambiar cómo se comporta la máquina, debería poder hacerlo. No a través de una tienda de aplicaciones, no a través de un panel de configuración, sino cambiando el código.
216216+217217+ \item \textbf{Puedan poseer.} El trabajo del estudiante debería vivir en la máquina del estudiante. No en un servidor corporativo, no en una cuenta en la nube que será desactivada cuando se gradúen.
218218+219219+ \item \textbf{Puedan compartir.} El estudiante debería poder dar su software a un amigo. No a través de una plataforma, no a través de un mercado, sino copiando un archivo.
220220+221221+ \item \textbf{Puedan romper.} El estudiante debería poder romper la máquina y repararla. Así es como se aprende. Un sistema que no puede romperse no puede entenderse.
222222+223223+ \item \textbf{Puedan llevar consigo.} Cuando el estudiante deja la escuela, la computadora---y todo lo que contiene---se va con ellos. Su vida computacional no está alquilada. Es suya.
224224+225225+ \item \textbf{Respete su atención.} El sistema operativo no debería contener publicidad, rastreo de comportamiento ni optimización del engagement. La atención del estudiante pertenece al estudiante.
226226+227227+ \item \textbf{Los conecte con la comunidad.} El estudiante debería poder contribuir al paisaje computacional---escribir código que otros usen, participar en proyectos de código abierto, construir herramientas que sirvan a su comunidad y mantengan su estilo de vida y bienestar.
228228+\end{enumerate}
229229+230230+Cada uno de estos requisitos es violado por ChromeOS. Cada uno de ellos es satisfecho por un sistema operativo libre y abierto.
231231+232232+% ============================================================
233233+% 5. IT ALREADY WORKS
234234+% ============================================================
235235+236236+\section{Ya funciona: Precedentes internacionales}
237237+238238+La objeción de que la informática escolar de código abierto no ha sido probada es falsa. Ha sido probada, a escala, en tres continentes.
239239+240240+\subsection{Kerala, India: 16.000 escuelas}
241241+242242+El programa KITE de Kerala (Kerala Infrastructure and Technology for Education) migró completamente a software libre en 2007 en más de 16.000 escuelas públicas. KITE GNU/Linux 22.04, lanzado en agosto de 2024, funciona en más de 300.000 computadoras escolares~\citep{kite2024gnulinux}. La distribución incluye software educativo (Krita, GCompris, PictoBlox), herramientas básicas de enseñanza de IA/ML y un servidor de visualización Wayland. El ahorro estimado: 30.000 millones de INR (aproximadamente \$400 millones). Más de 150.000 maestros de primaria han sido capacitados. La Escuela Nacional de Derecho de India aclamó a KITE como el referente nacional para la transformación de código abierto en educación.
243243+244244+Esto no es un programa piloto. Es un despliegue estatal que atiende a millones de estudiantes, funcionando continuamente durante casi dos décadas.
245245+246246+\subsection{Schleswig-Holstein, Alemania: 30.000 PCs}
247247+248248+Para finales del verano de 2025, el estado alemán de Schleswig-Holstein completó la migración de casi 30.000 PCs gubernamentales de Microsoft a Linux, con otros 30.000 maestros de escuelas públicas esperados a continuación~\citep{schleswig2025linux}. Los reemplazos incluyen LibreOffice, Nextcloud, Open-Xchange y Mozilla Thunderbird. Ahorro estimado: 15 millones de EUR solo en 2026. Dinamarca anunció una transición similar entre junio y noviembre de 2025.
249249+250250+\subsection{Francia: Estrategia nacional de código abierto}
251251+252252+La Estrategia de Educación Digital 2023--2027 de Francia, liderada por Alexis Kauffmann en el Ministerio de Educación, apunta explícitamente a la soberanía digital y la reducción de la dependencia de Microsoft y Google~\citep{france2023digital}. La plataforma nacional \texttt{apps.education.fr} proporciona herramientas de código abierto a todos los docentes franceses. En 2025, Francia promulgó un decreto de interoperabilidad que requiere que las escuelas utilicen herramientas digitales que cumplan con estándares abiertos---creando una ventaja estructural para las soluciones de código abierto.
253253+254254+\subsection{Penn Manor, Pensilvania: 1.725 portátiles Linux}
255255+256256+En Estados Unidos, el Distrito Escolar de Penn Manor en Lancaster, PA, desplegó 1.725 portátiles Ubuntu a estudiantes de los grados 9--12~\citep{pennmanor2024linux}. El programa incluye una iniciativa de reparación dirigida por estudiantes donde los alumnos aprenden a reparar sus propias máquinas. Este no es un distrito especial con financiamiento especial. Es un distrito escolar público que tomó una decisión diferente.
257257+258258+\subsection{El movimiento ``Dinero público, código público''}
259259+260260+La campaña ``Public Money? Public Code!'' de la Free Software Foundation Europe---que argumenta que el software desarrollado con fondos públicos debería publicarse bajo licencias libres---ha reunido a más de 200 organizaciones de la sociedad civil y 31.000 firmantes individuales~\citep{fsfe2024publiccode}. La Declaración de Dubái de la UNESCO de 2024 sobre Recursos Educativos Abiertos compromete formalmente a los signatarios a promover recursos abiertos a través de la IA y las tecnologías emergentes~\citep{unesco2024oer}. El Pacto Digital Global se compromete a ``desarrollar, difundir y mantener software de código abierto, datos abiertos, modelos de IA abiertos y estándares abiertos que beneficien a la sociedad.''
261261+262262+Estos no son movimientos marginales. Son la dirección de la política internacional.
263263+264264+% ============================================================
265265+% 6. THE ECONOMICS
266266+% ============================================================
267267+268268+\section{La economía}
269269+270270+\subsection{La excusa del costo}
271271+272272+Los Chromebooks son baratos. Pero también lo son los portátiles excedentes con Linux. Un ThinkPad T480 o Dell Latitude 5400 retirado cuesta \$100--180 en volumen y es una máquina superior en todas las dimensiones excepto ``gestionado por Google.'' El argumento del costo a favor de los Chromebooks es un argumento a favor del ecosistema de Google, no del hardware.
273273+274274+\begin{table}[H]
275275+\small
276276+\centering
277277+\begin{tabular}{lrr}
278278+\toprule
279279+\textbf{Enfoque} & \textbf{Costo} & \textbf{El estudiante lo posee} \\
280280+\midrule
281281+Chromebook (nuevo) & \$250--350 & No \\
282282+Chrome Edu Upgrade & +\$38/dispositivo & No \\
283283+Google Workspace Plus & +\$5/estudiante/año & No \\
284284+iPad (edu) & \$299+ & No \\
285285+\midrule
286286+Portátil excedente + Linux & \$100--180 & \textbf{Sí} \\
287287+Portátil excedente + AC OS & \$100--180 & \textbf{Sí} \\
288288+\bottomrule
289289+\end{tabular}
290290+\caption{Comparación de costos y propiedad. Los costos del Chromebook excluyen software de monitoreo (GoGuardian: \$5--10/dispositivo/año) y reemplazos forzados por AUE.}
291291+\label{tab:cost}
292292+\end{table}
293293+294294+Al incluir el Chrome Education Upgrade de Google (\$38/dispositivo), Workspace for Education Plus (\$5/estudiante/año), software de monitoreo y el ciclo de reemplazo forzado por AUE, el costo total de propiedad de un Chromebook durante 5 años puede alcanzar \$450--550/dispositivo. Un ThinkPad excedente ejecutando Linux: \$100--180, con cero costos de licencia recurrentes, sin expiración artificial, y el estudiante se lo queda.
295295+296296+\subsection{La oferta}
297297+298298+Las máquinas existen. Se estima que 50--60 millones de PCs empresariales se retiran anualmente en Estados Unidos. Los ciclos de arrendamiento corporativo retiran millones de portátiles funcionales cada 3--5 años---máquinas con procesadores modernos, 8--16\,GB de RAM, WiFi y baterías de 6--10 horas. Organizaciones como PCs for People (100.000+ dispositivos/año), Human-I-T (50.000+/año), Kramden Institute, Free Geek y el programa federal Computers for Learning ya reacondicionan y distribuyen estas máquinas.
299299+300300+Un aula de 30 instrumentos de computación creativa puede aprovisionarse por \$3.000--5.400 en hardware. Sin suscripción recurrente. Sin contrato de soporte de TI. Sin cuentas gestionadas.
301301+302302+\subsection{El argumento ambiental}
303303+304304+Un portátil típico produce 300--400 kg de CO$_2$e en fabricación---70--80\% de su huella de carbono total durante su vida útil. El reacondicionamiento añade aproximadamente 5--15 kg de CO$_2$e. El análisis auditado independientemente de Circular Computing encontró 316 kg de CO$_2$e ahorrados por portátil remanufacturado~\citep{circularcomputing2023carbon}. El Monitor Global de Residuos Electrónicos 2024 de la ONU informa que EE.\,UU. genera aproximadamente 7,2 Mt de residuos electrónicos anuales, con solo el 25\% reciclado adecuadamente~\citep{un2024ewaste}.
305305+306306+La política de AUE de Google obliga a las escuelas a desechar millones de Chromebooks funcionales. La legislación de derecho a reparar está comenzando a abordar esto: la ley de Oregón (vigente desde enero de 2025) requiere que los fabricantes proporcionen piezas e información de reparación~\citep{oregon2024repair}; el HB1701 de New Hampshire cubre explícitamente los portátiles proporcionados por las escuelas~\citep{newhampshire2024repair}. Pero la legislación no puede arreglar una política de software que declara obsoleto el hardware funcional.
307307+308308+Linux no tiene AUE. Un portátil que ejecuta un sistema operativo libre sigue siendo útil mientras el hardware funcione.
309309+310310+% ============================================================
311311+% 7. THE OPEN STACK
312312+% ============================================================
313313+314314+\section{La pila abierta}
315315+316316+\subsection{Cada Chromebook ya es una máquina Linux}
317317+318318+Aquí está lo absurdo: cada Chromebook ya ejecuta el kernel de Linux. ChromeOS es Linux con un espacio de usuario bloqueado que fuerza toda la interacción a través del navegador de Google. El hardware es perfectamente capaz de ejecutar un sistema operativo libre. Google tomó un kernel libre, lo envolvió en restricciones propietarias y lo vendió a las escuelas como una medida de ahorro.
319319+320320+La liberación de estas máquinas no requiere nuevo hardware. Requiere flashear nuevo software. Muchos Chromebooks pueden desbloquearse y reflashearse con una distribución Linux estándar o con \acos{}. La máquina \emph{ya quiere ser libre}. Google es el candado.
321321+322322+\subsection{La excusa de TI}
323323+324324+Los departamentos de TI escolares eligen Chromebooks porque son ``fáciles de gestionar.'' Esto es cierto. Es fácil gestionar una máquina que no hace nada. Es fácil administrar una flota cuando cada dispositivo es un cliente ligero para los servicios de una sola corporación. La facilidad de gestión es una consecuencia directa de la impotencia de la máquina.
325325+326326+La pregunta es: ¿fácil para quién? Fácil para el departamento de TI, ciertamente. Pero catastrófico para el estudiante. La conveniencia del departamento de TI se compra con la autonomía del estudiante. Es un mal trato.
327327+328328+Las herramientas de gestión de código abierto existen. NixOS proporciona configuraciones de sistema reproducibles. Ansible automatiza el despliegue de flotas. El arranque PXE permite el aprovisionamiento sin intervención. \acos{}~\citep{scudder2026acos} demuestra que un sistema operativo completo puede desplegarse flasheando una unidad USB en menos de un minuto, con actualizaciones OTA que no requieren infraestructura de TI. Penn Manor opera 1.725 portátiles Linux con un equipo de TI más pequeño que los distritos comparables con Chromebooks~\citep{pennmanor2024linux}. El ``problema de gestión'' está resuelto. Lo que queda es inercia institucional y una relación contractual con Google que sirve a la institución, no al estudiante.
329329+330330+\subsection{La infraestructura de LLM}
331331+332332+Un sistema abierto habilita una relación fundamentalmente diferente con la IA. Un solo servidor excedente (32--64\,GB de RAM, o una GPU NVIDIA T4 usada a \$100--200) puede ejecutar Ollama y servir a un aula entera de estudiantes vía Open WebUI---un frontend de LLM gratuito y de código abierto. Los estudiantes se conectan desde sus portátiles vía un navegador apuntando al servidor local. Modelos como Llama 3.2 3B (cabe en 4\,GB), DeepSeek Coder 6.7B o Qwen 2.5 Coder 7B proporcionan una fuerte capacidad de generación de código.
333333+334334+Esta es infraestructura de IA local que la escuela posee, que no recopila telemetría, que no envía datos a ninguna corporación, y que los estudiantes pueden inspeccionar, modificar y aprender. La alternativa---Google Gemini integrado en Workspace for Education---añade otra capa de dependencia corporativa, otro pipeline de datos, otra cuota de suscripción.
335335+336336+% ============================================================
337337+% 8. THE LLM GATEWAY
338338+% ============================================================
339339+340340+\section{El estudiante como autor}
341341+342342+En un sistema abierto con acceso a LLM, el estudiante puede:
343343+344344+\begin{itemize}
345345+ \item Pedir al LLM que explique el código fuente del sistema operativo
346346+ \item Generar programas que se ejecuten localmente, con acceso completo al hardware
347347+ \item Construir servidores web, bases de datos, APIs---infraestructura real
348348+ \item Crear herramientas que resuelvan problemas reales en su comunidad
349349+ \item Aprender cualquier lenguaje de programación construyendo con él
350350+ \item Entender el LLM mismo examinando sus entradas y salidas
351351+ \item Crear una pieza en \ac{}~\citep{scudder2026ac} que cualquier persona en el mundo pueda ejecutar
352352+\end{itemize}
353353+354354+El LLM se convierte en un tutor con paciencia infinita, disponible las 24 horas del día, que encuentra al estudiante exactamente donde está~\citep{khan2024bravenew}. Pero este tutor solo puede ser efectivo si el estudiante tiene una máquina que pueda \emph{ejecutar} lo que el tutor produce.
355355+356356+El modelo Chromebook dice: eres un usuario. El modelo abierto dice: eres un autor. En la era de los LLMs, la diferencia entre estos dos marcos es la diferencia entre la alfabetización digital y la servidumbre digital.
357357+358358+% ============================================================
359359+% 9. A PATH FORWARD
360360+% ============================================================
361361+362362+\section{Un camino hacia adelante}
363363+364364+\subsection{Fase 1: Concienciación}
365365+366366+Los padres, los docentes y los miembros de las juntas escolares deben entender lo que un Chromebook realmente es: un dispositivo de vigilancia que enseña indefensión aprendida. El primer paso es la educación---no de los niños, sino de los adultos que compran las máquinas. La documentación ``Spying on Students'' de la EFF, el informe ``Chromebook Churn'' del U.S. PIRG y la demanda del Fiscal General de Nuevo México proporcionan evidencia concreta que puede presentarse en las reuniones de las juntas escolares.
367367+368368+\subsection{Fase 2: Programas piloto}
369369+370370+Los distritos escolares deberían pilotar alternativas de código abierto, siguiendo el modelo de Penn Manor:
371371+372372+\begin{itemize}
373373+ \item 30 portátiles excedentes ejecutando Linux o \acos{}, aprovisionados por \$3.000--5.400
374374+ \item Un servidor LLM local (una estación de trabajo excedente, \$200--500) ejecutando Ollama + Open WebUI
375375+ \item Un currículo asistido por LLM donde los estudiantes construyen software real
376376+ \item Propiedad estudiantil: la máquina se va a casa con el estudiante
377377+ \item Un programa de reparación dirigido por estudiantes (los estudiantes de Penn Manor reparan sus propias máquinas)
378378+ \item Sin dependencia de la nube: el trabajo se almacena localmente y el estudiante hace copias de seguridad
379379+ \item Evaluación abierta: el portafolio del estudiante es código que escribió, herramientas que construyó, contribuciones que hizo
380380+\end{itemize}
381381+382382+\subsection{Fase 3: Política}
383383+384384+Los estados y distritos deberían adoptar políticas que requieran que:
385385+386386+\begin{enumerate}
387387+ \item Todo el software desplegado en dispositivos estudiantiles sea de código abierto o con código fuente disponible
388388+ \item Los estudiantes tengan acceso root a sus propias máquinas
389389+ \item No se recopile telemetría de comportamiento de los dispositivos estudiantiles
390390+ \item Los estudiantes retengan la propiedad de todo el trabajo producido en dispositivos escolares
391391+ \item Los estudiantes que se gradúan conserven sus dispositivos
392392+ \item La adquisición de dispositivos priorice el hardware reacondicionado sobre la nueva fabricación
393393+\end{enumerate}
394394+395395+Más de 40 estados han aprobado leyes de privacidad de datos estudiantiles. SOPIPA de California prohíbe el uso de datos estudiantiles para publicidad dirigida. Las nuevas reglas de COPPA (vigentes desde junio de 2025) fortalecen las protecciones de datos de los niños. Estas tendencias legislativas respaldan el caso de una infraestructura informática escolar abierta y sin vigilancia.
396396+397397+\subsection{Fase 4: Liberación}
398398+399399+El objetivo final no es un cambio de política. Es un cambio cultural. El objetivo final es una generación de estudiantes que entiendan que una computadora no es un producto que consumen, sino un instrumento que tocan---un medio para el pensamiento, la creación y la contribución. Estudiantes que puedan leer código fuente como leen libros. Estudiantes que puedan modificar sus herramientas como un carpintero modifica un banco de trabajo. Estudiantes que vean la computación no como un servicio corporativo, sino como un bien común al que tanto contribuyen como pertenecen.
400400+401401+Nelson escribió en 1974~\citep{nelson1974computerlib}: ``Puedes y debes entender las computadoras AHORA.'' Cincuenta años después, hemos fallado este imperativo precisamente como Nelson temía---entregando las máquinas a las corporaciones y llamándolo progreso.
402402+403403+El momento LLM hace visible este fracaso. Cada estudiante ahora tiene la \emph{capacidad} de programar. Lo que les falta es una \emph{máquina que se los permita}. Este es un problema resoluble. La tecnología es gratuita. El hardware es excedente. Lo único que se interpone entre cada estudiante y su propio camino computacional es un sistema operativo corporativo que nunca fue diseñado para servirles.
404404+405405+% ============================================================
406406+% 10. CONCLUSION
407407+% ============================================================
408408+409409+\section{Conclusión}
410410+411411+Cada Chromebook en cada escuela estadounidense es una máquina Linux encadenada. El hardware puede ejecutar un sistema operativo libre. El estudiante puede aprender a programar con un LLM. El mercado de portátiles excedentes proporciona máquinas por \$100--180. Toda la pila de código abierto está disponible a costo cero. Kerala lo ha hecho para 300.000 computadoras. Schleswig-Holstein lo ha hecho para 30.000. Penn Manor lo ha hecho para 1.725. Funciona.
412412+413413+Lo que nos falta no es tecnología. Nos falta la voluntad política para priorizar la autonomía estudiantil sobre la conveniencia institucional y el beneficio corporativo.
414414+415415+Illich escribió que las herramientas deberían expandir la autonomía personal en lugar de requerir experiencia especializada~\citep{illich1973tools}. Papert escribió que las computadoras deberían ser instrumentos para pensar sobre el pensamiento~\citep{papert1980mindstorms}. Stallman escribió que los usuarios merecen controlar el software que ejecutan~\citep{stallman2002free}. Postman advirtió que la tecnología en las escuelas sin propósito sirve a la tecnología, no al niño~\citep{postman1995end}. Estas no son posiciones marginales. Son los principios fundacionales de la computación personal, y los hemos abandonado en el único lugar donde más importan: la educación de los niños.
416416+417417+Saquen el código cerrado de las escuelas. Den a cada estudiante un sistema operativo libre y abierto. Dejen que el Chromebook sea lo que siempre fue capaz de ser: no una barrera, sino una \emph{puerta de entrada}---a la lógica, la creatividad, la comunidad, la espiritualidad y el propio camino de cada estudiante a través del paisaje computacional.
418418+419419+En la era de los LLMs, esto no es idealismo. Es la educación mínima viable.
420420+421421+\vspace{0.5em}
422422+\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
423423+424424+\end{multicols}
425425+426426+% ============================================================
427427+% REFERENCES
428428+% ============================================================
429429+430430+\bibliographystyle{plainnat}
431431+\bibliography{references}
432432+433433+\end{document}
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+\setmainfont{Latin Modern Roman}
1111+\setsansfont{Latin Modern Sans}
1212+\setmonofont{Latin Modern Mono}[Scale=0.85]
1313+\newfontfamily\acbold{ywft-processing-bold}[
1414+ Path=../../system/public/type/webfonts/,
1515+ Extension=.ttf
1616+]
1717+\newfontfamily\aclight{ywft-processing-light}[
1818+ Path=../../system/public/type/webfonts/,
1919+ Extension=.ttf
2020+]
2121+2222+% === PACKAGES ===
2323+\usepackage{xcolor}
2424+\usepackage{titlesec}
2525+\usepackage{enumitem}
2626+\usepackage{booktabs}
2727+\usepackage{tabularx}
2828+\usepackage{fancyhdr}
2929+\usepackage{hyperref}
3030+\usepackage{graphicx}
3131+\usepackage{ragged2e}
3232+\usepackage{microtype}
3333+\usepackage{natbib}
3434+\usepackage[colorspec=0.92]{draftwatermark}
3535+3636+% === COLORS ===
3737+\definecolor{acpink}{RGB}{180,72,135}
3838+\definecolor{acpurple}{RGB}{120,80,180}
3939+\definecolor{acdark}{RGB}{64,56,74}
4040+\definecolor{acgray}{RGB}{119,119,119}
4141+\definecolor{draftcolor}{RGB}{180,72,135}
4242+4343+% === DRAFT WATERMARK ===
4444+\DraftwatermarkOptions{
4545+ text=WORKING DRAFT,
4646+ fontsize=3cm,
4747+ color=draftcolor!18,
4848+ angle=45,
4949+ pos={0.5\paperwidth, 0.5\paperheight}
5050+}
5151+5252+% === HYPERREF ===
5353+\hypersetup{
5454+ colorlinks=true,
5555+ linkcolor=acpurple,
5656+ urlcolor=acpurple,
5757+ citecolor=acpurple,
5858+ pdfauthor={@jeffrey},
5959+ pdftitle={At l\ae se partituret},
6060+}
6161+6262+% === SECTION FORMATTING ===
6363+\titleformat{\section}
6464+ {\normalfont\bfseries\normalsize\uppercase}
6565+ {\thesection.}
6666+ {0.5em}
6767+ {}
6868+\titlespacing{\section}{0pt}{1.2em}{0.3em}
6969+7070+\titleformat{\subsection}
7171+ {\normalfont\bfseries\small}
7272+ {\thesubsection}
7373+ {0.5em}
7474+ {}
7575+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
7676+7777+% === HEADER/FOOTER ===
7878+\pagestyle{fancy}
7979+\fancyhf{}
8080+\renewcommand{\headrulewidth}{0pt}
8181+\fancyhead[C]{\footnotesize\color{draftcolor}\textit{Arbejdsudkast --- ikke til citation}}
8282+\fancyfoot[C]{\footnotesize\thepage}
8383+8484+% === LIST SETTINGS ===
8585+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
8686+\setlist[enumerate]{nosep, leftmargin=1.2em}
8787+8888+% === COLUMN SEPARATION ===
8989+\setlength{\columnsep}{1.8em}
9090+9191+% === PARAGRAPH SETTINGS ===
9292+\setlength{\parindent}{1em}
9393+\setlength{\parskip}{0.3em}
9494+9595+% Hyphenation for narrow two-column layout
9696+\tolerance=800
9797+\emergencystretch=1em
9898+\hyphenpenalty=50
9999+100100+\begin{document}
101101+102102+% === TITLE ===
103103+\twocolumn[
104104+\begin{center}
105105+{\acbold\LARGE At l\ae se partituret: En kritisk analyse af\\SCORE.md som styring, gr\ae nseflade og kreativ form\par}
106106+\vspace{0.4em}
107107+{\large @jeffrey}\\
108108+{\small\color{acgray} ORCID: 0009-0007-4460-4913}\\
109109+{\small\color{acgray} \url{https://aesthetic.computer}}
110110+\vspace{0.3em}
111111+112112+\rule{0.6\textwidth}{0.5pt}
113113+\vspace{0.3em}
114114+115115+\begin{minipage}{0.85\textwidth}
116116+\small
117117+\textbf{Abstrakt.}
118118+Aesthetic Computer-projektet erstattede sin README med et dokument kaldet SCORE.md.
119119+Denne artikel unders\o ger, hvad den omd\o bning gjorde --- og hvad den efterlod ugjort.
120120+Med udgangspunkt i femten artikler skrevet fra projektets forskningsplatte l\ae ser vi
121121+partituret op mod dets egne ambitioner: som styringsdokument, som teknisk reference,
122122+som kreativ form. Vi finder, at partituret lykkes som organiserende metafor, men
123123+k\ae mper som dokument --- fanget mellem kravene fra AI-agenter, nye bidragydere,
124124+projektets egen historie og forfatterens kreative praksis. Vi identificerer seks
125125+sp\ae ndinger i det nuv\ae rende partitur og foresl\aa r en revisionsramme, der tager
126126+den musikalske metafor alvorligt: et partitur b\o r fort\ae lle dig, hvordan du skal
127127+udf\o re, ikke blot hvad instrumenterne er.
128128+\end{minipage}
129129+\vspace{1em}
130130+\end{center}
131131+]
132132+133133+\section{Hvad er et partitur?}
134134+135135+I musik er et partitur et s\ae t instruktioner til at producere en tidslig begivenhed. Det er ikke selve begivenheden --- det er dokumentet, der g\o r begivenheden reproducerbar. Et partitur b\ae rer i sig en implicit teori om, hvad der er vigtigt: hvilke parametre der skal specificeres, og hvilke der kan overlades til ud\o verens sk\o n.
136136+137137+Da Aesthetic Computer-projektet omd\o bte sin README.md til SCORE.md i begyndelsen af marts 2026, importerede det hele denne ramme. Bev\ae gelsen var bevidst. Projektet forstod allerede sine programmer som ``stykker'' snarere end applikationer~\citep{scudder2026pieces}, sin gr\ae nseflade som et instrument~\citep{scudder2026notepat}, og sin grafiske notation (Whistlegraph) som et viralt partitur~\citep{scudder2026whistlegraph}. At omd\o be styringsdokumentet var en m\aa de at sige: dette er ogs\aa\ noget, der skal udf\o res fra.
138138+139139+Men et partitur foruds\ae tter ud\o vere. Og sp\o rgsm\aa let, denne artikel stiller, er: hvem udf\o rer fra SCORE.md, og hj\ae lper dokumentet dem faktisk?
140140+141141+\section{Platten og partituret}
142142+143143+Aesthetic Computers forskningsplatte rummer i \o jeblikket sytten artikler, organiseret i en papirm\o lle med automatiserede builds, overs\ae ttelser til fire sprog og et kortformat til fysisk distribution~\citep{scudder2026cards}. At l\ae se p\aa\ tv\ae rs af disse artikler afsl\o rer et projekt med betydelig ambition og intern sammenh\ae ng --- men ogs\aa\ et projekt, hvis selvbeskrivelse (partituret) ikke har fulgt med dets selvforst\aa else (artiklerne).
144144+145145+Artiklerne fort\ae ller en historie, som partituret ikke g\o r. Overvej:
146146+147147+\begin{itemize}
148148+\item Artiklen ``Pieces Not Programs''~\citep{scudder2026pieces} argumenterer for, at ordet ``stykke'' importerer en musikalsk ramme, hvor v\ae rker er forfattede, opf\o rbare og iterbare. Partituret n\ae vner stykker, men forklarer aldrig denne rammes\ae tning.
149149+\item Notepat-artiklen~\citep{scudder2026notepat} dokumenterer fem feedback-l\o kker, hvorigennem et enkelt stykke trak en hel platform ind i eksistens. Partituret lister notepat som \' et stykke blandt 359.
150150+\item B\ae redygtighedsartiklen~\citep{scudder2026sustainability} identificerer en median p\aa\ 8 \aa rs kl\o ft mellem v\ae rkt\o jsskabelse og b\ae redygtig finansiering, med casestudier der ender i handicap og d\o d. Partituret har sponsorbadges.
151151+\item Native OS-artiklen~\citep{scudder2026os} argumenterer for, at overskuds-x86\_64-b\ae rbare til \$50 stykket er det materielle grundlag for et planet\ae rt kreativt instrument. Partituret lister build-kommandoer.
152152+\item KidLisp Cards-artiklen~\citep{scudder2026cards} demonstrerer, at programkorthed producerer et nyt publiceringsformat --- kortet som eksekverbart partitur. Partituret n\ae vner ikke kort.
153153+\end{itemize}
154154+155155+I hvert tilf\ae lde formulerer artiklen en tese, der giver mening til det, partituret blot katalogiserer. Partituret har fakta, men ikke argumentet.
156156+157157+\section{Seks sp\ae ndinger}
158158+159159+At l\ae se partituret op mod artiklerne afsl\o rer seks sp\ae ndinger, som en revision b\o r adressere.
160160+161161+\subsection{Publikumsforvirring}
162162+163163+Partituret \aa bner med en besked til AI-agenter (``If you find something interesting\ldots leave a breadcrumb'') og skifter derefter straks til menneskelig onboarding (``press the top left of the screen''). Afsnittet ``Front Door'' henvender sig til slutbrugere. Afsnittet ``Back Door'' henvender sig til udviklere. Afsnittet ``Ant Guidance'' henvender sig til automatiserede agenter. Afsnittet ``Embodiments'' fors\o ger at forene alle tre.
164164+165165+Dette er ikke forkert --- et partitur kan henvende sig til flere ud\o vere. Men et musikalsk partitur g\o r ud\o verens stemme l\ae selig med et blik. SCORE.md kr\ae ver, at l\ae seren selv finder ud af, hvilke dele der er til dem. Et dirigentpartitur og en violinstemme er forskellige dokumenter af god grund.
166166+167167+\subsection{Katalog vs. argument}
168168+169169+Partituret er organiseret som et katalog: arkitektur, kommandoer, endpoints, backlogs, markedsforesp\o rgsler. Dette er nyttigt referencemateriale, men det kommunikerer intet om, \emph{hvorfor} projektet eksisterer, eller hvilke principper der styrer dets udvikling.
170170+171171+Artiklerne formulerer tilsammen mindst fem kerneargumenter:
172172+\begin{enumerate}
173173+\item Kreativ software b\o r designes som et instrument, ikke et v\ae rkt\o j~\citep{scudder2026goodiepal}.
174174+\item ``Stykket'' er en enhed for kreativ kognition, ikke et program~\citep{scudder2026pieces}.
175175+\item Begr\ae nsning (i sprogdesign, i formfaktor) er generativ, ikke begr\ae nsende~\citep{scudder2026kidlisp, scudder2026cards}.
176176+\item Overskudshardware + tilpasset OS = planet\ae r adgang~\citep{scudder2026os, scudder2026plork}.
177177+\item Kreative v\ae rkt\o jer kr\ae ver \o konomiske modeller, der ikke sl\aa r deres skabere ihjel~\citep{scudder2026sustainability}.
178178+\end{enumerate}
179179+180180+Ingen af disse argumenter optr\ae der i partituret. En f\o rstegangsl\ae ser af SCORE.md ville vide, \emph{hvad} Aesthetic Computer er (en runtime med stykker, en prompt, nogle servere), men ikke \emph{hvorfor} det eksisterer, eller hvad det tror p\aa .
181181+182182+\subsection{Backlog-problemet}
183183+184184+Partituret indeholder et ``AC Native Backlog''-afsnit med syv punkter, der blander f\ae rdige opgaver (``Claude native binary'') med ambiti\o se funktioner (``A/B kernel slots with auto-rollback''). Dette er et projektstyringsartefakt, ikke et partitur. Det kommunikerer taktisk tilstand, ikke strategisk retning.
185185+186186+Myrefilosofien (i \texttt{ants/mindset-and-rules.md}) advarer eksplicit mod spekulativt arbejde: ``IDLE is valid---wandering is the job, not failure.'' Alligevel er backloggen i partituret netop spekulativt arbejde, pr\ae senteret som om det var projektets plan. Underpartiturer (fedac/native/SCORE.md, papers/SCORE.md) h\aa ndterer dette bedre ved at adskille vejledning fra opgavelister.
187187+188188+\subsection{Keeps-markedsblokken}
189189+190190+Partituret dedikerer 90 linjer til Tezos/Objkt GraphQL-foresp\o rgsler til at tjekke Keeps NFT-markedsstatistikker. Dette er operationelt v\ae rkt\o j for \' en bidragyder (forfatteren). Det er v\ae rdifuldt referencemateriale, men det dominerer partiturets sidste halvdel og sender et utilsigtet signal: at NFT-markedsoverv\aa gning er en kernebekymring for projektet, p\aa\ linje med arkitektur og udviklingsworkflow.
191191+192192+Artiklen ``Dead Ends''~\citep{scudder2026deadends} kategoriserer eksplicit Tezos/Keeps som et monetiseringseksperiment med usikker fremtid. Partituret pr\ae senterer det som etableret infrastruktur.
193193+194194+\subsection{Manglende stemmer}
195195+196196+Artiklen ``Network Audit''~\citep{scudder2026audit} afsl\o rer, at AC har 2.811 registrerede handles, men kun 2,1\% skriver KidLisp, og 0,7\% publicerer stykker. Artiklen ``Diversity''~\citep{scudder2026diversity} anerkender, at 80\% af citerede forfattere er vestlige m\ae nd. Artiklen ``Sustainability''~\citep{scudder2026sustainability} dokumenterer den menneskelige omkostning ved ust\o ttet v\ae rkt\o jsskabelse.
197197+198198+Partituret engagerer sig ikke med noget af dette. Det pr\ae senterer adoptionstal (``2812 registered handles, 265 user-published pieces'') som pr\ae station snarere end som data, der kr\ae ver fortolkning. Artiklerne er mere \ae rlige end partituret.
199199+200200+\subsection{Underpartiturer vs. hovedpartitur}
201201+202202+Projektet har nu seks SCORE.md-filer: rod, papers, fedac, fedac/native, opinion og vault. Underpartiturer er generelt bedre dokumenter end hovedpartituret. Papers-partituret indleder med en ``Mill Mission'', der forklarer, \emph{hvorfor} det eksisterer. Native-partituret definerer ``shipped'' med fem verificerbare kriterier. Vault-partituret kortl\ae gger sikkerhedsstillingen.
203203+204204+Hovedpartituret fors\o ger derimod at v\ae re alt: README, arkitekturdokument, udviklerguide, operationel runbook og NFT-dashboard. Underpartiturer lykkedes ved at v\ae re specifikke. Hovedpartituret k\ae mper ved at v\ae re alt-omfattende.
205205+206206+\section{Partiturmetaforen, taget alvorligt}
207207+208208+Hvis SCORE.md er et partitur, hvilken slags partitur b\o r det da v\ae re? Den musikalske analogi antyder flere egenskaber:
209209+210210+\textbf{Et partitur fort\ae ller dig, hvordan du begynder.} Det nuv\ae rende partiturs ``Front Door'' g\o r dette tilstr\ae kkeligt for slutbrugere, men ikke for bidragydere eller agenter. En ud\o ver, der tager et partitur op, beh\o ver at vide: hvilket instrument spiller jeg? Hvor kommer jeg ind? Hvad er tempoet?
211211+212212+\textbf{Et partitur har stemmer.} Forskellige ud\o vere l\ae ser forskellige stemmer. Det nuv\ae rende partitur blander alle stemmer i \' et dokument. Underpartiturer er i realiteten individuelle stemmer, der er blevet udtrukket. Hovedpartituret b\o r v\ae re dirigentpartituret: et overblik der peger p\aa\ stemmer, ikke en sammenf\o jning af alle stemmer.
213213+214214+\textbf{Et partitur foruds\ae tter en opf\o relsespraxis.} Der er konventioner om, hvordan man l\ae ser og udf\o rer et partitur, som ikke er skrevet i selve partituret. Myrefilosofi-dokumentet tjener denne funktion for AI-agenter. Intet tilsvarende eksisterer for menneskelige bidragydere.
215215+216216+\textbf{Et partitur kan revideres.} Partiturer har udgaver. Det nuv\ae rende SCORE.md har ingen versionshistorik eller \ae ndringslog i selve dokumentet. Det l\ae ses, som om det altid har v\ae ret s\aa dan, n\aa r det faktisk var en README indtil for to uger siden.
217217+218218+\textbf{Et partitur er ikke opf\o relsen.} Partituret b\o r ikke fors\o ge at indeholde projektet. Det b\o r v\ae re det minimale dokument, hvorfra projektet kan udf\o res. Alt andet --- backlogs, markedsforesp\o rgsler, operationelt v\ae rkt\o j --- h\o rer hjemme i stemmer eller appendikser.
219219+220220+\section{Hvad artiklerne ved, som partituret ikke g\o r}
221221+222222+Det mest sl\aa ende fund ved at l\ae se alle sytten artikler op mod partituret er, hvor meget rigere projektets selvforst\aa else er i artiklerne end i partituret. Artiklerne indeholder:
223223+224224+\begin{itemize}
225225+\item En teori om kreativ kognition (stykker som perceptions-handlingscyklusser)
226226+\item En politisk \o konomi for v\ae rkt\o jsskabelse (hvem betaler, hvem br\ae nder ud, hvem d\o r)
227227+\item En designfilosofi (instrument-f\o rst, begr\ae nsning-som-generativ, flad-over-dyb)
228228+\item Et materielt argument om hardware (overskudsb\ae rbare som planet\ae rt instrument)
229229+\item En \ae rlig revision af fejl (16 blindgyder, 50\% bidragsrate)
230230+\item En forpligtelse til citationsdiversitet med specifikke m\aa l
231231+\item En publiceringsinfrastruktur (m\o llen) med sin egen missionsbeskrivelse
232232+\end{itemize}
233233+234234+Partituret indeholder intet af dette. Det er et teknisk dokument, der tilf\ae ldigvis hedder et partitur. Revisionen b\o r g\o re det til et faktisk partitur: et dokument der b\ae rer projektets argumenter, ikke blot dets arkitektur.
235235+236236+\section{Mod et revideret partitur}
237237+238238+Et revideret SCORE.md b\o r:
239239+240240+\begin{enumerate}
241241+\item \textbf{Indlede med hvorfor.} Angiv hvad projektet tror p\aa , og hvorfor det eksisterer, med udgangspunkt i argumenterne formuleret p\aa\ tv\ae rs af artiklerne. Mill mission i papers/SCORE.md er en model for dette.
242242+\item \textbf{Adskille stemmer fra dirigentpartituret.} Flyt operationelle detaljer (Keeps-foresp\o rgsler, backlog-punkter, kommandoreferencer) til underpartiturer eller appendikser. Hovedpartituret b\o r kunne l\ae ses p\aa\ fem minutter.
243243+\item \textbf{Navngive sine publikummer.} Henvend dig eksplicit til de tre ud\o vertyper (slutbrugere, menneskelige bidragydere, AI-agenter) med klare indgangspunkter for hver.
244244+\item \textbf{Inkludere de \ae rlige tal.} Pr\ae sent\' er adoptionsdata med fortolkning, ikke blot som badges. 2,1\% KidLisp-forfatterskab er et faktum, der betyder noget --- partituret b\o r sige hvad.
245245+\item \textbf{Referere til artiklerne.} Platten eksisterer. Partituret b\o r pege p\aa\ den som projektets udvidede selvforst\aa else, ikke ignorere den.
246246+\item \textbf{Anerkende sin egen historie.} Bem\ae rk at dette dokument var en README indtil marts 2026, og at omd\o bningen i sig selv var en kreativ handling med konsekvenser.
247247+\item \textbf{V\ae re kortere.} Det nuv\ae rende partitur er 361 linjer. Et partitur, der tager sig selv alvorligt, b\o r v\ae re t\ae ttere p\aa\ l\ae ngden af et stykke, der kan v\ae re p\aa\ et kort.
248248+\end{enumerate}
249249+250250+\section{Konklusion}
251251+252252+SCORE.md er et godt navn for det, Aesthetic Computer-projektet har brug for: et dokument der g\o r projektet opf\o rbart. Men det nuv\ae rende partitur er et katalog, ikke en komposition. Det lister, hvad projektet indeholder, uden at argumentere for, hvad det betyder. Artiklerne p\aa\ forskningsplatten --- skrevet i de samme uger som partituret --- indeholder argumenterne, de \ae rlige vurderinger og de kreative rammer, som partituret mangler.
253253+254254+Den mest produktive revision ville ikke tilf\o je til partituret, men tr\ae kke fra det, flytte operationelle detaljer til underpartiturer og erstatte dem med projektets faktiske overbevisninger. Underpartiturer (papers, native, vault) demonstrerer allerede denne tilgang. Hovedpartituret b\o r l\ae re af sine egne stemmer.
255255+256256+Et partitur er ikke en beskrivelse af et orkester. Det er den minimale notation, der kr\ae ves for at producere musik. SCORE.md b\o r str\ae be efter den samme \o konomi.
257257+258258+\bibliographystyle{plainnat}
259259+\bibliography{references}
260260+261261+\end{document}
+261
papers/arxiv-score-analysis/score-analysis-es.tex
···11+% !TEX program = xelatex
22+\documentclass[10pt,letterpaper,twocolumn]{article}
33+44+% === GEOMETRY ===
55+\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry}
66+77+% === FONTS ===
88+\usepackage{fontspec}
99+\usepackage{unicode-math}
1010+\setmainfont{Latin Modern Roman}
1111+\setsansfont{Latin Modern Sans}
1212+\setmonofont{Latin Modern Mono}[Scale=0.85]
1313+\newfontfamily\acbold{ywft-processing-bold}[
1414+ Path=../../system/public/type/webfonts/,
1515+ Extension=.ttf
1616+]
1717+\newfontfamily\aclight{ywft-processing-light}[
1818+ Path=../../system/public/type/webfonts/,
1919+ Extension=.ttf
2020+]
2121+2222+% === PACKAGES ===
2323+\usepackage{xcolor}
2424+\usepackage{titlesec}
2525+\usepackage{enumitem}
2626+\usepackage{booktabs}
2727+\usepackage{tabularx}
2828+\usepackage{fancyhdr}
2929+\usepackage{hyperref}
3030+\usepackage{graphicx}
3131+\usepackage{ragged2e}
3232+\usepackage{microtype}
3333+\usepackage{natbib}
3434+\usepackage[colorspec=0.92]{draftwatermark}
3535+3636+% === COLORS ===
3737+\definecolor{acpink}{RGB}{180,72,135}
3838+\definecolor{acpurple}{RGB}{120,80,180}
3939+\definecolor{acdark}{RGB}{64,56,74}
4040+\definecolor{acgray}{RGB}{119,119,119}
4141+\definecolor{draftcolor}{RGB}{180,72,135}
4242+4343+% === DRAFT WATERMARK ===
4444+\DraftwatermarkOptions{
4545+ text=WORKING DRAFT,
4646+ fontsize=3cm,
4747+ color=draftcolor!18,
4848+ angle=45,
4949+ pos={0.5\paperwidth, 0.5\paperheight}
5050+}
5151+5252+% === HYPERREF ===
5353+\hypersetup{
5454+ colorlinks=true,
5555+ linkcolor=acpurple,
5656+ urlcolor=acpurple,
5757+ citecolor=acpurple,
5858+ pdfauthor={@jeffrey},
5959+ pdftitle={Leyendo la partitura},
6060+}
6161+6262+% === SECTION FORMATTING ===
6363+\titleformat{\section}
6464+ {\normalfont\bfseries\normalsize\uppercase}
6565+ {\thesection.}
6666+ {0.5em}
6767+ {}
6868+\titlespacing{\section}{0pt}{1.2em}{0.3em}
6969+7070+\titleformat{\subsection}
7171+ {\normalfont\bfseries\small}
7272+ {\thesubsection}
7373+ {0.5em}
7474+ {}
7575+\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
7676+7777+% === HEADER/FOOTER ===
7878+\pagestyle{fancy}
7979+\fancyhf{}
8080+\renewcommand{\headrulewidth}{0pt}
8181+\fancyhead[C]{\footnotesize\color{draftcolor}\textit{Borrador de trabajo --- no citar}}
8282+\fancyfoot[C]{\footnotesize\thepage}
8383+8484+% === LIST SETTINGS ===
8585+\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
8686+\setlist[enumerate]{nosep, leftmargin=1.2em}
8787+8888+% === COLUMN SEPARATION ===
8989+\setlength{\columnsep}{1.8em}
9090+9191+% === PARAGRAPH SETTINGS ===
9292+\setlength{\parindent}{1em}
9393+\setlength{\parskip}{0.3em}
9494+9595+% Hyphenation for narrow two-column layout
9696+\tolerance=800
9797+\emergencystretch=1em
9898+\hyphenpenalty=50
9999+100100+\begin{document}
101101+102102+% === TITLE ===
103103+\twocolumn[
104104+\begin{center}
105105+{\acbold\LARGE Leyendo la partitura: Un an\'alisis cr\'itico de\\SCORE.md como gobernanza, interfaz y forma creativa\par}
106106+\vspace{0.4em}
107107+{\large @jeffrey}\\
108108+{\small\color{acgray} ORCID: 0009-0007-4460-4913}\\
109109+{\small\color{acgray} \url{https://aesthetic.computer}}
110110+\vspace{0.3em}
111111+112112+\rule{0.6\textwidth}{0.5pt}
113113+\vspace{0.3em}
114114+115115+\begin{minipage}{0.85\textwidth}
116116+\small
117117+\textbf{Resumen.}
118118+El proyecto Aesthetic Computer reemplaz\'o su README con un documento llamado SCORE.md.
119119+Este art\'iculo examina qu\'e hizo ese cambio de nombre --- y qu\'e dej\'o sin hacer.
120120+Bas\'andonos en quince art\'iculos escritos desde la bandeja de investigaci\'on del proyecto,
121121+leemos la partitura frente a sus propias aspiraciones: como documento de gobernanza,
122122+como referencia t\'ecnica, como forma creativa. Encontramos que la partitura tiene
123123+\'exito como met\'afora organizadora pero tiene dificultades como documento --- atrapada
124124+entre las demandas de agentes de IA, nuevos colaboradores, la propia historia del
125125+proyecto y la pr\'actica creativa del autor. Identificamos seis tensiones en la
126126+partitura actual y proponemos un marco de revisi\'on que toma en serio la met\'afora
127127+musical: una partitura debe decirte c\'omo interpretar, no solo cu\'ales son los instrumentos.
128128+\end{minipage}
129129+\vspace{1em}
130130+\end{center}
131131+]
132132+133133+\section{?`Qu\'e es una partitura?}
134134+135135+En m\'usica, una partitura es un conjunto de instrucciones para producir un evento temporal. No es el evento en s\'i --- es el documento que hace el evento reproducible. Una partitura lleva dentro de s\'i una teor\'ia impl\'icita de lo que importa: qu\'e par\'ametros deben especificarse y cu\'ales pueden dejarse al criterio del int\'erprete.
136136+137137+Cuando el proyecto Aesthetic Computer renombr\'o su README.md a SCORE.md a principios de marzo de 2026, import\'o todo este marco. El gesto fue deliberado. El proyecto ya entend\'ia sus programas como ``piezas'' en lugar de aplicaciones~\citep{scudder2026pieces}, su interfaz como un instrumento~\citep{scudder2026notepat}, y su notaci\'on gr\'afica (Whistlegraph) como una partitura viral~\citep{scudder2026whistlegraph}. Renombrar el documento de gobernanza fue una manera de decir: esto tambi\'en es algo desde lo cual se interpreta.
138138+139139+Pero una partitura implica int\'erpretes. Y la pregunta que este art\'iculo plantea es: ?`qui\'en interpreta desde SCORE.md, y el documento realmente les ayuda?
140140+141141+\section{La bandeja y la partitura}
142142+143143+La bandeja de investigaci\'on de Aesthetic Computer contiene actualmente diecisiete art\'iculos, organizados en un molino con compilaciones automatizadas, traducciones a cuatro idiomas y un formato de tarjetas para distribuci\'on f\'isica~\citep{scudder2026cards}. Leer a trav\'es de estos art\'iculos revela un proyecto de considerable ambici\'on y coherencia interna --- pero tambi\'en un proyecto cuya autodescripci\'on (la partitura) no ha seguido el ritmo de su autocomprensi\'on (los art\'iculos).
144144+145145+Los art\'iculos cuentan una historia que la partitura no cuenta. Consid\'erese:
146146+147147+\begin{itemize}
148148+\item El art\'iculo ``Pieces Not Programs''~\citep{scudder2026pieces} argumenta que la palabra ``pieza'' importa un marco musical donde las obras son de autor\'ia, interpretables e iterables. La partitura menciona piezas pero nunca explica este encuadre.
149149+\item El art\'iculo sobre notepat~\citep{scudder2026notepat} documenta cinco bucles de retroalimentaci\'on a trav\'es de los cuales una sola pieza atrajo a toda una plataforma a la existencia. La partitura lista notepat como una pieza entre 359.
150150+\item El art\'iculo sobre sostenibilidad~\citep{scudder2026sustainability} identifica una mediana de 8 a\~nos de brecha entre la creaci\'on de herramientas y la financiaci\'on sostenible, con estudios de caso que terminan en discapacidad y muerte. La partitura tiene insignias de patrocinadores.
151151+\item El art\'iculo sobre Native OS~\citep{scudder2026os} argumenta que los port\'atiles x86\_64 excedentes a \$50 cada uno son la base material para un instrumento creativo planetario. La partitura lista comandos de compilaci\'on.
152152+\item El art\'iculo KidLisp Cards~\citep{scudder2026cards} demuestra que la brevedad program\'atica produce un nuevo formato de publicaci\'on --- la tarjeta como partitura ejecutable. La partitura no menciona las tarjetas.
153153+\end{itemize}
154154+155155+En cada caso, el art\'iculo articula una tesis que da significado a lo que la partitura simplemente cataloga. La partitura tiene los hechos pero no el argumento.
156156+157157+\section{Seis tensiones}
158158+159159+Leer la partitura frente a los art\'iculos revela seis tensiones que una revisi\'on deber\'ia abordar.
160160+161161+\subsection{Confusi\'on de audiencia}
162162+163163+La partitura abre con un mensaje para agentes de IA (``If you find something interesting\ldots leave a breadcrumb'') y luego cambia inmediatamente a la incorporaci\'on humana (``press the top left of the screen''). La secci\'on ``Front Door'' se dirige a usuarios finales. La secci\'on ``Back Door'' se dirige a desarrolladores. La secci\'on ``Ant Guidance'' se dirige a agentes automatizados. La secci\'on ``Embodiments'' intenta reconciliar los tres.
164164+165165+Esto no est\'a mal --- una partitura puede dirigirse a m\'ultiples int\'erpretes. Pero una partitura musical hace legible la parte del int\'erprete de un vistazo. SCORE.md requiere que el lector descubra qu\'e partes son para \'el. Una partitura de director y una parte de viol\'in son documentos diferentes por buenas razones.
166166+167167+\subsection{Cat\'alogo vs. argumento}
168168+169169+La partitura est\'a organizada como un cat\'alogo: arquitectura, comandos, endpoints, backlogs, consultas de mercado. Este es material de referencia \'util, pero no comunica nada sobre \emph{por qu\'e} existe el proyecto o qu\'e principios gobiernan su desarrollo.
170170+171171+Los art\'iculos articulan colectivamente al menos cinco argumentos centrales:
172172+\begin{enumerate}
173173+\item El software creativo deber\'ia dise\~narse como un instrumento, no como una herramienta~\citep{scudder2026goodiepal}.
174174+\item La ``pieza'' es una unidad de cognici\'on creativa, no un programa~\citep{scudder2026pieces}.
175175+\item La restricci\'on (en dise\~no de lenguajes, en factor de forma) es generativa, no limitante~\citep{scudder2026kidlisp, scudder2026cards}.
176176+\item Hardware excedente + SO personalizado = acceso a escala planetaria~\citep{scudder2026os, scudder2026plork}.
177177+\item Las herramientas creativas requieren modelos econ\'omicos que no maten a sus creadores~\citep{scudder2026sustainability}.
178178+\end{enumerate}
179179+180180+Ninguno de estos argumentos aparece en la partitura. Un lector primerizo de SCORE.md sabr\'ia \emph{qu\'e} es Aesthetic Computer (un runtime con piezas, un prompt, algunos servidores) pero no \emph{por qu\'e} existe o en qu\'e cree.
181181+182182+\subsection{El problema del backlog}
183183+184184+La partitura contiene una secci\'on ``AC Native Backlog'' con siete elementos que mezclan tareas completadas (``Claude native binary'') con funciones aspiracionales (``A/B kernel slots with auto-rollback''). Esto es un artefacto de gesti\'on de proyectos, no una partitura. Comunica estado t\'actico, no direcci\'on estrat\'egica.
185185+186186+La filosof\'ia de las hormigas (en \texttt{ants/mindset-and-rules.md}) advierte expl\'icitamente contra el trabajo especulativo: ``IDLE is valid---wandering is the job, not failure.'' Sin embargo, el backlog en la partitura es precisamente trabajo especulativo, presentado como si fuera el plan del proyecto. Las sub-partituras (fedac/native/SCORE.md, papers/SCORE.md) manejan esto mejor separando la gu\'ia de las listas de tareas.
187187+188188+\subsection{El bloque del mercado Keeps}
189189+190190+La partitura dedica 90 l\'ineas a consultas GraphQL de Tezos/Objkt para verificar las estad\'isticas del mercado de Keeps NFT. Esto es herramienta operativa para un solo colaborador (el autor). Es material de referencia valioso, pero domina la segunda mitad de la partitura y env\'ia una se\~nal no intencionada: que el monitoreo del mercado NFT es una preocupaci\'on central del proyecto, al mismo nivel que la arquitectura y el flujo de trabajo de desarrollo.
191191+192192+El art\'iculo ``Dead Ends''~\citep{scudder2026deadends} categoriza expl\'icitamente Tezos/Keeps como un experimento de monetizaci\'on con futuro incierto. La partitura lo presenta como infraestructura establecida.
193193+194194+\subsection{Voces ausentes}
195195+196196+El art\'iculo ``Network Audit''~\citep{scudder2026audit} revela que AC tiene 2.811 handles registrados, pero solo el 2,1\% escribe KidLisp y el 0,7\% publica piezas. El art\'iculo ``Diversity''~\citep{scudder2026diversity} reconoce que el 80\% de los autores citados son hombres occidentales. El art\'iculo ``Sustainability''~\citep{scudder2026sustainability} documenta el costo humano de la creaci\'on de herramientas sin apoyo.
197197+198198+La partitura no se involucra con nada de esto. Presenta n\'umeros de adopci\'on (``2812 registered handles, 265 user-published pieces'') como logro en lugar de como datos que requieren interpretaci\'on. Los art\'iculos son m\'as honestos que la partitura.
199199+200200+\subsection{Sub-partituras vs. partitura principal}
201201+202202+El proyecto ahora tiene seis archivos SCORE.md: ra\'iz, papers, fedac, fedac/native, opinion y vault. Las sub-partituras son generalmente mejores documentos que la partitura principal. La partitura de papers abre con una ``Mill Mission'' que explica \emph{por qu\'e} existe. La partitura native define ``shipped'' con cinco criterios verificables. La partitura vault mapea la postura de seguridad.
203203+204204+La partitura principal, en cambio, intenta ser todo: README, documento de arquitectura, gu\'ia para desarrolladores, runbook operativo y panel de NFT. Las sub-partituras tuvieron \'exito siendo espec\'ificas. La partitura principal tiene dificultades por ser comprehensiva.
205205+206206+\section{La met\'afora de la partitura, tomada en serio}
207207+208208+Si SCORE.md es una partitura, ?`qu\'e tipo de partitura deber\'ia ser? La analog\'ia musical sugiere varias propiedades:
209209+210210+\textbf{Una partitura te dice c\'omo empezar.} La ``Front Door'' de la partitura actual hace esto adecuadamente para usuarios finales, pero no para colaboradores o agentes. Un int\'erprete que toma una partitura necesita saber: ?`qu\'e instrumento toco? ?`D\'onde entro? ?`Cu\'al es el tempo?
211211+212212+\textbf{Una partitura tiene partes.} Diferentes int\'erpretes leen diferentes partes. La partitura actual mezcla todas las partes en un solo documento. Las sub-partituras son, en efecto, partes individuales que han sido extra\'idas. La partitura principal deber\'ia ser la partitura del director: una visi\'on general que apunta a las partes, no una uni\'on de todas las partes.
213213+214214+\textbf{Una partitura implica una pr\'actica de interpretaci\'on.} Existen convenciones sobre c\'omo leer y ejecutar una partitura que no est\'an escritas en la partitura misma. El documento de filosof\'ia de las hormigas cumple esta funci\'on para agentes de IA. No existe nada equivalente para colaboradores humanos.
215215+216216+\textbf{Una partitura puede ser revisada.} Las partituras tienen ediciones. El SCORE.md actual no tiene historial de versiones ni registro de cambios dentro del documento mismo. Se lee como si siempre hubiera sido as\'i, cuando en realidad era un README hasta hace dos semanas.
217217+218218+\textbf{Una partitura no es la interpretaci\'on.} La partitura no deber\'ia intentar contener el proyecto. Deber\'ia ser el documento m\'inimo desde el cual el proyecto pueda ser interpretado. Todo lo dem\'as --- backlogs, consultas de mercado, herramientas operativas --- pertenece a partes o ap\'endices.
219219+220220+\section{Lo que los art\'iculos saben que la partitura no}
221221+222222+El hallazgo m\'as sorprendente al leer los diecisiete art\'iculos frente a la partitura es cu\'anto m\'as rica es la autocomprensi\'on del proyecto en los art\'iculos que en la partitura. Los art\'iculos contienen:
223223+224224+\begin{itemize}
225225+\item Una teor\'ia de la cognici\'on creativa (piezas como ciclos de percepci\'on-acci\'on)
226226+\item Una econom\'ia pol\'itica de la creaci\'on de herramientas (qui\'en paga, qui\'en se agota, qui\'en muere)
227227+\item Una filosof\'ia de dise\~no (instrumento-primero, restricci\'on-como-generativa, plano-sobre-profundo)
228228+\item Un argumento material sobre hardware (port\'atiles excedentes como instrumento planetario)
229229+\item Una auditor\'ia honesta de fracasos (16 callejones sin salida, 50\% de tasa de contribuci\'on)
230230+\item Un compromiso con la diversidad de citas con metas espec\'ificas
231231+\item Una infraestructura de publicaci\'on (el molino) con su propia declaraci\'on de misi\'on
232232+\end{itemize}
233233+234234+La partitura no contiene nada de esto. Es un documento t\'ecnico que resulta llamarse partitura. La revisi\'on deber\'ia convertirlo en una partitura real: un documento que lleve los argumentos del proyecto, no solo su arquitectura.
235235+236236+\section{Hacia una partitura revisada}
237237+238238+Un SCORE.md revisado deber\'ia:
239239+240240+\begin{enumerate}
241241+\item \textbf{Comenzar con el porqu\'e.} Declarar en qu\'e cree el proyecto y por qu\'e existe, bas\'andose en los argumentos articulados a trav\'es de los art\'iculos. La mill mission en papers/SCORE.md es un modelo para esto.
242242+\item \textbf{Separar partes de la partitura del director.} Mover detalles operativos (consultas de Keeps, elementos del backlog, referencias de comandos) a sub-partituras o ap\'endices. La partitura principal deber\'ia ser legible en cinco minutos.
243243+\item \textbf{Nombrar a sus audiencias.} Dirigirse expl\'icitamente a los tres tipos de int\'erpretes (usuarios finales, colaboradores humanos, agentes de IA) con puntos de entrada claros para cada uno.
244244+\item \textbf{Incluir los n\'umeros honestos.} Presentar datos de adopci\'on con interpretaci\'on, no solo como insignias. El 2,1\% de autor\'ia en KidLisp es un hecho que significa algo --- la partitura deber\'ia decir qu\'e.
245245+\item \textbf{Referenciar los art\'iculos.} La bandeja existe. La partitura deber\'ia se\~nalarla como la autocomprensi\'on extendida del proyecto, no ignorarla.
246246+\item \textbf{Reconocer su propia historia.} Notar que este documento era un README hasta marzo de 2026, y que el cambio de nombre fue en s\'i mismo un acto creativo con consecuencias.
247247+\item \textbf{Ser m\'as breve.} La partitura actual tiene 361 l\'ineas. Una partitura que se tome en serio deber\'ia estar m\'as cerca de la longitud de una pieza que cabe en una tarjeta.
248248+\end{enumerate}
249249+250250+\section{Conclusi\'on}
251251+252252+SCORE.md es un buen nombre para lo que el proyecto Aesthetic Computer necesita: un documento que haga el proyecto interpretable. Pero la partitura actual es un cat\'alogo, no una composici\'on. Lista lo que el proyecto contiene sin argumentar lo que significa. Los art\'iculos en la bandeja de investigaci\'on --- escritos en las mismas semanas que la partitura --- contienen los argumentos, las evaluaciones honestas y los marcos creativos que la partitura carece.
253253+254254+La revisi\'on m\'as productiva no a\~nadir\'ia a la partitura sino que restar\'ia de ella, moviendo detalles operativos a sub-partituras y reemplaz\'andolos con las creencias reales del proyecto. Las sub-partituras (papers, native, vault) ya demuestran este enfoque. La partitura principal deber\'ia aprender de sus propias partes.
255255+256256+Una partitura no es una descripci\'on de una orquesta. Es la notaci\'on m\'inima requerida para producir m\'usica. SCORE.md deber\'ia aspirar a la misma econom\'ia.
257257+258258+\bibliographystyle{plainnat}
259259+\bibliography{references}
260260+261261+\end{document}