Graph of the components and their dependencies. Implementation will start at the bottom and move upwards.

This commit is contained in:
Georges Dupéron 2019-03-05 09:36:49 +01:00
parent 0850ab769f
commit 0c346043ff

289
deps.sh Executable file
View File

@ -0,0 +1,289 @@
#!/bin/sh
# align on "->" and "[" keyboard macro:
# (fset 'indent->\[ [C-home ?\C-s ?. ?d ?i ?g ?r ?a ?p ?h ?\C-m home ?\C- ?\C-s ?. ?\} ?\C-m ?\M-x ?a ?l ?i ?g ?n ?- ?r ?e ?g ?e ?x ?p ?\C-m ?- ?> ?\C-m C-home ?\C-m ?\C-? ?\C-s ?. ?d ?i ?g ?r ?a ?p ?h ?\C-m home ?\C- ?\C-s ?. ?\} ?\C-m ?\M-x ?a ?l ?i ?g ?n ?- ?r ?e ?g ?e ?x ?p ?\C-m ?\[ ?\[ ?\] ?\C-m ?\C-m ?\C-?])
(sed -e '/^\./!s/^\( *\)\([^ "][^ ]*\)/\1"\2"/' \
|sed -e '/^\./!s/^\( *\([^-]\|-[^>]\)\+ *-> *\)\([^ "][^ ]*\)/\1"\3"/' \
|sed -e '/^\./!s/3rdpartybin/shape=box/' \
|sed -e '/^\./!s/3rdpartyplatform/shape=box/' \
|sed -e '/^\./!s/bdep/style=dashed/' \
|sed -e '/^\./!s/rdep/style=solid/' \
|sed -e '/^\./!s/\([[].*\)mostly-solved/\1fillcolor=yellow,style=filled/' \
|sed -e '/^\./!s/\([[].*\)unsolved+problem/\1fillcolor=red,style=filled/' \
|sed -e '/^\./!s/\([[].*\)many-to-do-ok/\1fillcolor=azure,style=filled/' \
|sed -e '/^\./!s/\([[].*\)many-to-do/\1fillcolor=deepskyblue,style=filled/' \
|sed -e '/^\./!s/\([[].*\)unsolved/\1fillcolor=orange,style=filled/' \
|sed -e '/^\./!s/\([[].*\)solved/\1fillcolor=darkolivegreen1,style=filled/' \
|sed -e '/^\./!s/\([[].*\)implemented/\1fillcolor=green,style=filled/' \
|sed -e '/^\./!s/\([[].*\)currentwip/\1color=green,penwidth=5/' \
|sed -e '/^\./!s/\([[].*\)wip/\1color=green,penwidth=5,style="filled,dashed"/' \
|sed -e 's/^\./ /') <<'EOF'
.digraph g {
. compound=true
. subgraph cluster_legend {
. label=legend
. subgraph cluster_legend_deps {
. label="dependencies"
"third-party tool" [3rdpartybin]
component -> build-dep [bdep]
component -> run-time-dep [rdep]
. }
. subgraph cluster_legend_solved {
. label="solved (theoretically)"
.// subgraph cluster_legend_solved_ok {
.// style=invis label="";
implemented [implemented]
solved [solved]
many-to-do-ok [many-to-do-ok,label="many to implement\nsimpler workaround"]
.// }
.// subgraph cluster_legend_solved_problem {
.// style=invis label="";
"mostly solved" [mostly-solved]
unsolved [unsolved]
many-to-do [many-to-do, label="many to implement\n500-page standards\npoorly explained\npoorly indexed"]
"open problem?" [unsolved+problem]
.// }
. }
. subgraph cluster_legend_implem {
. label="implementation"
wip [wip,fillcolor=none]
"current wip" [currentwip]
. }
. }
. subgraph cluster_host_platform {
. label="host platform"
host-platform [3rdpartyplatform,label="host = one of …"]
sh [3rdpartyplatform]
x86-bootsector [3rdpartyplatform]
raspberry-pi [3rdpartyplatform]
windows-.exe [3rdpartyplatform]
html+js [3rdpartyplatform]
host-platform-more [3rdpartyplatform,label="…"]
. }
host-platform -> sh [rdep]
host-platform -> x86-bootsector [rdep]
host-platform -> raspberry-pi [rdep]
host-platform -> windows-.exe [rdep]
host-platform -> html+js [rdep]
host-platform -> host-platform-more [rdep]
. subgraph cluster_build_os {
. label="bootstrap build of the OS"
nano-scheme [solved,currentwip]
micro-scheme [solved]
reproducible-environment [solved]
chameleon [solved,wip]
build-system [mostly-solved]
bootstrappable [solved]
gcc [3rdpartybin]
sgdisk [3rdpartybin]
zip [3rdpartybin]
other-chameleon-tools [3rdpartybin,label="other tools"]
micro-scheme -> nano-scheme [rdep]
build-system -> micro-scheme [rdep]
Guix -> "Guix bootstrap" [bdep]
Nix -> Guix [bdep]
build-system -> bootstrappable [rdep]
build-system -> reproducible-environment [rdep]
chameleon -> build-system [rdep]
chameleon -> gcc [rdep]
chameleon -> sgdisk [rdep]
chameleon -> zip [rdep]
chameleon -> other-chameleon-tools [rdep]
proot [3rdpartybin]
run-in-emulator [solved,wip]
. subgraph cluster_tests {
. label="tests"
tests/portability [label=portability]
tests/gui [label=gui]
tests/bootstrappable-builds [label="build is\nbootstrappable"]
subimage-search [implemented]
tests/reproducible-builds [label="build is\nreproducible"]
. }
qemu [3rdpartybin]
. subgraph cluster_repro_env {
. label="reproducible build environment (software, hardware)"
reproducible-environment
Nix
proot
"POSIX system" [3rdpartyplatform]
. }
. }
. subgraph cluster_programming_language {
. label="programming language"
programming-language
typesystem [mostly-solved]
syntax [solved]
semantics [mostly-solved]
vm [unsolved]
IDE [solved]
refactoring [mostly-solved]
hyper-literate [solved]
"package management\n(deps & versions)" [unsolved+problem]
. }
. subgraph cluster_portble_platform {
. label="portable platform"
"portable execution stubs"
basic-drivers [solved]
"more drivers\n(udi,hypervised linux)" [many-to-do-ok]
. }
vm -> "portable execution stubs" [rdep]
"portable execution stubs" -> chameleon [bdep]
"portable execution stubs" [solved]
run-in-emulator
. subgraph cluster_gui {
. label="gui"
gui [mostly-solved]
constraint-solver [mostly-solved]
graph-layout [unsolved]
constraint-solver-contract [unsolved+problem]
relative-arbitrary-precision [mostly-solved]
zoomable [mostly-solved]
. }
. subgraph cluster_document_model {
. label="document model"
"general\nprinciples" [solved]
. subgraph cluster_viewers {
. label="viewers"
"rich text lens" [solved]
"list lens" [solved, label="column-list lens"]
"set lens" [solved]
"compound document lens" [solved]
. }
. subgraph cluster_tools {
. label="tools"
sort [solved]
filter [solved]
project [solved]
other-tools [mostly-solved,label="…"]
. }
. subgraph cluster_algorithms {
. label="algorithms"
other-algorithms [label="…",many-to-do]
"abstract datatypes" [solved]
union-find [solved]
"sat solver" [solved]
raytracing [solved]
sort-algo [label="sort",solved]
. }
. subgraph cluster_documents {
. label="data / document types"
transformation-of [solved]
styled-layout-of [solved]
printable-layout [unsolved]
compound-document [solved]
. subgraph cluster_simple_data {
. label="simple data"
"vectorial image" [unsolved]
"bitmap image" [solved]
set [solved]
list [solved,label="list / database"]
"rich text" [solved]
. }
. }
. subgraph cluster_data_sources {
. label="data sources"
. subgraph cluster_importers {
. label="importers"
"word" [many-to-do]
"excel" [many-to-do]
"PDF" [many-to-do]
"RTF" [many-to-do]
"PSD" [many-to-do]
"SVG" [many-to-do]
. }
. subgraph cluster_network {
. label="network and protocols"
"websites\n(webkit in sandbox)" [many-to-do-ok]
more-network-protocols [many-to-do, label="…"]
"NTP" [solved]
"REST APIs" [many-to-do]
. }
. }
. }
"REST APIs" -> compound-document [ltail=cluster_data_sources,lhead=cluster_documents]
compound-document -> styled-layout-of
compound-document -> transformation-of
compound-document -> list [lhead=cluster_simple_data]
styled-layout-of -> printable-layout
"list lens" -> compound-document [ltail=cluster_viewers,lhead=cluster_documents]
. /*
"list lens" -> list
"set lens" -> set
"compound document lens" -> "compound document"
"rich text lens" -> "rich text"
. */
"set lens" -> gui [rdep,ltail=cluster_viewers]
. /*
"set lens" -> gui
"compound document lens" -> gui
"rich text lens" -> gui
. */
"compound document lens" -> constraint-solver
"compound document lens" -> graph-layout
sort -> sort-algo [rdep,ltail=cluster_tools,lhead=cluster_algorithms]
other-algorithms -> "abstract datatypes" [rdep]
union-find -> "abstract datatypes" [rdep]
"sat solver" -> "abstract datatypes" [rdep]
raytracing -> "abstract datatypes" [rdep]
sort-algo -> "abstract datatypes" [rdep]
sort -> compound-document [rdep,ltail=cluster_tools,lhead=cluster_documents]
list -> typesystem [bdep,ltail=cluster_documents]
. /*
sort -> list
filter -> list
project -> list
. */
reproducible-environment -> Nix
reproducible-environment -> proot
reproducible-environment -> run-in-emulator
reproducible-environment -> "POSIX system"
tests/portability -> subimage-search [rdep]
tests/gui -> subimage-search [rdep]
tests/portability -> run-in-emulator [rdep]
nano-scheme -> sh [rdep]
gui -> basic-drivers [rdep]
Guix [3rdpartybin]
"Guix bootstrap" [3rdpartybin]
Nix [3rdpartybin]
basic-drivers -> host-platform [rdep]
gui -> programming-language [bdep]
programming-language -> typesystem [rdep]
programming-language -> vm [rdep]
run-in-emulator -> qemu [rdep]
subimage-search
tests/reproducible-builds
"portable execution stubs" -> "host-platform" [rdep]
SVG -> "REST APIs" [style=invis]
many-to-do-ok -> "current wip" [style=invis]
printable-layout -> "zoomable" [style=invis]
_sh [style=invis]
_sh -> "sh" [style=invis]
"current wip" -> "general\nprinciples" [style=invis]
"Guix bootstrap" -> _sh [style=invis]
styled-layout-of -> set [style=invis]
"general\nprinciples" -> "list lens" [style=invis]
.}
EOF
#dynalist → c'est une mind map (moche) avec des checkbox, dates et hashtags?
# mode lecture 1 focus, édition 1 focus, édition+référence: 2 focus, édition+référence+outils: 3 focus, édition+référence+calculs+style+outils: 5 focus
# DK encyclo vs. Android encyclopedias
# DK book on multimedia
# keyboard
# hw difficulties:
# * PCB layout: lots of interferences (see rowhammer…)
# * GPU is one of the most opaque components. In the Raspberry Pi it means that the boot process is partially opaque.
# * Stateless : a lot of components have flashable firmware nowadays
# * Opaque / undocumented HW
# * casing (high precision otherwise buttons get stuck or jiggle)
# * If you want to make your own hardware, probably best is to hire someone who did it for a small-scale project (e.g. EvilDragon who did the Pandora and Pyra)