\documentclass[12pt,titlepage]{article} \usepackage{amsmath} \usepackage{mathrsfs} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsthm} \usepackage{mathtools} \usepackage{graphicx} \usepackage{color} \usepackage{ucs} \usepackage[utf8x]{inputenc} \usepackage{xparse} \usepackage{hyperref} %----Macros---------- % % Unresolved issues: % % \righttoleftarrow % \lefttorightarrow % % \color{} with HTML colorspec % \bgcolor % \array with options (without options, it's equivalent to the matrix environment) % Of the standard HTML named colors, white, black, red, green, blue and yellow % are predefined in the color package. Here are the rest. \definecolor{aqua}{rgb}{0, 1.0, 1.0} \definecolor{fuschia}{rgb}{1.0, 0, 1.0} \definecolor{gray}{rgb}{0.502, 0.502, 0.502} \definecolor{lime}{rgb}{0, 1.0, 0} \definecolor{maroon}{rgb}{0.502, 0, 0} \definecolor{navy}{rgb}{0, 0, 0.502} \definecolor{olive}{rgb}{0.502, 0.502, 0} \definecolor{purple}{rgb}{0.502, 0, 0.502} \definecolor{silver}{rgb}{0.753, 0.753, 0.753} \definecolor{teal}{rgb}{0, 0.502, 0.502} % Because of conflicts, \space and \mathop are converted to % \itexspace and \operatorname during preprocessing. % itex: \space{ht}{dp}{wd} % % Height and baseline depth measurements are in units of tenths of an ex while % the width is measured in tenths of an em. \makeatletter \newdimen\itex@wd% \newdimen\itex@dp% \newdimen\itex@thd% \def\itexspace#1#2#3{\itex@wd=#3em% \itex@wd=0.1\itex@wd% \itex@dp=#2ex% \itex@dp=0.1\itex@dp% \itex@thd=#1ex% \itex@thd=0.1\itex@thd% \advance\itex@thd\the\itex@dp% \makebox[\the\itex@wd]{\rule[-\the\itex@dp]{0cm}{\the\itex@thd}}} \makeatother % \tensor and \multiscript \makeatletter \newif\if@sup \newtoks\@sups \def\append@sup#1{\edef\act{\noexpand\@sups={\the\@sups #1}}\act}% \def\reset@sup{\@supfalse\@sups={}}% \def\mk@scripts#1#2{\if #2/ \if@sup ^{\the\@sups}\fi \else% \ifx #1_ \if@sup ^{\the\@sups}\reset@sup \fi {}_{#2}% \else \append@sup#2 \@suptrue \fi% \expandafter\mk@scripts\fi} \def\tensor#1#2{\reset@sup#1\mk@scripts#2_/} \def\multiscripts#1#2#3{\reset@sup{}\mk@scripts#1_/#2% \reset@sup\mk@scripts#3_/} \makeatother % \slash \makeatletter \newbox\slashbox \setbox\slashbox=\hbox{$/$} \def\itex@pslash#1{\setbox\@tempboxa=\hbox{$#1$} \@tempdima=0.5\wd\slashbox \advance\@tempdima 0.5\wd\@tempboxa \copy\slashbox \kern-\@tempdima \box\@tempboxa} \def\slash{\protect\itex@pslash} \makeatother % math-mode versions of \rlap, etc % from Alexander Perlis, "A complement to \smash, \llap, and lap" % http://math.arizona.edu/~aprl/publications/mathclap/ \def\clap#1{\hbox to 0pt{\hss#1\hss}} \def\mathllap{\mathpalette\mathllapinternal} \def\mathrlap{\mathpalette\mathrlapinternal} \def\mathclap{\mathpalette\mathclapinternal} \def\mathllapinternal#1#2{\llap{$\mathsurround=0pt#1{#2}$}} \def\mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}} \def\mathclapinternal#1#2{\clap{$\mathsurround=0pt#1{#2}$}} % Renames \sqrt as \oldsqrt and redefine root to result in \sqrt[#1]{#2} \let\oldroot\root \def\root#1#2{\oldroot #1 \of{#2}} \renewcommand{\sqrt}[2][]{\oldroot #1 \of{#2}} % Manually declare the txfonts symbolsC font \DeclareSymbolFont{symbolsC}{U}{txsyc}{m}{n} \SetSymbolFont{symbolsC}{bold}{U}{txsyc}{bx}{n} \DeclareFontSubstitution{U}{txsyc}{m}{n} % Manually declare the stmaryrd font \DeclareSymbolFont{stmry}{U}{stmry}{m}{n} \SetSymbolFont{stmry}{bold}{U}{stmry}{b}{n} % Manually declare the MnSymbolE font \DeclareFontFamily{OMX}{MnSymbolE}{} \DeclareSymbolFont{mnomx}{OMX}{MnSymbolE}{m}{n} \SetSymbolFont{mnomx}{bold}{OMX}{MnSymbolE}{b}{n} \DeclareFontShape{OMX}{MnSymbolE}{m}{n}{ <-6> MnSymbolE5 <6-7> MnSymbolE6 <7-8> MnSymbolE7 <8-9> MnSymbolE8 <9-10> MnSymbolE9 <10-12> MnSymbolE10 <12-> MnSymbolE12}{} % Declare specific arrows from txfonts without loading the full package \makeatletter \def\re@DeclareMathSymbol#1#2#3#4{% \let#1=\undefined \DeclareMathSymbol{#1}{#2}{#3}{#4}} \re@DeclareMathSymbol{\neArrow}{\mathrel}{symbolsC}{116} \re@DeclareMathSymbol{\neArr}{\mathrel}{symbolsC}{116} \re@DeclareMathSymbol{\seArrow}{\mathrel}{symbolsC}{117} \re@DeclareMathSymbol{\seArr}{\mathrel}{symbolsC}{117} \re@DeclareMathSymbol{\nwArrow}{\mathrel}{symbolsC}{118} \re@DeclareMathSymbol{\nwArr}{\mathrel}{symbolsC}{118} \re@DeclareMathSymbol{\swArrow}{\mathrel}{symbolsC}{119} \re@DeclareMathSymbol{\swArr}{\mathrel}{symbolsC}{119} \re@DeclareMathSymbol{\nequiv}{\mathrel}{symbolsC}{46} \re@DeclareMathSymbol{\Perp}{\mathrel}{symbolsC}{121} \re@DeclareMathSymbol{\Vbar}{\mathrel}{symbolsC}{121} \re@DeclareMathSymbol{\sslash}{\mathrel}{stmry}{12} \re@DeclareMathSymbol{\bigsqcap}{\mathop}{stmry}{"64} \re@DeclareMathSymbol{\biginterleave}{\mathop}{stmry}{"6} \re@DeclareMathSymbol{\invamp}{\mathrel}{symbolsC}{77} \re@DeclareMathSymbol{\parr}{\mathrel}{symbolsC}{77} \makeatother % \llangle, \rrangle, \lmoustache and \rmoustache from MnSymbolE \makeatletter \def\Decl@Mn@Delim#1#2#3#4{% \if\relax\noexpand#1% \let#1\undefined \fi \DeclareMathDelimiter{#1}{#2}{#3}{#4}{#3}{#4}} \def\Decl@Mn@Open#1#2#3{\Decl@Mn@Delim{#1}{\mathopen}{#2}{#3}} \def\Decl@Mn@Close#1#2#3{\Decl@Mn@Delim{#1}{\mathclose}{#2}{#3}} \Decl@Mn@Open{\llangle}{mnomx}{'164} \Decl@Mn@Close{\rrangle}{mnomx}{'171} \Decl@Mn@Open{\lmoustache}{mnomx}{'245} \Decl@Mn@Close{\rmoustache}{mnomx}{'244} \makeatother % Widecheck \makeatletter \DeclareRobustCommand\widecheck[1]{{\mathpalette\@widecheck{#1}}} \def\@widecheck#1#2{% \setbox\z@\hbox{\m@th$#1#2$}% \setbox\tw@\hbox{\m@th$#1% \widehat{% \vrule\@width\z@\@height\ht\z@ \vrule\@height\z@\@width\wd\z@}$}% \dp\tw@-\ht\z@ \@tempdima\ht\z@ \advance\@tempdima2\ht\tw@ \divide\@tempdima\thr@@ \setbox\tw@\hbox{% \raise\@tempdima\hbox{\scalebox{1}[-1]{\lower\@tempdima\box \tw@}}}% {\ooalign{\box\tw@ \cr \box\z@}}} \makeatother % \mathraisebox{voffset}[height][depth]{something} \makeatletter \NewDocumentCommand\mathraisebox{moom}{% \IfNoValueTF{#2}{\def\@temp##1##2{\raisebox{#1}{$\m@th##1##2$}}}{% \IfNoValueTF{#3}{\def\@temp##1##2{\raisebox{#1}[#2]{$\m@th##1##2$}}% }{\def\@temp##1##2{\raisebox{#1}[#2][#3]{$\m@th##1##2$}}}}% \mathpalette\@temp{#4}} \makeatletter % udots (taken from yhmath) \makeatletter \def\udots{\mathinner{\mkern2mu\raise\p@\hbox{.} \mkern2mu\raise4\p@\hbox{.}\mkern1mu \raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern1mu}} \makeatother %% Fix array \newcommand{\itexarray}[1]{\begin{matrix}#1\end{matrix}} %% \itexnum is a noop \newcommand{\itexnum}[1]{#1} %% Renaming existing commands \newcommand{\underoverset}[3]{\underset{#1}{\overset{#2}{#3}}} \newcommand{\widevec}{\overrightarrow} \newcommand{\darr}{\downarrow} \newcommand{\nearr}{\nearrow} \newcommand{\nwarr}{\nwarrow} \newcommand{\searr}{\searrow} \newcommand{\swarr}{\swarrow} \newcommand{\curvearrowbotright}{\curvearrowright} \newcommand{\uparr}{\uparrow} \newcommand{\downuparrow}{\updownarrow} \newcommand{\duparr}{\updownarrow} \newcommand{\updarr}{\updownarrow} \newcommand{\gt}{>} \newcommand{\lt}{<} \newcommand{\map}{\mapsto} \newcommand{\embedsin}{\hookrightarrow} \newcommand{\Alpha}{A} \newcommand{\Beta}{B} \newcommand{\Zeta}{Z} \newcommand{\Eta}{H} \newcommand{\Iota}{I} \newcommand{\Kappa}{K} \newcommand{\Mu}{M} \newcommand{\Nu}{N} \newcommand{\Rho}{P} \newcommand{\Tau}{T} \newcommand{\Upsi}{\Upsilon} \newcommand{\omicron}{o} \newcommand{\lang}{\langle} \newcommand{\rang}{\rangle} \newcommand{\Union}{\bigcup} \newcommand{\Intersection}{\bigcap} \newcommand{\Oplus}{\bigoplus} \newcommand{\Otimes}{\bigotimes} \newcommand{\Wedge}{\bigwedge} \newcommand{\Vee}{\bigvee} \newcommand{\coproduct}{\coprod} \newcommand{\product}{\prod} \newcommand{\closure}{\overline} \newcommand{\integral}{\int} \newcommand{\doubleintegral}{\iint} \newcommand{\tripleintegral}{\iiint} \newcommand{\quadrupleintegral}{\iiiint} \newcommand{\conint}{\oint} \newcommand{\contourintegral}{\oint} \newcommand{\infinity}{\infty} \newcommand{\bottom}{\bot} \newcommand{\minusb}{\boxminus} \newcommand{\plusb}{\boxplus} \newcommand{\timesb}{\boxtimes} \newcommand{\intersection}{\cap} \newcommand{\union}{\cup} \newcommand{\Del}{\nabla} \newcommand{\odash}{\circleddash} \newcommand{\negspace}{\!} \newcommand{\widebar}{\overline} \newcommand{\textsize}{\normalsize} \renewcommand{\scriptsize}{\scriptstyle} \newcommand{\scriptscriptsize}{\scriptscriptstyle} \newcommand{\mathfr}{\mathfrak} \newcommand{\statusline}[2]{#2} \newcommand{\tooltip}[2]{#2} \newcommand{\toggle}[2]{#2} % Theorem Environments \theoremstyle{plain} \newtheorem{theorem}{Theorem} \newtheorem{lemma}{Lemma} \newtheorem{prop}{Proposition} \newtheorem{cor}{Corollary} \newtheorem*{utheorem}{Theorem} \newtheorem*{ulemma}{Lemma} \newtheorem*{uprop}{Proposition} \newtheorem*{ucor}{Corollary} \theoremstyle{definition} \newtheorem{defn}{Definition} \newtheorem{example}{Example} \newtheorem*{udefn}{Definition} \newtheorem*{uexample}{Example} \theoremstyle{remark} \newtheorem{remark}{Remark} \newtheorem{note}{Note} \newtheorem*{uremark}{Remark} \newtheorem*{unote}{Note} %------------------------------------------------------------------- \begin{document} %------------------------------------------------------------------- \section*{virtual machine} In [[computer science]], a virtual machine is a simulation of a fixed architecture executing some sort of signaling or software. It can abstract an entire or part of hardware, firmware, a file system with some ports, devices and/or CPU and installed operating system, but it can be simply an isolated environment executing some specified class of software, or simply any installation in hardware or in another virtual machine of a specified execution model. For example, Java Virtual Machine executes formally specified ``bytecode'' to ensure identical execution on all hardware. See also [[certified programming]], [[WebAssembly]] \hypertarget{virtual_machines_for_cloud}{}\subsection*{{Virtual machines for cloud}}\label{virtual_machines_for_cloud} \hypertarget{virtual_machine_simulating_machine_with_operating_system}{}\subsubsection*{{Virtual machine simulating machine with operating system}}\label{virtual_machine_simulating_machine_with_operating_system} \ldots{} \hypertarget{containers}{}\subsubsection*{{Containers}}\label{containers} \ldots{} \hypertarget{blockchain_runtimes_for_multiple_blockchains}{}\subsubsection*{{Blockchain runtimes for multiple blockchains}}\label{blockchain_runtimes_for_multiple_blockchains} Microsoft Azure develops a runtime framework intended to work on various blockchains. This is the CoCo project (see whitepaper 2017 at github \href{https://github.com/Azure/coco-framework/blob/master/docs/Coco%20Framework%20whitepaper.pdf}{pdf}, \href{https://azure.microsoft.com/en-us/blog/announcing-microsoft-s-coco-framework-for-enterprise-blockchain-networks}{announcement} and a presentation on \href{https://medium.com/@jrodthoughts/with-coco-framework-microsoft-wants-to-become-the-redhat-of-the-blockchain-5b35f8ac8707}{Medium}). \hypertarget{languages_for_simulation_of_devices}{}\subsection*{{Languages for simulation of devices}}\label{languages_for_simulation_of_devices} \ldots{} \hypertarget{bytecode_virtual_machines}{}\subsection*{{Bytecode virtual machines}}\label{bytecode_virtual_machines} \hypertarget{java_virtual_machine}{}\subsubsection*{{Java Virtual Machine}}\label{java_virtual_machine} Java VM has a specification which executes Java bytecode. Several languages compile to JVM including Java, Kotlin and Scala. \begin{itemize}% \item \href{http://en.wikipedia.org/wiki/Java_%28programming_language%29}{java (language)}, \href{http://en.wikipedia.org/wiki/Java_%28software_platform%29}{java (platform)} \item \href{https://kotlinlang.org}{kotlin} \item \href{http://en.wikipedia.org/wiki/Scala_%28programming_language%29}{scala} \item \href{https://github.com/scalaz/scalaz}{scalaz} - library for functional programming in scala \end{itemize} \hypertarget{webassembly_vm}{}\subsubsection*{{WebAssembly VM}}\label{webassembly_vm} WebAssembly is optimized for small compiling time and near native execution time on major architectures (like 86 series). It appeared first as new VM standard on web browsers, backed by major internet companies; it is also used or planned on a number of [[blockchain]] projects. \begin{itemize}% \item WebAssembly \href{https://en.wikipedia.org/wiki/WebAssembly}{wikipedia}, \href{https://webassembly.github.io/spec}{spec}, \href{https://webassembly.org}{webassembly.org}, \href{https://developer.mozilla.org/en-US/docs/WebAssembly}{msdn} docs, \href{https://developer.mozilla.org/en-US/docs/WebAssembly/Rust_to_wasm}{rust-to-wasm}, \href{tps://github.com/WebAssembly}{github} \item \href{https://wiki.parity.io/WebAssembly-Links}{WebAssembly-Links} in Parity Tech Documentation \item AssemblyScript (maps a subset of javascript code to wasm) \href{https://github.com/AssemblyScript/assemblyscript}{github}, \href{https://www.infoworld.com/article/3224006/assemblyscript-compiles-typescript-to-webassembly.html}{news} \end{itemize} [[Rust]] has small runtime, which is desirable in common applications of WebAssembly. Thus Rust commonly compiles either to native code or to wasm. \begin{itemize}% \item Rust \& WebAssembly with Nick Fitzgerald \href{https://www.youtube.com/watch?v=ZiiTRxWk8gA}{yt} \end{itemize} Ethereum flavoured version of wasm VM specification is at github/\href{https://github.com/ewasm}{ewasm}, see also github/\href{https://github.com/ewasm/design}{ewasm/design}. eWasm has a \href{http://ewasm.ethereum.org/explorer}{testnet}. According to article \emph{\href{https://www.mycryptopedia.com/ewasm}{ewasm explained}}, \begin{quote}% The ewasm specification consists of a subset of WebAssembly components suitable for Ethereum’s needs, namely determinism and relevant features. It also includes a number of system smart contracts that provide access to Ethereum platform features. \end{quote} \hypertarget{iele}{}\subsubsection*{{IELE}}\label{iele} Part of [[zoranskoda:Cardano]] project, IELE executes and verifies [[smart contract]]s as well as providing a human-readable language for blockchain developers. \begin{itemize}% \item IELE, \emph{Semantics based compilation}, at \href{https://testnet.iohkdev.io/iele/about/semantics-based-compilation}{iohkdev.io} \end{itemize} \hypertarget{ethereum_vm}{}\subsubsection*{{Ethereum VM}}\label{ethereum_vm} Primarily used for smart contract execution on Ethereum blockchain (and some others blockchains, like [[zoranskoda:Hyperledger]] Fabric). Ethereum community has plans to supercede it with Ethereum version of wasm VM (ewasm). \hypertarget{ton_vm}{}\subsubsection*{{TON VM}}\label{ton_vm} Used for executing smart contracts on [[Telegram Open Network]]. See \begin{itemize}% \item [[Nikolai Durov]], \emph{Telegram Open Network Virtual Machine}, Sep. 2018, 148 pp. \href{https://www.docdroid.net/R3vEKBY/telegram-open-network-virtual-machine-september-5-2018.pdf}{pdf} \end{itemize} \hypertarget{ckb_vm_nervos}{}\subsubsection*{{CKB VM (Nervos)}}\label{ckb_vm_nervos} This is a \href{https://en.wikipedia.org/wiki/RISC-V}{RISC-V} VM for a Nervos blockchain design. ``Uses rv64imc architecture: it is based on core RV64I ISA with M standard extension for integer multiplication and division, and C standard extension for RCV(RISC-V Compressed Instructions).'' No floating point. \begin{itemize}% \item github \href{https://github.com/nervosnetwork/rfcs/blob/master/rfcs/0002-ckb/0002-ckb.md}{mb}, \href{https://github.com/nervosnetwork/ckb}{code} \end{itemize} [[!redirects Virtual Machine]] \end{document}