best way to bounding software licence to a machine/environment? [closed] - licensing

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
I need to create a software license key, and one of the requirement is to bound the key to a particular server, to avoid image duplication.
1. what is the preferred way to achieve this task (CPU, MAC, other) ?
2. Can it be achieved on virtual machines?
Extra credits for to cross-platform approaches :)

Follow the same approach as the Windows activation does. Collect the information about hardware, convert it into some sort of hash and here is your machine key.
Check here what hardware it watches:
Windows Product Activation
Windows Product Activation (WPA) on Windows XP

Please don't do anything like this: all you are doing is pissing off your legitimate customers. The bad guys will find a way around whatever you do.
The last thing any customer wants is to be up at 4:00am trying to convince a piece of software they paid good money for that, yes, it is still running on the same machine as before only the network card/ disk controller/ motherboard/ etc. has been changed.

The tricky thing is to find a unique key determined by the above, with some reduncancy. I.e. to allow that either CPU(s), MAC or harddisk is replaced, but not all of them. Actually, CPU-ID is less likely to change as MAC and harddisk, so it is more suitable. It can be acchieved on virtual machines, although virtual machines can also clone these IDs. In that case you may want to combine an active license with a single internet based server which validates the activity; this way if VM's are cloned, only one can be active.

Related

How to deploy online cinema ticketing system [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
If let's say a cinema company wants to install online cinema ticketing system which allows users to book movies tickets online, may I know that what will be the best installation strategy?
Before this online system, the customers have to go to the cinemas and buy the tickets at the counters.
During the installation process, how to make sure once a seat is booked online, the counters at the cinema branches will also shows that the seat is being booked?
Here's the options of installation strategy:
a. Direct Installation
- Changing over from the old system to a new one by turning off the old system when the new system is turned on.
b. Parallel Installation
- running the old information system and the new one at the same time until management decides the old system can be turned off.
c. Single-location installation
- trying out an information system at one site and using the experience to decide if and how the new system should be deployed throughout the organization/
d. Phased Installation
- changing from the okd information system to the new one incrementally, starting with one or a few functional components and then gradually extending the installation to cover the whole new system.
According to your opinions, which method is the best in according to the case above? Thank you!
a. Direct Installation. You do not want the problem of merging data from two different systems. Also, you have all the time in the world to set up and test the new system while the old is still running. You should know very well how to use the new system once you go live. The key is proper testing.
The question, though, is a bit vague and I am not sure that it is truly a programming question that belongs on SO.
I'd say that Direct Installation wouldn't be the best way to switch, because people would still end up turning up at the Cinema wanting to buy tickets.
In my opinion, I think that Parallel Installation would be a good choice because it would allow people to get used to the new system and settle into using it before you stopped using the old one, but you could use b, c or d.

how big would a "typical" Salesforce installation/configuration code base be, in lines of code? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I understand that "lines of code" may be not a fully accurate measurement standard because a lot of Salesforce configuration might be done through a gui. Nevertheless, for the sake of argument, let's say that either each config field manually filled out in the gui is like a line of code, or else let's imagine the configuration being done entirely in source code, if Force platforms allows it.
Well, so, how big would a typical "professional" or "enterprise" level Salesforce installation code base be? Is it like 1K lines? 10K lines? Are there many 100K and more cases out there?
You will hardly get a meaningful answer. Just as an example, one of my clients is an ISP, we've been at their enterprise instance for 5 years now and we have a code base of about 600KB (+testing code to satisfy 75% requirement) with more than 100 classes and even more pages, about 20 custom tabs, 30 custom objects and appx 150 custom fields on factory objects, all that complemented by a ton of work done on administrative customization. In contrast, their sister company operating the same business in another territory has its own instance without a single line of code, but they use it just for opportunity tracking and do their provisioning, operations, case mgmt and other stuff from different (legacy) systems.
The overall average statistics is something that salesforce only knows and they don't seem to be sharing that info. Either way you should get a trial of whatever instance you want and see what is missing in terms of your business requirements and plan accordingly.

Best practices for creating a license for a program? Tie to a hardware or just use a UUID? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I'm working with a developer who has placed his faith in a license scheme that makes little sense to me. He wants to tie a desktop application to a hardware component value, one of which is easily changed, the MAC address of the ethernet controller.
Now, I know no one likes licenses, he does want to protect his hard work and I can understand that. What can I tell him to help him out? In the very least I'd like to give him a path other than tying a license to a hardware component.
I am sure this will not convince anyone who doesn't already share my view, but I don't see any value in licensing schemes that are more complicated than a short serial number, perhaps "phoning home" so you can detect if it is being abused and disable it. If the software is moderately popular, it will be cracked, whether you invest $5 or $5 million into the licensing scheme. Put those millions toward building a product that honest people (the majority) are willing to pay for and upgrade. If more protection is needed, hopefully the application can be converted to a web service.
In one of the podcasts, Joel said something like this (I'm paraphrasing):
Just make your licensing scheme hard
enough to crack so that it's a little
easier to pick up the check from
accounting and just order another
license. That keeps those people
honest that are worth thinking about.
The rest of them are not going to give
a penny to you anyway.
Good point, I guess.
If he wants to be sure that only the licensed computer can use the software, a hardware key is one of the only options to be sure that the hardware(computer) is the same as the one the license was purchased for.
It can be easily cracked(so can anything), but it's not so easy to use two computers with the same mac address on the same network segment.
I don't see how a UUID will make a license more secure, or help to accomplish the goal of restricting one license per computer.
With licenses it depends on what the goal of the license is, having a unique license per computer may be a valid decision(although I personally don't like it), but it has to be remembered that licenses will only keep honest people honest in the end, and if someone decides to, they will crack your license scheme.
It all depends on how many users he expects and the price of his application, but in any case a mac address can be easily changed and will certainly only annoy valid users. In my opinion a standard serial will just do fine. If something shows up in P2P networks, just talk to the user to whom you issued the serial and ban it in the next release. To make a long story short, in the eye of a fraudulent user the only difference will be, if he downloads "CoolApp.v1.11.Incl.Keymaker-GroupName" or "CoolApp.v1.11.Incl.Keygen.and.Patch-GroupName".

Licencing implications for libraries and reference implementations [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
This is mostly a theoritical question, but I'm wondering what the proper way would be to accomplish the following.
Assume I have a few utilities, functions, and reference implementations that I use when building a web site for a client. Some of "my" reference code is re-used as-is, some is slightly modified. Also, as part of the agreement with the client, I agree to turn over all code and IP rights.
(I know the best answer is probably "talk to a lawyer" but really, how many lawyers are going to be versed in software licencing? I imagine I'd get better, more accurate here than picking a lawyer out of the phone book).
What sort of copyright notification and/or licencing should I include in the code I turn over to the client, if I want to be able to re-use "my" code on other projects?
Check out NOLO's "Legal Guide to Web & Software Development." It covers various contracts, license agreements, and IP ownership agreements related to software development. I have used the sample contracts as a template for a few of my agreements which are later reviewed by my attorney.
At the very least this book can help you understand what the terms, like transfer of IP ownership, really mean for you the developer.
If you turn over the "IP rights", doesn't that imply you are transferring ownership of the code? Which would mean that you can't re-use it without their permission or license, since you no longer own it?
You might want to look into revising your agreements with your clients, so that you can retain ownership and rights to your own work...

Managing multiple identical databases efficiently? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
How, if you have a database per client of a web application instead of one database used by all clients, do you go about providing updates and enhancements to all databases efficiently?
How do you roll out changes to schema and code in such a scenario?
It's kinda difficult for us. We have a custom program that writes a lot of the sql code for the different databases for us. Essentially it writes the code once and then copies it over and over again along with placing the change database commands etc. It also makes sure that the primary key identities etc are in sync when they need to be. Beyond that I would look at Red Gate's products. They have saved us more than once here. With them you can easily compare the dbs and see what is differnt. A must when dealing with multiple copies.
Use a code generator / scripting language to implement the original schema and updates to it over time.
I've used Red Gate's SQL Packager for this in the past. The beauty of this tool is that it creates a C# project for you that actually does the work so if you need to you can extend the functionality of the default package to do other things like insert default values into new columns that have been added to the db etc. In the end you have a nice tool that you can hand to a technician and all they have to do to upgrade multiple DBs is point it to the database and click a button.
Red Gate also has a product called SQL multi-script that allows you to run scripts against multiple servers/dbs at the same time. I've never used this tool but I imagine if you're looking for something to use internally that doesn't need to be packaged up you'd want to look at that.

Resources