12 ms·
Chrome Is The New C Runtime
- deleted 13y ago[deleted]
- chubot 13y agoInteresting, it seems kind of like the scenario where the "web stack is the new GUI", with desktop projects like Light Table being built on Node-Webkit. You're reusing browser infrastructure for native apps. What other alternatives are there? Apache Portable Runtime?
- brokenparser 13y agoXULRunner is almost 8 years old now, it was invented for the same purpose TFA uses Chromium but it's actually documented: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/XULRunner https://developer.mozilla.org/en-US/docs/Mozilla/Projects/XU...
- sanjeevr 13y agoXULRunner is a good option to build HTML or XUL based apps. We were looking for a great cross platform library for native (c++) apps. With support for OS specific features.
- masklinn 13y ago> We were looking for a great cross platform library for native (c++) apps. Isn't that what Qt is for, with the added bonus that it's what Qt is actually for and thus e.g. documented and supported?
- sanjeevrad 13y agoQt is a higher-level application dev framework with UI support (like MFC but cross-platform). We were looking for lower-level constructs - especially in the networking and P2P areas.
- andrewf 13y agoQt is reasonably separated into modules; I've deployed stuff that only depends on QtNetwork, QtSql and QtCore and all the other stuff doesn't get linked in (it's not even in the #include search paths). (I haven't used Chromium libs and have no opinion about them)
- icefox 13y agoI know that you are an ex-chrome dev so this is all moot as Chrome is the code you knew when you started, but really that is exactly what QtCore + QtNetwork is for. You don't have to use any of the GUI bits when you use Qt if you don't want to. I have written many "Qt" applications that were console apps simply to use the built in capabilities. Edit: in fact just to highlight how similar it is, the way that QtWebKit works is that it is built on top of these modules in a [hand wavy] similar way that blink is built on top of the chrome development platform (I have hacked on Qt, WebKit, and Chrome).
- quotemstr 13y agoHell, Emacs meets those requirements. I'm half-serious too: org-mode and Gnus are nice pieces of software that don't have anything to do with text editing per se. There are a lot of cross-platform base libraries out there, many of them (like Qt, GTK/GLib, and Mozilla's stack) well-documented and well-supported. These systems are meant to be reused; Chrome? Not so much. Besides the buzz factor, why would you want to base a product on Chrome instead of one of the codebases designed to be used that way?
- masklinn 13y ago> Qt is a higher-level application dev framework with UI support Qt is a C++ application framework, it has both low- and high-level components, much like e.g. Cocoa. > We were looking for lower-level constructs - especially in the networking and P2P areas. Which Qt provides. Qt is modular and Qt has plenty of low- or intermediate-level modules, including extensive networking, storage and concurrency systems. Using Qt does not mandate using Qt's UI components.
- seabrookmx 13y agoFinally, somebody with some sense. If you want a fairly high level, cross platform C++ library, there is no reason NOT to use Qt.
- charlygrooves 13y agoHow about JUCE, a cross platform c++ lib that is really nice coded and accessible.
- seabrookmx 13y agoThe UI component of it is ugly as hell, and the API style is a little antiquated. It also isn't as comprehensive as Qt, and there isn't as many resources out there for it. I worked for a high end audio company and used it in one of their acoustic simulation softwares. One of my main jobs was porting this project to Qt.
- deleted 13y ago[deleted]
- capnrefsmmat 13y agoXULRunner is probably on its way out: https://groups.google.com/forum/#!topic/mozilla.dev.platform/o99wQZBjIJw https://groups.google.com/forum/#!topic/mozilla.dev.platform... It'll still be possible to use Firefox to run XUL apps, though.
- mbrubeck 13y agoThese are at very different levels. For example, XULRunner itself is partly built on top of (a small portion of) Chromium library code, as noted elsewhere in this discussion.
- quotemstr 13y agoCorrect. Chrome is breaking no new group here. XULRunner aside, you can also use Mozilla's NSPR library for cross-platform basic services and NSS for TLS.
- gcp 13y agoyou can also use Mozilla's NSPR library for cross-platform basic services and NSS for TLS. Which coincidentally, Chrome & Chromium are based on, making the cross-library usage full circle.
- twic 13y agoHuh. When i read that article, i immediately thought of NSPR - as in, this is the Chrome alternative to NSPR. But it's built on top of NSPR? I suppose Chrome-as-a-platform provides more abstraction and richer services than NSPR.
- steveklabnik 13y agoI'm posting this from a Chromebook Pixel, which I use for all of my development. No crouton, just stock ChromeOS. This movement is really interesting to me. If I could clone myself, I'd be working on an exokernel in Rust that just exposes a V8 VM, and uses a DOM implementation as the native drawing interface. Processes == tabs... Of course, there's higher level work that needs to be done to expose more of the machine in JavaScript. Check out http://extensiblewebmanifesto.org/ http://extensiblewebmanifesto.org/ , signed by Google, Mozilla, and W3C TAG members, as well as #extendthewebforward on Twitter.
- rubiquity 13y agoThis is off topic but, what happened to your Lenovo ThinkPad X1 Carbon [0]? 0 - http://words.steveklabnik.com/returning-to-free-software-a-guide http://words.steveklabnik.com/returning-to-free-software-a-g...
- steveklabnik 13y agoI use it primarily for PGP. I've been thinking about trying out Linux from Scratch with it, but haven't had the time. I made a decision to start using the Chromebook to dogfood this particular vision of computers: I'm not happy that it involves Google, but they're the only one with an implementation that's this far along, unfortunately. I've been meaning to write on this whole thing, haven't had the time...
- 14th 13y agoDoes it not freak you out that your laptop was created by a company that makes billions a year learning everything there is to know about you?
- steveklabnik 13y agoYes, it absolutely does, and I am very much not happy about it. I am the most anti-Google person I know. Unfortunately, it is impossible to live in a world of ideals, and so, I must compromise from time to time. As I mentioned elsewhere, I have another machine with 100% free software that I use for PGP when I need to keep secrets.
- United857 13y agoAs someone not at Google, but who's re-used multiple parts of Chromium (as described in the article), the code (especially the stuff under base/) is possibly the best documented large-scale, open-source C++ codebase I've seen.
- sanjeevr 13y agoYes. Not to mention incredibly well-tested and battle-worn. The unit test coverage for some of these libraries (like net) is incredible.
- haberman 13y agoI haven't worked with Chromium, but the main C++ code-base at Google is like this for the most part too (especially the core stuff). The C++ culture at Google is amazing, and proof that large-scale C++ can actually be really nice if you stay within best practices. It takes a lot of effort and experience from a lot of knowledgeable people to craft these practices, but thankfully Google publishes its C++ style guide (http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml http://google-styleguide.googlecode.com/svn/trunk/cppguide.x...) so that everyone can reap the benefits of this.
- yapcguy 13y ago> The C++ culture at Google is amazing Yet the C++ code powering downloads was pretty bad and poorly maintained, written, replaced with Go. http://talks.golang.org/2013/oscon-dl.slide#10 http://talks.golang.org/2013/oscon-dl.slide#10 For sure there are great C++ programmers at Google, but across the company as a whole?
- vinkelhake 13y agoYou're extrapolating the rewrite of a poorly maintained C++ server to mean something about the overall C++ quality at Google? I fully concur with haberman about the state of C++ at Google.
- 13y ago
- sanjeevr 13y agoHi all, I'm the author of the post. Happy to answer detailed questions on using Chromium as a Dev platform. Any suggestions for a follow-up post?
- snirp 13y agoAre you making bets on Dart or (P)NaCl staying with the platform in the long run?
- sanjeevr 13y agoWe aren't relying on Dart. (P)Nacl is a very interesting option which I'm willing to bet will remain with the platform.
- michaelwww 13y agoNow that you're not a Google employee, can you give an opinion on Dart's chances of making it into Chrome. Thanks.
- deleted 13y ago[deleted]
- zwieback 13y agoSimple sample app would be great for the next post.
- nonane 13y agoI second this. Would love to see an actual app skeleton that links with Chromium's sources.
- sanjeevrad 13y agoWill keep that in mind for my next post, thanks.
- 13y ago
- memracom 13y agoSounds like Chromium might be the successor to APR, the Apache Portable Runtime. I believe that the authors of Chrome consciously tried to provide functionality that replaced APR, presumably because of their multiprocess model.
- sehugg 13y agoJudging from the number of dependencies I think it'd be more fair to say Chromium is the new Boost.
- alexhutcheson 13y agoJust a heads up, Web of Trust has this sited rated very poorly[1], ostensibly for spam. As a result, any users with the Web of Trust browser extension installed are shown a Big Scary Warning that they must click through before seeing the site's content. The warning is based on one review, and doesn't seem accurate in this case, so this might be something to try to get resolved. [1] https://www.mywot.com/en/scorecard/mobilespan.com?utm_source=addon&utm_content=rw-viewsc https://www.mywot.com/en/scorecard/mobilespan.com?utm_source...
- nilsbunger 13y agoWe asked them to review it a few days ago. It's from before we owned the domain. Thanks for the heads-up.
- randallu 13y agoChromium is _huge_. If I just wanted to use the HTTP library (with tls and spdy) then how would I build just that, and cleanly integrate the build into my own project in a way that won't require constant revisiting every time I update my chromium sources?
- sanjeevrad 13y agoYou would only link with the net library (and its dependent libraries - like base and crypto)
- icefox 13y agoAnd what about source and binary compatibility. What are the current guaranties? (his second question) Edit: to be clear after you get your app up and running with the current version how much time has to be spent on ongoing maintenance down the road?
- nilsbunger 13y agoYou build the libraries and link them into your libraries. If you maintain a cadence of updating your Chrome checkout every month, you will mostly be OK (though this can vary, of course).
- icefox 13y agoSo every month if I update I will be required to fix my application to work with the new versions of the library. Perhaps say 25% of my time will be _only_ on maintenance? And from what I recall things are not deprecated for a while, but very rapidly changed with little to no warning. This was a major headache.
- bd_at_rivenhill 13y agoWhy not just stick with a stable version for a while? Updating every month sounds like a huge headache.
- deleted 13y ago[deleted]
- mwfunk 13y agoHe's talking about using bits and pieces of Chromium's infrastructure in other programs, but didn't address open source licensing at all. I haven't looked at it myself, but according to Wikipedia, Chromium's source is licensed under: "BSD license, MIT License, LGPL, MS-PL and MPL/GPL/LGPL tri-licensed code, plus unlicensed files". This is all fine, but anyone using this code needs to make sure they understand what license(s) the code they are using is under and what the terms of those licenses are. Just because it's open source doesn't mean you can just do whatever you want with it; even less restrictive licenses like BSDL might have conditions like the advertising clause, and you should always be aware of any copyrights in the code and be sure to preserve them. That said, I'm sure the Chromium source is a great resource- just a strange and important omission from the article. I would also suggest that anyone looking for a platform-independent runtime check out APR (Apache Portable Runtime): http://apr.apache.org http://apr.apache.org. It's lower-level than some of the Chromium libraries mentioned in the article (it would be equivalent to the "base libraries" block in the "Chrome Development Platform" figure), but sometimes that's all you need. Plus, it's already designed as a library for other applications to use, there's no need to repurpose anything like you might have to do with the Chromium sources.
- magicalist 13y agoIt's not too complicated. Everything with a different license is in src/third_party. Everything outside of that is under a BSD-style license. Need to watch your dependencies, but they aren't too hard to spot (and part of checking into third_party is a license check, so they're all well documented). You can see them all if you go to about:credits in Chrome/Chromium.
- paulgb 13y agoI don't see how it would be different from using any other MIT-licensed code in your project. The Apache License doesn't seem any less restrictive than MIT at first glance? Edit: I assumed the entire codebase was multi-licensed, it looks like you're saying that different parts have different licenses, which does sound like a headache.
- sanjeevrad 13y ago
- yeureka 13y agoThis is interesting. Ideally, if the rendering and audio parts are of high performance enough, it could be used as platform abstraction for game development.
- pit 13y agoHave you seen the Epic Citadel demo? It's pretty amazing: http://www.unrealengine.com/html5/ http://www.unrealengine.com/html5/
- grogenaut 13y agoHave you seen original real player it's pretty amazing tech too. Except that it's forever ago. Just epic citadel vs when they actually coded that demo.
- ii 13y agoChromium, Gecko and Webkit codebases are huge, they are hard to compile. They are optimised for use in the browsers and nothing else. They are not universal runtimes yet! I like that idea but please don't make it sound like chromium runtime is ready for everybody to use for their projects.
- sanjeevrad 13y agoI'm not sure what you mean by "optimized for use in browsers". I can't speak to the other 2, but Chromium is basically a vast collection of C++ cross-platform libraries that can be used in many applications.
- ii 13y ago"optimized for use in browsers" means that collection of C++ cross-platform libraries can segfault a production server simply because it was not enough tested in other environments.
- icefox 13y agoWhile a class/library/etc might be used by chrome and all of its many users, it was originally designed to solve an issue for the browser and it might have a horrible api for anything else or much more likely be completely missing api that other applications would not only want, but need.
- chetanahuja 13y agoActually if I'm not mistaken, the /base /net /threading (lower level components) etc. are common with the google server side codebase. At the very least, they share a common heritage. Whether they're kept in-sync on a regular basis... I couldn't say.
- SaveTheRbtz 13y agoWith the same reasoning you can use nginx as a C runtime.
- mbrubeck 13y agoAs an example of this type of Chromium library re-use, Firefox and Firefox OS use the Chromium ipc library for messaging between the main UI process, plugin processes, and content processes (in Firefox OS or in Firefox with the experimental multi-process mode enabled). https://hg.mozilla.org/mozilla-central/file/tip/ipc/chromium https://hg.mozilla.org/mozilla-central/file/tip/ipc/chromium https://wiki.mozilla.org/IPC_Protocols https://wiki.mozilla.org/IPC_Protocols
- nilsbunger 13y agoYes, we (OP) use the ipc library too. It's a great asynchronous IPC mechanism which works across platforms.
- codingtheone 13y agoSo you write your mobile apps in C++? and you can't take advantage of iOS or Android STL?
- sanjeevrad 13y agoLibraries like STL (which Chromium code uses extensively) and boost are lower-level. Chromium has much higher level abstracts.
- huchi 13y agoThe reason to use specialized code is because your needs match them. Not everyone wants to bother linking to a general purpose library and adding a dependency when you can reuse some specific code and be done with it. Also, language standards cover libraries extensively and this is hardly a new trend and once it is standardized, it can no longer be considered third party. This has already happened quite a bit with C++11 which standardized many commonly used portions of the Boost library. Nevertheless, I mentioned the standardization aspect not to debate about it but to use it as an example to point out competing projects.
- lstamour 13y agoWhile looking for cross-platform (iOS and Android) networking and security resources, Google kept giving me references to the Chrome codebase. Having compiled Chromium for a homebrew Chrome book (and tired of copying settings between two separate codebases), I'm going to try this. :) A big shout out to the author of this stack overflow post, where I first confirmed that it might indeed make sense to develop function-based middleware in C or C++ and share it between iOS and Android to bridge the low and high levels of your app: http://stackoverflow.com/revisions/5234868/2 http://stackoverflow.com/revisions/5234868/2
- piyush_soni 13y agoTo the author: I think you should 'Find and Replace' all (except a few) occurrences of 'Chrome' to 'Chromium' in your article.
- sanjeevrad 13y agoYes, Chromium would be the technically correct usage, I used Chrome as it is the more familiar term.
- zobzu 13y agoit'd be fine if the libs were actually libs, with a documented api (you know, in man, it's nice). that's not the case tho, and that's why its a blog post and not something everyone and their dog uses.
- clienthunter 13y ago"Person-hours".
- avighnay 13y agoThanks for bringing this to limelight Just started experiencing this early on this week via Node Webkit, it is just awesome what NW with Chromium brings to the table. The first thing that came to my mind is that this should have been there 15 years earlier through Java/Embedded browser. However the powers of the time (read IE) were not interested/even actively blocked embedded browser usage.
- oscargrouch 13y agoIm using the chromium codebase to build a sort of netxgen "browser" (not web browser).. but more akin to a application platform with p2p in mind (and other crazy ideas). While the idea proposed by the author may sounds cool, i think chromium is a huge codebase to be used like the author says so trivially.. Its ok; if you need multiprocess ipc + net + actor-based thread concurrency + gpu compositor + webkit.. (like i do) But, dont know if it worth the trouble otherwise.. For instance, it takes a very long time to compile everything, it takes long to debug (the final chrome binary with debug symbols end with 2G.. all loaded in the heap) and you got a big codebase to know about.. so use it with care and in need.. otherwise you will waste your precious time trying to kill a fly with a canon
- chetanahuja 13y agoThis is the argument that resonates with me the most. Unless you're already intimately familiar with the codebase and build system (with all their attendant quirks), it could consume a huge amount of time and effort to tease apart the stuff you need from the vast chromium codebase. For the record, I'm working on a new C++ project where I ended up picking up small (very small) pieces of chromium codebase with the rest being in conservatively written C++ (but not as conservative as described in google code-style guide). In general, I'd say /base and /threading libraries are useful sources to raid at the beginning of your project. These are high quality implementations of basic things most programs would need and somewhat easier to disentangle from the rest of the code.
- oscargrouch 13y agoi think theres a safe threshold someone can use as a rule, before things get too much complicated.. first: know how to use gyp and ninja build tools then.. you can embed: base, crypto, net and ipc.. Anything more than that, things start to get more complicated.. for instance: if you want to use the 'ui'.. then you have to embed 'cc' and 'gpu'.. and to work right.. you will need the browser process + the gpu process.. and will have to create a custom-renderer, or adapt the renderer process to yourself.. so now you will realize you are doomed! The other Chrome components past the ones i've pointed out, will need to use the IPC and multiprocess logic from chrome.. so that part should only be used in very specific scenarios.. Edit: i think the 'cc' module, the chrome compositor, also has some sort of autonomy from the multiprocess IPC core.. so could also be used with: base, crypto, net and ipc
- hucha 13y agosigh people just cant stop using something just because its "cool", rather than what is right!!!
- moca 13y agoChrome is more like Java or .NET runtime than C runtime. You can build full blown apps as Chrome packaged apps. Google has not polished it very well. If done well, developers can use it to build apps that run on Windows/Mac/Linux without change.
- josephcooney 13y agoIt CAN be like Java or .NET if you build on top of it with packaged apps, or it can be like the new C runtime if you statically compile bits of chrome in to your application, as a 'stack' that you build on, which is what the author is describing.
- greatsuccess 13y agoC++ cant be saved. Its complete, utter trash, and given that google employees write Java so incredibly badly, I seriously dont want to see one line of intern, just got out of college C++ stroke fest from them. Google sux, C++ sucks, Go sucks and you people suck.
- indubitably 13y agooh just fuck this entire idea
- hucha 13y agoI really don't like the idea of adding a third-party draw API to a language standard
- gcp 13y agoRecommending Chrome is a bit like recommending bionic when everyone else is enjoying (e)glibc? The Chrome runtime has some good libraries but using that over say Qt really only makes sense if you're a (former) Chrome developer. For everyone else it's just needless pain.
- justincormack 13y agoNo, please. Bionic is not a replacement for (e)glibc, its a small subset of a libc for Android. Now Musl, thats a real usable implementation.
- cmollis 13y agoagreed. It sounds good but I can't imagine using it over some other x-platform lib which probably has fewer headaches. It's just way too big for what the author of the original post had in mind.
- zerop 13y agoC/C++ web stack is really needed for performance reasons.. good project I would say....
- factorizer 13y agoNo, it's not.
- jokoon 13y agoCan I use the p2p libs to make some bitmessage-like app, using the bitcoin protocol to spread data ?
- hucha 13y agoIdea of adding a third-party draw API to a language standard is not a good idea
- hucha 13y agoThere is a lot of code in Chromium that covers ground that Qt does not and there are good reason to prefer permissive licensed code for your project that you can directly modify. Qt is a fine library but hardly the be all end all of what is out there. ISO C++ committee recently posted to the Cairo library and C++14 might have a standard 2D based on it. There is a lot of room for different projects
- huchi 13y agoBut otherwise I still see no reason to use something designed for a specific use-case over something which is designed for general development. Though if it is a proprietary app it might work because there people seldom care about using latest version of libraries, sad as it may be. Further, I really don't like the idea of adding a third-party draw API to a language standard. Dunno if we really want to blur the line between language and library.
- cbr 13y agoThis is what mod_pagespeed/ngx_pagespeed does. We need many basic things and we use the Chromium libraries for that. (You could say that's because we're kind of like a browser, but we don't actually use the most browser-like components of Chromium. We do need an http(s) fetcher and html/css/js parsers but the Chromium ones aren't a good fit for our usage.)
- fidotron 13y agoContrary to many, I'm profoundly concerned about the culture around Chrome development, and the attitude here is indicative of that. There really is a belief by those that work on it, or have worked on it, that it's much better than it really is, when what actually happened was it was much better than the competition at launch, but now there isn't much between them at all. This notion that Chrome is decent on mobile is still absolutely bizarre. The more long term concern is the way it's creating a sort of development priesthood. You have the chosen few that are making decisions and developing the platform largely in secret and pushing the code out to mere mortals from on high. This wouldn't be so bad, except the decisions are not made in the interest of the mortals, but of the priesthood and the strategic interest of their Googly God, and they exhibit a level of contempt for the mortals by disallowing them direct access to things such as the components so lauded here. In an ideal world most of what's mentioned should not be in the C++ layer, but in JS, except the hooks to provide that are simply never going to be exposed (at least in the near term because of the JS performance it would be technically dubious), leading to this them and us situation where they get to develop all the low level stuff, and no one else does, especially if any patches would conflict with the interest of their lord and master. They simply aren't dogfooding their entire development stack. Mozilla, for all their flaws, do actually engage the rest of the world in what they're doing, and early Java, while slow, did have a relatively small JVM with an enormous class library which was mostly written in Java itself. You could argue Sun's error was to Swing too far in the other direction by insisting on being all Java where at the time it really should not have been. So yes, sadly I've come to view many Chrome devs as smug self serving slightly delusional types persistently confused that the masses don't acknowledge their brilliance, and this piece is evangelism to try and persuade us of this. The truly scary part of this is they just might be right to have this point of view in order to prevent what happened to Android where groups outside succeeded in nullifying many of the expected advantages of a standard open mobile platform, and I suspect it's this which has led to their open but closed approach to things.
- deleted 13y ago[deleted]
- oscargrouch 13y agostop reading here: >In an ideal world most of what's mentioned should not be in the C++ layer, but in JS, except the hooks to provide that are simply never going to be exposed Do you even know what you are talking about? the only thing that is reasonable to be written in javascript is webkit, specially the DOM.. and as far as i know, the chromium folks are already doing it.. (its called oilpan, i think) There's no way the other parts could be working in javascript.. javascript is not that sort of language.. first you need a non-GC language: C, C++, Rust or ObjC (if you can stand it) Than you need access to the native threads, and process, net, etc.. of each platform and provide native bindings for each platform.. and you need to do it fast(this probably means AOT compilation).. and again javascript is not that sort of language.. People need to stop being lazy and learn to use different tools for different needs.. I wont even comment on the cultist non-sense part.. but the source of chromium is there.. you can use it.. its open.. what could be bad about it?
- frozenport 13y agoI think Qt is a much lighter and feature rich alternative. Light because you only need and see the Qt dlls and feature rich because the things described are already in Qt.
- yason 13y agoThat's how NSPR was/is used by projects other than Netscape/Mozilla, too. Producing such a library is generally an unavoidable consequence of writing a popular multi-platform application -- unless you reuse someone else's.
- elwell 13y agoI for one welcome our new C Runtime.