 Hello everybody. My name is Mark Finkel and I work for Mozilla Corporation and I'm here today to talk to a little bit about a project we have called Prism and how that builds on top of Firefox and Firefox 3 and all of its good features and how that all relates to web apps and web applications and how they can evolve. So just a little bit of background about Mozilla. Mozilla is of course an open source project with lots of contributors and the foremost or the best known product that they have or projects is Firefox but they also contribute or have Thunderbird and Zoo Runner and a couple other browsers, SeaMonkey and Kamino and other applications that fall under the Mozilla umbrella. It's a global effort to help promote choice on the net and to keep choice available on the net instead of kind of locking it up, having certain vendors take control of different areas so we like to try to promote choice whenever we can and in doing so be a user advocate for things that happen on the web whether it's privacy or security or features or whatever it would happen to be. We try to stick our nose into it and keep things as fair and open as possible. Besides being an open source project ourselves we also work and contribute to a lot of other open source projects and this is just a small list. There's many, many more I found while making this a presentation that we actually contribute to and work with. Some of these are projects that we actually use in our source code like Cairo and SQLite. Other ones are just open source projects on the net that we feel compelled to contribute to either financially or with code or resources. Since Firefox is the main Mozilla project and product it's the project that really shows some of the strength of the community that is around Mozilla. These are some of the numbers that we like to show to help give people an idea of how big the project is and how many contributors and how big the community and how strong the community is. As you can see our market share is going up. A lot of it is due to the community and support through community and word of mouth and marketing. The community contributed extensions. Firefox is really extendable. Lots of people use add-ons and most of the add-ons, well all of the add-ons are contributed and built by community members. Our languages, we have great community volunteer-based translators and without them we couldn't ship in the amount of languages that we do. In Firefox 3 ships it's going to have 47, 50 languages. I forget what the number is but it's pretty high to ship same day, sim ship. The corporation itself only has, when you compare it, it only has 150 employees roughly. Sorry about that. It feels weird on my head. But those 150 employees really couldn't do all of the work all themselves. It really takes the rest of the community to help us and their efforts and their amount of work and blood and sweat and tears into the project really is what made it as strong as it is. Moving on to what Prism is. Prism is a single purpose web browser. It's not generic although I'll just stick with what it is for now. It basically acts as a host for desktop enabling web applications. A web application sometimes can look and feel and act a lot like a regular desktop application but it's running inside a browser so there are certain things that browser applications just don't have access to. So one of the ideas for Prism was to what we call desktop enable it allowing it to access resources and do activities and have features that normal browser-based applications maybe wouldn't have access to or at least explore those possibilities. It's built on top of Firefox's Gecko engine so it benefits from anything that gets put into the Firefox platform. It's basically running Firefox 3's rendering engine under the covers. And it is an experiment in new browser directions. It's not a full scale project of this is how we're going to do things. It's really an experiment. It's really to open up the discussion about how some of these new features that have always been available to desktop applications could be exposed in a safe way to web applications. The web shouldn't stand still and it hasn't been. There's been a lot of Canvas and SVG and the what working group has been doing a lot to add new web application specific features to the web so this is another experiment to help drive the discussion on how some of these things can be put into the web itself and then web apps can benefit from that. Prism is not a general purpose web browser. It may never have tabs. It has a location bar optionally but it's not one that you can type into. It's just there for reference to show you where you're at. If you want a general purpose web browser there are plenty of them out there to pick from. Prism is designed to be something as different as we can make against a general purpose web browser to help actually bring out what we would consider to be desktop enabling features without kind of blurring the line between what a traditional web browser is and what a desktop enabling web browser or a web app web browser would be. So it's not designed to be a general purpose one. It also does not, tries not to and should not work with or have a proprietary stack of technology. It should be the web. In fact if you want to make a web application run in prism you don't do anything. You just run it. It's the same thing you would do if it was in Firefox or Safari or Internet Explorer. There's basically no porting necessary. You just make it work. And from that starting point then we would look at what things can we add to the web itself that would allow applications to participate in desktop convenience features. And we'll talk about those later here. It's not a full privilege run time. It's not designed to give this application running inside prism full access to your hard drive and your computer. It's not. It's the web. Again it's a web browser. It's not designed to be something that you can write directly to the hard drive from. It's not designed to give you access to things that a normal web browser wouldn't give you access to because we still care about that safety and security that goes on. The sandbox that a normal web browser has. So any features that prism would try to add into the platform as the web platform would have to be done still carrying about the security and the sandbox that a browser has and uses whenever you run a web application. I talk about desktop enabling web apps and I should talk a little bit about what that means. Just about every OS has their own convenience or nuances and little UI tweaks whether it's the dock on the Mac or the sys tray on Windows. And Linux has the menuing area and as well as there's an icon tray there as well. Plus there's notifications like growl or pop up toast on Windows and Linux has the same kind of thing that web applications typically don't get access to. So part of the prism experiment is to try to figure out how we can move those kind of features that are accessible to all desktop applications into the web app world as well. Another thing is we try to fit web apps into the way people and users only think about desktop applications. When you start a desktop application you don't start up a browser and type something in the URL or click a bookmark. You pick something off of a start menu, an icon off your desktop, something on your dock and so we want web apps to try to fit that same kind of model because it's what people are used to doing with applications. And in doing so we also want the web application to be able to interact with local data the same way that desktop applications can do it. I can drag and drop files onto application from in Windows and I drag and drop a file onto Word it loads. I can double click on an Excel file on Windows or any other and there's a MIME type linkage so that an application will load up and load that document into it. These are things we want to explore for web applications as well because web apps have that capability now as well. I mean we've seen Zoho or Google Docs and spreadsheets. These things can take files, traditional desktop files, load them up and allow people to operate on them and then save them the same way. So kind of a rundown of this whole prism site specific browser term was used a little bit. When I first started looking at this stuff there was a lot of existing people and projects who were doing this kind of stuff. There was a couple of Zoolerunner projects. Zoolerunner is the runtime for Mozilla's platform. It's very easy to create a browser with Zoolerunner. Webkit, there were a lot of Webkit wrappers out there too. What these projects would do is they would find an application, maybe it was one of 37 signals, backpack or something like that and they would create a Webkit wrapper that was designed to work with that Web app. Not any other Web app just with that one. So that you go ahead and double click on an icon. It would start up basically a shell that had Webkit running in it or Zoolerunner running in it and it would under the covers go and download and start the application running inside it. It would even have special features like you could drag files and drop on this application and it would automatically upload. So it was a very nice experience themselves but they were a little narrow in their vision of the applications that they wanted to support. And usually it was because whoever started the project was interested in this particular Web application and just wanted to make it work a little easier and didn't want to have it run in a browser, wanted to have it run in its own standalone isolated area. About the time I picked up Webrunner and started to play around with it, Webrunner was the precursor to Prism. It was just a project that I was kicking around a little bit. There was also a project called Bubbles which is a Windows version that runs with Internet Explorer and ActiveX control embedded into host application. And then there's also a new one for OSX on Leopard called Fluid. And Prism, Bubbles and Fluid went a different direction. Those three applications decided that they'd create weak APIs so that anybody could say I'd like to run Gmail inside Fluid or Prism or Bubbles or I'd like to run Zoho or Zimbra or whatever it happened to be. And the host shell, the Fluid shell or the Prism shell would just adapt itself and make itself work. It would automatically know what the Web application was. It would be designed to have a shortcut made that would remember some of the configuration settings, whether or not you wanted to have the location bar appear or whether or not you wanted icons, what the icon you wanted to associate with it, whether it was the Fave icon or one that you picked yourself. So these three applications sort of started a new direction where it was generic site specific browser that could be configured to work off of any kind of Web application. Also through Adobe Air in there as well because Adobe likes to say that their Air platform is a great way to basically create a desktop application out of a Web application. And that's true. But you need to port your Web application. You can't actually just start running the Web application inside and have it make use of all of the features that Adobe injects into Air to allow it to take, you know, use the local file system and things like that. And once you port that application, it's broken for the Web. You need to have two versions because that application won't run anymore on the Web because it's using APIs that are Air only. Even though Air uses WebKit inside it as a rendering engine, Adobe injects some of its own APIs for file handling and SQL management and other kinds of things that really taint the application so that it can't really be just moved back and forth between desktop and Web. So some of the basic ideas behind why I got interested in WebRunner and then Prism is I wanted to be able to run Web apps in separate processes. I didn't want to worry about my browser going down for whatever reason. I work at Mozilla. I run alpha builds. I run beta builds. Sometimes that happens. I'd like my email to be running constantly and not have to worry about crashes and things like that. Also, this is an application I'd like to run constantly if possible. So, you know, if it starts using up tons of memory and things like that, I'd like to be able to close it down and not have to worry about what my browser's doing. I also wanted to look at using a minimal UI. That's one of the differences between a site-specific browser and a general Web browser. A site-specific browser for Gmail doesn't need bookmarking. It doesn't need a lot of the accoutrements that go along with a general-purpose Web browser. So we went almost completely zero UI with Prism and just allowed it to do whatever the Web app did. That's one of the areas where we're experimenting because we might want to look at allowing the Web app to say, well, I've got this dynamic HTML menu here. What I'd really like to do is hide that and make a native OS version of the menu instead. So how could we do, how could we explore those kind of things? I wanted some simple and easy desktop integration. I wanted to be able to create shortcuts and dock icons. I wanted to be able to pick my icon, double-click on things and make it work. I wanted to be able to drop files on stuff and have mail attachments get automatically made and that kind of stuff. But whenever I clicked on links, I still wanted it to go to my main browser. So that if I'm in Gmail and someone sends me a cool link and I click on it, I don't want to open up another Prism window. I really want to open up Firefox, my default browser in that case. I also wanted to make sure that we left the platform open for some customization. One of the things that we see with web apps a lot is grease monkey scripts and similar. So I wanted that same kind of ability for end users to tweak the way the web app works. So those kind of ideas are in there too. Some of the possible features that you could throw at a desktop-enabled web app would, in my case, I wanted to build on a solid framework and I could easily do that with Firefox. I wanted to launch and run an isolation. I've already mentioned that one. Specialized icons and support for different ways of launching those icons. The pop-up toaster alerts, I mean, that was, you know, or growl notifications, that was something that I thought would be very beneficial to web applications. I run Firefox or any multi-tabbed browser. Whenever I'm running my calendar application and it's telling me that I've got a dentist appointment but it's not my active tab, I lose because it's not telling me, you know, it's little dynamic HTML window that pops up isn't notifying me at all. So some other kind of way for it to notify me like it was a desktop calendar application would be kind of cool. Same thing is true with doc and tray support. Both desktop email applications. If you run them on a Mac or something, there's, and you're running it, the icons on the doc, it will have a little number there for the number of unread email messages. Web apps really can't do that. So exposing some kind of a way for web apps to also badge the doc icon, whether it's on Mac or Windows, that would be kind of interesting to do. OS dependent styling. This is a little bit different. This kind of goes into grease monkey for CSS. There's an extension called Firefox called Stylish, and there's a whole website of styles that you can apply to other web applications in the same way that you would take a grease monkey script and apply it to a web application. And some of the more interesting ones of these are some cascading style sheets that take Google Reader or Gmail and make it look like an OS X application. And it looks really good for an OS X application. So I saw some of that stuff and thought that would be interesting for a web app, someone who's creating a web app that you want to desktop enable, maybe you'd like to make it look like the OS that you're running on. Which means that if you've got Mac, Windows, and Linux, you've potentially got, you've got at least three, more with the sub variants that are below each operating system as well. I also wanted to be able to do local drag and drop for file handling. Kind of talked about that one before where I either double click on a file and it opens up in Google Docs and spreadsheets or I drag a file and drop it on Gmail or Zimbra and it automatically attaches it to my email so that I don't need to hunt for it with a file browser. So it's a lot of interesting kind of features but at the same time I don't want to hurt the web. I don't want to just start throwing all these features into prism in a way that makes it so that no other web browser can make this work. It would cause errors. If Zimbra decided to make a prism version that it wouldn't run on anything else. So we want to make sure that we're pushing the idea of these different features and throwing it out there for other people to talk about and figure out maybe the best way to implement these so that who knows, maybe a web browser wants to also handle badging somehow. Or it would be very easy for a web browser to do growl alerts from a web application. That wouldn't be hard at all. So with anything that we're doing here with prism we want to make sure that it's in line as if it was something that was truly for the web even though we're desktop enabling everything. So we talked about how we're building on Firefox 3 at this point and one of the reasons that we really think that Firefox 3 in particular is a really good base for a lot of the prism stuff is in Firefox 2 it has a lot of good support for web applications and it keeps getting better so that whenever we talk about online offline that was something that had started before prism or fluid that started in the browsers themselves as an idea that maybe we should allow applications to go online and offline and Firefox 3 supports that. It supports new DOM methods as well to make web applications run faster and that can't hurt because remember you're trying to compete with desktop applications here. Some of the JSON support a lot of web apps use JSON and Firefox 3 has native JSON support in it so that it's actually handling everything and C++ under the covers. It can be up to ten times faster than handling it through JavaScript alone. There's a lot of new interesting JavaScript 1.8 features that benefit web applications. The SVG support in Firefox 3 is tons and tons better than it's ever been and it really starts to show off the ability to use SVG for graphics. One of the things I like to do with Google Spreadsheets is do the plotting in there or take an Excel spreadsheet and import it in because when you do that docs and spreadsheets will actually convert the chart into SVG charts so it's kind of cool to see what the capabilities are there. Firefox 3 itself has been, there's been a lot of work on performance and memory. There's two big areas under the covers that obviously we care a lot about in effect how web applications and the web in general runs in Firefox. There's a long list here of different things that are done. We've gotten hit a lot with memory in Firefox 2. A lot of people criticizing our use of memory so that was one of the areas that we focused on a lot and we're still focusing on it. In Firefox 3, there's a much better performance running long term which is what you want to do with a web application that you're desktop enabling. I want my mail to be running constantly 24 hours a day so if the memory starts creeping up and ends up with a gig of memory dedicated to my poor little email application here, that's not very good. Firefox 3 performance and memory are really, really much better and you guys should all check it out. Also, some other cool stuff that are coming in that will help web applications. Tamron and JS2. Tamron is a project that we're working on that will really speed up JavaScript the way it runs. There's Tamron tracing and then there's Tamron, just the JIT that will make the byte code go a lot faster and working on this with Adobe and there's a lot of cool stuff going into JS2 as a language. There's an experiment going on now with 3D Canvas. That runs today in Prism. It's an extension to Firefox and of course there's audio and video support that's waiting in the wings. WebKit supports it now and Firefox has a patch on a separate branch build that also has it running. We're just kind of waiting for things to be right for us to land it. All right, so take a look at some of the features and maybe even throw out ideas that you guys can say are good or bad or you have different ideas on how maybe we could do some of this stuff. Specifying icons for shortcuts. Seems relatively simple. Apple has already done something different than the norm with the iPhone, iPod Touch. You can create these link rails in your web page that specify an icon that can be used whenever you create a web clip on your iPhone. Also recently there was one of the guys that works at Google with the Gears project throughout a wrapper library that would allow you to create shortcuts for icons of varying sizes. Obviously 32 by 32 might work well on Windows but it might not work well on Mac or Linux. So his specification has multiple sizes and formats available. Specifying CSS for OS styling, that's where you make Gmail look like an OS X application using CSS. That one too seems like it could be solved relatively simply and not break the web by using specific style sheet links that maybe specify different media. If that breaks it we could use a title attribute instead or something like that. Something that wouldn't show up when the main browser because it would be ignored but something that could be picked up by a desktop enabling a desktop browser like Prism. Pushing data to the browser Chrome. This one is the concept of badging. We don't really like the idea of creating a feature on the web that would be specifically for badging. That's too specific of a purpose. So we're really looking at how can we allow a web app to broadcast information about its current state and then let the browser, whether it's Prism or Firefox or Safari, figure out what they want to do with it. If anything, they could do nothing with it. So in this particular example, Prism might put a dock badge of 10 unread emails where Firefox might do something with the tab that the web application is sitting in. So we don't want to make it too specific to the use here. Supporting pop-up alerts. Again, we don't want to be too specific about what we want to do here, although pop-up alerts is at least a little bit saner. The focus is a little bit narrower on what you can actually do with it. We already do have an alert function although I already got some feedback saying maybe alert is overused and maybe it should be show notification instead of pop-up alert because that could be confusing with the regular alert function. And register local file handlers. There's a relatively new feature going into Firefox 3 to allow, and this is based on a what working group standard or document specification, that will allow websites, web applications to register as online protocol handlers so that if you visit Zimbra and they have some JavaScript on their page that says I'd like to register as they mail to a protocol handler and that pops up something in your browser Chrome and you say sure, we'll go ahead and let Zimbra do that. The next time you're in your browser and you click on a mail to link, it will bring up Zimbra instead because there's a URL that they register whenever they register with the mail to handler so that now whenever you click on any mail to links, it'll be using that web app instead. So we might be able to take that same idea and move it to local to make it work for local files as well. Where in this case I'm registering for Microsoft Excel, the MIME type for Excel and I pass in a URL for where I want that file uploaded and then the web application can take over from there. That doesn't look very good. I don't have Wi-Fi here to refresh it, but so sorry about that. But there's some links here where you guys can take a look at some of the things that the starting point for what Prism is and does and downloading Prism if you want to. There's also a link here for what's new in Firefox 3 for web developers and also a link to Planet Mozilla where you can kind of use your RSS feed reader to keep an eye on what is coming out and what's happening with either one of these two projects. At this point, if anyone has any questions or ideas or anything like that, I'd like to talk about it. Up there, you were first. I can hear you. Not yet. That's something that Mozilla keeps reminding me of. The first what we're doing right now is sort of throwing out ideas to begin with and I am talking to the guy who does Fluid just to kind of get an idea for what he's doing. He just released a version of Fluid that has a JavaScript API. I'm going to talk to him and see if I can get him on board so that we can then brainstorm a little bit to get something together that we can then go and create something that would stand up to enough criticism that ECMA or what working group or anything like that would do. Someone else? You're kind of asking about it was WebRunner and now it's Prism. Is anything going to continue to happen with Prism? Yes, things will continue to happen with Prism. When it was WebRunner it was just something I was doing in my spare time that Mozilla really, they were okay with me working on it but it wasn't something that they were particularly interested in at the time. So when it became a labs project it was something that we wanted to create an experiment, a vehicle for us to experiment with. So yes, we will be looking at it. People like Zimbra are also looking at it. They've kind of taken the code and packaged it up to be their offline desktop solution to work with there. Their desktop solution has a server and a database also running locally. So with Prism they also have a web browser so it's kind of a turnkey system that they can install. But yeah, we'll be moving it forward. That's the way Prism works. Prism 0.8 works. Prism 0.9, each web application is in its own isolated profile and process. For instance, on Linux or Windows if you were to run six Prism web apps, all different ones, if you would look in the task process list there'd only be one version of Prism running. And the current version that we'll be releasing soon there'll be six separate versions and they also use six separate data profiles as well. Anybody else? Yeah, that's a good idea. In the same way that there's a, I mean, you could do on window close right now even in a browser to try to do that and some web applications do that where they pop up the thing saying if you haven't saved anything you're browsing away from us so if you haven't saved anything you're going to lose it are you sure you want to do this? For the, whenever you close I'm not sure if web apps can still keep the browser from closing or not but we can, in Prism, yes, you can add something to at least notify and keep it from closing if you wanted to. That's just the difference between the Chrome where Prism is Chrome that supports to emulate a desktop application that's something that typically happens in desktop applications. You go to close it, you have unsafe changes, a dialogue comes up that says do you want to save, do you want to cancel closing or do you want to keep closing? So yeah, that's something we could do. It's a good idea. I figured right now if you open a, click on a link to open a new window and that link has the same base domain as the link of the web application it opens in a new Prism window. So if you're creating, if you're in an email application and you double click or you say pop out to get the email in its own separate window it won't open up in your browser it'll open up in a separate Prism window if you're in docs and spreadsheets you'd like to create a new spreadsheet it opens in a new Prism window not in a browser because it's docs.google.com and then there's also spreadsheets.google.com so the base domain is the same. If it was an external link altogether then it would go out and we have had some suggestions that although Prism is not a generic web browser that we pretend could add tabs in as well so that the open web app windows could actually be multiple tabs as well and that might create a pretty slick desktop enabled version of Zoho or Google where you'd have Gmail in one tab, calendar in a tab and docs and spreadsheets in a tab as well and it's sort of a sweet application with one window so that's something we're looking at as well. One way we're doing that we're experimenting with that on windows anyway is minimize the tray and on Mac I don't know because it's not typically not the same as minimize the tray you've basically closed all visible windows and at that point how do you get the window back up there has to be a menu there at least some sort of menu that would still be available and that's something we could look at I actually put code in there so that it would kill it for good instead of leaving it hanging around because I couldn't figure out a way to bring it back to life in any meaningful way without double clicking on a URL again so yeah each OS has its own nuances that you need to try to capture as well anybody else? It'd be interesting I guess we'd have to see exactly what the current there's a lot of work right now happening in Firefox or in Mozilla on a mobile version to begin with it'd be interesting to see what kind of Chrome and UI it has that would potentially be different than a Gmail Web App version but I know that those guys are also they also have a Zool runner running on mobile on their mobile platform right now so it would be possible to actually make it run it could be interesting even right now there's a lot of cases where I'd like to be able to create applets and that's what happens on the iPhone with a web clip basically except mobile browsers right now have a very minimal UI to begin with so I don't know what to wait and see just how much people want less of a UI and what the value would be of having like a prism running on a mobile alright can I give a demonstration of prism there's not much to demonstrate and I don't have a web link right is that the one I should use I don't think so I think so I don't seem to have a web and it's a desktop enabled web app it's not a desktop version so it's not offline or anything like that so I really can't but it's pretty easy to download if you go to the the wiki if you wanted to do that before you get a hold of the presentation it's at wiki.mazzilla.org slash prism with a capital P and that'll give you a place to download the latest version and play around with it okay thanks a lot oh thanks