I work in DOS for a day (2014)
arstechnica.com
arstechnica.com
When the article was written, my workplace communicated over e-mail (IMAP-enabled), our calendars supported CalDAV, and we did have an instant messaging system that ran over extensions to SIP, which _was_ compatible with libpurple. We also all had voice phones on our desks for very-impromptu calls. The ironic part of all this: it was Microsoft Exchange and Microsoft Lync. I at the time was using Linux with Pidgin and Evolution, there being no Microsoft clients for any of the stack.
Nowadays, our stack is GApps with Slack, and a heathy dose of Zoom. To get Slack out of the way: good luck; the XMPP and IRC gateways were retired ages ago, and interactive API clients even today appear to be second-class citizens. GApps is interesting in that they do support standards like IMAP and CalDAV, but only if your organization allows for "insecure authentication" options, which mine does not. Otherwise, you're glued to a browser app that sometimes breaks in browsers that aren't Chrome. And let's not even start with Zoom.
My point in saying this is: in 2014, this would have been seen as a cool project, and I'd bet some coworkers would've even encouraged me to try and get it working. In 2021, this is how I'd get fired.
The one difference might be, if you have a Windows domain, you could integrate MFA into your domain login process and then use AD’s built in Kerberos to authenticate mail clients to the IMAP server. That’s still relatively Microsoft-proprietary stuff. Thunderbird on Linux probably won’t access that, even though “Kerberos” and “IMAP” are nominally things it supports.
I think what changed here was a less a shift towards proprietary architecture and more an increased emphasis on MFA.
mTCP, still supported and accompanied by a handful of utilities (including an IRC client), and the venerable
Waterloo TCP (WATTCP) developed in the early 1990s."
I wouldn't mind having Rust on 486 but it doesn't look like it will ever be possible from what I read about its architecture.
https://github.com/teknoman117/ts-3100-images/tree/master/ru...
(for this SBC: https://docs.embeddedarm.com/TS-3100)
My goal was to follow blog_os on this board for fun. Main sticky point is the 386 not having any hardware atomic operations (which didn't show up until 486).
I recently got a current Gentoo base environment booting on a 133 MHz AM5x86 based industrial SBC and it takes 3 minutes to compile hello world in C++ (70 seconds for C) so I'm not super confident you'd even want to use rust compiler on a 486, even for "a day in a programmer's life from 30 years ago" experiment.
EDIT: though I wonder now if you could use the fact that flags are returned from basic memory ALU operations to implement some basic atomics.
I started working on a DOS-based project and played around with Rust before deciding that it was going to be tough and would not be as optimal as just dropping to C and using OpenWatcom which is pretty capable considering its age, IMO.
I recently used a very minimal install of Void on a machine that crushes what I had in, say, 2005, on a performance basis (2GB memory, dual-core Celeron clocked over 1Ghz, solid-state disk) and the whole system was slooooow and choppy even using mostly suckless software like dwm, including their Surf (webkit-based but otherwise as minimal as it gets) browser—if I opened even one "web app" or more than a couple lighter pages at once.
If you remove the requirement for a modern Web experience, we used to fit pretty damn good GUI operating systems on single live-boot floppy disks (QNX had one of these, IIRC, and it was great—much better UI responsiveness under load than a Linux desktop, kinda like BeOS but even tinier)
Only thing that is non-stock is the ram size has been increased in capacity but I rarely use all of it (only if I have like 50+ browser tabs open) Just a guess but never counted it.
I think the keys to a fast desktop experience is
-stay away from linux. The kernel and most distros suffer from kitchensinkitis.
-don't use a heavy window manager. I use a custom configuration of Motif (it works and does not get in the way).
With quality software old tech is still more than competent today. I can watch HD youtube videos too if I want.
Office suites and programs like inkscape work fine. This is a 2 core machine.
If I need more compute power I can use the cloud.
> -don't use a heavy window manager. I use a custom configuration of Motif (it works and does not get in the way).
Yeah, that's why I picked Void. It's only a little fatter than Alpine, but better-suited to desktop use. Agreed that Linux generally has never (in the 20ish years I've used it, anyway) felt high-performance, exactly, on a workstation, but Void keeps out the garbage services Linux has accumulated over the years, unless you install them yourself, so gets it to a point where it's only slightly fatter than circa 2000 Linux (kernel's grown larger, no getting around that). Used dwm because it's extremely light. Certainly Gnome wouldn't have worked, to pick the worst possible option (resource-use wise).
Overall, Linux continues to feel like it does very poorly (in a workstation/desktop context, anyway) any time there's any contention for resources whatsoever, including just multiple things needing CPU cycles. Which is... kinda a shitty way to be, for a multitasking operating system.
Maybe I'd have had better luck with a BSD, I dunno. It felt OK to use, though, as long as I avoided the Web. I think that machine's going back to being a Lakka box under my TV, but next time I'm on something relatively weak maybe I'll cycle through a couple of the BSDs to see if any of them work better for me.
People don't do "on device" anymore outside of unusual situations.
It was kept alive by two entirely disparate user groups: the iMac crowd who only used a browser (or the AOL client), and professional designer users who spent the entire day in Avid (or Pro Tools or After Effects or QuarkXPress or Photoshop).
But, jokes aside, I still got a lot of work done in Mac OS 9 back in the day, so it wasn't nearly that dire even if it was best not to peek under the hood.
> And also for more rigorous work tasks (programming, video editing, sound editing)
Somewhat amusingly, an OS like DOS (or QNX) would probably be better at video/sound editing than any "modern" OS. It took a long time for Linux to be able to do audio processing or other real-time low latency things. Even today you may have to tweak things a bit[1] depending on your use case. A video editor that has complete control over your machine would absolutely scream. A lightweight DOS with support for newer hardware (USB, PCIe, etc.) with a thin Vulkan/OpenGL and networking stack would probably be ideal for these types of apps.
I run it text-only on some crap Dell Dimension in my basement workshop. 15-21 megabytes of memory used on a default install. Has networking, framebuffer, usb, and otherwise all the modern trimmings. Probably the closest you'll ever come to a modern DOS experience. Like one commenter above said, everything seems more proprietary now. The moment I realised we no longer live in an open standards world, was when I realised there was no text-mode Discord client, not even possible to make without getting banned from the service.
Months later I discovered the file I'd accidentally created, which when deleted, gave me my hard drive space back.
Since then I've been hooked on computer programming.
You just helped crystallise one of my favourite sentimental memories.
Thank you stranger.
I remember removing DoubleSpace from CONFIG.SYS (didn't have enough free diskspace to upgrade to DriveSpace) and discovering an empty C: drive with just a very large DBLSPACE.BIN in it. Or... wait, actually I don't remember what I did now... DoubleSpace loaded before CONFIG.SYS (located of course inside the compressed volume) could even be read, so maybe I was booting from a floppy that didn't have the DoubleSpace driver installed on it, or something. In any case, cue freaked-out reboot with "normal" settings after taking one look at the directory listing... and *whew* everything's back.
How'd this get you interested in programming? Did you somehow reconstruct the file's FAT entry from scratch, or (heavily presuming a lot) maybe this was more a case of "reinstall DOS, discover QBASIC"?
My own "oops" was helping someone with an XCOPY command on IRC once that yeeted everything from C: to D: to make a backup. TIL XCOPY has a flag (still don't know which one) that causes everything on the destination directory (or drive) to be deleted first. The command somehow completed instantly. Thankfully it was "only" ~4GB or so, IIRC.
I also got my first old box around the 9 year mark, incidentally (IIRC I was ~14 when I was poking around w/ DoubleSpace). After learning about batch files at around ~10 or so I decided to put some batch file entries at the top of the EXE file of my favorite game. (Why I didn't just create a new batch file, I honestly just...). Yeah, EDIT.COM (a la QBASIC) mangled the line endings and just about everything else in the file; and no more game. Yay.
> How'd this get you interested in programming? Did you somehow reconstruct the file's FAT entry from scratch, or (heavily presuming a lot) maybe this was more a case of "reinstall DOS, discover QBASIC"?
The former sounds mightily impressive, but it was definitely more a case of the latter :-)
I don't recall exactly how I stumbled upon DriveSpace (I ran DOS 6.22, I don't think it had DBLSPACE), but I do remember that the game "Crusader: No Remorse" had just come out, and I didn't have enough space on my measly hard drive to install it.
I figured DriveSpace was the solution to all my hard drive needs, but as you've gathered, I didn't know what the hell I was doing, and so for a good while after failing to run DriveSpace correctly, I was left with minimal storage space (and a guiltily large .BIN file that I didn't know about).
I eventually decided to reinstall everything from scratch, so I started going through my Dysan-encased DOS stiffy disks (I wish I still had those), and during said perusal, I discovered GORILLA.BAS
"What the hell is this?" I remember thinking. A game!
Within days I was reverse engineering the .BAS file to give my gorillas more explosive bananas, and that is how I got into QBASIC programming :-)
From there I moved on to Denthor's BBS tutorials on mode13h, followed by NeHe's OpenGL tutorials, and the rest is history.
I really love reading about these origin stories. Would be awesome to hear from some of the greats in our field how they all got their start.
Thing was, Alley Cat was the only (interesting) game on the machine in question... and when I (sadly) explained what I'd done to the person who gave me the system, they responded by promptly deleting the EXE file. While a bit of a tangent, my honest thanks for helping me realize (as I type this) that this memory was what kicked off the deep-seated negative associations I've had around gaming my whole life, and why I often lock up whenever I think about the subject. (!)
I completely agree that filesystem recovery is somewhat of a more advanced topic, and entirely unfair to expect mastery of at ~10 :D. I kind of understand about 42% of https://marcan.st/2015/10/rescuing-a-broken-ntfs-filesystem/ myself, for example.
I'm very curious how you managed to end up staring at a system with the DriveSpace driver un-loaded though; that just sounds broken. I wonder if you tripped over an uncaught bug/edge case in the setup process.
(And yeah, the system I was using had DOS 6.20 on it, thus had DoubleSpace instead.)
[TIL about the Dysan brand of floppy disks]
How'd you figure out that BAS = QBASIC?
In my case, the person who gave me the PC randomly decided one day that it needed a menu, "so we didn't need to type commands in". The PC sat in my bedroom, and Mum rarely used it... but okay, whatever works. Well, said menu ended up being a QBASIC program with some careful instructions at the top about pressing Alt F X. If this person had've known that SYSTEM would exit out of QBASIC if you used `qbasic /run` (:D) I would've probably gotten my start some other way... because of course there wasn't any particular requirement to press Alt F X immediately after exiting the menu... so you might, for example, accidentally press PgDn, or the arrow keys, or F1, first...
I think the PC had a Nibbles clone on it (which for some bizarre reason didn't disable keyboard typeahead, so if you held down the arrow keys, the BIOS would start beeping at you), along with GORILLA.BAS et al, but these were to my mind boring; Alley Cat was comparatively much flashier (particularly the intro screen: https://archive.org/details/msdos_Alley_Cat_1984 - the volume (off to the right) is muted by default, and might be a tad loud). Ha, now I also remember MONEY.BAS was also a thing... the background pattern it would put up under the menu was nice.
I crashed spectacularly hard when I tried to learn about assembly language and venture toward the lower levels a few years later; it was too much to ingest at once. It would take me a few years to realize just how tightly I'd woven the mental model I built from the drastically oversimplified view QBASIC presented of the bigger picture.
I remember stumbling on some .py files while digging around in a StarOffice installation one day. Cue me staring at my screen in mild shock after opening one of them in Notepad, haha... then hastily closing the window to get the angry snarl off the screen. Syntactically significant indentation/whitespace was very scary at 13 :D
Later, while browsing the Internet at the local library one day and trying to find Visual Basic, I discovered that there was a version for Visual Basic for DOS... right as my session was about to expire (lol). After some months trying to re-find the page I was on, I finally found VB-DOS - next to Visual Basic 1.0 for Windows. Turns out, VB-DOS had sufficient runtime overhead (read: bloat) that you had to exit the form designer to switch to the code editor, and vice versa, and I soon completely lost interest in it. But VB for Windows 1.0 ((C) 1991), which I'd downloaded mostly just to add it to the pile, ended up proving sufficiently interesting that I actually wound up with a directory with easily 100+ different things in it. Quite a few were empty `Form1`s saved under "what on earth was that name supposed to mean" (16-bit VB 1.0 of course suffered from the 8.3 filename problem, so naming was fun), but I remember making a little tile game (scrambled sequence of buttons you had to click to un-scramble) and kinda went overboard making a skinning/theming engine for it... (IIRC, the Globals window in that thing was full. Like comically full. At the end I was just deliberately adding globals cynically. lol)
A little while after picking up PHP (which was bumpy and uncomfortable, but very thankfully could have been kicked-off by far worse than http://www.phatcode.net/downloads.php?id=156), I of course decided to try finally figuring C out, hahaha. Pointers were... a great way to spend an afternoon crying in frustration, although I somehow (????) managed to figure them out in the end, which was nice... only to realize that the sheer amount of overhead/boilerplate C requires in order to do just about anything, every time, is not the kind of thing that can be "figured out" in a couple of sittings...
Things started to crystallize when I discovered autism and learning difficulties. A decade+ on from that point, I continue to progressively reevaluate various shortcuts I've taken, and reinforce areas that I'd hastily scaffolded out using holes borrowed from Swiss cheese. I can recognize mental vertigo from disorientation now, so fundamental unfamiliarity is less existentially terrifying... mostly. Okay it's still an annoying mosquito. :D
Assembly language remains an irritating mosquit--enigma, frustratingly; Linux's strong orientation toward C doesn't help matters, nor does the fact that the tutorials out there neatly bisect into a giant pile that assume you don't understand what hexadecimal is, and a smaller pile that assume you have 10 years experience with all the seat-of-the-pants aspects of C.
Back when I was in full swing with the "download everything that moved and said it was for DOS" side of things I discovered the Ketmax reverse disassembler, which was kind of like `rr` (https://rr-project.org/) and a lightweight assembly-language REPL. Even that didn't help things click. (Back when I used i336_ I posted about how Google simply cannot find "ketmax": https://news.ycombinator.com/item?id=11900472. Years later, it still hilariously hasn't caught up to the fact that you have to add "35.zip". So, I continue to give the engine a hard time by keeping the two halves of the filename ~15+ words apart, and in separate sentences :D)
So... much to my chagrin, I'm still using PHP. Which I use as a bizarre sort of zero-crossing counterpoint to Perl and Python - I use it imperatively, like a lot of Perl scripts were written back in the day, but I use it as a glue language, like most would use Python today. And I'm yet to substantially move on, for the very simple reason that
$ time php -r ''
real 0m0.035s
user 0m0.008s
sys 0m0.016s
the VM bootstrap time is 35 milliseconds flat, including shared library initialization time (!): $ strace php -r '' 2>&1 | grep 'openat.\*\.so' | wc -l
131
This is on an ~8 year old i3 with slowish RAM, too.My primary experience with Python is with `youtube-dl`, which takes about ~5-10 seconds here to output anything. ^C-ing the process early shows it knee deep in all sorts of module imports. IIUC the package management in RHEL-alikes, including Oracle Linux (whose free tier is fractionally cooler than AWS', go and see), is Python-based, and wow it shows; the package manager takes a good ~4 seconds to show any output.
I incidentally wrote about my experience with PHP's fast-ness over at https://news.ycombinator.com/item?id=26555366, but a good summary comparison that I recently thought of can be found in the short signature jingles companies commission from musical artists, and how the artist has to kind of readjust to making normal-length music because they've shifted their entire timescale to 3 seconds, or 1.82 seconds, or whatever - I seem to be permanently jammed in that short-range end of the timescale, where the notches measure "10ms 35ms 70ms 99ms 150ms" etc as opposed to "1s 5s 10s 35s", or, much more practically (think C++ et al), "5m 10m 25m 1h". I think a portion of this "scaling" is normal - I recently stumbled on https://crawshaw.io/blog/fast-compilers, which is mostly talking the exact same language - but I seem to be a bit of a pathological case, in that 50ms feels alright, while 70ms already has a noticeable edge to it, 250ms is "nooooo" territory, and at 1 second I've already opened tab 932 and typed in "n" (1 guess where that goe--ooh, 15 new butterflies to open in new tabs!). However, if I stay within that 10-50ms zone, I can concentrate for hours. >.<
...Well the above kind of went everywhere. I started off curious about DoubleSpace and went off the rails somewhere around responding to OpenGL (another thing I've always been curious about but have no idea how to practically get started with... I did the "now you have a window open" thing in ~2008, but all the things I could find about what I could do with said window tended to require a functioning understanding of math... yayyy).
Thanks for reading. Feel free to single out bits to reply to, if any of them are interesting; the whole thing is a bit of a thoroughly undirected wall of text.
I don't know of any good origin stories, but I particularly enjoy reading debugging/war stories. At some point I'll have a good thing-I-found-on-the-web re-finder thingy (bookmarks ain't it...), but I was able to remember these:
https://web.archive.org/web/20180513105901/http://nemesis.lo...
https://old.reddit.com/r/Rocknocker/?count=225&after=t3_cps0... (this is rewound to the start in the history - open everything that says "Demolition days" (there are only 2 near the top of this page), and click "Back", not "Forward", at the bottom of each page (with the exception of course of getting thoroughly distracted by everything else and opening that too) - and note that there are hundreds of entries)
http://www.stilldrinking.org/essays.php (open all the "The Episode" entries)
https://github.com/mmastrac/kalos
I have some other code that I haven't added to this project that allows you to do things like write text to the screen, etc.