Linux - SoftwareThis forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum.
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
I know this is a stupid question and pardon me for my ignorance.
Let's say if somebody asks, if your Linux distribution (say Debian) comes with SDK installed?
AFAIK, there is no such thing as SDK in Linux right? All I know is that you should have library/kernel headers and gcc devel headers files installed to start compiling simple C programs or may be even drivers?
Can anyone share their experience on this whole SDK thing?
I think what you're saying is true in general. I don't believe the kernel head files nor the kernel source are provided by default but they're easy enough to obtain if you need them. I've never hear of a linux sdk either.
Most distribution include gcc (the compiler family), the kernel source and headers, libraries and everything else you need to develop software under Linux. Even those that don't include them by default, usually have a quick way of installing the entire development environments, like the "build-essential" package in Ubuntu. So, you might say, for historical reasons, Linux is just one giant SDK...
You could think of a package like "build essentials" as being vaguely equivalent, but that may not take you forward much. AFAIK, build essentials is a meta-package bundling up various things that you need for building software and you could quite happily get all of the stuff package-by-package.
If in the situation of another OS you tried to do this, including getting all of the tools to work together, it would be more of a struggle. Gnu utils are built with more of a 'here is a box full of tools, you are intelligent/experienced/knowledgeable enough to make them work together'* mentality, so there is less of a gain to be made from making the tools work together.
* It was not my intention to imply that in every case, that the assumption that the end user of the toolset actually achieves this optimally without difficulty. Well, not in my case, anyway.
Yes, my thoughts were almost the same - one can install packages as and when required in order to get the necessary tools installed for developing applications. I guess it really depends on the type of application that the end-user is trying to develop and depending upon the type they can install different set of development tools.
Linux is very general, you cannot really say that something like a Linux "SDK" exists. The basic gcc build environment and GNU binutils "ships" (quotes, since Linux is not really sold to anyone, usually just copied or distributed, since it is free) with almost every distro.
Based on that though, you -can- get SDKs like the Qt SDK (if you want to call it that), KDE's SDK (again, your milage may vary), GNOME's SDK, etc. although these tend to be many separate executables and applications, that can be used seperately in many instances. IMO the "SDK" concept is a Microsoftism, and a reflection of the monolithic approach evident in Windows design philosophy.
I. e. in Windows you effectively get a few, huge black boxes that you poke with a stick and it (hopefully, this being Windows) does something (on a programming level). In Linux you get many, many little transparent boxes that does stuff. If you want to do some kind of task in Linux, the philosophy is usually to build a small transparent box of your own, and have this talk via well defined ways ("pipes", mostly) with another little transparent box.
I. e. the M$ SDK approach is to give you a huge black box that helps you use the other huge black boxes. But, because Linux is a whole bagful of transparent boxes, you can often pick and choose what you want to use, or how to connect them up. It also makes it more flexible, easier to debug, and much more reliable - if one box fails, you can usually just restart it, and mostly if it is a smaller box, the system itself will still stay up and work.
For example, I develop PHP websites in Linux. There is no "PHP SDK" for Linux, as you might get for Windows, if someone decides to build one. I use several discrete components to make my "own" PHP SDK - I chose to use MySQLCC for interacting with the database, and EMACS as my code editor. I could just as well have used Kate and MySQL Query Browser. But since this is Linux, the choice is mine. So I went "SDK like" with my own little bag of transparent boxes, instead of using the huge, large, complex and unreliable one provided by a vendor, like M$ does with Visual C++ or C/Sharp, for example. IDE and compiler, profiler, debugger all basically rolled into one.
For example, if something goes wrong in the IDE code editor for C/Sharp for example, it can take down the ENTIRE environment - the compiler, profiler, debugger, all crash at once. But if, for example, EMACS crashes while I'm editing my PHP source code, MySQL itself, MySQLCC, and Apache all keep running as if nothing has happened.
SDK's are a manifestation of a monolithic (Windows) approach, while Linux uses a much more modular, seperated approach to just about anything outside the actual operating system kernel.