Oberon/oberongenealogy.gv

/* 
Author: Ivan Denisov iadenisov@oberon.org
License: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
http://pub.iadenisov.ru/blackbox/oberongenealogy.gv

dot oberongenealogy.gv -Tpdf -o oberongenealogy.pdf
dot oberongenealogy.gv -Tsvg -o oberongenealogy.svg

*/

digraph genealogy {

	margin=0.1;

	node [fontname="Verdana", fontsize="12", shape="rect"]
	edge [fontname="Verdana", fontsize="8"]
	
	/* programming languages */
	pascal [label="Pascal (N.Wirth)"]
	modula2 [label="Modula-2 (N.Wirth)"]
	oberon [label="Oberon (N.Wirth)"]
	oberon2 [label="Oberon-2\n(N.Wirth, H.Mössenböck)"]
	oberonsa [label="Oberon-SA (N.Wirth)"]
	oberon07 [label="Oberon-07 (N.Wirth)"]
	objectoberon [label="Object Oberon\n(H.Mössenböck, J.Templ, R.Griesemer)"]
	componentpascal [label="Component Pascal"]
	oberonl [label="Oberon/L"]	// http://oberoncore.ru/library/leigh_make_way_for_oberon-f
	activeoberon [label="Active Oberon, 1997\n(B.Hansen, J.Gutknecht, P.Muller, P.Reali)"]
	zonnon [label="Zonnon (J.Gutknecht)"]
	eo [label="Oberon-07/Oberon-2, 2020 Edition\n(A.Pirklbauer)"]

	pascal, modula2, oberon, oberon2, oberon07, componentpascal, oberonl, oberonsa, objectoberon,
	 activeoberon, zonnon, eo [style="rounded,filled", fillcolor="#cce6ff"]

	/* people */
	// wirth [label="Niklaus Wirth"]
	//mössenböck [label="Hanspeter Mössenböck"]
	//szyperski [label="Clemens Szyperski"]
	//pfister [label="Cuno Pfister"]
	//heeb [label="Beat Heeb"]
	//gutknecht [label="Jürg Gutknecht"]
	//templ [label="Josef Templ"]
	// shiryaev [label="Alexander Shiryaev"]

	// mössenböck, szyperski, pfister, heeb, gutknecht, templ [shape="ellipse", style="filled", fillcolor="#d9b3ff"] // wirth

	/* organizations */
	// eth [label="ETH-Zürich"] 
	ominc [label="1993, Oberon microsystems Inc.\n(C.Pfister, B.Heeb, M.Franz, C.Szyperski)"] // http://oberon.ch
	// esmertec [label="1999, Esmertec"] // https://www.esmertec.com/
	cronosgroup [label="1985, Kronos Research Group"] // http://www.kronos.ru/members
	excelsior [label="1999, Exlesior Inc."] // http://www.excelsior.ru/history

	ominc, cronosgroup, excelsior [shape="rect", style="filled", fillcolor="grey"] // esmertec

	/* systems */
	oberonsystem [label="1985, Oberon System\n(N.Wirth, J.Gutknecht)", group="ob1"]
	oberonv1v2 [label="1987/1991, Oberon V1/V2"] // https://en.wikipedia.org/wiki/Oberon_(operating_system)
	medos2 [label="Medos-2"]
	oberonv4 [label="1994, Oberon V4\n(Linz Oberon)"]
	oberonv5 [label="2013, Oberon V5\n(N.Wirth, J.Gutknecht, P.Reed)"]
	oberonsystem3 [label="1991, Oberon System 3\n(ETH Oberon)"]
	a2 [label="A2 (ex. Bluebottle)"]

	oberonf [label="Oberon/F", group="bb"]
	blackbox [label="BlackBox Component Builder", group="bb"]

	excelsioros [label="Excelsior OS"]
	ethos [label="ETHOS\n(C.Szyperski)"] // http://oberoncore.ru/library/szypreski_insight-ethos_on_object-orientation_in_operating_systems
	// portos [label="OS Portos"]
	// jbed [label="JBed"]
	extendedoberon [label="Extended Oberon\nA.Pirklbauer"]
	blackbox, oberonf, oberonv1v2, medos2, oberonv4, oberonv5, oberonsystem, oberonsystem3, ethos, 
	 excelsioros, a2, extendedoberon [style="filled", fillcolor="gold"] // portos, jbed
	
	/* compilers */
	xds [label="XDS"]
	o7 [label="O7 (A.Shiryaev)"]
	astrobe [label="Astrobe (C.Burrows)"]
	xds, o7, astrobe [style="filled", fillcolor="#00ff80"]

	/* workstations */
	lilith [label="1977, Lilith"] // https://en.wikipedia.org/wiki/Lilith_(computer)
	kronos [label="1987, Kronos-2.6WS"] // http://www.computer-museum.ru/histussr/kronos.htm
	ceres [label="1985, Ceres", group="ob1"] // https://en.wikipedia.org/wiki/Ceres_(workstation)
	osFPGA [label="2013, FPGA OberonStation"]
	kronos, ceres, lilith, osFPGA [shape="box3d", style="filled", fillcolor="#ffb3b3"]
	
	/* relations */

	// wirth -> {pascal modula2 ominc oberon oberonv5 oberon07 lilith ceres oberonsystem oberonsa oberon2}
	// gutknecht -> { lilith modula2 oberonsystem oberonsystem3 activeoberon oberonv5 zonnon}
	// mössenböck -> { oberon2 oberonv4 objectoberon }
	// szyperski -> {ethos oberonv4 ominc }
	// pfister -> { ominc oberonsystem3 }
	// heeb -> ominc
	// templ -> { oberon2 objectoberon }
	
	cronosgroup -> { kronos excelsioros excelsior }
	excelsior -> xds
	excelsioros -> kronos
	
	pascal -> { modula2 oberon };
	oberon -> { activeoberon objectoberon oberonsa ceres }
	// oberonsystem -> ceres
	oberonsystem -> { oberon oberonv1v2 oberonv5 ceres }
	activeoberon -> { zonnon }
	objectoberon -> { activeoberon oberon2 }
	modula2 -> { oberon medos2 xds excelsioros }
	medos2 -> lilith

	oberonl -> componentpascal
	componentpascal -> { blackbox eo }
	// blackbox -> portos

	lilith -> { kronos ceres }

	ceres -> { ethos }
	
	// oberonsystem -> { oberonv1v2 }
	oberonv1v2 -> { oberonv4 oberonsystem3 ethos }
	oberonsystem3 -> a2
	activeoberon -> a2

	// eth -> { oberonv1v2, oberonsystem3 ethos lilith }

	// oberonsystem -> { oberonv5 oberon }
	oberon -> oberonsystem

	ethos -> oberonf
	
	oberon2 -> { oberonl xds ethos eo }
	
	ominc -> { oberonf oberonl }
	// esmertec -> portos
	// portos -> jbed

	oberonl -> oberonf
	oberonf -> { blackbox oberonl }

	oberonsa -> oberon07
	oberon07 -> { o7 oberonv5 astrobe eo }
	oberonv5 -> { o7 extendedoberon }
	oberonv5 -> osFPGA
	// shiryaev -> o7
	eo -> extendedoberon

	{ rank=same oberon oberonsystem ceres cronosgroup }
	{ rank=same oberonv4 oberonsystem3 ethos }
	{ rank=same oberonl oberonf }
	{ rank=same oberon07 a2 blackbox componentpascal }
	{ rank=same oberonv5 osFPGA }
	{ rank=same o7 eo }
	// { rank=same oberonsystem oberon }
	// { rank=same o7 astrobe }
}