"Linux", strictly speaking, is an operating system kernel used by both Android and the unix-like operating system referred to colloquially as linux, and sometimes more formally as GNU/Linux which we know via distributions such as ubuntu and debian. Linux, the operating system kernel, is written in C and must be compiled to native machine code.
I think jordanm did a good job of responding to question #2 regarding user space differences between GNU/Linux and Android. Here's the Android stack:
Linux (native machine code, instantiated by bootloader)
Dalvik (native machine code, instantiated by linux)
Application (java bytecode instantiated by dalvik)
Dalvik is a "virtual machine" which runtime interprets bytecode, and the bytecode is precompiled from java. In other words, it is a user space application that is running all the time like a server, and it handles requests to process bytecode. Android applications are written in java, precompiled to bytecode, and run inside the dalvik virtual machine.
This is very similar to what runtime interpreters such as the shell, python, perl, ruby, and javascript do in the sense that it means code written for those interpreters will work if the interpreter does. They do not all have the same strategy with regard to the stages between code and execution, but that is another topic.
Those interpreters are all run by an operating system kernel, which also runs the computer. Both the kernel and the interpreter exist on disk as machine code; the kernel is boot loaded into ram and henceforth the fundamental instruction stream running through the processor is the kernel's; the kernel can also stream instructions from other machine code artifacts it loads into ram (such as the dalvik virtual machine, or the init daemon, or the shell, or the X server) and it is the combined logic of the system which interleaves instructions in the processor stream such that the kernel maintains its role and cannot be displaced. It is the gatekeeper of all hardware, so a lot of roads lead back to it and it controls the clock.
Portability for user land applications is simplified for android/dalvik just as it is simplified for perl or python. It is compiled from code as a form of optimization, not in order to meet the needs of any specific architecture. The interpreter is what, like the kernel, must be configured and compiled in an architecture specific way.
Now here is the GNU/Linux stack:
Linux (native machine code, instantiated by bootloader)
Application (native machine code, instantiated by linux)
Applications here include the shell and the init daemon. Shell scripts are not applications in this sense as they are interpreted by the shell, and neither are java, python, perl, etc. programs, but applications started from the shell or by the init daemon are if they exist on disk as native machine code, because init and the shell actually ask the kernel to do this for them -- they cannot do it themselves.
All those applications -- the shell, the init daemon, the X server, your web browser, mostly written in C or C++ -- must be individually compiled into an architecture specific form.
Hope that sheds some light. With regard to linux on ARM, there are two primary streams, one for the armv6 instruction set used on the Raspberry Pi -- these are specialized -- and one more general steam for armv7, which I believe includes most mobile devices. The fedora, debian, ubuntu, etc. ARM distributions are the latter, wheras pidora, raspbian, etc. are the former.