permacomputing

Source repository for the main permacomputing wiki site
git clone http://git.permacomputing.net/repos/permacomputing.git # read-only access
Log | Files | Refs

commit a7961769f96543de7591472d7efa107f8d377d58
parent 8f8c5dab67b29ab05e1934e207666f5c4fa31a96
Author: Ville-Matias Heikkila <viznut@low.fi>
Date:   Tue, 14 Jun 2022 15:16:33 +0300

new pages

Diffstat:
ABBS.mdwn | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mbootstrapping.mdwn | 33++++++++++++++++++++++++++++++++-
Mvirtual_machine.mdwn | 53++++++++++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 139 insertions(+), 2 deletions(-)

diff --git a/BBS.mdwn b/BBS.mdwn @@ -0,0 +1,55 @@ +Bulletin Board System +===================== + +A **Bulletin Board System** (**BBS**) is an online community service based +on [[character terminal]] connections – traditionally over landline +telephone modems, but currently most BBSes use Telnet or SSH over the +Internet instead. There are also packet radio ([[AX.25]]) BBSes used by +radio hams. + +BBSes came to existence in the 1970s but were preceded by [[time-sharing]] +services of the 1960s. A major difference between a BBS and a time-sharing +server (such as a public Unix system) is that BBS software is usually +user-friendlier and specifically designed for messaging and file-sharing. +Also, BBSes have generally been run on much smaller computers, usually +microcomputers with a single modem. Multi-user BBSes were not uncommon in +the "golden years", but most BBSes only allowed only one online user at a +time. In many places, BBSes declined quite rapidly especially when broadband +Internet connections became available. + +Some notable features of the BBS culture from the permacomputing +perspective, especially in contrast to the Internet: + +* Locality. Since long-distance telephone calls are more expensive than + local calls, most modem users have preferred servers that are + geographically close to them. This helped create local variation to the + BBS scene and prevent excessive centralization. +* Personality. BBSes generally look and feel like their owners, and visiting + a BBS feels more like visiting someone's home than a public service. On + the Internet, small messaging forums and [[personal servers|Smallnet]] may + sometimes create the same kind of feeling. +* Limited availability. There used to be much more BBS users than BBS nodes, + so it was quite common to get a BUSY signal instead of a connection. + Automatic dialling lists that repetitively called several BBS numbers + until a connetion was made were common. Also, BBSes could become + temporarily or permanently unavailable due to various personal reasons. + So, BBS users generally felt joy on succesful connections, something that + does not happen on the Internet where everything is expected to be + constantly available at all times. +* Intensity. When online time is limited (and possible even charged per + minute), it needs to be used actively instead of "just idling around". + Non-multitasking operating systems amplify this. Offline is the default + state of mind, and online is an exception. +* Scarcity and sharing. When connection time is a limited resource, users + are generally expected to contribute to the systems by message-based + discussions and/or uploads instead of just passively "leeching" files. + Most BBSes implemented an upload/download ratio system where files were + used as "currency". +* [[File collection]]. BBSes typically host all kinds of software and other + files useful for computer users. Also, before the broadband Internet, it + was not feasible to redownload the same files every time they were needed, + so it was also important to curate local, personal file collections. + +Even though BBSes in general are stand-alone systems, there have been ways +to network them. [[Fidonet]] is a prominent networking system for creating +shared messaging forums between several BBSes. diff --git a/bootstrapping.mdwn b/bootstrapping.mdwn @@ -1 +1,32 @@ -**Bootstrapping** has quite many meanings in the computer world. +# Bootstrapping + +**Bootstrapping** has many meanings in the computer world. The most common +meaning is now more commonly referred to as **booting** (i.e. the process of +starting a computer). Bootstrapping a software or a programming language, +however, generally means making it available on a computing platform +starting from a very elementary level. + +Bootstrappability is important for permacomputing for ensuring that +arbitrary software can be run in an indifenite future where computing +environments can be very different. + +Bootstrappability is often a problem with programming languages that have +been implemented with theirselves (like, a C compiler written in C, or a +Rust compiler written in Rust). Usually, a language is made available on a +new processor architecture by cross-compiling its compiler to it, but if +that option is not available, bootstrapping is needed. + +In case of ordinary software, bootstrapping means not only compiling the +program itself but also compiling/bootstrapping all of its software +[[dependecies|dependency]] from the lowest level, including the [[operating +system]]. The amount of computing resources (especially storage space and +computing time) required for bootstrapping can be used to measure +**bootstrap complexity**. + +Binary executables compiled for simple [[virtual machine]]s can be used to +help bootstrapping. A good idea might be to have a simple, easily +retargettable [[C]] compiler available as this kind of executable. + +Classical, bare-hardware [[Forth]] environments have often been created in a +bootstrapping-like way, where a simple memory editor gradually gains more +vocabulary. diff --git a/virtual_machine.mdwn b/virtual_machine.mdwn @@ -1 +1,52 @@ -A **virtual machine** is an implementation of a computing platform on top of another. +# Virtual machine + +A **virtual machine** is an implementation of a computer on top of another. +An **emulator** is specifically a virtual machine that simulates a different +type of computer that also exists as real hardware. If the "emulated" +computer is similar to the one that runs the emulator, the commonly used +term is **virtualization**. Virtual machines that have no real-hardware +counterpart (such as the Java Virtual Machine) are usually just called VMs, +but their machine languages are usually referred to as **bytecode** rather +than machine code. + +Virtual machines can be used to ensure compatibility of a software – both +across different types of hardware and in constantly changing software +environments (i.e. to avoid [[software rot]]). Very simple virtual machines +(ones that may be very slow but can be implemented in a very short time) are +sometimes suggested as a means for very-long-term software preservation. + +Virtual machines designed to run applications usually have the same kind of +[[dependency]] and obsolescence problems as modern computer platforms in +general. So, instead of ensuring compatibility, things like the Java Virtual +Machine are more likely to add just another unreliable layer of +dependencies. In order to avoid this, the design of the VM should be frozen +and discourage software dependencies. + +A general problem with virtual machines is the virtualization overhead, +especially if the instruction set differs from that of the host computer. An +emulated program may require several times the computing resources of an +equivalent native program. JIT translation can be used to reduce this +overhead. [[Static binary translation]] could be used to remove (nearly) all +of the overhead, but is far more difficult to implement automatically. + +**Fantasy platforms** are a class of virtual machines designed to be +superficially similar to classic home computers, including immediate and +worriless programmability with a simple programming language. A common +design mistake in otherwise constrained fantasy platforms (such as +[[TIC-80]]) is **uncapped speed** that allows the host computer to run the +programs as fast as it can. This encourages programs that "push the limits" +of the VM while actually taking advantage of the speed of the host computer +and wasting a lot more energy for doing the same thing. + +Virtual machines: + + * [[Uxn]] + * [[TIC-80]] + * [[WebAssembly]] + +Languages that are usually compiled into virtual machine bytecode instead of +native code: + + * [[Forth]] + * [[Java]] + * Most scripting languages ([[Lua]], etc.)