What MS-DOS Can Do That Linux Can't

49 wizardforhire 66 6/11/2025, 4:59:41 AM webarchive.me ↗

Comments (66)

zevv · 1d ago
This article is partly wrong, and partly nonsense. Apples and oranges. But still:

> Work with only 3 files [...] Boot in under 5 seconds [...] Use commands without spaces [...] Run CPU opcodes natively [...] Be real

I have a little PCB here on my desk that runs linux with 2 files: vmlinux and busybox. It boots in about two seconds and yes, it runs CPU opcodes natively.

I'm not sure how being able to use commands without spaces or running in real mode is considered better or worse than the alternatives.

farseer · 1d ago
The article seems atleast 20 years old (Geocities archive). So in that context, your PCB would not have been able to run linux in 2 seconds.
Tor3 · 1d ago
On the other hand, when Linux was new (I switched to Linux in early 1992), you could install it all on a floppy and boot in a few seconds. Not much difference really. Just way more flexible with a Linux floppy than a DOS one.. I kept a Linux floppy around for doing various stuff with problematic PCs.

It's way more important (or was, at the time) that MS-DOS could run on 8088/8086 and '286, unlike regular Linux.

userbinator · 1d ago
you could install it all on a floppy and boot in a few seconds.

The first practically usable Linux kernel was already much bigger than the DOS kernel + shell + many utilities.

Tor3 · 1d ago
Not sure what you mean by practically usable Linux kernel. It was perfectly possible to use the < 1.0 kernels on a floppy, with enough tools to do useful work.
zevv · 1d ago
I'm afraid it would: in 2002 I was involved with the development of a very early wifi AP implementation at Freehosting; this was running uclinux on an ARM7 with a pretty bare kernel and the whole OS fitting in under a megabyte. Booting was already pretty much instantaneous then.
wobfan · 1d ago
But could it change directories with "cd.."? That's the big question.
rascul · 1d ago
20+ years ago I was able to boot Linux with Busybox on a Pentium 2 in under 5 seconds after the BIOS POST completes.
keithnz · 1d ago
20 years old? more like 30-35 years old
farseer · 1d ago
They mention Windows XP, which was released in 2001.
benterix · 1d ago
But this is an artifact of a distant past, a small glimpse of the Geocities era. We would write whatever was interested to us enjoying the whole process. Look at the Lisp "article":

http://webarchive.me/geocities/SiliconValley/2072/lisp.htm

just a few notes with the conclusion "Well, that's enough LISPing for now. I may add more to this page if I actually ever learn anything else about LISP."

For me this submission isn't so much about the content, rather about how different the world was back then.

zzo38computer · 1d ago
DOS does have the benefits mentioned in that article; modern computers do have too many complicated things that are too much required. However, I have some further comments.

> MS-DOS requires only 3 files to boot: IO.SYS, MSDOS.SYS, and COMMAND.COM.

Yes, although it is helpful to have other files, such as DEBUG. These are still smaller and faster files than a lot of modern ones, though.

> Run CPU opcodes natively

Other operating systems do too; most systems use native code. They mention the executable file format, which has to do with the operating system rather than how the CPU executes the program.

DOS has COM and EXE format. COM format is just the plain program code that runs, although there is still how the operating system is setting up the memory and stuff for running the program; it still isn't quite directly. EXE format is a more complicated format.

> Not to mention the fact that Linux is hard to fit in real mode because the kernel is so large. Getting it into 1 MB of memory is a trick. The MS-DOS kernel fits into a fraction of that space, with room to spare.

This is a benefit of DOS (it doesn't need a too large kernel), although there is also unreal mode, in case you want to be like real mode with more memory.

3036e4 · 1d ago
The single best thing about DOS in 2025 is that it is the base for the best virtual machine, DOSBox. If something runs in DOSBox it will always run. DOS software can not rot. No APIs change. And DOSBox has been ported to almost every platform, including browsers and phones.

Of course it would be nice to also see that kind of stability in modern systems, but since that seems to be impossible for no good reasons the next best thing is to run applications in a dead OS like DOS that has good emulators.

zzo38computer · 1d ago
This is a benefit of DOS (and other older systems which can also be emulated). This is a benefit which applies even if you are not using a DOS system. This is why I had sometimes suggested making programs for older systems, that it would then have this benefit whether or not you actually have those older systems.

(I am not sure that it is actually the "single best thing about DOS", but it is a good benefit anyways.)

cyberge99 · 1d ago
This is because DOS stopped. It effectively ended development, whereas Linux is still evolving.
3036e4 · 1d ago
Yes, but if someone created a "LinuxBox" emulator that provided a stable, never changing, fixed target for Linux software, I would be happy to have that installed everywhere and use it the same way I use DOSBox now. That would be possible even if Linux itself keeps evolving and diverging away from whatever version is emulated in that LinuxBox. But it would require a dedicated community of some critical mass that could agree on the importance of never falling to the temptation of ever upgrading any APIs bundled in that LinuxBox.
fsckboy · 1d ago
>In MS-DOS, you can type a command like "cd.." to move up a level, and it will work fine. In Linux, it will not; you need to type "cd ..". The different is the space in between. Similar examples abound; in MS-DOS, you can type "dir/p", without a space between the command and its switch. This is a big deal, even if it might not seem like it.

you can add those commands (as functions) to linux, but it would be a boneheaded thing to do.

  cd.. () { 
    cd ..
  }
and it does not work universally on DOS, only on builtins
3036e4 · 1d ago
One fun feature in DOS COMMAND.COM (I am not sure if this works in Windows shells as well?) is that you can type DIR.BAT instead of DIR *.BAT, for any file extension. Not sure how easy it would be to do that in most Linux shells? I can't think of a way to do it in bash, but maybe there is some place to hook in something like that?
boie0025 · 1d ago
When I first began experimenting with Linux my first frustration was that it "didn't support" cd.. my mind was blown when I mentioned it to a friend who promptly demonstrated that the use of a space between "cd" and ".." worked in both environments. I decided I should RTFM after that.
frizlab · 1d ago
Interestingly I have done that in my conf[1] (using an alias, which makes more sense IMHO).

[1] https://github.com/Frizlab/frizlabs-conf/blob/b60de058612d29...

M95D · 1d ago
I got so used to "cd..", that even now, after 10+ years of linux, I still sometimes type it wrong without a space.
antisol · 1d ago
Yep! I've been known to type it occasionally, 23 years after I switched my primary pc to Linux, and at least 15 years after my last windows machine.
dzhiurgis · 1d ago
if you got oh-my-zsh you can just ..
kazinator · 1d ago
Real mode is "bad" because it emulates a crappy processor from 1976 with a weird 16 bit segmented model in which a segment address is multiplied by 16 and added to the offset address, leading to 4096 ways of expressing the same pointer.

A real mode that provides a sane 32 or 64 bit address space, with the MMU disabled, would be totally cool.

userbinator · 1d ago
BIOSes since the 386 traditionally switched to https://en.wikipedia.org/wiki/Unreal_mode early in their init sequence.
JdeBP · 1d ago
Other way around. The processors came up in unreal mode, and it is only comparatively recently that the firmwares have had the possibility of not needing to do the whole "compatibility support" thing and just going straight from unreal mode to protected mode, without passing through real mode.
TowerTall · 1d ago
< In MS-DOS, you can type a command like "cd.." to move up a level, and it will work fine. In Linux, it will not; you need to type "cd ..". The different is the space in between.

That little detail is what I find most annoying when switching from Windows to Linux while having a life time of windows muscle memory in your fingers.

pajko · 1d ago
You might be able to create a shell alias named "cd.." or a short bash script "/usr/bin/cd.." with the appropriate content. Have no tried though.
jmholla · 16h ago
A bash script won't work because it will run `cd ..` in a new process which won't affect the current shell. But, the following do work in bash:

    alias cd..="cd .."
or this in your `.bashrc` or some file you source in your `.bashrc`:

    cd..() {
      cd ..
    }
Shorel · 1d ago
There are so many possible alias in Linux. Your can keep using all your muscle memory.

If it is annoying, just change .bash_aliases

O1111OOO · 12h ago
It didn't know webarchive.me existed. What a great time capsule if you start here: http://webarchive.me/geocities/ (I wonder how much space this is taking up)

Quick search on google using site search (site:http://webarchive.me) produces only this site (that is - google is not indexing the site... sigh).

kazinator · 1d ago
The wacky command line parsing in MS-DOS in which the command line is just a string, parsed by individual applications, is the reason why there are security issues in Windows command line parsing.
guappa · 1d ago
Don't you love to have variety in life? Where's your sense of adventure? (just kidding, I think it's very stupid and .net does like that)
3036e4 · 1d ago
I agree with much, but not everything. Some of it was a bit silly.

One thing that I would add is that you fully configure MS-DOS using just a few lines of text in AUTOEXEC.BAT and CONFIG.SYS. And that includes setting up many applications and the user's shell.

There was also no mention of FreeDOS. That would be a better OS to bring up if we are comparing to Linux. It has been around since 1994, but maybe that article is old enough that FreeDOS had not yet became the de-facto standard DOS yet.

p0w3n3d · 1d ago
One of the things that MS-DOS can but Linux can't is

  A220 D5 I1
p0w3n3d · 1d ago
Another is run windows 3.11 and 95 natively
GuestFAUniverse · 1d ago
Real mode and a multi-user, multi-process OS wouldn't have been a good fit.

(Btw. it's utterly strange that the English Wikipedia doesn't seem to mention anything about "multi-user". One of Linux's /key functionalities/.)

mkfs · 1d ago
Case insensitivity, one of the more obvious differences, isn't listed.
EPWN3D · 1d ago
That's a property of the filesystem. Linux can boot on either.
mkfs · 1d ago
The shell (COMMAND.COM) had a number of built-ins that were case-insensitive as well, like CD.
Analemma_ · 1d ago
It’s the mark of a truly masterful troll that he can get nerds on a forum steamed up and angrily pounding on their keyboards with corrections even 30 years later :)
billforsternz · 1d ago
One thing I can do really easily with DOS but can never remember how to do on Linux is find a file somewhere in the filesystem.

dir/s filename

I know there are many ways to do the same thing in Linux, but they are all more complicated and because I am getting old and don't use the command line much anyway, none of them have stuck in my mind.

In general I can use dir more effectively than ls. I know this means I'm a bad person.

jmholla · 16h ago
If your distro comes with plocate or you have it installed, you can use it through the `locate` command. It will setup a service that periodically (usually daily) updates the database it sources for that information.

`find` is the canonical way to do it, though it will take a while, and like @teaearlgraycold mentioned, you'll likely want to redirect stderr to /dev/null.

    find / -name "name here" 2>/dev/null
This handy function should help if you plop it in the rcfile for your shell:

    dir/s() {
        find / -name "$1" 2>/dev/null
    }
teaearlgraycold · 1d ago
My complaint with the find command is I need to redirect stderr to /dev/null to use it without squinting through lines of access errors.
jasonthorsness · 1d ago
What an interesting site and unusual article. I can’t tell if it’s a joke. Everything seems true but not huge advantages except maybe the size one.
JdeBP · 1d ago
As someone who had to ensure the "Operating System Wars", I can attest that it's likely not a joke, especially given the other writings on the same site. It is, alas, more of what we saw a lot of during that time, which was people expoounding at length (although on Usenet and FIDONET and the like, and so a lot less findable, or even outright lost, nowadays) in this sort of vein, with obviously shallow or no grasp of how computers worked or what operating systems were or could/could not do.

Getting executable file formats confused with interpreted languages, and indeed using the word "bloat" (something that no-one could ever provide an objective meaning for) is typical of such things.

DaSexiestAlive · 1d ago
I often get puzzled when I hear that the firmware on Nikon cameras are essentially DOS programs, I guess from checking out this list I get why.

Perhaps there would be advantages to having DOS got re-written in Rust? No more hand-crafted machine language or c/C++... I wonder if the world is ready for DOS everywhere :)

wobfan · 1d ago
I am amazed about people geniunely arguing about the article. It's obvious from the first sentences that it's either sarcastic or just a person without a lot of knowledge about anything he or she is talking about.

I still loved to read it because it seems to represent people from a old time. The usual "no no no, new thing bad because old thing can do brrrr" without really going into any specifics at all. But from probably 25 years ago. I liked it.

JdeBP · 1d ago
It doesn't represent us who were around in that old time. Do not make the mistake of thinking that this represents mainstream thought either from when it was written or of the time that it is harking back to.

As pointed out at https://news.ycombinator.com/item?id=44244699 , this is a person not having a clue what xe is writing about. There were, alas, plenty of those during the "Operating System Wars".

(No, they didn't have a mainstream of their own. They weren't usually even on the same page as one another.)

ghssds · 1d ago
On another of this guy's articles:

> Windows XP is not real Non-NT-based versions of Windows can be booted in real mode, which is the opposite of what Windows used to call 386 enhanced mode. In real mode, programs actually run in your computer's real memory space, instead of having virtual memory spaces (or "virtual machines" as Java programmers like to call them) allocated for them. While virtual mode, protected mode, or whatever you want to call it is useful for everyday multitasking, it's simply absurd to create a commercial operating system that doesn't allow software to directly interface with hardware. Try changing your interrupt vectors or PIT timing in Windows XP. Simple tasks like these, which could be easily done in real mode, become impossible with Windows XP. [0]

In this article:

> Protected mode is a kludge to prevent people from hurting themselves when they don't know what their software is doing.

It seems the author doesn't have a firm grasp of what are real and protected modes and even what an operating system does.

[0] http://webarchive.me/geocities/SiliconValley/2072/whyxpbad.h...

roryirvine · 1d ago
It's in the same vein as the "co-operative multitasking is best because it forces programmers to write applications correctly" argument which was a mainstay of the 90s OS wars. People with a little knowledge but not much understanding, arguing in favour of their favourite OS and trying to spin its limitations as actually being a positive.

In most cases, they'd have been better off saying "yes, it's not ideal but it's a reasonable trade-off on a small system".

kazinator · 1d ago
Linux didn't use to be that much bigger than DOS. Not as much bigger as it is now. Linux was born around the time DOS died, and kept growing since. Linux used to be booted off floppy discs.
kelnos · 1d ago
This seems kinda silly? And some of the examples are not really true?

> MS-DOS requires only 3 files to boot

You can do it in two for Linux. The kernel image itself (packaged as a bootable EFI program if you want to keep it simple and avoid a bootloader), and then an initramfs (built into the kernel image) that has busybox in it. Ok, I guess the 'sh' symlink you'll need to boot into is technically a third file. So it's a tie.

Yes, this Linux setup will be very limited and annoying to use, but so will a DOS setup that only has the three DOS boot files mentioned.

> Boot in under 5 seconds

The setup I describe above will boot in much less than 5 seconds. DOS may still boot faster, but the difference will likely be imperceptible, especially if you compile a Linux kernel that has hardware support capabilities similar to the bare-minimum three-file DOS setup.

> Use commands without spaces [...] This is a big deal, even if it might not seem like it.

I don't see this as a big deal, and I'm not sure why this is all that useful or important. If someone really wanted to, they could write a shell or a shell wrapper that could allow you to do stuff like this, but it's telling that no one has bothered.

> Run CPU opcodes natively

I'm again not sure why this is useful enough to be necessary, but sure, let's just say I lack imagination here and give this point to DOS.

I'm sure if I wanted I could write a kernel module or maybe even a binfmt_misc setup that would make this work, though presumably at the expense of the default behavior, which treats non-ELF (or otherwise unsupported) files as shell scripts. Again, it's telling that no one has bothered.

I'll also note that, while yes, DOS will run .COM files, which are basically just a list of machine instructions, most software distributed for DOS, at least in its later years, used the MZ/.EXE format. Certainly that doesn't make it so DOS can't run machine code directly anymore, but, again, it's telling that the more "complicated" format ended up being used more commonly. Maybe that means there's something useful about it. Like its ability to be larger thank 64KiB.

> Linux generally doesn't run in real mode.

Which is fine, and good. The author's justification for why it's better/useful that DOS allows this sounds like the usual elitist "programmers should just be perfect and make sure they never write programs that have any memory-safety bugs" nonsense that I hear some people use to justify writing C code when there are suitable alternatives that are safer.

Regarding getting the Linux kernel to fit in real mode, I imagine if you are setting up a Linux computer so it can do a similar level of things that DOS can do, you can probably disable a lot of kernel options and get it down far enough in size.

DOS was a great OS. I used it a ton in the '80s, and even when we were able to get a copy of Windows 3.0, I still mostly used DOS. It had its place in history, but trying to compare it to Linux is about as apples-and-oranges as it gets.

gary_0 · 1d ago
I'm really curious what year this webpage is from. My guess would be the mid to late 90's, but it would be interesting to know for sure.
zargon · 1d ago
It mentions Windows XP, so 2001 at the earliest.
orionblastar · 1d ago
Remember if you can't get MS-DOS or PC-DOS etc you can always use FreeDOS: https://www.freedos.org/

DOS has no User Login like Linux and is insecure as a result.

DOS is still being used by NASA and other places.

I want to write books on DOS programming using PowerBASIC 3.5 and other languages to help the newbies learn DOS programming.

hackyhacky · 1d ago
> I want to write books on DOS programming using PowerBASIC 3.5 and other languages to help the newbies learn DOS programming.

IMHO the best source of info for that era of computing is Peter Norton's Programmer's Guide to the IBM PC.

Not sure how many newbies are interested in developing those skills though.

zzo38computer · 1d ago
It is not the user login that makes Linux secure (although there are multiple kinds of security, so it is not that simple anyways). Even with DOS, some computers can have a passworded BIOS.
mikewarot · 1d ago
MS-DOS on an IBM PC (or clone) with Dual Floppy Disks is still the most secure workstation you can buy today. You can write protect and easily copy the boot media. There's no persistent writable storage the user can't manage directly.

You can easily manage your risks in a manner that is impossible with modern systems.

comonoid · 1d ago
I've got Linux with a single file only. Three files is too much.
readthenotes1 · 1d ago
In less than a few kilobytes?
lutusp · 1d ago
> The old standard for Linux used to be the a.out format; this has since been superceded [sic] by ELF (Executable and Linkable Format), but the end result is the same: You're not actually running machine language.

This is not correct. The difference between the examples is not whether the computer runs machine language, it's how the code is wrapped for delivery. The above hyperbolic claim will mislead people unfamiliar with computer programming and add to an unwarranted atmosphere of mystery.

> In MS-DOS, you can type a command like "cd.." to move up a level, and it will work fine. In Linux, it will not; you need to type "cd ..". The different [sic] is the space in between.

No, grammar issues aside, the difference is that Linux rejects special cases that shouldn't exist. Command-line commands should be consistent and the parser should reject operator errors in a robust and repeatable way. Were this not true, a command-line parser would take:

    # rm-rf/*
And execute it, instead of replying, "You really want to do that, pilgrim?"

The above example, were it to exist, would mix commands and arguments in a way that would make black-hat hackers' lives very easy.

SlowTao · 1d ago
I mean, yeah MS-DOS is barely an OS. It is nearly the bare minimum between hardware and the software on top. I mean you can just write directly to video memory at a whim, just don't write to the memory as it is being read at the same time AKA CGA snow.

That is its beauty and its pain.

M95D · 1d ago
Not only that, but MS-DOS was mostly a filesystem driver, just like the name said. All the rest came from BIOS interrupts.
JdeBP · 1d ago
Don't forget that "BIOS" has another meaning in MS-DOS. BIOS and BDOS, remember.
JdeBP · 1d ago
There was lots of uninformed, false equivalence, rubbish like this put about during the time of the "Operating System Wars" in the 1990s. I saw lots of it go by. This is just more utter rubbish in the same vein, to be blunt. From the turn of the 21st century, going by its mention of Windows XP. So tail-end rubbish, too.

The idea that MS-DOS is small and "perfect" is belied by so many things, from the existence of DR-DOS (Clearly one could improve on "perfect", spurring "perfect" to catch up.) and PC-DOS (Clearly "perfect" lacked the E editor.) to all of the many complaints that MS-DOS users had based upon what they saw in other operating systems, and wished MS-DOS could do.

Like stopping buggy programs from "poking values into memory" (to use the words of this very article) and thereby breaking other programs, for starters. Anyone who thinks that this article going on at length about the beauty of real mode at the turn of the 21st century reflects mainstream thought, wasn't there in the 1980s when protected mode came along and everyone wanted the sort of resilience against rogue code that the multi-user mainframe world had been enjoying for decades. We got lots of attempts at it, from Multiuser DOS to QEMM.

In fact, the author is writing at a time when people were anticipating an era when there was no real mode involved anywhere on PCs. With EFI and no compatibility support, and the demise of boot managers that sit in the virus areas of hard discs, we are pretty much there nowadays for some people.

The "CPU opcodes natively" explanation reveals the author's lack of knowledge here, which shows how little credence should be given to the rest of the piece, but was so typical of the technically illiterate drivel that was circulated during the OS Wars. Knowledge of MS-DOS, that is. MS-DOS files had a non-trivial executable format. In fact, in later years they had several. There was the MZ file format, and "Family API" dual OS/2 and MS/PC-DOS programs had the NE file format. Some "DOS extenders" such as Phar Lap's employed the PE format. Of course, it is non-technical gibberish to assert that this means that programs are "not sending basic commands to the CPU" when their program image files use a non-trivial executable file format. (Talking of programs sending commands, rather than processors fetching instructions, reveals the ignorance here.)

As the author of a clone of Microsoft's/IBM's CMD, I can tell you outright that the "commands without spaces" point is more ignorant crap. In reality, as Rex Conn also could attest, the command-line parsing that allowed "CD.." and "DIR/P" was an awful irregular ad-hoc mess. After all, it only allowed that for some commands, and some punctuation (there was a table), and only at that specific point in the command line. Whether one could, say, combine options like /P/A:D was up to each individual command to implement. Then there was SWITCHAR. More at https://news.ycombinator.com/item?id=39187762 .

Also in reality, people never complained when we command interpreter authors said in no uncertain terms to separate commands from arguments with spaces, because this wasn't CP/M or DCL, and pointed to the the fact that the railway diagrams in the IBM Command Reference allowed no such syntax. And of course, back in the 1980s people actually wanted the MS-DOS command line to work more rationally, and more like Unix. MS-DOS version 1 was not actually "perfect", either, and needed subdirectories and file handles and other Unix-like stuff.

Other people I am sure are going to demolish the twaddle that is the other points. I shall just point out that (for 1 example) OpenBSD can boot with only one file, if that file is /bsd.rd , and bootstrap times was another point fatuously argued over and over during the OS Wars, with little regard to inconvenient facts like the spec requiring that any operating system allow up to 30 seconds for ATA hard discs to initialize at power on. (In modern systems like the RaspberryPi there are still similar inherent insurmountable delays that no operating system can overcome. Only home computers with BASIC in ROM really achieved this instant-on ideal.)