3

I'm looking for a term to describe a certain thing related to software development and the word that came to mind was to call it a "deployment" but I'm not sure if this is the correct term. Here is what I want to describe:

I'm writing a piece of software that consists of two parts: a (larger) common core and (smaller) customer-specific part. When I want to ship it to a customer I need to combine the core with the customer-specific addition. What do I call this combined "thing"? I ruled out a few terms that might be used in this context because they don't quite fit and/or are already in use to describe other things:

Version

A version, to me, the state of the software at a certain point in time. I might release a new version to the same customer because I fixed bugs/added features/ etc.

Variant

This comes closer but I would use it rather to describe different feature sets that I want to provide.

Release

I'd like to reserve "release" for release versions of the core. So I would say something like "We use release 1.2.0 for customers X,Y and Z." or "Customers A and B just upgraded to release 2.0.1". This is irrespective of the customized part that is shipped to each individual customer.

Then I thought of "deployment" but all the sources I found online use that term to describe the process of deploying the software to the customer, not the customized piece of software itself. Can the term still be used in the way I described or is there maybe a different term that is commonly used for this purpose?

7
  • Are you needing this term for documentation or legal purposes? Aug 30 at 21:39
  • 1
    @TimR Just for documentation and communication purposes. Having a clear terminology helps avoiding ambiguity and misunderstandings.
    – Ulli T
    Aug 31 at 6:25
  • If you need the name to make clear that your software package is comprised of a "core" that all customers receive and a separate library which provides "custom" (AmE) or "bespoke" (BrE) functionality, there is no one single term that does so. You will have to say that with words. The terminology of software release and versioning could apply to each of those pieces, separately. A customer could be on version 1.0 of the Core and version 1.3 of their custom/bespoke library. Aug 31 at 10:46
  • This is more a question about jargon than English. Jargon is industry-specific, and those who work in the software industry may use different terminology to those who are end users. This is why you have such a broad range of answers. I stand by my own answer despite the downvotes which are, I'm sure, from persons rabid about software development rather than knowledgeable about everyday English language. You might be better asking this on a SE site with a software development focus.
    – Astralbee
    Aug 31 at 18:04
  • @TimR I have also identified the presence of a library in this setup, but I identify the "common core" as the library. (Library is the part that tends to change less, or does not change at all. Just a drop-in thing, plug-and-play, demands hardly any attention. Thats's a library.) (Even if by volume, it —somewhat untraditionally— surpasses the custom part.)
    – Levente
    Aug 31 at 18:33

9 Answers 9

8

The "whole thing" is the customized software package.
("Customization" is to make a modification that is unavailable through out-of-the-box functionality).

Deployment is the the process for installing the software to the target environment.

A software package is an application program developed for sale to the general public. Packaged software is designed to appeal to a large audience of users, and although the programs may be tailored to a user's taste by setting various preferences, it can never be as individualized as custom-programmed software.

A custom software is specifically designed and programmed for an individual customer.

9
  • 2
    "Customized software package" isn't a term of art in the software industry, but "package" might be a good option. Android and Apt talk about distributing software as "packages" en.wikipedia.org/wiki/APT_(software)
    – bjmc
    Aug 30 at 11:38
  • 1
    @bjmc I was gonna say that "customized software package" is a bit of a mouthful and that "customized" doesn't need to be explicitly stated since it's the default case for me. So "package" or maybe "customer package" seem like good options.
    – Ulli T
    Aug 30 at 11:45
  • 1
    I guess this is splitting hairs, but I don't think any those links illustrates "customized software package" as a compound noun. Obviously we package software, and we can customize it, so the concept is clear, but it's not a noun in recognized use. Consider the difference between a prime minister and a prime location.
    – bjmc
    Aug 30 at 13:06
  • 2
    I have to disagree strongly with PCMag's definition here. "Package" is very much a term of art with a very different meaning today. Their definition would better fit the phrase "packaged software", though that phrase, like the concept, is nearly obsolete. (Like PCMag! rimshot) Aug 30 at 21:46
  • 2
    The problem with this answer is that "package" means one thing to software developers, another thing to those working in deployment, and something different to end users. It's liable to cause confusion.
    – Astralbee
    Aug 31 at 18:07
6

This is a tricky question because it's somewhat technical and different companies or organizations may prefer different jargon.

I think "deployment" makes sense, especially if you are putting the combined pieces together on some server where the customer can access the software.

Two other options you might consider:

"Release":

refers to a specific named or numbered version of published software. For example, the first published version of a product may be called the initial release. Future releases of related products may be called the second or third release or may have another release number.

"Build Artifact" (or simply "Artifact"):

In short I'd say: Environment + Compiled output = Artifact

This could be a good and accurate term for internal communication, but I would suggest avoiding "artifact" in communication with customers because in non-technical usage it has a connotation of something ancient and historical (not how you want customers to feel about your shiny new software).

This question might be related.

4
  • 2
    I thought of "release" but it is also already occupied, see my edit. Maybe I could distinguish between "core release" and "customer release". If there is no well established terminology then I guess it's ok to create some internal convention and go with that.
    – Ulli T
    Aug 30 at 11:31
  • 1
    You could use "version" for the Core software and "release" for a specific customer-targeted release. I don't think there's any industry standard for this particular case.
    – bjmc
    Aug 30 at 11:35
  • 2
    Consider also "package", see the sibling answer: en.wikipedia.org/wiki/Package_manager
    – bjmc
    Aug 30 at 11:39
  • 2
    I think I'll go with "package". It's descriptive and since I work on embedded software, there's not too much baggage with this particular term in this domain
    – Ulli T
    Aug 30 at 12:03
4

One term I can think of is distribution. Quoting Wikipedia:

A distro is a collection of software components built, assembled and configured so that it can essentially be used "as is". It is often the closest thing to turnkey form of free software. A distro may take the form of a binary distribution, with an executable installer which can be downloaded from the Internet. Examples range from whole operating system distributions to server and interpreter distributions (for example WAMP installers).

Common uses of distro and distributions are usually for operating systems (Linux distros like Debian, the Berkeley Software Distributions aka BSDs, etc.). However, it's also applied to other software, and one famous example os Kubernetes. Kubernetes is composed of a huge set of components, and many (all?) of those components can be swapped with with others that support the relevant APIs. Most people don't install or use Kubernetes as-is, but use the certified Kubernetes distributions.

5
  • To me Distro would suggest that each client obtains an identical starter kit of the software from the vendor, and then it's them, the clients who carry out the customization according to their needs. OP's case is different: the clients don't seem to have a library of components to chose from and to install themselves. Also, the customer-specific part does not appear to be comparable to a module. In those customer-specific parts, it seems that OP is is writing one-off, unique pieces of source code, custom-tailored for the needs of each clients.
    – Levente
    Aug 31 at 11:08
  • 1
    That's definitely true for OS distros, but for k8s, or to take another example from Wikipedia, WAMP, people are usually just installing Rancher or XAMPP and then changing some configuration values, instead of swapping out components. That's often the point of that distribution - that you'd have a desired set of components already configured to work with each other and you just need to set some user-specific variables and so on.
    – muru
    Aug 31 at 11:18
  • Looking around in this thread —while putting myself into OP's shoes— I would say, this is the one that fulfills best the semantics, and is additionally fit for being communicated with the client.
    – Levente
    Aug 31 at 21:49
  • Or combine the two answers and get "distribution package"
    – BWhite
    Sep 1 at 5:51
  • It's not a distribution, because it isn't being freely distributed. Although Linux distros, for example, are customisations of a base code, they are packaged and made available for distribution. Also, Linux distros are recognisable as unique packages in their own right. In this case, it seems the OP has written some bespoke code for a particular customer, so it is not distributable. Further, there is nothing to suggest that it will be recognisable as a new package in its own right - it will still be the base product with some additions.
    – Astralbee
    Sep 1 at 7:50
2

Others' suggestion of "Bundle" appears fitting.

But if you want something less funny sounding, I offer: "Instance".

"Instance":

  • allows for the presumption that each instance is unique,
    • without imposing any expectation/explanation regarding how that uniqueness came to be.
  • It also signifies that it's a physical installation on a computer somewhere (whether this emphasis is welcome or not).

Also,

  • "version" is out, because version means a marked state in a sequence of mutations (including refactors and bugfixes that don't alter, rather, improve or restore intended functionality), and
  • "release" is out because a release is a just a version that is marked for special attention (signifying fitness, or explicit endorsement, for deployment (due to the given version's stability, or a degree of feature-completeness)).

Update: specific to client-communication

Now I find that "Instance" is describing the thing from your perspective.

But you mentioned that you also want to use this term in client communication.

I find it quite possible that you don't want to put special emphasis on the circumstance that each of your clients are buying a common core that is replicated in many other client's properties.

While having a common core is not simply a normal and sensible thing, but the only sane solution in contemporary software development, you may still decide whether you want to use a term that reminds your clients about that every day, or not.

The thing about the common core might be something that needs a mention in the "terms and conditions", but not necessarily in the primary identity of your offering.

With this consideration in mind, I would suggest:

"The software", or "The application".

3
  • In my experience "instance" refers to a running service, for example a company might have an instance of a certain software package running in each major location, or a software-as-a-service development company might have a dev instance, a qa instance, and a production instance of their product, as well as customized or dedicated instances for big customers.
    – arp
    Sep 1 at 1:12
  • @arp does that have to do with microservices?
    – Levente
    Sep 1 at 1:31
  • not necessarily, though certainly a distributed system might have scalably multiple instances of each microservice.
    – arp
    Sep 1 at 1:36
2

There are two hard things in computer science...

For what it's worth, you may have more luck on https://softwareengineering.stackexchange.com/ . It's crammed with people who care deeply about this stuff.

I think I'll suggest "bundle". Maybe it's formally "customer bundle" but that's probably not necessary. Of course it's a little vague, but that'll be OK as soon as everyone's using it as jargon. It does have some use already as a term of art - especially in the web front-end world. There it usually refers to an accumulation of various layers of software (frameworks, packages, site-specific code, and even sometimes content). They're all piled together, sometimes compressed or massaged in some way, into a single thing that can actually run in a web browser. That sounds pretty similar to your situation and I doubt it'll cause cause confusion unless your team is also developing web front-ends.

I agree that "version" and "release" already have distinct, useful meanings. I like "variant" fine but if you want it for an orthogonal concept, so be it. For purposes of my answer I'll call your concept the "thingy" - obviously you shouldn't.

"Deployment" isn't right either - you might "deploy" a new "version" of your "thingy" to the same customer multiple times. Each one is a "deployment".

I wouldn't use "package". I'm surprised to hear that it doesn't come up often in your embedded world but I'm betting that's only a matter of time. In much of the software world, a "package" is a pile of code (and possibly other resources) that is specifically intended to go together, be shared by other code, and is not necessarily a final, usable application by itself. I routinely say things like "I've updated the Microsoft packages to the latest version". My code hasn't changed, but I've changed some settings or issued some commands to use new versions of code Microsoft (e.g.) has written. In many organizations, your "Core" would be a package, to be used by other teams.

I agree it's better to user descriptive two-word term as some others suggested, rather than an already-overloaded single word. I like "customer package" a lot better than "package". You can also always use an acronym (ideally it isn't itself overloaded with other meanings. Bonus points if its pronounceable).

5
  • 4
    "is NOT a final, usable application by itself" - I disagree with this as an emphatic statement. There are plenty of examples where "packages" are usable applications. For example, Android apps are distributed as APK (android package kit) files. Debian's package repository contains many user-facing apps. It seems like you want to describe shared libraries as packages, but that's a narrow usage and there are many counterexamples.
    – bjmc
    Aug 30 at 23:08
  • 1
    I didn't know the "two hard things" saying, thanks for sharing. I can definitely relate... :)
    – Ulli T
    Aug 31 at 6:28
  • 1
    @bjmc of course you're right some packages are themselves whole applications - I've edited to reflect that. In my world there's a distinction between a shared library and a package. A package is more deliberately... packaged. It's released by its publisher for use in a wider variety of circumstances. It's more likely to have proper documentation, maybe release notes. These days I expect integration with a package manager that helps handle versioning and larger dependency graphs. By contrast, I expect users of a mere "shared library" are more "on their own" for integration and making it work. Aug 31 at 20:04
  • I would avoid "bundle" because however it might be used in general English or within the software industry, to consumers a 'bundle' is two or more different products sold together at a discounted price. From the OPs description, the product, once both parts are installed, will only be recognisable as one application or package.
    – Astralbee
    Sep 1 at 7:53
  • There are 10 hard things in computer science: cache invalidation and avoiding jokes about binary notation
    – Ulli T
    Sep 1 at 8:11
1

It's often referred to as an "installation". The term might be used more often where the installed and configured system includes hardware, but there's no reason to restrict it to that.

Another candidate is "implementation". We used to produce generic software for supermarkets where there was a significant amount of tailoring for each customer, and we generally referred to those customisations as implementations of the generic software.

But perhaps "customisation" would be better.

0

Use "Release" when referring to software that actually gets installed for a customer. If the Core is never being installed on its own, then you should not be referring to "releases" of the Core, but you should instead refer to versions of the Core, and the Release would be the combined build of Core + customer-specific add-ons.

3
  • I believe release means various states of the same codebase throughout its lifecycle. en.wikipedia.org/wiki/Software_release_life_cycle
    – Levente
    Aug 31 at 0:51
  • @Levente I disagree. A single release may well have several different stages, but each one of those stages is not its own release. That is, after all, why it's referred to as the software release (emphasis singular) lifecycle. It's the life cycle of a single release as it moves from pre-Alpha to Gold.
    – David
    Aug 31 at 17:56
  • You have convinced me, and I have changed my vote. If you edit your answer, my currently locked vote flip should be released. :)
    – Levente
    Aug 31 at 18:11
0

What you are describing is a "bundle".

The "bundle" is something that contains a few items that are sent to the customer together.

The term "deployment" is commonly used in a slightly different context. Software is "deployed" in a server environments; the word "deployment" can describe either the periodic activity of deploying software once a day; or a particular instance of that activity (which may include the installation of the software on the first 10 servers, then to the next 100, then to the rest).

Having said that, probably the best term to use is the one that the customer is used to. For example, if your customer is running MacOS, and you are going to give them the code in a ".dmg" archive, then using the term "Disk Image" would be a good choice, since this is how the ".dmg" archives are referred to. On the other hand, if your software is distributed in the ".tar.gz" form, then a word "tarball" (less formal) or "TAR archive" (more formal) can be used.

Without the customer-specific context, the word "bundle" appears to be the closest to what you are looking for.

2
  • I agree with "bundle" very much, but not at all with the disk image and tarball.
    – Levente
    Aug 31 at 18:28
  • If the final bundle is actually a .dmg or tarball, sure. Somehow I doubt our OP's embedded software is, but maybe they have an equivalent term. Aug 31 at 20:07
-4

A bespoke piece of code that changes an already deployed application is called a patch. An application which has been customised by a patch may then be referred to as a 'patched version'.

According to TechTarget:

a software patch is a quick-repair job for a piece of programming designed to resolve functionality issues, improve security and add new features.

A patch may be different from an 'update' because it might not be intended for the entire user-base. For example, patches may fix bugs that are only experienced by certain users. Custom software patches may be created by third-parties, sometimes to add features that the developer did not intend, and sometimes to bypass security or remove features considered unwanted by a certain audience. XDA is absolutely full of aftermarket versions of proprietary software which has been patched by third parties to customise it. Some projects provide 'patchers' which are apps that apply customer patches to other closed-source applications.

6
  • A patch is a small update that attempts to fix an issue/bug. This has nothing to do with customized software.
    – paddotk
    Aug 31 at 9:10
  • 1
    This seems like a good answer for the purpose of earning the Peer Pressure badge :)
    – Levente
    Aug 31 at 10:56
  • @Levente no, I don't consider the people who downvote my answer to be peers.
    – Astralbee
    Aug 31 at 17:45
  • @paddotk According to TechTarget, "a software patch is a " quick-repair job for a piece of programming designed to resolve functionality issues, improve security and add new features". So it's not just a bug fix. You might be aware of projects such as Vanced which provides custom versions of Android apps such as YouTube by patching them. XDA is absolutely full of aftermarket versions of proprietary software which has been patched by third parties to customise it.
    – Astralbee
    Aug 31 at 17:49
  • 1
    Patch is a useful word, and I don't think it has to be just for bug fixes. But it's not relevant to the OP. Aug 31 at 20:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .