<p>How does the <strong>open-source/free software community</strong> develop drivers for products that offer no documentation?</p>

[{'answer_id': 59202, 'author': 'Christian Lescuyer', 'author_id': 341, 'author_profile': 'https://Stackoverflow.com/users/341', 'pm_score': 2, 'selected': False, 'text': '<p>Usually by reverse engineering the code. There might be legal issues in some countries, though.</p>\n\n<ul>\n<li><a href="http://www.reactivated.net/weblog/archives/2005/08/reverse-engineering/" rel="nofollow noreferrer">Reverse Engineering</a></li>\n<li><a href="http://www.reactivated.net/weblog-content/20050806-reverse-0.2.txt" rel="nofollow noreferrer">Reverse engineering Windows USB device drivers for the purpose of\ncreating compatible device drivers for Linux</a></li>\n<li><a href="http://www.theinquirer.net/en/inquirer/news/2003/07/15/nvidia-cracks-down-on-third-party-driver-development" rel="nofollow noreferrer">Nvidia cracks down on third party driver development</a></li>\n</ul>\n'}, {'answer_id': 59203, 'author': 'GEOCHET', 'author_id': 5640, 'author_profile': 'https://Stackoverflow.com/users/5640', 'pm_score': 0, 'selected': False, 'text': '<p>This is a pretty vague question, but I would say <a href="http://en.wikipedia.org/wiki/Reverse_engineering" rel="nofollow noreferrer">reverse engineering</a>. How they go about that is dependent on what kind of device it is and what is available for it. In many cases the device may have a similar core chipset to another device that can be modified to work.</p>\n'}, {'answer_id': 59252, 'author': 'Adam Davis', 'author_id': 2915, 'author_profile': 'https://Stackoverflow.com/users/2915', 'pm_score': 4, 'selected': True, 'text': '<p>How do you reverse engineer something?</p>\n\n<ul>\n<li>You observe the input and output, and develop a set of rules or models that describe the operation of the object.</li>\n</ul>\n\n<p>Example:</p>\n\n<p>Let\'s say you want to develop a USB camera driver.  The "black box" is the software driver.</p>\n\n<ol>\n<li>Develop hooks into the OS and/or driver so you can see the inputs and outputs of the driver</li>\n<li>Generate typical inputs, and record the outputs</li>\n<li>Analyze the outputs and synthesize a model that describes the relationship between the input and output</li>\n<li>Test the model - put it in place of the black box driver, and run your tests</li>\n<li>If it does everything you need, you\'re done, if not rinse and repeat</li>\n</ol>\n\n<p>Note that this is just a regular problem solving/scientific process.  For instance, weather forecasters do the same thing - they observe the weather, test the current conditions against the model, which predicts what will happen over the next few days, and then compare the model\'s output to reality.  When it doesn\'t match they go back and adjust the model.</p>\n\n<p>This method is slightly safer (legally) than clean room reverse engineering, where someone actually decompiles the code, or disassembles the product, analyzes it thoroughly, and makes a model based on what they saw.  Then the model (<em>AND NOTHING ELSE</em>) is passed to the developers replicating the functionality of the product.  The engineer who took the original apart, however, cannot participate because he might bring copyrighted portions of the code/design and inadvertently put them in the new code.</p>\n\n<p>If you never disassemble or decompile the product, though, you should be in legally safe waters - the only problem left is that of patents.</p>\n\n<p>-Adam</p>\n'}]
['https://Stackoverflow.com/questions/59194', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/4778/']