diff --git a/.gitignore b/.gitignore
index eb5a316cbd195d26e3f768c7dd8e1b47299e17f8..2273413d849d3d37bded0a233700f5d2f1fe9364 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
 target
+*~
+
+embed/node_modules
diff --git a/embed/Cargo.lock b/embed/Cargo.lock
new file mode 100644
index 0000000000000000000000000000000000000000..eefe950cdabc9ebabbc47f267294e7e4dcebb7f5
--- /dev/null
+++ b/embed/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "embed"
+version = "0.1.0"
+
diff --git a/embed/Cargo.toml b/embed/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..7d419e4008b48ef26ce520313add44063d992f38
--- /dev/null
+++ b/embed/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "embed"
+version = "0.1.0"
+authors = ["Anders Nilsson <anders.nilsson@control.lth.se>"]
+
+[lib]
+name ="embed"
+crate-type = ["dylib"]
diff --git a/embed/embed.js b/embed/embed.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7eafb268fe28cc84712486639a0c220423f6982
--- /dev/null
+++ b/embed/embed.js
@@ -0,0 +1,9 @@
+var ffi = require('ffi');
+
+var lib = ffi.Library('../target/release/libembed', {
+  'process': ['void', []]
+});
+
+lib.process();
+
+console.log("done!");
diff --git a/embed/embed.py b/embed/embed.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c0596031b2ce7fd8182985f7bbdf4f8662027ab
--- /dev/null
+++ b/embed/embed.py
@@ -0,0 +1,7 @@
+from ctypes import cdll
+
+lib = cdll.LoadLibrary("../target/release/libembed.so")
+
+lib.process()
+
+print("done!")
diff --git a/embed/embed.rb b/embed/embed.rb
new file mode 100644
index 0000000000000000000000000000000000000000..964bceba99b7f533b97c81e2ab31a61dc3cba366
--- /dev/null
+++ b/embed/embed.rb
@@ -0,0 +1,11 @@
+require 'ffi'
+
+module Hello
+  extend FFI::Library
+  ffi_lib '../target/release/libembed.so'
+  attach_function :process, [], :void
+end
+
+Hello.process
+
+puts 'done!'
diff --git a/embed/src/lib.rs b/embed/src/lib.rs
new file mode 100644
index 0000000000000000000000000000000000000000..b9f454c7283f68c694b3e5773634635935366d4d
--- /dev/null
+++ b/embed/src/lib.rs
@@ -0,0 +1,19 @@
+use std::thread;
+
+#[no_mangle]
+pub extern fn process() {
+    let handles: Vec<_> = (0..10).map(|_| {
+        thread::spawn(|| {
+            let mut x = 0;
+            for _ in (0..15_000_000) {
+                x += 1
+            }
+            x
+        })
+    }).collect();
+
+    for h in handles {
+        println!("Thread finished with count={}",h.join().map_err(|_|"Could not join a thread!").unwrap());
+    }
+    println!("done!");
+}
diff --git a/embed/toy.rb b/embed/toy.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ff109a0348bf859db4e1db8bab398c69e5675fc7
--- /dev/null
+++ b/embed/toy.rb
@@ -0,0 +1,18 @@
+threads = []
+
+10.times do
+  threads << Thread.new do
+    count = 0
+
+    15_000_000.times do
+      count += 1
+    end
+
+    count
+  end
+end
+
+threads.each do |t|
+  puts "Thread finished with count=#{t.value}"
+end
+puts "done!"