Question: Is there any reason why the command `until` was implemented into bash/shell (I'm still unsure which)? Is there anything you can't do with a negation on a `while` statement? Is it faster than using the `NOT` CPU function? - unlikely...

Answer: 
Bash supports it because it conforms to POSIX - specifically, [IEEE Std 1003.1, 2004 Edition - Shell Command Language - The until Loop](http://pubs.opengroup.org/onlinepubs/009696699/utilities/xcu_chap02.html#tag_02_09_04_11). The feature predates GNU, and GNU `bash` repo has it [since the 1st commit](http://git.savannah.gnu.org/cgit/bash.git/diff/parse.y?id=726f63884db0132f01745f1fb4465e6621088ccf) 21 years ago.

[As Guillaume also explains in another answer](https://stackoverflow.com/a/43318769/648265), **the rationale behind the feature was (a misguided attempt at) readability.** They tried to micromanage things here because **shell language was initially targeted at end users** rather than professional programmers (like BASIC and SQL).

However, **such redundant syntax** that does exactly the same thing at the same code complexity **proved to be more trouble than it's worth**: by providing two, rather than one, canonical forms for a stock construct, it actually hurt readability rather than improve it and introduced unnecessary decisions to make1. That's why it's only present in a few languages designed around that time and likewise intended to be "close to natural language" - like Perl and Visual Basic.

**Nowadays, this approach has evolved into the [syntax sugar](https://en.wikipedia.org/wiki/Syntax_sugar) concept**2: a redundant construct is only introduced if it significantly simplifies code by replacing an entire boilerplate construct that is used sufficiently often. C# is a good example of this.

---

1"which one to use here? change it when I change the condition or not? why do I even care?" From my experience, it's the same in Pascal procedures vs functions: I remember having to switch a subroutine between these two multiple times as I design the code. It simply imposes redundant work on the programmer, thus wasting their time.

2I narrow down the term here because I'm expressing things from a language designer's point of view. It's rather "what is now considered good syntax sugar". Since from a language designer's POV, any other SS effectively doesn't exist.
The reason for such statement is not so much technical (indeed, a inverted `while` would have the same meaning) but semantic.

`until (condition) {do something}`

can be closer to natural language than

`while (not condition) {do something}` 

This is especially true when the condition itself is expressed as a negative, as reading multiple negations does not flow as neatly: 

`while (not not_connected) {}`
vs
`until (not_connected) {}`.