SlideShare a Scribd company logo
Functional IoT: Programming
Language and OS
Functional IoT: Programming
Language and OS
Functional IoT: Programming
Language and OS
Functional IoT: Programming
Language and OS
Functional IoT: Programming
Language and OS
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
We drown in MANY MANY languages!We drown in MANY MANY languages!We drown in MANY MANY languages!We drown in MANY MANY languages!We drown in MANY MANY languages!
☆ There are many many languages in the world.☆ There are many many languages in the world.☆ There are many many languages in the world.☆ There are many many languages in the world.☆ There are many many languages in the world.
☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them.
☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.
What the purpose of language?What the purpose of language?What the purpose of language?What the purpose of language?What the purpose of language?
I think that there are three major purpose of the
languages:
I think that there are three major purpose of the
languages:
I think that there are three major purpose of the
languages:
I think that there are three major purpose of the
languages:
I think that there are three major purpose of the
languages:
☆ Implementation☆ Implementation☆ Implementation☆ Implementation☆ Implementation
☆ Verification☆ Verification☆ Verification☆ Verification☆ Verification
☆ OS☆ OS☆ OS☆ OS☆ OS
- Implementation -- Implementation -- Implementation -- Implementation -- Implementation -
ATSATSATSATSATS
☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/
☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime
☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer
☆ Syntax is similar to ML☆ Syntax is similar to ML☆ Syntax is similar to ML☆ Syntax is similar to ML☆ Syntax is similar to ML
☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
☆ Able to import C define macro☆ Able to import C define macro☆ Able to import C define macro☆ Able to import C define macro☆ Able to import C define macro
ATS on ESP8266ATS on ESP8266ATS on ESP8266ATS on ESP8266ATS on ESP8266
☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats
What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?
$�vi�user/user_main.dats
�39�����val�json_open�=�string0_copy�"{"value1":�""
�40�����val�json_close�=�string0_copy�""�}"
�41�����val�temp�=�esp_tostrptr_int�rand
�42�����val�json_head�=�strptr_append�(json_open,�temp)
�43�����val�json_data�=�strptr_append�(json_head,�json_close)
�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)
�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!
$�make
ATS�user/user_main.dats
/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�
offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�
[json_head$3823(-1)]�nee
ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst
(strptr_addr_vtype);�S2EVar(4441))]�instead.
$�vi�user/user_main.dats
�39�����val�json_open�=�string0_copy�"{"value1":�""
�40�����val�json_close�=�string0_copy�""�}"
�41�����val�temp�=�esp_tostrptr_int�rand
�42�����val�json_head�=�strptr_append�(json_open,�temp)
�43�����val�json_data�=�strptr_append�(json_head,�json_close)
�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)
�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!
$�make
ATS�user/user_main.dats
/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�
offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�
[json_head$3823(-1)]�nee
ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst
(strptr_addr_vtype);�S2EVar(4441))]�instead.
$�vi�user/user_main.dats
�39�����val�json_open�=�string0_copy�"{"value1":�""
�40�����val�json_close�=�string0_copy�""�}"
�41�����val�temp�=�esp_tostrptr_int�rand
�42�����val�json_head�=�strptr_append�(json_open,�temp)
�43�����val�json_data�=�strptr_append�(json_head,�json_close)
�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)
�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!
$�make
ATS�user/user_main.dats
/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�
offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�
[json_head$3823(-1)]�nee
ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst
(strptr_addr_vtype);�S2EVar(4441))]�instead.
$�vi�user/user_main.dats
�39�����val�json_open�=�string0_copy�"{"value1":�""
�40�����val�json_close�=�string0_copy�""�}"
�41�����val�temp�=�esp_tostrptr_int�rand
�42�����val�json_head�=�strptr_append�(json_open,�temp)
�43�����val�json_data�=�strptr_append�(json_head,�json_close)
�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)
�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!
$�make
ATS�user/user_main.dats
/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�
offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�
[json_head$3823(-1)]�nee
ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst
(strptr_addr_vtype);�S2EVar(4441))]�instead.
$�vi�user/user_main.dats
�39�����val�json_open�=�string0_copy�"{"value1":�""
�40�����val�json_close�=�string0_copy�""�}"
�41�����val�temp�=�esp_tostrptr_int�rand
�42�����val�json_head�=�strptr_append�(json_open,�temp)
�43�����val�json_data�=�strptr_append�(json_head,�json_close)
�44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head)
�45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error!
$�make
ATS�user/user_main.dats
/home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,�
offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable�
[json_head$3823(-1)]�nee
ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst
(strptr_addr_vtype);�S2EVar(4441))]�instead.
ATS on ArduinoATS on ArduinoATS on ArduinoATS on ArduinoATS on Arduino
☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats
What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?
$�vi�../../SATS/lcd.sats
�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}
�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void
$�vi�DATS/main.dats
�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.
�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{
�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{
�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!
�--snip--
�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);
�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))
�21�������val�()�=�loop�(lcd,�str,�pos�+�1)
$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter
DATS/main.dats:20:26:�unsolved�constraint:�[1]
[1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n))
$�vi�../../SATS/lcd.sats
�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}
�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void
$�vi�DATS/main.dats
�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.
�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{
�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{
�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!
�--snip--
�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);
�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))
�21�������val�()�=�loop�(lcd,�str,�pos�+�1)
$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter
DATS/main.dats:20:26:�unsolved�constraint:�[1]
[1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n))
$�vi�../../SATS/lcd.sats
�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}
�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void
$�vi�DATS/main.dats
�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.
�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{
�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{
�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!
�--snip--
�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);
�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))
�21�������val�()�=�loop�(lcd,�str,�pos�+�1)
$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter
DATS/main.dats:20:26:�unsolved�constraint:�[1]
[1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n))
$�vi�../../SATS/lcd.sats
�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}
�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void
$�vi�DATS/main.dats
�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.
�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{
�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{
�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!
�--snip--
�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);
�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))
�21�������val�()�=�loop�(lcd,�str,�pos�+�1)
$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter
DATS/main.dats:20:26:�unsolved�constraint:�[1]
[1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n))
$�vi�../../SATS/lcd.sats
�11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n}
�12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void
$�vi�DATS/main.dats
�14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>.
�15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{
�16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{
�17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error!
�--snip--
�19�������val�()�=�(lcd_setCursor�(lcd,�0,�1);
�20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH))
�21�������val�()�=�loop�(lcd,�str,�pos�+�1)
$�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter
DATS/main.dats:20:26:�unsolved�constraint:�[1]
[1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n))
RustRustRustRustRust
☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/
☆ Without GC☆ Without GC☆ Without GC☆ Without GC☆ Without GC
☆ Syntax is similar to C☆ Syntax is similar to C☆ Syntax is similar to C☆ Syntax is similar to C☆ Syntax is similar to C
☆ Safely use pointer☆ Safely use pointer☆ Safely use pointer☆ Safely use pointer☆ Safely use pointer
☆ Depends on LLVM☆ Depends on LLVM☆ Depends on LLVM☆ Depends on LLVM☆ Depends on LLVM
Rust on mbedRust on mbedRust on mbedRust on mbedRust on mbed
☆ https://github.com/0xc0170/mbed-rust-frdm-
k64f-blinky
☆ https://github.com/0xc0170/mbed-rust-frdm-
k64f-blinky
☆ https://github.com/0xc0170/mbed-rust-frdm-
k64f-blinky
☆ https://github.com/0xc0170/mbed-rust-frdm-
k64f-blinky
☆ https://github.com/0xc0170/mbed-rust-frdm-
k64f-blinky
JhcJhcJhcJhcJhc
☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/
☆ A Haskell compiler☆ A Haskell compiler☆ A Haskell compiler☆ A Haskell compiler☆ A Haskell compiler
☆ With GC☆ With GC☆ With GC☆ With GC☆ With GC
☆ Only for 32-bit CPU☆ Only for 32-bit CPU☆ Only for 32-bit CPU☆ Only for 32-bit CPU☆ Only for 32-bit CPU
☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries
☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
Jhc on mbedJhc on mbedJhc on mbedJhc on mbedJhc on mbed
☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3
IvoryIvoryIvoryIvoryIvory
☆ http://ivorylang.org/☆ http://ivorylang.org/☆ http://ivorylang.org/☆ http://ivorylang.org/☆ http://ivorylang.org/
☆ EDSL on Haskell☆ EDSL on Haskell☆ EDSL on Haskell☆ EDSL on Haskell☆ EDSL on Haskell
☆ Without GC☆ Without GC☆ Without GC☆ Without GC☆ Without GC
☆ No NULL pointer☆ No NULL pointer☆ No NULL pointer☆ No NULL pointer☆ No NULL pointer
☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
Ivory on ArduinoIvory on ArduinoIvory on ArduinoIvory on ArduinoIvory on Arduino
☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory
IdrisIdrisIdrisIdrisIdris
☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/
☆ With GC☆ With GC☆ With GC☆ With GC☆ With GC
☆ Theorem proving☆ Theorem proving☆ Theorem proving☆ Theorem proving☆ Theorem proving
☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell
☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
Idris on ArduinoIdris on ArduinoIdris on ArduinoIdris on ArduinoIdris on Arduino
☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink
☆ Eat much memory. Following crash.☆ Eat much memory. Following crash.☆ Eat much memory. Following crash.☆ Eat much memory. Following crash.☆ Eat much memory. Following crash.
main�=�do�pinMode�13�1
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
main�=�do�pinMode�13�1
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
main�=�do�pinMode�13�1
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
main�=�do�pinMode�13�1
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
main�=�do�pinMode�13�1
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
����������digitalWrite�13�0
����������delay�100
����������digitalWrite�13�1
����������delay�100
AdaAdaAdaAdaAda
☆ http://www.adacore.com/☆ http://www.adacore.com/☆ http://www.adacore.com/☆ http://www.adacore.com/☆ http://www.adacore.com/
☆ Without GC☆ Without GC☆ Without GC☆ Without GC☆ Without GC
☆ Verification with SPARK☆ Verification with SPARK☆ Verification with SPARK☆ Verification with SPARK☆ Verification with SPARK
☆ Ada on Arduino☆ Ada on Arduino☆ Ada on Arduino☆ Ada on Arduino☆ Ada on Arduino
☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada
HexeHexeHexeHexeHexe
☆ http://haxe.org/☆ http://haxe.org/☆ http://haxe.org/☆ http://haxe.org/☆ http://haxe.org/
☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?
- Verification -- Verification -- Verification -- Verification -- Verification -
VeriFastVeriFastVeriFastVeriFastVeriFast
☆ http://people.cs.kuleuven.be/~bart.jacobs/
verifast/
☆ http://people.cs.kuleuven.be/~bart.jacobs/
verifast/
☆ http://people.cs.kuleuven.be/~bart.jacobs/
verifast/
☆ http://people.cs.kuleuven.be/~bart.jacobs/
verifast/
☆ http://people.cs.kuleuven.be/~bart.jacobs/
verifast/
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants
☆ Can prove code with lemma function?☆ Can prove code with lemma function?☆ Can prove code with lemma function?☆ Can prove code with lemma function?☆ Can prove code with lemma function?
VeriFast on ArduinoVeriFast on ArduinoVeriFast on ArduinoVeriFast on ArduinoVeriFast on Arduino
☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast
CoqCoqCoqCoqCoq
☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/
☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover
☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics
☆ Extract code into implementation with GC☆ Extract code into implementation with GC☆ Extract code into implementation with GC☆ Extract code into implementation with GC☆ Extract code into implementation with GC
☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/
Isabelle/HOLIsabelle/HOLIsabelle/HOLIsabelle/HOLIsabelle/HOL
☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/
☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover
AlloyAlloyAlloyAlloyAlloy
☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/
☆ A tool to analyze specifications☆ A tool to analyze specifications☆ A tool to analyze specifications☆ A tool to analyze specifications☆ A tool to analyze specifications
☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic
☆ Find example instance on specification☆ Find example instance on specification☆ Find example instance on specification☆ Find example instance on specification☆ Find example instance on specification
☆ Find counter-example on specification☆ Find counter-example on specification☆ Find counter-example on specification☆ Find counter-example on specification☆ Find counter-example on specification
☆ Support abductive reasoning☆ Support abductive reasoning☆ Support abductive reasoning☆ Support abductive reasoning☆ Support abductive reasoning
ACSL (Frama-C)ACSL (Frama-C)ACSL (Frama-C)ACSL (Frama-C)ACSL (Frama-C)
☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html
☆ Specification language for C programs☆ Specification language for C programs☆ Specification language for C programs☆ Specification language for C programs☆ Specification language for C programs
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
☆ Design by contract (DbC) in C language
comment
CBMCCBMCCBMCCBMCCBMC
☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/
☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++
☆ Verify array bounds (buffer overflows), pointer
safety, exceptions and user-specified assertions
☆ Verify array bounds (buffer overflows), pointer
safety, exceptions and user-specified assertions
☆ Verify array bounds (buffer overflows), pointer
safety, exceptions and user-specified assertions
☆ Verify array bounds (buffer overflows), pointer
safety, exceptions and user-specified assertions
☆ Verify array bounds (buffer overflows), pointer
safety, exceptions and user-specified assertions
- OS -- OS -- OS -- OS -- OS -
seL4 microkernelseL4 microkernelseL4 microkernelseL4 microkernelseL4 microkernel
☆ https://sel4.systems/☆ https://sel4.systems/☆ https://sel4.systems/☆ https://sel4.systems/☆ https://sel4.systems/
☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL
☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86
☆ Support multicore☆ Support multicore☆ Support multicore☆ Support multicore☆ Support multicore
☆ Can't safely use DMA☆ Can't safely use DMA☆ Can't safely use DMA☆ Can't safely use DMA☆ Can't safely use DMA
☆ Binary code level verification!☆ Binary code level verification!☆ Binary code level verification!☆ Binary code level verification!☆ Binary code level verification!
Structure of seL4Structure of seL4Structure of seL4Structure of seL4Structure of seL4
How to verify seL4? #1How to verify seL4? #1How to verify seL4? #1How to verify seL4? #1How to verify seL4? #1
#�Detail:�https://github.com/seL4/l4v
$�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita�
python-psutil�openjfx�openjdk-8-jdk
$�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
$�mkdir�seL4_verify
$�cd�seL4_verify
$�repo�init�-u�https://github.com/seL4/verification-manifest.git
$�repo�sync
$�ls
HOL4/��graph-refine/��isabelle/��l4v/��seL4/
$�cd�l4v
$�mkdir�-p�~/.isabelle/etc
$�cp�-i�misc/etc/settings�~/.isabelle/etc/settings
$�./isabelle/bin/isabelle�components�-a
$�./isabelle/bin/isabelle�jedit�-bf
$�./isabelle/bin/isabelle�build�-bv�HOL-Word
#�Detail:�https://github.com/seL4/l4v
$�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita�
python-psutil�openjfx�openjdk-8-jdk
$�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
$�mkdir�seL4_verify
$�cd�seL4_verify
$�repo�init�-u�https://github.com/seL4/verification-manifest.git
$�repo�sync
$�ls
HOL4/��graph-refine/��isabelle/��l4v/��seL4/
$�cd�l4v
$�mkdir�-p�~/.isabelle/etc
$�cp�-i�misc/etc/settings�~/.isabelle/etc/settings
$�./isabelle/bin/isabelle�components�-a
$�./isabelle/bin/isabelle�jedit�-bf
$�./isabelle/bin/isabelle�build�-bv�HOL-Word
#�Detail:�https://github.com/seL4/l4v
$�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita�
python-psutil�openjfx�openjdk-8-jdk
$�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
$�mkdir�seL4_verify
$�cd�seL4_verify
$�repo�init�-u�https://github.com/seL4/verification-manifest.git
$�repo�sync
$�ls
HOL4/��graph-refine/��isabelle/��l4v/��seL4/
$�cd�l4v
$�mkdir�-p�~/.isabelle/etc
$�cp�-i�misc/etc/settings�~/.isabelle/etc/settings
$�./isabelle/bin/isabelle�components�-a
$�./isabelle/bin/isabelle�jedit�-bf
$�./isabelle/bin/isabelle�build�-bv�HOL-Word
#�Detail:�https://github.com/seL4/l4v
$�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita�
python-psutil�openjfx�openjdk-8-jdk
$�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
$�mkdir�seL4_verify
$�cd�seL4_verify
$�repo�init�-u�https://github.com/seL4/verification-manifest.git
$�repo�sync
$�ls
HOL4/��graph-refine/��isabelle/��l4v/��seL4/
$�cd�l4v
$�mkdir�-p�~/.isabelle/etc
$�cp�-i�misc/etc/settings�~/.isabelle/etc/settings
$�./isabelle/bin/isabelle�components�-a
$�./isabelle/bin/isabelle�jedit�-bf
$�./isabelle/bin/isabelle�build�-bv�HOL-Word
#�Detail:�https://github.com/seL4/l4v
$�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita�
python-psutil�openjfx�openjdk-8-jdk
$�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
$�mkdir�seL4_verify
$�cd�seL4_verify
$�repo�init�-u�https://github.com/seL4/verification-manifest.git
$�repo�sync
$�ls
HOL4/��graph-refine/��isabelle/��l4v/��seL4/
$�cd�l4v
$�mkdir�-p�~/.isabelle/etc
$�cp�-i�misc/etc/settings�~/.isabelle/etc/settings
$�./isabelle/bin/isabelle�components�-a
$�./isabelle/bin/isabelle�jedit�-bf
$�./isabelle/bin/isabelle�build�-bv�HOL-Word
How to verify seL4? #2How to verify seL4? #2How to verify seL4? #2How to verify seL4? #2How to verify seL4? #2
$�./run_tests
Running�40�test(s)...
��running�isabelle�...��������������pass������(�0:00:05,��0.62GB)
��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB)
--snip--
��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB)
��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB)
------------------------------------------------------------------------
TEST�FAILURE:�AutoCorresSEL4
--snip--
AutoCorresSEL4:�theory�TestSEL4
***�Timeout
AutoCorresSEL4�FAILED
$�./run_tests
Running�40�test(s)...
��running�isabelle�...��������������pass������(�0:00:05,��0.62GB)
��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB)
--snip--
��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB)
��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB)
------------------------------------------------------------------------
TEST�FAILURE:�AutoCorresSEL4
--snip--
AutoCorresSEL4:�theory�TestSEL4
***�Timeout
AutoCorresSEL4�FAILED
$�./run_tests
Running�40�test(s)...
��running�isabelle�...��������������pass������(�0:00:05,��0.62GB)
��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB)
--snip--
��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB)
��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB)
------------------------------------------------------------------------
TEST�FAILURE:�AutoCorresSEL4
--snip--
AutoCorresSEL4:�theory�TestSEL4
***�Timeout
AutoCorresSEL4�FAILED
$�./run_tests
Running�40�test(s)...
��running�isabelle�...��������������pass������(�0:00:05,��0.62GB)
��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB)
--snip--
��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB)
��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB)
------------------------------------------------------------------------
TEST�FAILURE:�AutoCorresSEL4
--snip--
AutoCorresSEL4:�theory�TestSEL4
***�Timeout
AutoCorresSEL4�FAILED
$�./run_tests
Running�40�test(s)...
��running�isabelle�...��������������pass������(�0:00:05,��0.62GB)
��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB)
--snip--
��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB)
��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB)
------------------------------------------------------------------------
TEST�FAILURE:�AutoCorresSEL4
--snip--
AutoCorresSEL4:�theory�TestSEL4
***�Timeout
AutoCorresSEL4�FAILED
How to compile and run seL4? #1How to compile and run seL4? #1How to compile and run seL4? #1How to compile and run seL4? #1How to compile and run seL4? #1
#�Detail:�http://sel4.systems/Info/GettingStarted/
$�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils�
python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc-
missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python-
pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu
$�mkdir�seL4_repo
$�cd�seL4_repo
$�repo�init�-u�https://github.com/seL4/sel4test-manifest.git
$�repo�sync
$�ls�-F
Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/��
tools/
$�make�ia32_simulation_release_xml_defconfig
$�make
#�Detail:�http://sel4.systems/Info/GettingStarted/
$�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils�
python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc-
missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python-
pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu
$�mkdir�seL4_repo
$�cd�seL4_repo
$�repo�init�-u�https://github.com/seL4/sel4test-manifest.git
$�repo�sync
$�ls�-F
Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/��
tools/
$�make�ia32_simulation_release_xml_defconfig
$�make
#�Detail:�http://sel4.systems/Info/GettingStarted/
$�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils�
python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc-
missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python-
pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu
$�mkdir�seL4_repo
$�cd�seL4_repo
$�repo�init�-u�https://github.com/seL4/sel4test-manifest.git
$�repo�sync
$�ls�-F
Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/��
tools/
$�make�ia32_simulation_release_xml_defconfig
$�make
#�Detail:�http://sel4.systems/Info/GettingStarted/
$�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils�
python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc-
missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python-
pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu
$�mkdir�seL4_repo
$�cd�seL4_repo
$�repo�init�-u�https://github.com/seL4/sel4test-manifest.git
$�repo�sync
$�ls�-F
Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/��
tools/
$�make�ia32_simulation_release_xml_defconfig
$�make
#�Detail:�http://sel4.systems/Info/GettingStarted/
$�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils�
python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc-
missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python-
pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu
$�mkdir�seL4_repo
$�cd�seL4_repo
$�repo�init�-u�https://github.com/seL4/sel4test-manifest.git
$�repo�sync
$�ls�-F
Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/��
tools/
$�make�ia32_simulation_release_xml_defconfig
$�make
How to compile and run seL4? #2How to compile and run seL4? #2How to compile and run seL4? #2How to compile and run seL4? #2How to compile and run seL4? #2
$�ls�images
kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99*
$�make�simulate-ia32
qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd�
images/sel4test-driver-image-ia32-pc99
--snip--
136/136�tests�passed.
Ignoring�call�to�sys_exit_group
Ignoring�call�to�sys_rt_sigprocmask
Ignoring�call�to�sys_gettid
Ignoring�call�to�sys_getpid
sys_tgkill�assuming�self�kill
$�ls�images
kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99*
$�make�simulate-ia32
qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd�
images/sel4test-driver-image-ia32-pc99
--snip--
136/136�tests�passed.
Ignoring�call�to�sys_exit_group
Ignoring�call�to�sys_rt_sigprocmask
Ignoring�call�to�sys_gettid
Ignoring�call�to�sys_getpid
sys_tgkill�assuming�self�kill
$�ls�images
kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99*
$�make�simulate-ia32
qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd�
images/sel4test-driver-image-ia32-pc99
--snip--
136/136�tests�passed.
Ignoring�call�to�sys_exit_group
Ignoring�call�to�sys_rt_sigprocmask
Ignoring�call�to�sys_gettid
Ignoring�call�to�sys_getpid
sys_tgkill�assuming�self�kill
$�ls�images
kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99*
$�make�simulate-ia32
qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd�
images/sel4test-driver-image-ia32-pc99
--snip--
136/136�tests�passed.
Ignoring�call�to�sys_exit_group
Ignoring�call�to�sys_rt_sigprocmask
Ignoring�call�to�sys_gettid
Ignoring�call�to�sys_getpid
sys_tgkill�assuming�self�kill
$�ls�images
kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99*
$�make�simulate-ia32
qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd�
images/sel4test-driver-image-ia32-pc99
--snip--
136/136�tests�passed.
Ignoring�call�to�sys_exit_group
Ignoring�call�to�sys_rt_sigprocmask
Ignoring�call�to�sys_gettid
Ignoring�call�to�sys_getpid
sys_tgkill�assuming�self�kill
eChronos RTOSeChronos RTOSeChronos RTOSeChronos RTOSeChronos RTOS
☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/
☆ Embedded version of seL4☆ Embedded version of seL4☆ Embedded version of seL4☆ Embedded version of seL4☆ Embedded version of seL4
☆ Run without MMU☆ Run without MMU☆ Run without MMU☆ Run without MMU☆ Run without MMU
☆ not yet publish verification☆ not yet publish verification☆ not yet publish verification☆ not yet publish verification☆ not yet publish verification
RedoxRedoxRedoxRedoxRedox
☆ http://www.redox-os.org/☆ http://www.redox-os.org/☆ http://www.redox-os.org/☆ http://www.redox-os.org/☆ http://www.redox-os.org/
☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust
☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86
☆ Support file system☆ Support file system☆ Support file system☆ Support file system☆ Support file system
☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139)
☆ Support GUI and window system☆ Support GUI and window system☆ Support GUI and window system☆ Support GUI and window system☆ Support GUI and window system
Mirage OSMirage OSMirage OSMirage OSMirage OS
☆ http://www.xenproject.org/developers/teams/
mirage-os.html
☆ http://www.xenproject.org/developers/teams/
mirage-os.html
☆ http://www.xenproject.org/developers/teams/
mirage-os.html
☆ http://www.xenproject.org/developers/teams/
mirage-os.html
☆ http://www.xenproject.org/developers/teams/
mirage-os.html
☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml
☆ Platform: Xen☆ Platform: Xen☆ Platform: Xen☆ Platform: Xen☆ Platform: Xen
AOSAOSAOSAOSAOS
☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos
☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS
☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86
☆ Using own stream library☆ Using own stream library☆ Using own stream library☆ Using own stream library☆ Using own stream library
What are you interested in?What are you interested in?What are you interested in?What are you interested in?What are you interested in?
I'm personally interested in following:I'm personally interested in following:I'm personally interested in following:I'm personally interested in following:I'm personally interested in following:
☆ ATS☆ ATS☆ ATS☆ ATS☆ ATS
☆ Rust☆ Rust☆ Rust☆ Rust☆ Rust
☆ Ada☆ Ada☆ Ada☆ Ada☆ Ada
☆ VeriFast☆ VeriFast☆ VeriFast☆ VeriFast☆ VeriFast
☆ ACSL☆ ACSL☆ ACSL☆ ACSL☆ ACSL
☆ seL4☆ seL4☆ seL4☆ seL4☆ seL4
License of photos #1License of photos #1License of photos #1License of photos #1License of photos #1
*�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ
ょうぶてい)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/38446022@N00/3912785418/
��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-�
Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ
ょうぶてい)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/38446022@N00/3912785418/
��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-�
Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ
ょうぶてい)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/38446022@N00/3912785418/
��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-�
Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ
ょうぶてい)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/38446022@N00/3912785418/
��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-�
Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ
ょうぶてい)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/38446022@N00/3912785418/
��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-�
Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
License of photos #2License of photos #2License of photos #2License of photos #2License of photos #2
*�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo�
Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)�
│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo�
Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)�
│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo�
Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)�
│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo�
Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)�
│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0
*�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo�
Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち
く)�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)�
│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/
��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
*�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing!
��https://www.flickr.com/photos/steren/2732488224/
��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0

More Related Content

What's hot

Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
Kiwamu Okabe
 
Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?
Elizaveta Shashkova
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
Creditas
 

What's hot (20)

Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUMetasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCU
 
ATS programming on ESP8266
ATS programming on ESP8266ATS programming on ESP8266
ATS programming on ESP8266
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCU
 
Embedded application designed by ATS language
Embedded application designed by ATS languageEmbedded application designed by ATS language
Embedded application designed by ATS language
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
 
ATS2 updates 2017
ATS2 updates 2017ATS2 updates 2017
ATS2 updates 2017
 
ATS/LF for Coq users
ATS/LF for Coq usersATS/LF for Coq users
ATS/LF for Coq users
 
Metasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on ArduinoMetasepi team meeting #19: ATS application on Arduino
Metasepi team meeting #19: ATS application on Arduino
 
Past and today of Metasepi project
Past and today of Metasepi projectPast and today of Metasepi project
Past and today of Metasepi project
 
Emacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againEmacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, again
 
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GCAjhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
 
My talk at Linux Piter 2016
My talk at Linux Piter 2016My talk at Linux Piter 2016
My talk at Linux Piter 2016
 
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLONGareth Rushgrove (Puppet) - Ubiquity at #DOXLON
Gareth Rushgrove (Puppet) - Ubiquity at #DOXLON
 
Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?Monkey-patching in Python: a magic trick or a powerful tool?
Monkey-patching in Python: a magic trick or a powerful tool?
 
Massive applications in node.js
Massive applications in node.jsMassive applications in node.js
Massive applications in node.js
 
Curl with rust
Curl with rustCurl with rust
Curl with rust
 
【コードレビューLT資料】コード規約の策定会を実施した話
【コードレビューLT資料】コード規約の策定会を実施した話【コードレビューLT資料】コード規約の策定会を実施した話
【コードレビューLT資料】コード規約の策定会を実施した話
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
 
Puppet and Software Delivery
Puppet and Software DeliveryPuppet and Software Delivery
Puppet and Software Delivery
 
Functional MCU programming
Functional MCU programmingFunctional MCU programming
Functional MCU programming
 

Viewers also liked (6)

LL Ring Recursive ライトニングトーク
LL Ring Recursive ライトニングトークLL Ring Recursive ライトニングトーク
LL Ring Recursive ライトニングトーク
 
ATS language overview
ATS language overviewATS language overview
ATS language overview
 
ATSプログラミングチュートリアル
ATSプログラミングチュートリアルATSプログラミングチュートリアル
ATSプログラミングチュートリアル
 
Metasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's APIMetasepi team meeting #17: Invariant captured by ATS's API
Metasepi team meeting #17: Invariant captured by ATS's API
 
Arduino programming of ML-style in ATS
Arduino programming of ML-style in ATSArduino programming of ML-style in ATS
Arduino programming of ML-style in ATS
 
OSCON14: Mirage 2.0
OSCON14: Mirage 2.0 OSCON14: Mirage 2.0
OSCON14: Mirage 2.0
 

Similar to Functional IoT: Programming Language and OS

Similar to Functional IoT: Programming Language and OS (20)

Poster: Generate ATS interface from C code, and introduce linear type
Poster: Generate ATS interface from C code, and introduce linear typePoster: Generate ATS interface from C code, and introduce linear type
Poster: Generate ATS interface from C code, and introduce linear type
 
Poster: Comparing ATS and VeriFast on RTOS system state
Poster: Comparing ATS and VeriFast on RTOS system statePoster: Comparing ATS and VeriFast on RTOS system state
Poster: Comparing ATS and VeriFast on RTOS system state
 
Spring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good partsSpring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good parts
 
Safer IoT using functional language
Safer IoT using functional languageSafer IoT using functional language
Safer IoT using functional language
 
The Abstract that Machine Learns to do Languages Translation
The Abstract that Machine Learns to do Languages TranslationThe Abstract that Machine Learns to do Languages Translation
The Abstract that Machine Learns to do Languages Translation
 
Does Infer dream of design by contract?
Does Infer dream of design by contract?Does Infer dream of design by contract?
Does Infer dream of design by contract?
 
Ruby - The Hard Bits
Ruby - The Hard BitsRuby - The Hard Bits
Ruby - The Hard Bits
 
Dear compiler please don't be my nanny v2
Dear compiler  please don't be my nanny v2Dear compiler  please don't be my nanny v2
Dear compiler please don't be my nanny v2
 
Thinking Reactively
Thinking ReactivelyThinking Reactively
Thinking Reactively
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
 
TDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-LanguageTDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-Language
 
BigDL: Image Recognition Using Apache Spark with BigDL - MCL358 - re:Invent 2017
BigDL: Image Recognition Using Apache Spark with BigDL - MCL358 - re:Invent 2017BigDL: Image Recognition Using Apache Spark with BigDL - MCL358 - re:Invent 2017
BigDL: Image Recognition Using Apache Spark with BigDL - MCL358 - re:Invent 2017
 
Prototyping: Helping to take away the suck
Prototyping: Helping to take away the suckPrototyping: Helping to take away the suck
Prototyping: Helping to take away the suck
 
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosDesmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
 
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
 
Collaboration between LINE, Microsoft and AI by the developers, for the devel...
Collaboration between LINE, Microsoft and AI by the developers, for the devel...Collaboration between LINE, Microsoft and AI by the developers, for the devel...
Collaboration between LINE, Microsoft and AI by the developers, for the devel...
 
Japanese CloudSearch Use-Cases and Tech Deep Dive
Japanese CloudSearch Use-Cases and Tech Deep DiveJapanese CloudSearch Use-Cases and Tech Deep Dive
Japanese CloudSearch Use-Cases and Tech Deep Dive
 
BigDL Deep Learning in Apache Spark - AWS re:invent 2017
BigDL Deep Learning in Apache Spark - AWS re:invent 2017BigDL Deep Learning in Apache Spark - AWS re:invent 2017
BigDL Deep Learning in Apache Spark - AWS re:invent 2017
 
Building reusable components with generics and protocols
Building reusable components with generics and protocolsBuilding reusable components with generics and protocols
Building reusable components with generics and protocols
 
Why we are still writing?
Why we are still writing?Why we are still writing?
Why we are still writing?
 

Recently uploaded

Recently uploaded (20)

Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 

Functional IoT: Programming Language and OS

  • 1. Functional IoT: Programming Language and OS Functional IoT: Programming Language and OS Functional IoT: Programming Language and OS Functional IoT: Programming Language and OS Functional IoT: Programming Language and OS Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
  • 2. We drown in MANY MANY languages!We drown in MANY MANY languages!We drown in MANY MANY languages!We drown in MANY MANY languages!We drown in MANY MANY languages! ☆ There are many many languages in the world.☆ There are many many languages in the world.☆ There are many many languages in the world.☆ There are many many languages in the world.☆ There are many many languages in the world. ☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them.☆ Nobody have the exhaustive catalog of them. ☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.☆ However, let's try to get first overview today.
  • 3. What the purpose of language?What the purpose of language?What the purpose of language?What the purpose of language?What the purpose of language? I think that there are three major purpose of the languages: I think that there are three major purpose of the languages: I think that there are three major purpose of the languages: I think that there are three major purpose of the languages: I think that there are three major purpose of the languages: ☆ Implementation☆ Implementation☆ Implementation☆ Implementation☆ Implementation ☆ Verification☆ Verification☆ Verification☆ Verification☆ Verification ☆ OS☆ OS☆ OS☆ OS☆ OS
  • 4. - Implementation -- Implementation -- Implementation -- Implementation -- Implementation -
  • 5. ATSATSATSATSATS ☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/☆ http://www.ats-lang.org/ ☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime☆ Without GC / Without runtime ☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer☆ Theorem proving / Safely use pointer ☆ Syntax is similar to ML☆ Syntax is similar to ML☆ Syntax is similar to ML☆ Syntax is similar to ML☆ Syntax is similar to ML ☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code ☆ Able to import C define macro☆ Able to import C define macro☆ Able to import C define macro☆ Able to import C define macro☆ Able to import C define macro
  • 6. ATS on ESP8266ATS on ESP8266ATS on ESP8266ATS on ESP8266ATS on ESP8266 ☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats☆ https://github.com/fpiot/esp8266-ats
  • 7. What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS? $�vi�user/user_main.dats �39�����val�json_open�=�string0_copy�"{"value1":�"" �40�����val�json_close�=�string0_copy�""�}" �41�����val�temp�=�esp_tostrptr_int�rand �42�����val�json_head�=�strptr_append�(json_open,�temp) �43�����val�json_data�=�strptr_append�(json_head,�json_close) �44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head) �45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error! $�make ATS�user/user_main.dats /home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,� offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable� [json_head$3823(-1)]�nee ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst (strptr_addr_vtype);�S2EVar(4441))]�instead. $�vi�user/user_main.dats �39�����val�json_open�=�string0_copy�"{"value1":�"" �40�����val�json_close�=�string0_copy�""�}" �41�����val�temp�=�esp_tostrptr_int�rand �42�����val�json_head�=�strptr_append�(json_open,�temp) �43�����val�json_data�=�strptr_append�(json_head,�json_close) �44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head) �45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error! $�make ATS�user/user_main.dats /home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,� offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable� [json_head$3823(-1)]�nee ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst (strptr_addr_vtype);�S2EVar(4441))]�instead. $�vi�user/user_main.dats �39�����val�json_open�=�string0_copy�"{"value1":�"" �40�����val�json_close�=�string0_copy�""�}" �41�����val�temp�=�esp_tostrptr_int�rand �42�����val�json_head�=�strptr_append�(json_open,�temp) �43�����val�json_data�=�strptr_append�(json_head,�json_close) �44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head) �45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error! $�make ATS�user/user_main.dats /home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,� offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable� [json_head$3823(-1)]�nee ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst (strptr_addr_vtype);�S2EVar(4441))]�instead. $�vi�user/user_main.dats �39�����val�json_open�=�string0_copy�"{"value1":�"" �40�����val�json_close�=�string0_copy�""�}" �41�����val�temp�=�esp_tostrptr_int�rand �42�����val�json_head�=�strptr_append�(json_open,�temp) �43�����val�json_data�=�strptr_append�(json_head,�json_close) �44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head) �45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error! $�make ATS�user/user_main.dats /home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,� offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable� [json_head$3823(-1)]�nee ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst (strptr_addr_vtype);�S2EVar(4441))]�instead. $�vi�user/user_main.dats �39�����val�json_open�=�string0_copy�"{"value1":�"" �40�����val�json_close�=�string0_copy�""�}" �41�����val�temp�=�esp_tostrptr_int�rand �42�����val�json_head�=�strptr_append�(json_open,�temp) �43�����val�json_data�=�strptr_append�(json_head,�json_close) �44�//��val�()�=�(free�json_open;�free�json_close;�free�temp;�free�json_head) �45�����val�()�=�(free�json_open;�free�json_close;�free�temp)�//�Error! $�make ATS�user/user_main.dats /home/kiwamu/src/esp8266-ats/ifttt_ats/user/user_main.dats:�985(line=32,� offs=43)�--�2237(line=55,�offs=4):�error(3):�the�linear�dynamic�variable� [json_head$3823(-1)]�nee ds�to�be�consumed�but�it�is�preserved�with�the�type�[S2Eapp(S2Ecst (strptr_addr_vtype);�S2EVar(4441))]�instead.
  • 8. ATS on ArduinoATS on ArduinoATS on ArduinoATS on ArduinoATS on Arduino ☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats☆ https://github.com/fpiot/arduino-ats
  • 9. What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS?What error can be captured by ATS? $�vi�../../SATS/lcd.sats �11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n} �12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void $�vi�DATS/main.dats �14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>. �15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{ �16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{ �17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error! �--snip-- �19�������val�()�=�(lcd_setCursor�(lcd,�0,�1); �20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH)) �21�������val�()�=�loop�(lcd,�str,�pos�+�1) $�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter DATS/main.dats:20:26:�unsolved�constraint:�[1] [1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n)) $�vi�../../SATS/lcd.sats �11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n} �12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void $�vi�DATS/main.dats �14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>. �15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{ �16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{ �17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error! �--snip-- �19�������val�()�=�(lcd_setCursor�(lcd,�0,�1); �20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH)) �21�������val�()�=�loop�(lcd,�str,�pos�+�1) $�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter DATS/main.dats:20:26:�unsolved�constraint:�[1] [1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n)) $�vi�../../SATS/lcd.sats �11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n} �12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void $�vi�DATS/main.dats �14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>. �15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{ �16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{ �17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error! �--snip-- �19�������val�()�=�(lcd_setCursor�(lcd,�0,�1); �20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH)) �21�������val�()�=�loop�(lcd,�str,�pos�+�1) $�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter DATS/main.dats:20:26:�unsolved�constraint:�[1] [1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n)) $�vi�../../SATS/lcd.sats �11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n} �12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void $�vi�DATS/main.dats �14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>. �15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{ �16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{ �17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error! �--snip-- �19�������val�()�=�(lcd_setCursor�(lcd,�0,�1); �20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH)) �21�������val�()�=�loop�(lcd,�str,�pos�+�1) $�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter DATS/main.dats:20:26:�unsolved�constraint:�[1] [1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n)) $�vi�../../SATS/lcd.sats �11�fun�lcd_print�{n:int}{i:nat�│�i�<�n}{j:nat�│�i�+�j�<=�n} �12�(lcd:�!lcd_t,�str:�string�(n),�start:�size_t�(i),�len:�size_t�(j)):�void $�vi�DATS/main.dats �14���fun�loop�{n:int}{i:nat�│�i�<�n}�.<n-i>. �15������������(lcd:�!lcd_t,�str:�string�(n),�pos:�size_t�(i)):�void�=�{ �16�//��val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�length�str�then�{ �17�����val�()�=�if�pos�+�i2sz�LCD_WIDTH�<=�1�+�length�str�then�{�//�Error! �--snip-- �19�������val�()�=�(lcd_setCursor�(lcd,�0,�1); �20�����������������lcd_print�(lcd,�str,�pos,�i2sz�LCD_WIDTH)) �21�������val�()�=�loop�(lcd,�str,�pos�+�1) $�patsopt�-o�DATS/main_dats.c.tmp�-d�DATS/main.dats�│&�pats-filter DATS/main.dats:20:26:�unsolved�constraint:�[1] [1]:�((S2EVar(1969�->�i)�+�S2EVar(1970�->�16))�<=�S2EVar(1968�->�n))
  • 10. RustRustRustRustRust ☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/☆ https://www.rust-lang.org/ ☆ Without GC☆ Without GC☆ Without GC☆ Without GC☆ Without GC ☆ Syntax is similar to C☆ Syntax is similar to C☆ Syntax is similar to C☆ Syntax is similar to C☆ Syntax is similar to C ☆ Safely use pointer☆ Safely use pointer☆ Safely use pointer☆ Safely use pointer☆ Safely use pointer ☆ Depends on LLVM☆ Depends on LLVM☆ Depends on LLVM☆ Depends on LLVM☆ Depends on LLVM
  • 11. Rust on mbedRust on mbedRust on mbedRust on mbedRust on mbed ☆ https://github.com/0xc0170/mbed-rust-frdm- k64f-blinky ☆ https://github.com/0xc0170/mbed-rust-frdm- k64f-blinky ☆ https://github.com/0xc0170/mbed-rust-frdm- k64f-blinky ☆ https://github.com/0xc0170/mbed-rust-frdm- k64f-blinky ☆ https://github.com/0xc0170/mbed-rust-frdm- k64f-blinky
  • 12. JhcJhcJhcJhcJhc ☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/ ☆ A Haskell compiler☆ A Haskell compiler☆ A Haskell compiler☆ A Haskell compiler☆ A Haskell compiler ☆ With GC☆ With GC☆ With GC☆ With GC☆ With GC ☆ Only for 32-bit CPU☆ Only for 32-bit CPU☆ Only for 32-bit CPU☆ Only for 32-bit CPU☆ Only for 32-bit CPU ☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries☆ Can't use all of Haskell libraries ☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
  • 13. Jhc on mbedJhc on mbedJhc on mbedJhc on mbedJhc on mbed ☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3☆ https://github.com/ajhc/demo-cortex-m3
  • 14. IvoryIvoryIvoryIvoryIvory ☆ http://ivorylang.org/☆ http://ivorylang.org/☆ http://ivorylang.org/☆ http://ivorylang.org/☆ http://ivorylang.org/ ☆ EDSL on Haskell☆ EDSL on Haskell☆ EDSL on Haskell☆ EDSL on Haskell☆ EDSL on Haskell ☆ Without GC☆ Without GC☆ Without GC☆ Without GC☆ Without GC ☆ No NULL pointer☆ No NULL pointer☆ No NULL pointer☆ No NULL pointer☆ No NULL pointer ☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
  • 15. Ivory on ArduinoIvory on ArduinoIvory on ArduinoIvory on ArduinoIvory on Arduino ☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory☆ https://github.com/fpiot/arduino-ivory
  • 16. IdrisIdrisIdrisIdrisIdris ☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/☆ http://www.idris-lang.org/ ☆ With GC☆ With GC☆ With GC☆ With GC☆ With GC ☆ Theorem proving☆ Theorem proving☆ Theorem proving☆ Theorem proving☆ Theorem proving ☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell☆ Syntax is similar to Haskell ☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code☆ Compiled into C language code
  • 17. Idris on ArduinoIdris on ArduinoIdris on ArduinoIdris on ArduinoIdris on Arduino ☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink☆ https://github.com/stepcut/idris-blink ☆ Eat much memory. Following crash.☆ Eat much memory. Following crash.☆ Eat much memory. Following crash.☆ Eat much memory. Following crash.☆ Eat much memory. Following crash. main�=�do�pinMode�13�1 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 main�=�do�pinMode�13�1 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 main�=�do�pinMode�13�1 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 main�=�do�pinMode�13�1 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 main�=�do�pinMode�13�1 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100 ����������digitalWrite�13�0 ����������delay�100 ����������digitalWrite�13�1 ����������delay�100
  • 18. AdaAdaAdaAdaAda ☆ http://www.adacore.com/☆ http://www.adacore.com/☆ http://www.adacore.com/☆ http://www.adacore.com/☆ http://www.adacore.com/ ☆ Without GC☆ Without GC☆ Without GC☆ Without GC☆ Without GC ☆ Verification with SPARK☆ Verification with SPARK☆ Verification with SPARK☆ Verification with SPARK☆ Verification with SPARK ☆ Ada on Arduino☆ Ada on Arduino☆ Ada on Arduino☆ Ada on Arduino☆ Ada on Arduino ☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada☆ http://playground.arduino.cc/Code/AVR-Ada
  • 19. HexeHexeHexeHexeHexe ☆ http://haxe.org/☆ http://haxe.org/☆ http://haxe.org/☆ http://haxe.org/☆ http://haxe.org/ ☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?☆ Can run on bare metal hardware?
  • 20. - Verification -- Verification -- Verification -- Verification -- Verification -
  • 21. VeriFastVeriFastVeriFastVeriFastVeriFast ☆ http://people.cs.kuleuven.be/~bart.jacobs/ verifast/ ☆ http://people.cs.kuleuven.be/~bart.jacobs/ verifast/ ☆ http://people.cs.kuleuven.be/~bart.jacobs/ verifast/ ☆ http://people.cs.kuleuven.be/~bart.jacobs/ verifast/ ☆ http://people.cs.kuleuven.be/~bart.jacobs/ verifast/ ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment ☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants☆ preconditions, postconditions, invariants ☆ Can prove code with lemma function?☆ Can prove code with lemma function?☆ Can prove code with lemma function?☆ Can prove code with lemma function?☆ Can prove code with lemma function?
  • 22. VeriFast on ArduinoVeriFast on ArduinoVeriFast on ArduinoVeriFast on ArduinoVeriFast on Arduino ☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast☆ https://github.com/fpiot/arduino-verifast
  • 23. CoqCoqCoqCoqCoq ☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/☆ https://coq.inria.fr/ ☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover ☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics☆ Semi-automatic proving with tactics ☆ Extract code into implementation with GC☆ Extract code into implementation with GC☆ Extract code into implementation with GC☆ Extract code into implementation with GC☆ Extract code into implementation with GC ☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/☆ Good document: http://proofcafe.org/sf-beta/
  • 24. Isabelle/HOLIsabelle/HOLIsabelle/HOLIsabelle/HOLIsabelle/HOL ☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/☆ https://isabelle.in.tum.de/ ☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover☆ Theorem prover
  • 25. AlloyAlloyAlloyAlloyAlloy ☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/☆ http://alloy.mit.edu/ ☆ A tool to analyze specifications☆ A tool to analyze specifications☆ A tool to analyze specifications☆ A tool to analyze specifications☆ A tool to analyze specifications ☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic☆ Write specification as first-order predicate logic ☆ Find example instance on specification☆ Find example instance on specification☆ Find example instance on specification☆ Find example instance on specification☆ Find example instance on specification ☆ Find counter-example on specification☆ Find counter-example on specification☆ Find counter-example on specification☆ Find counter-example on specification☆ Find counter-example on specification ☆ Support abductive reasoning☆ Support abductive reasoning☆ Support abductive reasoning☆ Support abductive reasoning☆ Support abductive reasoning
  • 26. ACSL (Frama-C)ACSL (Frama-C)ACSL (Frama-C)ACSL (Frama-C)ACSL (Frama-C) ☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html☆ http://frama-c.com/acsl.html ☆ Specification language for C programs☆ Specification language for C programs☆ Specification language for C programs☆ Specification language for C programs☆ Specification language for C programs ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment ☆ Design by contract (DbC) in C language comment
  • 27. CBMCCBMCCBMCCBMCCBMC ☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/☆ http://www.cprover.org/cbmc/ ☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++☆ Bounded Model Checker for C and C++ ☆ Verify array bounds (buffer overflows), pointer safety, exceptions and user-specified assertions ☆ Verify array bounds (buffer overflows), pointer safety, exceptions and user-specified assertions ☆ Verify array bounds (buffer overflows), pointer safety, exceptions and user-specified assertions ☆ Verify array bounds (buffer overflows), pointer safety, exceptions and user-specified assertions ☆ Verify array bounds (buffer overflows), pointer safety, exceptions and user-specified assertions
  • 28. - OS -- OS -- OS -- OS -- OS -
  • 29. seL4 microkernelseL4 microkernelseL4 microkernelseL4 microkernelseL4 microkernel ☆ https://sel4.systems/☆ https://sel4.systems/☆ https://sel4.systems/☆ https://sel4.systems/☆ https://sel4.systems/ ☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL☆ L4 microkernel verified by Isabelle/HOL ☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86☆ CPU: ARM11, Cortex-A, x86 ☆ Support multicore☆ Support multicore☆ Support multicore☆ Support multicore☆ Support multicore ☆ Can't safely use DMA☆ Can't safely use DMA☆ Can't safely use DMA☆ Can't safely use DMA☆ Can't safely use DMA ☆ Binary code level verification!☆ Binary code level verification!☆ Binary code level verification!☆ Binary code level verification!☆ Binary code level verification!
  • 30. Structure of seL4Structure of seL4Structure of seL4Structure of seL4Structure of seL4
  • 31. How to verify seL4? #1How to verify seL4? #1How to verify seL4? #1How to verify seL4? #1How to verify seL4? #1 #�Detail:�https://github.com/seL4/l4v $�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita� python-psutil�openjfx�openjdk-8-jdk $�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ $�mkdir�seL4_verify $�cd�seL4_verify $�repo�init�-u�https://github.com/seL4/verification-manifest.git $�repo�sync $�ls HOL4/��graph-refine/��isabelle/��l4v/��seL4/ $�cd�l4v $�mkdir�-p�~/.isabelle/etc $�cp�-i�misc/etc/settings�~/.isabelle/etc/settings $�./isabelle/bin/isabelle�components�-a $�./isabelle/bin/isabelle�jedit�-bf $�./isabelle/bin/isabelle�build�-bv�HOL-Word #�Detail:�https://github.com/seL4/l4v $�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita� python-psutil�openjfx�openjdk-8-jdk $�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ $�mkdir�seL4_verify $�cd�seL4_verify $�repo�init�-u�https://github.com/seL4/verification-manifest.git $�repo�sync $�ls HOL4/��graph-refine/��isabelle/��l4v/��seL4/ $�cd�l4v $�mkdir�-p�~/.isabelle/etc $�cp�-i�misc/etc/settings�~/.isabelle/etc/settings $�./isabelle/bin/isabelle�components�-a $�./isabelle/bin/isabelle�jedit�-bf $�./isabelle/bin/isabelle�build�-bv�HOL-Word #�Detail:�https://github.com/seL4/l4v $�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita� python-psutil�openjfx�openjdk-8-jdk $�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ $�mkdir�seL4_verify $�cd�seL4_verify $�repo�init�-u�https://github.com/seL4/verification-manifest.git $�repo�sync $�ls HOL4/��graph-refine/��isabelle/��l4v/��seL4/ $�cd�l4v $�mkdir�-p�~/.isabelle/etc $�cp�-i�misc/etc/settings�~/.isabelle/etc/settings $�./isabelle/bin/isabelle�components�-a $�./isabelle/bin/isabelle�jedit�-bf $�./isabelle/bin/isabelle�build�-bv�HOL-Word #�Detail:�https://github.com/seL4/l4v $�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita� python-psutil�openjfx�openjdk-8-jdk $�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ $�mkdir�seL4_verify $�cd�seL4_verify $�repo�init�-u�https://github.com/seL4/verification-manifest.git $�repo�sync $�ls HOL4/��graph-refine/��isabelle/��l4v/��seL4/ $�cd�l4v $�mkdir�-p�~/.isabelle/etc $�cp�-i�misc/etc/settings�~/.isabelle/etc/settings $�./isabelle/bin/isabelle�components�-a $�./isabelle/bin/isabelle�jedit�-bf $�./isabelle/bin/isabelle�build�-bv�HOL-Word #�Detail:�https://github.com/seL4/l4v $�sudo�apt-get�install�python-pip�python-dev�libxml2-utils�python-tempita� python-psutil�openjfx�openjdk-8-jdk $�export�ISABELLE_JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ $�mkdir�seL4_verify $�cd�seL4_verify $�repo�init�-u�https://github.com/seL4/verification-manifest.git $�repo�sync $�ls HOL4/��graph-refine/��isabelle/��l4v/��seL4/ $�cd�l4v $�mkdir�-p�~/.isabelle/etc $�cp�-i�misc/etc/settings�~/.isabelle/etc/settings $�./isabelle/bin/isabelle�components�-a $�./isabelle/bin/isabelle�jedit�-bf $�./isabelle/bin/isabelle�build�-bv�HOL-Word
  • 32. How to verify seL4? #2How to verify seL4? #2How to verify seL4? #2How to verify seL4? #2How to verify seL4? #2 $�./run_tests Running�40�test(s)... ��running�isabelle�...��������������pass������(�0:00:05,��0.62GB) ��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB) --snip-- ��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB) ��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB) ------------------------------------------------------------------------ TEST�FAILURE:�AutoCorresSEL4 --snip-- AutoCorresSEL4:�theory�TestSEL4 ***�Timeout AutoCorresSEL4�FAILED $�./run_tests Running�40�test(s)... ��running�isabelle�...��������������pass������(�0:00:05,��0.62GB) ��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB) --snip-- ��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB) ��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB) ------------------------------------------------------------------------ TEST�FAILURE:�AutoCorresSEL4 --snip-- AutoCorresSEL4:�theory�TestSEL4 ***�Timeout AutoCorresSEL4�FAILED $�./run_tests Running�40�test(s)... ��running�isabelle�...��������������pass������(�0:00:05,��0.62GB) ��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB) --snip-- ��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB) ��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB) ------------------------------------------------------------------------ TEST�FAILURE:�AutoCorresSEL4 --snip-- AutoCorresSEL4:�theory�TestSEL4 ***�Timeout AutoCorresSEL4�FAILED $�./run_tests Running�40�test(s)... ��running�isabelle�...��������������pass������(�0:00:05,��0.62GB) ��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB) --snip-- ��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB) ��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB) ------------------------------------------------------------------------ TEST�FAILURE:�AutoCorresSEL4 --snip-- AutoCorresSEL4:�theory�TestSEL4 ***�Timeout AutoCorresSEL4�FAILED $�./run_tests Running�40�test(s)... ��running�isabelle�...��������������pass������(�0:00:05,��0.62GB) ��running�CamkesAdlSpec�...���������pass������(�0:00:48,��3.52GB) --snip-- ��running�AutoCorresTest�...��������pass������(�0:20:49,��6.93GB) ��running�AutoCorresSEL4�...��������FAILED�*��(�2:00:59,��6.36GB) ------------------------------------------------------------------------ TEST�FAILURE:�AutoCorresSEL4 --snip-- AutoCorresSEL4:�theory�TestSEL4 ***�Timeout AutoCorresSEL4�FAILED
  • 33. How to compile and run seL4? #1How to compile and run seL4? #1How to compile and run seL4? #1How to compile and run seL4? #1How to compile and run seL4? #1 #�Detail:�http://sel4.systems/Info/GettingStarted/ $�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils� python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc- missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python- pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu $�mkdir�seL4_repo $�cd�seL4_repo $�repo�init�-u�https://github.com/seL4/sel4test-manifest.git $�repo�sync $�ls�-F Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/�� tools/ $�make�ia32_simulation_release_xml_defconfig $�make #�Detail:�http://sel4.systems/Info/GettingStarted/ $�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils� python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc- missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python- pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu $�mkdir�seL4_repo $�cd�seL4_repo $�repo�init�-u�https://github.com/seL4/sel4test-manifest.git $�repo�sync $�ls�-F Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/�� tools/ $�make�ia32_simulation_release_xml_defconfig $�make #�Detail:�http://sel4.systems/Info/GettingStarted/ $�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils� python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc- missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python- pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu $�mkdir�seL4_repo $�cd�seL4_repo $�repo�init�-u�https://github.com/seL4/sel4test-manifest.git $�repo�sync $�ls�-F Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/�� tools/ $�make�ia32_simulation_release_xml_defconfig $�make #�Detail:�http://sel4.systems/Info/GettingStarted/ $�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils� python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc- missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python- pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu $�mkdir�seL4_repo $�cd�seL4_repo $�repo�init�-u�https://github.com/seL4/sel4test-manifest.git $�repo�sync $�ls�-F Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/�� tools/ $�make�ia32_simulation_release_xml_defconfig $�make #�Detail:�http://sel4.systems/Info/GettingStarted/ $�sudo�apt-get�install�git�python�build-essential�realpath�libxml2-utils� python-tempita�gcc-multilib�ccache�ncurses-dev�cabal-install�ghc�libghc- missingh-dev�libghc-split-dev�python-pip�python-jinja2�python-ply�python- pyelftools�libghc-data-ordlist-dev�gcc-arm-none-eabi�qemu $�mkdir�seL4_repo $�cd�seL4_repo $�repo�init�-u�https://github.com/seL4/sel4test-manifest.git $�repo�sync $�ls�-F Kbuild@��Kconfig@��Makefile@��apps@��configs@��kernel/��libs/��projects/�� tools/ $�make�ia32_simulation_release_xml_defconfig $�make
  • 34. How to compile and run seL4? #2How to compile and run seL4? #2How to compile and run seL4? #2How to compile and run seL4? #2How to compile and run seL4? #2 $�ls�images kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99* $�make�simulate-ia32 qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd� images/sel4test-driver-image-ia32-pc99 --snip-- 136/136�tests�passed. Ignoring�call�to�sys_exit_group Ignoring�call�to�sys_rt_sigprocmask Ignoring�call�to�sys_gettid Ignoring�call�to�sys_getpid sys_tgkill�assuming�self�kill $�ls�images kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99* $�make�simulate-ia32 qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd� images/sel4test-driver-image-ia32-pc99 --snip-- 136/136�tests�passed. Ignoring�call�to�sys_exit_group Ignoring�call�to�sys_rt_sigprocmask Ignoring�call�to�sys_gettid Ignoring�call�to�sys_getpid sys_tgkill�assuming�self�kill $�ls�images kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99* $�make�simulate-ia32 qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd� images/sel4test-driver-image-ia32-pc99 --snip-- 136/136�tests�passed. Ignoring�call�to�sys_exit_group Ignoring�call�to�sys_rt_sigprocmask Ignoring�call�to�sys_gettid Ignoring�call�to�sys_getpid sys_tgkill�assuming�self�kill $�ls�images kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99* $�make�simulate-ia32 qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd� images/sel4test-driver-image-ia32-pc99 --snip-- 136/136�tests�passed. Ignoring�call�to�sys_exit_group Ignoring�call�to�sys_rt_sigprocmask Ignoring�call�to�sys_gettid Ignoring�call�to�sys_getpid sys_tgkill�assuming�self�kill $�ls�images kernel-ia32-pc99*��sel4test-driver-image-ia32-pc99* $�make�simulate-ia32 qemu-system-i386�-m�512�-nographic�-kernel�images/kernel-ia32-pc99�-initrd� images/sel4test-driver-image-ia32-pc99 --snip-- 136/136�tests�passed. Ignoring�call�to�sys_exit_group Ignoring�call�to�sys_rt_sigprocmask Ignoring�call�to�sys_gettid Ignoring�call�to�sys_getpid sys_tgkill�assuming�self�kill
  • 35. eChronos RTOSeChronos RTOSeChronos RTOSeChronos RTOSeChronos RTOS ☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/☆ http://ssrg.nicta.com.au/projects/TS/echronos/ ☆ Embedded version of seL4☆ Embedded version of seL4☆ Embedded version of seL4☆ Embedded version of seL4☆ Embedded version of seL4 ☆ Run without MMU☆ Run without MMU☆ Run without MMU☆ Run without MMU☆ Run without MMU ☆ not yet publish verification☆ not yet publish verification☆ not yet publish verification☆ not yet publish verification☆ not yet publish verification
  • 36. RedoxRedoxRedoxRedoxRedox ☆ http://www.redox-os.org/☆ http://www.redox-os.org/☆ http://www.redox-os.org/☆ http://www.redox-os.org/☆ http://www.redox-os.org/ ☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust☆ Desktop OS developed by Rust ☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86 ☆ Support file system☆ Support file system☆ Support file system☆ Support file system☆ Support file system ☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139)☆ Support Ethernet (RTL8139) ☆ Support GUI and window system☆ Support GUI and window system☆ Support GUI and window system☆ Support GUI and window system☆ Support GUI and window system
  • 37. Mirage OSMirage OSMirage OSMirage OSMirage OS ☆ http://www.xenproject.org/developers/teams/ mirage-os.html ☆ http://www.xenproject.org/developers/teams/ mirage-os.html ☆ http://www.xenproject.org/developers/teams/ mirage-os.html ☆ http://www.xenproject.org/developers/teams/ mirage-os.html ☆ http://www.xenproject.org/developers/teams/ mirage-os.html ☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml☆ Cloud Operating System developed by OCaml ☆ Platform: Xen☆ Platform: Xen☆ Platform: Xen☆ Platform: Xen☆ Platform: Xen
  • 38. AOSAOSAOSAOSAOS ☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos☆ https://github.com/xlq/aos ☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS☆ Tiny OS developed by ATS ☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86☆ CPU: x86 ☆ Using own stream library☆ Using own stream library☆ Using own stream library☆ Using own stream library☆ Using own stream library
  • 39. What are you interested in?What are you interested in?What are you interested in?What are you interested in?What are you interested in? I'm personally interested in following:I'm personally interested in following:I'm personally interested in following:I'm personally interested in following:I'm personally interested in following: ☆ ATS☆ ATS☆ ATS☆ ATS☆ ATS ☆ Rust☆ Rust☆ Rust☆ Rust☆ Rust ☆ Ada☆ Ada☆ Ada☆ Ada☆ Ada ☆ VeriFast☆ VeriFast☆ VeriFast☆ VeriFast☆ VeriFast ☆ ACSL☆ ACSL☆ ACSL☆ ACSL☆ ACSL ☆ seL4☆ seL4☆ seL4☆ seL4☆ seL4
  • 40. License of photos #1License of photos #1License of photos #1License of photos #1License of photos #1 *�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ ょうぶてい)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/38446022@N00/3912785418/ ��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-� Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ ょうぶてい)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/38446022@N00/3912785418/ ��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-� Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ ょうぶてい)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/38446022@N00/3912785418/ ��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-� Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ ょうぶてい)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/38446022@N00/3912785418/ ��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-� Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�SAMURAI�house�/�旧細川刑部邸(きゅうほそかわぎ ょうぶてい)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3441295930/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�My�son.�My�Lego.�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/38446022@N00/3912785418/ ��Copyright:�Josh�Wedin�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�/�⼤内宿(おおうちじゅく)�│�Flickr�-� Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3908054520/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5889056842/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0
  • 41. License of photos #2License of photos #2License of photos #2License of photos #2License of photos #2 *�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo� Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)� │�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo� Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)� │�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo� Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)� │�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo� Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)� │�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0 *�Japanese�traditional�style�farm�house�/�古⺠家(こみんか)�│�Flickr�-�Photo� Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/3633358136/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�traditional�style�house�interior�design�/�和⾵建築(わふうけんち く)�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/5420658494/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Japanese�old�style�house�interior�design�/�和室(わしつ)の内装(ないそう)� │�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/tanaka_juuyoh/2092875176/ ��Copyright:�TANAKA�Juuyoh�(⽥中⼗洋)�/�License:�CC�BY�2.0 *�Creative�Commons�BBB�│�Flickr�-�Photo�Sharing! ��https://www.flickr.com/photos/steren/2732488224/ ��Copyright:�Steren�Giannini�/�License:�CC�BY�2.0