Rudxain (talk | contribs)
physical media misconception
Rudxain (talk | contribs)
Why->Motivation
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''Permacomputing''' is a concept and [https://permacomputing.net/ movement] which consists on extending the longevity of information technology (IT) devices and [[wikipedia:Data_preservation|data preservation]].
'''Permacomputing''' is a concept and [https://permacomputing.net/ movement] which consists of [[wikipedia:Sustainability|sustainable]] information technology (IT) devices and [[wikipedia:Data_preservation|data preservation]]. In short, [[wikipedia:Permaculture|'''permaculture''']] in computing.


Permacomputing is the antithesis of [[planned obsolescence]] (and anything related to it) and [[Bloatware|bloat]].
Permacomputing is the antithesis of [[planned obsolescence]] (and anything related to it) and [[Bloatware|bloat]].


Permacomputing focuses on:
==Motivation==
 
*'''Simplicity''' (see [[wikipedia:KISS_principle|KISS]]) and [[wikipedia:Minimalism_(computing)|minimalism]]. Because "[https://grugbrain.dev/ complexity bad]". Though, this is not a core value, it's actually a means to an end.
*'''Stability'''. "If it ain't broke, don't fix it". But I prefer [[wikipedia:G._K._Chesterton#Chesterton's_fence|Chesterton's Fence]].
*'''Sustainability'''. The most important one!
 
==Why==
Here's a quote from [[wikipedia:Hundred_Rabbits#Permacomputing|100R]] (links added by me; typos corrected):<ref>https://100r.co/site/weathering_software_winter.html</ref><blockquote>Many of the tools that we thought we could rely on broke down, whether it is [[Apple]] products, or software that require [[Subscription service|subscription services]], <abbr>[[Digital rights management|DRM]]</abbr>, etc. As an artist you spend time developing a skill, you become a Photoshop illustrator. When your connection to the internet fails and that the software locks up, that skill that you thought was [[Right to own|yours]] was actually entirely owned by someone, and can be taken away.
Here's a quote from [[wikipedia:Hundred_Rabbits#Permacomputing|100R]] (links added by me; typos corrected):<ref>https://100r.co/site/weathering_software_winter.html</ref><blockquote>Many of the tools that we thought we could rely on broke down, whether it is [[Apple]] products, or software that require [[Subscription service|subscription services]], <abbr>[[Digital rights management|DRM]]</abbr>, etc. As an artist you spend time developing a skill, you become a Photoshop illustrator. When your connection to the internet fails and that the software locks up, that skill that you thought was [[Right to own|yours]] was actually entirely owned by someone, and can be taken away.


Line 29: Line 23:


This principle is the basis of [[wikipedia:Bootstrapping_(compilers)|bootstrapping]]. Simple (and tedious) tools can be used to make useful (and complex) tools! This goes hand-in-hand with [[wikipedia:Reproducible_builds|reproducible builds]], which [[User:Rudxain/Object transparency movement|improves transparency]].<ref>https://bootstrappable.org/</ref>
This principle is the basis of [[wikipedia:Bootstrapping_(compilers)|bootstrapping]]. Simple (and tedious) tools can be used to make useful (and complex) tools! This goes hand-in-hand with [[wikipedia:Reproducible_builds|reproducible builds]], which [[User:Rudxain/Object transparency movement|improves transparency]].<ref>https://bootstrappable.org/</ref>
Examples of simple programming-languages (typically [[wikipedia:Turing_tarpit|Turing tarpits]]):
*[[wikipedia:Forth_(programming_language)|Forth]].<ref>https://github.com/cesarblum/sectorforth</ref> Recommended by 100R.
*[[wikipedia:Lisp_(programming_language)|Lisp]]<ref>{{Cite web |last=Tunney |first=Justine |date=2021-10-30 |title=SectorLISP Now Fits in One Sector |url=https://justine.lol/sectorlisp/ |access-date=2026-04-26}}</ref>
*[[wikipedia:Lambda_calculus|λ-Calculus]].<ref>{{Cite web |last=Tunney |first=Justine |date=2022-02-27 |title=Lambda Calculus in 383 Bytes |url=https://justine.lol/lambda/ |access-date=2026-04-26}}</ref> IMO, the most minimal of all. No way to beat it!
*[[wikipedia:Brainfuck|Brainfuck]]


===Ubiquity===
===Ubiquity===
If the tool is hard to recreate, ensure it's mostly [[wikipedia:Omnipresence|omnipresent]]. This is "[[wikipedia:Redundancy_(engineering)|useful redundancy]]", as I call it. This way, you can typically rely on it being available in almost any situation.
If the tool is hard to recreate, ensure it's mostly [[wikipedia:Omnipresence|omnipresent]]. This is "[[wikipedia:Redundancy_(engineering)|useful redundancy]]", as I call it. This way, you can typically rely on it being available in almost any situation.
Examples:
*[[User:Rudxain/Unix|Unix-like systems]], and their [https://pubs.opengroup.org/onlinepubs/9799919799/idx/utilities.html utilities]
*[[wikipedia:MS-DOS|MS-DOS]], because it's the common subset among [[Microsoft Windows|Windows]] systems
*[[wikipedia:C_(programming_language)|C]]. BTW, there's a C-compiler that makes ''extremely''-portable executables.<ref>https://justine.lol/cosmopolitan/</ref>


===Interoperability===
===Interoperability===
{{Main|wikipedia:Interoperability}}
{{Main|wikipedia:Interoperability}}
Ensure the tool-set/tool-chain you use is like an orchestra: there must be some ''harmony''. That is, ensure many tools can communicate with each other using common formats and protocols. Ensure ''those'' formats and protocols follow the same guidelines as the tools (simple, [[wikipedia:Open_standard|open]], ubiquitous, etc...). In short, follow [[wikipedia:Unix_philosophy|the Unix Philosophy]]. Even a tiny set of simple tools can be orders-of-magnitude more useful than a single simple tool.
Ensure the tool-set/tool-chain you use is like an orchestra: there must be some ''harmony''. That is, ensure many tools can communicate with each other using common formats and protocols. Ensure ''those'' formats and protocols follow the same guidelines as the tools (simple, [[wikipedia:Open_standard|open]], ubiquitous, etc...). In short, follow [[wikipedia:Unix_philosophy|the Unix Philosophy]]. Even a tiny set of simple tools can be orders-of-magnitude more useful than a single simple tool.
Examples:
*[[wikipedia:Lua|Lua]]. A simple and powerful lang built for embeddability and [[wikipedia:Extensibility|extensibility]]. It's also '''the''' lang used to make MediaWiki modules.
*[[wikipedia:Zig_(programming_language)|Zig]], which has "reusable software" as part of its slogan. It also has C [[wikipedia:Interoperability|interop]]. However, it's still in an [[wikipedia:API#Public_API_implications|API-unstable]] state, so you'll have to wait before everything is settled.


===Archivability===
===Archivability===
(yes, that's a [[wikt:archivability|real word]]) this is more about data/info than computing. When all else fails, at the very least, ensure data can be easily copied and archived. This isn't just for tools, it's about any kind of data: personal memories, historical events, etc...
(yes, that's a [[wikt:archivability|real word]]) this is more about data/info than computing. When all else fails, at the very least, ensure data can be easily copied and archived. This isn't just for tools, it's about any kind of data: personal memories, historical events, etc...


Universal truths, such as those found in math and physics, can be "extracted" and derived any time. But ''events'' are more unique, so those are in great danger of being forgotten (see also: [[wikipedia:Lost_media|lost media]]).
Universal truths, such as those found in math and physics, can be "extracted" and derived any time. But ''events'' are more unique, so those are in great danger of being forgotten (see also: [[wikipedia:Lost_media|lost media]]). You don't have to become a [[wikipedia:Digital_hoarding|data hoarder]], just focus on important data.
 
BTW, there's a common misconception that physical media is better than digital media. The real problem is [[Cloud (service)|cloud]] media: the owners of the server hosting the media can delete it or [[Pay-walling|paywall]] it anytime they want. Physical media is ''still'' digital (unless it's analog, like magnetic tape or vinyl records), it's just outside of a device.
 
==Suggestions==
Ideally, this should be a guide, but there is no one-size-fits-all guide to "achieve permacompute nirvana". So here's a list of my own concrete suggestions and examples:
 
===Programming languages===
If you've seen [[User:Rudxain/Unix|my Unix article]], you probably already know that [[wikipedia:POSIX|POSIX]] [https://pubs.opengroup.org/onlinepubs/9799919799/idx/utilities.html utilities] are the best practical/pragmatic choice. Most notably, <code>sh</code> and [[wikipedia:C_(programming_language)|C]] are the most popular, so you can assume they're portable simply because of their ubiquity. There's even a project that allows compiling C into ''extremely''-portable executables.<ref>https://justine.lol/cosmopolitan/</ref>
 
100R recommends [[wikipedia:Forth_(programming_language)|Forth]].
 
There's also [[wikipedia:Zig_(programming_language)|Zig]], which has "reusable software" as part of its slogan. It also has good-enough C [[wikipedia:Interoperability|interop]]. However, it's still in an [[wikipedia:API#Public_API_implications|API-unstable]] state, so you'll have to wait before everything is settled.
 
If you're a permacomputing ''extremist'', I'd recommend more "universal" langs, which tend to be [[wikipedia:Turing_tarpit|Turing tarpits]]:
 
*The [[wikipedia:Lambda_calculus|λ-Calculus]] family is, IMO, the most minimal of all. No way to beat it!<ref>{{Cite web |last=Tunney |first=Justine |date=2022-02-27 |title=Lambda Calculus in 383 Bytes |url=https://justine.lol/lambda/ |access-date=2026-04-26}}</ref>
*The [[wikipedia:Lisp_(programming_language)|Lisp]] family is the best example of syntactical/grammatical simplicity. But some can be semantically complex.<ref>{{Cite web |last=Tunney |first=Justine |date=2021-10-30 |title=SectorLISP Now Fits in One Sector |url=https://justine.lol/sectorlisp/ |access-date=2026-04-26}}</ref>
*Any lang that has an almost 1-to-1 mapping to [[wikipedia:Turing_machine|Turing Machines]] (such as [[wikipedia:Brainfuck|Brainfuck]]), is also a good candidate, since they're easy to implement on real computers. But they can be slow because of their [[wikipedia:Sequential_access_memory|sequential-access memory]]. You might want a [[wikipedia:Random-access_machine|RAM]].
 
If you care more about reliability and [[wikipedia:Fault_tolerance|fault tolerance]] than simplicity:
 
*🦀 [[wikipedia:Rust_(programming_language)|Rust]]. My fav <s>and my wife, but I'm considering an affair with Zig</s>.
*[[wikipedia:Erlang_(programming_language)|Erlang]] and [[wikipedia:Elixir_(programming_language)|Elixir]]
*[[wikipedia:Ada_(programming_language)|Ada]]
 
===Systems===
If you have them available, choose Unix-like systems and/or [[wikipedia:MS-DOS|MS-DOS]]. Avoid [[Microsoft Windows|Windows]] and [[Apple macOS|Mac]]!


If you don't have [[wikipedia:Operating_system|OSes]] available, you'll have to make one from scratch. While this seems hard (and it is), it's actually ''much'' easier when you focus on basic features of an OS, and avoid all the "nice" features and complex optimizations. There was a time when [[wikipedia:Boot_disk|bootable programs]] where the norm, and each program needed a basic "kernel" to manage resources.<ref>{{Cite web |last=Muratori |first=Casey |date=2018-05-12 |title=The Thirty Million Line Problem |url=https://youtu.be/kZRE7HIO3vk |url-status=live |access-date=2026-03-15 |website=Molly Rocket |via=YouTube}}</ref>
BTW, there's a common misconception that physical media is better than digital media. The main problem is [[wikipedia:Centralized_computing|centralized]] media (typically on the [[Cloud (service)|cloud]]). Physical media is ''still'' digital (unless it's analog, like magnetic tape or vinyl records), it's just outside of a device.


==External links==
==External links==
Line 77: Line 62:
==See also==
==See also==


*[[wikipedia:Appropriate_technology|Appropriate technology]]
*[[Projects:Archive everything|Archive everything]]
*[[Projects:Archive everything|Archive everything]]
*[[Self-hosting]]
*[[Self-hosting]]
*[[wikipedia:KISS_principle|K.I.S.S. principle]]
*[[wikipedia:Minimalism_(computing)|Minimalism in computing]]
*[[wikipedia:Fault_tolerance|Fault tolerance]]


==References==
==References==
{{reflist}}
{{reflist}}