I invited people to email me; here’s what they have been saying.
I fear that Mozilla showed a weakness, when we replied to that initial complaint. We showed people we care about what they had to say about Brendan, and about politics. I think we shouldn’t. …
Although technically we are still good, I fear that our community is strained right now. We need to forget all politics, and focus on the mission. Only the mission. We shouldn’t care about other things. Hopefully we will pull through…
Recent events have made me very angry, and the more I think about it, the angrier I get. …
Brendan understood that for Mozilla to be successful in its mission, participants needed to check their prejudices at the door and work together to build this great thing. And he himself compartmentalized his prejudices away from his work life.
He awarded others this tolerance, but in the end was not awarded it himself by others.
While I am myself a strong supporter of equal marriage rights, I am shocked by what was done to Brendan. It was truly vindictive and intolerant, completely unbecoming of a movement that claims to fight for tolerance.
I am not sure what you will do with the feedback you get, but if you can, in the middle of the rest, express that there exists a point of view that the leadership does not listen well enough and needs to open up lines of communication to the leadership from employees, the community and even non-community users, that idea would be worth communicating.
I feel that Brendan was unfairly persecuted for expressing his views even though it seems evident he never allowed any personal views to affect his ability to function.
People have been justifying bashing his position on the basis that equality is normally and editorially required for any position of power. Unfortunately these people are either bordering on misinformed or purely idiotic.
I am surprised at how mean people can be toward Brendan. It is a big loss for Mozilla.
Somebody has been forced to resign from Mozilla because of his beliefs/ideas/opinions. That is exactly the opposite of what Mozilla states to be its “mission” …
I find it horrific that this backlash is a repeat of what you experienced two years ago. And it’s deeply affected me in my impression of how welcomed Christians are at Mozilla.
If you want your voice heard, or just want to talk in confidence (say if so), please email me.
If you ever wondered what contributing to Firefox feels like but you never had the time to read and follow through our instructions to setup a build environment or wanted to avoid screwing around with your precious system then this might be for you.
This article will guide you through a small list of steps that in the end will leave you with a virtual machine ready to modify and build your own development version of Firefox.
I hope this will be valuable to novice programmers that do not have a full C++ development environment at hand as well as to the more experienced folks with little time and lots of curiosity.1) Install VirtualBox
Note: The Open Virtualization Format (OVF) is supported by other Virtualization Environments such as VMWare, etc. You can use those if already installed instead of VirtualBox.
Go to the VirtualBox Downloads page and download the latest version available for your operating system. Should you already have VirtualBox installed then please ensure you are running the latest version by checking for updates before continuing.2) Download the Firefox Build Environment
Now is the time to download the virtual machine containing our development environment ready to modify and build Firefox. You can get it here:
(sha1 = c5717af5cccdc2c42e0a236a9859abffd940df9a)
Downloading ~2.6 GB might take a while if you are on a slow connection, sorry.3) Set up the virtual machine
Once the image has been downloaded you can double-click the .ova file and import the new virtual machine into VirtualBox. Please give it at least 2048MB of RAM (4096MB if you can) and the same number of processors that your host machine has available. Building Firefox takes up a lot of resources and you want it to build as fast as possible.
Now that your virtual machine is ready, boot it and wait for the Ubuntu desktop to be shown. A terminal will pop up automatically and do some last steps before we can get started. After a successful installation Sublime 2 should start automatically.
Note: Should you ever need root credentials, use “firefox-dev” as the password. If you want to change your Language and Keyboard settings then follow the instructions on How to change the UI Language in Ubuntu.4) Build Firefox
Click Tools > Build to start the process. This might take a long time depending on the features of your host machine, please be patient. You can watch the build progress in the text editor’s console at the bottom. Once the build has finished you can use Tools > Run to start your custom Firefox build and check that everything works as expected.
Note: if you want to switch from an optimized to a debug build then choose Tools > Build System > Firefox (Debug) and hit Tools > Build again to start a debug build.5) Now what?
You successfully built Firefox for the first time and wonder what’s next? How about picking a small bug for a start, contribute code and get your changes shipped to half a billion people? If that sounds compelling then take a look at Bugs Ahoy! and find something to work on that sounds interesting to you.
If you are interested in digging deeper into the build system or the version control system, or want to know more about how to create your first patch and post it to our bug tracker then take a look at our Code Firefox Lessons.
I would love to hear your feedback about the Firefox Build Environment! Please tell me what can be improved and what you would like to see in the next version. Do not hesitate to drop me a mail should you have a more detailed opinion.
Being in the middle a communication nightmare is never fun, but it is an important learning experience. I am sure that most problems start with miscommunication and escalate from there.
Say something happens, that you very much disagree with. Someone says something that attacks you personally, your beliefs or a group that you very much identify you with.
This doesn’t feel good, and it starts a few other feelings. It could be anger, disgust, annoyance, helplessness, fear, embarrassment, insecurity, just to name a few. None of those are good feelings. Some can be turned to good results but most make you feel at the lowest level unproductive and at the other end utterly shattered.
Let’s take a look at the most common ones:Fear
“Fear is the mind killer” is absolute truth. People who are afraid stop contributing and are silenced. This is how totalitarian regimes work: you show yourself as all-powerful and the one to make decisions and you silence all of those who speak against you in a very public and brutal fashion. This makes everyone live in fear – citizens and enemies alike. Fear makes you feel helpless, you don’t want to speak up as you don’t want to stand out. In the worst cases you don’t want to speak out as it would punish all the ones you love. You don’t want to speak as you will feel the brunt of the loud and aggressive masses. You have input to give but you feel that it isn’t fair that because of what you stand for you get pushed into a certain group in a loggerheads scenario of black and white.Anger
Anger can be productive. I am angry at myself to let my flat get to the state it is in now, so I am cleaning up. Anger can also be the end of any sensible discussion or dangerous. I cycle a lot in London. People cut into my lane, people push closer to me than they should. I could knock on their cars or shout at them. That would most likely get me killed as it would distract them and startle them into violent movements. Sometimes the best is to count to 10 and let it pass. Anger has an unfortunate tendency to pile up.
In most long communication problems sooner or later it turns out that one of the attackers isn’t without flaws and innocent either. This shouldn’t be a surprise – we’re all human. In many cases the most avid attackers of a cause are people who are just afraid of being the thing they attack. Fear again. Gloating about this is toxic. It is a game of throwing the blame back and forth that nobody can win.
What to do, what to be aware of?
Over the last few days I got many reassuring emails and messages from all sides of the debate thanking me for a less-heated stance and analysis. I am not a super-human with the patience of a saint. Instead I learned to analyse my own actions and think and reflect before throwing things out. I fail at times at this, too, but I get better and I am happy about this. The most important thing is to be aware of your effects, instead of your message.Mistake to avoid #1: Twitter is terrible for emotionally loaded topics
Twitter is awesome. I like the 140 character limit, as it makes me think before sending something away. Sadly it also allows for very short and strong messages that can turn into a ping-pong game of snark and ultimately, hatred or a grumpy “agree to disagree”.
Before you send a tweet about a sensitive subject, think about the following:
- Tweets make great comments that can be taken out of topic by media and other people. Nobody cares about the whole thread. The juicy bit is what gets quoted. Then it is up to you to defend yourself and bring context, that only 10% (if you are lucky) of the readers will ever hear about. Instead they themselves start shouting the wrong quote.
- Tweets are archived – of sorts and can be used against you months later. Doesn’t matter if your views changed, as you can not change the tweet it can be attributed to you. Oh yes, you can delete a tweet, but for the press this is an even better message. “$company employee showed his criticism on twitter but subsequently deleted the tweet.” is a good hint to claim your company or peer group censors you.
Don’t assume things. You have a brain; question them instead. One thing is simple to follow and important to understand: if you do not know something, don’t assume. It is as simple as that. You don’t know, so don’t say yes or no as you can be quoted and then it is up to you to explain yourself again. This is especially bad when your choice of guess was very wrong and you end up being put in a group you don’t want to be in. There is nothing more annoying than to be applauded by people you don’t like as you helped their cause.
People will try to bully you into taking a side, especially on Twitter. These people don’t care about insight (although that is a common trick: “hey, you are on the inside, this is amazing, I’d love to hear your ideas about this”); they want to have ammunition for attacks. “how can you say that didn’t happen or isn’t true? $x of your company said so, I can prove it here”. Don’t fall for this. Instead, turn the tables and ask questions. Repeat your questions if needed. Here are some I used:
- Where did you get this information from? I don’t know about that and wasn’t part of this decision. Can you show me?
- That’s an interesting topic and question, but I don’t think it can be answered here and in this format.
- Would you like people to talk about this topic if it revolved around you without having full insight? I would feel bad about this.
Do not say “No comment”. This means you know, but you choose to or aren’t allowed to say. It is an invitation to pester you until you give out the information you’re hiding.Mistake to avoid #3: Get scared and withhold information that is important
Be afraid of those who are out to get bad quotes, don’t be afraid of your colleagues. Unhappy silence doesn’t help – showing unity does. Talk to colleagues, talk to people who are near you and tell them about your feelings. Point out to people who you think are out of line directly and personally that they are. It is up to them to realise their mistakes and make amends, not for you to jump into the ring with them. The silent majority has important points to make, and you have the right to tell them to the loud ones.
If you are afraid of speaking out, tell people who do and ask them to bring your point of view into the mix. You don’t have to become the target, but you can be a helper to bring out the truth. Not the loudest should win.
Mozillians: This is an offer – if you have points that worry you and feel too intimidated to speak, tell me. I will keep you anonymous but do my best to tell people about your POV.Mistake to avoid #4: Get consumed by anger
Very angry people don’t want to find resolutions. They want to vent, they want others to feel bad so they can feel better. They want to win and silencing someone by beating them verbally into submission is a big kick for them. Avoid becoming that person. It can happen. Do not feed the trolls. My mother always said “the one who screams, is wrong”. I do know punk bands with great lyrics and messages, but on the whole, I think she is right.What can you do?
Don’t be silent too long. Don’t wait until things blow over and then give your opinion publicly. This just drags the issues out further. Instead, help finding solutions. Be part of the healing and learning process. Simple things work:
- Research and uncover obvious wrong messages – tell them to those who are paid to communicate for you. It is an arrow in their quiver
- Listen to people and offer help – if someone is obviously shaken, angry or feels helpless, contact them directly and offer a sympathetic ear. You might just help someone avoiding to become a target
- Tell people when they are destructive – personally and not in public. Don’t shout, just point out how what they said could be seen out of context and how it made you feel
- Take breaks – it is very easy to get into a frenzy by following everything that happens and our new happy social media world is made up of this. Information is an addiction and you want more and more and more and faster and faster. The fastest moving news is bad news and the most re-iterated information is most likely wrong but sounds important. (There was a lovely part in Hitchhiker’s Guide to the Galaxy where one race built a spacecraft powered by bad news. It was the fastest ever, but nobody was happy when it arrived on their planet)
Be nice to each other out there, protect yourself from being misquoted and ask lots and lots of questions. If you feel attacked by someone you didn’t expect to be attacked by, tell them directly and immediately and say how it made you feel.
Human communication is 20% what we say and 80% how we say it – voice, body language, facial expression. All of this is missing online, so let’s bring it back by talking to each other rather than shouting publicly trying to get heard.
We have two ears and one mouth, we should listen more than speak and more importantly listen all around before we do so.
I’ve decided I will let my web browser provider think whatever they want, so long as they don’t support fascist segregation of ideas
— ertdfg in a discussion on other blog post
I have struggled since the start of this one particular battle of the Kulturkampf with a question how should I react. I certainly value honoring your opponents in the discussion (which is IMHO much better concept than mere freedom of expression, which is rather limited and legalistic) very highly, and if that was in stake, I wouldn’t mind to loose my browser for it (or job, or many other things; I grew up in the Communist Czechoslovakia, so I know a little bit what I am talking about). However, is this the case? And is loosing Firefox which otherwise IS the most freedom-loving browser around (switching to Chrome feels to me truly like jumping straight out of the frying pan into the center of the fire).
Thinking about some other hot topic issues (actually participation of a Protestant in Eucharist; tell me about controversial issue, this was the one actual battles with dead people lying on the battlefield were fought for!) I came to the preliminary conclusion that the worst thing is when your opponents drive your decision by negation. Back to the issue of Firefox, Brendan, and tolerance. The worst thing we can do is to switch from Firefox, and let ourselves drawn on the shitty (literally, that's the stuff fought with over there) battlefield of these cultural wars. If we want to keep our discussion on more civilized level, we shouldn’t let be drawn to the level of bigots. “Answer not a fool according to his folly, lest thou also be like unto him.” (Proverbs 6:24 KJV; or in the modern paraphrase “Don’t argue with idiots because they will drag you down to their level and then beat you with experience.”)
Here is what I did in Q1Tools and code
This quarter we have made 2 releases of Transvision (3.1 and 3.2). For 3.1, most of the credit goes to my colleague (and Italian localizer) Francesco Lodolo who integrated his productization scripts into the app and worked on redesigning the menus and making the app better in responsive mode, my work on 3.1 was limited on performance patches and release management. Transvision 3.2 received a lot more of my code as it integrated one major new feature (planned since I took the project under my umbrella two years ago), which is indexing all translations of our flagship website www.mozilla.org. So now Transvision is no longer a search engine and QA tool for all of our products translations, it also supports websites using the .lang format (next up is indexing websites using gettext). From a developper perspective, this is also the release in which we automate the generation of the documentation of our classes thanks to phpDocumentor. Currently I am working on a better MVC approach and organization of code so as to work on features such as atom feeds, on the fly generation of TMX files and other more flexible export features, it may be in addition or in replacement of the TMX files we generate at extraction time. Caching is also in the pipe, the app is currently very fast and responsive but caching could help us extend more our external API to more time consuming data generation.
A personal achievement is that I finally rewrote my old Web Dashboard (whose code dated back to 2007) and moved that to github. Two new features, direct query of web localization bugs per locale on Bugzilla and display of the translation status for most of the projects hosted on Verbatim, our web localization platform, the latter was a patch by Francesco. The big feature is that the code went from 6000 lines of spaghetti code to 400 clean code, old features that made sense 7 years ago and now useless were removed and the fact that we can now track www.mozilla.org work in Bugzilla per locale allowed cutting a lot of code. Pretty happy that this was totally transparent to the user and that we are already starting to add new features to help us ship software!
On the Langchecker side, the tool we use to track .lang based projects and deploy lang files on repositories, I added per locale json feeds for the status of the locale and it now warns about invalid metadata and can now removes obsolete or invalid tags that we use on mozilla.org to activate a feature for a locale on a page. We also used it to expose strings from our first project based on Pontoon.
Other small tools of mine got updated, my mass bug filing script can now file bugs marked as mozilla confidential, something we needed for Mobile World Congress pages, I whipped up a script using Transvision data to know the distribution of strings across components in Firefox/FirefoxOS which allows specifically to know how many strings we have for devtools (potentially a future Transvision feature) etc.
All in all, I'd say I spent about 30% of my time this quarter hacking on code, which is cool.Events and community
This quarter I attended one event outside of Paris, Fosdem. As usual it was interesting in terms of networking with European open source hacktivists. I also organized a one day event in the Paris office with April which mostly consisted of workshops on how to contribute to an open source project (I led two workshops on participating to Mozilla localization). I also attended 3 events in the Paris office, one with the French community to welcome half a dozen new volunteers, one with Rosana and Goofy dedicated to SUMO localization and a last one which was an impromptu meeting between the French community and Brian King from Reps. With a Paris office tailored for meetings, I expect that I will continue to organize / attend to community meetings locally instead of travelling a lot like in the past, that's more compatible with my recent fatherhood
This wasn't a big quarter in terms of finding contributors, I can identify only 2 new people that became active and productive in the Mozilla l10n project directly because of me, that was mostly due to the fact that I spent more time on shipping projects and building tools this quarter. I also had some more paperwork than usual to deal with as I have an intern starting in April and I also worked with my colleagues on a tax refund paper for Research and Development in the Paris office.
I spent some specific time helping the Lithuanian community trying to grow in general, we created an IRC channel, opened a mailing list for Lithuania, did some work on etherpads and contacted other open source projects in Lithuanians, past contributors, would be contributors through the Contribute page... We found some people interested in helping with l10n but more work will be needed to reboot the Lithuanian community (not just in l10n).
I also closed the mozilla.community.europe which had been created after we closed Mozilla Europe and merged its activities with Mozilla, it unfortunately never attracted any activity and was just collecting spam (which I had to delete on a daily basis).
About the Transvision community, the project reached 9 committers in March, is now listed on What Can I Do for Mozilla (which makes it the only active PHP project listed on the site ;)). It is growing slowly but steadily on all fronts (uses, codebase, contributors, features...). We are also working on making it easier to hack (static and automatic documentation, better installation scripts...) but one of the roadblock is the amount of data that needs to be downloaded first to make it useful locally, the sum of our hg/git/svn repos are about 17GB big. Even after extraction of strings from all of our repos, it is probably like 200MB of text, we may evaluate a downloadable snapshot of that in the install process to make it easier for contributors that want to hack on it.
From a tooling community perspective, big thanks to Enrique Estevez, our galician localizer, who is working on upstreaming patches to OmegaT to make it work better with Mozilla formats (.properties and .lang) and who is also writing an Omega T plugin to get translation suggestions from Transvision. Babelzilla also contacted me for similar purposes, that means that at least four Mozilla tools use it or plan to use it directly (Mozilla Translator, OmegaT, Pontoon, Babelzilla). We will put a focus on improving, documenting and versionning our external API this year to make it easier to the tools community to integrate it.Mozilla.org localization
On Mozilla.org, the big deal this year was like last year the Mobile World Congress event, we updated all of our Firefox OS pages and home page + tabzilla in 17 languages in time before the event and also added some extra content for a dozen of these locales. As usual with big projects, we exposed feature needs and we now can publish promotions in tabzilla per locale, using the same mecanism as for the home page, so as to target only the languages that we were working on for MWC.
MWC was not all though, we also worked on a new Pricacy page for a few locales, we worked on a landing page for Firefox Metro, but unfortunately the product got cancelled, we updated a lot of older content, made patches in our templates to avoid duplicated strings, shipped new locales on the release channel with all o their web content done (Xhosa and Aragonese) and shipped Malay on the Beta and Aurora channels too.
The amount of strings is now around 1500 for a big locale on mozilla.org and about 600 for a small locale. Of course, since we have frequent content changes (promos, minor string updates on tabzilla, download pages, in-product pages...), this is actually more, especially for the bigger locales and Firefox OS locales, but I am happy that we succeed in keeping all of the locales in good shape, especially the small ones, while not slowing down the creation of English content. The site is definitely getting better and more localized month after month, two years after the switch to Django and the total rewrite, this is starting to look really good again.And now Q2!
Expect Q2 to be more of the same One interesting point is that I am taking Theo Chevalier, our main French localizer, for an internship at Mozilla, which means that he will work on all of the cool stuff I have in mind but never get the time to do (like working on growing our l10n Firefox Nightly userbase which is ridiculously low compared to en-US), he will also of course work on the big Q2 project that is the launch of Firefox Australis!
Since Brendan Eich’s resignation, I’ve been struggling to articulate what I think and feel about the matter. It’s been difficult. I haven’t been able to find what I wanted to say. Many other better, smarter, and more qualified Mozillians have written things about this, and I was about to let it go. I didn’t just want to say “me too”.
I felt I had nothing of substance to contribute. I feebly wrote something about Brendan Eich and the Kobayashi Maru, but it became a rambling mess, and the analogy fell apart quite quickly. I was about to call it quits on contributing my thoughts.
And then this post happened.
Don’t ask me where this came from. A muse woke me up in the night to write it (it’s just past 4AM for crying out loud – muse, let me sleep). Maybe through the lens of this nonsense, some real sense will prevail. I’m not hopeful, but this muse is nodding emphatically (and grinning like a lunatic).
Please believe that I’m not at all trying to trivialize, oversimplify, or make light of the events of the past few weeks by writing this. I’m just trying to understand it, and view it with a looking glass I have at least a little familiarity with.
And maybe it’s mostly catharsis.
I also apologize that it’s not really told like a story from the Bard. I think that’d be too long winded (no offense, Shakey). I’m pretty sure the narrator / stage directions have the most lines. It’s actually quite criminal.
I also want to point out that the only “real world names” in this little travesty is Brendan Eich’s and Mitchell Baker’s. The rest are from the world of Shakespeare.
And I also apologize that it’s not in iambic pentameter – that’d probably be more appropriate, but I have neither the wit nor the patience to pull this off with that much verisimilitude.
Oooh! Verisimilitude! Fancy words! Enough apologies, let’s get started.Much Ado About Brendan (or As I’ve Seen It) Prologue
Venice, Italy. Sometime during the Renaissance. This glorious city is composed of many families – the Montague’s, the Capulet’s, the Macbeth’s, the MacDuff’s, the Aguecheeks, the Fortanbras, the Whitmore’s, and many many more. Too many to name or count.
Many of these families argue and disagree about things. There’s almost always one thing that one family does or thinks that another family just cannot abide by.
It is in this turbulent city of families that we find The Merchant’s Building. The Merchant’s of Venice are selling their wares, lending or selling books, playing music, and much more – and people are constantly streaming in and out. It’s a marketplace of endless possibility.
In one section of The Merchant’s Building, is the Mozilla booth. Mozilla does and makes many things – but it’s probably best known for its Firefox jewelry. Mozilla is one of a small number of merchants giving away jewelry – and jewelry, in this building, is special: the more people wear your jewelry, the more of a voice you have at the Merchant’s Weekly Meeting, where the rules of the building are written and refined.
So what is special about this Mozilla merchant? Why should we wear their jewelry? There are certainly other merchants giving away jewelry a few booths down. What does Mozilla bring to the table?
For one thing, the jewelry is beautiful. And it makes you walk faster. And it’s got the latest features. And it makes it harder for sketchy people to follow you. And it doesn’t have a built-in tracking device recording which merchants you’re visiting. And you can add cool charms to it, and make it look exactly how you want it.
And another thing that’s unique to the Mozilla booth is that they’re composed of members of every single family in Venice. Every single family has at least one member working in the Mozilla booth. And what’s more – a bunch of these workers are volunteering their time and efforts to make this stuff!
Why? Why do they volunteer? And why do these family members work side by side with people their families might balk at, or sneer at?
Well, In the very center of the Mozilla booth, overhanging the whole thing, is… The Mission. The Mission is the guiding principals upon which the Mozilla booth operates. This is what these family members bury their gauntlets for. They work, sweat and bleed side by side for this mission. This is their connective tissue. This is what guides them when they vote and argue for things at the Merchant’s Weekly Meeting.
The other truly unique thing about the Mozilla booth is that there are no walls to it! You can walk right in, and watch the craftspeople make jewelry! Heck, you can sit right down at a bench and somebody will show you how to make some yourself. They’ll guide you, and they’ll critique you, and soon, somebody will be wearing a piece of jewelry that you made.
The greatest debates also occur within the Mozilla booth. People stand on soap boxes and give their opinions about jewelry, or other merchandise – or merchandise practices. People say what they think out loud, and perhaps print it on a t-shirt and wear it. Sometimes, discussions get heated, but level thinking usually prevails because these Mozillians are an unusually bright bunch.ACT I
There is a leadership selection underway. Someone needs to be the Chief of Business Affairs (or CBA) in the Mozilla booth. The current chief, Jay, has been holding the position as an interim chief, and the Board of Business Affairs is trying to select someone to take the position permanently.
Two members of this board already have their bags packed – for a while now, they’ve been neglecting other interests of theirs, and after this chief is selected, they feel they need to do other things.
Enter Brendan Eich. Brendan Eich is chief craftsperson of the makers of jewelry in the Mozilla booth. He’s a brilliant and widely respected craftsperson himself, having invented some of the amazing techniques that are used by all serious jewelry makers. He is also one of the founders of the Mozilla booth, having set it up with Mitchell Baker.
The Board of Business Affairs selects Brendan to be the next Chief of Business Affairs.
They announce this, and there is much applause! People clap Brendan on the back. Many craftspeople are pleased that one of their own will be in charge.
The two board members, as they’ve agreed to, take their bags, salute, and walk off out of the booth and on to other things.
A third board member leaves as well, but for reasons not related to what I describe below.
Suddenly, several Montague’s and Montague supporters in the Mozillian booth grow concerned. They recall that several years ago, Brendan had donated $1000 dollars to a law that supported Capulet values – a law which impacted their rights. The Montague’s and Montague supporters grow concerned that someone who supports this Capulet law is not fit to be Chief of a booth that houses all of the families, Montague’s included.
Several of these Montague’s raise these concerns out loud. This is not unusual in the Mozilla booth, as most concerns are raised out loud – and, as usual, debate begins. Brendan states that he will 100% abide by the Mozilla participation guidelines, and what’s more, began supporting a project that a Montague in the Mozilla booth has been working on – to bring more Montague’s into the booth.
Vigorous debate continues, as is the Mozilla booth custom.
However, as the booth lets anybody in, and the debate can be heard outside of the booth, several Montague’s and Montague supporters hear these concerns and start passing the message along to one another – a Capulet has been selected to be the CBA!
Many of these Montague’s are reasonable, and say and write reasonable arguments about why they are concerned, and why Brendan may not be the right choice as CBA.ACT II
A few meters away, the Cupid booth overhears all of this concern from the Montague’s. Perhaps they really are Montague supportors (or, more likely, they just wanted to perk up business), but they suddenly decide to take a stand. For people who try to come into their booth wearing Firefox jewelry, they have to read a big sign that tells them about why the Cupid booth believes that restricting the rights of Montague’s is terrible, and that the Mozilla booth is terrible for making a Capulet the CBA. They tell the people wearing Firefox jewelry that they should probably wear other things.
And so some people start to take off their Firefox jewelry. Some Montague’s take it off angrily, and smash it into the ground – stomping it with their feet, creating a big dust cloud.
Enter Iago, and his team of writers. There are many writers and story-sellers in the Merchant’s Building, but Iago is one of those writers that just wants people to listen to him. He likes to twist words and make things up, or to insinuate things that are not true. He saw the board members leaving the Mozilla booth and concocts some headlines, insinuating that they left in protest of Brendan’s support of the Capulet laws. He also writes about how all of the Mozillians in the booth were not supporting Brendan’s appointment as CBA (which is not true – it’s true that some were concerned and questioned the wisdom of his appointment, but certainly not all). He writes and he writes, and his messengers pass copies and leaflets around. Montague’s and Montague supporters read these leaflets, or hear people talking about them, and they grow very concerned. More Montague’s start to take off their Firefox jewelry.
Some Montague’s start to engage with Mozillians and try to figure out what is happening. As always, each family has calm and reasonable people to converse with – and that’s always welcome in the Mozilla booth.
However, every family also has their groundlings. The groundlings are the members of a family who are always looking for a fight. Always looking for blood. Always hoping an actor will forget their lines, and will shout distracting things at them to make it happen. They always have a bag of rotten fruit and vegetables with them to throw. Some of them just like to make trouble.
Every family has their groundlings. You’ve probably met some yourself.
The groundlings start to hear these rumors that Iago has been spreading around, copied and recopied, distorted and mutilated – and they see the signs at the Cupid booth.
And they rush the Mozilla booth! They start throwing rotten fruit and vegetables, and they tear off their Firefox jewelry, and swear to never wear it again! They gnash their teeth, and they rip out their own hair in a rage, and they scream and yell and make so much noise – it’s almost impossible for the craftspeople in the Mozilla booth to work!
A tempest of Montague rage was upon the Mozilla booth.ACT III
After several hours of this, Brendan addresses the crowd outside, and speaks to some storytellers (Iago and his team are among them – he always is).
They ask him if he renounces Capulet ways, or if he will apologize for the Montague rights that were impacted by the Capulet law that he helped fund.
And Brendan says something along the lines of “I don’t think that’s helpful to discuss. I don’t think that’s relevant here. I’m not going to run this booth as if everybody in here were Capulets – I helped make this booth, I know that it’s composed of many families, and I know how it operates.”
But Iago and the groundlings were not satisfied. They put up signs and placards claiming that anybody wearing Firefox jewelry is supporting the Capulets!
The Mozillians look at all of the broken and stomped-on jewelry on the market ground. All their work, being trampled. If this continues, their ability to improve things for all families at the Merchant’s Weekly Meeting will fade. Their ability to enact their Mission will fade. They are agitated, discouraged, upset, angry, sad, anxious, confused – a cocktail of emotion playing pretty much the entire spectrum.
Brendan’s speech had not done anything to quell the groundlings. And Iago could smell blood, and was not going to stop writing about Brendan or Mozilla.
The other leaders look to Brendan. What will we do?
And Brendan said, “This noise is getting absurdly loud. How are we supposed to work under these conditions? There’s no way we can enact the mission like this.”
And Brendan steps onto the proscenium, and says:
To leave, or not to leave, that is the question—
Whether ’tis Nobler in the mind to suffer
The Slings and Arrows of outrageous Fortune,
Or to take Arms against a Sea of troubles,
And by opposing end them?
And so, after much thought, he takes arms. He sacrifices, and he chooses to leave the booth – the booth he helped plant into the ground over 15 years ago. The booth he helped build, the jewelry and techniques he helped craft.
“I think if I leave, you folks might have a chance to keep the mission going.”
And so he leaves, to the heartbreak of many Mozillians, and to the cheering of the Montague groundlings outside.ACT IV
Several of the more sensible Montague’s watch Brendan leave and wonder if perhaps the groundlings in their family have made them look petty and vindictive. Some of them are also sad that Brendan left the Mozilla booth – all they wanted from him was an apology, they say. That would have sufficed, they say. They didn’t expect or want him to leave the whole booth.
But the damage is done, and Brendan has left. There is no chief craftsperson, and there is no CBA. Holy shit.
The Mozillians in the booth start to get back to work, since the cheers of the Montague’s outside are much easier to work against as a backdrop than the booing, hissing and food-throwing. A bunch of Montague’s dust off their stomped Firefox jewelry (or grab new copies!) and put them back on proudly. Others are happy with the new jewelry they got, and don’t care about the Mission. Still others never took off the Firefox jewelry, but said they did. And now they wear it publicly again, proudly.
But suddenly, the Capulets and Capulet supporters in and around the Mozilla booth look at this gaping void where Brendan was and sense injustice. This was wrong, they cry! This man should not have been chased out of here!
Vigorous debate begins, as is the Mozilla booth custom.
And reasonable Capulets say and write reasonable things about why they think it was wrong for Brendan to have left.
And Iago, who never really left the area, hears all of this, and smells more blood in the air. He takes his poison pen, and writes stories about how Brendan was forcibly removed from the Mozilla booth by an angry mob of Montague’s. He writes that, like Julius Cesar, Brendan was heard gasping “Et tu, Brute?” as he was stabbed by his fellow senators – or, like King Hamlet, poisoned and betrayed by the people closest to him.
But as usual, Iago gets this completely wrong. Not that he cares or bothers to check. What a douche. And LOUD too, holy smokes. And people listen to Iago, and read what he writes, and hear what he says, and the rumours abound!
And a second tempest starts to brew.ACT V
Many reasonable Capulets, both inside and outside of the Mozilla booth are concerned about what this means for them. Does this mean that Capulets aren’t allowed to become CBA’s? That’s certainly against the inclusiveness guidelines, is it not? And much debate resonated, as is the Mozilla way.
But, as you recall, every family has their groundlings, and the Capulets are no exception. The Capulet groundlings heard the rumours that Iago and his ilk were slinging, and they gnashed their teeth, and they pulled out their hair.
“YOU KILLED BRENDAN”, the groundings howled at the Mozilla booth.
“No, he left on his own accord to save us and the mission,” some Mozillians said with sadness.
“NO HE DIDN’T, HE WAS BETRAYED AND MURDERED BY HIS CLOSEST ALLIES!” the groundlings yelled back.
“No, that’s simply not true. He left on his own accord in an attempt to save the booth and the mission.”
And the reasonable Capulets understood this, and they understood the mindblowing complexities of this whole clusterfuck. And they spoke with reason and passion.
The Mozillian craftspeople got up from their work making jewelry to talk to these Capulets, and the supporters of the Capulets. And many were very reasonable and calm – but the groundlings among them were vicious and yelled and made so much noise. In some ways, their rage was indistinguishable from the Montegue groundling rage, which I believe is some kind of irony.
And, as you’d expect, the Capulet groundlings, like all groundlings, love blood. They love a fight. And they tore off their Firefox jewelry, and they stamped it into the ground. Vegetables and rotten fruit started to be thrown at the Mozilla booth. Again.
And the Mozillians in the booth looked at each other. They looked at the gaping void where Brendan used to stand. They all hugged one another, and comforted one another, as the jeers and boos of the groundlings got louder and louder, and as rotten fruit and vegetables slammed into them and their works.
And this is where we currently are, I believe.Epilogue
If these ramblings have offended,
Think but this, and all is mended,
That you have but slumber’d here
While these visions did appear.
And this weak and idle theme,
No more yielding but a dream,
Gentles, do not reprehend:
if you pardon, we will mend:
And, as I am an honest Mike,
I do yet miss this Brendan Eich.
Now to ‘scape the serpent’s tongue,
We will make amends ere long;
Else the Mike a liar call;
So, good night unto you all.
Give me your hands, if we be friends,
And Robin shall restore amends.
Still, after all this has played out (hopefully), I am left feeling a bit angry myself. And a lot disappointed. Previously, I have mostly agreed with the progressive movements (feminism, LGBT rights, anti-racism, and so forth). When I have not agreed, I have often had my mind changed. I have learnt a lot and I have a great respect for many people in these movements. It feels bad to be on the wrong side of that. It seems to me that the subtlety in the discussion was lost - assumptions were made, opinions were fought for, there was not much attempt to establish empathy and tolerance, nor to accurately learn the specifics of the situation.
Back to anger. Though it is important not to tell people when they are allowed to get angry or what that anger should look like, I would like to suggest how that anger should be used. Anger can be constructive - it is one of the most motivating human emotions and has led to great changes over the years. It can also be amazingly destructive with no purpose - from a child's tantrum to pretty much every war ever fought. Sometimes it is good, emotionally, to get angry and break things. But we must try to put some thought into what gets broken. It was in large part anger that brought LGBT (and other civil) rights to where they are today. We need more of that, and less just breaking stuff, even if it makes us feel better.
In the last couple of weeks we've seen a lot of (justified) anger, but the result has not been positive. Things got broken, but nothing has changed for the better. A small, non-profit organisation which fights for freedom and privacy on the internet against corporate interests and overbearing governments has been damaged in many ways. All to harm a man who made a semi-public donation to an admittedly odious cause. I can't think of anyone who's life has got better from this, maybe some CEOs of other companies who probably have private views worse than Brendan's, but weren't as honest about declaring them.
I attended a Mozilla work week a couple of years ago at Mozilla’s Mountain View office. There was a dinner event in San Francisco and, by chance, I ended up in Andreas Gal’s car, along with Brendan Eich and someone else (who, alas, I cannot remember now).
The destination was the California Academy of Sciences, a science museum in San Francisco, which was about a 45 minute drive away. Off we headed. Unfortunately, we headed off without closely checking where our destination was, and we somehow got the Academy of Sciences confused with the Exploratorium, another science museum in San Francisco. When we arrived and found it closed, we had to regroup.
Andreas confidently interrogated his car’s GPS unit and procured a new address that fortunately wasn’t too far away. Fifteen minutes later, we found ourselves in a residential area, outside a building that obviously wasn’t going to be hosting a dinner for several dozen MoCo employees.
Andreas again consulted his GPS unit for a new address. Unfortunately, this one
was on the far side of the city. Undeterred, we crawled through early-evening
traffic in the busiest parts of San Francisco — I’m pretty sure we actually
passed Union Square — to another address. Again, as soon as we laid eyes upon it, it clearly wasn’t the right destination.
It turns out there are several institutions in San Francisco with the words
“Academy” and “Science” or “Sciences” in their names, and we were doing a tour of all the wrong ones. On our fourth roll of the dice, Andreas found what ultimately was the correct address, and we crawled back to our final destination, which turned out — groan — to be not that far from the Exploratorium. We staggered in, two hours after we started, eliciting several comments of “what on earth took you guys so long?”
I remember being frustrated at the time — Andreas and Brendan were locals!
They should have known better. But now…
I’ve worked for Mozilla for over five years, but I visit California infrequently, and I’ve only had a chance to talk with Brendan in person a few times. The only
thing I remember from the conversation during the car trip is that at one point we were talking about the US economy and Brendan made a confident proclamation about the bond market — I can’t even remember what it was — that I wasn’t sure I agreed with but I wasn’t sure I could explain why I disagreed. It’s funny the details that stick.
This conversation was with Brendan the person — not Brendan the CTO, not
Comments on this post are open, but be warned that I will delete without hesitation any comments that re-hash the CEO controversy of the past two weeks, or that I find rude or objectionable in any way. If you want to discuss the controversy, or be rude or objectionable, there are many other places on the web that you can do so.
People may be wondering why I, as one of the most notorious Christians at Mozilla, have been silent during the turmoil of recent days. It is simply because I haven't been able to think of anything to say that won't cause more harm in the current environment. It is not because I am afraid, malicious, or suffering from a lack of freedom of speech in any way. As soon as I have the environment and the words to say something helpful, I will.
By "the current environment" I mean the situation where many of the culture warriors of all stripes are picking over every utterance looking for something to be angry against or something to fuel their anger against others.
Update Actually, right after posting that, I thought of something to say.
I have never loved the people of Mozilla as much as I do right now. With just a few exceptions, your commitment and grace under fire is inspiring and (in the old-fashioned sense) awesome. I'm glad I'm here for this.
I've seen the phrase "freedom of speech does not mean freedom from consequences" a lot recently. This is clearly true. However, it's also clearly true that freedom of speech does in fact mean freedom from some consequences. As a simple example, the First Amendment to the US Constitution and its associated jurisprudence is all about delineating some consequences one must be free of for speech to be considered free.
The question then becomes this: which consequences should one be free of when speaking? I am not a lawyer, and this is not a legal analysis (though some of these consequences are pretty clearly illegal in their own right, though not readily actionable if performed anonymously), but rather a moral one. I would consider at least the following consequences that involve private action only as unacceptable restraints on freedom of speech:
- Physical violence against the speaker or their family, friends, or associates.
- Threats of such physical violence. This most definitely includes death threats.
- Destruction of or damage to the property of the speaker or their family, friends, or associates.
- Harassment (bullhorns in the night, incessant phone calls, etc) of the family, friends, or associates of the speaker. I don't feel as absolutely about the speaker him/herself, because the definition of "harassment" is rather vague. While the above examples with bullhorns and phones seem morally repugnant to me as applied to the speaker, there may be other things that I consider harassment but others consider OK as a response to a speaker. There's a lot more gray area here than in items 1-3.
This is not meant to be an exhaustive list; these are the things that came to mind off the top of my head.
It's clear to me that a large number of people out there disagree with me at least about item 2 and item 4 of the list above in practice. They may or may not perform such actions themselves, but they will certainly excuse such actions on the part of others by claiming that freedom of speech does not mean freedom from consequences. For these particular consequences, I do not accept that argument, and I sincerely hope the people involved are simply unaware of the actions they're excusing, instead of actively believing that the consequences listed above are compatible with the exercise of free speech.
One element of misunderstanding, it seems to me, is about whether marriage is important. For some people, marriage is viewed as a purely religious/cultural construct which should be dictated by their religion/culture. They don't see why it is so important for gay people (or sometimes other minority groups) to be able to marry. Especially if alternatives such as civil unions exist. They have the privilege of not being denied the marriage of their choice.
In contrast, for many people marriage is a large and practical thing since it can affect things such as immigration status, benefits, hospital visitation, etc. (As well as having their relationships treated as second class in the eyes of the wider society, of course). In my view, it is unfortunate that the practical side of things exists. I am lucky enough to live in a country where marriage is (mostly) not important in that way, and I prefer it greatly.
Marriage is a wonderful thing, and I would not deny it to anybody who wants it. In my view, it should not involve either the state or any cultural or religious institution. I find the fact that a couple has to be married by a third party weird. In my ideal world, the people being married would only have to marry themselves to each other, and no-one else would get a say. Marriage should simply be a public declaration of commitment in front of the people who are important to those being married. No-one should have to officiate or register it, and no-one should have to say who can or who can't get married. And certainly, being married should have no effects on your legal or moral life.
To clarify, I don't think marriage should lead to tax breaks or extra respect from any institution. I don't believe adultery should be judged any better or worse because of it, etc.
Once marriage brings material benefit from the state or the legal system, and once marriage is bestowed by an institution rather than being freely chosen, it becomes just another tool for enforcing established power. By allowing powerful groups of people to bestow benefits either social or material on individuals, it becomes open to corruption. It becomes something minorities have to fight for and which exclusive majorities seek to prevent others obtaining. That an expression of love and commitment ends up like this is immensely saddening, and says a lot about human society.
And don't even get me started about the commercial side of things. The whole wedding industry makes me feel sick.
beets is the extensible music database tool every programmer with a music collection has dreamed of writing. At its simplest it’s a clever tagger that can normalize your music against the MusicBrainz database and then store the results in a searchable SQLite database. But with plugins it can fetch album art, use the Discogs music database for tagging too, calculate ReplayGain values for all your music, integrate meta-data from The Echo Nest, etc. It even has a Music Player Daemon server-mode (bpd) and a simple HTML interface (web) that lets you search for tracks and play them in your browse using the HTML5 audio tag.
I’ve tried a lot of music players through the years (alphabetically: amarok, banshee, exaile, quodlibet, rhythmbox). They all are great music players and (at least!) satisfy the traditional Artist/Album/Track hierarchy use-case, but when you exceed 20,000 tracks and you have a lot of compilation cd’s, that frequently ends up not being enough. Extending them usually turned out to be too hard / not fun enough, although sometimes it was just a question of time and seeking greener pastures.
But enough context; if you’re reading my blog you probably are on board with the web platform being the greatest platform ever. The notable bits of the implementation are:
- Server-wise, it’s a mash-up of beets’ MPD-alike plugin bpd and its web plugin. Rather than needing to speak the MPD protocol over TCP to get your server to play music, you can just hit it with an HTTP POST and it will enqueue and play the song. Server-sent events/EventSource are used to let the web UI hypothetically update as things happen on the server. Right now the client can indeed tell the server to play a song and hear an update via the EventSource channel, but there’s almost certainly a resource leak on the server-side and there’s a lot more web/bpd interlinking required to get it reliable. (Python’s Flask is neat, but I’m not yet clear on how to properly manage the life-cycle of a long-lived request that only dies when the connection dies since I’m seeing the appcontext get torn down even before the generator starts running.)
- The client is implemented in Polymer on top of some simple backbone.js collections that build on the existing logic from the beets web plugin.
- The artist list uses the polymer-virtual-list element which is important if you’re going to be scrolling through a ton of artists. The implementation is page-based; you tell it how many pages you want and how many items are on each page. As you scroll it fires events that compel you to generate the appropriate page. It’s an interesting implementation:
- Pages are allowed to be variable height and therefore their contents are too, although a fixedHeight mode is also supported.
- In variable-height mode, scroll offsets are translated to page positions by guessing the page based on the height of the first page and then walking up/down from there based on cached page-sizes until the right page size is found. If there is missing information because the user managed to trigger a huge jump, extrapolation is performed based on the average item size from the first page.
- Any changes to the contents of the list regrettably require discarding all existing pages/bindings. At this time there is no way to indicate a splice at a certain point that should simply result in a displacement of the existing items.
- Albums are loaded in batches from the server and artists dynamically derived from them. Although this would allow for the UI to update as things are retrieved, the virtual-list invalidation issue concerned me enough to have the artist-list defer initialization until all albums are loaded. On my machine a couple thousand albums load pretty quickly, so this isn’t a huge deal.
- There’s filtering by artist name and number of albums in the database by that artist built on backbone-filtered-collection. The latter one is important to me because scrolling through hundreds of artists where I might only own one cd or not even one whole cd is annoying. (Although the latter is somewhat addressed currently by only using the albumartist for the artist generation so various artists compilations don’t clutter things up.)
- If you click on an artist it plays the first track (numerically) from the first album (alphabetically) associated with the artist. This does limit the songs you can listen to somewhat…
- visualizations are done using d3.js; one svg per visualization
- The artist list uses the polymer-virtual-list element which is important if you’re going to be scrolling through a ton of artists. The implementation is page-based; you tell it how many pages you want and how many items are on each page. As you scroll it fires events that compel you to generate the appropriate page. It’s an interesting implementation:
“What’s with all those tastefully chosen colors?” is what you are probably asking yourself. The answer? Two things!
- A visualization of albums/releases in the database by time, heat-map style.
- We bin all of the albums that beets knows about by year. In this case we assume that 1980 is the first interesting year and so put 1979 and everything before it (including albums without a year) in the very first bin on the left. The current year is the rightmost bucket.
- We vertically divide the albums into “albums” (red), “singles” (green), and “compilations” (blue). This is accomplished by taking the MusicBrainz Release Group / Types and mapping them down to our smaller space.
- The more albums in a bin, the stronger the color.
- A scatter-plot using the echo nest‘s acoustic attributes for the tracks where:
- the x-axis is “danceability”. Things to the left are less danceable. Things to the right are more danceable.
- the y-axis is “valence” which they define as “the musical positiveness conveyed by a track”. Things near the top are sadder, things near the bottom are happier.
- the colors are based on the type of album the track is from. The idea was that singles tend to have remixes on them, so it’s interesting if we always see a big cluster of green remixes to the right.
- tracks without the relevant data all end up in the upper-left corner. There are a lot of these. The echo nest is extremely generous in allowing non-commercial use of their API, but they limit you to 20 requests per minute and at this point the beets echonest plugin needs to upload (transcoded) versions of all my tracks since my music collection is apparently more esoteric than what the servers already have fingerprints for.
Together these visualizations let us infer:
- Madonna is more dancey than Morrissey! Shocking, right?
- I bought the Morrissey singles box sets. And I got ripped off because there’s a distinct lack of green dots over on the right side.
Code is currently in the webpd branch of my beets fork although I should probably try and split it out into a separate repo. You need to enable the webpd plugin like you would any other plugin for it to work. There’s still a lot lot lot more work to be done for it to be usable, but I think it’s neat already. It definitely works in Firefox and Chrome.
Thoughts (in kind of random order):
- Rust has an ownership model based on hierarchies.
- It is easy to support tree-based data structures this way.
- Structures with cycles are much more annoying.
- The real pain is in initialisation.
- You can have a data structure with cycles using ref-counting or borrowed references as long as you 'delete' the whole data structure at once.
- Rust helps you do this with its type system.
- BUT there is no way to initialise such a data structure because of the way `mut` works. Specifically the requirement that `mut` variables are unique and have move/borrow semantics.
- Therefore you need unsafe blocks, which is a pain.
- Since it seems that you ought to be able to verify safe initialisation (I'm not sure how though).
- I think this is an area of the language which has not caused much pain because compilers (especially the frontend) and browsers are both very 'tree-heavy' programs. Long term we should find a solution to this, but it is certainly something that can be put off till post-1.0 (since it has an unsafe solution and I can' imagine a safe solution not being backwards-compatible).
- Kind of related - when using a data structure where all components have the same lifetime (i.e., the whole structure must be destroyed at once) you end up writing a huge number of really un-interesting lifetime parameters on functions and data which basically just get passed around. I would love to have a shorthand here - perhaps modules could have lifetime parameters? Not sure if that would help that much. More thought required in any case...
First, let’s start with this: if you want to know what’s really been happening at Mozilla, you should read this blog post, written by a fellow Mozilla Corporation employee. It’s got details from staff meetings, internal discussions, public meetings, and more, and it’s the most accurate representation of the truth of the past two weeks you’ll find anywhere.
Next, let’s recall my previous post, and I will re-iterate that I strongly favor the nationwide legalization of gay marriage, and that I disagree with Brendan on this issue (while also strongly defending his right to hold his opinion as long as he keeps it out of Mozilla business, which he always did).
Now, let’s get into what I personally want to say about the last few days.
In March of 2006, I was the father of a baby girl less than a year old, and had just been let go by my employer—a game development company in Southern California, for whom I was doing Mac programming. Despite a previous arrangement, they decided they wanted me to relocate, which I wasn’t interested in doing. So we parted ways. My old friend David Miller had been working at Mozilla on the Bugzilla project (and doing IT work) for a while, and he suggested I apply for a job as a Mac programmer at Mozilla Corporation.
When Mozilla got wind that I had spent years as a technical writer, I found myself instead interviewing for a job on the developer relations team as a writer for the Mozilla Developer Center site. On April 3, 2006, I started working for Mike Shaver, alongside Deb Richardson, as a technical writer.
I joined Mozilla as someone that didn’t use Firefox. Heck, I didn’t even like Firefox. I also didn’t give a rat’s ass about open source software; indeed, I generally looked down on it across the board as inherently inferior.
I would never have dreamed that someday I would consider myself part of a “community” of Mozilla users. I was not someone that would be a Mozillian. I walked the walk and acted the part, generally, but if you read through my early blog posts, you’ll find clues that I was just in it for the paycheck.
Fast forward to March of 2014. I’m days shy of my eighth anniversary as a Mozilla employee, and I find myself a changed person. I’m an ardent fan of Mozilla and its mission. It’s important to me. It means something to me. It’s part of who I am. I feel every sting when something goes wrong, and exalt in every win Firefox and Mozilla achieves.
I’m not blindly faithful, no. I have my doubts now and again, about specific initiatives or projects, and goodness knows I’m not afraid to say so. I have a well-earned reputation as a bit of a complainer. When I’m troubled, I tend to say so (usually at length). But Mozilla’s mission is my mission: to bring the open Web to everyone, to do it well, and to be sure that everyone knows how to build upon its potential.
I’ll admit: when Brendan was selected as CEO, I was surprised. I had been quite certain that Jay Sullivan would become our permanent CEO, after a long and successful “interim CEO” run. When Brendan was announced, I was somewhat puzzled. Not because of his political beliefs, but because Jay was already in place, doing a good job, and had long experience in more “business management” roles, rather than just “project management” roles.
But I quickly got behind Brendan. As a technical wizard and cofounder of Mozilla (having saved the Mozilla project form the dying embers of what was left of Netscape within the AOL behemoth), Brendan knew and loved the project more than anyone else. Who better than to lead us into the technical challenges that lie ahead? With Li Gong as our new COO to help him, we were in great hands.
Then everything went straight to hell in the media. Taking bits of reality (yes, Brendan donated in favor of Prop. 8, and yes, he didn’t apologize for doing so, and yes, a scant handful of employees tweeted that they wanted him to resign), the press and social media turned reality into some kind of hyper-reality, in which a few basic facts were tossed into a blender with a healthy dose of bullshit and a little wishful thinking on their part.
Soon, we were in the midst of a crisis, with the voices of reason so overwhelmed by outright nonsense that they couldn’t be heard. Several of us tried. We failed. Brendan, overwhelmed by the waves of negative press and outright hate mail he was getting, gave up and resigned. The mob won, and Mozilla lost its founding father.
The press (including the Wall Street Journal) is reporting that Brendan was pushed out by the board. This is not true. Mozilla’s board of directors begged him to stay. Pleaded with him to stay. When he insisted on resigning, they asked him to return to his previous job, or to stay on in another capacity. He declined.
Let’s be clear: Brendan Eich left Mozilla because a virtual mob got whipped up into a frenzy and harassed him and Mozilla until he couldn’t take it anymore. Brendan quit his job because he felt that leaving the organization he loved was better than watching it be dragged down into a cesspool of bullshit.
This situation arose because one man—a key member of Mozilla’s technology team and its community as a whole—exercised his legal civil right to donate money to an unpopular cause (and one that is now, thankfully, a lost cause). That’s the real tragedy here.
But we’ll figure out how to move on. We will mourn for a time. We will do some soul-searching. And then we will get our hands firmly planted back onto the tiller, tack into the wind, and continue our journey. Because we are Mozilla.
Please, indulge me for a moment as an old man tells a story.
Richard was diagnosed with an aggressive untreatable cancer just two weeks before he died. Called from my home in Oregon, I rushed to Montana to say good bye. I got there in time for him to open his eyes, smile and say my name. Two days later, Richard died with me, his sister, his adult children, his former wife, and her husband gathered in a circle around him.
I lead the funeral attended by our close family group, a factional extended family and a parade of friends from his life. I found the tension between the factions to be untenable and I struggled to think of how I could help break down the barriers.
In the eulogy I talked about our unconventional family bound together by love. I told the story of how Linda, Richard and I lived together as one family supporting each other through graduate school and raising two wonderful kids. The abiding theme was an encompassing circle of love.
I spoke extemporaneously and I heard myself saying, "We are a diverse group here today with different beliefs and many disagreements. Today, though, we unite to celebrate the love of for our lost brother, cousin, nephew, partner, husband, friend. With love comes forgiveness: with forgiveness comes grace. I am an atheist, but I bring this from my deepest childhood memories, I reach out to everyone here regardless of faith or lack there of, please join me..." Then somehow, spilling forth from me came the Lord's Prayer. I had not recited those words in decades.
With that prayer, I felt connected to everyone in the room, and I dare say we all connected and the factionalism melted away. Maybe it didn't, but from my perspective anyway, people mixed and talked more freely than before the eulogy.
I flew from Montana directly to California for Mozilla work week. In the first hours of being there, the Mozilla CEO trauma started. I struggled with my own emotions over what was happening with the Mozilla CEO selection. My gut reaction was to call for resignation, but I kept silent. It took me a week of thinking of my own words, "With love comes forgiveness: with forgiveness comes grace" before my own attitude snapped into focus. Sitting in the airport just before boarding a plane home, I spilled my feelings in a blog posting. That post brought both support and condemnation. On Brendan's resignation, in a fit of pique, I deleted that blog.
I bring it back now, as I think it is important to me and it was, apparently, important to others. I support tolerance. I support forgiveness. I support grace.
I am a gay employee of the Mozilla Corporation, and I support my company's decisions regarding the selection of CEO. This doesn't mean that I'm entirely comfortable with the selection, but not because I think Brendan Eich is a threat, but instead because of the public relations repercussions.
The CEO of a corporation is the public face of the company. It is easy for the public to conflate the personal beliefs of the person with the mission of the company. For this reason, I see that that the selection of Brendan is a public relations disaster. I'm sad that it appears this firestorm was not foreseen. However, the decision is made, we must move on to focus on the real work.
Mozilla's mission is to defend and nurture the free Web. If we're not going to do it, who is? The fervor of indignation regarding our new CEO is a distraction that we do not need. Our energy should be going to support or mission not spin the personal beliefs of the CEO. These are difficult times for the Web with threats from large corporations pushing us into silos and government overreach. The energy that we expend defending our selection of CEO is energy taken from our real mission.
I have friends that hold political opinions that are antithetical to me – I do not exclude them from my life, I embrace my friends. I neither support nor understand their beliefs, but doesn't mean that I throw them away. I cannot condone holding a grudge in perpetuity. To do so would be leaving a wake of enemies behind me. Instead, I could have them as allies beside me where we do agree.
I do not agree with Brendan's support of Prop 8. However, that particular battle is one that Brendan lost. It's over. I don't know if his opinions have changed nor do I feel that I need to know. Technically, Brendan is a good choice for CEO: we need to be a technically driven company.
Mozilla has a vocal LBGT community. Brendan could not derail us if he wanted to. I don't think that he does want to because he's focused on the real mission: the free Web. He's working with us, I, for one, am willing to set aside my trepidation and work with him, too.
I say to the larger community calling for the ouster of Brendan Eich, “please don't succumb to the knee jerk reaction.” I did at first, but with some thought, I realize that we need to focus on the future not exact retribution for the past.
There is no time in life to draw exclusionary circles. We must find where we do agree and focus on those, for that is the only route that I see to grace.
A lot has been written about Mozilla in these last few weeks. Some of it is thoughtful, thought-provoking, heartfelt, helpful and necessary. Some of it is politically charged and sometimes factually plain wrong.
I have a hard time reconsolidating all that has been done, happened, said or not said over the last two weeks. I spent more time at Mozilla than at any other organization; I met some of the most brilliant people there; some of my best friends are or were there. I had the great fortune to spend my last year at Mozilla working directly with Mitchell Baker, Mozilla’s co-founder and chairperson.
When I first joined Mozilla, after spending all my life in startups, around tech entrepreneurs and as an investor, it took me a year before I even began to fundamentally understand what Mozilla really is. How it is different. How it is not just a company or a non-profit organization but something utterly unique. Dee Hock, founder and former chairman of VISA, coined the term Chaord for this structure: A system which is equal parts chaos and order, which allows for distributed decision making, nodal authority and encourages ways to route around the structure. Much like the Internet itself, Mozilla is set up not to be a spider but a starfish (to use another explanation out of Brafman and Beckstrom’s book “The Starfish and the Spider”).
And yet – during the last two weeks the world looked at Mozilla through the lens of any other organization. An organization which lives and dies by its leader. Where the leader is the focal point of its universe, much like the queen bee in a bee hive.
I don’t believe this to be true. Mozilla is a living organism, made up of its paid staff and vast volunteer base. Decisions are made in a meritocratic way. Mozilla deserves to be seen as what it is – a group of people coming together to make the Web better. Mozilla is not, and never was, its CEO; unlike for example Steve Jobs' Apple, Mark Zuckerberg’s Facebook or Larry Page’s and Sergey Brin’s Google. Mozilla’s former CEO John Lilly was fond of saying: “I must be the only CEO in tech who can’t dictate the color of a button in our product.”
I wish for us all to understand that Mozilla is different and treat it accordingly. And for Mozilla to grow new (starfish) arms.
To my friends at Mozilla: The world needs you. To everyone else: If you wish to understand Mozilla better, watch this speech by John Lilly on “Lessons from Mozilla” at WordCamp 2009, it’s hands-down one of the best explanations of Mozilla’s uniqueness I’ve ever seen.
I wrote the bulk of this post shortly after the event but then due to a number of things, including work, forgetfulness and the recent events within Mozilla, I never edited and published it. In the spirit of ‘better late than never’ here it is:
Most mornings I would groan at having to get up at 5:30, and I would love to say one Saturday three weeks ago was an exception. Sadly, it wasn’t, but the grogginess of having to wake up so early had soon cleared away by the time I was on a rather empty train going down to Bristol.
That Saturday I spent my day helping out at a small event in Bristol, organised by the local Bristol and Bath Linux User Group, aimed at converting users of the soon-to-be EOLed Windows XP to a Linux distribution.
While the event wasn’t quite as well attended as the organisers had hoped, there were still a number of attendees I managed to talk to about Mozilla and Firefox, and the time not spent talking to attendees was filled with other interesting discussions.
I had a number of goals for the event but a few of these got thrown out of the window when the technological knowledge of most attendees was slightly higher than I expected. Because of this, rather than spend time explaining what a web browser was to people, I focused on telling the Mozilla story, and helping users with any problems they had in Firefox.
I also ended up imparting some Linux knowledge to attendees, being a reasonably longtime user of Arch Linux.
Only the other day I was invited by one of the organisers to a re-run of the event. I fully intend to attend, as with a few more people there, this event format feels like it could be very successful.
My thanks goes out to the organisers: the event was a great opportunity to talk to people about the Mozilla story, and meet some ‘real life’ Firefox users and help and discuss problems they had (one of which I intend to blog about when I get round to it).
Both images by David Fear used under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Thunderbird doesn't actually use the new code quite yet (as my current tree is stuck on a mozilla-central build error, so I haven't had time to run those patches through a last minute sanity check before requesting review), but the intent is to replace the current C++ implementations of nsIMsgHeaderParser and nsIMimeConverter with JSMime instead. Once those are done, I will be moving forward with my structured header plans which more or less ought to make those interfaces obsolete.
Within JSMime itself, the pieces which I will be working on next will be rounding out the implementation of header parsing and encoding support (I have prototypes for Date headers and the infernal RFC 2231 encoding that Content-Disposition needs), as well as support for building MIME messages from their constituent parts (a feature which would be greatly appreciated in the depths of compose and import in Thunderbird). I also want to implement full IDN and EAI support, but that's hampered by the lack of a JS implementation I can use for IDN (yes, there's punycode.js, but that doesn't do StringPrep). The important task of converting the MIME tree to a list of body parts and attachments is something I do want to work on as well, but I've vacillated on the implementation here several times and I'm not sure I've found one I like yet.