I think the "tree falls" riddle is precisely about making one realize the exact thing you said, rather than an actual attempt at finding a yes/no answer to it.

I think an interesting distinction can be made between concepts that are linked more to the actual things covered by them and as we find out more about those things, the definition text gets updated, vs. concepts where entities can move in and out of its coverage as we learn more about them.

In case of life, you may say at the outset that dogs, humans, birds and trees etc. are alive, but rocks, clouds etc. aren't. Then your task essentially becomes like a machine learning algorithm's: you get a training set and then you have to make a model, a decision surface in some feature space that separates the yes from the no examples well enough, while still fulfilling certain smoothness etc. criteria. Of course we never do such things actually, but it's related.

When you get a new example, like a virus or prion, you have to decide on which side it falls.

The interesting question is: what happens if it turns out that one of your training examples were represented with some erroneous features? Or what if we discover some new features that could be relevant?

Do we still label those examples as animate/inanimate and update our decision surface accordingly, even if it makes the surface quite complicated? Or do we relabel them to so that we can keep the decision surface simple? Or do we keep its label and rather relabel some of its neighbors too, to make the decision surface simpler?

These are rhetorical questions, I'm trying to show how arbitrary the whole thing is. There is no "One True" label until we decide it and it's actually like an engineering trade-off decision between matching tradition/intuition and the simplicity of the definition. The former is like the training set error in machine learning, the latter is like regularization.

I think learning about CS and programming would be beneficial to philosophers as well as the other way around. Due to the required unambiguity of computer programs, many times programmers and CS people had to tackle issues like this. Philosophy is largely written in natural language, which results in a lot of ambiguity. For example, read the source code of a simple Quine (a program that prints out its own source code). You'll see code, code written in quote marks, things in quote marks escaped and nested into other other quote marks etc. I mean CS has developed concepts like currying, or variable scoping, which are very much related to philosophical issues. For example when you create and event handler, and say onMouseClick = function(){print x;} what do you mean by x, the current value of it, or the value when the event happens? Do you evaluate it now, or postpone it until the event? In natural language both sound the same, "you print x". But do you mean x as a symbol or do you actually mean the thing pointed at? Like asking "Do you think the president of the US will die in 2050?" can mean whether Obama will die in 2050, or the president incumbent in 2050.

The similarity of this to the "life" issue is whether we freeze the current meaning of "life", or we allow it to change.

So I think a lot of this confusion is just the result of not having to face these distinctions in natural language, while CS people have sorted out many of these things conceptually, in things like reification, reflection, virtualization etc. Of course it's not new, the "use-mention distinction" is well-known from earlier, but programming makes it really straightforward and obvious.