You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
clyde/README.md

99 lines
4.7 KiB
Markdown

2 years ago
# clyde
A command-line shell. Initial development is for Windows because Windows has
the worst starting point when it comes to CLI shells. Assuming nothing here
works and it doesn't even compile.
## Background
The needs of this project reflect my professional experience working on
multiplayer video games. Prior to working in the games industry, I worked in
the web industry, primarily writing server software. The working practices of
programmers in these industries differ substantially. The large differences in
these working practices create a substantial and difficult social divide
within studios that make multiplayer games. These social differences make an
already-difficult category of software even more difficult to develop. The
goal of this project is to reduce the tooling divide that exists between
client and server developers at multiplayer game studios, with the expectation
that shrinking this tooling gap can reduce the social divide that exists
between game developers and server/infrastructure developers at game studios.
### Windows is a hard requirement
The first gap that appears within the greater software developer landscape is
the question of using Windows at all. Let us dispense with this question
immediately: Windows is a necesary tool within the game development industry.
Supporting Windows is a hard requirement of this project.
Many necessary tools, such as tools provided by game console manufacturers and
tools that integrate with the dominant game engines (Unity and Unreal) only
support Windows. If your reaction to this is "don't use those tools" or "make
your game in Godot", please just stop. This is a very common reaction from
professional programmers who have never worked in gamedev, who don't
understand the constraints that most game developers face. Unfortunately a
large portion of programming discussion happens on Hacker News, Reddit, and
Lobsters, each of which uses a democratic structure.
I will not attempt to convince you that Windows is broadly
unavoidable in professional game development and that Windows is a necessary
tool for game development studios, even studios that employ engineers for whom
Windows is not necessary for their individual role. If you want to advocate
for Linux superiority, please go bother Nintendo, Sony, Microsoft, etc, not
individual game developers. If you really can't get over this and feel the
need to yell at me, please walk a few hundred yards into a dense forest and
scream your complaints into the wilderness to feel better.
The command-line environments built into Windows are incredibly primitive.
These environments are so primitive that millions of professional programmers
who work primarily on Windows are led to believe that command-line
environments themselves are *inherently* primitive.
. The limitations of built-in
command-line environments on Windows is so severe that there are entire
categories of professional computer programmers who believe that they are "not
terminal people", often without realizing that the terminal on Linux and MacOS
is a vastly different experience and different tooling ecosystem than it is on
Windows. Many professional Windows developers believe that CLI environments
are inherently primitive, because their only exposure to CLI environments is
through the built-in Windows shells.
Windows ships with two built-in
shells. The first shell is the Command Prompt, which we'll refer to as
[cmd.exe](https://en.wikipedia.org/wiki/Cmd.exe) as it is colloquially known,
even when running inside of
[terminal.exe](https://en.wikipedia.org/wiki/Windows_Terminal). The second
shell is [PowerShell](https://en.wikipedia.org/wiki/PowerShell).
### Insufficiency of cmd.exe
The insufficiency of cmd.exe is widely understood to people with experience
with Unix-like operating systems such as Linux and MacOS, which typically
include either [bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) or
[zsh](https://en.wikipedia.org/wiki/Z_shell). This insufficiency is severe
enough that it drives people off of Windows entirely.
In some industries, such as games, Windows is a required development
environment, because many tools are available only on Windows. Free software
purists who want to insist that you can make video games on Linux, please feel
free to leave now, this project is not for you.
## Terimology
- **executable**: a shell built-in or an executable file (i.e., an .exe file)
## examples
$> a
Find an executable named `a` somewhere on `PATH` and execute it in the
foreground.
$> ./a
Use an executable named `a` within the current directory and execute it in the
foreground. `a` must be a file in the current directory. If `a` would refer to
both a shell built-in and a file in the current directory, use the file in the
current directory.
$>