mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 20:22:25 -05:00 
			
		
		
		
	[experiment] add alternative wasm sqlite3 implementation available via build-tag (#2863)
This allows for building GoToSocial with [SQLite transpiled to WASM](https://github.com/ncruces/go-sqlite3) and accessed through [Wazero](https://wazero.io/).
This commit is contained in:
		
					parent
					
						
							
								cce21c11cb
							
						
					
				
			
			
				commit
				
					
						1e7b32490d
					
				
			
		
					 398 changed files with 86174 additions and 684 deletions
				
			
		
							
								
								
									
										132
									
								
								vendor/github.com/tetratelabs/wazero/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								vendor/github.com/tetratelabs/wazero/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,132 @@ | |||
| # wazero: the zero dependency WebAssembly runtime for Go developers | ||||
| 
 | ||||
| [](https://github.com/tetratelabs/wazero/actions/workflows/spectest.yaml) [](https://pkg.go.dev/github.com/tetratelabs/wazero) [](https://opensource.org/licenses/Apache-2.0) | ||||
| 
 | ||||
| WebAssembly is a way to safely run code compiled in other languages. Runtimes | ||||
| execute WebAssembly Modules (Wasm), which are most often binaries with a `.wasm` | ||||
| extension. | ||||
| 
 | ||||
| wazero is a WebAssembly Core Specification [1.0][1] and [2.0][2] compliant | ||||
| runtime written in Go. It has *zero dependencies*, and doesn't rely on CGO. | ||||
| This means you can run applications in other languages and still keep cross | ||||
| compilation. | ||||
| 
 | ||||
| Import wazero and extend your Go application with code written in any language! | ||||
| 
 | ||||
| ## Example | ||||
| 
 | ||||
| The best way to learn wazero is by trying one of our [examples](examples/README.md). The | ||||
| most [basic example](examples/basic) extends a Go application with an addition | ||||
| function defined in WebAssembly. | ||||
| 
 | ||||
| ## Runtime | ||||
| 
 | ||||
| There are two runtime configurations supported in wazero: _Compiler_ is default: | ||||
| 
 | ||||
| By default, ex `wazero.NewRuntime(ctx)`, the Compiler is used if supported. You | ||||
| can also force the interpreter like so: | ||||
| ```go | ||||
| r := wazero.NewRuntimeWithConfig(ctx, wazero.NewRuntimeConfigInterpreter()) | ||||
| ``` | ||||
| 
 | ||||
| ### Interpreter | ||||
| Interpreter is a naive interpreter-based implementation of Wasm virtual | ||||
| machine. Its implementation doesn't have any platform (GOARCH, GOOS) specific | ||||
| code, therefore _interpreter_ can be used for any compilation target available | ||||
| for Go (such as `riscv64`). | ||||
| 
 | ||||
| ### Compiler | ||||
| Compiler compiles WebAssembly modules into machine code ahead of time (AOT), | ||||
| during `Runtime.CompileModule`. This means your WebAssembly functions execute | ||||
| natively at runtime. Compiler is faster than Interpreter, often by order of | ||||
| magnitude (10x) or more. This is done without host-specific dependencies. | ||||
| 
 | ||||
| ### Conformance | ||||
| 
 | ||||
| Both runtimes pass WebAssembly Core [1.0][7] and [2.0][14] specification tests | ||||
| on supported platforms: | ||||
| 
 | ||||
| |   Runtime   |                 Usage                  | amd64 | arm64 | others | | ||||
| |:-----------:|:--------------------------------------:|:-----:|:-----:|:------:| | ||||
| | Interpreter | `wazero.NewRuntimeConfigInterpreter()` |   ✅   |   ✅   |   ✅    | | ||||
| |  Compiler   |  `wazero.NewRuntimeConfigCompiler()`   |   ✅   |   ✅   |   ❌    | | ||||
| 
 | ||||
| ## Support Policy | ||||
| 
 | ||||
| The below support policy focuses on compatibility concerns of those embedding | ||||
| wazero into their Go applications. | ||||
| 
 | ||||
| ### wazero | ||||
| 
 | ||||
| wazero's [1.0 release][15] happened in March 2023, and is [in use][16] by many | ||||
| projects and production sites. | ||||
| 
 | ||||
| We offer an API stability promise with semantic versioning. In other words, we | ||||
| promise to not break any exported function signature without incrementing the | ||||
| major version. This does not mean no innovation: New features and behaviors | ||||
| happen with a minor version increment, e.g. 1.0.11 to 1.2.0. We also fix bugs | ||||
| or change internal details with a patch version, e.g. 1.0.0 to 1.0.1. | ||||
| 
 | ||||
| You can get the latest version of wazero like this. | ||||
| ```bash | ||||
| go get github.com/tetratelabs/wazero@latest | ||||
| ``` | ||||
| 
 | ||||
| Please give us a [star][17] if you end up using wazero! | ||||
| 
 | ||||
| ### Go | ||||
| 
 | ||||
| wazero has no dependencies except Go, so the only source of conflict in your | ||||
| project's use of wazero is the Go version. | ||||
| 
 | ||||
| wazero follows the same version policy as Go's [Release Policy][10]: two | ||||
| versions. wazero will ensure these versions work and bugs are valid if there's | ||||
| an issue with a current Go version. | ||||
| 
 | ||||
| Additionally, wazero intentionally delays usage of language or standard library | ||||
| features one additional version. For example, when Go 1.29 is released, wazero | ||||
| can use language features or standard libraries added in 1.27. This is a | ||||
| convenience for embedders who have a slower version policy than Go. However, | ||||
| only supported Go versions may be used to raise support issues. | ||||
| 
 | ||||
| ### Platform | ||||
| 
 | ||||
| wazero has two runtime modes: Interpreter and Compiler. The only supported operating | ||||
| systems are ones we test, but that doesn't necessarily mean other operating | ||||
| system versions won't work. | ||||
| 
 | ||||
| We currently test Linux (Ubuntu and scratch), MacOS and Windows as packaged by | ||||
| [GitHub Actions][11], as well compilation of 32-bit Linux and 64-bit FreeBSD. | ||||
| 
 | ||||
| * Interpreter | ||||
|   * Linux is tested on amd64 (native) as well arm64 and riscv64 via emulation. | ||||
|   * MacOS and Windows are only tested on amd64. | ||||
| * Compiler | ||||
|   * Linux is tested on amd64 (native) as well arm64 via emulation. | ||||
|   * MacOS and Windows are only tested on amd64. | ||||
| 
 | ||||
| wazero has no dependencies and doesn't require CGO. This means it can also be | ||||
| embedded in an application that doesn't use an operating system. This is a main | ||||
| differentiator between wazero and alternatives. | ||||
| 
 | ||||
| We verify zero dependencies by running tests in Docker's [scratch image][12]. | ||||
| This approach ensures compatibility with any parent image. | ||||
| 
 | ||||
| ----- | ||||
| wazero is a registered trademark of Tetrate.io, Inc. in the United States and/or other countries | ||||
| 
 | ||||
| [1]: https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/ | ||||
| [2]: https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/ | ||||
| [4]: https://github.com/WebAssembly/meetings/blob/main/process/subgroups.md | ||||
| [5]: https://github.com/WebAssembly/WASI | ||||
| [6]: https://pkg.go.dev/golang.org/x/sys/unix | ||||
| [7]: https://github.com/WebAssembly/spec/tree/wg-1.0/test/core | ||||
| [9]: https://github.com/tetratelabs/wazero/issues/506 | ||||
| [10]: https://go.dev/doc/devel/release | ||||
| [11]: https://github.com/actions/virtual-environments | ||||
| [12]: https://docs.docker.com/develop/develop-images/baseimages/#create-a-simple-parent-image-using-scratch | ||||
| [13]: https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md | ||||
| [14]: https://github.com/WebAssembly/spec/tree/d39195773112a22b245ffbe864bab6d1182ccb06/test/core | ||||
| [15]: https://tetrate.io/blog/introducing-wazero-from-tetrate/ | ||||
| [16]: https://wazero.io/community/users/ | ||||
| [17]: https://github.com/tetratelabs/wazero/stargazers | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue