summaryrefslogtreecommitdiff
path: root/papers/LOCO-24/contents.latex
blob: 38196f1a0675cf4860c590acec3639c3705d07e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% PAPER FOR:                                                                %%
%% https://locos.codeberg.page/loco2024/                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% The first command in your LaTeX source must be the \documentclass
%% command.
%%
%% For submission and review of your manuscript please change the
%% command to \documentclass[manuscript, screen, review]{acmart}.
%%
%% When submitting camera ready or to TAPS, please change the command
%% to \documentclass[sigconf]{acmart} or whichever template is required
%% for your publication.
%%
%%
\documentclass[sigconf]{acmart}

%% For Unix quotes
\usepackage{epigraph}
\setlength{\epigraphrule}{0pt}

%% \BibTeX command to typeset BibTeX logo in the docs
\AtBeginDocument{%
  \providecommand\BibTeX{{%
    Bib\TeX}}}

%% Rights management information.  This information is sent to you
%% when you complete the rights form.  These commands have SAMPLE
%% values in them; it is your responsibility as an author to replace
%% the commands and values with those provided to you when you
%% complete the rights form.
\setcopyright{none}
\copyrightyear{2024}
\acmYear{2024}
\acmDOI{}

%% These commands are for a PROCEEDINGS abstract or paper.
\acmConference[LOCO '24]{1st International Workshop on Low Carbon
Computing}{December 05, 2024}{Glasgow, Scotland, United Kingdom }
%%
%%  Uncomment \acmBooktitle if the title of the proceedings is different
%%  from ``Proceedings of ...''!
%%
%%\acmBooktitle{Woodstock '18: ACM Symposium on Neural Gaze Detection,
%%  June 03--05, 2018, Woodstock, NY}
\setcopyright{none}
\settopmatter{printacmref=false}
\acmDOI{}
\acmISBN{}


%% Submission ID.
%% Use this when submitting an article to a sponsored event. You'll
%% receive a unique submission ID from the organizers
%% of the event, and this ID should be used as the parameter to this command.
%%\acmSubmissionID{123-A56-BU3}

%% For managing citations, it is recommended to use bibliography
%% files in BibTeX format.
%%
%% You can then either use BibTeX with the ACM-Reference-Format style,
%% or BibLaTeX with the acmnumeric or acmauthoryear sytles, that include
%% support for advanced citation of software artefact from the
%% biblatex-software package, also separately available on CTAN.
%%
%% Look at the sample-*-biblatex.tex files for templates showcasing
%% the biblatex styles.
%%

%%
%% The majority of ACM publications use numbered citations and
%% references.  The command \citestyle{authoryear} switches to the
%% "author year" style.
%%
%% If you are preparing content for an event
%% sponsored by ACM SIGGRAPH, you must use the "author year" style of
%% citations and references.
%% Uncommenting
%% the next command will enable that style.
%%\citestyle{acmauthoryear}

%% Easy way to write code inline
\newcommand{\code}{\texttt}

%% end of the preamble, start of the body of the document source.
\begin{document}

%% The "title" command has an optional parameter,
%% allowing the author to define a "short title" to be used in page headers.
\title{A computing system that embraces the language}

%%
%% The "author" command and its associated commands are used to define
%% the authors and their affiliations.
%% Of note is the shared affiliation of the first two authors, and the
%% "authornote" and "authornotemark" commands
%% used to denote shared contribution to the research.
\author{Ekaitz Zárraga Río}
%% \authornote{Both authors contributed equally to this research.}
\email{ekaitz@elenq.tech}
%% \affiliation{%
%%   \institution{Institute for Clarity in Documentation}
%%   \city{Dublin}
%%   \state{Ohio}
%%   \country{USA}
%% }

%%
%% By default, the full list of authors will be used in the page
%% headers. Often, this list is too long, and will overlap
%% other information printed in the page headers. This command allows
%% the author to define a more concise list
%% of authors' names for this purpose.
\renewcommand{\shortauthors}{Zárraga Río E.}

%% The abstract is a short summary of the work to be presented in the
%% article.
\begin{abstract}
%% TODO
  Computing, as any other field, evolved from the previous work on the matter.
  During its development huge advancements have been done in many areas but
  only some are in use today, due to the inertia industry already had, which
  forced some sort of retrocompatibility. In this document a new computing
  platform is presented, one that makes use of some of the ideas that did not
  reach the mainstream and uses our current computing capabilities in order to
  achieve a personal computing device that embraces the programming language.
\end{abstract}

%% Document outline:
%% - Motivation: Simplification as a mean for more efficient computing and
%%   a more accessible manufacture. Modern computing systems are so complex
%%   that they require very good manufacturing to deal with the excessive
%%   computing waste.
%%   Also, maintenance should be reduced as much as possible, even leaving it
%%   in the hands of the user, as Oberon would, reducing the impact of the
%%   repairs, upgrades, and computing infrastructure needed for simple tasks.
%% - Kernels, Unix
%% - Interpreters
%%    - Shells
%%    - Are interpreters a kernel?
%% - Removing layers instead of adding layers
%%    - Unikernels: Good idea but miss the target.

%% Keywords. The author(s) should pick words that accurately describe
%% the work being presented. Separate the keywords with commas.
\keywords{Operating Systems, Programming Languages, Interpreters}
%% A "teaser" image appears between the author and affiliation
%% information and the body of the document, and typically spans the
%% page.
%% \begin{teaserfigure}
%%   \includegraphics[width=\textwidth]{sampleteaser}
%%   \caption{Seattle Mariners at Spring Training, 2010.}
%%   \Description{Enjoying the baseball game from the third-base
%%   seats. Ichiro Suzuki preparing to bat.}
%%   \label{fig:teaser}
%% \end{teaserfigure}

%% Dates for the article
%% \received{20 February 2007}
%% \received[revised]{12 March 2009}
%% \received[accepted]{5 June 2009}


%% This command processes the author and affiliation and title
%% information and builds the first part of the formatted document.
\maketitle

\section{Context}

%% We need to understand context ...
  All engineering decisions are taken in a context and those that are adopted
  by any industry are oftentimes driven by previous decisions taken in the same
  subject. Specifically, the computing industry, arguably due to its rapid
  emergence, has been heavily influenced by previous technology and
  \textit{backwards compatibility}. Reviewing the most influential ideas of
  computing one can obtain valuable information to be able to criticise current
  computing systems and propose pioneering alternatives.

\subsection{Von Neumann model}
  The von Neummann model introduced in 1945 proposes a general purpose device
  consisting of a \textit{Central Processing Unit} (CPU) and a \textit{Store}.
  The \textit{Store} is often implemented as a \textit{Random Access Memory}
  (RAM or, simply, \textit{memory}), which stores data in bytes, each of them
  with an \textit{address}, in a tabulated fashion.

  In the von Neumann model the data and the program are both written to and
  read from the \textit{Store}. This arrangement had carried criticism over the
  years but it is also a fundamental part of how modern Operating Systems work.

\subsection{Unix's heritage}
\epigraph{
  Applicants must also have extensive knowledge of Unix, although they should
  have sufficiently good programming taste to not consider this an achievement.
}{\textit{-- Hal Abelson}}

  Since its inception, Unix was a huge innovation in Operating Systems market.
  Its main features include \textit{multitasking} and \textit{multi-user}
  support, a programming interface, \textit{files as abstractions} for devices
  and other objects and a powerful \textit{shell} that facilitates program
  composition.

\subsubsection{The Kernel}
  In the Unix model, the Kernel, the core of the Operating System, is
  responsible for managing the hardware resources. For that job, it uses
  several concepts that systems designers and programmers are familiarized with
  and are discouraged to change. Those include \textit{virtual memory},
  \textit{processes}, \textit{shared-memory threads}, \textit{hierarchical
  filesystems} and \textit{system calls}.

\subsubsection{The Shell}
  The shell is run as a userspace program that has the hability to launch other
  programs using an outdated fork+exec mechanism that encourages memory
  overshoot\cite{fork:Baumann}.
  The shell in Unix systems is optimized for text processing as, in McIlroy's
  words, \textit{"text streams [are] the universal interface"}
  \cite{QuarterCenturyUnix:Salus}.

\subsubsection{Userspace programs}

  Programs are loaded in and given access to \textit{virtual memory}, and they
  can only run a subset of the CPU instructions of the machine, the
  \textit{unprivileged} set. For restricted operations, programs need to call
  the \textit{Kernel} using a \textit{system-call} that can be accepted or
  rejected by the latter, according to some rules for \textit{permissions} or
  resource availability. In order to achieve multitasking, many programs can be
  loaded in memory (\textit{processes}) simultaneously and the \textit{Kernel}
  \textit{schedules} which of the them will run at a given moment in time and
  pauses the rest accordingly.

%  ELF/Mach-O/EXE -> the kernel acts as an interpreter for them.
%  Virtual memory separates one program from another.
%  The CPU helps with that.
%  Each program is a process (invented concept)
%  Each process can launch threads \cite{Threads:Lee}

  \paragraph{Concurrency}
  If programs need to operate concurrently they can create many
  \textit{processes} or use \textit{threads}. A \textit{thread} is a
  lightweight version of a \textit{process} that shares the memory with the
  \textit{process} that created it. Resource sharing in a concurrent system has
  many security and reliability implications, and has proven to be a difficult
  subject for computer programmers over the years
  \cite{Threads:Lee}.


\subsubsection{Interpreters}
  Interpreters, like one in the \textit{shell}, are a fundamental part of
  modern day programming. Interpreters are run as userspace programs, acting as
  a \textit{host} for the program they interpret. The interpreter effectively
  hides the details of the Operating System, often even implementing a virtual
  machine for that job, in order to provide \textit{portability} and
  \textit{usability} to the programmers. That is why the most used and demanded
  programming languages nowadays are interpreted \cite{PLCommunity:Tambad}.

%  Unix was marketed as a system for multiple languages / supports many
%  languages via interpreters that ease the development experience. Describe how
%  they work and why they are useful
%  Interpreters are programs that run in userspace

\subsection{Computer hardware}
  Computer processors, often marketed as "\textit{general purpose}", are based
  on the von Neumann model\cite{LiberateFromVonNeumann:Backus}, a CPU and a
  Store that is, and designed for running an Operating System on them. They
  clearly separate \textit{privileged}, reserved for the kernel, and
  \textit{unprivileged} instructions, that any userspace program can use, in
  order to facilitate \textit{system-calls} and \textit{interrupt} and
  \textit{virtual memory} control.

  Contrary to what one could expect, most of the improvements in the processor
  architectures come from specialization for the said case, and not from
  generalization.

  Modern processors are heavily optimized for Operating Systems that follow the
  Unix model (including MS Windows), and a memory layout that resembles that of
  a \textit{C-like} program, which also comes from the days of Unix
  \cite{GeneralPurposeProcessor:Chisnall}, reducing the chance for other
  paradigms to succeed.


\section{Embracing the language}

  If a computing system aims to embrace the language, it needs to make a proper
  analysis of what a programming language is and how people make use of the
  programming facilities that computing systems provide. Focusing on providing
  facilities for \textit{vernacular programmers}\cite{MythsPL:Shaw} shapes a
  good compromise between available technical literacy from the user side and a
  wide audience to benefit.

%  %% TODO: embracing the language means embracing the people
%
%  From what we just discussed we can see most interesting things in Unix's
%  ideas are dangerous from von Neumann to shared-resource concurrency and
%  others are not comfortable for programmers, who prefer to use interpreted
%  languages instead as the abstractions they provide are easier to deal with.
%  But CPUs are optimized for the Unix case, instead of embracing the facilities
%  the programmers prefer to use.

\subsection{Personal computers}

%% TODO: do this the other way around!!! (to make it shorter)
% Before the Unix model won, personal computers were mainstream: they were
% simple and so on. We think those computers had the base where we can build
% computers that embrace the language and the person
  Before the Unix model flooded the personal computer market, computers were
  simple devices designed to be operated by a single person, each brand
  marketed their own \textit{ad-hoc} operating system and most of them had a
  vehicular language. Computer users were familiarized with the system and were
  able to manipulate it down to the electronics, creating a large generation of
  computer enthusiasts that still lasts today.

  The introduction of Graphical User Interfaces, \textit{GUI}, widened the
  spectrum of users \cite{EvolutionComputing:Larus} but at the expense of the
  access to lower level capabilities, as \textit{protecting the user}, and the
  computing literacy that traditional usage encouraged.

  Treating the users as adults (not protecting them from themselves), like
  early personal computers did, and providing them the adequate interface for
  exploration happens to be a extremely powerful way to explore optimization
  and simplification of computing systems \cite{Oberon:Wirth}.

%  %% TODO: is this part of the intro really?
%
%  %% TODO: What's `personal` in personal computer? embrace the user-programmer
%  %% TODO: make sure dates are right
%
%  Personal computers like those before the 90s were simple. A user could
%  maintain them and even manipulate the electronics. They often made a strong
%  bet for one language (ZX Spectrum / Apple II with BASIC), but the languages
%  had poor abstraction capabilities.
%
%  The introduction of larger RAM memories and more complex CPUs, made the
%  personal computing industry pivot towards Unix-based operating systems, as
%  they were proven to work in complex scenarios. This shift contributed to the
%  extinction of many \textit{simple} operating systems that flourished during
%  the previous era but facilitated the galloping increase personal computing
%  specs in the following years\cite{EvolutionComputing:Larus}.
%
%  %% TODO graphical user interfaces hid the programming part
%
%  Graphical User Interfaces, \textit{GUI}, became widespread in the early 1980s
%  and made computers accessible and useful to many
%  people\cite{EvolutionComputing:Larus} but at the expense of the access to
%  lower level capabilities, as \textit{protecting the user}, and the computing
%  literacy that traditional text-oriented usage encouraged.
%
%
%  Operating systems like Oberon \cite{Oberon:Wirth} blur the line between
%  \textit{GUI}s and programming, making them work together instead of hiding
%  the programming part of the system, while keeping a simple core in its design
%  that keeps the system maintainable, still making a strong bet for the
%  language (Oberon).
%
%  Our proposal is to recover the feeling of personal computers from the 80s,
%  but with the powerful abstraction capabilities we widely regard as
%  comfortable.
%
%  %% TODO: explain the GUI apparition and how before everyone was a vernacular
%  %% programmer and now it's not like that
%  %% TODO: if we want to improve the connection with the vernacular programmer,
%  %% we need to ask ourselves: what's a language? \cite{MythsPL:Shaw}
%
%  For \textit{vernacular programmers}, because they represent the vast majority
%  of programmers \cite{MythsPL:Shaw}: simplicity (few concepts), explorability
%  (repl), flexible, practical, also valid for professional programmers,
%  extendable, can represent other kind of goals like \textit{HDLs} and even
%  \textit{data} via DSLs.

\subsection{The language}
  The \textit{Lisp} family of languages have proven to be flexible and powerful
  (Lisp Machines and currently Emacs) and \textit{Scheme} has a long history of
  research in language and CPU design (lambda papers).

  \textit{Scheme} is a simple language, with a minimal standard, but that
  enables a huge level of abstraction thanks to its minimal but powerful core
  concepts which are also present in mainstream programming languages today
  (Python, JavaScript) reducing the friction with seasoned programmers.

  The nature of the Lisp family of languages also makes them suitable as file
  formats (sxml) for storage and configuration files, writing DSLs (language
  oriented programming), or extending the language (GOOPS, WISP) to the users'
  needs (Typed Racket, Kawa).

%  If we want to embrace the language we need to choose a language to embrace.
%  We have to place a bet: but we are betting to the widest option we know that
%  is also \textit{practical}.
%
%  Scheme:
%  \begin{itemize}
%    \item It's abstract enough
%    \item Other languages can compile to it (Wisp: srfi-119) (srfi-110 for the
%    difficulty of reading)
%    \item Simple concepts but powerful abstractions
%    \item Minimal standard
%    \item Extensibility
%    \item Language oriented programming (Racket)
%    \item Proven experience with the lambda papers and lisp machines => abandoned,
%  but still living in Emacs.
%    \item Typed Racket / Kawa / ...
%  \end{itemize}

  

\subsection{Operating System}

%  Unix based operating systems, have demonstrated to have several troublesome
%  concepts that are stuck in modern day programmers and users, but valid
%  alternatives had also been successfully proven in other areas of the
%  programming practice. Betting in a language enables applying those in the
%  operating system level.

\subsubsection{The kernel-interpreter}
  From the programming perspective, the \textit{kernel} and programming
  language \textit{interpreters} act as hosts: they prepare an isolated
  environment for the running program and manage resources for it via
  system-calls vs function calls, while running what it is written in the
  program body.

  When a interpreter as a \textit{userspace} program, there are two layers of
  interpretation. Engineering the kernel as an interpreter reduces its
  complexity and allows for further specialization for the chosen language.

\subsubsection{Managed memory}
  Virtual memory is an attempt to isolate programs from each other but it is a
  leaky abstraction that can be exploited\cite{SpectreMeltdown:HillMasters}.
  Removing direct access to memory, replacing it with managed memory, removes
  the need of virtual memory.

\subsubsection{No threads/processes but tasks}
  Unix-style parallelism, reinforced by modern \textit{multi-core} CPU design,
  focuses on the implementation rather than the usage. Browser-like task design
  based on Coroutines/Generators/Asynchronous calls.

\subsubsection{Capability based security "lambda-style"}
  Reduces the amount of permission issues inherited from von Neumann style and
  Unix. No \textit{user} support.

\subsubsection{Filesystem}
  This allows for new paradigms in Filesystem design.


\subsection{Hardware for the kernel-interpreter}

  Once the language is chosen and the structure of the kernel is well-defined,
  many optimizations can be applied to the underlying hardware, the same way it
  is done nowadays.

\subsubsection{Optimization for tree structures}
  \textit{Scheme} is based (not only that, the language itself is a list) in
  the \textit{cons cell}, similar to a \textit{linked-list} node, and the data
  structures that can be created from it (\textit{lists} and \textit{trees}).
  Optimizing the CPU for that case, with fast lookups and \code{car} and
  \code{cdr} operations hugely impacts in its performance.

\subsubsection{Hardware garbage collection}
  When the whole system uses managed memory, the Garbage Collection,
  \textit{GC}, can be pushed down in the stack. Oberon's GC is in the kernel,
  but we could push it down to the hardware.

\subsubsection{Extendable CPU}
  In order to test all those options, we could work in a FPGA, even using a HDL
  written in \textit{Scheme}. The FPGAs are more power hungry and not as fast
  as ASICs but the reduction of complexity proposed in this paper should be
  enough for personal computing. Also, letting the user configure the CPU from
  the computer itself reduces the need for constant upgrades, uses commodity
  hardware instead of very specialized devices and reduces the chance of a
  supply chain attack in many levels \cite{riscvSelfHostingComputer:Somlo}.


\section{Conclusion}

  The usage of commodity hardware like FPGAs and the reduction of needs from
  the CPU by eliminating the Kernel and some of the associated complexity could
  reduce the environmental (\textit{shipping}, waste associated with
  \textit{periodic upgrades}) and human cost (\textit{security},
  \textit{awareness}) of personal computers.

  Extending the reach of the language enriches the relationship the user has
  with the computer. If the selected language is powerful in terms of the level
  of abstraction it can provide, it could become the only tool a user needs for
  every single administration task, including hardware upgrade or optimization.

  Embracing the language is embracing the person in charge of the computer.

\clearpage

%% The acknowledgments section is defined using the "acks" environment
%% (and NOT an unnumbered section). This ensures the proper
%% identification of the section in the article metadata, and the
%% consistent spelling of the heading.
%% \begin{acks}
%% To Robert, for the bagels and explaining CMYK and color spaces.
%% \end{acks}


%% The next two lines define the bibliography style to be used, and
%% the bibliography file.
\bibliographystyle{ACM-Reference-Format}
\bibliography{../../bibliography}


%% If your work has an appendix, this is the place to put it.
%% \appendix


\end{document}
\endinput