WasmEdge

WasmEdge is a lightweight, high-performance, and extensible WebAssembly runtime for cloud native, edge, and decentralized applications. It powers serverless apps, embedded functions, microservices, smart contracts, and IoT devices.

APACHE-2.0 License

Stars
8K
Committers
187

Bot releases are hidden (Show)

WasmEdge - SSVM 0.7.1

Published by q82419 almost 4 years ago

0.7.1 (2020-11-06)

Features:

Refactor:

  • Refactor symbols in AOT.
    • Removed the symbols in instances.
    • Added instrinsics table for dynamic linking when running a compiled wasm.
  • Merged the program counter into stack manager.
  • Added back the OpCode::End instruction.
  • Refactored the validator workflow of checking expressions.
  • Used std::bitset for VM configuration.
  • Used std::array for cost table storage.
  • Conbined include/support into include/common.
    • Merged support/castng.h into common/types.h.
    • Merged Measurement into Statistics.
    • Renamed support/time.h into common/timer.h. Used standard steady clock instead.
    • Renamed common/ast.h into common/astdef.h.
    • Moved common/ast/ to ast/.
    • Removed the SSVM::Support namespace.

Tests:

  • Applied new test suite of the reference types and bulk memory operation proposal for AOT.
WasmEdge - SSVM 0.7.0

Published by q82419 about 4 years ago

0.7.0 (2020-10-16)

Features:

  • Applied the reference types and bulk memory operations proposal.
    • Added the definition of reference types.
      • Added helper functions for function index to funcref conversions.
      • Added helper functions for reference to externref conversions.
    • Added the following new instructions.
      • Reference instructions:
        • ref.null
        • ref.is_null
        • ref.func
      • Table instructions:
        • table.get
        • table.set
        • table.init
        • elem.drop
        • table.copy
        • table.grow
        • table.size
        • table.fill
      • Memory instructions:
        • memory.init
        • data.drop
        • memory.copy
        • memory.fill
      • Parametric instructions:
        • select t
    • Updated implementation of the following instructions.
      • call_indirect
      • select
    • Applied the new definition of data count section, data segment, and element segment.
    • Applied validation for data segment and element segment.
    • Added the data instance and element instance.
    • Applied the new instantiation flow.

Refactor:

  • Completed the enumeration value checking in the loading phase.
  • Updated the value type definition.
    • ValType is updated to include NumType and RefType.
    • NumType is updated to include i32, i64, f32, and f64.
    • RefType is updated to include funcref and externref, which replaced the ElemType.
  • Updated error codes according to the test suite for the reference types proposal.
  • Extended validation context for recording datas, elements, and refs.
  • Updated runtime structures.
    • Fixed minimum pages definition in memory instance.
    • Applied new definitions of table instance.
    • Extended module instance for placing data instance and element instance.
    • Extended store for owning data instance and element instance.
  • Updated template typename aliasing in interpreter.

Tests:

WasmEdge - SSVM 0.6.9

Published by q82419 about 4 years ago

0.6.9 (2020-10-16)

Features:

  • Added gas and instruction count measurement in AOT.
WasmEdge - SSVM 0.6.8

Published by q82419 about 4 years ago

0.6.8 (2020-10-05)

Features:

  • Supported loop parameters in AOT.
  • Added optimization level settings in the AOT compiler.

Refactor:

  • Applied page based allocation in memory instance, instead of preserving 4G at once.

Fixed Issues:

  • Fixed error marking stdin, stdout, and stderr file descriptor as pre-opened when initializing WASI environment.
  • Fixed ssvm_process error handling when execution commands.
    • Print error message when command not found or permission denied.
    • Fixed casting of return codes.

Tests:

  • Split the core test to helper class for supporting AOT core tests in the future.
WasmEdge - SSVM 0.6.7

Published by q82419 about 4 years ago

0.6.7 (2020-09-09)

This is a bug-fix release for the ssvm_process component.

Fixed Issues:

  • Handle the large size writing to pipe in ssvm_process.
WasmEdge - SSVM 0.6.6

Published by q82419 about 4 years ago

0.6.6 (2020-09-02)

Features:

  • Add option for dumping LLVM IR in ssvmc.
  • Add SSVM_Process configuration.
    • VM with this option will import ssvm_process host modules.
    • ssvm_process host functions are SSVM extension for executing commands.
    • This host module is to support wasm compiled from rust with rust_process_interface_library crate..
  • Turn on SSVM_Process configuration in both ssvmr and ssvm.

Refactor:

  • Apply mprotect memory boundary checking in memory instance.

Fixed Issues:

  • Prevent undefined behavior on shift operations in interpreter and file manager.
WasmEdge - SSVM 0.6.5

Published by q82419 about 4 years ago

0.6.5 (2020-08-21)

Features:

  • Support WebAssembly reactor mode in both ssvmr and ssvm.

Refactor:

  • Use vector instead of deque in Validator.

Fixed Issues:

  • Fixed cost table to support 2-byte instructions.
  • Resolved warnings about signed and unsigned comparing.
  • Fixed printing error about hex strings in error messages.
  • Corrected memory boundary logging in error messages.
  • Ignore SIGINT when ssvm is forced interrupted.

Tests:

  • Add ssvm-aot tests.

Tools:

  • Updated ssvm interpreter.
    • ssvm provides interpreter mode of executing wasm.
    • The usage of ssvm is the same as ssvmr.
    • Added STATIC_BUILD mode for linking std::filesystem statically.
WasmEdge - SSVM 0.6.4

Published by hydai about 4 years ago

0.6.4 (2020-07-30)

This is a bug-fix release for the warnings.

Fixed Issues:

  • Resolved warnings with compilation flag -Wall.
  • Add -Wall flag in CMakeFile.

Refactor:

  • Refactored instruction classes for supporting 2-byte instructions.
  • Refined corresponding switch cases in validator, interpreter, and AOT.
WasmEdge - SSVM 0.6.3

Published by hydai about 4 years ago

This is a bug-fix release for the wasi component.

Fixed Issues:

  • Change the fd number remap mechanism from static offset to dynamic map.
WasmEdge - SSVM 0.6.2

Published by hydai about 4 years ago

0.6.2 (2020-07-22)

Features:

  • New target support:
    • Add aarch64 target support for both ssvm-interpreter and ssvm-aot tools.
  • Wasm spec 1.1 support:
    • Implement multi-value return proposal.
    • Implement signed extension and saturated convert instructions.
      • i32.extend8_s
      • i32.extend16_s
      • i64.extend8_s
      • i64.extend16_s
      • i64.extend32_s
      • i32.trunc_sat_f32_s
      • i32.trunc_sat_f32_u
      • i32.trunc_sat_f64_s
      • i32.trunc_sat_f64_u
      • i64.trunc_sat_f32_s
      • i64.trunc_sat_f32_u
      • i64.trunc_sat_f64_s
      • i64.trunc_sat_f64_u
  • Wasm spec test suites support:
    • Add ssvm-unittest toolkit for integrating wasm spec test suites.
    • Enable assert_invalid tests
  • Wasi support:
    • Enable environ variables support:
      • add --env option for environment variables.
      • allow developers to append more environment variables from a given env list, e.g. PATH=/usr/bin, SHELL=ZSH.
    • Enable preopens support:
      • add --dir option for preopens directories.
      • allow developers to append more preopens directories from a given dir list, e.g. /sandbox:/real/path, /sandbox2:/real/path2.
  • New Statistics API:
    • With statistics class, developers can get the following information after each execution:
      • Total execution time in us. (= Wasm instruction execution time + Host function execution time)
      • Wasm instruction execution time in us.
      • Host function execution time in us. A host function can be a evmc function like evmc::storage_get, a wasi function like random_get, or any customized host function.
      • Instruction count. (Total executed instructions in the previous round.)
      • Total gas cost. (Execution cost by applying ethereum-flavored wasm cost table.)
      • Instruction per second.
  • Validator:
    • Support Wasm 1.1 instructions validation.
    • Support blocktype check which is used in multi-value return proposal.
  • Logging system:
    • Support 2-byte instructions.

Refactor:

  • Remove redundant std::move in return statements.

Fixed Issues:

  • Fix std::filesystem link issue in ssvm-aot tool.
  • Fix -Wreorder warnings in errinfo.h
  • Fix several implementation errors in wasi functions.

Tools:

  • CI: Update base image from Ubuntu 18.04 to Ubuntu 20.04
WasmEdge - SSVM 0.6.1

Published by hydai over 4 years ago

0.6.1 (2020-06-24)

Features:

  • Error Logging System
    • Add information structures to print information when error occurs.
    • Apply error logging in every phases.

Refactor:

  • Internal tuple span mechanism
    • Apply C++20 span features instead of std::vector &.
  • Internal string passing mechanism
    • Apply C++17 std::string_view for passing strings.
  • Move enumeration definitions
    • Add string mapping of types, instructions, and AST nodes.
    • Move enumerations to SSVM top scope.
  • Memory instance passing in host functions
    • Pass pointer instead of reference of memory instance to allow nullptr.

Fixed Issues:

  • Instantiation Phase
    • Fixed boundary checking bugs when initializing data sections.
  • Function invokation
    • Add dummy frame when invoking function from VM.
WasmEdge - SSVM 0.6.0

Published by hydai over 4 years ago

0.6.0 (2020-06-08)

Features:

  • Building System
    • Add cmake option SSVM_DISABLE_AOT_RUNTIME to disable building ahead of time compilation mode.
  • Wasm AST
    • Add support of multiple partition of sections in wasm module.
  • AOT
    • Add SSVM-AOT tools.

Tools:

  • SSVM-AOT
    • Enable to compile and run separatedly.
    • Enable to run compiled module and normal module with interpreter.

Refactor:

  • Internal tuple span mechanism
    • Apply C++20 span features in host functions.
  • Internal error handling mechanism
    • Apply non-exception version of expected.
  • Refine cmake files
    • Update file copying macro in CMakeFile to support resursively copying.
    • Refine include paths and dependencies in every static libraries.
    • Modularize static libraries to be included as submodules easier.
  • Interpreter
    • Use function address in Store for invoking instead of exported function name.
    • Support invokation of a host function.
  • Host functions
    • Return Expect instead of ErrCode in host functions.
    • Return function return values in Expect class rather than in function parameter.
  • New VM APIs
    • Add routine to invoke a function of registered and named module in Store.
    • Removed old executor and use interpreter instead.
    • Renamed ExpVM to VM and removed the old one.
    • Apply new VM to all tools.
  • AOT
    • Integrated into new VM API and HostFunctions
    • Generate minimum machine code for nearestint instructions.

Fixed Issues:

  • Loader
    • Add checking Wasm header and version when loading.
  • Validation
    • Fix export section checking to support "" function name.
    • Fix type transforming when function invokation and returning.
  • Runtime Data Structure
    • Fix wrong table resizing when initialization in table instance.
  • Interpreter
    • Instantiation
      • Fix instantiation steps of data and element sections.
      • Check memory and table instances boundary according to Wasm spec.
      • Not to replace data in memory and table instances until all checkings were done.
    • Engine
      • Fix wrong arity assignment in loop instruction.
      • Fix wrong answer issue in trunc and clz instructions.
      • Fix logic of div instruction in both integer and floating point inputs.
      • Fix wrong handling of NaN oprend in min and max instructions.
      • Add dummy frame before function invokation according to Wasm spec.
      • Add memory boundary checking when loading value in memory instructions.
  • AOT
    • Fix wrong handling of minimum oprend in mod instructions.
    • Fix wrong handling of NaN oprend in min and max instructions.

Tests:

  • Remove ssvm-evmc tests.
  • (Experimental) Add unit tests for C++ span feature.

Deprecated:

  • SSVM-Proxy is removed.
  • SSVM-EVMC is removed.
    • SSVM-EVMC is separated from this project as an independent repository.
WasmEdge - SSVM 0.5.1

Published by hydai over 4 years ago

0.5.1 (2020-04-09)

SSVM 0.5.1 is a bug-fix release from 0.5.0.

  • Issues:
    • Set correct reset timing of the interpreter.
    • Fix data copying in table instance in the instanciation phase.
    • Fix label popping in stack manager.
WasmEdge - SSVM 0.5.0

Published by hydai over 4 years ago

0.5.0 (2020-04-01)

Features:

  • Ethereum environment interface
  • Validation
    • Completed validations for wasm sections.
    • Completed checkings in const expressions.
  • Runtime Wasm module registering
    • WASM modules can be registered into Store for importing.
    • Host modules, which may contain host functions and globals, can be registered into Store.
  • (Experimental) New VM APIs
    • New VM is refactoring from legacy’s VM and provides a rapidly running process for WASM.
    • Export Store for external access.
  • Node.js addon
    • Integrate SSVM with Node.js Addon API.
    • SSVM Node.js addon is separated from this project as an independent repository.

Refactor:

  • Code structure layout
    • Create common namespace for cross-component data structures and type definitions.
    • Extract AST structures from ast to common.
    • Extract duplicate enumerations to common.
    • Collects all error code classes into common.
  • Internal error handling mechanism
    • Apply C++ p0323r9 expected features
    • Add several helper functions for wrapping return values with error code.
  • Wasm loader
    • Simplify workflow.
    • Take a wasm input and return an AST object directly.
  • Wasm validator
    • Simplify workflow.
    • Take an AST object and return the results.
    • Rename validator/vm to formchecker.
  • Refine runtime data structure
    • Extract instances, host functions, stack manager, and store manager classes to runtime folder.
    • Extract frame, label, and value entry classes into stack manager.
    • Delete redundant checks in stack manager. All of these checks are verified in the validation stage.
    • Add ImportObj class for handling the host modules registration.
  • Interpreter
    • Create interpreter namespace.
    • Extract executor class to interpreter.
    • Add instantiation methods for registering host modules.
  • Host functions
    • Create host namespace.
    • Extract EEI, Wasi-core, and ONNC host functions to host.
    • Make host functions construction in host modules.
    • Extract host environments from environment manager to respective host modules.
  • Refactoring from legacy VM.
    • Simplify workflow. Provide two approaches for invoking a wasm function.
      • All-in-one way: Calling runWasmFile can instantiate and invoke a wasm function directly.
      • Step-by-step way: Calling loadWasm, validate, instantiate, execute sequentially can make developers control the workflow manually.
    • External access APIs
      • Access exported wasm functions.
      • Export Store.
      • Export measurement data class including instruction counter, timer, and cost meter.
    • Provide registration API for wasm modules and host modules.
    • Extract host environments of EEI and Wasi-core into respective host modules.
    • Apply experimental VM to ssvm-proxy and ssvm-evmc tools.

Tools:

  • Remove unused ssvm-evm
    • ssvm-evm is replaced by ssvm-evmc.
  • (Experimental) Add sub-project ssvm-aot
    • ssvm-aot provides ahead-of-time(AOT) compilation mechanism for general wasm applications.

Tests:

  • Remove redundant ssvm-evm tests.
  • (Experimental) Add integration tests for ssvm-aot.
  • (Experimental) Add unit tests for C++ expected feature.
  • Move AST tests to the test top folder.

Fixed issues:

  • Ethereum Environment Interface
    • Fix function signatures.
    • Return fail instead of revert when the execution state is out of gas.
    • Handle memory edge case when loading and storing from memory instance.
    • Add missing check for evmc flags.
    • Set running code to evmc environment.
  • Complete import matching when instantiation in the interpreter.
  • Fix lost of validation when importing globals.
WasmEdge - SSVM 0.4.0

Published by hydai almost 5 years ago

0.4.0 (2020-01-17)

Features:

Refactor:

  • Host functions:
    • Use template to generate wasm function type of host function body.
    • Move function module name and function name to host function class.

Tools:

  • Sub-project EVM with evmc
    • SSVM-EVMC integrates EVMC and Ethereum Environment Interface(EEI).
    • SSVM-EVMC is a shared library for EVMC-compatible clients.

Tests:

  • ERC20 contracts for SSVM-EVMC
    • Create an example VM for testing.
    • Test the following functionalities of ERC20 contracts:
      • Deploy ERC20 contract
      • Check balance
      • Check total supply
      • Transfer
      • Approve
      • Check allowance
WasmEdge - SSVM 0.3.2

Published by hydai almost 5 years ago

0.3.2 (2020-01-09)

Fixed issues:

  • Handle empty length of memory in vm_snapshot.
  • Correct error message when execution failed in SSVM proxy mode.
WasmEdge - SSVM 0.3.1

Published by hydai almost 5 years ago

0.3.1 (2020-01-07)

This is a bugfix release.

Fixed issues:

  • Change the naming style of JSON format in SSVM proxy mode
    • Use snake case for the keys of JSON files instead
  • Change the arguements and return values formats.
    • Add argument_types and return_types in input JSON format.
  • Expand home directory path
    • Accept ~ in the file path
WasmEdge - SSVM 0.3.0

Published by hydai almost 5 years ago

0.3.0 (2019-12-27)

Features:

  • WebAssembly Validation
    • Implement Wasm Validation mechanism. SSVM will validate wasm modules before execution.
  • Snapshot and restore execution state
    • SSVM provides restore mechanism from the previous execution state.
    • SSVM provides snapshot mechanism to dump the current execution state.
  • JSON interface Spec
    • Initialize and set up SSVM via input JSON format.
    • Retrieve execution results via output JSON format.

Tools:

  • Sub-project RPC service proxy mode
    • SSVM-PROXY is a component of SSVMRPC service.
    • SSVM-PROXY can archive current execution states and serialize these data into output JSON format.
    • SSVM-PROXY can restore previous program states from input JSON format.
WasmEdge - SSVM 0.2.0

Published by hydai almost 5 years ago

0.2.0 (2019-12-18)

Features:

  • Native Cost Metering
    • SSVM provides CostTab for each instruction including Wasm, Wasi, Ewasm.
    • With this feature, users can set the cost limit for measuring the execution cost.
  • Built-in performance timer
    • TimeRecord collects execution time for the performance analysis.
    • TimeRecord supports multiple timers.
    • SSVM also provides Wasi timer API for developers to customize TimeRecord.
  • Multiple Virtual Machine Environment
    • Wasm mode: Support general Wasm program.
    • Wasi mode: In addition to Wasm mode, this mode contains basic Wasi functions like print.
    • QITC mode: In addition to Wasi mode, this mode is designed for ONNC runtime to execute AI models by leveraging Qualcomm Hexagon SDK.
    • Ewasm mode: In addition to Wasm mode, this mode is designed for Ethereum flavor WebAssembly.
  • Start functions enhancement
    • Support start function assignment. This makes users invoke an exported function with a given function name.
    • Support start function arguments and return value. This makes users can insert arguments and retrieve result after execution.
  • Simple statistics output
    • Dump total execution time and instruction per second for benchmarking.
    • Print used gas costs for Ewasm mode.
    • Print storage and return values.

Tools:

  • Sub-project Qualcomm Innovate in Taiwan Challenge(a.k.a QITC) 2019
    • SSVM-QITC enables AI model execution by integrating ONNC runtime and Qualcomm Hexagon SDK.
    • With this tool, users can run AI model inference within a WebAssembly Virtual Machine.
  • Sub-project Ethereum
    • SSVM-EVM integrates the Ethereum Environment Interface(EEI) as a WebAssembly extension.
    • With this tool, users can run blockchain applications, which are compiled into Ewasm bytecodes.
  • Sub-project General Wasi Support
    • SSVM tool provides basic Wasi functions support, such as print function.
WasmEdge - SSVM 0.1.0

Published by hydai almost 5 years ago

0.1.0 (2019-11-29)

Features:

  • Lexer: Support full wasm bytecode format
  • AST: Be able to load a wasm module
  • Instantiate: Support wasm module instantiation

Runtime:

  • Support Wasi-core functions
  • Support Ewasm functions

Test:

  • Support ERC20 token contracts