Native client is an open-source technology launched by Google in the browser field. It allows you to compile Web applications in the browser and execute native compiled code. Native client has the following advantages (refer to the official Google introduction in English ):
- Providing more graphics, audio, and other functions for the Web: Native 2D and 3D graphics rendering programs can be directly executed on the Web (useful for web games), playing audio and video, responding to mouse and keyboard events, and executing code in multiple threads, all of this requires no browser to install any plug-ins.
- Good portability: You only need to develop one piece of code for a web program, that is, it can be run on all platforms (including windows, Linux, Mac, and so on.
- High Security: Installing untrusted desktop program browser plug-ins may bring high security risks (such as Trojans and viruses ). The native client uses a sandbox design to protect users' local resources. The native client architecture ensures the security of web applications and achieves the same or similar performance as the original sound code.
- Easy migration from desktop: Many developers have made great efforts to develop desktop programs. With the arrival of cloud computing, more and more programs will be transplanted to the Internet, since NaCl supports direct execution of C/C ++/Java and other code, native Client technology can simplify the porting process and reduce the porting cost.
- High Performance: Native client allows web applications to run close to the performance of desktop applications, providing the foundation for running demanding programs in browsers, such as large 3D games.
Refer to the two articles:
About Google's native Client technology (I)-historical power (Development History of Local Web computing)
About Google's native client (NaCl) technology (II)-technology (llvm)
Mono has supported Naci technology since 2.10 (the open-source mono framework brings C # programming to iPhone, Android, and Wii), and unity 3.5 also supports NACI and getting started with native client development through mono. After nearly 2 years of development, yesterday's mono version code checked in an important Naci update, https://github.com/mono/mono/pull/538:
- Restore NaCl directory for this fork
- Add back temporary _ nacl_suspend_thread_if_needed to this fork
- Set up for building on teamcity.
- Zip up build results for teamcity
- Remove dependency to gettext
- Simple Random implementation for NaCl, so we don't get exceptions.
- Add x86_64 build.
- Cleanup.
- Updated readme instructions
- Don't use sgen for non-NaCl mono build for parity
- Brushing off some NaCl dust
- Remove hardcoded path
- NaCl working again post m14
- Fixes for NaCl
- Updated readme
- Merge remote branch 'upstream/master' into merge_head
- Fixups for NaCl at head Revision
- New Master script to build all for NaCl
- Add NaCl cross-compile target
- Fix up bugs in x86-codegen for NaCl, use 4.0 for regression tests
- Merge branch 'merge _ head'
- Wrap pthread_exit () with mono_gc_pthread_exit () Since NaCl requires it.
- No longer need boehm_defines in io-layer, pthread_exit is wrapped
- Fix NaCl GC deadlock
- -Fix NaCl aborting on Windows because of failed write CILS
- Update for new NaCl tool names, also preliminary glibc support.
- First pass NaCl glibc work
- More glibc NaCl work, builds shared library.
- Fix amd64_alu_reg_imm for NaCl (previous fix was over ambitious)
- Faster GC instrumentation for managed NaCl code.
- Compare pointers against 4 byte immediates
- Build with-O2 in native client x86-64.
- Merge pull request #1 from Pasko/Master
- Fix compile and validation errors in optimized build
- Fix Conv. ovf. I. UN Test for 64 bit NaCl
- Also fix convert I-> I and I-> U with no ovf
- Enable GC instrumentation with inlined if
- Add volatile qualifier to libgc stop the world.
- Brad's patch to bootstrap NaCl glibc
- Merge pull request #2 from zheka/Master
- Added _ nacl_thread_suspension_needed to dynamic exports.
- Force memory allocation to use MMAP
- Merge pull request #3 from zheka/Master
- Get rid of the alias to _ nacl_thread_suspension_needed
- Always use near_call = true in emit_call_body ().
- Merge pull request #4 from bradchen/Master
- Make size of immediate explicit in generating CMP instruction.
- Run fsacheck tests with data from high-memory
- Add 'laddcc'/'lsubcc' IR opcode to deal explicitly with long arguments
- Pass return valuetypes of non power of two size to their nearest power of two, previously defaulted to sizeof (gpointer) which is too small for 5, 6, and 7 byte types on ilp32 machines.
- Fix patch targets to newly installed methods for NaCl
- Make divide by zero checks explicit for native Client
- Pass typedbyref types the same as valuetype for amd64 NaCl because that's more appropriate for the Abi
- Fix BB max_offset for x86 NaCl
- Fix spaces/tabs from last commit
- Make explicit-Null-Checks default for mono IN NaCl (not embedded case), option to disable since the environment is mostly unusable
- Add NaCl-specific regression tests
- Support 'make check' for self-hosted NaCl mono in Mono/mini
- Self-host NaCl mono build
- Re-enable dlopen support in NaCl mono
- Enable 'make check' for NaCl on Root build directory:
- Add stderr output on nacl_dyncode_create failure, makes it easier to debug bad code
- Change readme contents since those instructions don't work anymore
- Add custom nacl_interp script for building/testing NaCl mono
- Make scripts work with slightly different paths from pepper_18.
- Use/bin/bash explicitly so the script runs properly
- Change install directory so it doesn' t modify the toolchain dir
- Disable AOT loadhook for native Client
- Initial NaCl/ARM work.
- Fix gmodule-unix.c (needed config. h for have_dlfcn_h)
- Merge upstream mono
- Fix NaCl build post-merge with upstream master