1*cc02d7e2SAndroid Build Coastguard Worker# SSL in gRPC and performance 2*cc02d7e2SAndroid Build Coastguard Worker 3*cc02d7e2SAndroid Build Coastguard WorkerThe SSL requirement of gRPC isn't necessarily making it easy to integrate. The HTTP/2 protocol requires ALPN support, which is a fairly new handshake protocol only supported by recent implementations. 4*cc02d7e2SAndroid Build Coastguard Worker 5*cc02d7e2SAndroid Build Coastguard WorkerAs a result, we've tried hard to provide a smooth experience to our users when compiling and distributing gRPC, but this may come at performance costs due to this. More specifically, we will sometime build the SSL library by disabling assembly code 6*cc02d7e2SAndroid Build Coastguard Worker(by setting the `OPENSSL_NO_ASM` option), which can impact performance by an order of magnitude when processing encrypted streams. 7*cc02d7e2SAndroid Build Coastguard Worker 8*cc02d7e2SAndroid Build Coastguard Worker## gRPC C++: Building from Source 9*cc02d7e2SAndroid Build Coastguard Worker 10*cc02d7e2SAndroid Build Coastguard WorkerBuild system | Condition | Platform | Uses assembly optimizations 11*cc02d7e2SAndroid Build Coastguard Worker---|---|---|-- 12*cc02d7e2SAndroid Build Coastguard WorkerMakefile | with OpenSSL 1.0.2 development files | all | :heavy_check_mark: 13*cc02d7e2SAndroid Build Coastguard WorkerMakefile | all other cases | all | :x: 14*cc02d7e2SAndroid Build Coastguard WorkerBazel | | Linux | :heavy_check_mark: 15*cc02d7e2SAndroid Build Coastguard WorkerBazel | | MacOS | :heavy_check_mark: 16*cc02d7e2SAndroid Build Coastguard WorkerBazel | | Windows | :x: 17*cc02d7e2SAndroid Build Coastguard WorkerCMake | boringssl from submodule (default) | Linux or MacOS | :heavy_check_mark: 18*cc02d7e2SAndroid Build Coastguard WorkerCMake | boringssl from submodule (default), generator=Ninja | Windows | :heavy_check_mark: 19*cc02d7e2SAndroid Build Coastguard WorkerCMake | boringssl from submodule (default), generator=Visual Studio | Windows | :x: 20*cc02d7e2SAndroid Build Coastguard WorkerCMake | pre-installed OpenSSL 1.0.2+ (`gRPC_SSL_PROVIDER=package`) | all | :heavy_check_mark: 21*cc02d7e2SAndroid Build Coastguard Worker 22*cc02d7e2SAndroid Build Coastguard Worker## Other Languages: Binary/Source Packages 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard WorkerIn addition, we are shipping packages for language implementations. These packages are source packages, but also have pre-built binaries being distributed. Building packages from source may give a different result in some cases. 25*cc02d7e2SAndroid Build Coastguard Worker 26*cc02d7e2SAndroid Build Coastguard WorkerLanguage | From source | Platform | Uses assembly optimizations 27*cc02d7e2SAndroid Build Coastguard Worker---|---|---|--- 28*cc02d7e2SAndroid Build Coastguard WorkerC# | n/a | Linux, 64bit | :heavy_check_mark: 29*cc02d7e2SAndroid Build Coastguard WorkerC# | n/a | Linux, 32bit | :x: 30*cc02d7e2SAndroid Build Coastguard WorkerC# | n/a | MacOS | :heavy_check_mark: 31*cc02d7e2SAndroid Build Coastguard WorkerC# | n/a | Windows | :heavy_check_mark: 32*cc02d7e2SAndroid Build Coastguard WorkerNode.JS | n/a | Linux | :heavy_check_mark: 33*cc02d7e2SAndroid Build Coastguard WorkerNode.JS | n/a | MacOS | :heavy_check_mark: 34*cc02d7e2SAndroid Build Coastguard WorkerNode.JS | n/a | Windows | :x: 35*cc02d7e2SAndroid Build Coastguard WorkerElectron | n/a | all | :heavy_check_mark: 36*cc02d7e2SAndroid Build Coastguard WorkerObjC | Yes | iOS | :x: 37*cc02d7e2SAndroid Build Coastguard WorkerPHP | Yes | all | Same as the `Makefile` case from above 38*cc02d7e2SAndroid Build Coastguard WorkerPHP | No | all | :x: 39*cc02d7e2SAndroid Build Coastguard WorkerPython | n/a | Linux, 64bit | :heavy_check_mark: 40*cc02d7e2SAndroid Build Coastguard WorkerPython | n/a | Linux, 32bit | :x: 41*cc02d7e2SAndroid Build Coastguard WorkerPython | n/a | MacOS, 64bit | :heavy_check_mark: 42*cc02d7e2SAndroid Build Coastguard WorkerPython | n/a | MacOS, 32bit | :x: 43*cc02d7e2SAndroid Build Coastguard WorkerPython | n/a | Windows | :x: 44*cc02d7e2SAndroid Build Coastguard WorkerRuby | No | all | :x: 45