I believe the left hand is a shell fork-bomb
, on the assumption that anything that zany is probably malicious.
And the right hand is a way to tell Make
to use up all available system resources:
"-j [jobs]’ ¶
‘--jobs[=jobs]’
Specifies the number of recipes (jobs) to run simultaneously. With no argument, make runs as many recipes simultaneously as possible. If there is more than one ‘-j’ option, the last one is effective. See Parallel Execution, for more information on how recipes are run. Note that this option is ignored on MS-DOS."
Edit: I think the make
command is technically only a problem when run for a Makefile
that tries to do too many things, and has at least one mistake in dependency controls. So… for every Makefile
I ever encountered (or that I ever wrote!)
Yeah. They’re the same picture
You are correct, left hand is a fork bomb. Specifically, it creates and then runs a function named “:”. What this function does is pipe its output into itself while running in a background process, which instantly spawns infinite copies of itself. Technically I believe the : character could be any character as its just a name. The creator just picked a colon for aesthetics.
I think it can also get weird when you call other makefiles, like if you go make -j64
at the top level and that thing goes on to call make on subprojects, that can be a looooot of threads of that -j
gets passed down. So even on that 64 core machine, now you have possibly 4096 jobs going, and it surfaces bugs that might not have been a problem when we had 2-4 cores (oh no, make is running 16 jobs at once, the horror).