Linux 2.4 Schematic Poster (Generated From Source!)
Dave Sifry writes: "Rusty Russell has posted the scripts that render a function call graph of all of the .c files in the Linux kernel. Each file is graphically represented and named, and function calls are graphically represented inside of each source file. The end result is a 180MB vector PostScript file. You can get the source code and then render it yourself, or if you just want to get the big finished poster, send an e-mail to Linuxcare or contact EverythingLinux if you live down under. BTW, it took us about 5 hours to get that file to print at a print shop down at LWE - that much vector PostScript really tested the limits of their big printers!"
They had this at the LinuxCare booth at Linux expo, it looks really cool, like a set of conentric circle. The best part of course was that Linus wandered over to look at it while I was there!
.ps file so that the poor guy doesn't get slashdotted. with Email
Could some one please mirror the
The difference between Canada and the USA is that in Canada healthcare is a right and gun ownership is a privilege.
Hey! I can do annoying pseudocode posts too. I'll do mine in SQL:
SELECT nickname + ' is a complete moron.'
FROM users
WHERE posting_style = 'half-assed pseudocode'
--Shoeboy
this reminds me of the back of the redhat FY1999 Annual Report. the letter to shareholders was on the front, and on the back was the source code to the original v0.1 kernel by Linus.
if i could find the link on corporate-ir.net, i'd link to the web version of the report, but it looks like they've dropped it and are only distributing the 10K.
pity. a lot of people really dug that poster, and have it hanging in their offices. i know a lot of people at redhat have them in their cubes.
- Entertaining Bits from the Ancient Kernel Tree
Actualy, I work for Microsoft, and have access to the win2k source code. I ran the tool over the code and code this killer source ring
Someone you trust is one of us.
will the paosters be available in Europe anytime soon?
Fry: heh, Yakov Smirnoff said it
Leela: No he didn't.
Congrats to Rusty for this, it couldn't have been easy...
rr (No relation :)
Quidquid latine dictum sit, altum videtur.
http://128.119.144.229/files/Final-0.2-30pct-index 32.png
Liberty.
Sorry for the offtopic post, but there is a PNG available of the 2.3.18 version he did originally. It's 1.5 mb, and I don't know how much bandwidth the server has, so you may want to mirror it.
Anyway, sorry about that, feel free to mod me down.
--Shoeboy
This program is dependent on a program called tempfile. I've tried running it.. But it complained of not finding that program.
Well. My guess is that tempfile just gives a temporary filename ready for use. So, the (not politically correct) fix would be a perl script called tempfile.
#!/usr/local/bin/perl
print "/tmp/",rand(100000);
Worked for me ! My poster is on the way.
Fo example:
- Miró: Simple programs, almost naive. Few calls, it needs more work.
- Klee: Asshole!!!, he wrote four functions and want me to approve him. Draw it again Sam.
- Picasso: He doesn't know in deep about structured programming. Better improve the code, it's a mess.
- Dalí: This guys knows about object oriented programming.
- Impressionist: It's a master in programming, but may be the code has too many functions and it's hard to understand. Better to crisp it slightly.
As you see, the program is useful too.--ricardo Estilo Dalí: muy bien estructurada u orientada a objetos. Impresionista: el hombre es un monstruo de la programación.
sgis ddo ekil t'nod i
"Send $24.95 to the human genome project for a printed copy of Linus Torvalds' complete genome! Straight from the sources! Only takes 2000 hours to render on an average Postscript printer."
Come to think of it, a clone of Linus would really speed up development, wouldn't it? Or would we have to clone Alan Cox too?
;-)
Someone trying to do this with Windows 2000? Ever seen a picture of a really, REALLY pot of spaghetti?
He who joyfully marches in rank and file has already earned my contempt. - "Big Al" Einstein
so that's what a slashdotting is like. I didn't even link it.
Liberty.
Of course, unless this actually helps you understand the code, and is better than pre-existing methods, why bother? Sure, it looks cool, but a similar representation of paths to local chinese restraunts may look as cool (you can take 5th st, or 15th st, represented as spikes off an oval, etc...)
If it really is an aid for comprehension, or even better, exposes structural flaws, then this is great! Let's make the FPS version, with a profiler coloring or texturizing (is that a word?) the environment, to show time taken in different subroutines (rooms?)
Anyway, cool idea, but lets give it a few months to see if it is just cool, or cool and useful.
Hi all,
.c files of the kernel.
1) This does not generate a call graph. It is a static rendering of all the functions in the
2) Yes, the images correspond to the code: forks represent if and switch() statements, circles cover the code within them. Also, code with asm statements, inline, etc are `hairier' (look in the architectures). So, a big star is either a big switch or an if...else if...else if..... If it's inside a circle, there's a loop around it. Two circles inside each other: nested loops. etc.
3) Why PostScript? For the 2.3.18 one I wanted to learn about PNG, so I did it in PNG. But I wanted people to be able to print out copies at home on small printers, so I wanted something scalable: 1GB PNG was not the answer. So I learnt PostScript and changed over to that; the `posterize' shell script lets you make an NxN poster for printing (I recommend >= 6x6).
4) cannot find -lfl
You need flex installed (or use lex and change the Makefile).
5) shopt: command not found
Run bash2, or remove the line:
shopt -s nullglob; for f in $(KERNEL_DIR)/$$d/*.c; do \
And replace it with these two (don't miss the trailing \'s!):
for f in $(KERNEL_DIR)/$$d/*.c; do \
if [ "$f" = "$(KERNEL_DIR)/$$d/*.c" ]; then continue; fi \
6) tempfile: command not found
Change the two occurrances of this (classify_nonstatics.sh and conglomerate_functions.sh) to:
TMPFILE=`mktemp ${TMPDIR:-/tmp}/$$.XXXXXX`
Please give feedback for these, and any other bug reports to rusty at my linuxcare.com.au address, and I'll release 2.4.0a soon...
Thanks!
Rusty.
Just mirrored it at http://sunsite.dk/lgdc/tmp/Final-0.2-30pct-index_3 2.png
:)
It's hosted at SunSITE Denmark as you see, which should have enough bandwidth.
And yes, it's very cool, and it's completely unreadable at that size & resolution
Linux running on a LaserWriter, what a joke.
Je t'aime Stéphanie
I wonder how difficult that would be to implement ?
There's an open source PERL listing out there that generates the picture of the goatse.cx guy out of Slashdot troll posts.
--- Jump!! Fire!! Bullet time!! - Lego version of the Matrix
5 hours does not surprise me at all. PostScript printers are optimized for text rendering, not vector rendering. 180MB of vector image at about 15 bytes per vector will be 12M vectors; the RIP is running at 700 vectors/sec. Not bad for (probably) MIPS running at 200 MHz without floating point - considering that PostScript vectors are rendered as rectangles with end caps and transitions, one-pixel accurate.
Size of the file doesn't matter - each sequence of vectors is rendered separately, slapped on the bit map of the page, and on to the next one.
HPGL/2 will not help - the complexity of the primitives is the same. HP/GL and PostScript share the same rendering backend on some printers.
Most plotters nowdays are wide-format inkjets with the same raster backend as other printers. Old pen plotters can't physically do 700 vectors/sec. No way. More like 25. How about drawing the same thing for five days, switching depleted pens on the fly? (reminds me of the old days... where's the old trusty 7225?)