CLOSED: [2017-02-10 Fri 22:22] :PROPERTIES: :ID: 2017-02-10-evolution-of-systems :CREATED: [2017-02-09 Thu 20:30] :END: :LOGBOOK: - State "DONE" from "DONE" [2020-09-24 Thu 15:21] - State "DONE" from "NEXT" [2017-02-10 Fri 22:22] :END: Update 2020-09-24: Unix pipes as an information-centric approach Throughout the history of the modern computer, there were several evolutional steps related to the way we interact with the system. I tend to categorize those steps as following: 1. Numeric Systems 2. Application-Specific Systems 3. Application-Centric Systems 4. Information-Centric Systems 5. Application-Less Systems Following sections describe how I see those categories. *** Numeric Systems [[https://en.wikipedia.org/wiki/History_of_computing_hardware][Early computers]] were designed with numbers in mind. They could add, subtract, multiply, divide. Some of them were able to perform more complex mathematical operations such as differentiate or integrate. If you map characters to numbers, they were able to «compute» [[https://en.wikipedia.org/wiki/String_%28computer_science%29][strings]] as well but this is somewhat «creative use of numbers» instead of meaningful processing arbitrary information. *** Application-Specific Systems For higher-level problems, pure numeric systems are not sufficient. Application-specific systems were developed to do one single task. They were very similar to numeric systems. However, with sufficiently complex number calculations, systems were able to accomplish very well-defined higher level tasks such as calculations related to scheduling problems or other optimization problems. Systems of this category were built for one single purpose, one distinct problem they solved. *** Application-Centric Systems Systems that are application-centric are the first real general purpose systems. Their main usage style is still mostly application-specific but with multiple applications working either time-sliced (one app after another) or in multi-tasking mode (multiple apps at the same time). Early personal computers [[https://en.wikipedia.org/wiki/Xerox_Alto][from the 70s]] of the previous century were the first application-centric systems that became popular for a wide group of people. Yet modern operating systems - Windows, macOS, most GNU/Linux desktop environments - still follow the same principles. Of course, there are sub-categories as well: 1. Strict Application-Centric Systems 2. Loose Application-Centric Systems Strict application-centric systems such as [[https://en.wikipedia.org/wiki/Windows_3.1x][Windows 3.1]] (Program Manager and File Manager) or even the initial version of [[https://en.wikipedia.org/wiki/Windows_95][Windows 95]] had no pre-defined folder hierarchy. The user did start text processing software like [[https://en.wikipedia.org/wiki/Microsoft_Word][WinWord]] and saved the files in the program folder of WinWord. When working with a spreadsheet program, its files were saved in the application folder of the spreadsheet tool. And so on. Users did not create their own hierarchy of folders mostly because of convenience, laziness, or because they did not saw any necessity. The number of files per user were sill within dozens up to a few hundreds. For accessing information, the user typically opened an application and within the application, the files containing the generated data were retrieved using file/open. It was [[https://en.wikipedia.org/wiki/Windows_95][Windows 95]] SP2 that introduced «[[https://en.wikipedia.org/wiki/My_Documents][My Documents]]» for the Windows platform. With this file hierarchy template, application designers began switching to «My Documents» as a default file save/open location instead of using the software product installation path. This made the users embrace this pattern and start to maintain folder hierarchies on their own. This resulted in loose application-centric systems: typical file retrieval is done via a file manager. When a file is opened, the associated application is started by the operating system. It is a small or subtle but very important usage shift. Application-centric systems are still the dominant usage pattern for personal computers. Nevertheless, this pattern comes with many disadvantages. For example in order to prevent data retrieval problems, there is the need to maintain a strict hierarchy of folders that contain all related files of a given project. Unfortunately, nature does not fit well in strict hierarchy of folders. Further more, [[http://karl-voit.at/tagstore/downloads/Voit2012b.pdf][this does not scale well]]. Desktop search engines and advanced data organizing tools like [[http://karl-voit.at/tagstore/][tagstore]] are able to smooth the edged a bit. As studies show, only a minority of users are using such advanced retrieval tools. Most users still navigate through the file system without using any alternative or supplemental retrieval techniques. *** Information-Centric Systems One possible way of dealing with the issue that a certain topic needs to have a folder that holds all related files is to switch from an application-centric system to an information-centric systems. Instead of opening a spreadsheet application to work with the project budget, opening a word processor application to write the project report, and opening another tool to work with image files, an information-centric system combines all information on the project of various type in one place, in one "application". The calculations for the previous month is right beneath notes from a client meeting which is right beneath a photography of the whiteboard notes which is right beneath some todo tasks. Without any application or file border in between. Early attempts to create such an environment were IBM [[https://en.wikipedia.org/wiki/OS/2][OS/2]], Microsoft [[https://en.wikipedia.org/wiki/Object_Linking_and_Embedding][OLE]] or [[https://en.wikipedia.org/wiki/NeXT][NeXT]]. None of them were a major success for a variety of reasons. A very interesting information-centric environment is [[https://en.wikipedia.org/wiki/Acme_%28text_editor%29][Acme]] from [[https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs][Plan 9]]. It combines [[https://en.wikipedia.org/wiki/List_of_Plan_9_applications][a wide variety of applications]] within one application but it never reached a notable distribution even with its ports to Windows or GNU/Linux. In a way, the [[https://en.wikipedia.org/wiki/Pipeline_(Unix)][Unix pipeline]] implements the concept of information-centric computing: data is put into a pipeline. The tools that get combined in this pipeline manipulate the data. The combined set of tools deliver functionality which was not available within one single tool beforehand. This idea got my attention by [[https://ag91.github.io/blog/2020/08/14/linux-unix-philosophy-and-why-programs-are-just-filters/][that article]] about the book [[https://www.goodreads.com/book/show/2084939.Linux_and_the_Unix_Philosophy][Linux and the Unix Philosophy]]. Modern approaches for an information-centric system are advanced [[https://en.wikipedia.org/wiki/Personal_wiki][personal wikis]] like [[https://en.wikipedia.org/wiki/TheBrain][TheBrain]] or [[https://en.wikipedia.org/wiki/Microsoft_OneNote][Microsoft OneNote]] or the [[https://www.mercuryos.com/][Mercury concept]]. My personal tool of choice is the [[id:tags-emacs][GNU/Emacs]] platform with its [[id:tags-emacs][Org-mode]] extension. I hardly leave Org-mode when I work with my computer. For accessing external data sources, I created [[https://github.com/novoid/Memacs][Memacs]] which brings me a broad variety of data into Org-mode. I love to do spreadsheet calculations right beneath scheduled tasks, in-line images, internal and external links, and so forth. It is truly an information-centric system where the user doesn't have to deal with application borders or strictly hierarchical file-system folders. Multi-classifications is possible using simple or advanced tagging. All kinds of views can be derived with a single command. One of those views is my calendar, the agenda. Another derived view is the list of borrowed things. And so on. There are no limits for Org-mode users. If you can think of it, it is most likely possible within Org-mode. Is this the end of the evolution? Certainly not. *** Application-Less Systems :PROPERTIES: :END: I can think of a class of systems which I refer to as application-less systems. As the next logical step, there is no need to have single-domain applications even when they are as capable as Org-mode. The computer offers a nice to use interface to information and features, not files and applications. Even a classical operating system is not accessible. Application-less systems might as well be combined with [[https://en.wikipedia.org/wiki/Artificial_intelligence][artificial intelligence]]. Think of it as some kind of [[https://en.wikipedia.org/wiki/HAL_9000][HAL 9000]] from [[https://en.wikipedia.org/wiki/2001:_A_Space_Odyssey][A Space Odyssey]]. Or [[https://en.wikipedia.org/wiki/LCARS][LCARS]] from Star Trek. It is hard to believe that there is a transition between our application-based, vendor-based software culture and application-less systems. Maybe the open source movement with its slow but constant development will be able to form a truly application-less environment where all kinds of organizations and people are contributing to. Information and features to retrieve and manipulate information, this is all it takes. This is all we need. Everything else is just limiting distraction.