(portions) © 2004 Jamie Zawinski <email@example.com>
As I write this, it's just a bit over ten years since I started working at Mosaic Communications Corporation. In memory of that, here's a piece of history I managed to dig up.
When we created mozilla.org and released (most of) the source code to Netscape Confusicator 4.x, Netscape's lawyers made us go through a big "sanitization" process on the source code. Largely this consisted of making sure we had the legal rights to all the code we were releasing, and making sure every file had proper and accurate copyright statements; but they also made us take out all the dirty words. Specifically, "any text containing vulgar or offensive words or expressions; any text that might be slanderous or libelous to individuals and/or institutions."
At our release party on April 1, 1998 Pierre Saslawsky was handing out guerilla party favors consisting of a CD-ROM archive of the mcom.bad-attitude newsgroup, and a single sheet of paper with some choice source code obscenities on it from the pre-sanitization tree.
I found that piece of paper, and typed it in, below.
For comparison, a similar set of searches from the Netscape 3.02 source tree follows. (We didn't search for the exact same sets of words, and I suspect he edited his more heavily than I did, so don't assume that because the second list is longer, the number of obscenities in the 4.x series was lower...)
Enjoy it. By which I mean to say, fuck you.
Words You Can't Say on teh Intarweb -- Netscape 4.x -- Jan 1998
FREE CODE - FREE SPEECH STOP THE CENSORS!
Search started on Tue Jan 27 21:16:42 PST 1998 ns/config/mkdepend/include.c /* only bitch if ip has */ ns/include/allxpstr.h /* This SUCKS!! */ ns/iclude/bkmks.h defined in ntypes.h, and some compilers bitch and moan about seeing it ns/include/libevent.h * until necessary. Yow, there is a lot of shit in here now ns/include/proto.h * this shit shouldn't have to exist anyways. ns/include/xp_mcom.h /* this sucks, should I really include this here or what? *? ns/js/jsj/jsjava.c /* XXX extremely fucking lame - there should be security */ ns/js/jsj/makefile.com #// Win16 Sucks so BAD!!! ns/js/src/jsapi.c if (nbytes == 0) /*DSR072897 - this sucks, but Microsoft allows it!*/ ns/lib/layout/edtbuf.cpp // LTNOTE: what the fuck. This crashes sometimes?? // we are fucked! try something different. ns/lib/layout/edtele.cpp // if we get an Exception in this loop, the tree is fucked up! // out of memory, we are really fucked. ns/lib/layout/layblock.c /* Get the OVERFLOW attribute. (Fuck yuo, W3C. Fuck you.) */ ns/lib/layout/laytext.c /* we're long aligned, write the sucker */ ns/lib/layout/laytable.c * Prevent idiots who set colspan=20000000 * width then we grow the sucker. ns/lib/libcnv/writegif.c /* evil globals to satisfy the PBMPLUS library crap that I stole this from*/ ns/lib/libmime/mimehdrs.c # define terry_has_lost_his_mind_and_also_macs_suck 0 ns/lib/libmime/mimei.c /* #### TOTAL FUCKING KLUDGE. /* "Object oriented? Fuck that shit! Pabst Blue Ribbon!" --Dennis Hopper */ Life sucks when you don't properly think out things that end up turning ns/lib/libmisc/bkmks.c /* fuck bogus type. Who knows what's going on. Just quit and get out */ ns/lib/libmsg/msgcpane.h /* This sucks sucks sucks sucks sucks sucks sucks. */ ns/lib/libmsg/msgdbvw.cpp // Because HPUX10 native compiler sucks, and we suck (for using ints instead ns/lib/libmsg/msgglue.cpp // They'll never fix the damned warnings. To hell with quality: ns/lib/libmsg/msgpane.cpp // will result in a general "Piss on you complaint" and bring you back to the ns/lib/libmsg/newshost.cpp // first of all, this sucks. And second, no need to diddle folder pane ns/lib/libmsg/prsembst.cpp /* More fucking const short-circuitry... */ ns/lib/xp/xp_tracker.c /* this sucks to research the hash table, but I don't want to eat more */ ns/lib/mac/MacMemoryAllocator/src/StdCLevel.c /* now, if we don't have any memory, then we really suck */ ns/nav-java/classes/netscape/security/SystemPrivilegeTable.java // to make Symantec Cafe function properly -- piece 'o crap compiler) ns/modules/security/nav/secprefs.html var sa_url = "mailbox://fe/people/suck"; // fucking idiot! ns/modules/libimg/src/gif.c XP_TRACE(("Netlib just took a shit on the imagelib\n")); ns/cmd/macfe/central/InternetConfig.cp // it sucks no matter how we do this ns/cmd/macfe/central/RandomFrontEndCrap.cp #pragma mark --- PREFS CRAP --- #pragma mark --- SPURIOUS CRAP --- ns/cmd/macfe/central/flushmem.cp just can't fuck around. Oh, also moving memory would doom us anyway, and it'll all just be too damn hard to figure out. So, I give up, the Mac just completely utterly sucks complete rocks and there nothing on the planet didn't give a shit about cache, and images are very small and I can do the work // memory cache. I can't. Life sucks, then you die. I will defeat // this fucking machine before I go... that would suck, and once this reserve gets used there's nothing left. ns/cmd/macfe/central/mailmac.cp // NOTE: this sucks royally because we blast the scrap ns/cmd/macfe/central/meditdlg.cp // ok, we are formatting an image. turn off the buggy piece of crap feature void ApearanceContain::UpdateTheWholeDamnDialogBox() 4) The UI sucks rocks. not my problem...) ns/cmd/macfe/central/medithyper.cp PissOnThisDocument(fHContext); ns/cmd/macfe/central/mprint.cp This sucks, and will cause your machine to crash if a big delay happens for some ns/cmd/macfe/central/profile.cp // * I have no damn idea why this is so convoluted // BULLSHIT ALERT: Get out if I can't call GetSharedLibrary. ns/cmd/macfe/gui/CFontReference.cp if ( scaledSize < 9) // looks like shit at anything lower ns/cmd/macfe/gui/CHTMLView.cp // punt if one of our damnfool subcommanders is trying to put the onus back on us ns/cmd/macfe/rdfui/CHyperTreeHeader.cp // Handle, we're up shit creek without a paddle and with a very leaky canoe. ns/cmd/macfe/restext/MacXPStrings.c void AppleSucks ( void ); ns/cmd/xfe/fonts.c /* Invalidate the point size, I can't fucking read it. */ ns/cmd/xfe/colors.c /* Isn't it swell that we have to go through this shit just to */ ns/cmd/xfe/commands.c This pile of shit is what we need to do to implement that!! hacking the executable to change these URLs! Damn it! Grr! */ ns/cmd/xfe/dialogs.c /* This function is a complete piece of shit - it takes a billion flags */ #ifdef Motif_doesnt_suck #if 0 /* mustMatch doesn't fucking work! */ like that. This may lose for "Jr"s, but who cares: Unix sucks. */ ns/cmd/xfe/dragdrop.h /* Motif's drag'n'drop sucks so badly that I refuse to even try to */ ns/cmd/xfe/editor.c /* having to do this this is SO fucking stupid */ * Fuck these stupid Xt resource shit. Why the fuck is * is it so fucking hard to get a string! Like, what, ns/cmd/xfe/forms.c /* Motif likes to bitch and moan when there are binary characters in */ ns/cmd/xfe/mozilla.c model completely sucks and I'm tired of trying to figure out how to implement this without polling, so fuck it, and fuck you too. /* Works cannot express how much HPUX SUCKS! */ # define rename hpux_sucks_wet_farts_from_dead_pigeons ** MOTIF sucks. What else can you say? ns/cmd/xfe/selection.c /* I can't fucking believe the contortions we need to go through here!! */ ns/cmd/xfe/theremo.c /* Dont call this old fucking funtion */ /* take this shit out */ ns/cmd/xfe/src/BookmarkBase.cpp /* Motif sucks, as usual. */ ns/cmd/xfe/src/DisplayFactory.cpp /* But everybody lies about this value, fuck it. */ ns/cmd/xfe/src/PersonalToolbar.cpp // crap from marketing ns/cmd/xfe/src/PrefsDialogEditor.cpp n = 0; /* I'm tired of fucking with resources to get this right */ ns/cmd/xfe/src/context_funcs.cpp /* stderr hackery - Why Unix Sucks, reason number 32767. */ // thing out, say "what the fuck was I trying", and get on with your ns/cmd/winfe/cast.h // in debug, we shit on you if we actually lose bits. ns/cmd/winfe/cxdc.h // How to make sure such bullshit works on windows 16. ns/cmd/winfe/cxprint.cpp // Attach the fucker. // Haven't printed dick yet. ns/cmd/winfe/display.cpp /* check if Lou is a pindick */ ns/cmd/winfe/feutil.cpp extern "C" int FUCK(char * pMsg, char * pFile, int nLine) ns/cmd/winfe/fegui.cpp // Return 0 on success, -1 on failure. Damn unix weenies ns/cmd/winfe/femess.cpp // Since some asshole undid my work for untyped title strings ns/cmd/winfe/mailass.cpp m_pMysticShit = NULL; static BOOL bTracingShit = FALSE; static int g_InDeepShit = 0; ns/cmd/winfe/fmtext.cppp // Adjust for what we bastardized earlier in fill size info. ns/cmd/winfe/frameglu.cpp // blah blah I know too much about this shit blah blah. ns/cmd/winfe/intlwin.cpp // Obviously the intl folks don't give a shit that they're // MS sucks! See note above ns/cmd/winfe/nsapp.cpp // backend shit that we have no control over. ns/cmd/winfe/winproto.h // Read in the user's sig and do Jamie pacifying crap to it ns/cmd/winfe/woohoo.cpp return NULL; //The list file did not exist!!!! Bastards! Search ended on Tue Jan 27 21:35:21 PST 1998
Words You Can't Say on teh Intarweb -- Netscape 3.02 -- March 1997