Best linux operating system books according to redditors

We found 497 Reddit comments discussing the best linux operating system books. We ranked the 117 resulting products by number of redditors who mentioned them. Here are the top 20.

Next page

Subcategories:

Linux applications books
Linux kernel & peripherals books
Linux programming & administration books
Linux programming books
Linux servers books

Top Reddit comments about Linux Operating System:

u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/LiamMayfair · 31 pointsr/C_Programming

In short, the answer is virtual memory and the protected mode flat model that the past generations of CPU architecture and operating systems have been using.

As you may know, programs are never given full, direct access to the RAM banks; the operating system abstracts this layer away from them in the form of virtual memory. Virtual memory is basically a system whereby you can map physical memory addresses to non-physical ones the OS controls and can readily re-arrange. Thanks to virtual memory the OS can trick an application into thinking it has way more RAM than it actually has and this also enables swapping processes out to disk when the system is running out of memory because there are too many processes being run at the same time. As I pointed out before, since virtual memory is fully managed by the kernel, it can move out chunks of a program's address space to disk, a process known as "paging".

Now, back in the DOS era, virtual memory followed the real mode segmented model, which, in very simple terms meant that, even though processes could be shuffled back and forth between RAM and disk, there were no safeguards in place to prevent a process from messing up another process' memory space via a dodgy pointer pointing to a memory address beyond the scope of the faulty process.

One of the major goals of the successor to this virtual memory model, "protected mode flat model" was to allow the kernel to create a completely isolated address space for the processes it spawns and stopping a rogue program from altering other processes like before. Whenever such an attempt is made, a "segmentation fault" (SIGSEV) or "general protection fault" is raised by the kernel, which in the case of Linux, will prompt the kernel to swiftly kill the offending process.

In practical terms, this means your application won't be able to reach beyond the virtual memory address space it has been allocated (unless it's a kernel-space process, like a kernel subsystem or device driver) and can in no way communicate with other processes by reading or writing memory that belongs to them. In order to accomplish that, you'll need to make use of inter-process communication (IPC) techniques like Unix sockets, pipes, RPC, etc.

This is by no means an in-depth or 100% accurate explanation though. If you've got any follow-up questions I'm more than happy to answer them.

As for the literature, pretty much any textbook about operating system architecture will cover virtual memory to a great extent. I can recommend Operating Systems: Internals and Design Principles and Modern Operating Systems.

Here are a few more books that touch upon the topic of virtual memory:

Assembly Language Step-by-Step: Programming with Linux covers the topic of virtual memory and the different models that have evolved over time over its first few chapters.

The Linux Programming Interface: A Linux and UNIX System Programming Handbook covers this subject (and many, many more) from a Linux systems programmer perspective.

What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager, in case you're interested in learning how Windows does it.

EDIT: added IPC info

u/fuzzyfuzz · 18 pointsr/linuxadmin

I have the UNIX and LINUX System Administration Handbook It's awesome and has a pirate boat on the front, so you know it's good. It's great for best practices type stuff, and there's a little bit of sysadmin humor mixed in.

I also have the Linux Command Line and Shell Scripting Bible which is good for CLI reference.

Other than that, you can find a ton of stuff on the web. Is there anything in particular you are looking for?

u/[deleted] · 18 pointsr/darknetplan

What OS? Linux, of course. When TPB order everything locked down, you don't want to be caught using a Microsoft OS. -- What distribution? The easy path is Ubuntu, with the Cinnamon UI, or LinuxMint 13, when issued (May 2012).

What IDE? There's lots to choose from. My favorite is "geany".

https://en.wikipedia.org/wiki/Geany

For TCP/IP protocol tutorial. Recently updated by Wright:
Stevens, "TCP/IP Illustrated", 3-volume set.

http://www.amazon.com/TCP-IP-Illustrated-Volume-Set/dp/0201776316

On human interface guidelines relevant to programming:

https://en.wikipedia.org/wiki/Human_interface_guidelines

For GNOME 2, see:

http://library.gnome.org/devel/hig-book/stable/

To develop Linux applications:

You are right. You MUST know how to program in C. When others tell you that object oriented programming is the thing, know that you can do object oriented programming in C. Avoid interpreted languages (Python, Java, and others) as a first programming language. Interpreted languages teach bad habits and hid too much of what's going on from you such that debugging becomes difficult to impossible.

However, if all you intend is "casual programming", the Python will do, if you must. It's just not the best choice first a first language if your intent is to become a "professional programmer". I use Python myself; It works for what I need to do quick and dirty.

Definitive, but for experienced programmers:

http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1335197606&sr=1-1

As a tutorial for someone learning a first programming language and how to program from zero:

Perry, "Absolute Beginner's Guide to C", 2ed.
-- I have not read the book, but the ToC looks reasonable for a beginner.

http://www.amazon.com/Absolute-Beginners-Guide-2nd-Edition/dp/0672305100/ref=sr_1_6?s=books&ie=UTF8&qid=1335197606&sr=1-6

OK, you don't want a full CS curriculum, but some topics in discrete mathematics are mandatory. ... Ack! Having looked over the offerings at Amazon, I believe that Epp, "Discrete Mathematics with Applications" may be the best of the lot, but at $187, it is hard to recommend without knowing your intent and interest. The reason I suggest this title is that it looks focused on application to computer science topics. It covers a number of topics that are NOT covered in many of the other titles, enough so that should you use other texts you will have spent more than the $187 that this title includes. JMHO.

http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/ref=sr_1_1?s=books&ie=UTF8&qid=1335199316&sr=1-1

See also: Sedgwick, "Algorithms" -- You'll probably need it sooner than later.

http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&ie=UTF8&qid=1335200153&sr=1-1

Remember that Linux OS? You are going to need some programming tools, right? If you intend to write GUI applications based on the GTK+ toolkit, then install the package "glade" or "glade-gtk". Installing a glade package will suck in over 100 other packages essential to building a GTK based GUI application. Specifying glade to the package manager is just easier that finding and installing all the other necessary parts by hand.

If you are going to do command line based UI programs, then package "build-essentials" should be adequate.

There are some other things to read:

On how to organize, grow and maintain a Linux software development project: Fogel, "Producing Open Source Software"

http://producingoss.com/

You can read it online here, but buy the book too to help support Fogel. He's gotta eat too.

On the culture of writing Open Source Software:

Raymond, "The Cathedral and the Bazaar"

http://www.catb.org/~esr/writings/cathedral-bazaar/

Linux programming is not like Windows programming.
Read and study ESR's TAOP.

Raymond, "The Art of Unix Programming"

http://www.catb.org/~esr/writings/taoup/html/

You can read it online, free. However, buy a hardcopy too. Raymond has to eat too.

Now to get really technical. What interface do you write to?

Kerrick, "The Linux Programming Interface: A Linux and UNIX System Programming Handbook"

http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=sr_1_1?s=books&ie=UTF8&qid=1335201257&sr=1-1#reader_1593272200

Beginning to focus on GNU style programming:

GNU Coding Standards

https://www.gnu.org/prep/standards/

GNU Coding Standards is more than how to and how much to indent a line or how to set braces. You will get into the topic of Make and Autotools. Make is a program to build complex softare and Autotools is about how to build a package for distribution, the package that any Unix flavor can use; it is not focused on any specific distribution. See also: "configure and make"

Enough! There's more, but I have too much time in this already for today.

[edit: typos]

u/michaeljsmalley · 17 pointsr/pics

I was there today and I bought two books:
http://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025
and
http://www.amazon.com/Programming-Python-Mark-Lutz/dp/0596158106/ref=sr_1_5?s=books&ie=UTF8&qid=1299370602&sr=1-5

I get to the counter..."There are no refunds or exchanges, just a heads up man". Yeah, so what? No problem.

Then he proceeds to take out a black indelible marker and scribble on the back of the brand new books I just purchased. I am standing there thinking, "Okay, these books are now my property, and the guy just basically defaced it."

Since I was happy I got these books for a very good price, I didn't put up much of a fight, and the guy working at the register was extremely nice through and through. It just appears the business prodigies who run Borders and have successfully managed to run it into the ground also instructed their front line employees to make like Banksy on all sales. What is the logic here? My wife thinks it was to prevent resale, but how does that hurt Borders?

u/varelsa · 15 pointsr/linux

You need a strong grasp of C programming, I'd recommend:

1: Join the Linux kernel mailing list: http://www.tux.org/lkml/

2: Read a book like this: http://www.amazon.com/Programming-4th-Edition-Developers-Library/dp/0321776410/ref=sr_1_sc_4?ie=UTF8&qid=1415153633&sr=8-4-spell&keywords=Crogramming

3: This is a cool site: http://www.learn-c.org/

Cultural immersion is also important, I would find relevant channels on irc.freenode.net and make friends there where you will find amazing free support from the community.

Once you're a little more comfortable in the language I would start trying to read the kernel source code, or maybe try to fix bugs that are posted about any programs that you are interested in learning more about.

u/_Guinness · 15 pointsr/linux

You're asking a very, very very large question here. I'll try and directly answer this but I may go off on some detail. Also these details will be summarized so anyone reading this, you can pick it apart. It isn't meant to be exact.

> What exactly is a packet?

Its just a chunk of data. This chunk of data contains all types of things it will need to get where it is going safely. Source. Destination. Checksums. Settings. And of course the data within. In TCP this chunk of data can be up to 64 kilobytes. However before this chunk of data hits the physical wire, it has to be split up into its Maximum Transmissible Unit. Which is just a fancy way of saying "this is the agreed upon maximum chunk of data size for this network". Typically the MTU is around 1500 bytes. It is also known as a "frame" since an MTU of 9000 is also called "jumbo frames"

Think of an MTU size like the gears in a car. A lower MTU size is like a lower gear. It gets you going faster, since once you have 1500 bytes of data you can fire that packet off, instead of sitting around waiting for 9000 bytes of data to fill up.

The downside to this is that each packet sent requires a series of interrupts. And interrupts can be costly (especially back in the day!). When an interrupt fires, it goes to the kernel and says "HEY! I NEED SOMETHING DONE!". The kernel says "alright little buddy, lets get you what you need." and then the kernel assigns a core to handle the interrupt. When the interrupt is being handled, nothing else on the core gets done. It has a full lock on that core until the job is done or the interrupt itself (depending on the type of interrupt) is interrupted itself. And yes before you ask, certain types of interrupts cannot be interrupted.

So you can imagine back in the day of single core systems, this could really suck. Because if you have a single core servicing interrupts for 1500 MTU sizes instead of 9000 MTU sizes, you're servicing 6* as many interrupts. Which means your processor literally stops what it is doing to handle the interrupt, and then once done goes back to what it was doing. I could go into kernel preemption and interrupting interrupts but I won't. Too long.

These days interrupts aren't so bad as we have many many cores to service them. If you've ever run into the irqbalance service, it is responsible for basically round-robining interrupts across all cores (cat /proc/interrupts to see).

> how do different linux OSes manage them

All linux distros use some version of the Linux kernel. How the network is managed can vary little to a lot from version to version. There are also local settings for the kernel. Things in sysctl like packet buffer sizes. You also have hardware buffers like the NIC ring buffer/NIC buffer/send/receive queue (I've seen it referred to as all of those) which is set by tools like ethtool. Then you have deeper level settings like congestion algorithms, congestion windows, etc etc. There are entire books written on this. Two of my favorites are Understanding the Linux Kernel and Understanding Linux Network Internals. But to crudely summarize the answer here, the kernel manages all of this for the most part.

> how this packet of data is physically sent over the internet

Basically, buffers and interrupts (hardware/software). These chunks of data sit in a buffer somewhere until either the buffer fills up, and the owner of the buffer sends an interrupt to the kernel saying "hey I need attention, I'm running out of buffer space, can you pick up some packets for me and free up some space?" to software just repeatedly polling a memory address to check for new packets in said buffer. Things like kernel bypass allow userspace programs to read the memory directly on the NIC. But usually a packet goes from the NIC, to the kernel, to the application.

The internet is really just a big conga line of buffers and interrupts. There are tons of places a packet can be dropped. Throughout the process a packet moves through the "7 layers of the OSI model" moving from the physical medium all the way up to the end user application.

The details of how this works are endless. I've literally spent 5 hours in interviews talking about all this and how it works. So like I said your question is pretty huge :)

u/jormundgard · 15 pointsr/C_Programming

I feel like C is most useful when you are programming directly to an OS and its resources, rather than through a framework or library. And you don't often need to use the most elegant data structures to accomplish a simple task.

The Linux Programming Interface is still one of the best introductions to Linux programming.

u/IOvOI_owl · 12 pointsr/mac

I might get downvoted, but if you really want to understand how the system works you can pickup a textbook on Unix/Linux OS for beginners, just make sure it is not distribution specific. >90% of what you will read there will be applicable to MacOS. I am now going through this book: http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356 You can find online if you want ;) This way you will learn not only about MacOS, but about the whole family of Unix like operating systems. I am using linux pc at work, but I have a mac at home.

u/EJMR-Plutono · 12 pointsr/programming

Anyone further interested in this subject should read “Assembly Language Step-by-Step” by Jeff Duntemann. Personally I consider it the best book on x86 assembly that I’ve ever read.

u/killdeer03 · 12 pointsr/programming

Yeah, I feel much the same way. I just look at the portions that interest me. I am not smart enough to understand all of it, so I just study and try to learn small parts individually. I bought Understanding the Linux Kernel. It is pretty good book. Some of it is over my head, but it covers the 2.6 kernel in depth. I'd recommend it.

u/LinuxStreetFighter · 11 pointsr/sysadmin

Yes, there is a lot of growth for Linux administrators.

I can't speak for the LPIC but you should get The Linux Bible and The Linux Command Line and Shell Scripting Bible and work through those. Then take the RHCSA and RHCE.

The Linux Bible

Linux Command Line and Shell Scripting

I don't know where you're located where junior administration can't lead into auditing or information security but you should build a lab and start building that knowledge and gaining experience. Chris Sanders has great books on the subject and an amazing website.

http://chrissanders.org/

He uses Linux for network monitoring and analysis.

There are also a slew of magazines and podcasts out there to keep you motivated, entertained, and educated. Jupiter Broadcasting is something I really enjoy. They took me from a Linux fan into an enthusiast into a professional. Linux Unplugged, Linux Action Show, TechSnap... Even the quirky BSD guys are awesome.

Linux Format is a great magazine, Admin is good, Linux Journal is hit or miss for me but it hits the spot when I'm looking for something off the wall or a project.

There are also subs on this site that are helpful and fun. /r/linuxadmin is interesting, /r/linuxmasterrace is GOAT, /r/linux is... Linux... /r/gentoo is beardly, /r/archlinux is -- READ THE WIKI.

If you get those books, which I can't recommend enough, start playing with Python too. Don't get Learn Python the Hard Way, get something like Python Crash Course which is significantly better. Your mileage may vary, this is just my opinion.


Good luck! Best thing to do is get a distro and start learning. Read the man pages/wikis, and then post a question. That will help you a lot in the coming days ;)

u/moraXen · 11 pointsr/hacking

You might be interested in reading Practical C Programming. This book is about C (obviously) but it has really helped me understand what good code is supposed to look like. It looks very much like yours! I recommended it to all.

u/sanedave · 10 pointsr/learnprogramming

Three books I have been using:

The Definitive Guide to How Computers Do Math

Web page here: http://www.diycalculator.com/

Assembly Language Step-by-Step: Programming with Linux

Hacking: The Art of Exploitation, 2nd Edition

The first uses a virtual machine running on Windows, with 5 registers, 65K of virtual memory, a debugger, and will give you a good basic understanding of what is going on. The second book uses Intel X86 on Linux, and gives a solid foundation of the most used instructions. The third book is just good.

Other favorites of mine include "The Art of Debugging" by Norm Matloff (google for his excellent web page) and "Professional Assembly Language" by Richard Blum.

Have fun!

u/smo0shy · 8 pointsr/MrRobot

I actually already have a copy of Hacking: The Art of Exploitation. My personal library consists of around 45 books on a range of computing topics from PHP, MySQL, C++, Windows Internals, CCNA, MCSE/MCSA, Unix, Rootkits, AI, Data Structures and the list goes on.

Other relevant titles include Gray Hat Python, Reversing: Secrets of Reverse Engineering and Rootkits: Subverting the Windows Kernel.

I was going to buy the following: Assembly Language Step-by-step, SQL Injection Attacks and Defense and Metasploit: The Penetration Tester's Guide.

I agree that where one starts really depends on what they want to end up doing. "Hacking" is such a general term and SQL-Injections is completely different from finding 0-days. If I'm honest I'm not sure where to start but I'm open to suggestions.

​

u/Kingizzardthelizard · 8 pointsr/linuxquestions

I got a bookmark folder filled with resources just for the day I choose not being a lazy slob. Here's some:

https://www.kernel.org/doc/html/latest/ - Official docs

http://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html - Resource list including books and webpages

Some books i got from libgen:

Professional Kernel Architecture

Understanding the Linux Kernel, Third Edition

Linux Kernel Development (3rd Edition)

u/CatZeppelin · 8 pointsr/linux

I always find myself looking at man pages while programming in C, the illusion of speed while using Google can be counter-productive -- blog posts are always filled with misinformation that hampers your ability.

I recommend spending quite a bit of time in userland first. In kernel land the stakes are much higher, after all who's going to look after the kernel. To name a few issues:

  • 8K stack on 32bit kernels, or 16K stack on 64 bit kernels (I believe it can be changed via a config). This means you need to use vmalloc and kmalloc to have a large array.

  • If you corrupt memory in the kernel, your system will crash.

  • No FPU. Only use integers. Remember you're executing in a process context.

    I would start with something very simple, look at the linked-list structure of task_struct and thread_info in <linux/sched.h>

    eg:

    struct task_struct {
    volatile long state; / -1 unrunnable, 0 runnable, >0 stopped /
    void stack;
    atomic_t usage;
    unsigned int flags; /
    per process flags, defined below */
    unsigned int ptrace;

    ifdef CONFIG_SMP

      struct llist_node wake_entry;<br />
      int on_cpu;<br />

    };


    and thread_info

    struct thread_info {
    struct task_struct task; / main task structure /
    struct exec_domain
    exec_domain; / execution domain /
    u32 flags; / low level flags /
    u32 status; / thread synchronous flags /
    __u32 cpu; / current CPU /
    int preempt_count; / 0 =&gt; preemptable,
    &lt;0 =&gt; BUG
    /
    };

    To learn Linux, or any large software project you need to get your hands dirty. Hack the kernel as you please, after all that's why linux is open source.

    Book recomendations:

    Linux Kernel Development

    Modern Operating Systems

    Have fun hacking!

u/hnyakwai · 8 pointsr/Python

Get the Python Essential Reference by David Beazley. I was in the same boat as you several years ago. I probably read 5-6 python books that were aimed at experienced developers, Dave's book is BY FAR the best that I found.

He just started working on the 5th edition, so the 4th edition is getting a little long in the tooth (python 3 was a new thing back then), but I can still whole-heartedly recommend it.

u/PinkyThePig · 7 pointsr/sysadmin

Here is your bible: http://www.gnu.org/software/bash/manual/bashref.html

For some things to practice on:

http://adriann.github.io/programming_problems.html
/r/dailyprogrammer

And I find that once you get the 'fundamentals' down, taking similar complexity things from other languages and converting them to the one you are trying to learn is quite helpful.

If you were looking for a physical book, these two books cover quite a bit while being fairly cheap (20ish a piece):

http://www.amazon.com/Classic-Shell-Scripting-Arnold-Robbins/dp/0596005954/ref=cm_cr_dp_asin_lnk
http://www.amazon.com/Learning-bash-Shell-Programming-Nutshell/dp/0596009658

Also, for the one thing that made me go from 'how the fuck do I do that?!?' to 'I got this!' was running man test (man pages for test). I saw the syntax in tons of scripts, but didn't know how to google for it to figure out what it was doing.

EDIT: Forgot to add that if you type just plain help from the command line, you should get a dump of a lot of common commands. Helps if you forget syntax or forget the name of a function or are trying to discover new commands.

u/unix-like · 7 pointsr/linux

I consider Classic Shell Scripting by Robbins and Beebe to be the greatest book on the topic. It is so extensive yet readable that it is really worth getting a copy. I owe it to this book that I first really got into Unix as a whole. The authors speak from positions of vast experience and go out of their way to teach you the POSIX way, which is not only handy on exotic Unixes as opposed to Linux, but also on Debian and its derivatives now thanks to dash. Keeping scripts POSIX-compliant pay off a lot cause dash is (in my experience) 1.5 - 2 times faster in trivial looping applications.

u/zyrkan · 7 pointsr/linux

As you can imagine, the kernel is a gigantic project, so it's hard to jump in and understand how things are working. If this is your first exposure to any operating system stuff, I would suggest backing up and learning a bit more of the basics. You'll find information like that under the terms "computer architecture" and "computer organization". Modern Operating Systems by Tanenbaum is a classic read to get started.

If you really want to dig at the kernel code, I'd recommend Robert Love's Linux Kernel Development. It gets into the details of process scheduling, interrupts, memory management, file systems, etc. and looks at the code. But I'd warn you that it's pretty complex and can be quite slow to learn.

There are a few free linux kernel books online such as Advanced Linux Programming and Linux Device Drivers. Even if some of the information is outdated, you'll get a lot of information about how the kernel works in general from these resources.

Hope that helps, and enjoy.

u/istarian · 7 pointsr/linuxmint

You just have to jump in and do stuff. Using it as your primary OS or always for a particular task (e.g. always use it for internet browsing) is a good way to become familiar with a linux desktop environment.

As for the command, whenever you want to:

u/joe0418 · 6 pointsr/compsci

I'd recommend reading Practical Programming: An Introduction to Computer Science Using Python. I would read each chapter two or three times, and supplement it with online help. Do all the exercises at the end. If you don't understand something, feel free to ask in compsci (or send me a private message!).

I always use this book when trying to teach someone the basics of programming. Python is very easy to learn, relevant, and powerful. The book is brief, well written, and it'll semi introduce you to the command line (which will become your best friend).

You should try and build yourself a Linux computer to learn programming on. If you have a mac, that would be an OK substitute. I would use windows as a last choice- it can be a decent development environment but requires lots of software to set up. Programming can certainly be done in windows, but Linux will offer you a decent development environment right out of the box. I'd recommend Ubuntu for beginners. Macs come with a lot of the same facilities that linux comes with (python and other languages pre-installed, a relevant command line environment, etc), windows comes with almost none. If you study computer science in college, you'll use lots of linux- a head start will help.

For a text editor, try and become familiar with vim or emacs, both of which come with most linux distros. If you find them too overwhelming, you could use a graphical editor instead and still be ok. On the mac, you can get macvim. As a programmer, I regret my lack of knowledge in vim. If you're on windows, just stick with something like notepad++.

If you become an ace at python, and really enjoy the concepts, The Linux Programming Interface will take you a (very) long way. It may seem overwhelming, but it covers many deep aspects of computing. Learning C will really help you the most in the long run (because of it's intimate relationship with the operating system and computer memory), but it is not an easy beginner language. If you don't understand the concepts in C (may be difficult from just a book), you may try your hands at either C# or Java (as they're both very widely used).

Keep in mind that no one becomes a programmer (or hacker, if you will) over night. I'm in CS grad school, and started programming over 5 years ago- it's just now starting to all make sense. The amount of conceptual information in computer science is tremendous, and it will take a long time to master. Welcome to the rabbit hole =)

P.S. - Learn to type the correct way without looking at the keyboard. Speed isn't that big of an issue so long as you can hit a consistent ~60 wpm.

u/flexmyclock · 6 pointsr/linux

I've heard good things about "The Linux Programming Interface"

"Modern Operating Systems" like others suggested is also fantastic.

u/IWentOutside · 6 pointsr/linux

I've found The Linux Programming Interface to be one of the best in-depth books I've ever tried to read on Linux. Only issues with it is it's not too hands-on, so it's a bit difficult to retain, and maybe the price, bit would have to say it's still totally worth it.

u/nerd4code · 6 pointsr/C_Programming

It’s gonna be hard to give you much without picking a specific OS—details can vary widely even within a single OS family line—but an OS book is probably a good place to start. Tanenbaum’s book is the go-to.

Alternatively, there are books on specific techniques like garbage collection, or books more generally on programming for UNIX/POSIX/Linux or Windows (via Win16/32/64 API, not the six-mile-high shitheap piled atop), which would tell you some about how memory management works in down at least to whatever abstract hardware interface the kernel uses.

u/arusso23 · 5 pointsr/sysadmin

IMO, you should be familiar with 3 things: Virtualization, Linux and Networking. If you want to be a Windows Admin, definitely look into getting your MCITP too.

For virtualization, I would start with VirtualBox. It's not an enterprise solution by any means, but you'll understand the basic idea and it will allow you to run Linux/Windows/etc... without needing a separate box. And snapshots are great for when you want to try something new. Once you move along, you can try installing VMware server 2.0 (I think it's still free and available). If you find you like virtualization, take a look at VMware vSphere.

For linux, I recommend this book. Personally, I like Debian and Fedora Core, but you should at least know one Red Hat based distro (like Fedora). The book is well written, and has some good examples to get you started.

If you aren't very familiar with networking, you should get your CCNA. It probably wont help you pull much of a bigger salary in it of itself, but it will definitely get your feet wet in the world of networking -- but dont be fooled, it only scratches the surface of networking.

If you're looking to be more windows-centric, you should look at getting your MCITP. Personally, I haven't been able to get through the certification process, but I have skimmed through the topics, and it's definitely worth your time if you're serious about being a Windows admin.

I haven't had any experience with Network+ and Security+ certs, but from the comments I have read on the sysadmin reddit over the past few months, I get the impression they aren't worth the time. YMMV on that one though, and if anyone who has them thinks they are worth it, let me know why I am wrong.

When I was getting my feet wet, I picked up small business clients who were willing to tolerate my growing pains since I came cheap and worked nights/weekends for them. Although it only gave me a limited amount of experience, it allows you to put into practice what you are learning, be it linux or windows. Just be sure and always CYA and backup data/configurations before you do anything you're not familiar with.

Sorry, this may be a little bit more long term than you were hoping for, but hopefully you will find something valuable in it.

u/EirrinGoBragh · 5 pointsr/linux

Read here: http://www.advancedlinuxprogramming.com/


Program. Then read here: http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468


Program some more. Then maybe read here: http://www.amazon.com/Linux-Device-Drivers-3rd-Edition/dp/0596005903


And program some more. Yes, I know two of the links are to amazon. I'm sure if you look real hard you can find other formats.

u/CannedCorn · 5 pointsr/linux

"Linux Kernel Development 3rd Edition" is fairly modern (2010) and really good:

http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468/ref=sr_1_1?ie=UTF8&amp;amp;qid=1413858907&amp;amp;sr=8-1&amp;amp;keywords=linux+kernel+development

Also... not kernel internals specific but an AMAZING book about programing against the linux kernel is "The Linux Programming Interface":

http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=pd_sim_b_4?ie=UTF8&amp;amp;refRID=1X9Y7ZM18JWKJ80PNXN3

It was written by the guy who wrote a lot of the linux man pages and is one of the best books about how linux works from a programming interface perspective that I've ever read.

u/deaddodo · 5 pointsr/osdev

The source in the littleosbook builds on itself each chapter. However, it's important to know that the littleosbook, osdev wiki and most online resources aren't necessarily "tutorials" after the bootloader and bare-bones stages. Any later information is going to be more abstract and guidance. If you need in depth assistance with osdev, you'll want to invest in one (or more) of the following:

u/rzzzwilson · 5 pointsr/learnpython

If you're not a beginner, Dave Beazley's book is a great python reference. Also possibly good is Doug Hellmann's book which is derived from his excellent Python Module of the Week website. The kindle version of his book has bad formatting problems, but the print book may be OK.

u/Sampo · 5 pointsr/Suomi

Jos haluaa käyttää ja konffata linuxia ja apuohjelmia sujuvasti komentoriviltä niin Linux Command Line and Shell Scripting Bible. Jos haluaa aloittaa perehtymisen siihen miten kerneli toimii ja miten sitä voi itsekin sorkkia, niin ensimmäinen kurssi on käyttöjärjestelmät ja kirjaksi joku Operating systems niminen oppikirja.

u/GobTotem · 5 pointsr/linux4noobs

I am a beginner too and just finished this book TLCL.Another one i would recommend is shell scripting bible.For most part use google to learn about commands and man page is your friend. I am more of a book kind of guy so never used video resources. Most important you should know where to look for help when stuck.

u/rowboat__cop · 5 pointsr/linux

The Linux Programming Interface, by Michael Kerrisk -- hands down the unsurpassed resource if you want to understand Linux.

u/mckodi · 5 pointsr/C_Programming

you can start by grabbing The Linux Programming Interface book.

u/_dsb_ · 4 pointsr/asm

Apple actively discourages people from avoiding their frameworks and linked libraries; there is a reason things like MUSL and µClibc don't exist on OS X. System calls on OS X do change signature without warning, so what's the point? You can't get at the system without using a dynamically linked standard library or keeping to a very small set of [so far] stable system calls like 'open'. Similar problem as Windows and its ever-present DLLs.

The one area where assembly is nice on Mac is in optimization within a C, Pascal, etc program. Because the ISA is x86-64 nowadays, if you don't care about supporting older PPC or x86 archs, you can have a lot of fun doing SIMD code. More fun than in Linux or even Windows? Not really; it's the same thing effectively (in fact, your code will be portable). If you like the platform for user reasons then it's a fine place to start and there's a decent recent introductory book about x86-64 assembly on OS X (and Linux): https://www.amazon.com/Introduction-Bit-Assembly-Programming-Linux/dp/1484921909/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1498145217&amp;amp;sr=1-1

But writing pure assembly programs in OS X basically has no benefit outside of educational ones compared with mixed C and assembly.

u/DavidRD · 4 pointsr/learnprogramming

&gt; I have been using sublime for a while now. And I love it, it's intuitive and beautiful. But I feel like I should really vi or vim, for ssh sessions and so on. I know that there are ways to use sublime to edit codes over ssh, but I feel like I am not a real programmer if I don't know vi.

I'm pretty sure there are a lot of excellent programmers who don't know vim. Furthermore sublime is an excellent editor, if you like it there's no need to change.

BUT:

  • Even if you stick with Sublime or use an IDE I would still highly recommend you learn vim. Sublime as well as many IDEs have plugins with which you can use the vim modal-editing commands. Starting out this will be a bit of a pain to use. But after a relatively short amount of time you will be editing faster than you ever did, and the speed only increases with time/learning. This is a huge benefit, even if you never use vim itself but only editors that support its commands.

  • Just spoonfeed yourself the commands over time and really use them instead of trying to memorize heaps of them in a short timeframe. Start with the basics and add to that step by step. Make sure you continue to correct yourself and keep being aware of more efficient ways of doing things. It's about slowly/progressively building better habits.

  • Text editing in 'modeless' editors will start to feel extremely frustrating once you get used to the ease and speed of vim. Not having to reach for the mouse, the modifier keys or the arrow keys all the time is an enormous advantage both on the speed of your coding as well as your hand health.

  • Make sure you remap the capslock key to either 'esc' or 'control'. Better yet, map both to capslock at the same time ;) (xcape)

  • You need to be able to touch type in order to benefit from vim, so if you can't already I suggest you learn to touch type before you start with vim. I found this to be a very good course.

    &gt; Do any of you have resources that explain the why the keystrokes of vi the way they are so I can understand them? For example, why the hell "y" for copy. And any webpages that i can just ctrl-F to search for a command I want? I am planning to have this webpage open up on the side as I do my coding.

  1. Vim doesn't use the 'normal' key commands because it works with different modes, most of the time you want to be in 'normal mode' to navigate and edit your text efficiently. Only enter insertion mode if you need to. Because there are different modes vim allows you to edit text with as little effort as possible because you don't have to use modifier keys all the time and text navigation becomes a breeze. ('y' is much easier on the hands than 'ctr-f') furthermore vim allows most of the commands to work together with other commands. This would be far more difficult if the modifiers had to be used all the time. For example: 'w' means navigate to the beginning of the next word' and 'd' means delete. Both can be used together so you get 'dw' wich means 'delete until the beginning of the next word. The way vim allows you to combine commands is a really powerful feature.
  2. Begin by typing 'vimtutor' in the terminal and complete that tutorial.
  3. There are many online resources, but I highly recommend the book Practical Vim both for the quality information it contains as well as how the book is layed out. Each chapter covers an important topic, starts with the basics and delves further and further into the material. So if you're starting out you can just read the start of each chapter, then as you progress you can "go deeper" and pick up more useful commands and tricks as you grow.
  4. It's been mentioned already but I also quite liked Vim Adventures!

u/ixipaulixi · 4 pointsr/linuxquestions

xargs
sed
grep
awk
tail -f
find
less
vi
ls
wc
pwd
cat
blkid
lsblk
df -h
if/for/while/case
piping with |

There are really too many to list; I'd highly recommend checking out A Practical Guide to Linux Commands, Editors, and Shell Programming (3rd Edition) by Mark Sobell. It got me started on working from the command line and helped me move from a Help Desk position to a Sysadmin job a few years ago.

If you'll be working with AWS definitely check out their CLI documentation

u/flash__ · 4 pointsr/technology

This book does a pretty good job of introducing you to a lot of aspects of the wide world of Linux computing. I recommend it along with Ubuntu starting out.

EDIT: Removed referral code that I didn't put there.

u/rupturefunk · 4 pointsr/C_Programming

For a beginner I'd recommend Programming in C, it's written in a clear and readable way, with useful exercises, and does a great job explaining the basic stuff.

Secondly, Pointers on C is a fantastic second book, and very much underrated. Much more focused around pointers and memory, and integrates that stuff into it's code examples from the start. This book was massively useful to me when I wan learning, but, it can be hard to get a copy for a reasonable price.

u/CapitalistLetter · 4 pointsr/asm

I'd recommend this book. Its on linux, which IMHO I think has a simpler api than windows.

About compiler generated assembly - compilers are evil wizards. The assembly they generate will look weird, mainly because it is, and wthat won't realy help you learn assembly.

u/Drach88 · 4 pointsr/C_Programming

A note re: jumping into The Linux Kernel -- This is best tackled while simultaneously reading a book on the kernel like Linux Kernel Development (3rd Edition) by Robert Love and a book on general *nix fundamentals like Advanced Programming in the Unix Environment by Stevens and Rago.

u/the_omega99 · 3 pointsr/learnprogramming

I'm going to recommend Mark Sobell's fantastic Practical Guide to Linux Commands, Editors, and Shell Programming. It goes beyond just basic shell scripting and also dwells into areas such as Vim, Emacs, Regex, and Awk, which supplement a knowledge of the shell greatly.

It also particularly works well as a reference-style book.

u/reddit_is_cruel · 3 pointsr/linuxquestions

If you're into paper:

u/InconsiderateApe · 3 pointsr/linux

I always liked Sobells book "A Practical Guide to Linux Commands, Editors, and Shell Programming"

https://www.amazon.com/Practical-Guide-Commands-Editors-Programming/dp/0134774604/ref=dp_ob_title_bk

For programmers, "The Linux Programming Interface" is excellent.

http://man7.org/tlpi/

but read "The C programming language" first, and possibly "Modern C" as well.

"The little book about OS development" is great if you want a technical book about the inner workings of a OS

https://littleosbook.github.io/

In general, older books can be good, especially if they are about the lower level stuff that is common for all distributions, like GNU tools, programming aspects and OS theory / POSIX.

For Debian, "The Debian Administrator's Handbook" is good

https://debian-handbook.info/

For Arch, the Arch wiki is invaluable

https://wiki.archlinux.org/

u/professorlamp · 3 pointsr/learnprogramming

If you're not a complete beginner then go for The C programming language .

If you need to get up to speed on both programming and C, then I'd recommend something a bit more friendly such as Programming in C

u/l0go5 · 3 pointsr/linux4noobs

Understanding the Linux Kernel, Third Edition Writing my own kernel this semester for a class, this is the course textbook and has been an invaluable reference!

u/mv46 · 3 pointsr/linux4noobs

Most books are still made out of paper.

Try these : UTLK
and Linux Programming Interface

u/jadedmonk · 3 pointsr/UIUC

Understanding the Linux Kernel is the book that they recommend you read throughout the course, and it actually seemed to be really helpful to the people who read it. You could brush up on C and basic data structures since you'll be coding a lot in C; you also use x86 but you'll learn that during the class.

Besides that there's not much you could do since most of the material, if not all of it, will probably be new to you unless you've learned about system software/operating systems before. However, if you want a head start then you could start reading Understanding the Linux Kernel. Good luck, and may the Linux gods be on your side during MP3.

u/BrotherChe · 3 pointsr/Unexpected

Just because textbooks and reference books can be dry doesn't mean they're not creative.

Here's another and another. O'Reilly published books have a couple clever or "funny" ones.

u/chekt · 3 pointsr/learnprogramming

No matter where you start, make sure you get a reference book. If you start to branch out on your own, without the internet you're going to have a hard time figuring out how things work and how to do things that aren't spelled out in any beginner resources. If you're going to start with python, the in a nutshell books by OReilly are usually pretty good. If you going to start with C, The C Programming Language doubles as a reference and a tutorial, but if you want to do any game programming, you'll want to look into getting a book on SDL (simple, what I recommend), DirectX or OpenGL (these are both more powerful than SDL, but more complicated.). Make sure to download as many libraries and resources as possible before you deploy, even if you think you won't need them. You may want to get a book on Ubuntu if you're going to use linux so you can troubleshoot things.You can buy the books or download the pdfs, I recommend you download the pdfs to anything you don't buy, if you end up using it a lot you can buy the book when you get home.

If you want to follow a course, which I think you should, I recommend the stanford one. Downloading the lectures is a bit of a pain; you have to click on each youtube video, click on "show more", and download the MP4 file. It teaches the course in Java, which some people frown upon, but I part of the camp that believes that the programming language you start out with hardly matters, as you'll learning more soon enough, and what matters most that you just start programming. The stanford course is extremely good, and I recommend you download it and watch all of them, as they'll take you through the fundamentals. Make sure you download all the course materials as well. They use the acm graphics libraries, so download the jars and as much documentation as you can.

Things I recommend you download as well (after you set up linux):

  • VIM (type: "sudo apt-get install vim" into the terminal)
  • Emacs ("sudo apt-get install emacs23")

    Emacs and VIM are two text editors that people some people love. They're probably a bit advanced for a beginner, but they're fun to learn if you're brainfried from all the programming you'll be doing.

    To enter the vim tutorial, run the command "vimtutor" from the terminal.

    To enter the emacs tutorial, open emacs and do the command Ctrl-h t (hold down control and press h, then let go of control and press t)

  • Pygame ("sudo apt-get install python-pygame")
  • SDL ("sudo apt-get install libsdl1.2-dev")
  • C compiler ("sudo apt-get install build-essential")
  • Java compiler ("sudo apt-get install openjdk-7-jdk openjdk-7-doc")
  • Eclipse ("sudo apt-get install eclipse")
  • Gnome Media Player ("sudo apt-get install gnome-mplayer")

    Some people prefer VLC to Gnome-Mplayer, so you might as well get both.

  • VLC ("sudo apt-get install vlc")

    Tips for linux: Keep the CD which you installed it from, because if/when you mess up your linux side, you'll need a way to reinstall it. If you get stuck, you can type "man &lt;whatever&gt;", e.g. "man python" to get some info. The "man" command opens up the manual-page for whatever command, if it has one. Learn to use the command line, because it's extremely powerful.

    Good luck! I found programming to be extremely difficult when I started out, but it eventually becomes a lot of fun! Building something or figuring out an algorithm is incredibly rewarding. Don't give up, and have fun!
u/A0B97834-AD43-11E3-9 · 3 pointsr/learnprogramming

Linux Kernel Development is what's been recommended to me in the past.

u/appleade280 · 3 pointsr/linux

You might be interested in trying gentoo, especially before trying LFS.

Edit: Also, if you'd like to read about the kernel itself you could check out this book, I enjoyed it.

u/hjablome1976 · 3 pointsr/Austin

We have a meetup specifically for people learning Python...

The Austin Learn Python Meetup
http://www.meetup.com/austinpython/events/195493322/

We meet once a month, and are working our way through this book: http://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/ref=sr_1_1?ie=UTF8&amp;amp;qid=1411752072&amp;amp;sr=8-1&amp;amp;keywords=beazley+python

We started about 18 months ago, but rebooted back to the beginning a little over a month ago.

u/enteleform · 3 pointsr/Python

Work through Python Crash Course: A Hands-On, Project-Based Introduction to Programming if you like project-based learning &amp; having relevant context-based examples, or read through Python Essential Reference if you're comfortable with learning raw concepts &amp; want a solid overhead view of what's available to you.
&amp;nbsp;
Automate the Boring Stuff with Python is another good project-based option:

u/automatedtester · 3 pointsr/Python
u/freyrs3 · 3 pointsr/Python

This is a good book: Python Essential Reference.

If you're looking for gift ideas for new programmer my advice is always one of the three things:

  • A good keyboard.
  • A good pair of headphones.
  • Good coffee and mugs.

    Those three things usually go over well with programmer-types.
u/phstoven · 3 pointsr/Python

Python Essential Reference is great. It has a medium level overview of almost all of the standard library, and has some great explanations of decorators, 'with' statements, generators/yields, functional programming, testing, network stuff, etc...

u/McClane_vs_Gruber · 3 pointsr/learnprogramming

If you're lucky, when your own curiosity brings you there.

I taught myself assembly using this textbook, and a copy of Intel's x86 instruction manual, over the summer after graduating college. Java was the language of choice for the C.S. program at my university. C was used in the OS and some computer graphics classes (others used Java 3D), but everything else was high-level, no memory management, with a virtual machine and garbage collector to wipe my ass and feed me crackers. (Here's a very recently published book.)

In my experience, learning assembly helped me gain a deep understanding of how programming works. With a 1-to-1 (almost always) mapping between a line of assembly and a CPU instruction, I felt like I was directly instructing the computer in a way I never feel using high-level languages. From that, I gained an appreciation of how low-level C programming can be, because you can see immediately how C statements are transformed into assembly. After learning assembly, I deliberately compiled programs into assembler with GCC so I could look at the code, because I could finally understand it.

And then I learned C++, and saw how it could be built directly on top of C.

And now it all makes sense.

u/CuriousExploit · 3 pointsr/netsecstudents

Suggested in a related thread I was able to learn enough to read and write it better from this book: https://www.amazon.com/Introduction-Bit-Assembly-Programming-Linux/dp/1484921909/

Even better beyond is to write some C and observe what GCC or Clang compiles it into, and see if you can mentally (or actually) map the disassembly back to C.

u/Righteous_Dude · 3 pointsr/CompTIA

I will be taking the current version of the Linux+ test instead of the beta of the new version.

  1. I recommend, first, learning from a book that covers many of the Linux commands and their command-line options. I'm using "Linux Pocket Guide - Essential Commands, 3rd edition" by Daniel Barrett published by O'Reilly. People who took the current exam or the beta have said that an exam-taker should know details about the commands and their options.

  2. After that, you can learn from one of the books written for the current version, for the topics that the current version and the new beta version have in common. I evaluated the exam-prep books for the current version in this post.

  3. I don't recall which topics are in the new objectives but not in the current objectives. You can at least read Wikipedia articles on such topics so that you have some understanding of them. You can also search on the Web for some relevant keywords and there are probably educational articles out there.

  4. I also recommend having a CentOS or Ubuntu system installed on a PC, or installed in a VM, so that you can get some hands-on experience. That experiential learning can help you recall things when you are in the exam room.




u/JasonZX12R · 3 pointsr/linux4noobs

I have been a Unix admin for 5+ years and I am always finding cool tricks with commands I have been using for years. Or built in shell commands even, such as:

http://www.amazon.com/Bash-Shell-Conquering-Command-Line/dp/1590593766/ref=sr_1_1?ie=UTF8&amp;amp;qid=1319107875&amp;amp;sr=8-1

Is one of the books I have been going back over.

u/Jeff-J · 3 pointsr/Gentoo

Books that I find very useful:

Beginning Portable Shell Scripting: From Novice to Professional

From Bash to Z Shell: Conquering the Command Line

Unix Power Tools, Third Edition

The UNIX Programming Environment

Running Linux (mine is old, but still useful)

I have bought lots of other useful books from O'Reilly.

Anything written by Michael W Lucas.

u/masterm · 3 pointsr/linux4noobs

You probably want the full package which includes having a desktop/window manager. Use a popular distro because you will need help (and a popular distro has more resources/support available). Use the terminal all the time. Read all the time. Fuck with everything

Read this: http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356

u/dhvl2712 · 3 pointsr/linuxquestions
u/paul2520 · 3 pointsr/programming

You learned those from this book? Could you briefly explain them? I would like to learn more.

u/gotNoGSD · 3 pointsr/linuxquestions

You can't have it both ways. if you want to know exactly then you have to drill down to the fundamentals which are handled at a low level (C &amp; assembly). If you want to understand the general concepts you'll need to make lateral moves and study CS along with having enough of the tiny details to fill in the gaps with your intuition.

I think what you may like is a book on the linux API. This is between kernelland and userland.

Try this one:

https://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200

Before you do that ensure you know enough basic C. Linux kernel uses K&amp;R style. So this might be good enough and your best bet to fasttrack.

https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628

Do keep in mind this is 2K pages worth of reading. This should help to fill in enough of what you don't know you don't know so that you can better use google-fu to get you further.

u/fulltimegeek · 3 pointsr/videos

Awesome book spotted under his desk at 2:45

u/dzjay · 3 pointsr/learnprogramming

Do start with C and then buy The Linux Programming Interface. Afterwards, I recommend buying a book dedicated to pthreads and another on sockets. Of course, do remember to do the actual exercises.

u/BluddyCurry · 3 pointsr/vim

My recommendations are:

  1. Watch vimcasts
  2. Get the Practical Vim book. It really improved my vimming dramatically.
  3. Map &lt;Esc&gt; to something easier. I use jk (inoremap jk &lt;Esc&gt;) because it's a sequence that you rarely type when programming. If you don't like that, you could use &lt;C-c&gt; (which is a default binding) if you map Caps-lock to CTRL (I recommend doing this regardless, but it needs to be done at the OS level).
  4. Don't use the arrow keys.
u/wuts_interweb · 3 pointsr/commandline

Practical Vim - Edit Text at the Speed of Thought by Drew Neil is the best book I've found for going beyond the beginner stage.

Preview here.

u/ccjitters · 2 pointsr/linuxquestions

There are a couple things i'd recommend to start with. First, figure out how you learn best. For me it's physical books. I get bored and distracted with videos and pdf's get forgotten about. I'd definitely getting some decent reference material. Here are some of my favorites:

  • The Python Pocket Reference

  • The Bash Pocket Reference

  • The Linux Pocket Reference

  • The Linux Bible

  • Literally anything by No Starch Press They're excellent books, fun to read and look great on a shelf.


    Kali on a raspberry pi is fine but i would not recommend starting with Kali. It's not a beginners Distro. If you can, i'd recommend picking up a cheap 2.5" hard drive for your laptop and swapping it with the Windows drive, or dual booting works too. Install a linux distro and eat your dogfood. Ubuntu and Linux Mint are great for beginners, with Mint and the cinnamon desktop being very similar to Windows 7.

    Centos or Fedora are also good. Fedora is based on Red Hat Enterprise linux, so it's very similar to what you'd find in an business enterprise environment. Centos takes it further though. It's literally just RHEL without branding or paid support.

    All of these (apart from RHEL) are free and all would be a good jumping off point. The only real difference between them all is the package manager and Desktop environment. Red Hat uses 'yum' while Debian uses 'apt'.

    Once you find one you like start practicing. Nearly all utilities you'll find will have a graphical user interface but the command line is always going to be more extensible/powerful. If nothing else get the Linux and Bash pocket references and test administering your own system. Try using the command line for python instead of IDLE. Learn to reboot/shutdown, install/update/upgrade/search with your package manager, try to make your system faster and document everything you do. EVERYTHING.

    You'll be a pro in no time.

    (I'm serious about the documenting. It's important. If you don't believe me check out some of the stories u/patches765 posts in r/talesfromtechsupport. It's like documentation is his superpower.)
u/dmbuddy · 2 pointsr/linuxadmin

I really enjoyed both of these books when I was starting out. Even now they are super helpful. https://www.amazon.com/gp/aw/d/0134277554/ref=dp_ob_neva_mobile

https://www.amazon.com/gp/aw/d/1491927577/ref=dp_ob_neva_mobile

If you don’t know Linux at all the 2nd book gives you a good overview of things.

u/archover · 2 pointsr/archlinux

&gt; How Linux Works

Came here to say this!

This book really hit the sweet spot for me. Covered Linux in just the right balance of concepts and details. I would read a bit, then try it on the computer. Really helped!

http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356

u/idboehman · 2 pointsr/devops

I'd make sure I have a really solid understanding of systems and networks, e.g. how Linux works. This book seems like a great overview and I love No Starch Press. There's also this book which is used by Carnegie Mellon's introductory systems course, though that might be a bit too deep to dive into straight away, more like something that could be used if you want a deeper understanding of how systems work. You should have some familiarity with C just as foundational knowledge. The guy who wrote Learn Python The Hard Way also wrote an intro to C, Learn C the Hard Way. He's added a lot more material than the last time I checked (~Dec 2012) which looks like it covers a lot of topics so it would be great to work through it.

Some more technical books on this subject that are well regarded and can be used as reference books are Advanced Programming in the Unix Environment, Unix Network Programming, and The Linux Programming Interface

Also in addition to Python I'd also suggest learning some Ruby (Practical Object-Oriented Design in Ruby and Programming Ruby 1.9 &amp; 2.0 are two resources I'd recommend), it's what Chef is/was implemented in and is fairly nice to work with.

u/the_gnarts · 2 pointsr/linux

I look up whatever I need in The Linux Programming Interface.
It’s exceptionally well written and covers a broad range of topics.
One of my favorite technical books ever.

Also, just read the manpages for Linux headers and syscalls.
Often they were written by the same author.

u/GaloisField · 2 pointsr/linuxquestions

If you must buy a book, start here: https://www.amazon.com/dp/1593272200/

u/JamesB41 · 2 pointsr/learnprogramming

I'm not sure what book you're referring to. I can't seem to find it. If you're referring to this one: http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200 then I couldn't disagree more. That book is packed with TONS of useful information and examples everywhere. I've used a great deal of it. I can only assume you're talking about a different book or you didn't get very far.

What do you REALLY want to do? Because if you want to write systems level applications in C for Linux, you're not going to learn it overnight. It's going to take a lot of reading. You're not going to hop on codecademy, crank out a few tutorials and suddenly be good at it.

What's your background? What experience do you have? And again, what are you trying to accomplish, big picture?

I could be wrong but I read your post as "This book is TL;DR. I want a shortcut." There really aren't any for things like that.

u/coniferhugger · 2 pointsr/devops

I love Safari. The only book they haven't had that I've wanted is Practical Vim. But, the book is well worth the price.

u/7sins · 2 pointsr/vim

I'm doing almost no web stuff, but it always feels like a lot of people use vim for html/css/js, so I guess it can be a good fit. Since a compiled language like java/c++ usually requires ide features to use or debug(debugger, auto completion, type hierarchy, go to definition, refactor, etc.), it can be a bit of a ride to configure vim to be up to the task(usually a lot of plugins). Not the same for something like html/css, which is usually debugged/developed through the browser anyways.

Also, when I code in vim, its usually more of a mix of vim and commandline: ctrl+z out to do some grepping/git stuff, fg back to vim, close vim and open in a different directory, etc. Since you said you are working under windows, your workflow will probably differ a lot.

My suggestion would be: See how far you can get with vim. If it feels uncomfortable compared to your usual IDE, try pushing it a little further, and see if you can't find a solution. But, in the end, be honest with yourself: If the IDE feels better and lets you work faster and more comfortable, you have to accept that. Maybe vim is not the right tool for this task, doesn't mean you have to forsake it completely or anything. In case you find yourself in vim-wonderland and every other IDE/Texteditor can't stand up to vim anymore, then thats fine too. Or it might be a combination of the two. But you won't know that until you try. Just go for it and be honest with the result.

Also, as a side note, always remember your employer is the one paying you. So if you are being payed per hour(instead of per-project for example), he or she will probably expect you to work at an acceptable speed, and not for you to spend your time configuring vim, if you could be using something "proven" and mainstream just as well. But that completely depends or your employer. For the same reason, consider buying http://www.amazon.com/Practical-Vim-Thought-Pragmatic-Programmers/dp/1934356980/ if you haven't already. I used to own a copy(until I lost it), and it helped me a lot. Especially if you are already familiar with vim, it has huge potential.

Recapture: just try it out and be honest with the result; remember that your workflow might consist of other tools as well(not just editor/ide); don't waste your employer's money; consider buying practical vim(really!)

Since I don't really do web stuff, I can't say which plugins are really useful, so maybe somebody else will be able to help you out there.

Good luck! ;)

u/theevildjinn · 2 pointsr/programming

Practical Vim is a fantastic book for boosting your vim-fu, it's written in such a way that you can pick it up and read as little or as much as you like, and still get something out of it. I bought it on the strength of the Amazon reviews after having used Vim for 12 years but never really mastering it, and I now edit a lot quicker than I did before.

u/rpetre · 2 pointsr/linux

Read a lot. Man pages, guides, examples, source code. Experiment. True, with only one machine you probably won't get to get exposed to, say, networking stuff (you can emulate complex networks using VMs, but you still need to know a lot to set up such an environment). Still, there's a lot of things to learn about the system just by mucking with it. Having a machine you can reinstall whenever you want helps a lot, get an old PC or laptop and use it as a test bed if you don't have a spare server, making it a webserver today, a mailserver tomorrow, a firewall the next day and so on.

Take any problem as a challenge to dig deeper and understand why. Granted, in the Google age, the solution to most problems are just a search and a copy-paste away, but getting to understand what happens with the machine and what's the most elegant way to control it takes a lot of research and practice and failures. Learning "why" is way more important than learning "how", since tools evolve and change and the manuals are always close, but knowing what to look for is a skill that takes time to develop.

Speaking of failures, try to come up with as many ways as you can to make things fail and try to find solutions to most of them. Good sysadmins understand failure and actively explore ways to prevent or handle it.

If you don't mind reading thick books, I heartily recommend Evi Nemeth's Linux Administration Handbook (pretty hands-on) and Tom Limoncelli's Practice of System and Network Administration (about the mentality and processes and non-technical stuff). You might find the latter a bit boring, since it has zero scripts and commands in it, but sooner or later in your career you'll love it.

I'll stop because I ranted too much already, but as a final word, keep in mind that SA is primarily about maintaining infrastructure that helps people, so don't get too caught up by the tech to forget that service availability comes first, shiny toys second ;)

u/xgunterx · 2 pointsr/linux
u/ezrock · 2 pointsr/IAmA

&gt; Should I avoid the Microsoft world if I am certain on focusing in the direction of linux?

Assuming you are considering systems administration... In short, yes, avoid MS, and get to know Linux (when I say linux, I usually mean all of the Unix-like OSes). Most of the great sysadmins I know have OSX or Linux on their workstation, and work administering Linux systems. I can't think of anyone that knows both MS and Linux and prefers working with MS - although I am sure they exist. At the end of the day, it comes down to what you prefer, but there are a lot of arguments to be made for getting to know linux. #1 is the server market share, and #2, the F/OSS philosophy.

&gt; What is the lowest "entry-level" job that I can get my feet wet while I study?

With linux, hmmm, good question... there are a couple of entry points. I'd start by teaching yourself. Again, it depends on what you are into. One entry level position would be tech support at a hosting company that hosts linux servers for their clients. The guys that you get on the phone/email when you have this service for example. Their tech support is usually tiered, so tier 1 is doing easy stuff and tier 3 is doing the hardcore stuff. I even poked around a found a listing. That's a great way to get your feet wet. That, or a linux-based startup that has a team and needs more hands.

&gt; I know this is pretty far out, but how's the hiring like for linux positions? When the time comes, should I work with a recruiter, or sell myself to a start-up or company directly?

I wouldn't think it is so far out. If you are a "computer-person" smart and you got yourself a book like this and practiced a bit until you were good enough, you could get an entry-level job pretty damned quickly, I think. The market is quite hot in big cities. For proof, pick a big city, go to craigslist and type in linux under jobs. I picked LA In my opinion, there is nothing wrong with recruiters, it's nice having someone whose job is to get you a job. I've used them to hire and to be hired in my past. Just remember, they're salespeople, and they're selling you, so they are often put in a position where they are trying to persuade you.

&gt;What should I get started on reading? What books would you recommend for a beginner? (I'll take "advance" ones too, I'll save them for the future). Also, if you know of any online communities or websites, I appreciate those as well.

As far as resources... That book above is great. It depends on what you want to know. The RHCT/E course material is great for practical sysadmining:
This is old, but I used it. Almost all of this stuff is good.
This is a classic, but it's quite old.

Online, no better place to start than:
http://www.reddit.com/r/sysadmin/top/

/r/linux

http://code.reddit.com/wiki/help/faqs/sysadmin

u/Grimmjow91 · 2 pointsr/unix

I am reading the first edition now and it is really good so it can't hurt. It is a great into, and a good reference even for people who know what they are doing.

I am also reading this for school as well http://www.amazon.com/Practical-Guide-Fedora-Enterprise-Edition/dp/0133477436/ref=pd_sim_14_2?ie=UTF8&amp;amp;dpID=517h5KJOQVL&amp;amp;dpSrc=sims&amp;amp;preST=_AC_UL160_SR129%2C160_&amp;amp;refRID=0T274B6GDEYV9EQ9WGSG but I hear http://www.amazon.com/Practical-Commands-Editors-Programming-Edition/dp/013308504X isn't bad either

u/chili_beans · 2 pointsr/linux

I don't recommend either of those books, try these instead:

High Performance MySQL: Optimization, Backups, and Replication by Baron Schwartz, http://amzn.com/1449314287

A Practical Guide to Linux Commands, Editors, and Shell Programming (3rd Edition) by Mark G. Sobell, http://amzn.com/013308504X

u/satysin · 2 pointsr/C_Programming

If you are a total beginner then read C Programming Absolute Beginner's Guide, Third Edition by Greg Perry &amp; Dean Miller
https://www.amazon.co.uk/Programming-Absolute-Beginners-Guide-Guides/dp/0789751984

If you have some basic experience in another language such as Python, Visual Basic, JavaScript, etc. then read Programming in C, Forth Edition by Stephen Kochan
https://www.amazon.co.uk/Programming-Developers-Library-Stephen-Kochan/dp/0321776410

If you are comfortable programming in another language such as Java, C#, Python, etc. then read The C Programming Language, Second Edition by Kernighan &amp; Ritchie (also known as the K&amp;R book)
https://www.amazon.co.uk/C-Programming-Language-2nd/dp/0131103628

u/snowlovesnow · 2 pointsr/C_Programming

Programming in C by Stephen G. Kochan

Hands down the best beginner book

A new version (4th) was just released this past August.

Any experienced programmer will tell you so. The K&amp;R book is an excellent resource however Programming in C is much better suited for an absolute beginner.

u/ItsAConspiracy · 2 pointsr/programming

Duntemann's book uses Linux and flat address space in the third edition.

u/gott_modus · 2 pointsr/programmerchat

/u/The_frozen_one linked you to IDA, which is pretty deffacto in the reversing world. The free version is limited, though, so if it doesn't quite give you what you need and you want to save money, Visual Studio's debugger has a pretty decent disassembler.

Learning how to read assembly is kind of challenging at first. Something I'd recommend looking into to pair with your journey is Jeff Dunteman's Assembly Step-by-step.

It uses Linux as its teaching OS, so a few things on Windows will be different, such as syscalls or anything ABI specific.

That said, it uses Intel syntax which is what you want, and it has several hundred pages of reading before a hello world is even written. Even if you choose not to continue reading after that, those few hundred pages alone make the book worth buying.

u/Narmu · 2 pointsr/Assembly_language

i would recommend this book.

u/rbtEngrDude · 2 pointsr/programming

Pick up any book on x86 assembler. You cannot program assembler without understanding the underlying system architecture, and as such most books on assembly language will include a deep dive on x86 architecture from the programmers perspective.

Assembly Language Step by Step by Jeff Duntemann: https://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025

This is one of my favorites, the first assembly book I was able to make it all the way through. Once you do, I also highly recommend

Modern x86 Assembly Language Programming by Daniel Kusswurm: https://www.amazon.com/Modern-X86-Assembly-Language-Programming/dp/1484200659

A very thorough, yet surprisingly readable, dive into thw inner workings of thw advanced x86 feature sets, like MMX and AVX.

u/samoht9 · 2 pointsr/dcpu16

I'm using the following book to learn Assembly and really liking it so far.

http://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025

It goes into C at the end. I chose to learn Assembly because I wanted to learn how it all works behind the scenes a bit more. I think it's definitely worth the time to go through and will lead to your goal of learning C.

u/exoticmatter · 2 pointsr/learnprogramming

No, they are not. For example, semaphores are often not kernel objects. And in any case, the kernel is written in a programming language. Anyway, I've always found https://www.amazon.co.uk/Understanding-Linux-Kernel-Daniel-Plerre/dp/0596005652 to be a good introduction to OS programming in general. In C.

u/yoda17 · 2 pointsr/linuxdev

It's really very easy. I've only written one linux driver for a new hardware serial port and a few other kernel modules and have written a couple dozen drivers for other operating systems.

This is my favourite linux book although I'm sure that have others, it's the only one I can name off the top of my head.

I would start off by adding a new API. That was my favourite exercize and only required a few lines of code.

edit: An Important thing to be able to do is to control the hardware without an OS. When you can do that, squeezing it into whatever is usually a simple task. Arduino is a nice learning platform for hardware.

u/gawdnfreeman · 2 pointsr/sysadmin

Three esxi servers, each with more than one NIC, and one separate vcenter server is a great starting point. This allows you to tune DRS, HA, and even fault tolerance. Once you get that down, you'll want to be able to tune VMs properly to run most effectively in a virtual environment.

I enjoyed reading these books, though some are "dated" now, the contents are still very relevant. They won't get you anywhere in particular by themselves, but when you combine them with the self-teaching nature of sysadmins I've previously described, these will generously add to your toolset.

HA and DRS deepdive
Sed &amp; Awk

Mastering Regular Expressions. I use rubular.com often.

Pro Puppet

Anything by Bruce Schneier is usually worth your time.

Though I no longer administer a large number of Windows machines, I am a huge fan of Mark Minasi. The Server 2003 book was super helpful in building and maintaining Windows Domains.

I have an old edition of the DNS and Bind book kicking around somewhere.

Understanding the Linux Kernel has largely been useful to me when doing anything "close to the kernel". Not a good beginner's book.

I've never used an apache book, but I enjoyed the Varnish book. This definitely helped me.

Of course, these books don't cover everything, and those listed are relevant to my interests so your mileage may vary. You'll never go wrong teaching yourself new skills though!

EDIT: I forgot about the latest book I've read. I used tmux for a little over a year before purchasing a book on it, and it has improved my use of the program.

u/tbolt871 · 2 pointsr/linux

I found this book useful:
www.amazon.com/Classic-Shell-Scripting-Arnold-Robbins/dp/0596005954

u/name_censored_ · 2 pointsr/Python

&gt;Is there any books you would recommend as a reference not a guide? I have a few bookmarks that have really helped but i'd love a hard copy on hand.

I personally cut my teeth on a borrowed copy of Python Essential Reference - it's basically just a rehash of the standard library (though it's fantastic to have a hard copy, and it sounds like what you want). You can also try this book by Alex Martelli - I have never read it, but Alex Martelli is practically a god in the Python world (as someone who read GoF's Design Patterns, I loved his Python design patterns talk). Reddit also raves about Learn Python The Hard Way, though I have never read it because I erm... "disagree" with how Zed Shaw tends to approach things (to put it mildly), and I think it's a guide as opposed to a reference.

&gt;Oh, and i've been having difficulty using the built in help function and such, is there a guide on how to use it effectively? I seem to struggle finding examples of the code too and how to use the functions and what i believe are called attributes ( the sub functions, e.g. datetime.datetime()),

I assume that the inbuild help you're talking about is the code documentation? This documentation is intentionally brief, so it's not particularly useful as anything but a reminder. You can create your own simply creating a string after you open a function or class;

def foo(etc):
""" This is the documentation for foo().

Triple quoted so that it can safely run over multiple lines"""

blah


As for the terminology; you are correct that they're called attributes. There are two sorts of attributes - methods (functions) and properties (values). It can get very messy/fun when you use the @property decorator or toy with __getattr__/__getattribute__/__setattr__, but let's not go there (let's just say that Python can be no-holds-barred).

&gt;but i came from PHP where the PHP manual is amazing for a novice/new coder.

Python's online docs are absolutely fantastic. They are a comprehensive reference of not only the builtins and standard library, but also the object model, features, a rather good tutorial, the C API reference, and even heavy stuff like metaprogramming. The only things it's really missing is the really hardcore stuff like __code__ and __mro__, and to be honest, that's probably a good thing.

&gt;And what is the difference between import datetime and from datetime inport datetime. Does it just allow me to call the attribute as datetime() and not datetime.datetime()?

That's exactly correct.

Just to add another complication, you can also from datetime import datetime as tell_me_the_time_please, and then instead of datetime() you can use tell_me_the_time_please(). The reason this is useful is that sometimes things in modules are named too generically (maybe it's main() or something), so you can import part of the module as a different name.

u/Mr_Bennigans · 2 pointsr/gamedev

&gt; I think if I learn how to program with an aim to work as a software developer and make games on the side, is this viable after just turning 20?


There's nothing wrong with the age of 20. I started school at 20, graduated in four years, and found work as a software engineer right out school.


What you have to figure out is how to make the best of your time left in school: should you take a class or two on programming and graduate on time, or (more dramatically) change your field of study to computer science and spend a few more years in school? That's something only you can decide. If you want to finish your architecture program and graduate in a reasonable amount of time, I can assure you that your math and physics background will be enough to get you work as a software engineer, but only if you can actually program.


Part of working as a software engineer means being able to program in multiple languages. That's because it's not really about the language, it's about the logic. All languages follow certain patterns and while syntax or wording may change, they all share ways to implement the same logic.


It also means knowing what data structures to use for what scenarios. The phrase "There's no such thing as a free lunch" comes to mind. All data structures have advantages and weaknesses and no data structure is perfect for every occasion. Know the differences, know the performance impact, and be able to speak to them. This won't just help you write better code, it will help you land a job. Interviewers love to ask questions about data structures.


As a corollary to data structures, you also need to know your algorithms. You need to know the performance impact of different ways to search and sort, traverse graphs, and find the shortest path (particularly relevant for game programming).


You said you're learning Python and that's great. Python is a great way to learn how to program. It's dynamic, it's friendly, and it has a rich library. Learn Python inside and out, then pick another language and figure out how to do the same things. C++, Java, and C# are all pretty popular in the industry, pick one of those. Once you know how to program in a few languages, you focus less on minute implementation details specific to one language and more on high level abstraction shared across multiple languages. By that point, you'll no longer be speaking in code, you'll be speaking in plain English, and that's the goal.


I don't know many good free online resources for learning languages, I learned mostly out of textbooks and lecture slides (along with lots of practice). There are some links in the sidebar to some tutorials that are worth checking out. Beyond that, I can recommend some books you may want to read.


  • Algorithms in a Nutshell - one of the best quick references on algorithms you can read
  • C# 5.0 in a Nutshell - excellent language reference, aimed more at advanced programmers, though it's comprehensive in scope, covering everything from language syntax and structure of a program to more complex tasks like threading, multiprocessing, and networking
  • Learning XNA 4.0 - a great game programming book, teaches 2D and 3D game development using Microsoft's C# and XNA framework
  • Java in a Nutshell - another great language reference
  • Starting Out with Java - introductory programming text, has end-of-chapter problems for reinforcement, a little pricey so see if you can find a used older edition
  • Starting Out with C++ - another good introductory programming text from Tony Gaddis
  • Python in a Nutshell - I can't speak to this one as I haven't read it, but I have been extremely happy with O'Reilly's "... in a Nutshell" series so I suspect it's as good as the others
  • Learn Python the Hard Way - free online book about learning Python, begins with simple examples then teaches you how to break it so you know both sides of the story, wasn't as comprehensive as I'd hoped but it taught me the basics of Python
  • Programming Interviews Exposed - sort an all-in-one book covering lots of different topics and giving an insight into what to expect for that first interview

    EDIT: I added Programming Interviews Exposed because it's a good reference for data structures, algorithms, and interview questions
u/ewiethoff · 2 pointsr/learnprogramming

Congratulations for deciding to learn Python! A few thoughts:

  1. Don't worry for now. :-) Just tell yourself a tuple is a Python list without append, count, extend, etc. methods. Just tell yourself a lambda is a function without a name. You can fill in your understanding later.

  2. What Python book are you using? Maybe it's too simple for you. Finish that book, then head for one by Alex Martelli: Python in a Nutshell. Unfortunately, the Nutshell book is quite old by now. So borrow it from the library or get it used cheap. Martelli is a much deeper teacher than most out there.

  3. I think Python's mathier than most other popular languages out there, and it has sparked me to learn more math. I have a BS in engineering with 8 semesters of math plus all the extra math that's taught in the engineering courses, but not the type of courses which mention "tuple" or "lambda." So I read cheap math books for pleasure. I've been getting a lot out of An Introduction to Algebraic Structures. It doesn't happen to mention the words "tuple" or "lambda," but it does go into mappings, ordered pairs, operations, and other stuff which help my Python head explode happily.

    Edit to clarify 1): Just tell yourself a tuple is an immutable Python list without append, count, extend, etc. methods.
u/AiwendilH · 2 pointsr/linux4noobs

Ugh...afraid I am not that much of a help there...too old ;) Lots of this actually comes from DOS (you know, the OS of microsoft before windows) programming books and books about the linux kernel in version 2.0 ;) So really old and probably not available anymore. And both had nothing to do with virtualization...just, well DOS was no multitasking system. Direct hardware access and even manipulating the memory mapping registers were common back then for normal programs (as only one program could run at a time...you could do whatever you wanted, nothing else could get in your way). All this is pretty useless knowledge nowadays...but it helped a lot to know the basics to somewhat understand "modern" stuff like virtualization...it's more just learning how it was done as the basics are still in large parts the same.

But afraid that means I have no clue about a modern book that would teach these topics nicely. (not to mention that my first books about that hardware stuff were still in German...only two years learning English at school were not enough back then to understand English programming books ;))

I heard some good about Linux kernel development but afraid didn't read it...so take with a grain of salt (And this is really more if you are interested how the kernel does things and how hardware access is really done, it's not a book that will help you much with "ordinary" daily work on a linux system.

Afraid I am not aware of any general purpose book for linux at all...there must be some for sure but afraid I always just looked into kind of specialized books...so can't help there at all.

A slightly higher level book that helped me a lot to deal with linux was linux application development (although I read it in the first edition..and german translation back then. In this case I have no excuse for that...by that time I should have been good enough in English to read the original..so probably just some teenager laziness). But this one is really good, leads you through the whole process of writing your own shell...requires basic C knowledge though.

What brings up something interesting...even if not linux related directly...any book about learning the basics of C will also help a lot with linux. I see that a bit different than learning a language like python for example..while learning python will of course also help you understanding linux better in some cases learning C gets you really dirty. It forces you to learn some basics about hardware...most other languages "shield" you there (exception c++ which is also very lowlevel and if you ask me the more interesting language to learn...but if you ask Torvalds he probably would have some strong words of disagreement there. So for the linux kernel learning C is better)

But overall...really better make a new question about this and ask a wider audience...afraid I am just the wrong person to give any good suggestions there.

u/HPCer · 2 pointsr/cpp_questions

While I would be really surprised if you found any resources implementing software RAID 5 in C++, you could look at the mdadm C code (used by Linux) to create software RAID:
https://github.com/neilbrown/mdadm

That's written in C, but it's something. If you're doing this simply for learning, I would shoot for something significantly simpler and draw out one source array with three destination arrays (to simulate three drives - you may expand this to N drives later). Then you'll want to work on iterating through the array and calculating/round-robin distributing the parity blocks across the destination arrays. If you want to expand this further and implement it as a driver, that will likely involve you reading a couple books on the relevant OS first. For Linux, I regularly recommend Robert Love's Linux Kernel Development book:
https://www.amazon.com/Linux-Kernel-Development-Robert-Love/dp/0672329468

He does a decent job providing a pretty high-level view of each component of the kernel (considering the complexity of the kernel, 440 pages is short). I also found it to be a really interesting/fun read.

I'm a little short on time to actually read the mdadm code, but I'll check again tomorrow if the above isn't enough to start you off.

u/AlienBloodMusic · 2 pointsr/linux

The OS is just a program like any other program. In order to really start understanding how it works, you should learn C.

Once you've got some C down, read Advanced Linux Programming

From there read Robert Loves Linux Kernel Development - even if you're not a kernel developer, it'll give you tremendous insight into how the kernel works.

Also check out Linux Device Drivers. I found this &amp; Loves book complemented each other nicely.

u/srnull · 2 pointsr/programming

You got downvoted because what you said wasn't clear. There is a version of what you said that might be sort of correct, but what you typed really isn't.

Threads and processes are more similar on Linux than they are on other systems because they're both just tasks. See this answer on StackOverflow for an overview. They're both struct task_struct in the C source, which is a huge structure, closing in on 2KB. See this answer on StackOverflow for an overview.

If you're interested in these kinds of things, read e.g. Robert Love's Linux Kernel Development.

u/ccondon · 2 pointsr/linux

Well yes. It has a lot of features, and it was O(1). The scheduler has to be able to support nicety, among other things that I can't think of at the moment. For a good introduction, see this book by Robert Love. I used the second edition. The third edition talks about the newer, O(log n) scheduler. The O(1) scheduler performs better for servers with many tasks and little user interaction, whereas the newer one is apparently much better at minimizing latency for applications with a lot of user interaction, as a desktop would have.

Granted, a round-robin scheduler is O(1), and certainly much faster than the O(1) linux scheduler, but it lacks all sorts of important behavior.

u/AtomicWedgy · 2 pointsr/learnpython

If you're looking for an intro to programming in Python I would suggest Introduction to Computation and Programming Using Python For a general language reference Python Essential Refernce For an introduciton to the included modules The Python Standard Library by example which includes a lot of simple code examples. The book Core Python Application Programming is a great subset of the above books with less over all coverage but greater detail in the example code. And last but not least, for advanced algorithm info Annotated Algorithms in Python

u/ninety_hex · 2 pointsr/learnpython

If you like paper books get a copy of Python Essential Reference. After a brief introduction to python it goes through very many standard library modules plus example code. Just the thing for when you need to know how the mumble module works. I've owned every edition from the 2nd and I'm waiting for the 5th edition. If you want an e-book edition be very careful about the formatting of code samples in the e-book. Kindle books are known for major problems with computer code formatting.

An online resource others have mentioned is Python Module of the Week, one of my favourite online resources. The e-book version of this on Amazon is one particularly bad example of code formatting.

u/1nvader · 2 pointsr/learnpython

I can strongly recommend Python Essential Reference (4th Edition). It covers both Python 2 and 3. Maybe it's not free, but i think it reads much better than the free books from the sidebar.
The only downside of the book is that it is not written for absolut programming beginners, you need to have programming experience in any other language.

u/qspec02 · 2 pointsr/learnprogramming

This (Python Essential Reference by David Beazley) is easily my #1 Python book for just about everything.

I wish it had a few cheatsheets or some quick references, but aside from that, it covers the language pretty thoroughly.

u/Your_Left_Hand · 2 pointsr/linux4noobs

If you are willing to spend a little money, I'd suggest the Linux Command Line and Shell Scripting Bible. It will first teach you about the commands you can use on the CLI. Then it will delve into shell scripting. After finishing that book up you should have a very decent understanding of bash.

Another good tutorial that I can Recommend is The Linux Command Line. There are free lessons on the website that cover the same material as his book does. The book is just a lot more in depth.

Also, after you gain some familiarity you can try reading through the bash man page. It's a heavy read, but you can definitely learn a lot from it.

Good luck!

u/RAGSdale83 · 1 pointr/sysadmin

I was introduced to this book while going through my IT Networking classes. I found that it helped me to understand the *nix environment a lot more.

http://www.amazon.com/Linux-Administration-Handbook-2nd-Edition/dp/0131480049

With that said - I want to grab the book that /u/Letmefixthatforyouyo mentioned. His description made me curious about that book.

u/nbrenckle · 1 pointr/linux

Any of the OReilly books are excellent. And if you are looking to learn programming/scripting, I'd go with whatever installs easiest on your iMac, which might be OSX. Also, you can check out Linux Administration Handbook (or the general 'Unix' one) http://www.amazon.com/Linux-Administration-Handbook-2nd-Nemeth/dp/0131480049/ref=pd_sim_b_2

u/mikeeusa · 1 pointr/redhat

It is.

\&gt;I don't know where they get the idea.

&amp;#x200B;

That's because you are ignorant regarding US law in this area. The FSF is not a legislative body, relying on their proclamations is not wise. A sister organization, the SFConservancy, was headed for the longest time by a non-lawyer...

&amp;#x200B;

( https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876 )

&amp;#x200B;

\&gt;p46 "As long as the project continues to honor the terms of the licenses under which it recieved contributions, the licenses continue in effect. There is one important caveat: Even a perpetual license can be revoked. See the discussion of bare licenses and contracts in Chapter 4"

--Lawrence Rosen

&amp;#x200B;

\&gt;p56 "A third problem with bare licenses is that they may be revocable by the licensor. Specifically, /a license not coupled with an interest may be revoked./ The term /interest/ in this context usually means the payment of some royalty or license fee, but there are other more complicated ways to satisfy the interest requirement. For example, a licensee can demonstrate that he or she has paid some consideration-a contract law term not found in copyright or patent law-in order to avoid revocation. Or a licensee may claim that he or she relied on the software licensed under an open source license and now is dependent upon that software, but this contract law concept, called promissory estoppel, is both difficult to prove and unreliable in court tests. (The concepts of /consideration/ and /promissory estoppel/ are explained more fully in the next section.) Unless the courts allow us to apply these contract law principles to a license, we are faced with a bare license that is revocable.

--Lawrence Rosen

&amp;#x200B;

\&gt;p278 "Notice that in a copyright dispute over a bare license, the plaintiff will almost certainly be the copyright owner. If a licensee were foolish enough to sue to enforce the terms and conditions of the license, the licensor can simply revoke the bare license, thus ending the dispute. Remeber that a bare license in the absence of an interest is revocable."

--Lawrence Rosen

&amp;#x200B;

Lawrence Rosen - Open Source Licensing - Sofware Freedom and Intellectual property Law

&amp;#x200B;

&amp;#x200B;

&amp;#x200B;

\&gt;p65 "Of all the licenses descibed in this book, only the GPL makes the explicity point that it wants nothing of /acceptance/ of /consideration/:

\&gt;...

\&gt;The GPL authors intend that it not be treated as a contract. I will say much more about this license and these two provisions in Chapter 6. For now, I simply point out that the GPL licensors are in essentially the same situation as other open source licensors who cannot prove offer, acceptance, or consideration. There is no contract."

--Lawrence Rosen

&amp;#x200B;

----

\&gt;David McGowan, Professor of Law, University of Minnesota Law School:

&amp;#x200B;

\&gt;"Termination of rights

&amp;#x200B;

\&gt;[...] The most plausible assumption is that a developer who releases code under the GPL may terminate GPL rights, probably at will.

&amp;#x200B;

\&gt;[...] My point is not that termination is a great risk, it is that it is not recognized as a risk even though it is probably relevant to commercial end-users, accustomed to having contractual rights they can enforce themselves.

&amp;#x200B;

&amp;#x200B;

&amp;#x200B;

u/BobDenver · 1 pointr/linux

I've read Open Source Licensing: Software Freedom and Intellectual Property Law. It's pretty good. Available online here.

However, also published in 2004.

u/Pinguinsan · 1 pointr/ProgrammerHumor

Hey, no problem man. The source for this particular script is kind of mediocre, but it is here. Note that I included a file called "wow," to get the shell to respond when I typed "wow, real mature, shell".

I want to also mention that when I was learning shell scripting, I made a shell script with a ton of comments to help me understand stuff better. That is located here. And also, for fun, here is a shell script I wrote to make the mouse pointer touch every pixel on your screen. For further learning, I really can't reccommend Mark Sobell's "A Practical Guide to Linux Commands, Editors, and Shell Programming (3rd Edition)" highly enough. It really brought my practical Linux knowledge to a much higher level. I think you can Google that book and get the 2nd edition in pdf form somewhere.

u/JoCoLaRedux · 1 pointr/linux

I can't recommend this enough. It's about as comprehensive a guide to Linux as you could hope for, and accessible for beginners.

As far as distros go, I'd go with Mint. It's a great community-driven distro that's very user friendly.

u/Kaerius · 1 pointr/UTSA

Here is the book had had us use. Pay careful attention to the sed, awk, and perl sections. There's a ton you can do with perl, and Maynard is very specific on what he wants everyone to focus on. He'll give you a tiny packet on what you'll need to know. The low level C part is pretty crazy, but he'll give you enough rope to hang yourself.

You will be writing programs for the tests. It will range from writing a script, to writing a function, to writing an entire program. It's hard to describe Maynard, honestly. For instance, on one of my tests I switched my dup2() statements effectively switching input/output. He took off 10 points out of 25. On certain topics he'll want to make a point and be very heavy handed with the grading. The programs especially.

The good news is that all of the quizzes, programs, and tests really don't matter. The final does. I got an 82 on the first test, 42 on the second, and subpar on all the programs. Got an A in the class because I beasted the final. As long as you dedicate 50% of your time that semester to Systems, and the rest of the time for everything else, you'll do fine.

u/copnsteez · 1 pointr/sysadmin

Thanks for steering me away from that. I'll check out that list from /u/va_network_nerd. I've currently been going through a book by Mark Sobel here
Seems good so far, but I'm only a few chapters in.

u/Unwantedrage · 1 pointr/perl

The class is intro to Linux so we don't work with a specific language but here is the book.

u/planiverse · 1 pointr/sysadmin

I'm a Windows admin who wanted to learn more Linux. I asked a friend the same question as you recently. He recommended A Practical Guide to Commands, Editors and Shell Programming by Marc Sobell as well as Web Operations by John Allspaw and Continuous Delivery by Jez Humble. He recommended I start with Sobell's book before moving on to the others.

:/ I haven't had much time to actually read any of this, but I trust his advice.

u/speakingcode · 1 pointr/compsci

laptop huh what when i went to school for cs we used punchcards....

but in all seriousness, writing code is about the equivalent of writing text in a text editor. get something w/ decent battery life and comfortable screen size; any modern machine is likely more than enough to run and test all or most assignments from CS courses, save some specialized topics, in which case the univ. probably provides resources you'll need.

what matters more than the hardware is the environment you work in. do yourself a favor, wipe out windows and put a linux distro on it (or dual boot, you big sissy!!); start with ubuntu or fedora if you're new to linux, and deep dive in. force yourself into the command line. A Practical Guide to Linux from Mark Sobell is an EXCELLENT book for learning raw, distro agnostic Linux from the command line/shell perspective (http://www.amazon.com/books/dp/013308504X I have the 2nd edition, I'm sure the 3rd is great).

Learning how to truly use a computer and work w/ the operating system instead of around it is crucial, esp. if you want to go into engineering as you mentioned below. I won't rant any further but when you get into industry you'll be glad you have practical experience w/ *nix operating systems. As far as school goes, it will increase your productivity and workflow, as linux/unix is the environment developed by programmers for programmers to do productive programming first and foremost, and is generally better at everything else too.

-a CS graduate researcher/cloud-computing engineer/full stack developer

u/personal_opinions · 1 pointr/rails

+1 for devops. Anyone looking for a reference manual for Linux should check out Mark Sobell's books. Really useful and doesn't become obsolete after a year (or even 10 years!). Just got his 3rd edition Linux manual for Christmas and I'm ecstatic.

u/maredsous10 · 1 pointr/ECE

My General Thought

I find it is best to learn and get exposure from several book/media sources coupled with actual application of things learned.

----

Introductory Texts/Links

Short Intro
http://heather.cs.ucdavis.edu/~matloff/unix.html

C Programming: A Modern Approach
http://knking.com/books/c2/index.html

Head First C (Different Presentation Style, check amazon preview)
http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916/

Programming in C
http://www.amazon.com/Programming-C-4th-Developers-Library/dp/0321776410/

PDF Tutorial
http://phy.ntnu.edu.tw/~cchen/pdf/ctutor.pdf
Original Here &gt; http://www.tutorialspoint.com/cprogramming/index.htm

C The HardWay (Mostly complete)
http://c.learncodethehardway.org/book/

Zed's K&amp;R Critique
http://c.learncodethehardway.org/book/krcritique.html

Practical C Programming
http://shop.oreilly.com/product/9781565923065.do

Ben Klemens Modeling with Data book has a short C introductory section.
http://ben.klemens.org/pdfs/gsl_stats.pdf

-----

Reference
Harbison and Steele C Reference Manual
http://www.careferencemanual.com/

Plan on developing on Linux?
The Linux Programming Interface: A Linux and UNIX System Programming Handbook
http://www.amazon.com/dp/1593272200/

Didn't get Pointers?
http://www.amazon.com/dp/1449344186/

21st Century C, This book got dogged a lot, but I think its a nice text.
http://www.amazon.com/21st-Century-Tips-New-School/dp/1449327141

K&amp;R Scan (If you want an idea what's inside K&amp;R)
http://www.iups.org/media/meeting_minutes/C.pdf

-----

Need an Editor?
VIM Book
ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf

Vim Video Tutorials
http://derekwyatt.org/vim/

-----

Back in the Day
I used these books years ago. They're somewhat dated, but still useful and cheap.
Programming in ANSI C
http://www.amazon.com/Programming-ANSI-Hayden-Books-library/dp/0672484080
Advanced C: Tips and Techniques (Hayden Books C Library)
http://www.amazon.com/Advanced-Techniques-Hayden-Books-Library/dp/067248417X/

----

C Language Basics
How do I read/write files
How things are implemented at a lower level
Compiler Options and Functionality
What is a make file?
Debugging... How to do it... How do I use a standard debugger like GDB?



u/cozichooseto · 1 pointr/cs50

CS50 used to recommend this book to read and do exercises along side online content: Programming in C

One of the best textbooks I ever read.

u/ep1939 · 1 pointr/learnprogramming

Excellent book: https://www.amazon.com/Programming-C-4th-Developers-Library/dp/0321776410

If I had to restart from the beginning, knowing nothing about computers or programming, that would be mys starting point.

K&amp;R is just not a good programming book for beginners in 2018.

u/write_your_own_os · 1 pointr/programming

I know that Harvard University uses Programming in C, by Stephen Kochan.

u/iFappster · 1 pointr/learnprogramming

Start with finishing this whole book. Start to finish. It is so amazingly helpful: https://www.amazon.com/gp/aw/d/B00EANJ09U/ref=pd_aw_sbs_351_1?ie=UTF8&amp;amp;psc=1&amp;amp;refRID=ZHNDKD9899ZNDSAXDA4V. Even if you aren't an absolute beginner. Then, once you are done with that, read + complete the exercises for this book: https://www.amazon.com/gp/aw/d/0321776410/ref=pd_aw_fbt_14_img_2?ie=UTF8&amp;amp;amp;psc=1&amp;amp;amp;refRID=78FY6PWRFXNDM0DQ2DGW you will literally look back at this post, and laugh at how much more you know after reading these books. I promise.

For pointers, they literally just "point" at that address in memory. The: 1234 cherry st.. That address is actually considered a pointer. Just imagine your computer pointing a finger at that address in its physical memory. Like I could physically point to your house on a map, using the address you give me..

u/Eggbotnik · 1 pointr/learnprogramming

If you really want to learn from the ground up, that is to say low level to high level, I'd recommend starting with Assembly Language Step-By-Step. It will get you introduced to binary computation, binary math, and x86 assembly. From there, I'd say move on to The C Programming Language, AKA K&amp;R.

After that, if you've stuck with it and still enjoy it; the coding world is your oyster. Build something brilliant and reap the satisfaction of building your own programs.

Good luck!

u/PoetheProgrammer · 1 pointr/linux

If I were you, I'd go ahead and start with Assembly Language: Step by Step (Programming with Linux) it's not really what you are asking for but it will show you how to write assembly language (thus showing you how C really works), it will show you how the Linux API works at the lowest levels and interfacing with Linux/The Standard C Library.

Pick up K&amp;R while you're at it despite your claim it's not recent; it's a good reference. Once you can write some simple assembly programs, rewrite them in C. Then do something that mixes the two (like write your own functions in assembly and then use C for program flow.)

After that, write a bootloader and boot Linux (they aren't as hard as you think if you aren't trying to rewrite grub). Once you can boot Linux, write your own (very simply) hello world multiboot kernel. Use that bootloader to jump to it. Add a keyboard and screen driver to it (again not as hard as you think just to do basic stuff.) Then play around with your hardware (hard disks is a good starting point) and learn how to interface with them at a bare-bones level (since your interested in audio how about trying to send out simple sounds to your onboard sound using your own kernel.)

At that point your problem with C will be gone and you will be comfortable writing kernel code. Some people might talk down on this answer but with what you want to do it's worth toughing it out if you want to quickly get comfortable with C and kernels (you might have a few days of doubt though friend, suck it up!)

At this point find a project (ALSA/Pulseaudio) and start fixing bugs for them (there is usually a ridiculously easy list of bugs on larger projects that will help get you used to the codebase.) At the same time get the Linux source and write some basic modules, while also attempting to fix some of the kernels super easy bugs. After a year or so of doing that you should not only be good with the programming aspect (and you'll know how to learn codebases as well) you will also learn a lot about how the FOSS community works (and the do's and don'ts of commiting to projects.)

Best of luck!

edit here's a link to the book

https://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025

u/polarbearurine · 1 pointr/learnprogramming

we're using this book in my assembly/c class. according to my professor the writer was a sci-fi novelist so the book is a story and it involves aliens. http://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025

edit: important to note that the author treats assembly as the first computer language you've ever learned so if you start from the beginning it will cover the absolute basics

u/caisah · 1 pointr/learnprogramming

This is a vast topic and I don't think you will find something to cover all the subjects at once.

To understand how the processor works this video does a really good job in explaining most of the essential stuff.

I also suggest you try to get your hands dirty with some assembly language so you get the feel of it. I liked Assembly Language Step-by-Step book.

There is also The Hardware/Software Interface course. This will give you a great starting point in digging deeper into the subject.

u/LulzBaby · 1 pointr/OSUOnlineCS

You can try giving this book a shot. I took 271 on the Cascades campus and we used that book plus this book. The first is free and I thought was useful, a bit quirky but good info.

u/SeanRamey · 1 pointr/AskProgramming

Try reading http://www.plantation-productions.com/Webster/www.artofasm.com/index.html

Also, im assuming that you want to learn about the PC, as in, IBM PC &amp; Compatibles which is every modern home computer including Apple computers. You will probably want to read the IBM PC Technical Reference manuals to learn some details.

If you want to learn about a different system then you just need to look up books and reference manuals for that system.

If you want more generic information, then you might want to look for electronics book that teach how a computer works or how to design your own.

EDIT: Also, try this book out: https://www.amazon.com/gp/product/0470497025/ref=dbs_a_def_rwt_bibl_vppi_i0
It teaches x86 assembly as your first language and it covers what you probably need.
There are 3 editions. I've linked the newest, but the 2 edition before it cover 16 bit real mode DOS as well, which might be easier in some ways.

u/Sergio89BSD · 1 pointr/linux

I strongly recommend Understanding the Linux Kernel, 3rd Edition: http://www.amazon.com/Understanding-Linux-Kernel-Third-Edition/dp/0596005652

Although it's based on version 2.6 of Linux, I think its level of detail is unmatched.

u/TextileWasp · 1 pointr/IWantToLearn

How much time do you have?
How much do you know related to low-level hardware and how things work close to the “metal”?

You can get a decent understanding by googling/looking at blogs that try to approach this subject. There are also a couple of book that are free to read on github.

If you want to go really deep I recommend a book https://www.amazon.com/Understanding-Linux-Kernel-Third-Daniel/dp/0596005652
Although it’s pretty old and refers to 2.6 kernel it’s one of the best books I’ve ever seen if you’re interested in the Linux Kernel (booting included).
After you learn/come across some of the fundamental notions explained in this book it’s going to be easier to grasp and understand other more advanced material or even look at the kernel source code yourself.

u/hawkinsw2005 · 1 pointr/linuxquestions

Understanding the Linux Kernel is great and, obviously, very specific to Linux.

&amp;#x200B;

Linus has cited that he read Bach's book about the design and implementation of UNIX as inspiration for the development of Linux.

&amp;#x200B;

Read both and really enjoyed them! I hope you like!

u/arnulfslayer · 1 pointr/programming

The tutorials linked at the top-level README of the repo are great. If you want more detail, I'd recommend the books:

u/SSChicken · 1 pointr/sysadmin

har har on the boots...

And I'm not talking about how to use these things, I'm talking about how they work on a very low level. I know how to use grub. I now want to know how grub works (and rEFIt and bcd stuff) and what they are doing through every step. Think this, but for everything up until you load the kernel, or run ntoskrnl.exe, or whatever.

u/akkaone · 1 pointr/linux4noobs

It is four years old now but "Linux Kernel Development" http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468
despite the name, the book is also nice even for people not doing kernel development.

u/yur_mom · 1 pointr/programming

Yeah, the beauty of the low level libraries is they really do not change very much or often. I do not expect everyone to master them, but having an understanding will help in any area of userspace you work. Here are two great books that can be read with just an understanding of the c language.


http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=sr_1_10?ie=UTF8&amp;amp;qid=1404953887&amp;amp;sr=8-10&amp;amp;keywords=linux


http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468/ref=pd_sim_b_1?ie=UTF8&amp;amp;refRID=10S29ZMT4Q5VQM4KYZRY

u/droug132 · 1 pointr/linuxquestions

I enjoyed Linux kernel development by Robert Love.
He starts with a high level view, just to understand the concept, and then points you to the relevant code in the kernel.
But as with all books about the kernel, references become outdated but not too hard to find it in recent kernels.

u/postmodern · 1 pointr/netsec
u/myaut · 1 pointr/linux

"Linux Kernel Development" by Robert Love is also good
http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468

u/coned88 · 1 pointr/linux

While being a self taught sys admin is great, learning the internals of how things work can really extend your knowledge beyond what you may have considered possible. This starts to get more into the CS portion of things, but who cares. It's still great stuff to know, and if you know this you will really be set apart. Im not sure if it will help you directly as a sys admin, but may quench your thirst. Im both a programmer and unix admin, so I tend to like both. I own or have owned most of these and enjoy them greatly. You may also consider renting them or just downloading them. I can say that knowing how thing operate internally is great, it fills in a lot of holes.

OS Internals

While you obviously are successful at the running and maintaining of unix like systems. How much do you know about their internal functions? While reading source code is the best method, some great books will save you many hours of time and will be a bit more enjoyable. These books are Amazing
The Design and Implementation of the FreeBSD Operating System

Linux Kernel Development
Advanced Programming in the UNIX Environment

Networking

Learning the actual function of networking at the code level is really interesting. Theres a whole other world below implementation. You likely know a lot of this.
Computer Networks

TCP/IP Illustrated, Vol. 1: The Protocols

Unix Network Programming, Volume 1: The Sockets Networking API

Compilers/Low Level computer Function

Knowing how a computer actually works, from electricity, to EE principles , through assembly to compilers may also interest you.
Code: The Hidden Language of Computer Hardware and Software

Computer Systems: A Programmer's Perspective

Compilers: Principles, Techniques, and Tools

u/scopegoa · 1 pointr/sysadmin

I bought it from this link:

http://www.amazon.com/gp/aw/d/0672329468?pc_redir=1397146287&amp;amp;robot_redir=1

It's literally called Linux Kernel Development by Robert Love.

u/SirToxe · 1 pointr/learnprogramming

I am not sure which books are recommended nowadays but for me years ago it was: https://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/

But this one is mostly about Python2, though a new edition might be on its way.

u/Probono_Bonobo · 1 pointr/Python

Novice here. I bought the Python Essential Reference at the advice of this thread when I ran into some frustrations with O'Reilly (Learning Python, 4th Ed). They both have their issues. Essential reference is written for a higher-level audience, but I think it does a better job illustrating concepts by example. By contrast, the O'Reilly is more oriented toward beginners, but it's weirdly averse to including actual code snippets, so you get very little immersion in the syntax. Also the organization of the contents is extremely arbitrary, such that if you read it in a straight line you'll encounter an example of a nested dictionary prior to learning basic dictionary operations, and list comprehensions before lists. Steer clear.

u/davebrk · 1 pointr/Python

&gt; so the book that is a reference on 2.6 and 3 at the same time is a lot more useful!

Try Python Essential Reference (4th Edition).

u/Greydmiyu · 1 pointr/programming

&gt; It's never been compulsory unless you're bad at programming.

Or, back then, part of the policy of the shop at hand that use strict be used or be written up. So yeah, still compulsory.

&gt; The only particularly Perl-ish one is the statement if condition.

Yup, that's the one. That was the moment I decided to leave Perl since it was clear that the language was not designed with maintenance in mind.

First up is the unless statement, it's shorthand for if !. Except we don't have an elsunless like elsif. So subsequent statements in the chain which are also not statements still have the if ! notation. So to be consistent when we have to add on additional if ! it is best to rewrite the first into a if ! from unless.

The statement if condition usage has no else or elsif at all. So if later we need to have chaining conditions we need to rewrite that portion into the standard if condition format.

Why does this matter?

Because to make my code maintainable just to myself all those years ago I made the decision to not use the unless or condition if forms and limit myself to to the if condition format. This way when I came back to the code months later to add in some new requirement from on high I knew exactly what I was getting into.

The problem is, I wasn't the only Perl hacker in the shop. So every damn time I had to touch someone else's code or they touched mine it felt more like a rewrite than a simple modification.

That frustration came to a head when I went to the O'Reilly conference in Monterey back in... 2000? Instead of focusing on Perl presentations I hit up a Python presentation put on by Beazley himself. Python's focus on one clear way to achieve something was so refreshing compared to tossing out 75% of Perl's TIMTOWDI mish-mash.

&gt; If you're going to bitch about having lots of different ways to accomplish a task (despite the Perl mantra, TIMTOWDI..), pick "iterate a list" or the ridiculous number of ways for can be used.

This is true. I, however, choose if as an example because it is easy to explain, even to laypeople, as to why I ran screaming from the Perl world back then.

(Edits for late night typos).

u/ry4n831 · 1 pointr/Python

What initially caught my attention was the example used throughout the course (a stock portfolio). Using the example below, he walks through different scenarios while increasing the difficulty (goes from scripts, functions, classes including Inheritance, Encapsulation, iterators and Generators, Coroutines, etc), and explains everything along the way.

For example, he’s like what If this was a csv file and I wanted to read it? What if I wanted to create data quality checks? What if I wanted to create a class to handle reading this file? What if I wanted to create a class to output the portfolio in html? Csv file? So on, and so on.
Even though I didn't really understand anything past classes (until I watched the video like 10 times), I was reassured by who was presenting (Beazley seems to be kind of a rockstar in Python community) and ultimately decided that what he was talking about was worth knowing.

https://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786



example used in course:

name, date, shares, price

AA,2007-06-11,100,32.20

IBM,2007-05-13,50,91.10

CAT,2006-09-23,150,83.44

MSFT,2007-05-17,200,51.23

GE,2006-02-01,95,40.37

MSFT,2006-10-31,50,65.10

IBM,2006-07-09,100,70.44

u/bonekeeper · 1 pointr/Python

Also coming from PHP here, I got the "Python Essential Reference" from David Beazley and I must say that I like it very much. It's not a introductory book on programming - it assumed that you know programming very well and just need to learn the ins and outs of python. It's pretty direct-to-the-point and well written. I highly recommend it. http://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1261867689&amp;amp;sr=8-1

u/ryankask · 1 pointr/programming

I recommend you jump on to the Python bandwagon and start learning Django. The main site is http://www.djangoproject.com/. It has nice documentation http://docs.djangoproject.com/en/dev/ but the code is also very helpful to read. I would wager that if you could learn Python quickly by reading the Django code and learning some of the more advanced topics (https://code.djangoproject.com). There are two very helpful Groups on Google: Django-users (http://groups.google.com/group/django-users) and Django-developers (http://groups.google.com/group/django-developers -- think of this as read-only).

You've said you've dabbled in Python so I assume you know the resources there but two of my favorite books are Python in a Nutshell (http://oreilly.com/catalog/9780596001889) by Alex Martelli who is a genius and very involved with the online community. Despite the book's age, Mr. Martelli's experience with Python will quickly inform you of the nuances and pleasures of working with the language. Finally, I just picked up a copy (4th edition) of David Beazley's (http://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/ref=dp_cp_ob_b_title_1) Python Essential Reference. A lot of it overlaps the Martelli book but it is updated for the most recent Python versions 2.6/3.X. I would buy both books and jump in. Note that they are reference books but since you have programming experience, I find them to be excellent "jump in" tutorials and of course essential references when coding.

Finally, to get a feel for best practices, see Dive into Python by Mark Pilgrim -- another great Pythonista the Python community values as he is very smart and can communicate well to the readers (plus he likes open source and his universal feed parser is great! and the book is free) -- http://www.diveintopython.org .

Contact me by using http://www.ryankaskel.com/contact-me/ if you find yourself strapped of cash and I would be happy to help you become a Pythonista.

u/nwilliams36 · 1 pointr/learnprogramming

I found this book very useful moving from Java to Python David Beazley Python Essential Reference

u/dreamriver · 1 pointr/learnprogramming
u/RealityMan_ · 1 pointr/sysadmin

I just saw you said low on funds, but if you have a birthday or something coming up these two books have been great resources for me, and others that have taken a dive into it.

https://www.amazon.com/Linux-Bible-Christopher-Negus/dp/111821854X

https://www.amazon.com/Linux-Command-Shell-Scripting-Bible/dp/111898384X/ref=pd_sbs_14_img_1?_encoding=UTF8&amp;amp;psc=1&amp;amp;refRID=J9RW2JJ25KF0HEW2DDNK

One thing I'd say is DON'T BE DISCOURAGED. There's a lot to Linux, and it'll feel like you are drinking through a fire hose sometimes with concepts, everyone has been there, and I'm still very much there. In addition to reading a butt load, one thing that helped me take the edge of was getting a box up with something I'd use. My personal pet project back in the day was setting up a redhat instance and run a ventrilo server. It helped me learn things like security, package management, patching, getting real comfortable with things like awk and sed. I didn't expose it to the internet except for a few whitelisted IPs but it kept me learning for a long time, and made it fun.

u/brakkum · 1 pointr/bash

I really love this book, has tons of great info in it. Might be able to find it online somewhere.

https://www.amazon.com/Linux-Command-Shell-Scripting-Bible/dp/111898384X/ref=pd_lpo_sbs_14_t_0?_encoding=UTF8&amp;psc=1&amp;refRID=KDKCH1GWS30M5R9G2Z3A

Otherwise, come up with a simple task you want to accomplish, and try and break it down into small steps. Then do some reading on basic bash commands and try and piece it together from there!

u/OrangeOctoberLibra · 1 pointr/linux4noobs

Read Books: I recommend this, this and this.

u/SweatyAcademic · 1 pointr/linux

&gt;shell prompt

If you have money, this one is a good option

These two are good and available for free, I suggest you start with them.

&gt; administration

This one is the best.

u/0b_101010 · 1 pointr/learnprogramming

Check out this Crash Course series, it's quite informative: https://www.youtube.com/watch?v=O5nskjZ_GoI.

If you want to go deeper, check out some of the free Computer Architecture courses on the Internets.

Alternatively, if you want to be a Linux/Windows power user, there are some good books out there, like this.

u/robot_one · 1 pointr/asm

I used this one to learn x86_64 in a self study during undergrad. It was understandable and clear.

https://www.amazon.com/Introduction-Bit-Assembly-Programming-Linux/dp/1484921909/

u/StuartPBentley · 1 pointr/lua

I second Programming in Lua as a recommendation - it is the book to learn Lua, written by the main architect behind the language itself (Roberto Ierusalimschy). The first edition is available online, but I personally recommend at least the second edition (of which I personally have a signed copy) - the fourth edition, the latest, sounds like a good pick (the description says it's been completely re-organized, based on Roberto's experience from decades of teaching Lua).

As for an environment to learn it in, I recommend Cloud9, which gives you an entire Linux integrated development environment for free (you may also want to pick up the Linux Pocket Guide, which is a good reference for learning how to get around on the command line).

u/Ben_Aperture · 1 pointr/linux

I much appreciate your answer. I will take into account ir. I started using Linux about a year and a half ago, coming from windows. I just thinked that I could find a good alternative for Windows, and I moved to Ubuntu MATE. I was fascinated by its velocity, security and how it's packages worked. At the first time, I was dual-booting, but then I removed windows and started to just use Linux. I've been using Linux casually for a lot of time, and now I'm going serious. I want to learn bash scripting and python. I have got a fantastic Spanish Python book, (I'm learning a lot because of it), and now I'm looking for some bash and Linux books by O'Reilly and I've found this book https://www.amazon.es/gp/aw/d/0596009658/ref=mp_s_a_1_1?__mk_es_ES=%C3%85M%C3%85Z%C3%95%C3%91&amp;amp;qid=1520884449&amp;amp;sr=8-1&amp;amp;pi=AC_SX236_SY340_QL65&amp;amp;keywords=O%27Reilly+bash&amp;amp;dpPl=1&amp;amp;dpID=513EprgSOcL&amp;amp;ref=plSrch and this other one https://www.amazon.es/gp/aw/d/1491927577/ref=mp_s_a_1_3?__mk_es_ES=%C3%85M%C3%85Z%C3%95%C3%91&amp;amp;qid=1520884734&amp;amp;sr=8-3&amp;amp;pi=AC_SX236_SY340_QL65&amp;amp;keywords=O%27Reilly+Linux&amp;amp;dpPl=1&amp;amp;dpID=51AbKrNDvaL&amp;amp;ref=plSrch
Would you recommend me this books to learn?
I'm Spanish, so the prizes should be different

u/TauntingFrenchGuard · 1 pointr/learnprogramming

You should give O'Reilly's Practical C a try. Great introduction to C.

u/bitBus443 · 1 pointr/arduino

After taking a quick look at some of the comments/responses, I would suggest taking a look through some introductory C material. I would recommend Practical C by O’Reilly, or a Udemy course. Either could help with the understanding of function declarations, data types, and arrays.

u/wadcann · 1 pointr/linux

From Bash to Z Shell: Conquering the Command Line

Learning shell by looking at a few examples didn't work well for me. That book explained a lot of things that I hadn't understood.

Note that this may be overkill...

u/mantrout · 1 pointr/linux4noobs

Online tutorials can answer any questions you might ever have, but when learning something new I like the condensed nature of a well written book on a subject. For shells, I thought this book was excellent, and still reference it from time to time:
http://www.amazon.com/Bash-Shell-Conquering-Command-Line/dp/1590593766/ref=sr_1_1?ie=UTF8&amp;amp;qid=1290060461&amp;amp;sr=8-1

also.... ZSH FOR LIFE!

u/massysett · 1 pointr/linux

Interactive or scripted?

Interactive

u/jezzmo · 1 pointr/sysadmin

First :
How Linux Works: What Every Superuser Should Know
http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356

Second:
UNIX and Linux System Administration Handbook
http://www.amazon.com/dp/0131480057/ref=rdr_ext_tmb



u/moustachium · 1 pointr/sysadmin

thanks! I posted this question over at the spiceworks forum and got this:
http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356/
looks about right. For those coming from Unix:
http://www.amazon.com/Mac-OS-X-Unix-Geeks/dp/B0085SGHCO/

u/greengobblin911 · 1 pointr/linuxquestions

Many people may disagree with me, but as a Linux user on the younger side of the spectrum, I have to say there was one thing that really worked for me to finally switch for good- books.

There's tons of wikis and forums and of course Reddit to ask questions, but it is hard to get good answers. You may end up paying for books (unless you look on the internet for books) but it doesn't beat having a hard copy in front of you. It boils down to a time vs money trade off. The only wiki I would follow is one directly from the developers that act as documentation, not a community wiki. Also worth nothing certain wikis are more tied to linux and the kernel than others, meaning some are comparable/interchangable with the distro you may be using. Still, a novice would not easily put this together.

Forums are also useless unless you have the configuration mentioned in the post or that forum curates tutorials from a specific build they showcase and you as a user decided to build your system to their specifications. There's way too many variables trying to follow online guides, some of which may be out of date.

This i've realized is very true with things like Iommu grouping and PCI Passthrough for kernel based virtual machines. At that point you start modifying in your root directory, things like your kernel booting parameters and what drivers or hardware you're gonna bind or unbind from your system. While that does boil down to having the right hardware, you have to know what you're digging into your kernel for if you dont follow a guide with the same exact parts that are being passthrough or the cpus or chipsets are different.

Books are especially handy when you have a borked system, like you're in a bash prompt or an initramfs prompt or grub and need to get into a bootable part of the system. Linux takes practice. Sometimes its easier to page through a book than to search through forums.

Another thing about being an intermediate or expert Linux user is that you don't care much about distros or what other users or communities do. It wont matter as under the hood it's all the same, spare the desktop and the package managers. Once you're out of that mentality you just care about getting whatever you want done. I'm not one of those guys that's super gung-ho FOSS and open source. I just use what gets the job done. Also from a security perspective, yes Linux is in theory MORE secure but anything can be hardened or left vulnerable. It's more configuration tied than many uses and forums or threads lead it on to be.

My workload involves talking to servers and quite a bit of programming and scripting, in a variety of capacities. That's what led me to linux over the competitors, but I'm not so prudent to never ever want to use the competitor again or have a computer with it. With understanding Linux more, I use it more as a tool than to be part of the philosophy or community, though that enthusiasm pushes for new developments in the kernel.

I'm assuming you're a novice but comfortable enough in linux to get through certain things:

In any computer related thing, always TEST a deployment or feature first- From your linux system, use KVM or Virtualbox/vmware to spin up a few linux VMs, could even be a copy of your current image. This way any tweaks or things you want to test or try out is in an environment you can start over in.

The quickest way to "intermediate-expert" Linux IMO is learning system administration.

My go to book for this is "The Unix and Linux System Administration Handbook 5th edition"

https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/ref=sr_1_1?keywords=The+Unix+and+Linux+System+Administration+Handbook+5th+edition&amp;qid=1564448656&amp;s=books&amp;sr=1-1

This edition is updated recently to cover newer kernel features such as could environments and virtualization. This book also helps when learning BSD based stuff such as MacOS or FreeBSD.

Another good read for a "quick and dirty" understanding of Linux is "Linux Basics for Hackers" It does focus on a very niche distro and talks about tools that are not on all Linux systems BUT it does a good concise overview of intermediate things related to Linux (despite being called a beginners book).

https://www.amazon.com/Linux-Basics-Hackers-Networking-Scripting/dp/1593278551/ref=sr_1_3?crid=396AV036T1Y0Q&amp;keywords=linux+basics+for+hackers&amp;qid=1564448845&amp;s=books&amp;sprefix=linux+bas%2Cstripbooks%2C119&amp;sr=1-3

There's also "How Linux works" but I cannot vouch for this book from personal use, I see it posted across various threads often. Never read this particular one myself.

https://www.amazon.com/How-Linux-Works-2nd-Superuser/dp/1593275676/ref=pd_bxgy_14_img_2/137-6604082-4373447?_encoding=UTF8&amp;pd_rd_i=1593275676&amp;pd_rd_r=feffef24-d3c3-400d-a807-24d8fa39cd1e&amp;pd_rd_w=8GX0o&amp;pd_rd_wg=3AMRB&amp;pf_rd_p=a2006322-0bc0-4db9-a08e-d168c18ce6f0&amp;pf_rd_r=WBQKPADCVSABMCMSRRA1&amp;psc=1&amp;refRID=WBQKPADCVSABMCMSRRA1

&amp;#x200B;

If you want a more programming oriented approach, if you're confortable with the C language, then you can always look at these books:

The Linux Programming Interface

https://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200/ref=zg_bs_3866_1?_encoding=UTF8&amp;psc=1&amp;refRID=5YN3316W22YQ4TSMM967

Unix Network Programming VOL 1.

https://www.amazon.com/Unix-Network-Programming-Sockets-Networking/dp/0131411551/ref=sr_1_1?keywords=Unix+Network+Programming+VOL+1.&amp;qid=1564448362&amp;s=books&amp;sr=1-1

Advanced Programming in the Unix Environment

https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739/ref=zg_bs_3866_2?_encoding=UTF8&amp;psc=1&amp;refRID=5YN3316W22YQ4TSMM967

These books would take you to understanding the kernel level processes and make your own and modify your own system.

As many have mentioned, you can go into these things with "Linux from scratch" but it's also feasible to do Linux from scratch by copy/pasting commands. Unless you tinker and fail at certain things (hence do it on a vm before doing it to the main system) you won't learn properly. I think the sysadmin approach is "safer" of the two options but to each their own.

u/solomonchild · 1 pointr/osdev

So there's this book called The Linux Programming Interface by Michael Kerrisk. Some consider it being the book.

u/plasmachannel · 1 pointr/cscareerquestions

I'm a fan of this book: http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200

It has way too much detail but it is organized well.

u/lucidguppy · 1 pointr/C_Programming

Thinking back on it now I think K&amp;R C needs to be coupled with [the linux programming interface] (http://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200/ref=sr_1_1?ie=UTF8&amp;amp;qid=1411641367&amp;amp;sr=8-1&amp;amp;keywords=linux+programming+interface). It really helps flesh out the parts where K&amp;R leaves you hanging. It also shows you the internals of c programs and much more.

u/sarcasmasaservice · 1 pointr/linuxquestions

Have you taken a look at The Linux Programming Interface?

u/miyakohouou · 1 pointr/learnprogramming

As others have said, K&amp;R is great for learning the C language. In addition to that, Algorithms in a Nutshell is a nice reference because it has sample code in C for a lot of major data structures and algorithms, so you can see how the language is used to implement CS concepts you might already be familiar with.

I would also highly recommend one or both of Advanced Programming in the Unix Environment or The Linux Programming Interface, which will get you up to speed on POSIX.

u/lazyant · 1 pointr/devops

For Linux internals read https://www.amazon.ca/Linux-Programming-Interface-System-Handbook/dp/1593272200 , you only need the intro to each chapter (before he gets to code).

For general Linux read https://www.amazon.ca/UNIX-Linux-System-Administration-Handbook/dp/0134277554/

You need to know some concepts very well, like life of a process and signals (may not pass initial screen interview without those), as well as basic networking (both google and facebook have a networking interview although it’s valued less than the others).

Btw there’s also an interview about designing a distributed systems, best source to learn is to read about tools at google, facebook and AWS.

For troubleshooting, there’s no book, it’s all practice with real problems. If I had the time or rather the priority, I’ll publish a bunch of broken things in docker containers as exercises but it’s a lot of work.

I do have a troubleshooting framework , with things like verify given information, trying to break the problem space in two , do first easy quick tests etc

u/PM_me_goat_gifs · 1 pointr/ExperiencedDevs

I have heard good things about The Linux Programming Interface but cannot verify it is as specific as you are looking for.

I think some of Julia Evans stuff is good for this.

u/railrulez · 1 pointr/AskComputerScience

Buy (/borrow/steal) The Linux Programming Interface by Michael Kerrisk. It's Stevens' APUE for the 21st century, and is well worth the price. Everything you can possibly do programmatically on Linux will be explained in detail there, including process management, threads, filesystems API, memory management, IPC, the Linux ABI, and so on.

u/jdoss · 1 pointr/linuxquestions

I know this is not specifically for kernel development, but The Linux Programing Interface Handbook is a great book for better understanding how to program for Linux systems.

u/Milumet · 1 pointr/linux

Try gvim (vim-gtk, vim-gnome). I use it on Windows and Linux. You can remap the CTRL commands to the Windows equivalent, see Superuser question here: "How to make cut/copy/paste in GVim on Ubuntu work with Ctrl+X,Ctrl+C,Ctrl+V?"

Vim is made for touch-typists; you are definitely at a disadvantage when you can't touch type. That's true for every kind of editor but with vim the speed difference between a touch typists and a non-touch typists is even bigger.

Book recommendation: Practical Vim: Edit Text at the Speed of Thought

u/gtranbot · 1 pointr/vim

I found both Learning the vi Editor and Practical Vim to be excellent learning resources. In addition, of course, to browsing the docs and using, using, using the editor.

u/Sluisifer · 1 pointr/programming

The built in tutorial will get you started.

Practical Vim http://www.amazon.com/Practical-Vim-Thought-Pragmatic-Programmers/dp/1934356980/ref=sr_1_1?ie=UTF8&amp;amp;qid=1414952123&amp;amp;sr=8-1&amp;amp;keywords=practical+vim is what really got me to understand how it works, and was far more effective than looking at various online tutorials. It goes much more into how one can actually use the various tools effectively. Vim is very personal, with many ways to skin a cat. This goes through examples of several ways to deal with the same problem, and really lets you understand how the tools fit together.

u/Tony_T_123 · 0 pointsr/cscareerquestions

Man, I wish I could find a programming job where I can use Linux. Every place I've applied has been Windows or Mac.

Also, for a learning suggestion: check out the book "How Linux Works" it's by far the best book I've read on Linux. It takes you from total beginner to intermediate level. Just make sure you get the 2nd edition, it added a lot more stuff.

https://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356

u/ossobsv · 0 pointsr/opensource

"If you dare speak about a subject we dislike, we will have you disbarred"
Very convincing counter-argument.
Yes, your side constantly threatens me with disbarment.
My legal theory is sound, however, and I am not looking for clients.
I just want the programmers to know their rights so they do not get "CoC"'d

Here are 3 attorneys who do give their names and in their writing come to similar conclusions: The GPL is revocable from the free-taker.
&gt;&gt;https://scholarship.law.duke.edu/faculty_scholarship/1857/
&gt;&gt;https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876
&gt;&gt;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=243237

u/LtGerome · 0 pointsr/linux_gaming

Not meritless. If they wish to be sued they can ignore it.
The GPL is revocable in cases where there is no attached interest (such as here).
This goes for much of the linux-kernel code aswell.

&gt;Presumably they checked with their lawyers, who decided it was meritless guff from some crappy little troll, and chose to ignore it. That would be my instinct too.

Go and FUCK yourself. Your instinct is wrong. You don't know what the FUCK you are talking about when it comes to law. I do (I am a licensed attorney. )

Where does your "instinct" come from? Have you done even an hour of legal study? No? Then how about you SHUT your FUCKING mouth? Your uneducated lay opinion is WORTHLESS.



( https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876 )
&gt;p46 "As long as the project continues to honor the terms of the licenses under which it recieved contributions, the licenses continue in effect. There is one important caveat: Even a perpetual license can be revoked. See the discussion of bare licenses and contracts in Chapter 4"
--Lawrence Rosen

&gt;p56 "A third problem with bare licenses is that they may be revocable by the licensor. Specifically, /a license not coupled with an interest may be revoked./ The term /interest/ in this context usually means the payment of some royalty or license fee, but there are other more complicated ways to satisfy the interest requirement. For example, a licensee can demonstrate that he or she has paid some consideration-a contract law term not found in copyright or patent law-in order to avoid revocation. Or a licensee may claim that he or she relied on the software licensed under an open source license and now is dependent upon that software, but this contract law concept, called promissory estoppel, is both difficult to prove and unreliable in court tests. (The concepts of /consideration/ and /promissory estoppel/ are explained more fully in the next section.) Unless the courts allow us to apply these contract law principles to a license, we are faced with a bare license that is revocable.
--Lawrence Rosen

&gt;p278 "Notice that in a copyright dispute over a bare license, the plaintiff will almost certainly be the copyright owner. If a licensee were foolish enough to sue to enforce the terms and conditions of the license, the licensor can simply revoke the bare license, thus ending the dispute. Remeber that a bare license in the absence of an interest is revocable."
--Lawrence Rosen

Lawrence Rosen - Open Source Licensing - Sofware Freedom and Intellectual property Law



&gt;p65 "Of all the licenses descibed in this book, only the GPL makes the explicity point that it wants nothing of /acceptance/ of /consideration/:
&gt;...
&gt;The GPL authors intend that it not be treated as a contract. I will say much more about this license and these two provisions in Chapter 6. For now, I simply point out that the GPL licensors are in essentially the same situation as other open source licensors who cannot prove offer, acceptance, or consideration. There is no contract."
--Lawrence Rosen

----
&gt;David McGowan, Professor of Law, University of Minnesota Law School:

&gt;"Termination of rights

&gt;[...] The most plausible assumption is that a developer who releases code under the GPL may terminate GPL rights, probably at will.

&gt;[...] My point is not that termination is a great risk, it is that it is not recognized as a risk even though it is probably relevant to commercial end-users, accustomed to having contractual rights they can enforce themselves.

u/mikeeusa00 · -1 pointsr/redhat

Yes one can, in the USA.

Gratuitous licenses are revocable. Always have been, and currently are as-well.
If you want to secure terms you must pay for them.


David McGowan Esq. made a correct statement of the law:

&gt;David McGowan, Professor of Law, University of Minnesota Law School:

&gt;"Termination of rights

&gt;[...] The most plausible assumption is that a developer who releases code under the GPL may terminate GPL rights, probably at will.

&gt;[...] My point is not that termination is a great risk, it is that it is not recognized as a risk even though it is probably relevant to commercial end-users, accustomed to having contractual rights they can enforce themselves.


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

Lawrence Rosen Esq. got it right the first time:
( https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876 )

&gt;p46 "As long as the project continues to honor the terms of the licenses under which it recieved contributions, the licenses continue in effect. There is one important caveat: Even a perpetual license can be revoked. See the discussion of bare licenses and contracts in Chapter 4"
--Lawrence Rosen

&gt;p56 "A third problem with bare licenses is that they may be revocable by the licensor. Specifically, /a license not coupled with an interest may be revoked./ The term /interest/ in this context usually means the payment of some royalty or license fee, but there are other more complicated ways to satisfy the interest requirement. For example, a licensee can demonstrate that he or she has paid some consideration-a contract law term not found in copyright or patent law-in order to avoid revocation. Or a licensee may claim that he or she relied on the software licensed under an open source license and now is dependent upon that software, but this contract law concept, called promissory estoppel, is both difficult to prove and unreliable in court tests. (The concepts of /consideration/ and /promissory estoppel/ are explained more fully in the next section.) Unless the courts allow us to apply these contract law principles to a license, we are faced with a bare license that is revocable.
--Lawrence Rosen

&gt;p278 "Notice that in a copyright dispute over a bare license, the plaintiff will almost certainly be the copyright owner. If a licensee were foolish enough to sue to enforce the terms and conditions of the license, the licensor can simply revoke the bare license, thus ending the dispute. Remeber that a bare license in the absence of an interest is revocable."
--Lawrence Rosen

Lawrence Rosen - Open Source Licensing - Sofware Freedom and Intellectual property Law



&gt;p65 "Of all the licenses descibed in this book, only the GPL makes the explicity point that it wants nothing of /acceptance/ of /consideration/:
&gt;...
&gt;The GPL authors intend that it not be treated as a contract. I will say much more about this license and these two provisions in Chapter 6. For now, I simply point out that the GPL licensors are in essentially the same situation as other open source licensors who cannot prove offer, acceptance, or consideration. There is no contract."
--Lawrence Rosen

----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Some notes:
A license without an attached interest is revocable in the US (other countries have different laws, which is why many OSS repos kept out of the US in the past, it is also why the FSF is both a 501(c)(3) charity and also requires copyright assignment to them for any contribution they accept (otherwise an author who was still the copyright owner of the code could rescind the license to the code)).

Opensource friends like to bring up the recent district court decision in california to try to argue the the GPL is a contract. (It's also interesting that they started adding CoC's right after said decision, to push out the men who created OpenSource) They are wrong. Acquiescing to a preexisting duty is insufficient for consideration. They like to quote this part:

&gt;"Not so. The GNU GPL, which is attached to the complaint,provides that the
Ghostscript user agrees to its terms if the user does not obtain a commercial
license" (Artifex v. Hancom, Case No.16-cv-06982-JSC, page 4 line 17)


This is false on its face.

The GNU GPL contains no such language.

The /business agreement writing/ that Artifex wrote up and posted on its webpage includes such language. The court here is conflating "The GNU GPL" with the writing Artifex published on it's webpage. It is an error on the courts case. A typo by whomever who drafted the decision perhaps (conflating Artifex's contract language with the GPL itself).

The court goes on to allow Artifex to recover on either breach-of-contract grounds (for the amount a commercial license is worth) OR to go forward with a statutory copyright infringement action. If the GPL alone was a contract, there would simply be two different state-law breach of contract theories to pursue (breach of the "business offer" writing or breach of the GPL "contract", and the court would dispose of the case that way).

u/mikeeusa0 · -1 pointsr/opensource

Some decisions I have made regarding my GPC-Slots 2 game:


I had chosen, as was my want, to rescind the license I extended from a
few choice individuals. I can do this because GPC-Slots 2 is my
copyrighted work. I built it. I never transferred the copyright over to
anyone.


The individuals are:
"JohnDoe" from 8chan (he knows who he is)
comphacker from here, reddit (if he violates, I'll know who he is after
the subpoenas during discovery)
Leigh Honeywell
Alex "Skud" Bayley
the "Geek feminist" collective (I believe they are identifiable, and a
small group, so no harm using this closed-class identification)


I will continue to rescind the license from anyone who adds a "Code of
Conduct" anywhere near my code (to "fight sexism".). I wholeheartedly
/support/ sexism, as-long as it is not against men. Since men are now
being assaulted as thanks for their ceaseless decades-long work on
opensource by people who did not put in the time, men should /support
sexism/ by revoking license to their gratis licensed copyrighted code
from any project that adds a "Code of Conduct".


--MikeeUSA--
(electronic signature)


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
----- ----- ----- ----- ----- -----
Some notes:
A license without an attached interest is revocable in the US (other
countries have different laws, which is why many OSS repos kept out of
the US in the past, it is also why the FSF is both a 501(c)(3) charity
and also requires copyright assignment to them for any contribution they
accept (otherwise an author who was still the copyright owner of the
code could rescind the license to the code)).


Opensource friends like to bring up the recent district court decision
in california to try to argue the the GPL is a contract. (It's also
interesting that they started adding CoC's right after said decision, to
push out the men who created OpenSource) They are wrong. Acquiescing to
a preexisting duty is insufficient for consideration. They like to quote
this part:


\&gt; "Not so. The GNU GPL, which is attached to the complaint,provides that
\&gt; the
Ghostscript user agrees to its terms if the user does not obtain a
commercial
license" (Artifex v. Hancom, Case No.16-cv-06982-JSC, page 4 line 17)


This is false on its face.


The GNU GPL contains no such language.


The /business agreement writing/ that Artifex wrote up and posted on its
webpage includes such language. The court here is conflating "The GNU
GPL" with the writing Artifex published on it's webpage. It is an error
on the courts case. A typo by whomever who drafted the decision perhaps
(conflating Artifex's contract language with the GPL itself).


The court goes on to allow Artifex to recover on either
breach-of-contract grounds (for the amount a commercial license is
worth) OR to go forward with a statutory copyright infringement action.
If the GPL alone was a contract, there would simply be two different
state-law breach of contract theories to pursue (breach of the "business
offer" writing or breach of the GPL "contract", and the court would
dispose of the case that way).


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
----- ----- ----- ----- ----- -----


David McGowan Esq. made a correct statement of the law:


\&gt; David McGowan, Professor of Law, University of Minnesota Law School:


\&gt; "Termination of rights


\&gt; [...] The most plausible assumption is that a developer who releases
\&gt; code under the GPL may terminate GPL rights, probably at will.


\&gt; [...] My point is not that termination is a great risk, it is that it
\&gt; is not recognized as a risk even though it is probably relevant to
\&gt; commercial end-users, accustomed to having contractual rights they can
\&gt; enforce themselves.


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
----- ----- ----- ----- ----- -----


Lawrence Rosen Esq. got it right the first time:
(
https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876
)


\&gt; p46 "As long as the project continues to honor the terms of the
\&gt; licenses under which it recieved contributions, the licenses continue
\&gt; in effect. There is one important caveat: Even a perpetual license can
\&gt; be revoked. See the discussion of bare licenses and contracts in
\&gt; Chapter 4"
--Lawrence Rosen


\&gt; p56 "A third problem with bare licenses is that they may be revocable
\&gt; by the licensor. Specifically, /a license not coupled with an interest
\&gt; may be revoked./ The term /interest/ in this context usually means the
\&gt; payment of some royalty or license fee, but there are other more
\&gt; complicated ways to satisfy the interest requirement. For example, a
\&gt; licensee can demonstrate that he or she has paid some consideration-a
\&gt; contract law term not found in copyright or patent law-in order to
\&gt; avoid revocation. Or a licensee may claim that he or she relied on the
\&gt; software licensed under an open source license and now is dependent
\&gt; upon that software, but this contract law concept, called promissory
\&gt; estoppel, is both difficult to prove and unreliable in court tests.
\&gt; (The concepts of /consideration/ and /promissory estoppel/ are
\&gt; explained more fully in the next section.) Unless the courts allow us
\&gt; to apply these contract law principles to a license, we are faced with
\&gt; a bare license that is revocable.
--Lawrence Rosen


\&gt; p278 "Notice that in a copyright dispute over a bare license, the
\&gt; plaintiff will almost certainly be the copyright owner. If a licensee
\&gt; were foolish enough to sue to enforce the terms and conditions of the
\&gt; license, the licensor can simply revoke the bare license, thus ending
\&gt; the dispute. Remeber that a bare license in the absence of an interest
\&gt; is revocable."
--Lawrence Rosen


Lawrence Rosen - Open Source Licensing - Sofware Freedom and
Intellectual property Law

u/selandro2 · -7 pointsr/unix

Is that why his paper refuting the idea that the GPL is revocable has not materialized in 6 months?

&amp;#x200B;

Is Moglen more learned about the law than Lawrence Rosen, Sapna Kumar, and David McGowan?

&amp;#x200B;

https://scholarship.law.duke.edu/faculty_scholarship/1857/

https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=243237

&amp;#x200B;

It's always argument from ignorance with you people.

&amp;#x200B;

Tell me where is the promised paper from Moglen refuting the above? Tell me. Why did it never materialize?

&amp;#x200B;

TELL ME YOU FUCKING PIECE OF SHIT.

&amp;#x200B;

I need you to inform me, how obeying a pre-existing legal duty is valid consideration. Tell me. Explain it. I need you to inform me how NOTHING:ZERO:FREE is valid consideration. Can you. I need you to enlighten me as to how Illusory Promises are now enforceable suddenly in the USA.