Slide 1

Slide 1 text

Mundane Utility by Mark Hibberd

Slide 2

Slide 2 text

“Awesomeness put to mundane use” TV Tropes on Mundane Utility

Slide 3

Slide 3 text

Unix Shell Userland Kernel Hardware

Slide 4

Slide 4 text

How did we get here…

Slide 5

Slide 5 text

How did we get here… firmware

Slide 6

Slide 6 text

How did we get here… firmware boot loader

Slide 7

Slide 7 text

How did we get here… firmware boot loader kernel

Slide 8

Slide 8 text

How did we get here… firmware boot loader kernel init

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

How did we get here… firmware boot loader kernel init

Slide 11

Slide 11 text

How did we get here… firmware boot loader kernel init getty note this is just one example sequence at this point onwards

Slide 12

Slide 12 text

How did we get here… firmware boot loader kernel init getty login

Slide 13

Slide 13 text

How did we get here… firmware boot loader kernel init getty login shell

Slide 14

Slide 14 text

How did we get here… firmware boot loader kernel init getty login shell ls

Slide 15

Slide 15 text

A shell…

Slide 16

Slide 16 text

why? A shell…

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

A shell… Line Editing Command Parsing Command Expansion Process Management Builtins

Slide 19

Slide 19 text

line editing… q w e r t y

Slide 20

Slide 20 text

command parsing…

Slide 21

Slide 21 text

command parsing… ::= lists EOF | EOF ::= list | list list ::= list | list pipeline | list pipeline ::= pipeline | pipeline command ::= word | command word ::= ; ::= && ::= || ::= | ::= …

Slide 22

Slide 22 text

command parsing… character input

Slide 23

Slide 23 text

command parsing… lexer

Slide 24

Slide 24 text

command parsing… token stream

Slide 25

Slide 25 text

command parsing… parser

Slide 26

Slide 26 text

command parsing… program

Slide 27

Slide 27 text

lexing words… word soft hard unquoted text variable text variable

Slide 28

Slide 28 text

process management…

Slide 29

Slide 29 text

ls | sort | uniq process management…

Slide 30

Slide 30 text

process management… fork() ls | sort | uniq uniq sort ls xsh xsh xsh xsh

Slide 31

Slide 31 text

fork() fork() ls | sort | uniq uniq sort ls xsh xsh xsh xsh process management…

Slide 32

Slide 32 text

fork() fork() exec() ls | sort | uniq uniq sort ls xsh xsh xsh xsh process management…

Slide 33

Slide 33 text

fork() fork() fork() exec() ls | sort | uniq uniq sort ls xsh xsh xsh xsh process management…

Slide 34

Slide 34 text

fork() fork() fork() exec() exec() ls | sort | uniq uniq sort ls xsh xsh xsh xsh process management…

Slide 35

Slide 35 text

fork() fork() fork() exec() exec() exec() ls | sort | uniq uniq sort ls xsh xsh xsh xsh process management…

Slide 36

Slide 36 text

ls | sort | uniq xsh xsh xsh xsh uniq sort ls fork() process management…

Slide 37

Slide 37 text

ls | sort | uniq xsh xsh xsh xsh uniq sort ls fork() fork() process management…

Slide 38

Slide 38 text

ls | sort | uniq xsh xsh xsh xsh uniq sort ls fork() fork() fork() process management…

Slide 39

Slide 39 text

ls | sort | uniq xsh xsh xsh xsh uniq sort ls fork() fork() fork() exec() process management…

Slide 40

Slide 40 text

ls | sort | uniq xsh xsh xsh xsh uniq sort ls fork() fork() fork() exec() exec() process management…

Slide 41

Slide 41 text

ls | sort | uniq xsh xsh xsh xsh uniq sort ls fork() fork() fork() exec() exec() exec() process management…

Slide 42

Slide 42 text

ls | sort | uniq fork() xsh xsh xsh xsh ls sort uniq process management…

Slide 43

Slide 43 text

ls | sort | uniq fork() exec() xsh xsh xsh xsh ls sort uniq process management…

Slide 44

Slide 44 text

ls | sort | uniq fork() fork() exec() xsh xsh xsh xsh ls sort uniq process management…

Slide 45

Slide 45 text

ls | sort | uniq fork() fork() exec() exec() xsh xsh xsh xsh ls sort uniq process management…

Slide 46

Slide 46 text

ls | sort | uniq fork() fork() fork() exec() exec() xsh xsh xsh xsh ls sort uniq process management…

Slide 47

Slide 47 text

ls | sort | uniq fork() fork() fork() exec() exec() exec() xsh xsh xsh xsh ls sort uniq process management…

Slide 48

Slide 48 text

pushing limits

Slide 49

Slide 49 text

workshop @ 1:15 https://github.com/markhibberd/xsh

Slide 50

Slide 50 text

Mundane Utility by Mark Hibberd