I don’t know if anyone is following Unison but it looks awesome and I can’t help thinking as I learn more about it that it really shares a lot of the same ideas as IPFS. I haven’t figured out if they have a distribution mechanism yet or if it’s all local but if they don’t putting somewhat like that onto IPFS would be amazing.
From their docs
Unison definitions are identified by content. Each Unison definition is some syntax tree, and by hashing this tree in a way that incorporates the hashes of all that definition’s dependencies, we obtain the Unison hash which uniquely identifies that definition.
Sounds like IPFS for code to me. IPPL. Inter Planetary Programming Language?
Basically they are similar.
IPFS has blobs addressed by hash and “pinning” mechanism for users to ensure of availability.
And Unison has functions addressed by hash and has “Codebase Manager”.
I wonder if Unison’s hash function can be replaced by the one of IPFS?
It would also be nice if it used WASM so it wasn’t tied to a single language although I’m not sure where the WebAssembly components specification is at the moment. I’ve been keeping an eye on WAPM as something to try running over IPFS for something similar and am looking forward to Unixfsv2 support for permissions so it’s easier to run executables from IPFS.
I don’t think a specific choice of language/bytecode should be made.
Instead, I would define some execution protocol over content-addressable references (such as IPFS address).
For example, file on IPFS can look like: [a wasm protocol identifier / signature] + [bytecode]
Or: “[unix program] + [#!/bin/bash \n echo ok]”
Or: “[unison] + [unison reference]”
Seems interesting. However, how can we check that a peer on the marketplace has executed the particular bytecode we want, not some other bytecode? It’s not possible to deduce that from the execution result as there is no “reference result” before an execution is done.
It would also be nice if it used WASM so it wasn’t tied to a single language
The Polywrap project may be of interest to you. https://polywrap.io/ is a wasm toolchain that currently supports AssemblyScript & Rust. The modules can be run in node.js & browser apps, and soon in Python + Rust. Additionally “wrappers” can be stored on IPFS, and run on-demand at runtime.