I would like to thank everyone in the Audio/Video industry such as manufacturing companies, A/V dealers, and independent programming companies that have provided me feedback regarding their experiences with source code. All of your opinions will be kept confidential.
There have been many articles regarding source code and we all thought this story was now over but it’s brought back to life thanks to some creative independent programming companies and individuals. You pay a software company, an individual or an employee of yours to write custom code and your company backs up all of those custom files. Those files, that you have saved on your server and that are so critical to your company in supporting your customers, could be useless. It might not make a difference whether you believe you should have ownership or licenses to the source code. Because source code does not equal source code.
I have been programming in the Audio/Video industry for over 10 years. I got into the A/V industry right after college. I have programmed many jobs from small rooms to large corporate buildings and I have been to hundreds of training classes.
I hope the information in this article will be beneficial to everyone. There are many great programmers in this industry and I would be honored to be included in the list of them. I don’t believe I am the best A/V programmer in the Audio/Video industry. I have made lots of programming mistakes. But any of those great A/V programmers can fix my programming mistakes. Because the client always gets a copy of every single line of custom code that I write. In fact, there is no exception to this personal view and even if I do not get paid in full, I will still give a copy of the source code.
A Manufacturing company
A few months ago I was hired for part of a job (not the complete project) to develop some code. Like so many other programmers, one of the first things I did was to see if there were any modules for this project. So I called the manufacturing company tech support and they said, “Yes we have modules”. The manufacturing company tech support told me they have several modules and the source code for those modules in order for one to make any modifications that the client might need. They sent me one and I downloaded a couple other modules from their website, as well. Then I downloaded the manual for the device and reviewed the command strings. After reading over my scope of work with my client and reviewing the modules, I determined that the existing modules would not fit the framework of the scope of work. Again, I called tech support and I told them what I needed to accomplish and they agreed that some modifications to their modules were necessary. This is the case most of the time because there’s no one single module that does everything. I started adding code to their module but then I noticed that the command strings that were sent out by the module did not match up to the structure listed in the manual.
This manufacturing company support was amazing and even great support on the weekends
Once again 1 – 800 – TECH-SUPPORT…
I called tech support again and told them the source code did not match the documentation. The command strings for the modules were being sent into an internal module, so I asked if they could please send me the source code for that module. Tech support determined that they did not have any of the source code that a third-party (well-known and successful) programming house had done for them. The manufacturing company had only the wrapper source code. The wrapper source code for this job was for a generic device that was totally different. The next phone call was to my client explaining that additional time and the programming price were going to go up because the quoted price was based on the manufacturing company providing working modules for that job. The manufacturing company tried extremely hard to get the actual source code from the programming company but was not able do so because that company does not provide it for their custom modules. The code that I programmed was better than the manufacturer’s generic one because it supported buffering and redundant functions. But it cost the client extra time and money in the long run because that source code was not provided.
The term wrapper gets thrown around a lot. Generally, it’s used to describe a class which contains an instance of another class but which does not directly expose that instance. The wrapper’s main purpose is to provide a ‘different’ way to use the wrapped object (perhaps the wrapper provides a simpler interface or adds some functionality).
Make sure you get the source code for what is inside of the wrapper.
Wrapper code can be used to hide the real source code and allow for module reusability.
I have used wrapper code to streamline module interfaces and drivers. For example a switcher using wrapper code can be the same for 10 different manufacturers and/or models. With just a few lines of code a module can be switched out to a different switcher. The wrapper code will stay the same no matter which switcher is being used. This will save time and money.
In the above example, the wrapper code is the same written for the touch panel driver file.This type of file structure is not the best for support because in the wrapper code none of the actual commands control the device. But in the custom code I wrote, you can actually see the command strings to the device. Wrapper code for modules and library files are all a great resource but not having the source code for everything is only a potential problem. The third-party programming company even wrapped the output strings coming back from the device into the wrapper code. So commands going to the device and coming back from the device were completely invisible. And it’s that potential problem that some programming companies employ in order to have you come back to them over and over again, thereby charging you for the same code. I have spoken to many Audio/Video company owners and one complaint they have using programming companies is the fact they don’t get the source code. Some dealers feel like they are paying the same price for the same programming work to be done on different jobs. So a programming company can program a system once and not give the client the code then charge the same price for a different job which is almost 100% the same. AMX has a developer conference each year for AMX VIP’s (Valued Independent Partner Developer). Most of the time I have declined to go to those events but last year I decided to go just this once. One of the questions that was asked of the AMX senior management team was how often they get calls from A/V dealers and/or clients about not having the source code. AMX said they get multiple calls every month from both clients and dealers not having the source code.
No doubt some programming companies’ revenue comes from manufacturing companies and Audio/Video dealers willing to pay for the same thing over and over again.
Give Me My Source Code
So why do some individual programmers and independent programming companies hold back on some or all of the source code? There may not be just one answer to that question and the answer may depend on the company. If you are one of those programming firms with several programmers and you have a large collection of modules, then they may be getting paid for holding the source code as ransom and making the client pay over and over for the same thing. Is repeat business being achieved from offering great service, great price and doing what you say you’re going to do or is it from holding the source code as ransom? How is the repeat business being achieved?
Ask yourself these questions… How many Audio/Video owners reading this article have asked
“Why does my company keep paying the same price for programming the same type of code over and over?”
“How can I grow my business if I’m paying the same price for the same thing over and over again? This is not efficient!”
If you are a manufacturer representative from AMX or Crestron, then ask yourself.
“How many times have Audio/Video dealers complained to us about source code or programming prices?”
Are you locked into using a programming company?
Independent Programmers And Their Thoughts
Some independent programming companies believe that the source code and/or source code in modules are intellectual property. So what is motivating some companies to use the phrase intellectual property?
Over the past year, I have had several conversations with different owners of independent programming companies and here are their thoughts. I asked the Crestron CSP’s and AMX VIP’s what their opinion about source code was. One person told me, for the most part, they do not give the source code out but occasionally he would give the client the main source code. However, he would absolutely not share the source code hidden in any modules. Then he explained why he does not give out this information. The other programmer/owner said he had an Audio/Video dealer that had 100 rooms that was 95% the same code and if he gave the source code then he would only get paid for one room and not 100 rooms. I asked him what if he is just getting paid for that one room. His answer was, if the dealer is getting paid for 100 rooms then he should be getting paid for a 100 rooms as well. Then I asked a different independent programmer owner if he believed he would make a fortune from reselling these modules. This person told me “No, I do not believe I will make a fortune from modules”. He doesn’t give it out because he feels he is continually entitled to compensation for the time spent developing the code. I had discussions with other AMX VIP’s & Crestron CSP’s owners and they all had the same answer but worded a different way.
I had another question for the independent programmers (CSP’s owners): What were their thoughts on Crestron C# language? The independent programmers (CSP’s) that I’ve spoken with were extremely excited about what they can do with Crestron C# language — SIMPL# and SIMPL# Pro. I am also excited about programming in SIMPL#/SIMPL# Pro and (AMX) Java, too. But I quickly realized our level of excitement is for different reasons. Some independent programmers are looking at Crestron SIMPL#/SIMPL# Pro (C#) as a new way of holding back the source code in modules. Considering these files were a brand new file type, most Audio/Video dealers or manufactures wouldn’t even know to ask for them. They were going to use C# (SIMPL#/SIMPL# Pro) as a way to license the code so it would only run on one processor. Referring to the previous example, now the programmer could give all of the source code away and yet the A/V dealer would still need to pay him for all 100 rooms.
Get The Files And Review The Video
So what files should you get when it comes to Crestron C# ?
A CS file extension has three possible file associations but is most likely a Visual C# Source Code File. Visual C# Source Code File/.CS File Extension Source code file written in C# (pronounced “C Sharp”), an object-oriented programming language created by Microsoft for use with the .NET Framework; used for developing a range of applications, from simple desktop programs to applications for distributed environments. CS files are often edited with Visual C#, a component of Microsoft Visual Studio. But they can also be edited with a variety of other source code editors that feature syntax highlighting as well.
NOTE: When C# programs are compiled, they can then be run by the Common Language Runtime (CLR), which is included with the .NET Framework.
In the Crestron SIMPL# Pro video, you can see the CS file extension that you need. Make sure you get a copy of this when paying for advanced programming such as Crestron SIMPL# and SIMPL# Pro.
For Crestron SIMPL# and SIMPL# Pro programming, get a copy of all CS file extensions. The core motivation from some independent programmers (CSP’s/VIP’s) for not giving out source code, was not a business model but was psychology. In college, I had to take several psychology classes and I never would’ve dreamed that those classes would benefit me in programming. Mainstream programmers are a lot more open and those programmers that have engineering or software degrees have most likely been to a psychology class. Perhaps a recommendation for both AMX & Crestron is to add a psychology class to their programming training courses.
Last year a dealer contacted me on several occasions regarding a large Digital Media job. I told this dealer I wouldn’t be able to provide a quote nor could I take the job because of the timeframe. I was honored that they asked me to do the job and hopefully we would be able to work together in the future. This Audio/Video dealer asked me what he should know about working with other independent programming firms. I try to be neutral and I do not get into personal attacks or competition with other companies. So I gave the dealer basic information and told him to make sure to get a copy of the source code and the source code files that are inside of modules.
The Code Package
Don’t just get the source code! Make sure you are getting files (source code) that can be reused. Some companies and or individuals will directly or indirectly encrypt the source code to the point where you cannot reuse the code. At the least, they make it very difficult to understand what’s going on. For example, someone tells you they have a code package that includes all their basic equipment on all jobs. This is either a bad practice or they are encrypting the code. A code package should only contain the code pertaining to the equipment that is part of that job and not for any other not being used. A code package is no better with runtime or reusability just because the unused code is commented out. Individual modules for equipment should be developed and brought into the code package as a self-contained file and/or files. I was at a Crestron Masters class a few years ago and one of the programmers asked why his code always generated an error light or Messenger indicator — a MSG light. A Crestron engineer asked if there was a problem with the code. The programmer said, “No, the code was working great because it is our code package that we include on every job and we use logic to control the particular equipment in an equipment list.” Some programming companies and individuals are using code packages to save money on programming and they are wrapping the code package inside wrapper code. So you don’t actually get the source code and/or you get source code for equipment that does not exist.
Adding additional code can result in runtime errors and for the client an example of a runtime error would be the need to push the same button more than one time. Has a client ever told you “I push the button once some times and it works but other times I have to push the button twice to get the system working”?
A few months later the same A/V dealer who asked me about the Digital Media job contacted me again and told me they had hired an independent programming company. The programming company had completed the job but there was a problem. I did not know it at the time but the A/V dealer wrote my recommendations into their contract agreement for source code. This dealer told me that the third-party programming company was only going to give them the source code if they signed an agreement saying that it would be used nowhere else except for that job. On their website, the third-party programming company states that any job they do is subject to a usage clause. They provide quotes based on conditions listed on that website. Perhaps the programming company (online) license agreement was not that visible from their main website. So you have a programming company that is supported by AMX and/or Crestron and you have a contract agreement for the source code. But still some A/V dealers do not get any source code and others might get source code that they cannot support. For this A/V company and many others in a similar situation, signing a license agreement did absolutely no good. Because when the job was completed, they still would not give the source code unless the dealer signed an additional agreement saying that it was not going to be used or given out anywhere else. This is one of the major concerns that I have with signing open-ended agreements and license agreements for code. For this reason, I believe the best approach to handling source code is open source code. All of the custom code that I develop (source code), I do so in the hope that it will be reused and save my clients money in the future. I (Code Creative XL) allow custom code to be open source and I do not design the code in a secret encrypted way. This Audio/Video dealer had a rock solid contract but still had to hire an attorney for breach of contract because of the (CSP/VIP) programming firm would not give the A/V dealer the source code without conditions. The A/V dealer told me that their attorney said they were fortunate to include all source code and source code in modules must be provided into their license agreement. Three years ago, a different A/V dealer told me that they had to get an attorney involved to get their source code but the code they finally received was written in a way in which they could not reuse the code or make changes to it.
So by the time you get an attorney involved for breach of contract, the code you get may not be worth the attorney fees. Allowing the code to be treated as open source code eliminates so many problems. But just saying it is open source does not mean anything if you are programming the code in a way that is difficult to support.
Your VOTE is your VOICE…vote now
For the past three months I have been running a polling about source code. Over a thousand have voted in the Source Code Revealed polling. If you haven’t voted please take a moment to vote.
Given intense competition for A/V programming talent (AMX & Crestron), can your company really afford to lock up its code behind proprietary licenses and intellectual property? When paying for source code there are major differences between ownership, licensing, and open source. Whether you are an industry expert or not please give your opinion on what you believe is the right thing to do. If you paid for A/V programming should you get the source code?
There are several applications that generate code for you from manufacturing companies such as: AMX, Crestron, Control4 and Savant. Those applications may save your company thousands of dollars on programming costs and cut the programming time but it does not replace the need for having all of the source code. Whether it is not receiving the source code from a programming firm or one of the above manufacturing companies (using a code generated application), you should always have the source code for your clients. Just because your module (in some cases, a custom module) comes from AMX or Crestron, you should still have the source code for that module. AMX and Crestron have many modules that give you the source code but they are still many more they have developed that they don’t give you access to. A manufacturer such as AMX and Crestron may have other reasons why they don’t provide you that source code. It could be because they may have signed license agreements with other manufacturing companies preventing them from giving it out.
AMX or Crestron Leave A Comment
AMX and Crestron are famous for having no official opinion when it comes to source code for custom code. I have been told that both companies suggest that an agreement should be worked out in advance for that code. Working out an agreement in advance did not help the Audio/Video dealer in the example I mentioned. One could assume that AMX and Crestron opinion is based on part because they do the same thing with custom A/V code for modules.
There is definitely a difference between AMX and Crestron regarding their use of source code in modules.
Which company do you believe is more open when it comes to source code in modules that they create? AMX or Crestron, please leave a comment.
When I say that you should get the source code for modules and the main code, this has nothing to do with the firmware for equipment. Obviously, the firmware for manufacturers’ equipment should not be open source. Some programmers use the example that Microsoft doesn’t give you the source code to Windows. But Windows is more similar to the firmware in equipment then it is to custom code. Having the A/V source code is more than just a backup for a particular job. It gives your company the ability to add and remove equipment. Also, having good source code allows the code to be re-written (not reprogrammed) to other platforms.
Software reusability more specifically refers to design features of a software element (or collection of software elements) that enhance its suitability for reuse.
I don’t know how many times I’ve taken code that was written in AMX and transcoded it to Crestron or vice versa. Even code that’s written in Apple Objective-C can easily be rewritten to work on a different system. Some programming companies and individuals will say anything to hold on to their intellectual property and your source code. Whether it is malicious statements or saying they need to keep the source code for support, those are just excuses. Malicious statements are at best not professional and giving the source code does not prevent someone from downloading the original code to a processor for support. I believe the source code should be given to the client but I do understand some of the reasons why programming companies are reluctant to give it up. Especially when you are a larger programming company with several employees and you have to consider paying their salaries.
The keys for good source code are: readable, easy to understand, and that it follows programming standards. It starts with getting the source code. I hope you have found the Source Code Revealed article informative. Please share this article in order to spread awareness regarding A/V source code and help others on future jobs.
Thank you for taking the time to read Source Code Revealed.
If you have any questions about the Source Code Revealed article, please leave a comment.
Why should an A/V company choose a small programming firm over a programming house with many programmers?
In most situations, when you come across an audio/video programming firm that is recognized as both a Crestron CSP and AMX VIP, you can expect quality. But if you’re choosing one of those companies that have several programmers within their organization, then who is really programming your job?
For this article a programming house will be defined as a programming company that is part of AMX VIP’s and/or Crestron CSP’s program and that has more than one AMX/Crestron programmer.
Maritime Helicopter Training Center Facilities Operations Manager/Safety/ Security & Technology Control Officer
Thank-you Michael for this very informative article. We are looking at replacing CHRISTIE DS26 projection system (managed via CRESTON controls) with high fidelity inter-active LCD/LED displays and have been concerned that the vendor was ignoring request for source code. This will be of benefit to project team.
Account Executive at Robert Half Technology
Secure Emerging Technologies
“Thank You Michael for all of your assistance and advice.”
What’s the cost of Source Code you don’t own or can’t modify. Think about it because it’s a huge problem in the A/V Industry!
MS network consultant Sr IT engineer
“Awesome article thanks for the info”
Great article “let the buyer beware”, Unfortunately most end users do not know that they need to have there code to make any changes or is it a way of them being tied to the installer/programmer, just a thought…