master
Miloslav Ciz 6 months ago
parent edfdeccc52
commit 39b1169fbf

@ -0,0 +1,26 @@
# Cache
Cache is a very small but fast computer [memory](memory.md) that helps make communication between computer components much more efficient (typically by making it much faster or taking less bandwidth) by remembering recent requests and answers so that they don't have to be expensively repeated. The concept of cache memory is extremely important and one of the very basics for designing and [optimizing](optimization.md) [hardware](hardware.md) and [software](software.md) (as cache may be implemented both in hardware and software). A cache may also help prevent expensively recomputing results of [function](function.md)s in the same way, by remembering the recent results of the function (we may see this as a more abstract CPU-function communication). Though caches find wide use almost everywhere, without further specifying the context or type of cache the word *cache* most often refers to the [CPU](cpu.md) cache -- cache memory found in a CPU (nowadays in all PC CPUs, however still NOT in all [embedded](embedded.md) CPUs), which is typically further subdivided into multiple levels (L1, L2 etc.) -- here we will be using the term cache the same way, but keep in mind the principles apply everywhere and caches really are used in many places. Cache is not to be confused with a [buffer](buffer.md) (which also helps optimize communication but rather by means of creating bigger chunks to be transferred at once).
**Basic principle**: cache can be seen as a [black box](black_box.md), "man in the middle" component that's placed in the line of communication between a CPU and main memory (RAM). (Physically it is nowadays part of the CPU itself, but we may imagine it as a separate component just sitting "on the wire" between CPU and RAM.) When reading from memory, we have a pretty simple situation -- once CPU requests something from the memory, the request first goes to the cache; if the cache has the result stored, it just quickly returns it -- we call this a **cache hit** (this is good, we saved time!). A **cache miss** happens when the cache doesn't have the result stored -- in such case the cache has to expensively forward the request to the memory and retrieve the data; usually the cache retrieves a whole smaller block of memory because it can be expected the CPU will access something in nearby memory in the near future (see the principle of locality below). When writing data to memory the situation is a bit more complex as the cache may choose different [strategies](strategy.md) of behavior: for simplicity it may just write the data through every time, but a more efficient (and also more complicated) approach is to just store the data for itself and write it to the main memory only when necessary (e.g. when it needs to load a different block of memory). Here we get into things such as cache coherence etc., which may cause pretty nasty [bug](bug.md)s and headaches.
Programmers often try to [optimize](optimization.md) their programs by making them "cache friendly", i.e. they try to minimize long jumps in memory which causes a lot of cache misses and slows down the program. A typical example is e.g. storing image data in the order by which it will be written to the screen.
A cache is related and/or exploits some observations and concepts related to computers such as:
- **principle of locality**: Computers (/CPUs) tend to more often than not access data that are close to each other in memory, i.e. a CPU doesn't typically make [random](randomness.md) jumps in memory but rather e.g. reads a sequence of bytes one after another from an [array](array.md) or [struct](struct.md). For this reason when a CPU pulls something out of memory, there is a high probability of accessing an address that is nearby to this memory next time -- a cache helps us get ready for this by prefetching this nearby data and having it ready for very
fast access.
- **[memory](memory.md) hierarchy**: Mostly because of the principle of locality computer memory is divided into different levels, a chain of memories that get progressively further away from the CPU, increasing their size (decreasing price for capacity) as they get further away but also decreasing their speed. Here a cache can be seen as the closest memory to the CPU, i.e. being the smallest, most expensive but also fastest memory. By extension we can see that RAM can in many cases be seen as a "cache" for the hard drive, hard drive can be seen as "cache" for the network (after all web browsers ARE caching websites into files on the disk) etc.
- **[dynamic programming](dynamic_programming.md)**: Dynamic programming is a programming technique revolving around remembering already calculated results so that we don't have to compute them again in the future -- this is basically what caches do, they remember results we obtained in relatively expensive way so that next time we can get them cheaper.
- ...
```
_____ _____ ______ __________
| | _______ | | | | | |
| CPU | <---> | cache | <---> | RAM | <---> | disk | <---> | Internet |
|_____| """"""" |_____| |______| |__________|
small big huge gigantic
fast slowish super slow extremely slow
```
*Cache resides very close to the CPU within the memory hierarchy.*

@ -4,6 +4,10 @@
TODO
{ TODO: do more research about the engine, attempt to translate the Russian YT video. ~drummyfish }
{ TODO: do more research about the engine, attempt to translate the Russian YT video, reach the devs. ~drummyfish }
**The engine** is possibly the most [interesting](interesting.md) part of the game as it used a combination of ["2.5D"](pseudo3d.md) level rendering and "true 3D" polygonal models for things like level decorations, enemies and weapon view model. Not much is known about the internals as the whole code is proprietary and "closed source", we may only inspect it visually and through [reverse engineering](reverse_engineering.md). To us it is not known if environment rendering uses [BSP](bsp.md) rendering, [portal rendering](portal_rendering.md), [raycasting](raycasting.md), something similar or whether it just utilizes its 3D model renderer for levels too, however there are some 2.5D simplifications going on as levels are defined as 2D (no room-above-room) and looking up/down is faked (even for the environment inserted "true 3D" models). The game's level editor shows levels use a square grid on which however it is possible to place even non-90 degree walls. There is also a [lightmap](lightmap.md) lighting system present allowing [dynamic](dynamic.md) lights -- a pretty advanced feature, though the lightmap only seems to be 2D, just as the level itself.
The game requirements were a [486](486.md) [CPU](cpu.md) (which reached 100 MHz at most), 16 MB [RAM](ram.md) and 75 MB storage space.
**The engine** is possibly the most [interesting](interesting.md) part of the game as it used [software rendering](sw_rendering.md) that combined a ["2.5D"](pseudo3d.md) level rendering and "true 3D" polygonal models for things like level decorations, enemies and weapon view model. Not much is known about the internals as the whole code is proprietary and "closed source", we may only inspect it visually and through [reverse engineering](reverse_engineering.md). To us it is not known if environment rendering uses [BSP](bsp.md) rendering, [portal rendering](portal_rendering.md), [raycasting](raycasting.md), something similar or whether it just utilizes its 3D model renderer for levels too, however there are some 2.5D simplifications going on as levels are defined as 2D (no room-above-room) and looking up/down is faked (even for the environment inserted "true 3D" models, the up/down look is limited to just a small offset probably to mask the "2.5D" nature of the engine). In fact it isn't even possible to have different height levels of floor, all levels just have the same floor height (ceiling height can be set though)! This is masked a bit by using 3D models onto which it is indeed possible to jump. The game's level editor shows levels use a square grid on which however it is possible to place even non-90 degree walls. There is also a [lightmap](lightmap.md) lighting system present allowing [dynamic](dynamic.md) lights -- a pretty advanced feature, though the lightmap only seems to be 2D, just as the level itself. Destructible environment is also faked in some levels by having a 3D model behaving like part of a wall, then disappearing when destroyed.
Apart from the engine the game was also nice for being quite [KISS](kiss.md), taking similar approach to e.g. [Anarch](anarch.md) by using very minimal menu and controls: for example there is no door opening or "use" button, items just activate by proximity, weapon switching is also performed by single button. This is actually quite nice as setting up controls and learning them is many times something that just puts you off.

@ -16,6 +16,6 @@ In 2019 drummyfish has written a "manifesto" of his ideas called **Non-Competiti
{ Why doxx myself? Following the [LRS](lrs.md) philosophy, I believe information should be free. [Censorship](censorship.md) -- even in the name of [privacy](privacy.md) -- goes against information freedom. We should live in a society in which people are moral and don't abuse others by any means, including via availability of their private information. And in order to achieve ideal society we have to actually live it, i.e. slowly start to behave as if it was already in place. Of course, I can't tell you literally everything (such as my passwords etc.), but the more I can tell you, the closer we are to the ideal society. ~drummyfish }
He likes many things such as animals, peace, freedom, programming, [math](math.md) and [games](game.md) (e.g. [Xonotic](xonotic.md) and [OpenArena](openarena.md), even though he despises [competitive](competition.md) behavior in real life).
He likes many things such as animals, peace, freedom, programming, [math](math.md) and [games](game.md) (used to play [Xonotic](xonotic.md) and [OpenArena](openarena.md), even though he despises [competitive](competition.md) behavior in real life). He plays piano and drums a little bit and tries to pick up new things like [chess](chess.md) or language learning.
**Does drummyfish have [divine intellect](terry_davis.md)?** Hell no, but thanks to his extreme tendency for isolation, great curiosity and obsession with truth he is possibly the only man on Earth completely immune to propaganda, he can see the world as it is, not as it is presented, so he feels it is his moral duty to share what he is seeing. He is able to overcome his natural dumbness and low [IQ](iq.md) by tryharding and sacrificing his social and sexual life so that he can program more. If drummyfish can learn to program [LRS](lrs.md), so can you.

@ -5,7 +5,7 @@ TODO
Fediverse is partly nice, employing a few cool ideas, but also quite [shitty](shit.md) -- it may be a relief, a less harmful alternative to proprietary social media, but it's definitely not the way of [good technology](lrs.md). With time it will very likely keep degenerating into more and more harmful thing, just like [Wikipedia](wikipedia.md) and similar big projects riding on the "FOSS" brand. The following is a list of some reasons why Fediverse sucks (keep in mind that some of them are not inherent but rather established properties of the network):
- It is **greatly [bloated](bloat.md)**, mostly relying on [modern](modern.md) browsers with [JavaScript](javasript.md) and [encryption](encryption.md), multiple complex [protocols](protocol.md), hugely complicated [backends](backend.md) etc.
- It is **[capitalist software](capitalist_software.md), trying to mimic capitalist ways** just with a "[FOSS](foss.md) sticker" on it, they just copy [twitter](twitter.md), [Facebook](facebook.md) and [reddit](reddit.md) closely, keeping it based on content consumerism, like whoring, friend whoring, scrolling addiction etc. -- a free license doesn't fix this. Fediverse doesn't care about actual freedom but rather about a "freedom" label, aiming more for getting big rather than getting actually good. A truly good network would just be based on a completely different set of ideas, see e.g. [gopher](gopher.md).
- It is **[censored](censorship.md) and greatly infected with [pseudoleftist](pseudoleft.md) ideology**. While decentralization prevents hardcore global blocks, most network instances just block the minority of instances that allow [free speech](free_speech.md), creating isolated islands, most of which have speech filters etc. Furthermore people using these networks are for the greatest part [soyboys](soyboy.md), soydevs and [SJW](sjw.md)s circlejerking their posts, blocking everyone else AND the software project themselves are made by the same people, employing [codes of censorship](coc.md) etc.
- It is **[capitalist software](capitalist_software.md), trying to mimic capitalist ways** just with a "[FOSS](foss.md) sticker" on it, they just copy [twitter](twitter.md), [Facebook](facebook.md) and [reddit](reddit.md) closely, keeping it based on content consumerism, like whoring, friend hoarding, scrolling addiction etc. -- a free license doesn't fix this. Fediverse doesn't care about actual freedom but rather about a "freedom" label, aiming more for getting big rather than getting actually good. A truly good network would just be based on a completely different set of ideas, see e.g. [gopher](gopher.md).
- It is **[censored](censorship.md) and greatly infected with [pseudoleftist](pseudoleft.md) ideology**. While decentralization prevents hardcore global blocks, most network instances just block the minority of instances that allow [free speech](free_speech.md), creating isolated islands, most of which have speech filters etc. Furthermore people using these networks are for the greatest part [soyboys](soyboy.md), soydevs and [SJW](sjw.md)s circlejerking their posts, blocking everyone else AND the software projects themselves are made by the same people, employing [codes of censorship](coc.md) etc.
- It is **developed mostly by incompetent people** -- as said, the users and developers are mainstreamers, mostly 16 year old trans zoomers who just learned about computers and are just bashing together stuff in JavaScript, they have no real plan or vision, neither do they know anything about good technology design. The result looks accordingly.
- ...

@ -4,7 +4,7 @@
TODO: basic definitions
People who seriously look for attaining mental/spiritual freedom often resort to [asceticism](asceticism.md), at least for a period of time (e.g. [Buddha](buddha.md)) -- this is very commonly not done with the intent of actually giving up all materialistic pleasures forevermore, but rather to let go of the [dependency](dependancy.md) on the them, to know and see that one really can live without them if needed so that one becomes less afraid of losing them, which is often what internally enslaves us. Without even realizing it we are nowadays addicted to many things (games, social media, overeating, shiny gadgets, ...) like an alcoholic is to booze; it is not necessarily bad to drink alcohol, but it is bad to be addicted to it -- to free himself the alcoholic needs to abstain from alcohol for a long period of time. Our chains are often within ourselves: for example we often don't have the freedom to say what we want to say because that might e.g. ruin our career, preventing us from enjoying our expensive addictions -- once we don't worry about this, we gain the freedom to say what we want. Once you rid yourself of fear of jail, you gain the freedom to do potentially illegal things, and so on. Additionally going through the experience of letting go of pleasures very often opens up your eyes and mind, new thoughts emerge and one reevaluates what's really important in life.
People who seriously look for attaining mental/spiritual freedom often resort to [asceticism](asceticism.md), at least for a period of time (e.g. [Buddha](buddha.md)) -- this is very commonly not done with the intent of actually giving up all materialistic pleasures forevermore, but rather to let go of the [dependency](dependency.md) on the them, to know and see that one really can live without them if needed so that one becomes less afraid of losing them, which is often what internally enslaves us. Without even realizing it we are nowadays addicted to many things (games, social media, overeating, shiny gadgets, ...) like an alcoholic is to booze; it is not necessarily bad to drink alcohol, but it is bad to be addicted to it -- to free himself the alcoholic needs to abstain from alcohol for a long period of time. Our chains are often within ourselves: for example we often don't have the freedom to say what we want to say because that might e.g. ruin our career, preventing us from enjoying our expensive addictions -- once we don't worry about this, we gain the freedom to say what we want. Once you rid yourself of fear of jail, you gain the freedom to do potentially illegal things, and so on. Additionally going through the experience of letting go of pleasures very often opens up your eyes and mind, new thoughts emerge and one reevaluates what's really important in life.
Freedom is something promised by most (if not all) ideologies/movements/etc.; this is because without further specification the term is so wide it says very little -- the very basic thing to know is, of course, that **there is no such thing as general freedom**; one kind of freedom restricts other kinds of freedom -- for example so called freedom of market says that a rich capitalist is free to do whatever he wants, which leads to him enslaving people, killing the freedom of those people.

@ -1,12 +1,12 @@
# Gopher
Gopher is a network [protocol](protocol.md) for publishing, browsing and downloading files and is known as a much simpler alternative to the [World Wide Web](www.md) (i.e. to [HTTP](http.md) and [HTML](html.md)). In fact it competed with the Web in its early days and even though the Web won in the mainstream, gopher still remains used by a small communities (however the more dedicated, see e.g. [bitreich](bitreich.md)). Gopher is like the Web but well designed, it is the [suckless](suckless.md)/[KISS](kiss.md) way of doing what the Web does, it contains practically no [bloat](bloat.md) and so [we](lrs.md) highly advocate its use. Gopher inspired creation of [Gemini](gemini.md), a similar but bit more complex and "[modern](modern.md)" protocol, and the two together have recently become the main part of so called [Smol Internet](smol_internet.md). Gopher is much better than Gemini though. The set of all public gopher servers is called gopherspace.
Gopher is a network [protocol](protocol.md) for publishing, browsing and downloading files and is known as a much simpler alternative to the [World Wide Web](www.md) (i.e. to [HTTP](http.md) and [HTML](html.md)). In fact it competed with the Web in its early days and even though the Web won in the mainstream, gopher still remains used by small communities (usually the more dedicated though, see e.g. [bitreich](bitreich.md)). Gopher is like the Web but well designed, it is the [suckless](suckless.md)/[KISS](kiss.md) way of doing what the Web does, it contains practically no [bloat](bloat.md) and so [we](lrs.md) highly advocate its use. Gopher inspired creation of [Gemini](gemini.md), a similar but bit more complex and "[modern](modern.md)" protocol, and the two together have recently become the main part of so called [Smol Internet](smol_internet.md). Gopher is much better than Gemini though. The set of all public gopher servers is called gopherspace.
Gopher **doesn't use any [encryption](encryption.md)** (though some servers allow access via [Tor](tor.md)). **This is good, encryption is [bloat](bloat.md)**. Gopher also doesn't really know or care about [Unicode](unicode.md) and similar bloat (which mostly serves trannies to insert emojis of pregnant men into readmes anyway, we don't need that), it's basically just [ASCII](ascii.md). Gopher simple design is intentional, the authors deemed simplicity a [good](good.md) feature. Gopher is so simple that you may very well write your own client and server and comfortably use them -- **you can even browse gopher just by manually using [telnet](telnet.md)** to communicate with the server.
Gopher **doesn't use any [encryption](encryption.md)** (though some servers allow access via [Tor](tor.md)). **This is good, encryption is [bloat](bloat.md)**. Gopher also doesn't really know or care about [Unicode](unicode.md) and similar bloat (which mostly serves trannies to insert emojis of pregnant men into readmes anyway, we don't need that), it's basically just [ASCII](ascii.md) (of course you can employ Unicode as gopher just transfers files really, it's just that Unicode is not part of gopher's specification and most people prefer to keep it ASCII). Gopher's simple design is intentional, the authors deemed simplicity a [good](good.md) feature. Gopher is so simple that you may very well write your own client and server and comfortably use them -- **you can even browse gopher just by manually using [telnet](telnet.md)** to communicate with the server.
**How big is gopherspace?** As of 2023 the Veronica search engine reported 315 gopher servers in the world with 5+ million indexed selectors, which they estimated was 83% of the whole gopherspace (the peak server count was in 2020 at almost 400). Quarry search engine reports 369 servers and 1+ million indexed selectors. Contrition search engine reported even 495 servers and 7+ million selectors. Gopher LAWN directory (made by [bitreich](bitreich.md)) contains 281 selected quality gopher holes.
From the user's perspective the most important distinction from the Web is that gopher is based on **menus** instead of "webpages"; a menu is simply a column of items of different predefined types, most importantly e.g. a *text file* (which clients can directly display), *directory* (link to another menu), *text label* (just shows some text), *binary file* etc. A menu can't be formatted or visually changed, there are no colors, images, scripts or [hypertext](hypertext.md) -- a menu is not a presentation tool, it is simply a navigation node towards files users are searching for (but the mentioned ASCII art and label items allow for somewhat mimicking "websites" anyway). Addressing works with [URLs](url.md) just as the Web, the URLs just differ by the protocol part (`gopher://` instead of `http://`), e.g.: `gopher://gopher.floodgap.com:70/1/gstats`. What on Web is called a "website" on gopher we call a **gopherhole** (i.e. a collection of resources usually under a single [domain](domain.md)) and the whole gopher network is called a **gopherspace**. [Blogs](blog.md) are common on gopher and are called **phlogs** (collectively a *phlogosphere*). As menus can refer to one another, gopher creates something akin a **global [file system](file_system.md)**, so browsing gopher is like browsing folders and can comfortably be handled with just 4 arrow keys. Note that as menus can link to any other menu freely, the structure of the "file system" is not a [tree](tree.md) but rather a general [graph](graph.md). Another difference from the Web is gopher's great emphasis on **[plaintext](plaintext.md) and [ASCII art](ascii_art.md)** as it cannot embed images and other media in the menus (even though of course the menus can link to them). There is also a support for sending text to a server so it is possible to implement [search engines](search_engine.md), guest books etc.
From the user's perspective **the most important distinction from the Web** is that gopher is based on **menus** instead of "webpages"; a menu is simply a column of items of different predefined types, most importantly e.g. a *text file* (which clients can directly display), *directory* (link to another menu), *text label* (just shows some text), *binary file* etc. A menu can't be formatted or visually changed, there are no colors, images, scripts or [hypertext](hypertext.md) -- a menu is not a presentation tool, it is simply a navigation node towards files users are searching for (but the mentioned ASCII art and label items allow for somewhat mimicking "websites" anyway). Gopher is also often **browsed from the [command line](cli.md)**, though graphical clients are a thing too. Addressing works with [URLs](url.md) just as the Web, the URLs just differ by the protocol part (`gopher://` instead of `http://`), e.g.: `gopher://gopher.floodgap.com:70/1/gstats`. What on Web is called a "website" on gopher we call a **gopherhole** or just *hole* (i.e. a collection of resources usually under a single [domain](domain.md)) and the whole gopher network is called a **gopherspace**. [Blogs](blog.md) are common on gopher and are called **phlogs** (collectively a *phlogosphere*). As menus can refer to one another, gopher creates something akin a **global [file system](file_system.md)**, so browsing gopher is like browsing folders and can comfortably be handled with just 4 arrow keys. Note that as menus can link to any other menu freely, the structure of the "file system" is not a [tree](tree.md) but rather a general [graph](graph.md). Another difference from the Web is gopher's great emphasis on **[plaintext](plaintext.md) and [ASCII art](ascii_art.md)** as it cannot embed images and other media in the menus (even though of course the menus can link to them). There is also a support for sending text to a server so it is possible to implement [search engines](search_engine.md), guest books, [games](game.md) etc.
Gopher is just an [application layer](l7.md) [protocol](protocol.md) (officially running on [port](port.md) 70 assigned by [IANA](iana.md)), i.e it sits above lower layer protocols like [TCP](tcp.md) and takes the same role as [HTTP](http.md) on the Web and so only defines how clients and servers talk to each other -- the gopher protocol doesn't say how menus are written or stored on servers. Nevertheless for the creation of menus so called **gophermaps** have been established, which is a simple format for writing menus and are the gopher equivalent of Web's [HTML](html.md) files (just much simpler, basically just menu items on separate lines, the exact syntax is ultimately defined by server implementation). A server doesn't have to use gophermaps, it may be e.g. configured to create menus automatically from directories and files stored on the server, however gophermaps allow users to write custom menus manually. Typically in someone's gopherhole you'll be served a welcoming intro menu similar to a personal webpage that's been written as a gophermap, which may then link to directiories storing personal files or other hand written menus. Some gopher servers also allow creating dynamic content with scripts called **moles**.

@ -1,3 +1,6 @@
# Multi User Dungeon
TODO
{ WIP, researching. ~drummyfish }
**Are there any free MUD codebases written in good languages?** No. You have to write your own, it seems like MUD faggots don't wanna free their code, and if they do they write it in JavaScript++. Many times it's also because the old code (written in nice languages such as C) started to be created a long time ago when licenses weren't yet such a big thing or didn't exist at all. Some source available codebases are e.g. DikuMUD (written in C, marked LGPL on GitHub, however the code may be PROPRIETARY, their site explicitly mentions one of the original authors was unreachable during relicensing) and SMAUG (written in C, marked GPL on GitHub, however the code is most likely PROPRIETARY as it's a long chain of derivatives from some obscure weird licensed source).

@ -41,6 +41,7 @@ Here is a list of some projects and project ideas which we, [LRS](lrs.md), need
| [GUI](gui.md) library | easy/mid | | | |like SAF but for "PC" GUI (mouse, sound, ...), now GUI's a mess | |
| image/2D data library | mid? | | | | C/comun lib for bitmaps (FFT, formats, ...), needs good planning| |
| logic circuit library/simulator (comun)| mid/hard? | | | | will be needed for PD computer | |
| [MUD](mud.md) codebase (C or comun) | mid | | | | AFAIK there is no nice MUD codebase now | |
| nice polished concise encyclopedia | mid/hard? | | | | nice printable UNCENSORED encyclop. (clone of Larousse Desk E.) | |
| neural net/other ML library | hard? | | | | could use something KISS in pure C without needed python n shit | nothing |
|[PD computer](public_domain_computer.md)| very hard | | | | needs prerequisites done first (language, logic circ. lib., ...)| Thinkpads :) |

@ -6,7 +6,7 @@ Open source (OS) is a [capitalist](capitalism.md) movement/brand forked from the
Open source is unfortunately (but unsurprisingly) becoming more prevalent than free software, as it better serves [capitalism](capitalism.md) and abuse of people, and its followers are more and more hostile towards the free software movement. This is very dangerous, ethics and focus on actual user freedom is replaced by shallow legal definitions that can be bypassed, e.g. by [capitalist software](capitalist_software.md) and [bloat monopoly](bloat_monopoly.md). In a way open source is capitalism reshaping free software so as to weaken it and eventually make its principles of freedom ineffective. Open source tries to shift the goal posts: more and more it offers only an illusion of some kind of ethics and/or freedom, it pushes towards mere partial openness ("open source" for proprietary platforms), towards high complexity, inclusion of unethical business-centered features ([autoupdates](autoupdate.md), [DRM](drm.md), ...), high interdependency, difficulty of utilizing the rights granted by the license, exclusion of developers with "incorrect" political opinions or bad brand image etc. In practice open source has become something akin a mere **brand** which is stick to a piece of software to give users with little insight a feeling they're buying into something good -- this is called **[openwashing](openwashing.md)**. This claim is greatly supported by the fact that corporations such as [Microsoft](microsoft.md) and [Google](google.md) widely embrace open source ("Microsoft <3 open source", the infamous [GitHub](github.md) acquisition etc.).
One great difference of open source with respect to free software is that **open source doesn't mind proprietary dependencies**: [Windows](windows.md) only programs or [games](game.md) in [proprietary](proprietary.md) engines such as [Unity](unity.md) are happily called open source -- this would be impossible in the context of free software because as Richard Stallman says software can only be free if it is free as a whole, it takes a single proprietary line of code to allow abuse of the user. The "open source" communities nowadays absolutely **don't care a bit about freedom or ethics**, many "open source" proponents even react aggressively to bringing the idea of ethics up. "Open source" communities use locked, abusive proprietary platforms such as [Discord](discord.md) and [Micro$oft's](microsoft.md) [GitHub](github.md) to create software and collaborate -- users without Discord and/or GitHub account often aren't even offered a way to contribute, report bugs or ask for support.
One great difference of open source with respect to free software is that **open source doesn't mind proprietary dependencies**: [Windows](windows.md) only programs or [games](game.md) in [proprietary](proprietary.md) engines such as [Unity](unity.md) are happily called open source -- this would be impossible in the context of free software because as [Richard Stallman](rms.md) says software can only be free if it is free as a whole, it takes a single proprietary line of code to allow abuse of the user. The "open source" communities nowadays absolutely **don't care a bit about freedom or ethics**, many "open source" proponents even react aggressively to bringing the idea of [ethics](ethics.md) up. "Open source" communities use locked, abusive proprietary platforms such as [Discord](discord.md) and [Micro$oft's](microsoft.md) [GitHub](github.md) to create software and collaborate -- users without Discord and/or GitHub account often aren't even offered a way to contribute, report bugs or ask for support. There are many "open source" projects that are just meant to be part of a mostly proprietary environment, for example the [Mangos](mangod.md) implementation of [World of Warcraft](wow.md) server, which of course has to be used with the proprietary WoW client and with proprietary server assets, which gives Blizzard (the owner of WoW) complete legal control over any server running on Mangos (such servers always only rely on Blizzard tolerating their small noncommercial communities, despite Blizzard having taken some of them down with legal action) -- people prefer to use calling this open source as "free software" in this context already sounds laughable. Lately you will see more and more people calling software "open" as long as part of its source code is available for viewing on GitHub, no matter the license or any other considerations.
The open source definition is maintained by the [Open Source Initiative](osi.md) (OSI) -- they define what exactly classifies as open source and which [licenses](license.md) are compatible with it. These licenses are mostly the same as those approved by the [FSF](fsf.md) (even though not 100%). The open source definition is a bit more complex than that of free software, in a nutshell it goes along the lines:

@ -8,4 +8,6 @@ Examples of proprietary software are [MS Windows](windows.md), [MacOS](macos.md)
Proprietary software licenses are usually called [EULAs](eula.md).
By extension besides proprietary software there also exist other proprietary works, for example proprietary [art](art.md) or databases -- these are all works that are not [free cultural works](free_culture.md). Even though for example a proprietary movie probably isn't IMMEDIATELY as dangerous as proprietary software, it may be just as dangerous to society in the long run. Examples of proprietary art is basically anything mainstream that's not older than let's say 50 years: [Harry Potter](harry_potter.md), all Hollywood movies, basically all pop music, basically all AAA video [game](game.md) art and lore etcetc.
By extension besides proprietary software there also exist other proprietary works, for example proprietary [art](art.md) or databases -- these are all works that are not [free cultural works](free_culture.md). Even though for example a proprietary movie probably isn't IMMEDIATELY as dangerous as proprietary software, it may be just as dangerous to society in the long run. Examples of proprietary art is basically anything mainstream that's not older than let's say 50 years: [Harry Potter](harry_potter.md), all Hollywood movies, basically all pop music, basically all AAA video [game](game.md) art and lore etcetc.
**Is it ever okay to use proprietary software?** If you have to ask, the answer is no, you should avoid proprietary software as much as possible (considering in today's society you probably can't even take a shit without using some form of proprietary software). Proprietary software is [cancer](cancer.md), it is like hard drugs, poison, radioactive toxic material, biological virus -- you have to treat it as such. For this reason to most people, especially newcomers to the free world, the best, simplest and safest advice is to completely avoid anything proprietary; this helps you get out of the addiction, break out of the system, find free alternatives and avoid harm to yourself and others. Once one becomes an expert he start to see the answer may be more complex of course, as with everything -- for example in order to make a free [clone](clone.md) of something proprietary, we often have to [reverse engineer](reverse_engineering.md) it, which often means having to run it; however this has to only be done by experts who know the dangers and how to handle them, just like handling of a highly dangerous biological virus should only ever be done by an expert in safe laboratory under strictly controlled conditions.

@ -60,4 +60,6 @@ unsigned int factorial(unsigned int x)
How do the computers practically make recursion happen? Basically they use a [stack](stack.md) to remember states on each level of the recursion. In programming languages that support recursive function calls this is hidden behind the scenes in the form of [call stack](call_stack.md). This is why an infinite recursion causes stack overflow.
Another important type of recursion is **tail recursion** which happens when the recursive call in a function is the very last command. It is utilized in functional languages that use recursion instead of loops. This kind of recursion can be optimized by the compiler into basically the same code a loop would produce, so that e.g. stack won't grow tremendously.
Another important type of recursion is **tail recursion** which happens when the recursive call in a function is the very last command. It is utilized in functional languages that use recursion instead of loops. This kind of recursion can be optimized by the compiler into basically the same code a loop would produce, so that e.g. stack won't grow tremendously.
Mathematical recursive functions find use in [computability](computability.md) theory where they help us (similarly to e.g. [Turing machines](turing_machine.md)) define [classes](class.md) of functions (such as primitive recursive and partial recursive) by "how strong of a computer" we need to compute them.

@ -2,4 +2,6 @@
{ I hate disclaimers but I'm not advising you to commit fucking suicide, OK? I mean it's an option and sometimes it's the best option, but I want you to live if it's at least a little possible -- remember, LRS loves all life and all life is precious. We will all die, no need to rush it. Also if you're feeling like shit you can send me a mail, we can talk. ~drummyfish }
Suicide is when someone voluntarily kills himself. Suicide offers an immediate escape from [capitalism](capitalism.md) and is therefore a kind of last-resort hope; it is one of the last remaining freedoms in this world, even though capitalists can't profit from dead people and so are working hard on preventing people from killing themselves (rather than trying to make them NOT WANT TO kill themselves of course).
Suicide is when someone voluntarily kills himself. Suicide offers an immediate escape from [capitalism](capitalism.md) and is therefore a kind of last-resort hope; it is one of the last remaining freedoms in this world, even though capitalists can't profit from dead people and so are working hard on preventing people from killing themselves (rather than trying to make them NOT WANT TO kill themselves of course).
TODO: methods, add suicide by internet/free speech :D

@ -96,4 +96,5 @@ Other programming languages such as [PHP](php.md) can also be used on the web, b
- [IPFS](ipfs.md)
- [Internet](internet.md)
- [Kwangmyong](kwangmyong.md)
- [cyberspace](cyberspace.md)
- [how to make a website](how_to.md)
Loading…
Cancel
Save