Native execution of Linux on mobile devices
With the right drivers and maybe other modifications to Linux it should be possible to run it natively on smartphones. In that case is should be possible to run common Linux applications, too. Compared to OSes dedicated to mobile devices like Android there may be lack of a user interface which offers comfortable control in spite off the restrictions of mobile devices, but of course this is no principle problem and a solution for this might be developed.
As Android was forked from the main Linux kernel tree, there where modifications made to improve execution on mobile devices. These are some of the differences between GNU/Linux and Android. So Android and Linux separated from each other. Meanwhile the Android developers pushed some of the modifications back into the main Linux kernel. At least for some modification the Android developers said that those modifications may be integrated into the main Linux kernel, but that the Android developers have to much work on Android and can not maintain these modifications inside the main kernel tree. Said that, the Linux kernel developers themselves developed similar modifications / features on their own, so that they can maintain them themselves. Maybe some day the Android kernel developers will switch Android to use these GNU/Linux kernel features instead of their own. Seems like Android and GNU/Linux slowly converge again.
Linux and Android hybrid
As Android is a fork of GNU/Linux and seem to slowly converge again, a hybrid between both of them might be build which nativley runs on the hardware integrating (maybe the best) attributes of both sides. A concrete project in that direction is "Ubuntu for Android" which is described here in a bit more detail and links to further resources.
Virtual / embedded execution of Linux on mobile devices
It is possible to execute GNU/Linux on top off another OS. For example Android is running directly on the hardware and GNU/Linux is running on top of Android. Between Android and Linux there must be another layer like a VM or similar techniques that let GNU/Linux run on top of the underlying system. Busybox is such an application / layer for embedding GNU/Linux.