Hacker, as it relates to computers, has several common meanings. Hacker is often used by the mass media to refer to a person who engages in computer cracking and is also often by those in computing fields to refer to a person who is a computer enthusiast. At least three major hacker subcultures, characterized by their largely distinct historical development, use the term in their jargon for self-identification. They are centered around different, but partially overlapping aspects of computers and have conflicting ideas about who may legitimately be called a hacker (see hacker definition controversy). In computer security, a hacker is someone who focuses on security mechanisms. In common use, which was popularized by the mass media, that refers to someone who illegally breaks into computer and network systems. That is, the media portrays the 'hacker' as a villain. Nevertheless, parts of the subculture see their aim in correcting security problems and use the word in a positive sense. They operate under a code of the Hacker Ethic, in which it's acknowledged that breaking into other people's computers is bad, but that discovering and exploiting security mechanisms and breaking into computers is nevertheless an interesting aspect that can be done in an ethical and legal way. This use is contrasted by the different understanding of the word as a person who follows a spirit of playful cleverness and loves programming. It is found in an originally academic movement unrelated to computer security and most visibly associated with free software and open source. It also has a hacker ethic, based on the idea that writing software and sharing the result is a good idea, but only on a voluntary basis, and that information should be free, but that it's not up to the hacker to make it free by breaking into private computer systems. Academic hackers disassociate from the mass media's pejorative use of the word 'hacker' referring to computer security, and usually prefer the term 'cracker' for that meaning. In a third meaning, the term refers to computer hobbyists who push the limits of their software or hardware.