When a system has a Linearity property, it means that it passes some characteristics of the input to the output of system. Think of the system as following illustration:
-----------
a ----->| System | ----> c
b------>| |
-----------
For example, if we suppose of this system as a cryptosystem and this cryptosystem has a linearity property, when you input many odd data in the system, odd characteristic can transfer to the output of system.
In order to improve Linear complexity for binary output sequences using LFSR, we
mostly use components Like Sbox after them, However we should always be aware of right selection of them. It is true that they force none-linearity,but the SBoxes themselves may be suspected to linearity. SBoxes by substituting data, prevents of spreading characteristics,it means that they change the data in transforming from input to output,therefore the same characteristic is not conveyed.
The other way to improve Linearity, is combining output sequence with nonlinear Keystream generators like NFSRs. In this situation we can not precisely define what happens to each bit of LFSR, but we hope that this combination causes high non-linearity to the output sequence of LFSR.
One more method that can be used, combining output sequence of LFSR with 2 or more other LFSRs. In this situation, the function that combines these LFSRs, should have good properties especially in non-linearity. This combination function works as a selector between LFSR's output sequences and causes confusion.
At last, one more method which we can point out, is to use LFSR within a block cipher or combine the output sequence with one of the modes of bock ciphers. in this situation, the non-linearity is related to the complexity of block cipher and the strength of it.