# various ideas and notes floating around ## os rust development [Writing an OS in Rust](https://os.phil-opp.com/) Work up to this after some core system has been developed! We can mock an OS and dodge requiring the development of kernel code, drivers, etc. by running JOSS off of a shell on Linux, but this doesn't feel real in the way an operating system might. (Though it might be a good idea to avoid attempting to run on bare metal, if for no other reason than to preserve sanity…). Whatever the case, this is an excuse to work on real OS development in the future - we'll see how my system evolves down the line. ## permacomputing various resources about computing long term [permacomputing](id:d760c493-0377-495c-b259-f8e62a4b3561) - [LIMITS 2021 – Workshop on Computing within Limits](https://computingwithinlimits.org/2021/) Very cool organization and workshop system about computing with limits - using very small amounts of resource consumption, particularly with respect to software, in order to minimize our impact on the environment - and to preserve our sense of mental sanity. Most work, software or otherwise, is built upon pervasive, systemic that is opaquely and innefectively abstracted away from the user by end user systems - every little slip of a memory leak, an unabstracted design decision in a codebase, every crack in an iphone, etc. is a consequence of this complexity - but rolling back and redesigning systems to respect core computing can empower and enhance end users of the software we do. - [XXIIVV — permacomputing](https://wiki.xxiivv.com/site/permacomputing.html) Advocates for maintenance - encouraging programmers to refactor and rewrite programs to ensure that they're small and efficient. Reuse and repair of existing technology should be encouraged - preserve time and physical resources! Produces should be "designed for disassembly" - ensuring that they can be disassembled for repair and end of life so that even when the component is no longer useful, it can be reworked into other, relevant components. Lots of great resources throughout this article - become familiar with them. - "Collapse informatics" - taking advantage of today's computing to prepare for future infrastructure breaking down. Systems should anticipate intermittent energy supply, network connectivity and small, non-global community; making core assumptions about global, internet-fueled network and communication is postulated by this article to be completely unrealistic. - [Permacomputing \| viznut](http://viznut.fi/texts-en/permacomputing.html) Computers are failing their expectations at every turn - taking advantage of people rather than empowering them, and proliferating material usage rather than allowing others to scale down their dependence on energy and the environment. Machines are supposed to be "optimizing" things for us - they should be using energy wisely! - but they do quite the opposite, abusing resources and performance as "calculation factories" to occupy lots of space and resources. It's a miracle that chip innovation seems to be beating software bloat on most counts - somehow our systems do run faster despire all of the shit we keep piling onto them. We should optimize our systems for resource efficiency and local community networks! Programmers also often don't value any total understanding or control of the target system - utilizing whatever pile of high-level abstractions that their computer's dependent on rather than understanding how to integrate with systems and metal. It's important to, at times, work on the "computer's level" rather than the level of abstraction established for you to use! It's typically important to make as many programs as dumb as possible - if programs are tools, they should be understandable, predictable, and not get out of your way or handle any "magic". (This is the article's position; to me, programming systems that inspire a sense of wonder - i.e. the type that make end users wonder how certain systems are even possible - are probably the best and most interesting thing about computing). The article postulates that smart programs often complicate core missions and waste lots of computational resources to accomplish what it seems to frame as minimal gain - or, at least, something to be skeptical of. Postulates that communities that use technology should develop relationships with it - technology should be flexible, not live at the "app" abstraction layer! I believe in this too - it's vital for those who use technology to understand it. Users should put as much effort into understanding their technology as they do while using it; the 'app' and choices of modern operating systems have largely killed this mindset, but it's so important to bring hacking - true hacking - and true introspection back into the computer systems we use. We need to drop the proprietary OS - not through Android or some corporate watered-down sponsorship, but seriously 'reworking the system'! Software should be introspectable and societies should support its development. # an aside: what makes a relationship work? [Eight Dates: To keep your relationship happy, thriving and lasting: Gottman, …](https://www.amazon.com/Eight-Dates-relationship-thriving-lasting/dp/0241988357/) # Analysis of different programming systems - how do we categorize them? [Programming Languages](id:9d566115-cfc1-4fec-833e-636e69a4e4fe) [Staged Programming](http://web.cecs.pdx.edu/~sheard/staged.html) # I've been reading too much Spend more time working on the system than you do reading for/about it! I have more than enough "abstract" knowledge already, and what I don't have I have to collect via practical experience. In fact - whatever system I design should encourage design by experimentation, by trial and error, by composability - and a REPL based system is perfect for this; integrated into menus, as a data analysis tool, as an end-user interface, etc. I want inline repls everywhere to play with ideas, to get feedback, to query for more data - it's impossible for a UI to show everything, so it's the role of the system itself to allow the user to ask for what they want to see rather than trying to give them all of the information right away! The end user just needs the tools to do so. End user software should be configurable, interactive, and personalized - we should be able to ask questions of it and receive valuable answers, to analyze its insides and delve as deep as we desire, to transparently explore the depths of a system. Open source is so valuable for this, but it's not flexible and only touches small segments of computing - we might be able to do better.