Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WASI support? #10

Closed
Widdershin opened this issue May 10, 2019 · 13 comments
Closed

WASI support? #10

Widdershin opened this issue May 10, 2019 · 13 comments

Comments

@Widdershin
Copy link

Hi 👋

Excellent initiative, great to see more Wasm runtimes from experienced vendors.

I was hoping to find out what your feelings/plans are around supporting WASI, Mozilla’s proposed systems interface for Wasm applications.

Thanks again for this project 🙂

@PerArneng
Copy link

Agree. Its very important that standards are created at this time. If you build standards great things happen. Wasm itself is proof of that. Wasi is a good idea and its important that more organisations get behind it.

@xwang98
Copy link
Member

xwang98 commented May 10, 2019

@Widdershin @PerArneng ,
Thanks for bringing the WASI to us. We are interested in WASI and agree that it is important for enabling cross platforms support for wasm applications.

There are some technical questions though when we look at the current WASI api definition below:
https://github.com/CraneStation/wasmtime/blob/master/docs/WASI-api.md

It looks the definitions are more targeting file IO for the desktop and server platforms, not for embedded systems. For example, in an embedded controller usually there is no file system.

Maybe we can defined a profile of WASI for embedded environment?

@lukewagner
Copy link

lukewagner commented May 13, 2019

One of the goals of WASi (described here) is to be modular, with APIs grouped into discrete modules so that a host environment can implement only the modules that make sense on that host. It's still very early in WASI's development, but I think it's likely that the WASI core will be partitioned so that file IO would be in a separate module that embedded environments could choose not to implement.

@beriberikix
Copy link
Contributor

There is a reference implementation of wasi-libc. I believe it could replace the current subset implementation, based on the methods in common. That might be all that's needed to support WASI. @sunfishcode?

@sunfishcode
Copy link
Member

Are you referring to the libc APIs descriped here? If so, then yes, WASI libc does contain implementations of all of those functions.

@Kevin0626
Copy link
Contributor

This project is required to work within 300K memory budget, including the memory used for holding runtime binary. So the footprint and memory usage is a high priority design goal. To save the memory for holding those libc functions, we just selected to export the native string functions to WASM application rather than compiling them into the WASM bytecode.

@sunfishcode Hi Dan, we are working together with Josh. Maybe we can schedule a meeting for sharing the projects and discussing how to collaborate on WASI standard.

cmickeyb pushed a commit to cmickeyb/wasm-micro-runtime that referenced this issue Aug 19, 2019
@xwang98
Copy link
Member

xwang98 commented Nov 27, 2019

supported on Linux now.

@xwang98 xwang98 closed this as completed Nov 27, 2019
@beriberikix
Copy link
Contributor

While the issue was more general about WASI, is there plans for support to other hosts like Zephyr?

@xwang98
Copy link
Member

xwang98 commented Nov 28, 2019

The problem for WASI support on Zephyr is that embedded OS like Zephyr doesn't have standard file IO implementation. It is usually project based decision on what fs middleware to be used.

@xwang98
Copy link
Member

xwang98 commented Nov 28, 2019

@yiting16, do you have any plan to implement the WASI for Vxworks?

@beriberikix
Copy link
Contributor

Agreed, but as I understand it Zephyr includes a filesystem abstraction which could be leveraged!

@xwang98
Copy link
Member

xwang98 commented Nov 28, 2019

@beriberikix thanks for sending this reference! we didn't notice that! we will keep watching it.

@yiting16
Copy link
Contributor

yiting16 commented Nov 28, 2019 via email

wenyongh added a commit that referenced this issue Mar 5, 2020
add support for AliOS Things (#34)
yamt added a commit to yamt/wasm-micro-runtime that referenced this issue Dec 25, 2023
At least it's sometimes useful for nuttx sim.

eg.
```
    spacetanuki% lldb ./nuttx
    (lldb) target create "./nuttx"
    Current executable set to '/Users/yamamoto/git/nuttx/nuttx/nuttx' (x86_64).
    (lldb) settings set plugin.jit-loader.gdb.enable on
    (lldb) b foo
    Breakpoint 1: no locations (pending).
    WARNING:  Unable to resolve breakpoint to any actual locations.
    (lldb) r
    Process 37011 launched: '/Users/yamamoto/git/nuttx/nuttx/nuttx' (x86_64)

    NuttShell (NSH) NuttX-10.4.0
    nsh> mount -t hostfs -o fs=/tmp/wasm /mnt
    nsh> iwasm /mnt/test.aot
    1 location added to breakpoint 1
    Process 37011 stopped
    * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
        frame #0: 0x0000000105800673 JIT(0x1058002d4)`foo(exenv=0x0000000101284280) at test.c:5
       2
       3    __attribute__((noinline))
       4    void foo()
    -> 5    {
       6        printf("hello from %s\n", __func__);
       7    }
       8
    Target 0: (nuttx) stopped.
    (lldb) bt
    * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
      * frame #0: 0x0000000105800673 JIT(0x1058002d4)`foo(exenv=0x0000000101284280) at test.c:5
        frame #1: 0x000000010580077a JIT(0x1058002d4)`bar(exenv=0x0000000101284280) at test.c:12:2
        frame bytecodealliance#2: 0x000000010580086a JIT(0x1058002d4)`baz(exenv=0x0000000101284280) at test.c:19:2
        frame bytecodealliance#3: 0x0000000105800972 JIT(0x1058002d4)`__main_argc_argv(exenv=<unavailable>, argc=<unavailable>, argv=<unavailable>) at test.c:26:3
        frame bytecodealliance#4: 0x00000001058061aa JIT(0x1058002d4)`aot_func#14 + 278
        frame bytecodealliance#5: 0x00000001058005cd JIT(0x1058002d4)`aot_func#2 + 153
        frame bytecodealliance#6: 0x00000001000e250f nuttx`push_args_end at invokeNative_em64.s:61
        frame bytecodealliance#7: 0x000000010013851a nuttx`wasm_runtime_invoke_native(exec_env=0x0000000101284280, func_ptr=0x0000000105800534, func_type=0x00000001011e2e20, signature=0x0000000000000000, attachment=0x0000000000000000, argv=0x0000000000000000, argc=0, argv_ret=0x0000000000000000) at wasm_runtime_common.c:4631:9
        frame bytecodealliance#8: 0x00000001000da1ae nuttx`aot_call_function(exec_env=0x0000000101284280, function=0x00000001011e1fb0, argc=0, argv=0x0000000000000000) at aot_runtime.c:1654:15
        frame bytecodealliance#9: 0x0000000100134b56 nuttx`wasm_runtime_call_wasm(exec_env=0x0000000101284280, function=0x00000001011e1fb0, argc=0, argv=0x0000000000000000) at wasm_runtime_common.c:2048:15
        frame bytecodealliance#10: 0x00000001000fbad4 nuttx`execute_main(module_inst=0x00000001011e3890, argc=1, argv=0x00000001011b63f8) at wasm_application.c:112:15
        frame bytecodealliance#11: 0x00000001000fb995 nuttx`wasm_application_execute_main(module_inst=0x00000001011e3890, argc=1, argv=0x00000001011b63f8) at wasm_application.c:238:11
        frame bytecodealliance#12: 0x00000001000ea1a0 nuttx`app_instance_main(module_inst=0x00000001011e3890) at main.c:113:5
        frame bytecodealliance#13: 0x00000001000e9d60 nuttx`iwasm_main(argc=1, argv=0x00000001011b63f8) at main.c:947:21
        frame bytecodealliance#14: 0x0000000100023275 nuttx`nxtask_startup(entrypt=(nuttx`iwasm_main at main.c:545), argc=2, argv=0x00000001011b63f0) at task_startup.c:70:8
        frame bytecodealliance#15: 0x000000010001065a nuttx`nxtask_start at task_start.c:134:7
        frame bytecodealliance#16: 0x000000010003a15f nuttx`pre_start at sim_initialstate.c:52:3
    (lldb)

```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants