66508 items (51588 unread) in 130 feeds
Linux
(11665 unread)
Gentoo
(516 unread)
Debian
(6561 unread)
Fedora
(5752 unread)
Kde
(2683 unread)
Gnome
(3575 unread)
Mandriva
(396 unread)
MySQL
(3237 unread)
Apache
(3434 unread)
Redhat
(90 unread)
Rodrigo Kumpera, one of our VM developers has completed the instruction verifier for Mono's virtual machine. This effort started in June of last year.
The verifier is a late addition to the Mono VM as it was not a priority to run untrusted code inside the virtual machine.
But as Mono user base grew, it became important to support this feature. Second Life needs this to run potentially malicious code that is uploaded by a user, and we need this to provide an execution sandbox when running Moonlight on the browser.
Rodrigo did this work in stages: the first stage was to add support for the 1.0 virtual machine opcodes. Once that was done, verificiation for the 2.0 generic instructions was added.
This is an important milestone in our support for Silverlight 2.0 support on Linux.
Congratulations to Rodrigo for his work!
I enjoy Twitter a lot. There’s many, many clients for the service. I’ve grown to like Alert Thingy (yes, that’s the actual title) which actually integrates with Friendfeed too.
But I felt a bit ashamed using Adobe AIR. Inspired by garrett’s stylesheet tweets, I created a Prism app bundle that makes Twitter main web-interface nice and compact. It wouldn’t be complete without an icon.

I couldn’t figure out how to nicely integrate the multi resolution icon into the bundle though. While the mac and windows icons can be multi-res, for Linux we get grandpa XPM. I have no idea why the spec defines to use XPM. Such an ancient format incapable of using alpha transparency needs to die. It’s not like gecko would have trouble rendering PNG. Also sad to see my whining hasn’t been fruitful yet. Especially when there’s a library available!
As for how to use this thing — for now you need to copy the individual sizes to ~/.icons/hicolor/. After you’ve installed the icon, unzip the bundle in ~/WebApps/twitm. You may need to edit the .desktop file to point to where you’ve installed your Prism.
Maybe using the mobile site would have been safer, but I prefer the javascript character counter, so I went with styling the main site. As soon as the site layout changes, expect brokage :/
|
After Matt Harrison mentioned BeautifulSoup in a comment to an old Python script post of mine, I've been looking for somewhere where I could use it. |
BeautifulSoup is a Python HTML/XML parser designed for quick turnaround projects like screen-scraping.
I initially played around with it, seeing if I could use it to get listings of when new episodes of my favorite TV programs were appearing, now that Zap2It Labs are no longer making their listing available for free. The problem there (I think) is that, because of the dynamically generated content on their TV listings website, I can't find a URL that BeautifulSoup can parse.
So I picked something different to cut my teeth on.
I often go to Weather.com and get a 10 day forecast for the city where I live. Easy to do, but I used this as an example of something to extract from a web page and then also email it to me so I have it handy.
This script does this. You will also need to get a copy of BeautifulSoup.py for it to work properly. I've simply put them both in the same directory and run it with:
$ python ./get_weather.py
If others are interested in running this, then there are two variables that you will need to change in the script to meet your needs:
# Zip code to get 10 day forecast for. # zipCode = "94024" # Email address to sent results to. # emailAddr = "someone@somewhere.com"
Just like my early attempts with using XPath in some of my JavaScript scripts, I suspect that I'm not doing it the best way.I predict that there are much nicer ways of writing the extractForecast() routine.
Still it works and that's the first step in programming.
Someone has suggested a fix for the problem where Metacity doesn’t give up the selection on the compositor when you replace it. A solution should be coming soon.
I still need to write up our goals for 2.24. I think I know what they are now.
I’m putting the bugzilla attachments thing to one side for a while until we have more consensus about what to do with it.
A lot of good ideas on the Metacity testing post. Still thinking them over.
So, we all have been busy to improve anjuta over the past weeks. Now, there are also some user visible changes in the UI:
Screenshots coming soon…
Although neither are in office, Senators Clinton and McCain have both endorsed a gas tax holiday this summer, temporarily eliminating the 18¢ per gallon federal excise tax. To his credit, Senator Obama has denounced the holiday as not "an idea designed to get you through the summer" but one "designed to get through an election." It is also bad economics.
The price of fuel during the "holiday" will depend on gas's elasticities of supply and demand. As the short-run supply of gas is fairly constant—in the short-term, supply is fixed as factories (at least over the summer) already run at full capacity—the holiday price of gas will rise to meet the pre-holiday price.
Put another way, given the fixed supply, the price of gas will rise until the quantity demanded drops to meet the quantity supplied. Since the supply is invariant with respect to the tax, the price will not change.
Gas taxes, in the short-term anyhow, do not modify behavior—they just transfer payments from the supplier to the state. Thus, Clinton's version of the holiday, which replaces the gas tax with an offsetting tax on gas producers, asininely accomplishes nothing, but at least her plan is funded.
Let's assume fuel prices do drop. Over the course of the summer, this will save the average driver the cost of about a tank of gas (Obama says half a tank, but my calculation comes out a little higher). Now, if the price drops, the quantity demanded will increase and thus consumption increases (this will bid the price up, as we are now assuming supply is not inelastic, by some amount less than the full 18¢). What happened to yesterday's policy of the day, global warming? And what happened to last year's headliner, crumbling infrastructure, which the gas tax funds?
The proposal is just pandering, but if we really care about stimulating the economy by putting money in consumer's hands, there are better methods than targeted tax credits—for example, cutting marginal income tax rates.
|
|
A cool movie today from the APOD (Astronomy Picture of the Day) folks. |
The movie depicts flight patterns that occurred over a few days in 2005 March. The count on the lower left shows the number of USA-related flights at the time listed on the lower right.
The major cities are beacons of light and the eastern seaboard just blazes at certain times of the day.
An excellent way of presenting the data.
I’m used to seeing geek shirts. I see them all day at work - GNOME, FSF, thinkgeek shirts. I have a flatmate who is no geek at all but this week he was wearing a pacman shirt. I wear some myself as well. I go to conferences and they’re full of them.
But going into the subway and seeing a guy from across the street wearing a GNOME shirt, in plain daylight, without any conference or company nearby, is new to me. I stopped walking for a second, but he was already past me.
If you know who you are, with the black GNOME shirt with “The international desktop” on the back, coming out of the Rocafort metro this morning - say hello next time :)
Dear monoglots,
There is no reason at all blog posts not written in English should be stopped from appearing on Planet Gnome. Gnome software itself is written in a variety of (computer) languages, and the Gnome internationalisation effort is also considered really important. While I do agree that Planet Gnome is intended to be mostly English, there is really no reason to complain if someone who usually posts in English uses his or her own language every now and then, as long as the author keeps writing posts in English regularly (as opposed to writing solely in his or her own language).
So… please stop complaining and scroll down if you don’t understand a post.
I was chatting with Atul earlier today when he expressed his dismay that Slashdot was off the air and asked me if I could get there? No. Meanwhile, I realized I couldn’t get to SourceForge. This was proving problematic as I had just done a release of an Open Source project I’m the maintainer of, and was trying to update the project website. Guess announcing the release will have to wait a bit :(.
Oh well. “The internet must be broken somewhere”.
We then recalled that these are both services of OSDN. I recall a few years back talking with the system administrators there about crisis management in IT environments and using procedures to manage change. They said they didn’t need any help with their operations. “We’re all set”. Uh huh. People always say that when things aren’t going wrong.
—
Of course, it is now 3am in California. It actually doesn’t matter where your servers are — it’s always 3am when things like this go wrong. Personally, I take it as conclusive proof about the underlying nature of the universe that this sort of thing only happens when it is the middle of the night. You can’t possibly find a less pleasant time to force sysadmins to get out of bed and to go try and fix things. Frankly, I think that’s just Someone trying to tell sysadmins that they made a poor career choice, but you know, He (or She, or It, or They, take your pick) needs to have a good laugh too.
AfC
Let me please take a moment out of your day to direct your attention to this story on theregister does anyone else see this as a massive abuse of power? Now we’ve all been insulted online, sometimes people file bug reports about it. If I reported that I had been insulted to the police, would they care? Would they fine someone? NO! They’d throw the report in a dusty corner full of the sh*t they can’t be bothered to sort out.
However, when it happens to a police officer, they will find whatever trumped up charge they can squeeze past a public defender and use their powers in order to retaliate. This IS the thought police.
Today I shall shed a tear for the death of justice, rest in peace.
I was in Extremadura last Friday on the Festival Tecnologico at Santos de Maimona, Extremadura, Spain. It has been great to see again their vision in open source. For those of you who do not know, Extremedura is the poorest region in Spain. They missed the industrial revolution all together; thus since the beginning of 2000 politicians have been trying to ensure that Extremadura does not miss the information society revolution as well.
I arrived to the event on Thursday evening. Olga drove me one hour and half (thanks so much) from Seville airport to Santos de Maimona. At night, we had dinner in a traditional and home-run restaurant with Olga, Alex and Tony from Fundation Maimona and Jose María Figueres, ex-president of Costa Rica and a wise man. My first dinner ever with a president or ex-president of a country. The conversation was focus on regional and rural development and information society issues. It was like been on a club of the Economist readers.
Next day the conference started. I had the opportunity to listen to Carlos Castro Castro (I actually helped to translated one of his articles into Catalan back in 2003). He talked about the strong commitment of the Extremadura government towards open source, materialized, among other things, in the Linex distribution.
Arround 14.00 the panel about open source and business started. My presentation was mainly focus on highlighting the possibilities that open source offers to companies and what Openbravo can provide as solution. I had lunch with a couple of people and some of the ideas interesting comments were made:
· Many people still thinks that an ERP in just an advanced accounting program. This is obviously far from reality not only from a functionality point of view also for the effort that an ERP solution requires to be implemented.
· Some people are abandoning home-grown solutions and looking at Openbravo as product and platform to build their next generation of solutions instead of investing in their own product (I blogged about this time ago).
Next stop is Galicia. I have a close relationship with Galicia since my book Software libre. Tecnicamente viábel, economicamente sostíbel e socialmente xusto (in Galician) was published two years ago. I'm going to be talking on the 14 of May at University of Vigo. Keep tunned in our site more details.
Free Software Magazine published a long interview of the main Ekiga developers and contributors.
It gives a deeper insight of what Ekiga is, what it will become, how we are working together. I think it is always good to remember that Ekiga is a pure collaborative project, on which people program during their spare time only, without any funding unlike much free software nowadays.
Enjoy the reading and big thanks to Tony Mobily for the time spent with us for this interview!
To recap, bugzilla.gnome.org (henceforth bgo, of which I am nothing but an enthusiastic user) is running a rather heavily patched version of Bugzilla 2.x. One of the changes from 2.x is a system to let people set a patch’s status using a drop menu from any one of a number of options (including “obsolete”, “reviewed”, “rejected”, “committed”, “commit after freeze”, and so on), rather than simply the boolean “obsolete” or “not obsolete”.
In the meantime, Bugzilla 3.x has evolved a separate system of flags for greater control over a patch’s status, so that you can have a number of not-quite-boolean flags set on or off or maybe for each bug.
There is an idea, tracked as GNOME bug 433607, that bgo should switch to Bugzilla 3.x, which would be lovely and allow a lot more fun things such as XML querying of bugs, which is something I really want. Last year sometime in 433607 I said I would have a try at porting the bgo status system over to 3.x, and I’ve finally had time to do that over the last few days. Here’s the result.
However, I put this into Mozilla bug 431438 which was immediately marked as a duplicate of Mozilla bug 353690, which is saying that flags (in the 3.x sense) should be able to have arbitrary values. This won’t be released for another year until Bugzilla 4.x. So I suppose either we stick with 2.x, go to 3.x but apply the patch locally, go to 3.x and find a provable way to convert all existing statuses to 3.x flags, or wait for 4.x.
Lychee tea keeps me going!
This is a call out to anyone on Planet Gnome who can suggest a good printer that will work well with Linux. My ideal printer would probably be just a black-and-white laser printer that connects with USB, and is compatible with any recent versions of Ubuntu.
I’m not 100% sure about the B&W laser part. I’m also open to suggestions for inkjet printers, especially ones that have integrated scanners that also will work in Ubuntu.
I previously mentioned Easy GIT, which greatly improves git, in large part by hiding man pages and command line options packed with unimportant implementation detail, while adding examples and options that relate to workflow.
Since then I've been using Easy GIT with other people and a central repository, and moving up the learning curve a bit, and started to find some stuff that still doesn't work for me.
(I guess I'll say eg and git interchangeably, since in many cases enhancements could go in either project.)
Should be a way to globally see what is outstandingFor my workflow, with a central repository and a small team (which is all my projects ever, whether D-Bus or Metacity or LiTL), any local-only changes or local-only branches are temporary.
In fact my standard procedure on a branch that will last a few days is to push to the server pretty much every hour or so, so I have a backup. Easy GIT (or git) makes this easier in some ways, since it's easy to create my own branch on the server.
No way I'm keeping a few days or weeks of work only on my local drive. I've watched a few too many other people do that and regret it.
Here's what happens, though. As the day goes on I end up with a half-dozen branches, and some commits on master too, in various stages of patch review, some approved for merge to master and some not. For most of these branches I probably intended to push them to the server, but for some really small quick-fixes, perhaps not.
Now say I want to power down, or go to bed for the night, or switch from my home computer to my work computer; what I want to do is say "sync to server" - just back it all up! I don't want stuff only on my local drive. If I go from home to work or vice versa, I want everything available on the server so I have it.
Two ideas:
This morning I set out to push all my patches that had not been pushed. Problem one: I couldn't figure out what these patches were.
Remote tracking branches: implementation detailRemote tracking branches are confusing, and I think could simply be an implementation detail. I care about remote repositories ("remotes"); I care about branches that are on remotes; I care about having an offline cache of branches that are on remotes; but I do not care that the offline cache happens to be implemented as a branch. And I do not ever, ever, ever want to write to the remote tracking branch.
How does one write to a remote tracking branch? I'm not sure to be honest. But today, for a second time, I discovered I had a remote tracking branch that was somehow not the same as the branch on the server it was supposed to be tracking. My only guess is that this results from typing "push origin/master" instead of "push origin", or the like. But I have no idea, really, how this could happen, or why I would want it to happen. Worse, I haven't been able to figure out how to fix it, short of a fresh clone.
This is only a small symptom of the problem, though. I think the big picture is that for purposes of command line syntax, "origin/master" should mean "branch master on the origin remote." If an operation should be done offline (as everything except writes and fetches should be), then behind the scenes it would use the remote tracking branch. If an operation is a write, then it should go to the remote branch instead of the tracking branch.
I don't need to know that "origin/master" and "branch master on origin" are different. I think it's clear in all contexts which one I mean, because git already separates network operations from local-only operations, and because it is never correct to modify the remote tracking branch (except to pull in new stuff from the remote branch, of course).
On every pull, the system should verify that the remote tracking branch (aka the offline cache) is exactly the same as the remote branch, and make it be the same if it isn't. And "push --branch master origin" simply should not be different from "push origin/master" - that's crazy.
Whether and where to push/pull: property of the branch, not of the push/pull operationGetting back to the idea of "eg sync": at any given time, I'm planning to either never push a branch, or always push a branch, or not push it for a while and then only push it when I explicitly decide to; but whatever the plan, it's not something that changes every hour. I want to say "keep this branch in sync with server"; or "don't send this to the server ever"; or "don't sync this for now, I'll re-enable sync later."
If branches were tagged with whether to push them or not, and to which server branch, I could globally "eg sync" the entire repository.
I guess git lets you push a branch to multiple different remote branches. Seems like an obscure feature that I can't imagine using. For me it would be fine if, for each remote branch I want changes on, I had to create a local branch, attach it to that remote branch, make the changes on this dedicated local branch, and push. In the normal case, I would have a local branch for all remote branches already anyway.
But, if there are people who love pushing to lots of remote branches from one local branch, they can just set all branches as "never sync" and then they can push individual branches by hand. The rest of us should be able to sync all shared branches at once, while still having local-only branches if we want.
Easy GIT has --all-branches and --matching-branches, but these are IMO wrong workarounds. --all-branches forces you to push stuff that may be a throwaway local branch or "on hold" temporarily. --matching-branches doesn't push new branches and may also push a branch you wanted to keep on hold. What's needed is that branches know where they go; I shouldn't have to push with a special "wildcard" option to do the normal thing, which is to sync all branches marked shared, and do not sync any branches I intend to be local-only.
Feedback: tell me what's going on!Now that Easy GIT fixed the docs, I think the number-one UI deficiency in git is that it has no feedback; it does not explain what it's doing when it's doing it. Sometimes it's totally silent; sometimes it has a bunch of babble about "objects" and "packs" that means nothing to me; neither of those is good.
This steepens the learning curve, since you can't watch what commands do.
Maybe worse, it makes the source control system "feel bad." For me, the purpose of a source control system is to make it so I can never lose any history or data; when every command feels like it did something mysterious I'm not sure I understand, I don't have a sense of security.
Commands should output things like: "downloading changes from remote server 'origin' on remote branch 'master'"; "merging branch origin/master onto branch master"; "3 new changes applied to master". For each command, I should get feedback on any network transfers; all branches that were involved; and all commits that were created or merged.
"eg branch" should show more than only branch names to help orient me. I would like to know if the branch is synced and if so to which remote branch, for example.
ChangeLog workflow is wrongFor a detailed ChangeLog, I want to write the ChangeLog entry as I develop the code, using 'C-x 4 a' in Emacs, ideally.
The problem is that when I go to commit, that's not when I want to write the log. I prefer to write it either as I go, or just before commit as part of self-reviewing the patch - I read the patch while doing 'C-x 4 a' to document each part. That's the value of having a ChangeLog file that exists always, and isn't just an open editor at commit time.
However, if you have a ChangeLog file git barfs all over every merge. git should be smarter. Merging ChangeLog conflicts is not exactly a computationally intractable problem. But there's an even better solution maybe.
Every time I switch to a branch, git could create an empty file called ChangeLog; then when I commit, it could pre-fill the editor with the contents of that file and reset the file to empty. Magic!
The problem is not that ChangeLog disrupts git merges. The problem is that git does not support the nice format and workflow of ChangeLog.
Use EMAIL and GECOSA minor thing, but if you just start using git, it puts garbage in the Author field. Every other program uses the EMAIL environment variable and your UNIX account information. That is a good default. If people want to override it via config option, then let them, but don't require configuration to get started.
Easier way to see what a branch doesIf you want to review a branch to see if it should be merged, the syntax is the magic triple dots: git diff master...mybranch
This is weird, arcane, hard to discover... and something I need to do all the time.
I'm not sure what the right solution is. Maybe just docs, or maybe it should be an option to diff instead of the funky triple-dots.
Deleting a remote branchI think to delete a remote branch you have to do eg push :branchname, another strange and surprising syntax.
eg branch -d remotename/branchname should work, IMO. (Again, writes to a remote branch should modify the server-side branch, not the remote tracking branch.)
Can the central repository be "messed up"?With subversion, I think it's basically impossible for someone with access to the central repo to accidentally make a change that can't be reverted. Sure they can log on to the server and delete stuff from the shell, but with Subversion commands, I can't do anything that won't show up in the history.
I can't tell whether this is true with git. Throughout the docs there are options like "--force" and "--hard" and warnings about how using the command can screw you. I don't know how many of these warnings apply to central, remote repositories, but I worry about it. Remember, I don't understand the git docs, and hope I never have to try.
An example from man git-push:
--force
Usually, the command refuses to update a remote ref that is not an ancestor of the local ref used to overwrite it. This flag disables the check. This can cause the remote repository to lose commits; use it with care.
Wait - can cause the remote repository to lose commits???!!! This is not what I'm looking for in a source control system. It's the main thing a source control system is supposed to be preventing!
Accidents worry me a lot more than malicious people or mysterious cosmic rays. Especially when something as absurdly hard to use as git is involved!
It also bugs me that I can accidentally do things that while theoretically recoverable, are still very hard to recover from. For example, somehow having changes on remote tracking branches that are not on the server. (To beat that dead horse a bit more.)
Overview of branch relationshipsIf you want to understand the branch structure of a project, your best bet is gitk, and gitk is not a good bet. I do not understand the gitk display at all.
There's probably some simple info the command line could report that would be very helpful, such as which branches have changes that are not on master, which branches were ever merged into a given branch, or which branch a branch was originally branched from. Perhaps some of this should be in the "git branch" output by default.
ConclusionSo much work to do.
Marketing is a societal process … attempting to move the consumers toward the products or services offered.
I hate marketing. With a passion. The sentence above shows the 2 biggest problems I have with it. One is the word consumer, which often means “too stupid to make its own decisions”. The other is the fact that it doesn’t talk about the quality of the offer, but only about “moving towards”.
Turns out, the people we trust have no clue either. That bug report is Debian wondering which Flash player to ship in the default install. Apparently the most important thing in deciding about it is wether Flash starts paused (changing that is a one-line diff) or the amount of people that have submitted code. Stuff like feature completeness or code quality don’t seem to be that important. Why should they be, those are hard questions, answering them is way easier than looking at statistics or the big play button in your browser. Another hard thing for people is realizing that one doesn’t have a clue and asking the developers of the respective projects for their opinion. It still baffles me that people don’t ask.
Apparently in these cases marketing is very easy. Since the people don’t even have a clue what the right questions to ask are, marketers are free to make up their own questions to ask about the project and provide the answers.
So you have one project that overpromises and another one that underpromises. Now if you browse discussions about Flash players on various mailing lists or forums, you’ll notice that Gnash is known way better. People are very more aware of an application that claims to almost support Flash than an application that claims it might not even work. On the other hand, the perception of Gnash is more negative. Gnash does not deliver its promises. Swfdec on the other hand promises nothing, so it’s likely it’ll be better than people expect, which makes them happy. Now, the question is: What’s the better approach?
Until then, it’ll probably remain nothing but an interesting thesis project for someone studying marketing.
EphyDeli is a Python extension for Epiphany that adds Post To Delicious menu and toolbar items for posting the current page to Del.icio.us. I know of several people who use it frequently and the last release was in 2006, so I've obviously mastered the Unix philosophy well here! This release was caused by those mean old Epiphany developers changing the API, many thanks to Thibauld Nion for noticing this and sending a patch.
To download it you can either grab the tarball or fetch the bzr tree.

Just a quick note on some nice Linux.com articles by Bruce Byfield:
Many thanks to Bruce for his work and attention to free open source accessibility!
I made a note about this in my previous post but I thought it would be worth it to make a separate post about this.
We’ll be having another embedding meetup in Mountain View on May 8th and 9th (next Thursday and Friday.) Our goal will be to start pitching and scoping a new Embedding API and trying to get some actual code down on paper. We’ll run it as an open meeting. If you’re in the area and you want to come by let me know (also on twitter) so we can try and find the right sized room. We’ll also have some more structured sessions with an open telephone line so people can join in for some of the time.
Right now we have me, Mark Finkle, Dave Camp, Pelle Johnsen, Brad Lassey, Doug Turner, Stuart and Vlad in attendance. We had a lot of interest last time and this time I’m giving more warning. :D So feel free to drop on by.
I’ll post more info as people respond and let me know how many people we might have showing up.

Two Fridays ago, right in the middle of a brutal two weeks of travel, I stopped by in San Francisco and participated in a brainstorming session around embedding Mozilla into other applications. The raw notes are available in the image above, and are a bit blurry. I will try and give some context for them and try and give a quick overview of what we talked about in the meeting and what we think the next steps and priorities must be.
There were a huge number of people at the meeting. Behdad, Stuart, Vlad, Mark Finkle, Brad Lassey, Dave Camp, Doug Turner, Christian Schaller, Wim Taymans were all there, some in person, some on the phone, but everyone was able to contribute. It was a great meeting.
Use Cases
There are some use cases listed in the wiki but we spent most of our time talking about one of the use cases - embedding Mozilla into another application. We didn’t worry too much about building XUL apps or other extension systems. Mostly we’re worried about how to improve our story and developer experience around embedding and allow a vibrant community to develop around embedding.
Goals
From the image you can see that we had a few goals listed. These include:
Create a consistent story
One of our problems is that we don’t really have a consistent story around how to embed. Or at least, we have a story that’s hard to tell. Sometimes you use libxul, sometimes you use the win32 embedding widget, sometimes you use the gtk embedding widget, sometimes you have to reach down into internal interfaces to change things and some times you don’t. Having a single story around how to make use of the embedding APIs on your platform and in your environment is one of our goals.
Someone who comes along and wants to do this should be able to find a single location for documentation and examples and also what builds they should be using and what they have to do to ship the libraries along with their product.
Build a community of users and owners
This is probably the most critical goal of this effort. Right now there’s a huge amount of latent demand for Mozilla to have decent embedding APIs and support for this use case. The trick is enabling this community to coalesce around a particular effort and giving them the tools to be successful. This requires leadership in the Mozilla project and a single direction. We also need to create a place for embedders to work. I’m talking about code here - their own set of APIs and interfaces. There’s already dev.embedding and dev.platforms.mobile and other newsgroups where those people hang out but giving a sense of ownership to this crowd and letting them drive requirements and schedules is a very important factor for success.
Note that I call out users and owners separately. There is a much larger number of people trying to use Mozilla in their apps than those who would be willing to invest and drive development. But they are both very important and we need to make sure that we’re addressing both of their needs with owners/developers connecting with users.
No nsI* (An anti-goal?)
The use of nsISupports-based interfaces from embedding code has been problematic for a lot of reasons. First, it’s kind of a pain in the butt to use when concrete classes would, in many cases, do a fine job. They have proven to pretty fragile as well, API and ABI changes being the most obvious problems and hard to understand refcnt rules for casual users. And last, but not least, in the future we’re likely to be moving the nsISupports system from a refcnt system to garbage collection APIs. This will result in a huge amount of pain for people already using those interfaces and will require a lot of re-education of people who are using our current interfaces. We would like to isolate users from those changes if it’s at all possible.
So building something new on top of those interfaces, isolating users from changes and making things a lot easier to understand feels like the right goal. We suspect that we won’t be able to get away from it entirely but we should be able to get away from most of it. Certainly much more than what people are having to do today to be successful.
Predictable
We want a set of APIs that are predictable and useful to a huge number of people. And with regular, consumable releases and a roadmap as well. This is an obvious process-based goal that will come more with time and understanding more of our user base for the embedding APIs than a specific technical milestone to hit. So this is just something that we need to be aware of during the process more than an early goal. Something to aim for once we’re to the point where we have something that’s supportable.
Well documented
Someone should be able to pick up one of our regular releases and have a clear roadmap and technical documentation on how to use it. This means pretty easy to use APIs with clear boundaries for the interfaces and people who are interested in writing sample code and tests that show how the code should work.
Covers most use cases
See the notes above about nsISupports. We should be able to hit most use cases with this embedding API and not have to require most people to reach out of the API for common functionality. (Is 95% a good rule? 80%?) It’s hard to tell here what the metric will be for success, but we’ll know more once we understand what people want to do with the API and how useful they find the code that gets written.
A Stable API
One of the main complaints that we’ve heard from people that are trying to embed Mozilla is that our useful interfaces still change from time to time. (While also complaining at the same time that we don’t release often enough, which I find personally amusing.) We think that by creating a stable embedding API that’s based around what people need, as opposed to how Mozilla works internally, that we can create that stability that people require.
However, based on experience everyone agreed that it’s going to take us a while to get to a stable API. It’s nearly impossible to get the right API out of the gate. You just never get it right the first time. So we will have some iteration during early development and will start locking things down once we have a better sense of what people and what we’ll need to change internally once we understand about our user’s specific use cases. Stable API is a goal, but it’s a longer goal. The more that we have people help us understand and contribute code out of the gate the faster we will get here.
What would it look like?
There’s a quick sketch from the whiteboard that I put into a graphic.
A quick description of the various boxes:
Areas of Work
We identified a huge number of areas of work to start on. These are roughly prioritized.
Part One
Part Two
Part Three
Part Four
Copy an API or build a new one?
I don’t think that there was anyone in the room that had an attachment to building a completely new API. Far from it, in fact. If something hits the goals listed at the top of this post and is able to leverage the work that someone else has done, that’s great. For example, copying the WebKit or the MSHTML/WebBrowser Control is certainly on the table. Probably copying in the sense of looking at the types of calls and functionality, not the specific style or variable names or anything. Some of those interfaces are probably pretty scary looking.
Note that trying to be a drop in replacement to WebKit or MSHTML/WebBrowser Control is not on the table. Therein lies madness. You end up chasing compatibility instead of just trying to make something that works really really well. But we can learn what works well from them and what doesn’t and hopefully apply that to our new embedding interfaces.
C vs. C++
This was kind of a side-discussion at the end and isn’t new to anyone. A few things to note here that came out of it, though. First, C++ has gotten a lot better over the years in terms of compiler sanity and stability. We’ve stayed away from it in the past in some places because when we started 10 years ago the compilers were pretty bad. (i.e. our C++ doesn’t look a lot like C++ - not a lot of stdc++ or exceptions or anything else particularly fancy.) Also, it seems like a lot of the ABI issues with C++ have gotten better as well. Both because of new test suites on Linux/UNIX but also because things have just gotten better with time. So a lot of the reasons not to use C++ have largely been mitigated with time.
C is a nice lowest common denominator. It’s easy to bind to other languages and it’s easy to build stable interfaces in it. But it’s also pretty dissimilar to the way that everyone else is embedding if we’re interested in leveraging other APIs and other experiences. Also, if there are people who want C apis it’s pretty easy to build them on top of what we’re looking to do.
Note that this isn’t decided yet, but I bet I can guess which way it’s going to go.
Next Steps
Out next step is pretty clear: We need to start writing up code and interfaces and start assigning ownership. Some of that will come from Mozilla but there’s a huge amount of external work being done on these items by a vast number of parties. Giving them a place to work and a place to post patches is a great first start. I’ll make a separate post about that once we have things up and running. But really I think we should stop talking and start coding and see where we can go.
To that end, we’ll be having another Mozilla Embedding Meetup in Mountain View on May 8th and 9th (Thursday and Friday.) It’s part of a Mozilla “work week.” Mark Finkle, Pelle Johnsen, Dave Camp, Vlad, Stuart and a bunch of other people will be around and will be hacking on some of this stuff. If you’re in the area and you’re interested come on by. It’s an open meeting. We’ll try and put together some more structured meetings with phone dial-ins, too. (I’ll do a separate post about this as well to give it more visibility.)
You can also join us on #embedding on irc.mozilla.org. It’s a quiet channel right now, but it’s starting to pick up steam. Once we start writing code it will probably start seeing more traffic. Lurk there if you want, we don’t mind.
More good stuff to come!
A couple Sun related ones.
Now you can apply the same reasoning for choosing open source over a proprietary solution, when you need storage. Incorporates ZFS and Sun Fire X4500 storage servers.
Specific release highlights include:
Last weekend I’ve been in Valencia for the II GUADEMY, organized by PoLinux (the Linux Users Group of the Universidad Politécnica, where the event took place).
The purpose of this II GUADEMY was to really serve as a starting point for further sharing between free desktops (it’s true it was just about GNOME and KDE, although I’m sure we could easily get other free desktops in), and I really think that it has succeeded. There were some core KDE and GNOME developers around, even though lots of GNOME/KDE Spanish developers were missing (where were you?), and even though not big decisions have been made, I feel that this is the beginning of a new era in free desktops sharing. Of course, it’s a very long trip what we just started, but seeing people from both desktops willing to cooperate as much as possible means we (the people that believe in further sharing) are not that wrong
So, here are my conclusions from what I have seen/heard during this weekend with lovely weather and very little sleep in Valencia:
(details from Jos). I wouldn’t really recommend it to anyone, except for stag parties (if you ever go to this kind of parties), but it was fun to see something different, we laughed a lot during the dinner. Fortunately, we arrived a bit late, so we just had to listen to the Karaoke for a few minutes, after that, it was shut down.
Just wanted to end up with a big congratulation to the organizers, they managed to do a great conference, with core international speakers, even though the planning started quite late. Now looking forward to GUADEMY III, which might perfectly take place, why not, in the joint GUADEC/Akademy in 2009.
You can see the slides of my talk here. These don’t include Will’s plan for code sharing process, which I guess he’ll publish soon.
Following up from my previous post, there has been some interesting discussion in the comments and elsewhere. One issue in particular came throughh in a couple of comments.
Ted Ts’o is gushing in his praise of the Eclipse project:
Look at Eclipse; it was released by IBM in November, 2001. Within 2 years, it had something like 80 companies participating in the code development, and in less than 2.5 years, a non-profit organization was founded where IBM didn’t even have a majority of seats on the board.
And Michael Meeks brings up the subject of OpenOffice.org governance (which he has written about frequently in the past - by the way, Michael, I can’t find an easy way to link to individual journal entries of yours):
Faced with serious, persistant maladministration and injustice in the ‘communities’ Sun controls - what can you do?
Indeed, Sun has a ways to go make sure that projects they free have a non-negligible contribution from people outside their organisation, and OpenOffice.org is probably the most compelling case for an independent non-profit that they have right now. You have all the elements - significant industry buy-in to the project, multiple companies investing time, financial and human resources in building on the project.
In the comments I argue that OpenOffice.org should consider setting up a 501(c)6 (a trade association) as Eclipse did, to ensure both community and industry participation in the project:
OOo as a project is really too big to be easily accessible to a volunteer community, but the project has succeeded in gaining industry support - an initial board would doubtless include IBM, Sun and Novell as major members, but might also include CollabNet, the French ministry for the interior, maybe NeoOffice and StarXpert?
In any case, the structure of a trade organisation, which aims more to have an ecosystem than a wide-open community, seems more appropriate for a project like OOo. It provides all of the things which Michael Meeks has been calling for - an independant governing body which owns trademarks and copyright, and is answerable to companies and communities in proportion to their contributions.
I also think that it’s important to separate governance in the sense of marketing, infrastructure and industry relations from technical governance. In the case of the Eclipse Foundation, it’s important to note that IBM is still by far the greatest single contributor of code:
And while it’s absolutely correct to laud praise on IBM for Eclipse, it’s worth noting that even now, 7 years after the project has been freed and 5 years after the creation of the Eclipse Foundation, 75% of the committers work for IBM, and an even higher percentage of the check-ins come from IBM employees. So yes, the project has succeeded in establishing an independent governing body, but code talks, and IBM still talks loudest.
Aside from that, I want to reply in particular to something that Ted said in his comment:
Community governance is hard? I’m going to have to call bullshit on that. It really isn’t hard. What’s hard is letting go of control, which Sun has proven to have an extremely hard time doing.
I agree - letting go of control is hard. And I’ve seen many companies struggle with it - Xara, Wengo, Sun, to name a few, and other companies skirt the issue by unashamedly keeping control - Trolltech, MySQL, Alfresco, JBoss, SugarCRM come to mind. It’s a question of expectations. When a company says “sure, we’re happy to work with you, on our terms”, you know where you stand.
But starting a project on Sourceforge, putting 4 years worth of code on there, telling your team of (proprietary) software developers “now you commit there”, and then expecting that Poof! like magic little Code Gnomes start appearing from out of nowhere to make your project better is unrealistic. It really is the difference between “organic” (grown from scratch, by developers for developers) and “non-organic” (code is liberated en masse) projects. If you have absolutely no governance guidelines whatsoever, who’s the maintainer? The manager who manage[ds] the development team in your lab? How well does that work?
I hate marketing. With a passion. The sentence above shows the 2 biggest problems I have with it. One is the word consumer, which often means “too stupid to make its own decisions”. The other is the fact that it doesn’t talk about the quality of the offer, but only about “moving towards”. To me that means that marketing is deeply unethical because its definition already violates the golden rule and the categorical imperative.
But before I get lost in another philosophical discussion with Christian I’ll get back to Open Source. And no, I’m not going to speak about the fact that “ODF good, OOXML bad” is just a big marketing campaign to close Ubuntu bug #1 or about if Linux is ready for the desktop, because that’d just get all the carnival barkers back on their podiums. They are just good as examples for the point I’m trying to make. And that point is that people generally behave seriously braindamaged when it comes to deciding about products or services they have no clue about (and yes, that likely includes me). Of course, we’re all trained to do the faith-based consumer approach by all the marketing that gets thrown at us, so we have a “good” excuse: And after all, how could the people we trust be wrong?
Turns out, the people we trust have no clue either. That bug report is Debian wondering which Flash player to ship in the default install. Apparently the most important thing in deciding about it is wether Flash starts paused (changing that is a one-line diff) or the amount of people that have submitted code. Stuff like feature completeness or code quality don’t seem to be that important. Why should they be, those are hard questions, answering them is way easier than looking at statistics or the big play button in your browser. Another hard thing for people is realizing that one doesn’t have a clue and asking the developers of the respective projects for their opinion. It still baffles me that people don’t ask.
Apparently in these cases marketing is very easy. Since the people don’t even have a clue what the right questions to ask are, marketers are free to make up their own questions to ask about the project and provide the answers. Which is what is happening in the bug linked above: The Gnash maintainer markets Gnash with made-up questions, the Swfdec maintainer does the same for Swfdec.
An interesting thing about all of this is that the Gnash and Swfdec projects have been using a very different approach at marketing. I have always been very careful, telling people they’d better try themselves, and not promising features; instead reminding them that reverse-engineering a product of that scope is hard. On the other hand, Gnash promoted itself as having “full Flash 7 support” by the end of 2007. That was a year ago. So you have one project that overpromises and another one that underpromises. Now if you browse discussions about Flash players on various mailing lists or forums, you’ll notice that Gnash is known way better. People are very more aware of an application that claims to almost support Flash than an application that claims it might not even work. On the other hand, the perception of Gnash is more negative. Gnash does not deliver its promises. Swfdec on the other hand promises nothing, so it’s likely it’ll be better than people expect, which makes them happy. Now, the question is: What’s the better approach? It’ll be interesting to follow it on Google blogs. If I ever figure it out, I’ll blog about it. Until then, it’ll probably remain nothing but an interesting thesis project for someone studying marketing.