why is RUST so popular?

Update 2020-08: “Through the past five years of experimentation, I’ve gone from intrigued, to optimistic, to convinced that Rust is an ideal language to build industrial grade, bulletproof bare metal software. Beyond that, I’ve come to realize that even the highest level constructs that the base language offers are applicable to firmware development, very much unlike other languages that span a wide range of paradigms (I’m looking at you, C++). There are a few reasons I felt this way:

  • Rust’s safety guarantees and general strictness bring the debug time down significantly, so there’s less need to spend time developing mental maps of how high level constructs correspond to hardware primitives.
  • The type system is great at enforcing local reasoning and preventing leaky abstractions. Building decoupled systems with no runtime cost is easy.
  • The compiler error messages are worthy of an AI assistant with concerning mind-reading abilities.” (src)

one surely does not want metal to rust… it’s named after a fungi.

“Rust is named after a fungus that is robust, distributed, and parallel.

It is also a substring of “robust”.” (src)

https://www.quora.com/Why-is-Rust-becoming-popular (he really should write a book about it – or make a 1h video with hands on… way better 😉 (don’t forget the small and big victory celebration dances)

RUST up for ARM

yes it compiles on x86 and yes it runs on Debian Jessie 8 for arm on ODROID XU4. (Exynos5 Octa ARM Cortex A15 2Ghz produced by Samsung (4x ARM Cortex A15 MPCore (32Bit) implementing the ARMv7-A architecture) and 4x Cortex-A7 1.3GHz (ARM Cortex-A7 MPCore (32Bit) implementing the ARMv7-A architecture announced in 2011.)

hostnamectl 
   Static hostname: gamestation-turbo
         Icon name: computer
           Chassis: n/a
  Operating System: Debian GNU/Linux 8 (jessie)
            Kernel: Linux 3.10.106+
      Architecture: arm

odroid xu4 hardware cpuinfo.txt

why it says “xu3” at the bottom of cpuinfo.txt one does not know (it’s a xu4)

# for example this CPU:
processor	: 0
model name	: ARMv7 Processor rev 3 (v7l)
BogoMIPS	: 36.00
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 3

hostnamectl; # tested on (DON'T YOU DARE TO FORGET THIS!)
   Static hostname: debian
         Icon name: computer-vm
    Virtualization: oracle
  Operating System: Debian GNU/Linux 9 (stretch)
            Kernel: Linux 4.9.0-9-amd64
      Architecture: x86-64

su - root; # become root and simulate a proper login or env variables not set (!? why now? su was enough in Debian 8)

# and the right C compiler
apt install gcc-arm-linux-gnueabihf; # install gcc arm compiler
dpkg -l|grep gcc; # check what was installed
ii  gcc                                   4:6.3.0-4                         amd64        GNU C compiler
ii  gcc-6                                 6.3.0-18+deb9u1                   amd64        GNU C compiler
ii  gcc-6-arm-linux-gnueabihf             6.3.0-18cross1                    amd64        GNU C compiler
ii  gcc-6-arm-linux-gnueabihf-base:amd64  6.3.0-18cross1                    amd64        GCC, the GNU Compiler Collection (base package)
ii  gcc-6-base:amd64                      6.3.0-18+deb9u1                   amd64        GCC, the GNU Compiler Collection (base package)
ii  gcc-6-cross-base                      6.3.0-18cross1                    all          GCC, the GNU Compiler Collection (library base package)
ii  gcc-arm-linux-gnueabihf               4:6.3.0-4                         amd64        GNU C compiler for the armhf architecture
ii  libgcc-6-dev:amd64                    6.3.0-18+deb9u1                   amd64        GCC support library (development files)
ii  libgcc-6-dev-armhf-cross              6.3.0-18cross1                    all          GCC support library (development files)
ii  libgcc1:amd64                         1:6.3.0-18+deb9u1                 amd64        GCC support library
ii  libgcc1-armhf-cross                   1:6.3.0-18cross1                  all          GCC support library
ii  linux-compiler-gcc-6-x86              4.9.168-1+deb9u4                  amd64        Compiler for Linux on x86 (meta-package)

Ctrl+D; # exit to non-root user prompt

cd ~; # go home!

curl https://sh.rustup.rs -sSf | sh; # install rust (no need to be rude)
# press 1 to install

rustup target add armv7-unknown-linux-gnueabihf; # add the toolchain for Rust

# need to add build target
# so that rust knows which linker to use
vim ~/.cargo/config
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc-6"
:wq # write and quit in vim

# Rust package manager pulls hello world sources nice ;)
cargo new hello-rpi --bin
cd hello-rpi
# do the actual compilation
cargo build --target=armv7-unknown-linux-gnueabihf
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s :)

# check file type
file target/armv7-unknown-linux-gnueabihf/debug/hello-rpi
ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=347dfe809f02be733ef01976c397606dadbd3c7e, not stripped
# do a little victory dance, to celebrate the acchievement :)

ArmBian: https://forum.odroid.com/viewtopic.php?f=96&t=24309

Android

Ubuntu

Other OS (ArmBian)

Debian Based Gaming Station! OGST-XU4

ONE IS RUSTING OUT 🙂

inspired by: https://hackernoon.com/compiling-rust-for-the-raspberry-pi-49fdcd7df658

what other multilibs are there?

apt search multilib
Sorting… Done
Full Text Search… Done
g++-6-multilib/oldstable,oldstable 6.3.0-18+deb9u1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-mips-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-mips64-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-mips64el-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-mipsel-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-powerpc-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-powerpc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-s390x-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-6-multilib-sparc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C++ compiler (multilib support)

g++-multilib/oldstable 4:6.3.0-4 amd64
GNU C++ compiler (multilib files)

g++-multilib-mips-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the mips architecture

g++-multilib-mips64-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the mips64 architecture

g++-multilib-mips64el-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the mips64el architecture

g++-multilib-mipsel-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the mipsel architecture

g++-multilib-powerpc-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the powerpc architecture

g++-multilib-powerpc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the ppc64 architecture

g++-multilib-s390x-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the s390x architecture

g++-multilib-sparc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C++ compiler for the sparc64 architecture

gcc-6-multilib/oldstable,oldstable 6.3.0-18+deb9u1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-mips-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-mips64-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-mips64el-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-mipsel-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-powerpc-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-powerpc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-s390x-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-6-multilib-sparc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU C compiler (multilib support)

gcc-multilib/oldstable 4:6.3.0-4 amd64
GNU C compiler (multilib files)

gcc-multilib-mips-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C compiler for the mips architecture

gcc-multilib-mips64-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU C compiler for the mips64 architecture

gcc-multilib-mips64el-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU C compiler for the mips64el architecture

gcc-multilib-mipsel-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C compiler for the mipsel architecture

gcc-multilib-powerpc-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C compiler for the powerpc architecture

gcc-multilib-powerpc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C compiler for the ppc64 architecture

gcc-multilib-s390x-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C compiler for the s390x architecture

gcc-multilib-sparc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU C compiler for the sparc64 architecture

gccgo-6-multilib/oldstable,oldstable 6.3.0-18+deb9u1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-mips-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-mips64-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-mips64el-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-mipsel-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-powerpc-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-powerpc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-s390x-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-6-multilib-sparc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Go compiler (multilib support)

gccgo-multilib/oldstable 4:6.3.0-4 amd64
Go compiler, based on the GCC backend (multilib files)

gccgo-multilib-mips-linux-gnu/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the mips architecture

gccgo-multilib-mips64-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the mips64 architecture

gccgo-multilib-mips64el-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the mips64el architecture

gccgo-multilib-mipsel-linux-gnu/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the mipsel architecture

gccgo-multilib-powerpc-linux-gnu/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the powerpc architecture

gccgo-multilib-powerpc64-linux-gnu/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the ppc64 architecture

gccgo-multilib-s390x-linux-gnu/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the s390x architecture

gccgo-multilib-sparc64-linux-gnu/oldstable 4:6.3.0-4 amd64
Go compiler (based on GCC) for the sparc64 architecture

gdc-6-multilib/oldstable,oldstable 6.3.0-18+deb9u1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-mips-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-mips64-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-mips64el-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-mipsel-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-powerpc-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-powerpc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-s390x-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-6-multilib-sparc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU D compiler (version 2, multilib support)

gdc-multilib/oldstable 4:6.3.0-4 amd64
D compiler (language version 2) (multilib files)

gdc-multilib-mips-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the mips architecture

gdc-multilib-mips64-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the mips64 architecture

gdc-multilib-mips64el-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the mips64el architecture

gdc-multilib-mipsel-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the mipsel architecture

gdc-multilib-powerpc-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the powerpc architecture

gdc-multilib-powerpc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the ppc64 architecture

gdc-multilib-s390x-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the s390x architecture

gdc-multilib-sparc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU D compiler (based on GCC) for the sparc64 architecture

gfortran-6-multilib/oldstable,oldstable 6.3.0-18+deb9u1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-mips-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-mips64-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-mips64el-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-mipsel-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-powerpc-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-powerpc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-s390x-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-6-multilib-sparc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Fortran compiler (multilib support)

gfortran-multilib/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler (multilib files)

gfortran-multilib-mips-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the mips architecture

gfortran-multilib-mips64-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the mips64 architecture

gfortran-multilib-mips64el-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the mips64el architecture

gfortran-multilib-mipsel-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the mipsel architecture

gfortran-multilib-powerpc-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the powerpc architecture

gfortran-multilib-powerpc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the ppc64 architecture

gfortran-multilib-s390x-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the s390x architecture

gfortran-multilib-sparc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Fortran 95 compiler for the sparc64 architecture

gobjc++-6-multilib/oldstable,oldstable 6.3.0-18+deb9u1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-mips-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-mips64-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-mips64el-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-mipsel-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-powerpc-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-powerpc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-s390x-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-6-multilib-sparc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C++ compiler (multilib support)

gobjc++-multilib/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler (multilib files)

gobjc++-multilib-mips-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the mips architecture

gobjc++-multilib-mips64-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the mips64 architecture

gobjc++-multilib-mips64el-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the mips64el architecture

gobjc++-multilib-mipsel-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the mipsel architecture

gobjc++-multilib-powerpc-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the powerpc architecture

gobjc++-multilib-powerpc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the ppc64 architecture

gobjc++-multilib-s390x-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the s390x architecture

gobjc++-multilib-sparc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C++ compiler for the sparc64 architecture

gobjc-6-multilib/oldstable,oldstable 6.3.0-18+deb9u1 amd64t
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-mips-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-mips64-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-mips64el-linux-gnuabi64/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-mipsel-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-powerpc-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-powerpc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-s390x-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-6-multilib-sparc64-linux-gnu/oldstable 6.3.0-18cross1 amd64
GNU Objective-C compiler (multilib support)

gobjc-multilib/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler (multilib files)

gobjc-multilib-mips-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the mips architecture

gobjc-multilib-mips64-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the mips64 architecture

gobjc-multilib-mips64el-linux-gnuabi64/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the mips64el architecture

gobjc-multilib-mipsel-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the mipsel architecture

gobjc-multilib-powerpc-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the powerpc architecture

gobjc-multilib-powerpc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the ppc64 architecture

gobjc-multilib-s390x-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the s390x architecture

gobjc-multilib-sparc64-linux-gnu/oldstable 4:6.3.0-4 amd64
GNU Objective-C compiler for the sparc64 architecture

admin