구글 네이티브 클라이언트

Google Native Client
구글 네이티브 클라이언트
개발자구글, 기타
초기 릴리즈2011년 9월 16일, 10년 전(2011-09-16)[1]
안정된 릴리스
SDK: Pepper 45 / 2015년 7월 10일; 7년 전 (2015-07-10)

클라이언트: Google Chrome과 동일

저장소
기입처C, C++
운영 체제Windows, Linux, macOS, Chrome OS
플랫폼x86, ARM, MIPS
후계자웹 어셈블리
유형네이티브 코드용 웹 브라우저의 샌드박스
면허증.새로운 BSD
웹 사이트developer.chrome.com/docs/native-client/ Edit this at Wikidata

NaCl(Google Native Client)은 Intel x86, ARM 또는 MIPS 네이티브 코드의 하위 집합 또는 휴대용 실행 파일을 샌드박스에서 실행하기 위한 샌드박스 기술입니다.사용자 운영 체제와는 별개로 웹 브라우저에서 네이티브 코드를 안전하게 실행할 수 있도록 하여 앱이 네이티브에 가까운 속도로 실행되도록 하고, 이는 Chrome OS에 대한 Google의 계획과 일치합니다.또한 브라우저 플러그인ZeroVM[3]같은 다른 애플리케이션의 일부 또는 전체 애플리케이션의[2] 보안에도 사용할 수 있습니다.

2011년 12월 9일, 구글은 바스티온(크롬 웹 스토어에서는 더 이상 지원되지 않음)을 포함한 풍부하고 프로세서 집약적인 그래픽으로 알려진 몇 가지 새로운 크롬 전용 버전의 게임을 출시할 수 있다고 발표했다.NaCl은 하드웨어 가속 3D 그래픽(OpenGL ES 2.0 경유), 샌드박스 로컬 파일 스토리지, 동적 로딩, 전체 화면 모드 및 마우스 캡처를 실행합니다.휴대용 기기에서 NaCl을 사용할 [4][5]수 있도록 하는 계획도 있었다.

Portable Native Client(PNaCl)는 아키텍처에 의존하지 않는 버전입니다.PNaCl 앱은 미리 컴파일됩니다.대부분의 사용 [6]사례에서는 NaCl보다 PNaCl이 권장된다.일반적인 개념의 NaCl(웹 브라우저에서의 네이티브코드 실행)은 ActiveX에 구현되어 있으며, ActiveX는 아직 사용 중이지만 시스템(디스크, 메모리, 사용자 인터페이스, 레지스트리 등)에 대한 풀액세스가 가능합니다.네이티브 클라이언트는 샌드박스를 사용하여 이 문제를 방지합니다.

NaCl의 다른 종류로는 asm.js가 있습니다.이것에 의해, C 또는 C++로 작성된 애플리케이션도 브라우저로 실행할 수 있습니다(네이티브 속도의 절반 이상으로).또, 선행 컴파일을 서포트하고 있습니다만, JavaScript의 서브셋이기 때문에, 직접 서포트하지 않는 브라우저와의 역호환성이 있습니다.또 다른 대안(처음에는 PNaCl로 구동될 수 있지만)은 Web Assembly입니다.

2016년 10월 12일, Chromium 이슈 트래커에 대한 코멘트는 구글의 Pepper와 Native Client 팀이 [7]파괴되었음을 시사했다.2017년 5월 30일 구글은 웹어셈블리[8]위해 PNaCl을 폐지한다고 발표했다.구글은 당초 2018년 [8]1분기에 PNaCl을 제거하고 2019년 [9]2분기에 PNaCl을 제거할 계획이었으나 현재 2022년 6월(크롬앱스와 [10][11]함께) 퇴출할 예정이다.

개요

Native Client는 Google에서 [12]개발 중인 오픈 소스 프로젝트입니다.현재까지 [13]Wesnoth,[14] XaoS, Battle for Wesnoth, [15]Doom, Lara CroftGuardian of Light,[16] From Dust,[17] MAME 및 사운드 프로세싱 시스템 Csound는 네이티브 클라이언트에 포팅되어 있습니다.네이티브 클라이언트는 버전 14부터 Google Chrome 웹 브라우저에서 사용할 수 있으며, Portable Native Client(PNaCl, pinnacle로 발음)[18][19][20]가 출시된 버전 31부터 기본적으로 활성화되어 있습니다.

2010년 [21]3월에 ARM 실장이 발표되었습니다.x86-64, IA-32, MIPS도 지원됩니다.

애플리케이션을 PNaCl에서 이식 가능하게 실행하려면 LLVM 중간 표현 바이트 [22]코드의 아키텍처에 구애받지 않고 안정적인 서브셋으로 컴파일해야 합니다.실행 파일을 PNaCl 실행 파일(펙스)이라고 합니다.PNaCl 툴체인은 .pexe 파일을 만듭니다.NaCl 툴체인은 .nexe 파일을 만듭니다..nexe 파일의 매직넘버는 0x7F 'E' 'L' 'F' 입니다.이것은 ELF입니다.Chrome에서는 실행할 수 있도록 아키텍처별 실행 파일로 변환됩니다.

NaCl은 x86-64 및 [23]ARM에서 샌드박스에 소프트웨어 장애 검출 및 분리를 사용합니다.네이티브 클라이언트의 x86-32 구현은 x86 아키텍처에서 거의 사용되지 않는 세그먼트화 [24]기능을 사용하는 새로운 샌드박스 방식으로 유명합니다.네이티브 클라이언트는 샌드박스 코드가 액세스할 수 있는 메모리 범위를 제한하도록 x86 세그먼트를 설정합니다.코드 검증기를 사용하여 시스템 호출을 실행하는 명령과 같은 안전하지 않은 명령의 사용을 방지합니다.코드가 안전한 명령 중간에 숨겨져 있는 안전하지 않은 명령으로 점프하는 것을 방지하기 위해 Native Client는 모든 간접 점프를 32바이트 정렬 블록의 선두로 점프해야 하며 이러한 [24]블록에 명령을 걸치는 것은 허용되지 않습니다.이러한 제약으로 인해 C 및 C++ 코드를 Native Client에서 다시 컴파일해야 합니다.Native Client는 GNU 툴체인의 커스터마이즈된 버전, 특히 GCC(GNU 컴파일러 컬렉션), GNU BinutilsLLVM을 제공합니다.

네이티브 클라이언트는 BSD 스타일의 라이선스로 라이선스됩니다.

네이티브 클라이언트는 Newlib를 C 라이브러리로 사용하지만 GNU C 라이브러리(GNU libc) 포트도 사용[25]수 있습니다.

후추

NaCl은 일반적인 식탁용 소금인 염화나트륨을 의미하며, 말장난으로 후추 이름도 사용되었다.Pepper API는 Native Client [26]모듈을 만들기 위한 크로스 플랫폼 오픈 소스 API입니다.Pepper Plugin API(PPAPI[27][28])는 Native Client 보안 웹 브라우저 플러그인을 위한 크로스 플랫폼 API로, 처음에는 Netscape의 NPAPI에 기반했다가 다시 씁니다.현재 Chromium과 Google Chrome에서 PPAPI 버전의 Adobe[29] Flash와 내장 PDF [30]뷰어를 활성화하기 위해 사용되고 있습니다.

PPAPI

2009년 8월 12일, 구글 코드의 한 페이지에서 새로운 프로젝트인 Pepper와 관련된 Pepper Plugin API(PPAPI)[31]가 소개되었다.[32]이 확장 기능은 프로세스 외 플러그인 실행을 쉽게 구현하도록 특별히 설계되었습니다.또한 이 프로젝트의 목표는 플러그인을 완전히 크로스 플랫폼으로 만들기 위한 프레임워크를 제공하는 것입니다.검토되는 토픽은 다음과 같습니다.

  • 브라우저 간에 NPAPI의 일관된 의미론.
  • 렌더러 브라우저와는 다른 프로세스로 실행한다.
  • 브라우저의 합성 프로세스를 사용하여 렌더링을 표준화합니다.
  • 표준화된 이벤트 및 2D 래스터라이징 기능 정의
  • 3D 그래픽스 액세스를 처음 시도했습니다.
  • 플러그인 레지스트리

Pepper API는 또한 Gamepad(버전 19)와 WebSockets(버전 18)[33]지원합니다.

2010년 5월 13일 현재, 구글의 오픈 소스 브라우저인 Chromium은 새로운 브라우저 플러그인 [34]모델을 사용하는 유일한 웹 브라우저였다.2020년 현재 페퍼는 오페라, 마이크로소프트 엣지 등의 크롬, 크롬, 블링크 레이아웃 엔진 기반 브라우저에서 지원됩니다.

2020년 8월, 구글은 [35]2022년 6월 구글 크롬과 크롬에서 PPAPI에 대한 지원이 없어질 것이라고 발표했다.

파이어폭스의 PPAPI

파이어폭스 개발자들은 2014년에 Pepper를 지원하지 않겠다고 밝힌 바 있다. 왜냐하면 Pepper는 Chrome에 구현된 것 외에 완전한 사양이 없기 때문이다.Chrome은 Blink 레이아웃 엔진에서만 사용하도록 설계되었으며 Flash Player 플러그인에 고유한 개인 API를 가지고 있기 때문이다.[36]2016년 10월 모질라는 향후 [37]파이어폭스 릴리즈에 Pepper API와 PDFium을 통합할지 여부를 다시 검토 중이라고 발표했지만, 그러한 단계는 취해지지 않았다.

적용들

[38] 웹사이트는 서버에서 NaCL을 사용하여 사용자가 브라우저에서 [39]Go 프로그래밍 언어를 실험할 수 있도록 합니다.

접수처

브라우저 개발자의 일부 그룹은 네이티브 클라이언트 기술을 지원하지만 다른 그룹은 지원하지 않습니다.

서포터

IMVU의 Chad Austin은 네이티브 클라이언트가 고성능 애플리케이션을 안전한 방법으로 웹에 가져오는 방법(네이티브 코드 대비 약 5%의 패널티)을 높이 평가하면서 사용하는 프로그래밍 언어([40]JavaScript 제외)를 선택함으로써 클라이언트 측 애플리케이션의 진화를 가속화할 수 있다고 말했습니다.

ID Software의 John D. CarmackQuakeCon 2012에서 Native Client를 칭찬하며 다음과 같이 말했습니다.「브라우저내에서 무언가를 실시할 필요가 있는 경우, Native Client는, 유저 모드로 이 모든 것을 재미있게 샌드박스로 할 수 있는, 매우 영리한 x86 해킹으로서 개시한 것으로서, 한층 더 흥미로운 것입니다.현재는 동적 재컴파일이지만 C 또는 C++로 프로그래밍하면 완전한 네이티브 코드에 대한 O4 최적화 레벨이 아닌 네이티브 코드에 매우 가까운 수준으로 컴파일됩니다.모든 사악한 포인터 체이싱을 할 수 있고, 금속 게임 [41]개발자로서 하고 싶은 일이라면 무엇이든 할 수 있습니다."

디테이터

이 샌드박스 테크놀로지는 상호 운용성 또는 실질적인 문제가 있기 때문에 다른 IT프로패셔널은 이 샌드박스 테크놀로지에 대해 더 비판적입니다.

Mozilla의 제품 담당 부사장인 Jay Sullivan은 "이러한 네이티브 앱들은 웹페이지에 있는 작은 블랙박스일 뿐이기 때문에 Mozilla는 브라우저 내에서 네이티브 코드를 실행할 계획이 없다"[42]고 말했다.

모질라의 크리스토퍼 블리자드는 네이티브 코드가 소스 코드 기반 웹과 같은 방식으로 진화할 수 없다고 주장하며 NaCl을 비판했다.또한 NaCl을 DLL [2]Hell에 시달리는 마이크로소프트의 ActiveX 기술과 비교했습니다.

Opera의 CTO인 Hkonkon Wium Lie는 "NaCl은 웹을 사용하기 전에 나쁜 옛날을 동경하는 것 같다"며 "네이티브 클라이언트는 새로운 플랫폼을 구축하거나 오래된 플랫폼을 웹에 이식하는 것이다.[...] 복잡성과 보안 문제를 가져오며 웹 [2]플랫폼의 초점을 잃게 될 것이다"라고 믿고 있습니다.

제2세대

구글에서 개발된 샌드박스의 2세대는 [43][44]gVisor입니다.구글 클라우드에서 NaCl을 대체하기 위한 것으로, 좀 더 정확히 말하면 구글엔진입니다.구글은 또한 웹어셈블리를 [45]홍보해왔다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Google's Native Client goes live in Chrome". The Register. 16 September 2011. Retrieved 12 March 2016.
  2. ^ a b c Metz, Cade (12 September 2011). "Google Native Client: The web of the future – or the past?". The Register. Retrieved 17 September 2011.
  3. ^ "ZeroVM Architecture". Archived from the original on 8 February 2014. Retrieved 16 March 2014.
  4. ^ Rosenblatt, Seth (9 December 2011). "Native Client turns Chrome into high-end gaming platform". CNET. Archived from the original on 28 August 2012. Retrieved 9 December 2011.
  5. ^ "Google Code Blog: Games, apps and runtimes come to Native Client". Googlecode.blogspot.com. 9 December 2011. Retrieved 25 April 2012.
  6. ^ "NaCl and PNaCl".
  7. ^ "Bugs.chromium.org". 12 October 2016. Retrieved 12 October 2016.
  8. ^ a b "Goodbye PNaCl, Hello WebAssembly!". Chromium Blog. Retrieved 31 May 2017.
  9. ^ "WebAssembly Migration Guide - Google Chrome". developer.chrome.com. Retrieved 20 December 2018.
  10. ^ "Changes to the Chrome App Support Timeline". Chromium Blog. 10 August 2020.
  11. ^ Li, Abner (10 August 2020). "Google delays deprecation of Chrome Apps on all platforms". 9to5Google. Retrieved 2 October 2021.{{cite web}}: CS1 maint :url-status (링크)
  12. ^ "Google Native Client on Google Code". Retrieved 25 April 2012.
  13. ^ davemichael (3 October 2020). "GitHub - davemichael/NaCl-Quake: Quake for Native Client (based on the SDL Quake port)". GitHub.
  14. ^ "The Battle for Wesnoth".
  15. ^ "Index of /".
  16. ^ "Archived copy". Archived from the original on 8 December 2013. Retrieved 26 November 2013.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  17. ^ "From Dust". Archived from the original on 12 March 2016. Retrieved 24 February 2016.
  18. ^ Chen, Brad (8 December 2008). "Native Client: A Technology for Running Native Code on the Web". Google-code-updates.blogspot.com. Retrieved 25 April 2012.
  19. ^ "The Chromium Blog: Native Client Brings Sandboxed Native Code to Chrome Web Store Apps". Blog.chromium.org. 18 August 2011. Retrieved 25 April 2012.
  20. ^ "Google Code Blog: Portable Native Client: The "pinnacle" of speed, security, and portability". blog.chromium.org. 12 November 2013. Retrieved 16 March 2014.
  21. ^ "Google's Native Client goes ARM and beyond". The H. 18 March 2010. Retrieved 19 May 2010.
  22. ^ "PNaCl: Portable Native Client Executables" (PDF). Archived from the original (PDF) on 2 May 2012. Retrieved 25 April 2012.
  23. ^ Sehr, David; Muth, Robert; Biffle, Cliff L.; Khimenko, Victor; Pasko, Egor; Yee, Bennet; Schimpf, Karl; Chen, Brad (2010). "Adapting Software Fault Isolation to Contemporary CPU Architectures". 19th USENIX Security Symposium. Retrieved 31 July 2011.
  24. ^ a b Yee, Bennet; Sehr, David; Dardyk, Greg; Chen, Brad; Muth, Robert; Ormandy, Tavis; Okasaka, Shiki; Narula, Neha; Fullagar, Nicholas (2009). "Native Client: A Sandbox for Portable, Untrusted x86 Native Code". IEEE Symposium on Security and Privacy (Oakland'09). Retrieved 31 July 2011.
  25. ^ "Native Client: Building". developer.chrome.com. Retrieved 16 March 2014.
  26. ^ "Technical Overview".
  27. ^ "Pepper Plugin API project at". Retrieved 25 April 2012.
  28. ^ "Chrome Source: Index of /trunk/src/ppapi". Src.chromium.org. Retrieved 25 April 2012.
  29. ^ "The road to safer, more stable, and flashier Flash". 8 August 2012. Retrieved 10 August 2013.
  30. ^ Metz, Cade (18 June 2010). "Google hugs Adobe harder with Chrome-PDF merge". The Register. Retrieved 25 April 2012.
  31. ^ "Getting Started: Background and Basics – The Chromium Projects". Chromium.org. Retrieved 25 April 2012.
  32. ^ "Pepper.wiki". 24 February 2012. Retrieved 25 April 2012.
  33. ^ "Release Notes".
  34. ^ Metz, Cade (13 May 2010). "Google heats up native code for Chrome OS". Theregister.co.uk. Retrieved 25 April 2012.
  35. ^ Anthony Laforge (10 August 2020). "Changes to the Chrome App Support Timeline". Chromium Blog.
  36. ^ Zbarsky, Boris. "Bug 729481 - Support the "Pepper" Plugin api". Retrieved 15 April 2016.
  37. ^ Metz, Cade (3 October 2016). "Project Mortar". Mozilla. Retrieved 30 October 2016.
  38. ^ "The Go Playground".
  39. ^ "Inside the Go Playground - The Go Blog". blog.golang.org. Retrieved 27 August 2016.
  40. ^ Austin, Chad (8 January 2011). "Chad Austin: In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine)". Chadaustin.me. Retrieved 25 April 2012.
  41. ^ Carmack, John (3 August 2012). "QuakeCon 2012". youtube.com. Retrieved 26 August 2012.
  42. ^ Metz, Cade (24 June 2010). "Mozilla: Our browser will not run native code". The Register. Retrieved 25 April 2012.
  43. ^ "Beta release of PHP 7.2 in the Google App Engine standard environment Hacker News".
  44. ^ "Google/Gvisor". GitHub. 15 October 2021.
  45. ^ Avram, Abel (31 May 2017). "Google Is to Remove Support for PNaCl". InfoQ. Retrieved 1 August 2020. As a replacement, Google is now pushing WebAssembly.

외부 링크