
Chuck Forsberg has died – author of Zmodem - jacquesm
http://www.anewtradition.com/obituaries/obituary/12060_Charles_Alton_Forsberg
======
dmd
My teenage impression of the Kermit and Zmodem protocols, written in the mid
90s:

here’s my impression of how kermit works

client: here is byte number 1 server: i have received byte number 1. the
checksum was 3. client: i agree that the checksum was 3. server: ok, we’re
done with byte number 1. client: I agree, we’re done with byte number 1.
client: here’s byte number 2. server: you know, it’s not easy being green

now zmodem zmodem goes something like this:

client: I’m gonna send you about 200k now, and you’re gonna bend over and take
it server: thank you sir! ( … ) server: ok, got 200k, checksum was 523 client:
DID I ASK YOUR FUCKING OPINION? server: NO SIR! SORRY SIR!

~~~
jejones3141
That's Kermit in its very basic version, which is slow but has the advantage
of working just about everywhere under extreme constraints. If you have an
urge to send data from your C-64 or Tandy CoCo to a Burroughs B5500, there is
or was probably a version of Kermit for each that would let you do it. Later
Kermits had large packets, sliding windows, and ways to specify what
characters needed special encoding.

~~~
NoGravitas
Yep. A properly configured, later version of ckermit was typically as fast or
faster than zmodem (at least, as I remember from the mid-1990s).

~~~
jandrese
Yeah, but getting Kermit properly configured required the blood of three
chickens and a wizard. Z-Modem had sane defaults right out of the box.

------
vidarh
One of my first contract development jobs came in '96 when a research group in
Norway was going to do a demo of their autonomous underwater mapping
submersible for some US navy brass. Problem was the tiny tracking boat that
was following the submersible on the surface to receive the data (via an
accoustic link..) would not hold everyone who was going to be in attendance,
so they needed a way to stream the data from the tracking boat to a US navy
ship to display it on some Sun workstation there.

For some reason they'd decided the best option was GSM data. 9600bps should be
fine - the mapping data feed was about 2400bps. Problem of course was both of
these ships would be out in a fjord, far from any cells, and in motion.

So I ended up writing a little proxy that they'd connect to and feed data
that'd do automatic redialling and then layered a variant of the zmodem
protocol on top of that to handle re-sending of data, and tuned it for
specifics of the app to minimize delays in catching up to the live feed.

I'd used zmodem a lot in my BBS days before, but that was the last time.

~~~
Stratoscope
I think Chuck would be quite pleased with your story!

It's always sad to lose someone so talented - or anyone for that matter. One
of the few consolations is that it gives us a chance to tell great stories
about them.

BTW for anyone like me who often just reads the comments here, take a few
minutes to read Chuck's obituary. It's a wonderful celebration of his life and
work.

"Having his own company allowed Chuck to be Chuck. He got up when he felt like
it (usually in the afternoon), he worked when he felt like it, and wrote the
software he wanted to write. He was a guru in the fullest sense of the word."

~~~
blinkingled
RIP. My only memory of zmodem involves Slackware, minicom and dial up in 1996.

That is one really well written and comprehensive obituary! They managed to
keep it both real and amusing. Recommended read.

------
cubano
Oh this is truly sad news.

I first started my online journey with a 300bps Hayes modem and an original
4.77mhz IBM PC, connecting with a service called The Source in 1981. I soon
moved on to Compuserve and then, of course, BBSs.

The first protocol I remember using was _not_ Zmodem, but Xmodem, which as I
recall, had a really nasty habit of losing its place in the middle of a 2 hour
download, forcing you to start completely over.

Remember, Compuserve costed $5/hr(!), so these disconnect/restarts were not
only really annoying but quite expensive.

Zmodem solved this problem very nicely...it was smart enough to restart
downloads at the point of disconnect, and because of this, Chuck was a hero of
my youth.

Rest wel...NO CARRIER...

------
nocarrier
RIP. Zmodem was so amazing. It was a huge step forward. I got started in 1980
with an old Hayes 300 baud modem on the Source, and graduated to Compuserve
and BBSes in 1986 when I got a 2400bps modem. When I got a 9600bps modem in
~1988, that's when things really took off for me online.

Early BBS culture was really something else--we'd do meetups at the local
Godfather's Pizza on Saturday afternoon and knew each other by our handles.
We'd trade notes on new BBSes that had cool downloads or interesting message
boards, and give each other advice on which companies had the best long
distance plans. I remember doing math to calculate how many 3.5" disks worth
of data I could download from a given BBS in another area code--IIRC it was
something like $5 per disk with a 9600bps modem. I didn't even try downloading
full games until I had a fast enough modem because downloading a floppy at
2400bps meant you'd blow out your daily time allocation before the download
finished. What an era.

Thanks Chuck.

~~~
jharger
Ahh the good old days. I remember downloading a 4 floppy game overnight,
because some BBSes would give you unlimited time after 10pm or something like
that.

------
jacquesm
In the pre-internet-for-everybody days (and even quite a while afterwards)
zmodem and other file transfer protocols were pretty much the only way short
of mailing floppy discs to get a file from one place to another, and there
wasn't a terminal package or a BBS system that did not support it. Even today
plenty of terminal programs will happily respond to the download initiation
sequence.

~~~
fcambus
File : zmodem general Version : 1.02

(C) Mattheij Computer Service 1994

I recently stumbled upon this in the header of a ZMODEM implementation in C,
thinking you were likely the author. Now I have no doubts that you are ;)

Any stories to share regarding this implementation and how it came to be?

~~~
jacquesm
Yes, but for very obvious reasons not in this thread. The most abbreviated
version of that story would be: I indirectly owe Chuck Forsberg all of my
wealth.

------
cpeterso
I used to "collect" file transfer utilities back in my BBS days. When I found
source code on some old floppies, I decided to publish them on GitHub for
future generations:

* [https://github.com/cpeterso/jmodem](https://github.com/cpeterso/jmodem) (1990, Richard B. Johnson)

* [https://github.com/cpeterso/sealink](https://github.com/cpeterso/sealink) (1987, Thom Henderson, System Enhancement Associates)

* [https://github.com/cpeterso/wxmodem](https://github.com/cpeterso/wxmodem) (1986, Peter Boswell)

* [https://github.com/cpeterso/zmax](https://github.com/cpeterso/zmax) (1990, Mike Bryeans, Micro TECH Systems)

Other utilities for which I have MS-DOS exes but not source code include:
BMODEM, BiMODEM, CMODEM, Leech, Lynx, Puma, TMODEM, YMODEM, and others. Leech
was compatible with X/Y/ZMODEM but it would fake a transfer abort after the
last byte was downloaded so the BBS would not count the file download against
your quota. >:)

------
pilif
Back in 2005 we had a really bad issue with ZModem to a barcode terminal over
an USB2Serial adaptor and Chuck helped us as a consultant.

I've just dug out the old emails we've exchanged back in the day and I
remember how great it felt when after only two days, he solved the problem
we've been working on for weeks.

I was so happy to finally see our problem go away.

------
trimbo
He was a prolific Usenet poster. One easy way to find his posts is to search
for this ham callsign, which he signed off with:

[https://groups.google.com/forum/#!search/WA7KGX$20zmodem](https://groups.google.com/forum/#!search/WA7KGX$20zmodem)

------
huhtenberg
ZModem and a ZyXEL was all you needed to BBS like a boss even on the crappiest
phone lines. Golden times :)

~~~
buserror
Not only Zmodem was cool, it was also open source back then, and very easy to
integrate into your program.

In fact, little known fact, it's still very useful _today_ ; if you ssh into a
box that has it installed, and you have it installed locally, you can quickly
send yourself back a file with it, across the current connection...

Just to 'sz <file>' on the remote side, and do <return><tilde>|rz<return> to
tell you ssh client to start 'rz' locally and zoom, zmodem the file over.

Works the other way too...

~~~
k8tte
or just use scp, which is part of openssh

~~~
buserror
Try that thru a double connection? ie, ssh-ing to a machine from an already
open ssh session?

I'm amazed I get -1 for that post; scp is clunky as hell when you already have
a shell in 'that' directory; and it'll only work if you have /direct/ access
to the machine you are logged in, and that's rarely the case if you first
connect to a front end machine.

I'm an embedded dev as well, and I use zmodem everyday. I have boards that
have no network, just a serial port, and I can upload an executable, download
the log from just the debug console.

~~~
jacquesm
It's interesting how tcp/ip is pretty much taken for granted. Of course you
_could_ run SLIP over that serial port ;)

Just the other day I was bitching about how it is easier to drive a printer
than a relay from a present day computer, the answer I got back was 'can't you
use an arduino?'...

~~~
buserror
Hehe you'd be /amazed/ how much smaller the kernel gets it you don't put in
IPv4/6 -- and let me tell you, when you upload via uart, every little helps
:-)

My fav method is to build a kernel with just busybox using my minifs [0],
making sure I have kexec support in that kernel.

Once booted, I can upload a new kernel via zmodem, and kexec straight into the
new kernel. Rince, repeat!

You can also use zmodem to upload new binaries to a system, even if it's an
initramfs, without having to do a full rebuild/reboot. Quite handy.

[0]: [https://github.com/buserror/minifs](https://github.com/buserror/minifs)

~~~
voltagex_
I wonder if I could use zmodem via VirtualBox's serial port... I mean, I have
PXE for loading new kernels but this seems cooler.

------
rmason
I attended several BBSCon which was a BBS conference sponsored by BoardWatch
magazine. It later morphed into ISPCon.

Chuck Forsberg was a featured speaker from the beginning at BBSCon. Here's
audio of him talking with Ward Christensen, inventor of XModem as well as CBBS
which was the world's first BBS.

[https://archive.org/details/93bbscon-
bbshistory](https://archive.org/details/93bbscon-bbshistory)

BBSCon was a small and intimate conference and I got to meet Chuck, John
Dvorak and Peter Tattam who were all heroes of mine.

~~~
rasz_pl
Too young for BBS, but was able to catch up watching "BBS The Documentary" on
YT

[https://www.youtube.com/playlist?list=PLgE-9Sxs2IBVgJkY-1ZMj...](https://www.youtube.com/playlist?list=PLgE-9Sxs2IBVgJkY-1ZMj0tIFxsJ-
vOkv)

[http://www.bbsdocumentary.com/](http://www.bbsdocumentary.com/)

------
JustSomeNobody
This is very sad.

If you're not old enough to remember late nights dialing into BBSs you really
missed a very interesting time in computing. Most BBSs were pretty tight
communities. ZModem was an integral part of the technology that made this
happen.

------
steego
My brother and I discovered BBSes in at the peak of our adolescence. Someone
had given a copy of Procomm that we could use with our 2400 baud modem and a
list of BBS numbers and it didn't take us too long to learn that some of those
BBSes hosted porn. We had some friends with modems and it wasn't long before
we started a porn collective where we'd coordinate downloads and share images
via floppy disk and bicycles.

Because most of the BBSes would only give you 30-60 minutes a day, time was of
the essence. You'd quickly log in, scan the list of files with the most
promising sounding name, start your download and wait an agonizing 5-6 minutes
counting the seconds until it was complete.

There were a few dilemmas you had after downloading. You could disconnect so
you could view the picture right away, but you risked not being able to get
back in because some other guy called as soon as you hung up.

ZModem was a godsend. Not only was it faster, it supported resume after abort
when your line got disconnected. Soon after, the terminals and picture viewers
were getting so good you could shell out and view images while you were
downloading.

~~~
nsxwolf
I can't remember the name of it, but I had a terminal emulator that would let
you view JPEGs and GIFs while they were downloading.

~~~
jacquesm
Either Qmodem or Telix iirc.

------
CodeWriter23
Zmodem inspired me to rewrite the CP/M BIOS routines for reading the floppy
drive on the computers we sold at my first job. The floppy format had a sector
interleave of 4, which meant 4 rotations to read an entire track. 300RPM is
slow enough without cutting it to 75 effective RPM.

The interleave was a throwback to the programmed-I/O days of older systems;
the CPU couldn't setup to read the next sector right away, so they solved that
problem with an interleave. But the new systems had a DMA controller, so I
made the BIOS interrupt-driven and read the sectors out of order but into the
correct RAM buffering address. Instant hot rod floppies. Everyone on the team
bitched that I "wasted" two days "over optimizing a non-core feature". You
know what though, they all smiled most every time they had to sneaker net
something to a different department.

------
steven2012
Zmodem was awesome. I remember the transition from Xmodem or Ymodem to Zmodem.
Zmodem was fully duplex and was so much faster than the other protocols, until
BBSes died due to the Internet. I'm hopeful he lived a very great life.

~~~
efdee
That is, until SModem killed the ZModem star ;-)

Good times. Sad to hear Chuck has passed away.

------
noddingham
What a great write up of someone that was very influential in the BBS world
for pretty much all users. My ZModem memory is downloading the 5 zip files for
Duke Nukem 3D.

We had three BBSes (Tat's Box, Blind Man's Bluff, Microcosm) in the mid 1990s
where I lived in East Texas and would have regularly monthly meetings at a
local pizza place. It was a special time that I wish more people could have
experienced.

The conversations about politics, religion, and computing in general are
similar to what I see on the web today, but back then it felt like everyone
was more aware of the fact that there was another person on the other side.

~~~
dugmartin
In college ('89-'92) our local BBS meeting was called "Swap/Meet the Sysop".
Lots of diskette swapping and good conversation.

------
ath0
Posting to +1 only because of my username for the last 25 years. Godspeed.

------
voltagex_
Specification:
[http://gallium.inria.fr/~doligez/zmodem/zmodem.txt](http://gallium.inria.fr/~doligez/zmodem/zmodem.txt)

Clarifying StackOverflow Q&A:
[http://stackoverflow.com/questions/9611000/understanding-
the...](http://stackoverflow.com/questions/9611000/understanding-the-zmodem-
protocol)

------
lholden
Without zmodem... I wouldn't have downloaded the huge number of floppies
required to install SLS Linux back in the early 90s. The download took
forever. I can't imagine how long/hard it would have been without it!
Instrumental in my getting into Linux!

Sad news :/

------
smrtinsert
I never knew him or was aware of him, but apparently I loved him.

From the wikipedia page on zmodem: This design limits the feasibility of
ZMODEM to only reliably transfer files that are under 4GB in size.

Haha, I remember waiting 30 minutes for 200k and that seemed like forever. How
anyone would have gotten to 4gb back in those days and would even have a way
to store that much data makes me chuckle.

------
magoon
Brings back memories. I used the official Omen Technology software externally
on my BBS because it was better than the software's built-in implementation.

Omen also had a terminal client that was equally as cumbersome to use, but
quite powerful. I used it for a few months until the richness of Terminate
pulled me back.

------
Imagenuity
Back in the 90's I ran a 24 line BBS that used Zmodem and a Telix script I
wrote to mirror itself to 20 systems worldwide. Zmodem was the only way I
could reliably transfer files to those systems via dialup. Chuck was always my
hero for writing such a solid protocol.

------
jpalomaki
At some point in Finland we got smodem. This was huge improvement. You could
upload, download and chat at the same time.
[https://en.m.wikipedia.org/wiki/SMODEM](https://en.m.wikipedia.org/wiki/SMODEM)

------
facorreia
Well, God bless him! I'm thankful for his work on Zmodem. It was such an
advancement over X/Ymodem. His work had a positive impact on helping me learn
more about computing, and become more fascinated with it, which I am to this
day.

------
trimtab
Alas, even the omen.com domain is for sale. See:
[http://www.omen.com](http://www.omen.com)

Chuck Forsberg was the kind of optimizing engineer we just do not see much
anymore.

------
TimMeade
Very sad news. Ran a BBS in the early 90's and it was a wonder to move to
Zmodem. I still use it every day. lrzsz and built in zmodem in ZOC. Superfast
simple file movements.

RIP.

------
frandroid
"Many people study and work at learning computers and engineering. Chuck
Forsberg just knows."

After Chuck Norris and Bruce Schneier memes, now we can start Chuck Forsberg
memes :)

------
voltagex_
I tinker with embedded hardware in my spare time, basically anything I can get
serial out on. It seems like I could learn a lot from zmodem - but where do I
start?

~~~
JustSomeNobody
Someone posted a link to the spec above (or below?).

------
rhokstar
I used ZModem in the late 90's before getting on to the internet. BBS's and
gaming at the time were my play grounds as a teenager.

------
biot
+++ATH0

RIP, Chuck

------
sphildreth
What an awesome obituary.

------
sgt
I remember Zmodem. Very impressive protocol. Btw, when I saw the title of this
link I knew it had to be a jacquesm post.

