A new design for Epiphany: Web

As you might have heard in many other places a bunch of GNOME and WebKit hackers have met in rainy Coruña for the 3rd WebKitGTK+ hackfest. Many things have been discussed, but today I’m going to give a sneak preview of the new design for Epiphany and its rebirth as the core GNOME Web application.

The design is still very much a work in progress, but I can try to briefly talk about some of the highlights of the refreshed concept:

  • Focus on the current page content. This means, in general, that we’ll get rid of as much chrome as we can (a trend that we started some time ago already), and in particular and more visibly that we won’t have a visible tab bar by default.
  • The tab bar might be gone, but we’ll still offer a convenient, and we think improved, way of switching between pages. All the currently and recently opened pages are visible in the overview (the new start page), and we’ll provide a way of switching between them with the mouse or keyboard shortcuts. You can see an early animated mockup of this in this video of the gnome design youtube channel (link to the video):
  • We have tried to identify and make easier other tasks that have been historically solved with tabs. One of the most common ones is “I want to read this web later, I’ll save it in a tab”. Epiphany will now provide a specialized mechanism for this, called Queues. The design team is working on the details of its implementation, but we have already some interesting ideas; for instance, when you open links in a Google Search results page with middle click a new queue could be automatically created with the results page as the parent and all the links you open as items in the queue.
  • There’s many more ideas that are either refinements of already existing features, like Web Application integration, or nailing down the last details of long-term developments, like improved stability and performance thanks to the upcoming WebKit2 support. Make sure to follow the GNOME Design team or Epiphany channels to keep in touch with things as they evolve.

The mighty Igalians (namely Claudio and myself) are already busy at work implementing the new design. For now we are focusing on a series of incremental patches that will move us closer to the end goal, that way we’ll have something usable even if the design or the full implementation of the Web application are not ready in time for 3.4. You can check the current Roadmap, and as always if you want to help us just drop by #epiphany @ GimpNet or send an email to the epiphany-devel mailing list.

Until the next time, thanks to all the attendants to this year’s WebKitGTK+ hackfest, and to all the sponsors for their support. Happy hacking!

Posted in General | 34 Comments

The next million apps

A few months ago the Apple Store accumulated more than 500,000
approved applications available for download. This is a very
remarkable fact for a relatively new platform using somewhat obscure
. It is, also, a very profitable situation for Apple.

It is a bit besides the point of this post whether a platform is
popular because it has half a million applications or whether it has
half a million applications because it’s popular; the truth is likely
that popularity and a lot of applications go hand in hand in a
self-reinforcing loop. That being said, the fact remains that any
platform that aims to be relevant needs to both convince developers to
create applications for it and to provide them with the means to do
so. If you start with an eye-popping, years ahead of its competition,
money-making miracle thing like the iPhone you might end up convincing
large amounts of people to target your platform specifically, but
usually having a great platform won’t be enough to do so. Think of

The question for us is, then: how are we going to get from where we
stand today to a vibrant constellation of applications centered around
the GNOME platform? Is there a path from today to 500,000 GNOME
applications in the future?

Developing GNOME and for GNOME.

The way things have worked so far is that we expect people to develop
for GNOME in a similar way to what in which we develop its core
applications. This is not only natural, but also has some great
qualities like making us dogfood our own development processes. It has
also some disadvantages, like expecting (perhaps unreasonably) all
developers to appreciate the perhaps too hacker-like tools we use and
routines we follow. Maybe not everyone wants to use the shell, emacs
and git from the command line? Perhaps we can jump without problems
from C or JavaScript to Vala (the 3 languages currently used in the
core module set), although I have my doubts, but surely offering 5
different language alternatives in developer.gnome.org, with tutorials and API documentation, without really telling newcomers which one is recommended, encouraged or best supported might be too much for most people?

To the extent that our core development practices are reflected in our
third party developer story we need to keep our house in order. Being
able to use any language to target GNOME might be a strength, but the
fact that we cannot decide which language we want users to learn first
might perhaps just be the result of our internal confusion. The core
libraries are still overwhelmingly written in C, but all the new
generation applications and UI modules are being written in higher
level languages (finally?!). Which ones? Well, guess it
depends. Some use JavaScript, some use Vala, others might come in the
future, and it seems that the winner mostly depends on the tastes of
the module owners. Surely not all languages would be tacitly accepted
(sawfish was dropped, among other reasons, because it was written in a
dialect of Lisp), but I can see the situation getting worse before it
gets better.

Even if we sort out the language issue there would be further barriers
for new developers. Our platform has been massively cleaned up in
recent times, but the road to GNOME 3 has created new ambiguities: a
parallel, mostly internal, toolkit built on top of Clutter is used by
the Shell or Sushi, and if certain animations or effects are desired
in GTK+ projects the only choice seems to mix and match a bit of the
old and the new in the same application. Efforts are underway to unify
, but again it’s not complicated to see how someone new to
the whole thing might be confused.

I could go on mentioning communication channels, tools, etc, but I
think the point has been made: as far as we expect people to develop
native GNOME applications in a way similar to how we work we need to
spend energy in clarifying our internal procedures, documenting them
and publishing easy to follow and simplified instructions for third
party developers. Otherwise GNOME will likely be perceived as a
platform that is difficult to develop for, best suited for expert
hackers, with few quality applications and not much appeal for the
mainstream. This would have been a reasonable conclusion some years
ago, and has been a repeated call to arms in the past. While I think
it still makes sense to do this, I believe we live in a time that
offers us new strategies that we can combine with this one, perhaps
better suited to our current capabilities and resources.

The Web.

The Web is winning. This horse has been beaten to death, so I won’t
dwell on the details at this point, but web technologies are here to
stay and are only becoming more and more important each day. Those who
repeatedly announce the imminent failure of the web as an application
development platform on the basis that it, well, sucks (and it kinda
does) miss two important points: first, the web is winning not because
it’s a beautiful platform, but because of its reach. Second,
whatever its flaws, the web platform has so much momentum and energy
put into it that it’s quickly overcoming most of the defects that it
had at some point, and things will only improve. Do you want an idea
of how big this is getting? Windows 8 applications will be built
using HTML and JavaScript. You don’t get more mainstream than that.

A new array of solutions designed to build web applications (packaged,
delivered to the user, run locally) is being created as we speak. From
Tizen’s endorsed WAC, to Mozilla’s OpenWebApps, to Chrome’s
the list keeps growing in expansionary fashion, but
all the specs share the same father: a thin layer on top of HTML5, CSS
and JavaScript, bridging the gap between the W3C standard’s and the
needs of the apps. As the standards grow, those platforms will shrink,
and it is likely that in good time a reasonably standardized solution
will emerge.

Why is this relevant for GNOME? Never mind iOS, never mind Android,
one thing is clear: most of the next million apps written will be web
applications. Some huge players like Microsoft are already moving
there as fast as they can, and the rest will follow sooner or
later. Native apps won’t go anywhere for a long time, but developers
willing to maximize their reach will, increasingly, prefer web
applications over anything else. At least as their first choice. This
brings us a great opportunity. If we jump on this bandwagon, support
web applications as first class citizens on top of world-class
, and accept and even encourage people to run their web
apps on our operating system we can maximize our reach with a
fraction of the effort of fighting in the native SDK war against Apple
and Google. I think being smart in how we spend our scarce resources
is important, and I believe this is a fight that we can win if we put
our minds to it: let’s not forget our own platform, but let’s embrace
the web as it is emerging.

Most of this was shared with those present at this year’s GNOME Boston
Summit (in Montreal), and although there was a lively debate my
impression is that most of it was well received by the core hackers
present. We at Igalia believe that this is a promising way forward for
GNOME and we happen to have the skills necessary to make it happen, so
we are committed to keep investing in the foundational platform bits
like WebKit and to bring Web Application support to our OS: our plan
for the next months is to explore all the new technologies I have
mentioned, and start to implement a well integrated runtime to run the
next generation of web goodness at home.

Posted in Blogroll, General | 22 Comments

Joanmarie Diggs joins Igalia

As announced by the fearless accessibility leader himself Joanmarie Diggs will be joining Igalia. I just want to direct your attention to one tiny detail. From this:

To this:

in less than 4 hours. We are just that cool. Welcome Joanie!

Posted in Blogroll, General | 3 Comments

Web application mode in GNOME 3.2

If you attended either of my talks at the Desktop Summit or COSCUP (or both! Although I think only the British Citizen Bastien Nocera might have done so, assuming he was sober enough to go to the former) you might remember my somewhat failed attempts at demoing the new web application mode in Epiphany. Although there are still some improvements to do I’ve landed the bulk of the code for the upcoming 3.1.90 release, so I figured it would be useful to give a brief overview of how this thing works for the global audience of the intertubes.

The main idea here, to give a bit of context, is that some of us use a certain number of web pages as if they were applications: we open them the minute we open the browser, keep them open all the time, check on them periodically, etc. Once you figure this out, the next logical step (sort of “independently discovered” by pretty much anyone doing browsers) is: well, if you use them as applications shouldn’t you try to make them a bit more like actual applications? Right. So let’s see how we have done this in GNOME.

Let’s say you are using a certain micro-blogging service with a blue logo and a tendency to break down from time to time. At some point you figure you use this thing so much that you might as well create an app for it. Press Ctrl-Shift-A, or access the File menu and select “Save as Web Application…”:

Save as Web Application ...

Now a small dialog pops up. It will present you the icon to be used for the new application and a tentative title, which you can edit. If the page is providing a specific high-resolution icon (usually meant for touch devices like the iPhone) we’ll use that, otherwise we fall back to a screenshot that will hopefully be recognizable enough. There’s lots of smalll improvements to do here, from overlaying the normal favicon on top of the screenshot to allowing the user to select the region to snapshot (or even scrapping the page trying to see if we can find the logo somewhere), but those can come later.

Create web application

We click “Create”, and the system informs us that the application is ready to be used.

Launch the web application

If you click “Launch”, or access the newly created application from the Shell, you’ll get a new browser instance in the so called “application mode”.

Very briefly:

  • There’s absolutely no UI chrome other than the title bar.
  • The application is sandboxed to a given domain. If you try to go somewhere else, say by clicking a link, the petition will be forwarded to a normal browser instance.
  • The existing cookies for the application domain are inherited from the main browser profile (so that you don’t have to login again), but other than that this is a completely fresh profile.
  • Finally, this is running in a different process. If you crash your main browser your Twitter app will still be there.

And that’s pretty much it! I have been using this intensively for a while now, and I must say it feels totally natural and, for me at least, it provides a much more convenient way of using the web applications that I’ve come to rely on. I’m eager to get feedback from the early adopters using 3.1.90, and with a bit of luck even patches fixing the low hanging fruit!

Until the next time, happy hacking!

Edit: a bunch of people are asking whether the apps show up in the overview, in the dash, whether they can be pinned, etc. The answer to all of that is: yes. The web apps created through Epiphany behave just like normal apps. You can launch them from the shell, they show up in the dash and you can pin them there as favorites if you want.

Posted in Blogroll, General | 65 Comments

It’s all in the small things

A long time ago, in a book whose title I have forgotten, I read something that went like:

Alice: Oh, there’s problems in our relationship, but it’s nothing. Just small things that annoy me.

Bob: Then there’s nothing to be done. Small things are all that matters in the end.

It is, of course, an exaggeration, but one of those that can perhaps hide a deep truth. Maybe because in many cases small things are indicative of bigger problems, or maybe because we very easily take for granted the parts that work and end up obsessing with small details to the point where they ruin the whole experience for us (see: Death by a thousand cuts).

In any case, in the last weeks we Igalians have implemented a few nice improvements in Epiphany, all of which are available in GNOME 3.1.2. Only small things, but they matter.

Spell checking

Spell checking! I know I hate writing long chunks of texts without it, and I’m probably not the only one. We enable the feature by default, and will perform spell check using the languages selected in Preferences→Languages or, if there’s none, the default system language according to GTK+.

But of course knowing that you have made a mistake is only half of the battle. If you right click on the misspelled word you’ll get 4 suggestions from WebKit to use as corrections. Click on any of them and it will replace your blunder.

Warning on leaving pages with unsubmitted forms

A feature that old-time Epiphany users will remember fondly. Has it ever happened to you writing a huge comment on reddit, or perhaps a fantastic resignation letter to your boss, only to accidentally close the tab losing all of it for good? Yeah, me too. We will now detect this unfortunate situation, and warn you one last time before tragedy ensues.

Hide that menubar

An ability I enjoy from our terminal is the possibility of hiding its menubar. It’s nice to regain those pixels if you are rarely using them. Since imitation is the most sincere form of flattery we went ahead and copied the feature almost verbatim. Right click on any chrome area in the browser and you’ll see the option to show or hide the menubar:

When unselected the menubar will just go away, although you can always bring it back by performing the same action again. The result? Well, there’s not a lot more to hide now!

Symbolic icons in the URL entry

Jon McCann (repeatedly) asked for Epiphany to drop its yellow tint in the URL entry for secure sites, and Cosimo Cecchi suggested in a bug that we should also use the new symbolic icons for the security lock. Both great ideas, which combined give us a more modern look.


about: support finally landed, and with it about:plugins. There’s a few more things we should add here, like the full path of the plugin and a checkbox to disable it, but at least now it should be easier for users to figure out whether the browser knows about a particular plugin or not.

Also rumor has it another well-loved about: page made it into the release, but you’ll have to figure out that one for yourselves.

Posted in Blogroll, General | 14 Comments

The Web comes to GNOME, ready or not

Last week, together with GNOME 3.0, we released Epiphany 3.0. This is the result of many months of work (our last stable release was Epiphany 2.30 in May 2010), so I think a few lines about our present and our future are in order.

Epiphany 3.0

Yes, the Bluetooth/Network icons are all wrong. Sorry Jon.

It’s always hard to summarize months or development in a few lines, but one can always try:

  • Epiphany 3.0 uses the (soon to be released) WebKitGTK+ 1.4.0. I’ll write a blog post focusing on WebKit when 1.4.0 is out of the door, but some of the highligts of the release would be: GObject DOM bindings, already used by Epiphany and other GNOME apps. HTTP cache implementation, moved into libsoup later in the cycle. GTK+ 3.x support, which we laboriously kept going through all the development cycle. New APIs for plugin management, icon database and frame flattening, among others. HTML5 media support for fullscreen mode, volume management, cookies and Referer. A ton of bugfixes all across the board, from DnD, a11y, networking, and graphics performance to leak fixes, clipboard handling, history, theming and forms. WebKit 1.4.0 just works a lot better, and you’ll notice the minute you start using Epiphany 3.0.
  • UI refinements all over the place: we use a GtkInfobar to inform of session restoration, a Chrome-like floating statusbar (implemented with GeditOverlay) instead of the pixel-eating traditional GtkStatusbar, we let the old, big and hardcoded EphySpinner go, new and nicer custom error pages, …
  • The download UI was completely rewritten to fit better in the Shell. No more status icons and floating windows, we now show ongoing download information in a unobtrusive bottom bar.
  • We took the GSettings migration as an opportunity to improve a bit our settings. In particular I think we have made the font defaults saner for the modern world, and hopefully people will be happier with how their pages look.

There’s still some small details that we want to improve for 3.0, so stay tuned for 3.0.1 (and more!) soon.

Epiphany 3.2

But we are not resting on our laurels! We are already busy planning and working on the features you’ll see in GNOME 3.2, 6 months from now:

  • One of the main themes of the release will be further integration of the browser with the new GNOME UI and design. We are still in the brainstorming phase, but some of the front runners are replacing our menubar with the Shell’s global app menu (more space for your web content!) or integrating our tab/window management into the Shell user experience.
  • A desktop that does not consider the Web a first class citizen in 2011 is not a modern desktop. For 3.2 we are going to bring your favorite web applications into the spotlight: hi-res launchers with custom .desktop files, separate epiphany instance per application, minimal chrome-less UI, and much more. Also, we have proposed this as one of the GSoC ideas for GNOME in 2011.
  • We are also resurrecting the old idea of killing EphyNode and moving our bookmarks and history storage to something like sqlite, which should give us a much more faster and responsive experience. Martin and I are committed to get this working before I leave the Bay Area in May, so if by that date you see me around and this is not in master or in a git branch you can punch me in the face. Really.

One more thing

A year ago, almost to the day, the WebKit2 initiative was announced. As the project page says,WebKit2 aims to bring the split process model popularized by Google Chrome into the WebKit framework in a way that will allow all ports to benefit from the increased responsiveness, security and stability. At Igalia we have always been interested in bringing this new technology to our GTK+ port, and only a few days ago the last batch of patches in a long series finally landed upstream, allowing everyone to build the GTK+ version of WebKit2 directly from SVN trunk (you can read more details in Alex’s blog post!). We believe a split process model has quickly become a must-have for modern browsers, so we want to announce our commitment to port Epiphany to WebKit2 as soon as it is ready, and make this the default and only configuration available, as in Chrome. We are aiming to have an early alpha to show at GUADEC this year, and we’ll try to deliver a production ready version as early as GNOME 3.4, in 2012. We hope you’ll all be as excited as we are about this new stage in the history of the GNOME browser!

Until next time, happy hacking from your favorite band of gnome web hackers.

Posted in General, webkit | 19 Comments

No pasarán

Hegel once observed that all events and persons of some importance in history would occur, as it were, twice, to which Karl Marx famously added: the first time as tragedy, the second as farce. It’s no wonder than this little snippet became so popular, since we human beings are so fond of repeating history again and again.

On February the 11th the descendant of what once was my first project as a professional developer finally crashed and burned in a re-enactment of the now legendary GTK+ to Qt gambit, also known as “let’s dump everything and start from scratch because we are not sufficiently behind of our competitors”. Those of us who thought that the switch to Qt was for the most part a vain quest for a technological Grail that would save Nokia from its own structural and management related issues were probably not terribly shocked, but it’s hard not to be sad about the way things finally happened. In any case, I’m not here to write about whether Stephen Elop is a fifth columnist, about Windows Phone 7, about the future of Qt, about who-gives-a-crap-about-toolkits-anyway-the-Web-won-guys or anything of the sort. I just want to talk about one thing: for many years Free Software was Nokia’s hope for a better future, a wagon they shared with many of us. After years of rhetoric about the virtues of openness and the wonderful vistas of synergy now available to the boldest of the middle managers, if only they were a little adventurous, we are supposed to accept the harsh cold truth: the best way to do software is to do it behind closed doors, the future belongs to proprietary platforms, nothing good ever came out of geographically distributed cooperation. Well, I disagree with the keen minds of the North. Perhaps what I have to offer is a controversial proposition, perhaps in the XXI century it’s a bit passé to show deep commitment to some ideal other than the quarterly reports, arrogant to pretend that you know better than others, but what the heck: Nokia is wrong, and we are right.

We live in a cynical and difficult world, where those who have a lot tend to only want more, and where the rest of us must juggle with morality, trying to get along as well as we can without reaching a point where we cannot look at ourselves in the mirror anymore. Some ideas are perpetuated in order to keep us happy enough with our lives, not questioning too much the quotidian farces we face, and one of those is this one: closed software is as good and respectable as free software, you should use whatever is best for you, your company, your shareholders. Well, it’s not. Never has, never will.

Some truths are simple enough to be taught to kindergarten children, simple enough to be only questioned by adults: sharing is better than hoarding. Contributing to the general well being of humanity is better than keeping the improvements you do for yourself, for profit. This was true when a certain Mr. Stallman decided he’d write a Free Operating System in 1983, and it’s still true today. It will still be true when anyone who is reading this today is dead, when all the closed software that ever was is also dead and buried (and believe me, it will), when the only software remembered, and used, is free, improved and built upon by our descendants. It might be hard to believe, in the era of the iPhones, that this will ever happen, but if you are reading this perhaps you share my controversial ideas. Perhaps you also think Nokia is wrong, and we are not. If you do, and you are hacking the good hack, keep going, I’ll be right behind of you.

Posted in Blogroll, General | 28 Comments

Igalia’s WebKit team is expanding

The WebKit team inside Igalia is looking for some fresh blood. On the technical side we work on all things WebKit, from rendering, networking and accessibility to JavaScript, multimedia and the GNOME web browser. We have a strong commitment to the GTK+ port, but we are by no means restricted to it. On the social side Igalia practices workplace democracy, which in practical terms means that you’ll have, shortly after joining, a voice and vote in how the company is run, from the short term tactical considerations (should we do this project or hire this guy?) to the long term strategic investments (I tell you, this “Web” thing is totally the future).

If this sounds like something you’d like to do drop me a line to any of my multiple mail addresses (I’m sure you’ll manage to find at least one of them) with any background information that you consider relevant.

PS: We are extremely flexible in both location (ask me about my last 9 months travelling around the world) and how you distribute your working hours, so we should be able to accommodate pretty much anyone that is both human and living on planet Earth.

Posted in Blogroll, General, webkit | 7 Comments

WebKitGTK+ Hackfest 2010

Like last year around these dates, last week some of the WebKitGTK+ hackers gathered in the Igalia offices to spend a few days hacking the good hack, eating tortilla and playing Street Fighter II.

Others have already blogged about the event (Mario, Gustavo, Alex, Diego in multiple occasions eh…) in some detail, so I’ll just try to give some extra information about some of the things that I did.

JIT + Oprofile

One of the few negative side effects of the not-so-recently acquired JIT superpowers of JavaScriptCore is that JIT-generated code does not play very well with the tools we use everyday to debug and improve our code: gdb will have no idea of the name of the chunks of generated code it passes through (since they have none), and will print something unhelpful like “#9 ??”, profile tools like oprofile and sysprof will have exactly the same problem, so you’ll be unable to know which, if any, of the generated code is the culprit of excessive CPU usage, valgrind does not expect executable code to modify itself at runtime, and will freak out and crash unless instructed to not do so, etc. Fortunately some of these problems have solutions, so I spent the beginning of the hackfest reworking (to please the Reviewer gods) a beautiful patch started some time ago by Holger Freyther and the wizards of the University of Szeged to instruct oprofile about our JIT maneuvers. With this in place the tools is able to know the context of the JIT memory chunks it goes through, and is able to go from some useless complains about anonymous memory ranges to printing something like:

141       0.1910  8581.jo   <jit-func>:fannkuch[tests/sunspider-0.9/access-fannkuch.js:5-62]



Another topic where I spent a few days is the long struggle to resurrect “about:plugins” in Epiphany. While Dan was busy kicking libsoup into shape so that we can implement about: URLs in a non-terrible way, I worked on adding the APIs in WebKitGTK+ that the browser will eventually use to fetch the plugin data. A couple of patches (here and here) have already landed, and we can now query WebKit for all the plugins it has loaded in the session, ask information about them, and even disable and enable them at runtime. Because seeing is believing you can see a hacky implementation of the about page that I have implemented locally:

Rest assured, this will look nicer (and will have more data and features) when it finally lands upstream!


It was of course great to see everyone again, both colleagues from Igalia and all the other hackers, and I hope we’ll be able to repeat the event again next year. If we manage to do it a third time this would pretty much become an ancient tradition of the GNOME community as far as these things go. Thanks to all the contributors and sponsors (Igalia, Collabora and the GNOME foundation) and until next time.

Posted in Blogroll, General, webkit | 6 Comments


It has come to my attention that the GNOME Foundation is interested in my DEFCON app in order to better enforce the new Speaker Guidelines in current and future GUADECs. I’m happy to announce that the app is in fact for sale, so just contact xlopez at igalia.com for details.

PS: starting price is 500 EUR, it includes a tactical nuclear strike to the talk site when DEFCON 1 is hit.

Posted in General, webkit | Tagged , , , | 6 Comments