RE: Benchmarks Shows That iOS 6 Safari is 17.2% Faster Than iOS 5

안녕하세요. 민구님.

SPDY를 지원한다니 궁금해 지내요^^ Webview Component를 쓰는데 어떻게 넣었을까요?

혹시 아시는 분 계신가요?

 

이원석 드림.

 

From: Premist Lee [mailto:premist@me.com] 
Sent: Friday, June 29, 2012 11:15 PM
To: Wonsuk Lee
Cc: mixed; Younggyo Seo; Sangwhan Moon; HTML WG
Subject: Re: Benchmarks Shows That iOS 6 Safari is 17.2% Faster Than iOS 5

 

네, 또한 사파리에서 사용되는 Nitro 엔진도 보안 상의 문제로 애플이 막아놓은 상태입니다. 벤치마크 해 보니 속도가 약간 느리더군요.

 

아 그리고 구글이 SPDY 지원을 넣긴 넣었더군요. 래핑만 한 건 아닌 것 같네요;

 

-- 

Minku Lee

http://si.mpli.st/


http://twitter.com/premist


http://fb.me/premist.lee


 


On Jun 29, 2012, at 3:01 AM, Wonsuk Lee <wonsuk73@gmail.com> wrote:

안녕하세요~

예. 재밌네요~ 애플이 구글이 독립적으로 자체 브라우저 엔진을 사용하는 것을 허용하지 않는 걸까요?? 궁금하네요~^^

이원석 드림.

2012년 6월 29일 오전 8:48, mixed <i.nevalose@gmail.com>님의 말:



안녕하세요. 전용우입니다.

전에 문상환님이 iOS에서 크롬이 나오는것에 회의적이며 나와도 반쪽 짜리 크롬이 나올것이라고 하셨는데 정확하시네요.

 

오늘 본 트윗인데 iOS버전의 크롬이 나오는데 렌더링/JS엔진은 iOS에서 제공하는 걸 쓴다고 하네요.

거의 랩핑한 수준이네요.

 

--------------

@viviancromwell: Chrome for iOS provides the same browsing experience you've

on desktop/Android. Rendering/JS engine are provided by iOS so it doesn't

use V8

-------------

 

 

On Friday, June 15, 2012, mixed wrote:

 

안녕하세요. 전용우입니다.

 

제가 이해하는데 구멍이 있던 부분이 sandbox부분이였는데 쉽게 설명해주셔서 이해가 잘 됐습니다.

 

감사합니다.^^

 

 

2012/6/15 Younggyo Seo <seo.younggyo@gmail.com>

 

안녕하세요.

 

코드로 설명해 주시니 명확하게 이해되네요.

감사합니다.

 

서영교 드림

 

2012년 6월 15일 오후 2:59, Sangwhan Moon <sangwhan.moon@hanmail.net>님의 말:

 

안녕하세요.

 

얼마전에 언급된 "크롬이 아이패드로 나온다" 였던가의 메일에서 에서

크롬 포팅 가능성에 대해서 회의적인 입장으로  간단하게 언급했습니다만...

 

On Jun 14, 2012, at 11:10 PM, Wonsuk Lee wrote:

 

안녕하세요.

먼저 좋은 답변 감사합니다~

아래와 같이 inline comment를 달았습니다~

 

 

2012년 6월 14일 오후 2:25, Younggyo Seo <seo.younggyo@gmail.com>님의 말:

안녕하세요. 오비고 서영교 입니다.

 

저도 궁금해서 좀 더 구글링을 해봤습니다.

전용우 그룹장님 의견에 추가하여,

 

일반적인 Native Application은 크게 코드 영역과 실행 영역으로 나눌 수 있을 것이고, 컴파일 이후에는 코드 영영의

변경은 이루어 지지 않을 것 입니다.

 

이 부분에 내용이 조금 틀린 부분이 있습니다. text 와 data 두가지로 크게 나뉘는데,

text가 code라고 불리기도 합니다. (대부분의 disassembler나 debugger는 text라는

명칭을 사용합니다) data는 말 그대로 data입니다.

 

"실행이 가능한" segment라고 하면 마찬가지로 text가 아닐까 생각됩니다.

 

그런데 코드영역과 실행영역이 정확히 어떤 것을 이야기 하는 것인가요?

하지만 JIT이 동작하기 위해서는 Native Application이 실행된 다음, 실시간으로 코드 영역이 생성되어 져야

합니다.

그러나 iOS에서는 Application의 실행 중, 코드 영역을 생성하여 실행할 수 없도록하는 보안 정책을 가지고 있다고

합니다.

- iOS 전문가님의 의견 필요 ^^

 

조금 더 정확히는 mmap으로 시스템으로 부터 실행 가능한 페이지 (PROT_EXEC)를

할당받아서 사용합니다. 이 접근을 사용하는 것이 Sandbox 안에서는 불가능합니다.

 

예> void* executable_code_page = mmap(NULL, 8192,

PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);

 

ARM의 경우.. 여기에서 executable_code_page를 32-bit align한 후 실행하고 싶은

코드를 전부 넣고, 마지막에 BX R14을 넣어준 다음, 호출하면 주입한 코드가 전부

실행이 된 다음에 반환됩니다.

 

물론 아키텍쳐에 따라서 접근은 달리 해야 합니다. 자세한 내용은 책이 아닌 관계로

생략하겠습니다.

 

애플에서는 이 보안 정책을 Safari 에서만 예외가 가능하도록 처리해 놓았기 때문에, Safari에서만 nitro가 동작가능한

것

같습니다.

 

애플에서 내보내는 Safari는 Sandbox안에서 돌아가지 않기 때문에 가능한 것입니다.

App store에서 다운로드 받은 어플리케이션은 전부 Sandbox context 안에서 실행되기

때문에 그 안에서 dynamic link된 UIKit.framework에서 UIWebView를 사용하게 될

경우 해당 Webview에서 사용하는 Webkit의 실행 context가 Sandbox안에 있기 때문에

위와 같이 실행 가능한 코드를 주입하는 것이 불가능합니다.

 

코드를 열어보지는 않았습니다만, 아마 자바스크립트 엔진에서 sandbox 안에 있는지 또는

UIWebView에서 호출되었는지 assert 후 실패할 경우 interpreter모드로 fallback을 할 것으로

추정됩니다. 만약에 UIWebView를 jailbreak된 상태에서 사용할 경우 JIT가 동작한다면 후자

일 것이고, jailbreak를 했어도 JIT가 비활성화되어 있다면 전자로 생각하시면 됩니다.

 

(여담으로 전자가 구현하기 쉽고 오류의 여지가 상대적으로 적기 때문에 저라면 전자로 했을겁니다.)

 

단적인 예로... Safari는 Sandbox안에 있지 않았었기 때문에 Freetype 취약점을 이용한

Jailbreakme 3.0이 가능했던것입니다.

 

또한 이런 이유로 Webkit2가 Safari on iOS 에에 적용되면 WebView에서도 nitro의 사용이 가능하다고

말하고 있는 것 같습니다.

- Webkit2의 경우 UI와 엔진이 프로세스로 분리되어 동작하고 있는 것으로 압니다.

 

Webkit2에서는 UI 프로세스와 Web 프로세스로 분리되어 있기는 합니다만 이렇게 되는 경우에 왜 Nitro 적용이

가능한지는 정확히 이해가 되지 않습니다^^;

혹시 좀더 자세히 설명이 가능할 까요?

 

위에 설명이 되었을것이라고 생각됩니다. (고용주와 관계 상 Webkit에 대해서 더 자세하게

이야기하지 못하는 점, 양해 바랍니다.)

 

애플에서 보안 정책을 갑자기 변경하지 않는 이상, 상기와 같은 이유로 iOS에 Opera Mobile이나

Firefox, Chromium이 나오더라도 반쪽짜리 제품이 나올것이라고 생각됩니다.

 

(추가적으로 App store review guideline 현행 버전에 의하면 additional executable code에

대해서 명시적으로 언급이 되어 있기 때문에, 그게 바뀌기 전까지는 브라우저도 게임기 에뮬레이터도

전부 정책 변경이 이루어질때까지는 불가능합니다.)

 

감사합니다.

문상환 배상

 

 

http://code.google.com/p/v8/issues/detail?id=1312


- I was told that the problem with getting V8 to run on iOS was the

fact

that JIT compilation could not be supported due to Apple disabling

writable

and executable memory regions.

 

http://news.ycombinator.com/item?id=2317804


-  A JIT works by compiling some chunk of code into a section of

executable

memory, then jumping to that location. As I understand it, iOS hasn't

previously allowed execution of code from "data memory" (various people

were

curious about this very thing when it was announced they were shipping

a

JIT).

 

서영교 드림

 

2012년 6월 14일 오전 9:37, mixed <i.nevalose@gmail.com>님의 말:

 




-- 

=========================================
이 원 석 (Wonsuk, Lee) / Principal Engineer, Ph.D
SAMSUNG ELECTRONICS Co., LTD. (三星電子)
Mobile: +82-10-5800-3997
E-mail: wonsuk11.lee@samsung.com, wonsuk73@gmail.com
http://www.wonsuk73.com/, twitter: @wonsuk73
-----------------------------------------
Inspire the World, Create the Future !!!
=========================================

Received on Tuesday, 3 July 2012 07:40:24 UTC