The disappointingly ongoing success of WvDial
For those who don't know, I'm one of the original two authors of WvDial (Oh yes, that's a real Wikipedia link!)... back in 1998. WvDial and its spinoff C++ library, WvStreams (notably not a Wikipedia link), were the absolute first code written as part of Weaver, our startup's commercial product, which became Nitix (Wikipedia again, but article is outdated) and later Lotus Foundations (Wikipedia "stub" article).
The Wikipedia articles make a pretty good proxy for the comparative success of those programs. Another silly statistic I like is Twitter search (Lotus Foundations seems most popular in Japan at the moment).
Yes, yes, so WvDial remains popular. Yay us, right?
See, that's the funny thing. First of all, wvdial maintenance has been almost zero (not quite zero1) for most of the last ten years. WvDial has no GUI; it's purely a command-line tool. WvDial is a modem dialer and nobody uses modems anymore. WvDial is written in C++, which is generally unpopular for small tools and makes it ABI-unstable and bigger than you'd like. WvDial has no unit tests and so everyone is (rightly) afraid to change its rotting guts. And perhaps most oddly of all, none of the problems WvDial originally set out to solve are problems today.
This story is not a story of WvDial's awesomeness. It's a story of the open source world's pure unadulterated fabulous nonstop 12-year marathon of suck.
I tried Twitter a while back and I'm pretty much over it, but I do still subscribe to some Twitter search RSS feeds just in case anything interesting happens (it never does). Every single day, several people recommend wvdial to their friends. With comments like "wvdial always works, let me help you set it up." In multiple languages.
Speaking of suck, that Twitter search is how I learned that Ubuntu's most recent release(s?) have dropped wvdial from the CD in favour of NetworkManager. You can still download wvdial from the Ubuntu repo, except... whoops. You can't get online without wvdial. Because speaking of suck, NetworkManager apparently does. (I've never tried it; I haven't used a modem in years.) So we have people who can't get online, downloading the .deb files on another computer and moving them via sneakernet over to their laptop. And so on. People can't live without the thing. I would say they love it, but I still hope that isn't it.
Why WvDial was created
We originally created wvdial back in the late 1990's because setting up pppd 'chat' scripts was too annoying. At the time, a lot of dialup Internet providers required you to answer some menu items, log in, etc before you could start an actual PPP session, and every ISP did it differently... so everyone needed a different chat script. It was all gross.
The point of WvDial is that it would read the stupid inconsistent menus and prompts for you and answer them. For the first few versions, it failed almost every time. But we got lots of feedback from lots of people all over the Internet, and we fixed it. Eventually, it got to the point where basically nobody wrote to us anymore asking why wvdial didn't work with their ISP, even though thousands and thousands of people were downloading wvdial every month. (And that's just from us; we didn't have any stats on who installed it from a real Linux distro.)
But here's the thing. Windows 95 and later have a built-in dial-up PPP feature that doesn't even support anything like chat scripts. All they do is dial up and start PPP, and if your ISP can't handle it, well, that's too bad. Oh, there were ways of working around it, but they were gross, and it didn't take long before most ISPs abandoned their menu structures and just did things the easy way. In WvDial, we called the Windows 95 behaviour "stupid mode" since it was the opposite of wvdial's evolved, intelligent conversation style.
Unsurprisingly, some combination of Worse is Better and "everybody runs Windows" conspired to make wvdial's cutesy menu-guessing features completely obsolete. WvDial is, therefore, completely obsolete. Or so you'd think.
People keep using WvDial because everything else is worse
Why do people keep using WvDial? Well, it's hard to tell from a bunch of foreign-language 140-character Twitter posts. But I've observed the following: a) it's not for modems, it's for coupling to data networks via your cell phone and bluetooth that emulates a modem; and b) just things like detecting the right serial port, baud rate, and init strings, and redialing when you get disconnected,2 are apparently still big problems.
This all makes me extremely sad. First of all, pretending your advanced cell phone network is a modem, and thus bringing up questions like "should I use touch tone or pulse dialing?" and "do you think 19200 bps is fast enough?" and "what happens if I get a busy signal?" is a joke. Secondly, the fact that someone couldn't fudge up a bluetooth-cellphone interface for Linux that's more reliable than wvdial, even though wvdial was never designed for this use case at all, just really scares me. I mean, yes, I realized at the time that nobody had ever designed a tool like WvDial on any OS... but surely all the individual parts had been done before? You know, modem detection? Max baud rate detection? Init string detection? And now, more than 10 years later, surely someone has put the still-necessary parts together into a more sensible package? You know, maybe one with a GUI?
I can't quite figure out what people like about wvdial so much; why it's the fallback that people still recommend to all their friends when Ubuntu/Gnome's default (GUI, at least, thank God) dialer can't take the pressure. I suspect it's just the fact that wvdialconf tries all your serial ports one by one to guess which one is right, rather than making you do it for yourself.
Perhaps I'll never know.
Happy birthday, WvDial.
1 I haven't been involved in wvdial maintenance for quite a long time. Thanks to Patrick Patterson, Simon Law, William Lachance, and possibly others (Jim Morrison?) for keeping up with the maintenance over the years.
2 Okay, I admit it. WvDial's redialing support is pretty frickin' awesome. If you think about it, it's actually impossible to implement a redial backoff timer correctly using chat scripts. Do I don't think anybody else has even tried.