News for hackers. Stuff that matters.
Re:Open-sourcing Chrome on iOS by zwily on Tuesday January 31, 2017 @01:48PM (#13533835)
You're not allowed to provide your own web render engine at all. The JIT issue was solved a couple versions of iOS ago - embedded webviews now get JIT just like Safari.
Re:Open-sourcing Chrome on iOS by DonHopkins on Tuesday January 31, 2017 @02:28PM (#13534298)
It's my understanding that only embedded WKWebViews are allowed to enable the JIT compiler, but not UIWebViews (or in-process JavaScriptCore engines). WKWebView is an out-of-process web browser that uses IOSurface [1] to project the image into your embedding application and IPC to send messages.

So WKWebView's dynamically generated code is running safely firewalled in a separate address space controlled by Apple and not accessible to your app, while older UIWebViews run in the address space of your application, and aren't allowed to write to code pages, so their JIT compiler is disabled.

Since it's running in another process, WkWebView's JavaScriptEngine lacks the ability to expose your own Objective C classes to JavaScript so they can be called directly [2], but it does include a less efficient way of adding script message handlers that call back to Objective C code via IPC [3].

[1] https://developer.apple.com/reference/iosurface

[2] https://developer.apple.com/reference/javascriptcore/jsexpor...

[3] https://developer.apple.com/reference/webkit/wkusercontentco...

Re:Open-sourcing Chrome on iOS by eslaught on Tuesday January 31, 2017 @02:58PM (#13534615)
> You're not allowed to provide your own web render engine at all.

Is that true? I understand the security argument against JITs, but I don't see why it would be objectionable to run a copy of e.g. Gecko if you excluded the JS JIT component. (Of course you would never actually do that. But I'm trying to tease apart the separate arguments and see if they're actually connected.)

It seems to me that the root cause for this is all the JIT. If the JIT in iOS has to be exposed via IPC for security (as claimed in a sibling comment) it's simply not going to be a win to try to use it in combination with a separate rendering engine, if it's even possible at all.

Re:Open-sourcing Chrome on iOS by bzbarsky on Tuesday January 31, 2017 @03:32PM (#13534911)
You're not allowed to ship a interpreter that interprets code that doesn't come from insider your app.

So you can maybe ship Gecko + SpiderMonkey, as long as you only run JS that's part of your app. But if you want to run JS from a website (or indeed any code from anywhere), you're not allowed to do that on iOS.

I haven't checked whether it would be OK to ship a browser engine that doesn't support JS at all, but that's a fairly academic question anyway.

Re:Open-sourcing Chrome on iOS by eslaught on Tuesday January 31, 2017 @07:29PM (#13536924)
But for example, could you ship Gecko with Apple's JS engine in a way that will satisfy Apple's requirements? Of course the answer is no, but it's worth taking a second to think about why that is.

I guess what's bothering me is that there is an unstated assumption underlying this entire discussion which people never bring up: for performance reasons, the rendering engine has to be tied closely to the JS implementation. Specifically, calling over some IPC interface at every entrypoint into the JS interpreter would be a performance nightmare. This is the reason why these can't be disentangled. The connection to the interpreter is really an indirect one.

Re:Open-sourcing Chrome on iOS by st3fan on Tuesday January 31, 2017 @03:58PM (#13535153)
> You're not allowed to ship a interpreter that interprets code that doesn't come from insider your app.

That is not true. Many apps do this. Games have been doing this for a decade. It is not a problem to do this. Apple has never made a big deal of that. Only if you are trying to build a shadow app store.

Re:Open-sourcing Chrome on iOS by wvenable on Tuesday January 31, 2017 @04:09PM (#13535251)
Games interpret code that's shipped with the app. You cannot create an app which downloads code off the Internet (for example) and executes it.
Re:Open-sourcing Chrome on iOS by st3fan on Tuesday January 31, 2017 @04:21PM (#13535356)
Games and apps have been doing this for a decade.

Apple does not care. As long as you are operating in the spirit of their App Store.

You know when they care? When you start charging money for those downloads. Via an alternative payment channel. Or when you run an alternative app store from within your app.

If you download assets on demand, and some of those turn out to be executable* code, nobody cares.

* Where executable means 'interpreted' because you cannot run unsigned code. But for games that is fine, they have been doing this with JS, Lua and Python for a decade.

(You can downvote me - but this is based on a decade of experience)

Re:Open-sourcing Chrome on iOS by wvenable on Tuesday January 31, 2017 @05:27PM (#13535913)
They do care; Apple has shut down (or restricted) several apps over the years that have tried this. But I ultimately agree with you, it's really more about how it's presented rather than how it works under the hood. This might have a lot to do with the review process.

The subject we're talking about here would not fly under their radar.

Re:Open-sourcing Chrome on iOS by bzbarsky on Wednesday February 01, 2017 @02:48PM (#13544313)
What you're saying is that Apple is inconsistent in enforcing its officially stated policy. That may be true, but does not change what the official policy is and that they can enforce it any time they want to.
Re:Open-sourcing Chrome on iOS by solidr53 on Tuesday January 31, 2017 @07:52PM (#13537074)
not true, checkout codepush from microsoft which enables OTA updates for cordova, react native, etc.
Re:Open-sourcing Chrome on iOS by ec109685 on Wednesday February 01, 2017 @01:29AM (#13538772)
Yeah, because JavaScript is exempted from their rules.
Re:Open-sourcing Chrome on iOS by bzbarsky on Monday February 06, 2017 @11:29AM (#13581022)
JavaScript in general, or JavaScript only if it's run via Apple's JavaScriptCore?
Re:Open-sourcing Chrome on iOS by wvenable on Sunday February 12, 2017 @07:29PM (#13632125)
JavaScript only if it's run via Apple's JavaScriptCore.

Pebble used this quite effectively to add phone-side apps to their product.

Re:Open-sourcing Chrome on iOS by tiles on Tuesday January 31, 2017 @10:32PM (#13537989)
See Microsoft CodePush and React Native for a counterexample: you can certainly publish apps which download code as long as they don't dramatically alter the functionality of the app.
Re:Open-sourcing Chrome on iOS by madeofpalk on Tuesday January 31, 2017 @04:09PM (#13535261)
Games are a specific exemption to this rule.
Re:Open-sourcing Chrome on iOS by st3fan on Tuesday January 31, 2017 @03:30PM (#13534897)
> Is that true?

It is. Mozilla has an iOS port of Gecko. It runs well, even without the JIT, but we are not allowed to use it.

Re:Open-sourcing Chrome on iOS by Ezhik on Tuesday January 31, 2017 @03:59PM (#13535171)
Is that OSS? I'm sure people would love to try it even if it involves sideloading and such.
Re:Open-sourcing Chrome on iOS by st3fan on Tuesday January 31, 2017 @04:15PM (#13535302)
Pretty sure all the changes are in mozilla-central.

https://hg.mozilla.org/mozilla-central/file/tip/embedding/io...

Sorry I dont know where we keep the build instructions.

Re:Open-sourcing Chrome on iOS by kalleboo on Wednesday February 01, 2017 @12:44AM (#13538580)
https://developer.apple.com/app-store/review/guidelines/

> 2.5.6 Apps that browse the web must use the appropriate WebKit framework and WebKit Javascript.

Re:Open-sourcing Chrome on iOS by therealmarv on Tuesday January 31, 2017 @03:09PM (#13534727)
take a close look at Opera Mini ;) (they are doing Server rendering)