I am developping an Android application that is using NDK in order to access to data from the Linux kernel. As you may know, this is done using IPC (Inter Process Communication) through Android's bound services.

While writing the documentation related to this application, I am supposed to describe the application's architecture, which is by the way fully local : I am not sending or receiving data from a distant server. It surely analyze the network's raw data, but it's collecting it directly from the phone's modem.

So my question is : How can I describe the architecture of such application ? Can I describe the application itself as a "client" and the Linux kernel as "server" since I'm getting information from it using services ?

  • 1
    "Can I describe the application itself as a "client" and the Linux kernel as "server" since I'm getting information from it using services ?" – You can describe it as anything you want, provided your description agrees with your definition of the terms. If the Linux kernel fits your definition of "server", then you can describe it as a server, if it doesn't, then you can't. Since you haven't given us your definition of the term "server", it is impossible to answer your question. Mar 25, 2016 at 14:36
  • My proposition for this "client-server" method was only based on the IPC I used to get informations from the kernel. So to give you more details, in this cas, my definition of "Server" is a piece of software I use IPC to talk with... but my question was related to the right way to describe an NDK application' architecture.
    – Radhwen
    Mar 25, 2016 at 14:40

3 Answers 3


While your explanation of your logic makes sense to me, I think it will be confusing to people because the term server is generally associated with a remote host. I think you should just refer to the kernel as 'the kernel'. The term client is fine.


The Linux kernel is not a server. If it was, you wouldn't have to write an application to do what you are trying to do. Your application is a client application and the Linux kernel is the kernel.

  • 2
    You cannot say that in absolute terms. The Linux kernel may not be a server according to your definition of server (it's impossible to tell, since you did not provide your definition of "server"), but it could very well be a server according to the OP's definition of server (which is again impossible to tell, since the OP did not provide their definition of "server"). There are plenty of definitions of "server" in widespread use that the Linux kernel (or any OS kernel) for that matter would fit under. In fact, xnu, the kernel of OSX, is usually described as a server running on the Mach µK. Mar 25, 2016 at 14:40
  • @JörgWMittag: Which ultimately means that "Server" is a vague term, and therefore none of this pontification matters anyway. Mar 25, 2016 at 14:48
  • @JörgWMittag He wrote an application to perform the function he needed. So the kernel is not involved in the application except for supplying kernel functions, presumably. Therefore, the kernel cannot be the server cause the application does that work.
    – Rob
    Mar 25, 2016 at 14:51

The Linux Kernel is an interface to the operating system, you communicate with it via system calls. That are all functions described in the manpages section 2, like open() read() write() close() to a file descriptor. Your NDK app is also able to use library calls like fopen() fread() etc, that is one layer above the system calls. And your app could be a server like a webserver, or just a standone program or a client that uses the above server.

  • So... is my description accurate ?
    – Radhwen
    Apr 7, 2016 at 8:10
  • Like in the other answers, I wouldn't call the kernel a server.
    – ott--
    Apr 8, 2016 at 17:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.