Hacker News new | past | comments | ask | show | jobs | submit login
AOLserver is America Online's Open-Source web server (2010) (aolserver.github.io)
203 points by marcodiego on April 21, 2023 | hide | past | favorite | 100 comments



AOLserver was originally NaviServer, before AOL bought it. That’s why all of its API identifiers have the prefix `Ns_` (or `NS_` or `ns`, depending on the kind of identifier). Kind of like how (coincidentally) Apple’s Foundation and AppKit frameworks use the prefix `NS`, because those came from Nextstep.

In 1999, I was hired by ArsDigita, a web startup that used AOLserver, mainly to provide internal development and support for AOLserver. ArsDigita used big multi-CPU Sun servers (this was long before Oracle bought Sun) and I ended up diagnosing several race conditions in AOLserver that the AOL developers had trouble reproducing because they did their dev work on single-CPU boxes.

Fun fact, ArsDigita founder Philip Greenspun (of Greenspun’s Tenth Rule) knew Robert Thau from their shared alma mater MIT. Robert Thau (rst) designed and implemented Apache’s original module API. So ArsDigita hired rst to write mod_aolserver, an Apache module that provided enough of AOLserver’s API to allow running ArsDigita’s codebase (ACS) under Apache.


This was Rails, years before Ruby mattered at all.

Back in 1999 I joined a startup (Intervento) that had a product based on the same ideas, we created our own Tcl module that could be plugged into either Apache or IIS, had a DB abstraction layer that would generate all CRUD stuff for each table for Informix, MSSQL, Sybase SQL, DB2, Access, Oracle, targeting Aix, HP-UX, Solaris, Windows NT/2000, (we also had Linux but it wasn't considered production ready), extensions could be furter coded in either Tcl or C, and we had an IDE written in VB 6.

We got acquired and became part of Altitude Software, eventually as MSFT partners we got early access to .NET and decided to port the same ideas into .NET, this gave us the performance that Tcl/C didn't deliver under very heavy loads, and Visual Studio.NET was better that what we managed to have with our in-house IDE.

Eventually some of Intervento founders left, and created what is nowadays known as OutSytems, one of the few successful low code companies.

It was a great experience, however as one the persons responsible to optimize Tcl code into C modules, and part of the .NET migration team, I learned to never consider languages without a JIT/AOT compiler for nothing serious beyond OS scripting tasks.


I've written a lot of code in my life. It's fun to think about how much of it gave me a lot of grief when I was writing it and it's not even running anymore haha. On the flip side, it's a bit existential to think about code I've written outliving me and running on peoples' machines long after I'm gone...


Your first part really speaks to life in general about things that suck away life-force, like arguing or being petty.


> It was a great experience, however as one the persons responsible to optimize Tcl code into C modules, and part of the .NET migration team, I learned to never consider languages without a JIT/AOT compiler for nothing serious beyond OS scripting tasks.

As a slight aside, I once worked on a molecular dynamics simulation program which used Tcl for the basic setup, and then performance critical parts were done in C. A fine enough approach, except that the original authors had decided that the one hammer to get good performance out of C was inlining. And they used this everywhere. Literally everywhere. Everything except for main() and some I/O functions was defined in "static inline" functions in header files.


I created, with some other people, what went on to become Apache Rivet: https://tcl.apache.org/rivet/

It did less than AOLserver, but was also very lightweight and easy to integrate with Apache.

For a long time, https://flightaware.com/ used Rivet under the hood.

Tcl was... is a fantastic language for doing web development. Its flexible nature made it really good for doing template/PHP type stuff, and being pretty string friendly, you had a lot of what you needed out of the box.


Thanks for creating Rivet! I use it for several separate pieces of interactive functionality on my home server, the way some may use PHP. The API is simple enough, and if you already know Tcl it doesn't take you long to get started. I like how easy it is to add file uploading to an existing form with ::rivet::upload.

> Tcl was... is a fantastic language for doing web development.

Except for JSON. You can't round-trip JSON through Tcl because dicts are lists are strings. There are solutions out there (https://wiki.tcl-lang.org/page/JSON), I even wrote a few of them, but in the end there is a fundamental impedance mismatch. It gets in the way of emitting JSON from quick hacks or the REPL because you essentially need an explicit schema.

For text-based templates, Tcl is good. I have written code to generate CSS in Tcl and loved how well the language fit the task.

(I found this out for CSS when I contributed a responsive stylesheet for https://www.tcl-lang.org/. I wanted a CSS preprocessor to avoid repetition, and one that would never break, at least not before Tcl did. I think it worked well. The template uses subst and some variables. It is Tcl 9-ready. :-) I recommend trying it if you do web development in Tcl.)


what are they (flightaware) using now


There's still a few .rvt links on the site, so they may still be using a fair bit of rivet.


> That’s why all of its API identifiers have the prefix `Ns_` (or `NS_` or `ns`, depending on the kind of identifier). Kind of like how (coincidentally) Apple’s Foundation and AppKit frameworks use the prefix `NS`, because those came from Nextstep.

Also lots of stuff at Mozilla, because of Netscape. Usually signifies an older part of the Firefox codebase.


Ironically, all of these are NameSpaces (NS!) that... end up basically sharing the same namespace.


I always thought they meant namespace. In a weird, indirect way, they did!


ha. totally forgot about Philip Greenspun. He also started photo.net which was basically the most prolific online community for photography back in mid 90s/early 2000's. spent majority of my high school / college years browsing that site.


Because I read Greenspun's website so much, I was sure I would be writing Tcl for a career. Turned out I did far more photography (still don't own a plane).


[flagged]


He still writes about planes! To me he doesn’t seem so much pro Trump as skeptical of certain thinking within the current left (and many Covid policies, though general opinion has shifted in his direction somewhat).


I mean he painted his chopper into Trump livery and flew it around to "trigger the libs", so…


I was cleaning out my old books just a few weeks ago and put 'Alex and Philip's guide to web publishing' in the 'can't justify to keep, feel bad to throw away' pile. I've been trying to give it away on our local ebay but doesn't seem anyone still remembers the cultural significance, or cares about a book on it...


Glad to see another fan of that book here :) That book is a “definite keep” for me, although chunks are coming out of the binding. The parts that retain the most significance to me are the amount of thought and design he put into web communities. I think this was because he was operating in an era (and coming from an era) where putting a community online in a “scalable” way was expensive and time consuming, so he thought through his goals and the potential ways to achieve them and the corner cases very thoroughly before coding. It also came from a time when, due to the newness of the medium and a shortage of expertise, there was an ethos of democratic education — the idea that anyone can learn this stuff. Even the ways he thought of web communities tended to involve peer education instead of just publishing for clicks.


> That’s why all of its API identifiers have the prefix `Ns_` (or `NS_` or `ns`, depending on the kind of identifier). Kind of like how (coincidentally) Apple’s Foundation and AppKit frameworks use the prefix `NS`, because those came from Nextstep.

I've always hated when APIs and types are prefixed like this. It doesn't play very well with autocompete.


It largely came about at a time where autocomplete was not a widespread concern but C's lack of namespaces was.


Tell that to the company I worked for 5 years ago. People are still doing it for some reason.


It makes sense in C, doesn't it? You want your or some library's string abstraction available separately and not a bunch of errors because you both defined a different `struct string`.


We didn't use C.


Interesting. I always assumed it was Netscape, seeing as they'd purchased the company rather publicly.


AOLserver ate the Netscape server for lunch


This might be searching for patterns where there are none, but is there any relation of ArsDigita to ArsTechnica?

Are the names some sort of cyberpunk in-joke?


"ars [some adjective]" is a not-uncommon construction for a name — you see other examples around like "ars mathematica".


"Ars" is Latin for "art". Can be read as things like: "Art digital", "Art technical", "Art mathematical"


"art" is a valid translation in certain contexts, but a more accurate general one might be "skill" or "craft". And noun-adjective is a typical word order in Latin, so you can just translate into English using a grammatical word order ("technical craft", not "craft technical"*).


Man, those heady pre-dotcom crash days. I remember reading his blog, and all the drama when the VCs took over and kicked him out.


The architecture of AOLserver was ahead of its time back in the day. Using threads rather than processes like Apache meant that all the threads could share a connection pool to the database. And the built-in Tcl support, while idiosyncratic (everything is a string!), was good enough for most web backend work.

Phil Greenspun wrote a book about architecting web applications ("web scale" two decades before that became a meme) that was, and still is, available for free online (https://philip.greenspun.com/panda/ ).

Greenspun had a company, ArsDigita, that created a big framework for building web applications, ACS (ArsDigita Community System), and there was an open source version of it called OpenACS that AFAIU was basically a port from Oracle to PostgreSQL (the recently released PostgreSQL 7.0 had just acquired sufficient capabilities to be usable as an Oracle substitute for ACS) but otherwise pretty much the same. Back then when a "web framework" basically meant a hodgepodge of spaghetti PHP, this was beyond awesome.

I used OpenACS to create some intranet reporting systems as a summer intern back in the day, and it was pretty good, the code was decently well structured and understandable. Though in retrospect I pity whoever had to maintain that tech stack after I left; my best guess is the system ran for a few years until they killed it off as nobody understood it since OpenACS was very much off the beaten track.


AOLserver was 5 years ahead of its time, then stayed put for the next 10. Back under the name NaviServer it is still being actively maintained, although new development is intermittent. Likewise, OpenACS is still a going concern, but the community is kinda small.


IIRC Arsdigita took on VC money, forced out the original management, decided to rewrite ACS in the language du jour (Java), which as a side effect pretty much ended Arsdigita involvement in OpenACS.

AOLserver and OpenACS both being stranded on their own little tech island, it's not surprising the rest of the world eventually caught up and surpassed them.

My own career took a different path, so I haven't kept up with the fortunes of OpenACS. Impressive it's still being developed.


This reminds of the web server that Netscape used to offer. You could write server-side JavaScript which was both radical and widely disparaged at the time.


Man I miss the old internet. It was a wild adventure around every corner with a huge diversity of tech and self hosted everything.


Same. I'm sitting here nostalgic for the days when I'd stay up late on my parents' computer talking to God knows who on AOL, reading about black boxes and phreaking in very vanilla sources, and learning how to write progs in VB back in the day. Oh the excitement when I got in the Winsock beta and now my whole OS had Internet connectivity. It was great times.


VB progz are literally at the root of the origin story behind I'm even here, now, writing this comment on this website. Seriously changed my life by compelling me to find an answer to the question "how did they build this?", which led me to coding. 25 years later and here I am.


Same. It took me years to even figure out I could just buy programming books from the store. But progs like Magenta and AOHell, plus the F1 help/documentation built into vb and the like, set me on the path.


> AOHell

Early gateway drug for me too.


There's dozens of us!

Here's an old thread some of you guys might have missed: https://news.ycombinator.com/item?id=31001916


> “how did they build this?”

I feel like this is the absolute distilled essence of this site and its visitors.


Dan Applemans guide to the Win32 API and some bas files really kickstarted things. {S /con/con. I think I’ve still got ancient copies around here. Time to browse lenshellprogarchive.com.


Me too! It was aol punters and vb proggies that were my first push into programming and here I am all these years later.


I miss the content of the old Internet, but I do not miss its tech.

Web design in general was garbage. Not just the good kind of garbage, with funky animations and weird colors, but horrible typography, unreadable fonts, zero accessibility, horizontal scrollbars everywhere, images used as text, misaligned tables, no math typesetting, no videos, and no interactive content without installing more garbage like Flash, ActiveX, or Java.

When writing server-side stuff, your options were basically Perl/CGI, and later PHP, both of which are insecure trash that makes today's JavaScript look sane by comparison.

The average modern blog is a masterpiece of readability, usability, and frontend/backend engineering, compared to almost anything seen on the web during its "golden age".


Perl's Taint mode made it more secure than most languages, including today's. Other languages later ran into the same security bugs that had been fixed in Perl a decade before.


I wouldn't go that far. Perl's got a very simplistic view of a tainted value with no context of usage. An untainted value will be fine for example for embedding in html, but not for SQL queries, paths, mongo queries, json strings, shell downs, etc. The protection/checks you get from it are really minimal in practice in comparison to Sonar and similar analysers.

Ruby also had tainted values and dropped them recently https://bugs.ruby-lang.org/issues/16131


The simplicity is what I liked about taint mode - it didn’t purport to make anything safe for any particular context, you had to do that yourself. It just tracked strings that came in from outside Perl to make sure they didn’t get sent outside Perl again without being run through a regex. My main critique is that you don’t always want to use a regex to check safety, sometimes you want to try properly parsing a value before handing it off to another system. So in various places I’d end up untainting with a dot star regex.


>The average modern blog is a masterpiece of readability, usability, and frontend/backend engineering, compared to almost anything seen on the web during its "golden age".

Eh, maybe. There's a lot more scrolling, sure. And whizzy CSS tricks to make things rotate and gradients and whatever. And you can download a coolio new font so the site looks like it was typed on a 1932 Royal typewriter with a crooked arm on the "G" key.

But then I go to something like the OpenBSD site, and I remember how much I liked the simplicity of Ye Olden Tymes.

Back in the bad old times, there was no problem getting something centered when using tables. CSS only got that working reliably 17 minutes ago. And while making your page look like a brochure with invisible GIFs and table layouts was kinda heavy, we've replaced it with 100MB of Javascript and an embedded WASM running Emacs.

If we had to run the modern Web on dial-up, we'd all be dead before Reddit loaded.


> There's a lot more scrolling, sure. And whizzy CSS tricks to make things rotate and gradients and whatever. And you can download a coolio new font so the site looks like it was typed on a 1932 Royal typewriter with a crooked arm on the "G" key.

What are you talking about? That description doesn't match 99% of blogs. In fact, rotating things and gradients were a staple of the old web, not the current one.

> Back in the bad old times, there was no problem getting something centered when using tables.

Cool. Except it only works on a standard sized desktop screen. And good luck using such a site if you are vision impaired and need assistive technologies. "Bad old times" indeed.


> If we had to run the modern Web on dial-up, we'd all be dead before Reddit loaded.

Well, we don't. That's a big reason why it exists today and didn't back then.


I miss it too. We've lost so much. Anytime I find a self hosted web page with very basic html, I get excited.

I learned that there's a whole corner of the web where Japan never left web 1.0 design. The thinking being, if it ain't broke don't fix it.

God bless Japan.


Can I ask why you put “self hosted” and “web 1.0 design together” so tightly? I self host a blog, and several apps, which are modern and full of JavaScript.

I guess I’m not disagreeing - I also miss Web 1.0 - but combining the two seems like throwing the baby with the bath water. Can we have self hosted AND modern?


I can't speak for the person you reply to, but for me, I get a certain easy, comfortable feeling when I see something that looks like a GOOD basic 90s site. I don't mean the stereotypical spinning GIFs and whatever -- but if I see thoughtfully-presented content using nothing more than the default font, blue links (purple if I cliked it!), maybe some <hr> tags to help with organization a bit, and I see "Last Updated: 2023-xx-xx", I feel like I'm in very good company.

(but I do appreciate some effort to constrain the page margins. :) )


Textured background optional...

Andrew Odlyzko's website is much in this style: <https://www-users.cse.umn.edu/~odlyzko/>

Hal Varian's UC Berkeley pages as well: <https://people.ischool.berkeley.edu/~hal/people/hal/papers.h...>

Both of those are highly info-dense to boot, and load near-instantly.


> I learned that there's a whole corner of the web where Japan never left web 1.0 design.

Examples?


See https://randomwire.com/why-japanese-web-design-is-so-differe...

It is amazing that almost 10 years have passed since this article, but the example web sites are still more or less the same.


I miss cgi-bin urls after form submission.


Much of the old internet is still there, just outside the walled gardens of the modern internet.


A good place to view them is r/forgottenwebsites on Reddit, sort by top of all time. Choose one and then follow the links on those pages to other websites and "surf." Its a fun pasttime.

edit it seems that Angelfire is still live, so you can view sites made on that


that was a fun rabbit hole, thanks haha.


But hey, at least we have a great JavaScript ecosystem now, right guys? Right? Sigh. I too miss the good old days.


While I too miss the old internet, more the pre-AOL-participating internet.

It's been steadily downhill ever since, and worth noting that it's now so awful even the late 90s/early 2000s look like utopia in hindsight.

https://en.wikipedia.org/wiki/Eternal_September


You and me too sibling. We really lost something.


Before a rewrite in Java around 2009, MapQuest ran on AOLserver. Tcl was a bit of a surprise to me, and struck me as a very powerful dynamic language.

If AOL had open sourced it sooner it might have occupied the “A” in the LAMP stack.


Tcl is pretty amazing, in my opinion. I have used it since 1995-ish and have always enjoyed it. I worked on code in AOLServer for a while, and it was a pretty powerful tool for dynamic page generation.


It was a bear to maintain large codebases with. AOLserver could have won had move languages been built into the server (python, perl, etc) but Tcl was so well integrated trying to bring another language to its level would have been far too much work


Back in the 2000's Dossy Shiobara kept putting out the idea that AOL Server should have a JavaScript engine. If he had made that happen we really could be living in a different world today.


It's an absolute delight to see this at the top of HN! I spent a good 8 years trying to convince people to use AOLserver over Zope as part of OpenACS (https://openacs.org).

AOLserver is still used in .LRN (https://dotlrn.org) which is why the GitHub repo is still alive.


It looks like .LRN didn’t get a release since 2013, is it still being developed or it reached maturity?


This was cool back in the early days of the web. It was used by Philip Greenspun, who wrote the classic "Philip and Alex's Guide to Web Publishing": https://philip.greenspun.com/panda/


https://github.com/aolserver/aolserver

“AOLserver is the backbone of the largest and busiest production environments in the world.”

: )

That title must go to Nginx or Envoy these days.


I worked on this as an intern in 1997 and led it for a while. AMA


Hey George! We should catch up! (to readers: I was the guy who hired George as an intern and he was awesome. so AMA too!)

AOLServer was so, so, so far ahead of it's time. It had a WYSIWYG HTML editor years before Dreamweaver that could post content to the server. The integrated (Illustra!) Database and TCL interpreter meant you could build basically anything with it. Props to Jimbo and Doug...

We built what I think might have been the worlds first massively multi-homed, self-provisioning hosting service (called, creatively, "Navi-Service") with it. Think Linode but in 1997.


What issues did you run into using Tcl? (If any)


did you make the CD's?


Ah, AOLServer! I remember using it when it was NaviServer. I helped to launch my employer's website (packardbell.com) on NaviServer on Solaris way back then. Some of the things I liked:

* It had a decent HTML editor that our marketing people could easily use to update news items on the website. The editor talked directly to NaviServer in a WebDAV-ish way to browse and edit the files.

* It was packaged with Illustra RDBMS for full-text search of the hosted website. Never heard of Illustra? Neither had I back then, but when I fired up the Illustra CLI, it looked awfully familiar! I quickly learned that Illustra was a commercialized version of Postgres.

* I emailed the vendor at the time for a Linux port. The response was that Linux didn't have proper threading libraries. This is back when Linux had sub-par support for threads in the libraries. I replied with a pointer to a thread on LKML about Linux kernel-level threading (IIRC, clone()) and the response was that the functionality looked similar to Irix, and they would try a port. They released a Linux port not long after.

* NaviServer didn't just serve HTML pages. It was also a basic application server due to integrated tcl. I never really mastered tcl, but I was able to build a basic repair center lookup page on the site.

All this back in the mid-90's!

In many ways, NaviServer was way, way, way ahead of its time.


It's posts like these I wish my site wasn't half baked.

Self plug: Its missing SSL. I know, but for now collects no information from the user.

This is my WIP coded in PureTCL utilising NaviServer with no JavaScript or DB; everything is a button. The clock updates on the minute and you can display and soon to set the timezones. (Africa is the only region that has timezones regions configured). Getting my head around designing a timezone UI is tricky however all are powered by socket servers too. Menus, time, content et cetera.

http://www.neoncrystal.com

NaviServer really is a charm and while the "cloud" has its advantages you loose out on so much experience not self-hosting, coding in the language not as an app.


Seems a little more like "raw dough" than "half baked"


heh, yeah, I totally agree.


RCS: @(#) $Id: README,v 1.7 2005/08/24 14:12:45 shmooved Exp $

Nice. The codebase remembers RCS! (Of course it's not about missing times of RCS, I'm just pointing out the codebase is old)


CVS also had the capability to automodify these RCS tags, so it might be they started with CVS.


Fair enough, but why put "RCS" tags into the source when starting with CVS? I think when starting with CVS, it would be enough just to put the "$Id: (...) $", without this "RCS" prefix.


Zipcar ran on this until recently.


Philip Greenspun's blog posts about web development got me into building web applications in college and sold me on the design principles behind ArsDigita Community System (ACS), which ran on AOLServer and Oracle. When I joined Zipcar in 2001, I advocated for building our new web app on that stack. I still think it was a good fit, given our options at the time.


As a longtime zipcar member who owns Philip & Alex’s Guide to Web Publishing, this was awesome to learn!!

I hope for zipcar’s sake that Oracle was reasonable about the licensing fees…


Got any sources for that? I'm curios now.


Can confirm as of 2017 most of the software running in production was OpenACS. I try not to think about all the tangled webs inside Oracle PL/SQL procedures. I had hoped the rewrite finished years ago.


Can confirm. (I am 50% of the original engineering team. @tashian is the other/smarter!)


It was built on the Arsdigita Community System which had a parallel community called OpenACS.


I was curious, too, so I Googled it. It wasn't that hard to do. Here's one, but I encourage you to do your own searching, too, instead of just asking for others to.

https://www.cio.com/article/244398/qanda-zipcar-founder-robi...


That's not very helpful either. Sometimes folks on HN will chime in with anecdotes and other tidbits that are impossible to find on the web. That's one of the great reasons for coming here.


AOLserver was way ahead of its time as it was a multithreaded server with native database connection to Oracle and PostgreSQL (as far back as 6.9). Its performance and ease of development was miles ahead of Apache and most other tools.

Zipcar was a Boston company that was founded around the same time in the same milieu as Arsidigita and adopted AOLserver since it provided such incredible performance.

I'm a bit surprised they ran it for so long but it makes sense. Many of the concepts that made it so compelling at the time remain quite relevant today though the advances in all areas of HW and SW make things like ORM less of a bear than they were those days.


But that’s not what they asked for. Anecdotes are great but sources are available outside of HN. If one is curious, why not take three seconds and search?


Now open source TOC/OSCAR, dammit. I want my open-source AIM clone. Please!


There is AIM Phoenix; it's a reimplementation though, I think the server is open source, but not sure http://iwarg.ddns.net/phoenix/index.php?action=main


Strangely, there's a small amount of recent activity on the GitHub repo.


I guess if you're starting something from scratch today you'd be better off using https://openresty.org/en/ (based on nginx and Lua) than TCL on this?


Probably, that's what we're using at work for a lot of things.


Anyone remember AolTurkey?


I used to think TCL was the coolest thing. Never quite got the hang of it though. Still like it, might be worth revisiting just because




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: