Unix style of programming involves editing the program from outside; the Smalltalk style is editing the progrom from inside the program itself.
Also, in the C/Unix style, your program operates on opaque bytes, while Smalltalk deals with described objects.
Demo: run xclock; attach gdb to it; execute putenv
to change the TZ
while running.
So: it is possible to write and edit Unixy applications from inside them.
Complexity has fallen out from languages not being able to talk to each other (shades of reducing applications that do the same thing from keynote; part of the complexity is due to re-writing things in different languages?)
FFI is evil, and unnecessary: we have to describe the internal implementation details of the foreign function in the other language before we can access it from our language.
The real difference between Smalltalk and C is that everything in Smalltalk (compiler, interpreter, browser and debugger) communicates through shared data structures. In C, things interact through explicit interfaces (debugging symbols).
liballocs can provide introspection on applications written in C. Showed a version of node that can import arbitrary C modules and call functions on them, but without having to define an FFI.
Could be expanded: node could export the same metadata, so that C could call into Node, etc. GC also causes some additional problems.