Sunday, April 7, 2013

Thoughts on Blink, Facebook Home, and other things

BLINK
Blink is Google's new rendering engine. Sort of.
Quite frankly, this situation is so complicated I can't even keep it straight. Here's what's happening, as I understand it:
In the beginning, there was WebKit. Okay, not the very beginning. More like the beginning of the middle, as KHTML was the beginning. But anyway, in the beginning of this mess, WebKit was forked from KHTML by Apple. Originally, WebKit was closed-source, but Apple would give back large amounts of code to KHTML. This had its problems, which were worked out when Apple open-sourced WebKit. At this time, there was Firefox (Gecko), IE (Trident), and Opera (Presto). There was then WebKit, which wasn't used in anything yet. Safari did not yet exist. Neither did Chrome.
Then, Safari was launched, becoming the first browser to use WebKit. So Apple web technologies, primarily Safari and iOS (UIWebView), used WebKit. At this point it becomes necessary to specify what parts different browsers were using, and actual names, especially WebKit, become confusing and less relevant. So now there's Safari (WebKit - WebCore + JavaScriptCore), Firefox (Gecko), IE (Trident), and Opera (Presto). Chrome did not exist yet.
Then the next thing happened: Chrome was born. Google used the same WebKit codebase, but they did screwy things to it (not like patches, but in the way that they embedded it) in order to enforce their process model. They also got rid of JavaScriptCore, and used V8 instead. So Apple worked on the WebCore and JavaScriptCore components of WebKit, and Google only worked on WebCore. Unfortunately, we also have to name WebCore more specifically. We'll call it TraditionalWebCore. For simplicity's sake, let's call TraditionalWebCore + JavaScriptCore "TraditionalWebKit", and let's call TraditionalWebCore + V8 "GoogleWebKit". So TraditionalWebKit and GoogleWebKit share TraditionalWebCore, which both Google and Apple work on (Google effectively contributes upstream). However, Apple works on JavaScriptCore, while Google works on V8. TraditionalWebKit and GoogleWebKit aren't "real" technologies, they're just names for collections of "real" technologies.
Confused? So am I. Let's see what browsers are now available: Firefox (still Gecko), IE (still Trident), and Opera (still Presto). Then there's all of Apple's web stuff, including Safari, which use TraditionalWebKit - that is, TraditionalWebCore paired with JavaScriptCore. Chrome (and when I say Chrome I really mean Chrome, Chromium, Chrome OS, Chromium OS, and Chrome Frame) uses GoogleWebKit, that is, TraditionalWebCore paired with V8.
Getting close to now, Opera announces that they're ditching Presto and using WebKit instead. Which WebKit? Well, they're using V8, which means that they're using GoogleWebKit. So now we've got Firefox (Gecko), IE (Trident), Safari (AppleWebKit - TraditionalWebCore + JavaScriptCore), Chrome (GoogleWebKit - TraditionalWebCore + V8), and Opera (GoogleWebKit, same as Chrome).
Finally, we get to now (yesterday?) when Google has officially forked "WebKit" and created Blink. So what does that mean? It's not as straightforward, IMHO, as "fork" would imply, because of the way that Google used WebKit, but also didn't. Essentially, Google already had a partial fork of TraditionalWebKit, which was GoogleWebKit. I say partial fork because TraditionalWebCore was shared, but the JS engine was not. So while V8 was not technically a fork, as it was written from scratch, it's essentially a modular component that does the same thing as JavaScriptCore, just with a different implementation - and this is exactly what a technical fork would be like.
Getting back to Google "forking WebKit": because of the aforementioned partial fork, we can't say that Google actually forked WebKit without spending a while explaining ourselves properly. What really happened here was that Google forked TraditionalWebCore. So previously we had TraditionalWebKit - TraditionalWebCore + JavaScriptCore - and GoogleWebKit - TraditionalWebCore + V8. These were previously connected through TraditionalWebCore, but now that Google has effectively forked TraditionalWebCore, they've replaced TraditionalWebCore in GoogleWebKit with GoogleWebCore. Thus, we now have Blink, which was previously GoogleWebKit, which is the pairing of GoogleWebCore and V8. Then, we can go back to calling TraditionalWebKit just "WebKit", because there are no different versions of WebKit anymore. Thank God, that was so confusing.
Also, because Opera was previously going to use GoogleWebKit, they've now officially confirmed that they'll be using Blink.
Then there's WebKit2. No one uses that yet, so, eh.
Anyway, my personal thoughts on Blink? Same as WebKit2: that is, eh. I don't really think that Blink will change web development all that much. Right now, it's basically the same as WebKit, with different JavaScript. However, I predict that in the same way that V8 was better than JavaScriptCore, Blink will become better than WebKit - it will be faster in every sense, although I don't think it will be as dramatic a change.
All this makes me feel, though, that the web needs a new rendering engine. Not a new Blink, but a new KHTML. A new Gecko. Because think about it:
  • Trident was originally made for Internet Explorer 4 in 1997.
  • Gecko was also born in 1997. It was going to replace Netscape's engine.
  • Presto development started in 2003. Not as bad, but still.
  • Blink is based on WebKit...
  • WebKit is based on KHTML, which was originally written in 1999.
This means that Internet Explorer, Firefox, Chrome, Safari, and future versions of Opera are/will be running code that originates from around 1998. The current version of Opera is a little better, from 2003. But that's still an entire decade ago.
Now keep in mind that I don't know a ton about the internals of rendering engines. But it seems like we're due for a new rendering engine made from scratch. And it seems like that no matter how many performance optimizations you perform, there will always be things that you can't do simply because the architecture of the engine forbids it. V8 was made for the modern web, when other JavaScript engines where slightly too old for that. And wow, did V8 make a difference. It's still the fastest engine today, although these days SpiderMonkey (Gecko/Firefox) is neck and neck with it. We need the V8 of rendering engines.

FACEBOOK HOME
I want to skip this and write about other stuff, because that's more interesting to me at the moment. If I forget about this section, sorry.


MY LIFE!
So a couple months back I used Wubi to install Ubuntu on my school laptop. Epic.
Of course, I did screw it up by installing MATE, which pushed me over the hard drive capacity. And of course that meant that dpkg failed to do anything, so I had no idea how to free up space, etc. etc., and didn't know about recovery mode, so I had to wipe it. And also I tried to do a full install, and ended up getting my hard drive erased and reset. The end result, though, is that I'm really into Ubuntu again. I'm running the devel version, Raring, right now. One thing that I ended up doing is that I wrote a script to automate installation of my favorite packages and setting up of some configurations that I like, which was interesting. I'm going to write an application soon to automate the creation of this type of script. I'll get to that in a minute.
I also made my own custom desktop configuration file, which was super fun. It's based on Compiz and GNOME Panel, although I'm thinking of switching to MATE Panel, since GNOME Panel isn't maintained anymore(?). I went the fancy route (as usual) and instead of just making an xsession conf file, I made a gnome-session conf file too, so the session is gnome-session based. I tend to use GNOME Do to launch things.
I'm learning Python 3 and Ruby. Mostly I'm learning the Ruby so I can use Ruby on Rails.
This Saturday Right now (today & yesterday) I have/had/am doing something called CodeDay Classic, which is a 24-hour hackathon for students. I AM SO. FREAKING. EXCITED and also extremely tired so I basically just wrote the GNOME section of this post, and then this sentence, and published it because I really need to get this post done. During CodeDay, I'm going to write the aforementioned script creation application. It'll be a Python CLI tool at first, but I think that'll only take an hour or two. Therefore, I'll then write a/some frontend/s for it. I think I might do one for GTK+ and one for Qt. And since I don't think even those will take even close to the whole time, I'll spend the rest of the time on gridcontrol, which I've now decided should be Rails-based (where previously I thought it should be node.js-based).
I've been to only one other CodeDay, which was CodeDay Seattle, around the time of winter break. I tried to work on forked there, but it didn't really work, although I did start to learn stuff about how Yeoman works. Although now that I've discovered Brunch, it seems like that might be the superior tool. I had to leave early, at 1 AM. :(
Last thing, I think: I NOW OWN A DOMAIN NAME WHEEEEE! strugee.net is now registered to yours truly. My domain provider was originally going to make me pay for web hosting to get subdomains, but I was like, screw that. So I went to afraid.org and got free DNS - including subdomains - through them. Wow, that really sounded like something someone would say in a stupid marketing thing. My bad. Apparently I already blogged about this but forgot about it, probably because I was tired.
Side note about my experience writing parts of this post: https://posts.app.net/4485209
I have some stuff about Mozilla and the status of the GNOME project, but I'll talk about those in different sections.

MOZILLA
It's Mozilla's 15th birthday this year. Happy birthday!
If you want to get a limited-edition Mozilla Dino plushie, you can if you donate $35 or more. Actually, they're all sold out due to a huge demand. But please still donate! I'd love to tell you how epic mine is but they take a super long time to ship. :(

GNOME
I hate GNOME 3. I actually like it a lot - except for the fact that it doesn't do Compiz plugins - except I hate the way the GNOME Foundation is going, and I feel like GNOME 3 is the manifestation of that. I mean for god's sakes, look at their mission statement. It's unbelievably unspecific and generic: how are you supposed to define what "making great software" is?. I don't really want to talk about this more, because it's 4:40 AM at CodeDay and I'm tired.
Everyone suffers from GNOME 2 withdrawal, right?

No comments:

Post a Comment

Comment goes here.